1.怎么测试一个电商平台,一般都是从哪几个方面测试
多数都可以基于软件测试的六个方向来测试,即功能、性能、易用性、可靠性、兼容性、有效性这几个方面考虑。
网图
2.怎么对一把椅子进行测试?从功能,性能,安全性,适用性方面等来测测试:
3.进程是如何被kill掉的?
(操作系统)内核检测到系统内存不足,挑选并杀掉某个进程的过程,当系统内存不足的时候,out_of_memory()被触发,然后调用select_bad_process()选择一个“bad"进程杀掉。最bad的那个进程就是那个最占用内存的进程。
4.怎么用udp协议实现tcp?
https://www.cnblogs.com/pluto-charon/p/13777837.html
如果要用UDP实现类似TCP的可靠传输,一般需要手工实现以下特征:
- 增加ack机制,确保发送到对端
- 增加seq机制,实现传输顺序华
- 增加MTU机制,确保传输有序缓冲
- 增加数据校验机制,确保传输的正确性
- 增加超时重传机制
结论有三点:
1.添加seq/ack机制(序列号,确认号)
2.添加发送和接收缓冲区,主要是用户超时重传
3.添加超时重传机制
TCP如何保证可靠传输的?可靠应该是无差错,不重复,不丢失,按序到达。
5.怎么理解测试的?
我对软件测试尤其是性能方面的测试很感兴趣,且具备一定的开发能力,希望可以通过自己的工作,尽可能早的找出软件缺陷,节约成本,更好地提升用户的使用体验。
测试是为了更可能多的发现产品的缺陷,避免上线后出现重大的问题,
来自网友:
现在不仅仅是通过手工测试来发现定位Bug,也会通过编写脚本、测试工具来完成自动化测试。自动化测试的定义:自动化测试指的是使用独立于待测软件的其他软件来自动执行测试,比较实际结果和预期并生成测试报告这一过程
来自软件测试这本书的:尽可能早的找出软件缺陷,并确保其得到修复。
6.内存泄露
https://zhuanlan.zhihu.com/p/69151763
https://blog.csdn.net/quzhongxin/article/details/45556989
含义:由于疏忽或错误造成程序未能释放已经不再使用的内存,从而造成内存的浪费。一次内存泄露危害可以忽略,但内存泄露堆积后果很严重,无论有多少内存,迟早会被占光。C和C++没有垃圾回收,我们主要关注两种类型的内存泄露:
堆内存泄露:堆内存指程序运行中根据需要分配通过malloc realloc new等从堆上分配的一块内存,完成后必须通过调用对应的 free或者delete 删掉。
系统资源泄露。
那应该怎么解决内存泄露的问题呢?
- 良好的编码习惯,尽量在设计内存的程序段,检测出内存泄露。
- 要特别注意数组对象的内存泄露。
7.tcp连接不通的问题排查
我自己想的:可以查看tcp连接的当前状态。
https://www.cnblogs.com/ryanlamp/p/9044565.html
网络不通的排查:
- 链路是否连通?
- 网卡是否正常工作
- 是否正确设置网关
- DNS工作状况
- 是否可以正常路由到远程主机
- 远程主机是否开放端口
- 本机查看监听端口
- 查看防火墙规则
网络较慢的排查
- traceroute
- iftop iftop命令类似于top命令,查看哪些网络连接占用的带宽较多
- tcpdump 抓包,tcpdump是常用的抓包工具。
8.sizeof运算符, static关键字作用下,局部变量的值为什么可以保持不变,底层的原因 (static一个局部变量)
局部静态变量的位置也是在静态存储区(跟静态全局变量一样)??
底层的原因应该就是跟内存管理有关系的:static关键字 静态变量是在全局区/静态存储区。
9.怎么做可以让代码更安全呢?
这个问题一时间找不到全部的答案,我的理解:做好防御性的编程,对于空指针等要做处理,避免内存泄露,野指针等;对于边界值要考虑周全;得会异常处理;遵守effective c++里面的一些规则:比如尽量使用const,尽量以const enum inline替换#define 确定对象被使用前已经先被初始化(比如char * p这样就不行,char* p=NULL);
枚举
10.tcp三次握手为什么不是两次或者四次?
SYN SYN+ACK ACk
自己的理解:两次的话,服务器无法确定客户端是否接受到了自己发送的。
11.http协议和https协议的区别
除了一个端口是443 一个端口是80外,主要要说以下这些:
HTTP+加密+认证+完整性保护=HTTPs
需要用到的算法:摘要算法,对称加密算法和非对称加密算法
图示:
客户端 服务器
先三次握手
------------> 加密套件列表
<----------- 选用一套 + 公钥证书
客户端验证证书后,
------------->生成一个随机的密钥后用公钥进行加密,发给服务器
<----------- 服务器端用自己的私钥进行解密得到这个随机的密钥,用于接下来的通信
(附注:公钥数字证书组成:CA信息 公钥用户信息 公钥 权威机构的签名)
补充:状态码
补充一个最新面试中碰到的问题:https协议中的中间人攻击??
中间人攻击是指攻击者与通讯的两端分别创建独立的联系,并交换其所收到的数据,使通讯的两端认为他们正在通过一个私密的连接与对方 直接对话,但事实上整个会话都被攻击者完全控制。在中间人攻 击中,攻击者可以拦截通讯双方的通话并插入新的内容。中间人攻击是一个(缺乏)相互认证的攻击。大多数的加密协议都专门加入了一些特殊的认证方法以阻止中间人攻击。例如,SSL协议可以验证参与通讯的一方或双方使用的证书是否是由权威的受信 任的数字证书认证机构颁发,并且能执行双向身份认证。
下图中所示的这种攻击方式,实际上在有公钥证书的情况下是不可行的,所以必须要确保有公钥证书
200:成功
400:请求语法错误
301:永久重定向
302:临时重定向
502:bad gateway
304:资源未修改 可使用缓存
12.给文件加上可执行的权限,搜索
文件所有者 群组用户 其他用户
chmod 777 bruteforce.sh
find / -name