普联

软件开发一面面经

完整信息

15 条问法 · 15 道题

本篇目录

岗位:软件开发

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>

排查思路:

  1. top判断是系统总体 CPU 高,还是某个进程 CPU 高。
  2. ps找出 CPU 使用率较高的进程。
  3. top -H -p查看进程内部哪些线程消耗 CPU。
  4. 根据应用类型进一步分析线程、日志或代码热点。

如果是 Java 服务,还可以使用 jstack、jcmd Thread.print或其他诊断工具查看线程栈。

场景 B:内存占用过高

free -h
ps aux --sort=-%mem | head
cat /proc/meminfo

排查思路:

  1. free -h查看整体内存和可用内存。
  2. ps找出占用内存较高的进程。
  3. 结合进程监控、内存增长趋势以及应用日志判断原因。

注意:Linux 的 used内存包含缓存等内容,不能只看 used数值就认定存在内存泄漏。

场景 C:进程崩溃

ps -ef | grep <进程名>
journalctl -u <服务名> -n 100
dmesg -T | tail -50

排查思路:

  1. 确认进程是否仍存在。
  2. 查询程序退出前的日志。
  3. 判断是否存在 OOM、段错误、依赖异常或配置错误。
  4. 必要时结合退出码、Core Dump 或应用异常栈定位。

journalctl适用于由 systemd 管理且日志写入 journal 的服务,并非所有程序都能直接通过它查到。

场景 D:磁盘空间不足

df -h
du -sh /var/log/*
df -i

排查思路:

  1. df -h判断文件系统剩余空间。
  2. du找出空间占用较大的目录。
  3. df -i排查 inode 耗尽。
  4. 结合日志轮转、缓存文件等判断空间占用原因。

如果没有真实做过,不要声称自己处理过复杂的生产故障。

面试中更适合说:

在实际工作中,我主要处理过服务启动、部署和日志方面的常规问题。

对 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

查看进程详情。

本篇目录
  1. 01
  2. 02
  3. 03
  4. 04
  5. 05
  6. 06
  7. 07
  8. 08
  9. 09
  10. 10
  11. 11
    有没有实际排查 Linux 系统异常的经验?比如分析程序崩溃,分析进程崩溃,为什么CPU占用高,分析内存使用占比这些。
  12. 12
  13. 13
  14. 14
  15. 15
    有没有实际排查 Linux 系统异常的经验?比如分析程序崩溃,分析进程崩溃,为什么CPU占用高,分析内存使用占比这些。

同作者面经

相关公司