阿发聊测试 · 面试实战
看完这篇Linux面试稳了!
高频考点+实战问答+速查手册测试人必备的Linux面试武器库
你好,我是阿发。
最近有好几个粉丝私信问我:阿发,测试岗面试总是被问Linux,我只会几个cd、ls命令,面试官深挖就懵了。怎么办?
说实话,Linux是测试人绕不开的坎。不管你是做功能测试、自动化、性能还是测开,面试官都会问上几嘴。有的是基础命令,有的是系统排查,有的是网络问题排查。
这篇文章我把测试岗Linux面试的高频考点全部整理出来,每个考点都附上面试官在考什么、怎么回答、加分技巧。看完这篇,下次遇到Linux面试题,直接把答案甩回去,稳了。
很多人说Linux面试就是考命令,背命令就行。错。面试官考的是你用Linux解决实际问题的能力。命令只是手段,解决问题才是目的。
| |
|---|
| |
| 进程管理、内存监控、磁盘使用——排查系统问题的能力 |
| TCP/IP、端口、防火墙、路由——定位网络问题的思路 |
| |
记住:面试官不会问你"这个命令的参数有哪些",而是会问"线上服务挂了,你怎么排查"。你要做的是把命令组织成解决问题的思路。
基础命令是入门门槛,面试官会通过你对基础命令的掌握程度,判断你是否真的用过Linux。以下是高频考到的基础命令及答题要点。
Q1:如何查看一个文件的内容?不同方式的区别是什么?
参考答案:
· cat:直接输出文件内容到终端。适合小文件
· head -n 10:查看文件前10行。适合快速预览
· tail -n 10 / tail -f:查看后10行 / 实时跟踪新增内容(查日志神器)
· more / less:分页查看。less更强大,支持上下翻页、搜索
· vi / vim:编辑器模式。不仅能看,还能编辑
加分技巧:
重点说 tail -f 查日志 和 grep + tail 组合查特定日志,面试官一听就知道你干过活。比如:
tail -f app.log | grep "ERROR"
参考答案:
基本用法:grep [选项] 模式 文件
常用参数:
· -r:递归查找目录下所有文件
· -i:忽略大小写
· -n:显示行号
· -c:统计匹配行数
· -v:反向匹配(排除指定模式)
加分技巧:
说一个实战场景:查代码中所有TODO注释:
grep -rn "TODO" /project/src/
Q3:如何修改文件权限?chmod和chmod的区别?
参考答案:
chmod:修改文件的读写执行权限
· 数字方式:chmod 755 file(rwxr-xr-x)
· 符号方式:chmod +x file(添加执行权限)
权限数字记忆:4=读(r)、2=写(w)、1=执行(x)
权限分三组:所有者、同组、其他用户
加分技巧:
说一下 chown 是修改文件所有者的命令,常见场景:部署后修改日志目录权限让应用可写:
chown -R appuser:appgroup /var/log/myapp/
参考答案:
sed:流编辑器,用于替换、删除、插入文本
· 替换:sed 's/old/new/g' file
· 删除空行:sed '/^$/d' file
awk:文本分析工具,用于格式化输出、统计计算
· 格式化输出:awk '{print $1, $3}' file(输出第1、3列)
· 统计:awk '{sum+=$2} END{print sum}' file(求第2列的和)
加分技巧:
举一个测试场景的例子——统计接口调用次数TOP5:
cat access.log | awk '{print $7}' | sort | uniq -c | sort -rn | head -5
系统管理是面试必考项,面试官会通过你对进程、内存、磁盘的理解,判断你是否具备系统问题排查能力。
Q5:top和ps有什么区别?怎么看进程的CPU和内存占用?
参考答案:
ps:静态查看进程快照。常用:
· ps aux:查看所有进程详细信息
· ps -ef:标准格式查看进程
top:动态实时查看系统资源。类似Windows任务管理器
· 默认按CPU占用排序,每秒刷新
· 可以按内存排序:按M键
· 可以指定进程看:top -p PID
加分技巧:
说一个排查场景——发现某个进程CPU持续100%,用top定位PID后,用strace或perf看在做什么。重点说 top -Hp PID 看进程内线程的CPU分布,定位死循环线程。
参考答案:
查看内存的命令:
· free -h:查看整体内存使用情况(总内存、已用、可用)
· top:实时看每个进程的RES(物理内存)和VIRT(虚拟内存)
· cat /proc/meminfo:查看详细内存信息
swap:交换分区,当物理内存不足时,系统将部分不活跃的内存页换到磁盘上
· swap的作用:防止OOM(Out Of Memory)
· swap的代价:磁盘IO慢,性能下降
· 生产环境建议:swap设置为物理内存的1-2倍,但如果swap使用率超过30%就要警惕了
加分技巧:
说一下内存泄漏的排查思路:用valgrind或LeakSanitizer检测,长时间监控进程的RES内存是否持续增长不释放。
参考答案:
查看磁盘的两个核心命令:
· df -h:查看每个分区的使用情况(容量、已用、可用、使用率)
· du -sh 目录:查看某个目录的大小
磁盘满了的排查步骤:
1. df -h 找到满的分区
2. du -sh /* 逐级排查大文件/大目录
3. 常见元凶:core dump文件、日志文件、临时文件、Docker镜像
4. 处理:删除大文件、清理日志、扩展磁盘或迁移数据
加分技巧:
说一下 du -sh /* | sort -rh | head -10 查找最大的10个目录。还有 find / -size +100M 找大于100M的文件。
Q8:kill命令怎么用?kill -9和kill有什么区别?
参考答案:
kill:发送信号给进程。默认发送SIGTERM(信号15)
· kill PID:发送SIGTERM,请求进程正常退出(进程可以忽略)
· kill -9 PID:发送SIGKILL(信号9),强制杀死进程(进程不能忽略)
· kill -1 PID:发送SIGHUP,让进程重新加载配置
正确的关闭流程:先kill,等几秒还没关再kill -9
加分技巧:
面试官可能追问:为什么不能直接用kill -9?因为进程可能正在写文件或释放资源,直接强杀会导致数据不一致或资源泄漏。正确做法是先温和关闭,给进程时间清理。
网络问题是测试岗经常遇到的——接口超时、连接不上、服务调用失败。面试官问网络,就是看你排查线上问题的思路。
参考答案:
查看端口占用:
· netstat -tlnp | grep 端口号:查看哪个进程占用了端口
· lsof -i:端口号:更直观地显示占用进程的详细信息
释放端口:
· 找到PID后,用kill PID关闭进程
· 如果进程有父进程,可能需要杀整个进程组:kill -9 -$(ps -o pgid= PID)
加分技巧:
说一个快捷命令:fuser -k 端口号/tcp,一步搞定。但注意:先确认占用进程是否可以杀,不要误杀。
Q10:curl和wget有什么区别?怎么用curl测试接口?
参考答案:
wget:主要用于下载文件。简单直接
curl:功能更强大,支持HTTP/HTTPS/FTP等协议,可模拟各种请求
用curl测试接口:
· GET请求:curl http://localhost:8080/api/user
· POST请求:curl -X POST -H "Content-Type: application/json" -d '{"name":"test"}' http://localhost:8080/api/user
· 查看响应头:curl -I http://localhost:8080/api/user
· 显示详细过程:curl -v http://localhost:8080/api/user
加分技巧:
说一下常用的调试参数:-w "\nHTTP_CODE:%{http_code}\nTIME:%{time_total}\n" 可以输出响应码和耗时,适合接口测试场景。
Q11:DNS解析过程是怎样的?如何排查DNS问题?
参考答案:
DNS解析过程(递归查询):
1. 浏览器→本地DNS缓存→ hosts文件
2. 本地DNS缓存未命中→请求根DNS
3. 根DNS→顶级域DNS(如.com)
4. 顶级域DNS→权威DNS
5. 权威DNS返回IP→浏览器缓存
排查DNS问题:
· nslookup 域名:查看DNS解析结果
· dig 域名:显示更详细的DNS记录
· cat /etc/hosts:检查hosts文件是否有问题
· ping 域名:看是否能ping通(注意有些服务器禁ping)
前面的知识点是基础,面试官最喜欢考的是实战场景。下面是三个最经典的面试场景题,每一个都要能说出完整的排查思路。
排查思路(从外到内,分层排查):
第一步:确认问题范围
· 是所有用户都慢还是部分用户?→ 网络问题还是服务问题
· 是所有接口都慢还是特定接口?→ 特定模块问题还是全局问题
第二步:系统资源排查
· top → CPU是否飙高?哪个进程占满了?
· free -h → 内存是否不足?swap是否在疯狂换页?
· df -h → 磁盘是否满了?磁盘IO是否等待中?
· netstat → 网络连接是否异常?是否有大量TIME_WAIT?
第三步:应用层排查
· tail -f 应用日志 → 是否有异常?错误日志量是否暴增?
· 数据库慢查询日志 → 是否有慢SQL?
· 线程池状态 → 是否有线程被阻塞?
第四步:定位根因并处理
· CPU高 → 是否有死循环?是否需要扩容?
· 内存不足 → 是否有泄漏?是否需要增加堆内存?
· 磁盘满 → 清理日志/临时文件
· 慢SQL → 优化SQL/加索引/加缓存
排查思路:
第一步:确认OOM类型
· 是系统OOM(物理内存耗尽被杀)还是应用层OOM(Java堆溢出)
· 查看内核日志:dmesg | grep -i oom
第二步:系统级排查
· free -h → 内存使用情况
· top → 哪个进程占用了最多内存
· /proc/sys/vm/oom_kill_allocating_task → OOM killer的处理策略
第三步:应用级排查(以Java为例)
· -XX:+HeapDumpOnOutOfMemoryError → 自动生成堆dump
· jmap -dump:live,format=b,file=heap.hprof PID → 手动导出堆
· 用MAT/JProfiler分析heap dump → 找大对象、内存泄漏
· jstat -gc PID → 查看GC情况,是否Full GC频繁
第四步:解决和预防
· 临时:增加内存、重启服务
· 根治:修复内存泄漏代码、优化对象创建、调整JVM参数
· 预防:设置监控告警、定期审查堆内存使用情况
场景3:接口调用超时,怎么排查是客户端还是服务端的问题?
排查思路(从上到下):
第一步:确认网络连通性
· ping 服务端IP → 网络是否通
· telnet 服务端IP 端口 → 端口是否可达
· curl -v http://服务端地址 → 看TCP握手、TLS握手是否成功
第二步:区分客户端/服务端问题
· 在服务端本地curl接口 → 本地调用是否正常?→ 本地正常说明客户端到服务端的网络有问题
· 在客户端用curl直接调用 → curl -w "time_namelookup:%{time_namelookup}\ntime_connect:%{time_connect}\ntime_total:%{time_total}" → 分析DNS解析时间、连接时间、总耗时
第三步:服务端深入排查
· 查看服务端访问日志 → 请求是否到达服务端?响应时间多少?
· 查看服务端应用日志 → 是否有异常?是否有慢SQL?
· 查看服务端系统资源 → CPU/内存/IO是否有瓶颈?
· netstat -antp | grep 端口 → 查看连接状态,是否有大量ESTABLISHED或CLOSE_WAIT?
第四步:定位网络层问题
· traceroute/tracepath → 查看路由路径,是否有中间跳延迟高?
· mtr → 结合ping和traceroute,查看丢包情况
· iptables -L → 检查防火墙规则
最后给大家整理一份速查手册,面试前扫一眼就行。
| | |
|---|
| | |
| | |
| | |
| | |
| netstat / lsof / curl / ping | |
| | |
| | |
阿发说实话
Linux面试的核心不是背命令,而是用命令串成解决问题的思路。记住下面这几个套路:
· 分层排查:系统层→网络层→应用层,从外到内
· 数据说话:给出具体的命令、具体的数值,不要空泛地说"可能是XX问题"
· 经验分享:说一个你真实遇到过的案例,面试官会觉得你真干过
· 补充扩展:在基础回答后补充进阶命令或工具,如strace、perf、tcpdump,显示深度
最后
Linux是测试人必须掌握的基本功。不需要你成为Linux专家,但至少要能在遇到问题时,知道用什么工具、什么思路去排查。平时多动手,在自己的电脑或虚拟机上练一练,比背一百遍命令都管用。
关于面试辅导、简历修改、测试转型等,都可以通过公众号菜单栏添加我微信交流!需要学习资料也可以私信!