前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >金蝶测开面经分享(下)

金蝶测开面经分享(下)

作者头像
测试小兵
发布2023-03-09 15:56:54
3490
发布2023-03-09 15:56:54
举报
文章被收录于专栏:猪圈子

继上篇文章继续分享:金蝶测开面经分享(上)

进程和线程

1. 区别:

# 进程是资源分配的最小单位,线程是程序执行的最小单位(资源调度的最小单位)

#进程有自己的独立地址空间,每启动一个进程,系统就会为它分配地址空间,建立数据表来维护代码段、堆栈段和数据段,这种操作非常昂贵。而线程是共享进程中的数据的,使用相同的地址空间,因此CPU切换一个线程的花费远比进程要小很多,同时创建一个线程的开销也比进程要小很多。

#线程之间的通信更方便,同一进程下的线程共享全局变量、静态变量等数据,而进程之间的通信需要以通信的方式(IPC)进行。不过如何处理好同步与互斥是编写多线程程序的难点。

#但是多进程程序更健壮,多线程程序只要有一个线程死掉,整个进程也死掉了,而一个进程死掉并不会对另外一个进程造成影响,因为进程有自己独立的地址空间

2. 进程与线程的资源

#线程共享:进程代码段、进程的公有数据(利用这些共享的数据,线程很容易的实现相互之间的通讯)、进程打开的文件描述符、信号的处理器、进程的当前目录和进程用户ID与进程组ID。

#线程独有:栈(保存其运行状态和局部自动变量)、程序计数器。

3. 进程与线程的同步

#进程:无名管道、有名管道、信号、共享内存、消息队列、信号量

#线程:互斥量、读写锁、自旋锁、线程信号、条件变量

4. 僵尸进程

# 定义:一个进程使用fork创建子进程,如果子进程退出,而父进程并没有调用wait或者waitpid获取子进程的状态信息,那么子进程的进程描述符等一系列信息还会保存在系统中。这种进程称之为僵死进程。

# 危害:在Unix系统管理中,当用ps命令观察进程的执行状态时,经常看到某些进程的状态栏为defunct,这就是所谓的“僵尸”进程。“僵尸”进程是一个早已死亡的进程,但在进程表(processs table)中仍占了一个位置(slot)。由于进程表的容量是有限的,所以,defunct进程不仅占用系统的内存资源,影响系统的性能,而且如果其数目太多,还会导致系统瘫痪。

#处理方法:

a. 改写父进程,在子进程死后要为它收尸。具体做法是接管SIGCHLD信号。子进程死后,会发送SIGCHLD信号给父进程,父进程收到此信号后,执行waitpid()函数为子进程收尸。这是基于这样的原理:就算父进程没有调用wait,内核也会向它发送SIGCHLD消息,尽管默认处理是忽略,如果想响应这个消息,可以设置一个处理函数。

b.把父进程杀掉。父进程死后,僵尸进程成为”孤儿进程”,过继给1号进程init,init始终会负责清理僵尸进程.它产生的所有僵尸进程也跟着消失。

4. 孤儿进程

#父进程运行结束,但子进程还在运行(未运行结束)的子进程就称为孤儿进程。孤儿进程最终会被init进程(进程号为1)所收养,因此init进程此时变成孤儿进程的父进程,并由init进程对它们完成状态收集工作。(linux下,init是内核启动的第一个用户级进程,init有许多很重要的任务,比如像启动getty(用于用户登录)、实现运行级别、以及处理孤立进程。)

5. Linux命令

#"|":管道符“|”将两个命令隔开,管道符左边命令的输出就会作为管道符右边命令的输入。连续使用管道意味着第一个命令的输出会作为第二个命令的输入,第二个命令的输出又会作为第三个命令的输入,依此类推。

#grep:-v 不显示匹配上的内容;-n 显示匹配上的内容

a. grep -v down,显示不包含down的内容。

b. grep -n down,显示包含down的内容。

c. du:(disk use)显示每个文件和目录的磁盘使用空间。

d. df:(disk free)显示磁盘分区上可以使用的磁盘空间。

6. 单例模式

# 什么情况下会用到:假如有很多地方都需要使用配置文件的内容,也就是说,很多地方都需要创建 AppConfig对象的实例,这就导致系统中存在多个AppConfig的实例对象,在配置文件内容很多的情况下会严重浪费内存资源。类似AppConfig这样的类,我们希望在程序运行期间只存在一个实例对象。

#优点:速度快、在使用时不需要创建、直接使用即可。

#缺点:可能存在内存浪费

7. GET 和 POST 的区别

# GET在浏览器回退时是无害的,而POST会再次提交请求。

# GET产生的URL地址可以被Bookmark,而POST不可以。

# GET请求会被浏览器主动cache,而POST不会,除非手动设置。

# GET请求只能进行url编码,而POST支持多种编码方式。

# GET请求参数会被完整保留在浏览器历史记录里,而POST中的参数不会被保留。

# GET请求在URL中传送的参数是有长度限制的,而POST么有。

# 对参数的数据类型,GET只接受ASCII字符,而POST没有限制。

# GET比POST更不安全,因为参数直接暴露在URL上,所以不能用来传递敏感信息。

# GET参数通过URL传递,POST放在Request body中。

8. APP是用多进程安全还是用多线程安全

# 写网页(html,js,css)的,写的很随意,导致chrome渲染的时候出现bug,整个chrome崩掉,我google再nb的程序员也写不出来0 bug的浏览器,单个页面不行就算了,我越界到别人地址上了,大家一块崩溃吧,

# 插件也是参差不齐,插对了没问题,插错了不但是把自己弄坏,整个进程崩了,其他线程也别活了。

#别有用心者,我是黑客要努力的超越漏洞,我从页面a刺穿到别人的页面上(安全性问题).

#原因:多线程程序只要有一个线程死掉,整个进程也死掉了,而一个进程死掉并不会对另外一个进程造成影响,因为进程有自己独立的地址空间。

序列和反序列化

1. 定义:

# Java序列化就是指把Java对象转换为字节序列的过程。Java反序列化就是指把字节序列恢复为Java对象的过程。

# 作用

a. 序列化:在传递和保存对象时,保证对象的完整性和可传递性。对象转换为有序字节流,以便在网络上传输或者保存在本地文件中。

b. 反序列化:根据字节流中保存的对象状态及描述信息,通过反序列化重建对象。

# 总结

a. 核心作用就是对象状态的保存和重建。

CP和UDP的区别、特点

# TCP的主要特点是:

a. 面向连接。

b. 每一条TCP连接只能是点对点的(一对一)。

c. 提供可靠交付的服务(无差错,不丢失,不重复,且按序到达)(校验和、重传控制、序号标识、滑动窗口、确认应答实现可靠传输。如丢包时的重发控制,还可以对次序乱掉的分包进行顺序控制。)。

d.提供全双工通信。

e.面向字节流。

#UDP的主要特点是:

a.无连接。

b.尽最大努力交付(不保证可靠交付)。

c.面向报文。

d.无拥塞控制。

e.支持一对一、一对多、多对一和多对多的交互通信。

f.首部开销小(只有四个字段:源端口、目的端口、长度、检验和)。

采用TCP,一旦发生丢包,TCP会将后续的包缓存起来,等前面的包重传并接收到后再继续发送,延时会越来越大。

UDP对实时性要求较为严格的情况下,采用自定义重传机制,能够把丢包产生的延迟降到最低,尽量减少网络问题对游戏性造成影响。


本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-12-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Python测试社区 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 进程和线程
  • 序列和反序列化
  • CP和UDP的区别、特点
相关产品与服务
文件存储
文件存储(Cloud File Storage,CFS)为您提供安全可靠、可扩展的共享文件存储服务。文件存储可与腾讯云服务器、容器服务、批量计算等服务搭配使用,为多个计算节点提供容量和性能可弹性扩展的高性能共享存储。腾讯云文件存储的管理界面简单、易使用,可实现对现有应用的无缝集成;按实际用量付费,为您节约成本,简化 IT 运维工作。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档