快手日常实习(测开)面经
1.自我介绍
2.实习
3.晚上上线,中午发现一个严重bug,如果修复就得修改核心代码,你会怎么办
我会先评估bug的严重程度和改动风险,如果不影响主要功能,能通过关闭该功能的开关进行规避,会先采取这个措施,把风险降到最低,如果影响核心功能,我会拉会(开发、产品、运维)一起评估能不能先灰度发布,小范围内试运行,可以就灰度上线并实时监控,不可以就延迟上线
最后要事后复盘,这个问题为什么会流到快上线的时候发现,测试用例是否覆盖全面
4.join、sleep、wait方法对比
sleep:当前线程暂停一段时间,但不释放任何锁,只是让出CPU
join:让当前线程等另一个线程跑完
wait:当前线程在同步块内发现条件不满足,释放锁并挂起
5.HTTP和RPC的区别
HTTP是一种“传输协议”,强调数据如何在网络上进行传输
RPC是一种调用方式,强调如何像调用本地函数一样调用远程服务。
6.RPC的性能比HTTP高吗
RPC 通常比 HTTP 性能更高,
因为它更“轻量”、更“二进制化”、更“直连”,网络开销更小。
7.HTTP的接口可以用抓包之类的机制分析,RPC接口有哪些方式调试和分析
RPC 接口也能调试和分析,只是工具更“框架化”,很多时候要:
-
用 抓包工具(Wireshark/tcpdump)看底层数据
-
用 框架自带的调试工具(比如 gRPC 的 grpcurl,Dubbo Admin 等)
-
用 日志 + 拦截器/过滤器 打印请求/响应
-
用 网关/代理 把 RPC 暴露成 HTTP 方便调试
8.实现一个消息队列有哪些地方需要主要的?
要考虑到消息的可靠投递,通常是至少一次语义,然后通过消费者的幂等来兜底
还有顺序性(是否需要保持顺序)、性能吞吐、可扩展性、幂等性、客观测性(日志、监控、告警)
9.java有哪些并发同步的手段
语言级同步手段、JUC同步类、高层同步工具与机制、原子类、线程
10.TCP/IP四层模型
第一层:网络接口层,负责物理传输与链路通信
第二层:网络层,负责寻址、路由和分组转发
第三层:传输层,负责端到端通信,分段与重组
第四层:应用层,负责应用数据交互
11.TCP三次握手建立连接后,客户端突然离线了,服务端有什么方法可以感知他的离线
(1)在应用层上加个心跳机制,原理:客户端每隔一段时间会向服务器端发送一个心跳包,服务端收到心跳包时返回一个响应,如果连续多次没有收到心跳包,则认为客户端掉线
(2)TCP协议本身也提供一种被动检测机制,KeepAlive,原理:当长时间没有数据交互时TCP会自动发送探测包给对方,如果对方没有响应,重试几次后就会关闭连接
(3)RST(复位包)通知如果客户端异常重启后立即复用端口,新连接和旧连接冲突,系统会发送一个RST包给服务端,服务端收到后就会立即知道旧连接失效
12.进程和线程的区别
调度:进程是资源分配的最小单位,线程是CPU调度的最小单位
定义:进程是程序的一次运行实例,线程是进程中的一个执行单元
开销:进程创建、销毁开销大,线程小
影响:一个进程崩溃不影响其他进程,一个线程崩溃可能导致整个进程崩溃
资源:进程拥有独立的内存空间和系统资源,线程是共享进程的资源
13.如何理解进程是独立的内存空间、线程是共享的
当运行一个程序,系统会为他创建一个进程,这时操作系统会在内存中划出一块专属区域只属于这个进程,每个不同的进程都有自己的专属区域且互不干扰,这个区域里有代码区、数据区、堆、栈,同一个进程内部的多个线程可以共享该区域里的资源
14.什么时候选多进程什么时候选多线程
多进程更安全稳定,但是资源占用更高,适合CPU密集型任务
多线程更轻量、快速,但风险高,适合IO密集型任务
15.算法题
给你一棵根为 root 的二叉树,请你返回二叉树中好节点的数目。
「好节点」X 定义为:从根到该节点 X 所经过的节点中,没有任何节点的值大于 X 的值。
16.如何知道当前HTTPS用了什么加密算法
可以在浏览器安全详情里查看当前 HTTPS 连接使用的 TLS 版本和加密套件;也可以用 openssl s_client -connect domain:443 命令行查看 “Cipher” 项;从套件名称就能拆出密钥交换算法、对称加密算法、认证算法。也可用专门的扫描工具查看服务器支持哪些算法。
17.Linux命令
输出家目录下的a.log包含error字符串的倒数第三行和第五行
grep "error" ~/a.log |tail -n 5|head -n 1 && grep "error" ~/a.log |tail -n 3|head -n 1
