软件开发一面面经
完整信息
本篇目录
岗位:软件开发
10.15上午一面
一、教育背景询问
1:你的本科专业排名是多少?
2:硕士研究方向是什么?具体做什么?
二、实习项目
1:介绍一下你实习的工作
2:实习项目的深挖(例如:AI 诊断涉及 RAG 或知识库吗?)
3:两个项目有什么技术难点?遇到问题如何解决?
4:项目涉及到数据库的开发使用吗?代码是自己写的还是 AI 辅助完成的?
三、大模型、机器学习与 RAG 项目
1:有没有大模型或神经网络开发经验?
2:准确率、精确率、召回率这些概念了解吗?他们的区别是什么?
3:RRF 重排是什么?
原始回答:
我记得应该是合并排序的问题。
好像是让它抛弃原始相似度分数,然后在召回列表里面重新排名,应该是在混合检索里面用的。
分析与优化:
你的理解其实已经接近正确答案了。
RRF(Reciprocal Rank Fusion,倒数排名融合)通常用于融合多个检索器的排名结果。
例如 RAG 采用混合检索:
- BM25:基于关键词匹配。
- 向量检索:基于语义相似度。
两种检索方法的分数通常不在相同量纲上,因此直接加权原始分数可能不合适。
RRF 不直接比较这些原始分数,而是利用它们在各个召回列表中的排名进行融合。
面试推荐回答:
RRF 是倒数排名融合,主要用于混合检索场景,例如融合 BM25 关键词检索和向量语义检索的结果。
因为两种检索方式的相似度分数不一定能直接比较,所以 RRF 不依赖原始分数,而是根据文档在各个召回列表中的名次计算融合得分。
一个文档如果在多个检索结果中都排名比较靠前,最终融合得分通常也更高。
这样可以综合关键词匹配和语义匹配的优势,提高召回结果的质量。
还要注意,RRF 是排名融合算法,并不等同于 Cross-Encoder 这样的语义重排模型。
四、论文与 Linux 工程基础
1:硕士研究方向相关的论文询问
2:平时接触 Linux 多不多?日常使用什么环境?用过 Docker、Conda 吗?
3:有没有实际排查 Linux 系统异常的经验?比如分析程序崩溃,分析进程崩溃,为什么CPU占用高,分析内存使用占比这些。
场景 A:CPU 使用率过高
top -c
ps aux --sort=-%cpu | head
top -H -p <PID>
排查思路:
- top判断是系统总体 CPU 高,还是某个进程 CPU 高。
- ps找出 CPU 使用率较高的进程。
- top -H -p查看进程内部哪些线程消耗 CPU。
- 根据应用类型进一步分析线程、日志或代码热点。
如果是 Java 服务,还可以使用 jstack、jcmd Thread.print或其他诊断工具查看线程栈。
场景 B:内存占用过高
free -h
ps aux --sort=-%mem | head
cat /proc/meminfo
排查思路:
- free -h查看整体内存和可用内存。
- ps找出占用内存较高的进程。
- 结合进程监控、内存增长趋势以及应用日志判断原因。
注意:Linux 的 used内存包含缓存等内容,不能只看 used数值就认定存在内存泄漏。
场景 C:进程崩溃
ps -ef | grep <进程名>
journalctl -u <服务名> -n 100
dmesg -T | tail -50
排查思路:
- 确认进程是否仍存在。
- 查询程序退出前的日志。
- 判断是否存在 OOM、段错误、依赖异常或配置错误。
- 必要时结合退出码、Core Dump 或应用异常栈定位。
journalctl适用于由 systemd 管理且日志写入 journal 的服务,并非所有程序都能直接通过它查到。
场景 D:磁盘空间不足
df -h
du -sh /var/log/*
df -i
排查思路:
- df -h判断文件系统剩余空间。
- du找出空间占用较大的目录。
- df -i排查 inode 耗尽。
- 结合日志轮转、缓存文件等判断空间占用原因。
如果没有真实做过,不要声称自己处理过复杂的生产故障。
面试中更适合说:
在实际工作中,我主要处理过服务启动、部署和日志方面的常规问题。
对 CPU、内存和进程异常的排查,我了解常见定位流程,例如使用 top、ps、free、journalctl 等工具,但复杂生产故障的独立处理经验还比较有限。
4:你写 Shell 脚本是为了实现什么功能?
例如:
我主要写过一些简单的辅助排查命令,用于检查目标服务的连通性、端口监听情况和进程状态。
比如服务无法连接时,我会先检查目标 IP 是否可达,再确认目标机器的服务端口有没有监听。如果是 HTTP 服务,还会使用 curl 验证具体接口是否正常返回。
5:网络排查会用哪些命令?
分析与优化:
建议至少掌握以下命令和用途:
ping |
检查 ICMP 连通性和往返时延 |
ip addr |
查看网卡及 IP 地址 |
ip route |
查看路由表 |
ss -lntp |
查看 TCP 监听端口及关联进程 |
ss -antp |
查看 TCP 连接状态 |
lsof -i :8080 |
查看使用指定端口的进程 |
curl -v URL |
检查 HTTP 请求和响应过程 |
nc -vz IP PORT |
测试指定 TCP 端口是否可连接 |
traceroute |
辅助检查网络路径 |
要特别记住:
ping 通不一定表示目标服务可访问;ping 不通也不一定表示 TCP 服务不可达。
因为 ICMP 可能被防火墙禁用,网络连通性和应用层服务状态需要分别检查。
6:如何查看端口占用?
我之前在本地部署服务时遇到过端口冲突,例如两个服务尝试监听同一个端口。这种情况下可以使用 ss -lntp或者 lsof -i :端口号查看端口被哪个进程监听,再通过 ps查看进程信息。
如果只想查 8080 端口:
ss -lntp | grep ':8080'
也可以:
lsof -i :8080
假设返回:
LISTEN 0 128 0.0.0.0:8080 0.0.0.0:* users:(("python",pid=1234,fd=5))
可以判断:
- TCP 端口 8080 正在被监听。
- 进程名是 python。
- PID 是 1234。
然后:
ps -fp 1234
查看进程详情。
本篇目录
当前问题0115
- 01
你的本科专业排名是多少?
- 02
硕士研究方向是什么?具体做什么?
- 03
介绍一下你实习的工作
- 04
AI 诊断涉及 RAG 或知识库吗?
- 05
两个项目有什么技术难点?遇到问题如何解决?
- 06
项目涉及到数据库的开发使用吗?代码是自己写的还是 AI 辅助完成的?
- 07
有没有大模型或神经网络开发经验?
- 08
准确率、精确率、召回率这些概念了解吗?他们的区别是什么?
- 09
RRF 重排是什么?
- 10
平时接触 Linux 多不多?日常使用什么环境?用过 Docker、Conda 吗?
- 11
有没有实际排查 Linux 系统异常的经验?比如分析程序崩溃,分析进程崩溃,为什么CPU占用高,分析内存使用占比这些。
- 12
你写 Shell 脚本是为了实现什么功能?
- 13
网络排查会用哪些命令?
- 14
如何查看端口占用?
- 15
有没有实际排查 Linux 系统异常的经验?比如分析程序崩溃,分析进程崩溃,为什么CPU占用高,分析内存使用占比这些。