
我投奇安信2023春招服务端开发岗之前已经把牛客和脉脉上的面经翻了个底朝天但真正坐到笔试页面那一刻还是被这套卷子的“混合气质”冲了一下算法题不算特别难可中间夹杂的安全常识题和工程向细节题明显和互联网大厂的服务端笔试题不是一个路数。这篇文章就按我实际经历的笔试题型、复习过程、编程题复盘和考后反思来写给准备投网络安全厂商服务端开发岗的学弟学妹一个参考。先说结论奇安信服务端开发岗的笔试不是纯考刷题能力它更像“服务端基础 安全素养 快速编码”三合一的综合测试。 你的代码能力不用冲竞赛水平但对计算机基础知识的覆盖面要求很宽网络、操作系统、数据库这些科目每一门都可能有题而且安全公司出题有个特点喜欢把安全视角的东西缝进通用考点里比如日志处理、权限控制、数据脱敏这些场景我后面详细讲。1. 我从“安全厂商服务端开发”这个标签读出了什么1.1 岗位JD背后的真实能力要求先看2023年春招奇安信服务端开发岗的岗位描述正常写法大家都懂参与服务端系统的设计、开发、维护负责高并发、高可用组件研发配合安全能力落地到产品。但翻译成人话这个岗位要的人其实是三种能力的交集。第一是扎实的通用服务端开发能力Java或者Go你至少得熟练一门Spring Boot、MySQL、Redis这些常规技术栈不能只是用过笔试和面试都会往深里问。第二是Linux环境下排查问题的能力毕竟很多安全产品要部署在客户的服务器上服务端同学必须能处理各种系统级故障。第三是安全理解能力不要求你成为攻防专家但至少要明白SQL注入、XSS、越权这些常见漏洞长什么样知道怎么写代码不容易引入安全风险。我用一个例子告诉你为什么这个交集很重要假设你要开发一个日志采集Agent功能是收集服务器上的访问日志再上报到分析平台。普通服务端只关心日志能采到、能传上去、不丢不重。但在安全公司你还要额外考虑日志在传输过程中会不会被篡改、日志内容会不会包含敏感个人信息、Agent本身的权限能不能被滥用。这些东西笔试不会直接写“请你设计一个安全日志系统”但会在编程题场景和选择题里绕弯考你。1.2 为什么安全公司笔试会考安全基础我一开始也有点意外投的是服务端开发不是安全研究岗为什么卷子里冒出好几道安全方向的题。后来想明白了奇安信的产品几乎都是安全产品服务端同学做的功能天然和安全强相关。你在一个客户现场部署的服务器上写接口如果接口本身有越权漏洞那就成了最讽刺的事。所以它的笔试里掺安全基础不是在为难你而是在做初筛。这部分我记得考了SQL注入的本质成因、XSS常见类型、CSRF的防御思路、最小权限原则的应用场景。题目不难属于“懂一点安全概念就能选对”的程度。但如果没有提前扫过一遍常见漏洞原理看到题可能会懵尤其是用项目经理视角去选防护方案那一类多选。这里给非安全背景的同学一个建议笔试前不用去啃渗透测试技术先把OWASP Top 10里的漏洞名字和成因记熟再看一遍常规的防御手段。服务端开发岗考安全不会让你去攻击什么东西核心是看你的安全意识到不到位。2. 笔试前我做的信息战与复习取舍2.1 从公开面经里筛出的高频考点复习前我花了大概两天时间做信息收集渠道就是牛客网、知乎、公众号还有一些求职群里的聊天记录。搜“奇安信 服务端 笔试”这种关键词能翻到2021年和2022年的零星面经虽然不成体系但足够看出趋势。汇总下来高频考点有四个区块编程题以LeetCode中等题为主偶尔出现一道偏模拟的题需要耐心读题计算机网络考TCP、HTTP、HTTPS、DNS服务端岗位尤其爱考三次握手、四次挥手、拥塞控制操作系统考进程线程、死锁、内存管理其中Linux的I/O模型是常客数据库考索引、事务隔离级别、SQL编写MySQL是绝对重点。我把这些考点整理成一个表格打印出来贴墙上后面每天复习就对着这个表打勾知识模块高频考点我的优先级数据结构和算法数组、链表、二叉树、栈队列、哈希表、二分、DFS/BFS、动态规划最高计算机网络TCP/UDP、HTTP/HTTPS、DNS、负载均衡高操作系统进程线程、死锁、内存管理、Linux I/O模型高数据库索引、事务、锁、SQL优化中高安全基础OWASP Top 10、加密解密概念、权限控制中语言基础Java/Go语法、集合框架、并发编程中高2.2 我的复习路线算法为主基础为辅确定了考点之后我在刷题和补基础上做了明确的时间分配。当时我还在准备其他几家互联网公司的笔试所以算法刷题没有单独为奇安信改变节奏保持每天两三道中等题的量重点练了二叉树、DFS/BFS、动态规划和模拟题。模拟题是很多人的盲区因为它们长得很像业务需求描述长、边界条件多笔试现场容易心态崩所以我特意多练了几道。基础部分则做了针对性补课我把自己当成面试官尝试回答一个问题一个合格的服务端开发同学在写下一个接口时应该清楚哪些网络层和操作系统层的机制顺着这个问题我把TCP连接状态机、TIME_WAIT出现原因、select和epoll的区别、线程池参数怎么定这些点重新过了一遍。后面证明这个举动很值。笔试的选择题里关于线程池参数和epoll边缘触发的问题如果没有提前复习做题时大概率只能靠猜。2.3 时间分配的教训别在冷门考点上死磕复习过程中我也走了弯路比如分布式理论知识我当时花了不少时间看CAP理论、分布式事务、一致性Hash这些内容觉得服务端开发应该会考。但实际卷子里这些内容占比非常低反而是数据库索引原理、HTTP状态码这些最基础的东西考得多。这不是说分布式理论不重要而是在笔试这个环节它的性价比不高。笔试更像是在筛基础是否扎实分布式这些内容更适合放到面试环节里去展现。现在回头看我当时最该压缩的是这些冷门考点的时间把省下来的时间拿去做两道动态规划中等题可能笔试分数还能再高一点。3. 2023春招笔试的真实题型拆解3.1 选择题部分语言、网络、操作系统的密集覆盖整个笔试的题型分布大概是单选 多选 编程题总时长我记得是两个小时。选择题大概占了30道左右覆盖的面非常广我这里列几个印象比较深的点。Java相关的题主要集中在内存模型、垃圾回收、集合类的线程安全性上。有一道题问ArrayList和LinkedList在指定位置插入元素的复杂度区别这题本身不难但它把“底层数据结构决定复杂度”这个点挖得很细提醒我复习语言基础不能只背概念。C也考了几道比如虚函数表、指针和引用的区别如果只会一门语言遇到这种题会有点吃亏。网络题里有这么一题一个Web服务同时使用HTTP/1.1和HTTP/2客户端复用TCP连接的行为有什么区别这就是个典型的“用过但没细想”的题。HTTP/1.1的Connection: keep-alive确实能让请求复用连接但真正的并发要依赖多连接而HTTP/2通过多路复用可以在单连接里跑多个请求。这种题考的就是你对网络协议有没有自己的理解而不是死记硬背。操作系统的题同样贴近实战一个Linux服务进程突然load飙高CPU使用率却不高最可能的原因是什么答案指向I/O等待但选项里混着内存泄漏、死锁、进程上下文切换开销过大每一条看起来都有道理。如果平时只会在本机敲Java启动命令没线上查过问题这题很容易选错。3.2 编程题部分两道题背后的思路编程题我记得是两道难度在LeetCode中等题偏下一点但场景包装很“奇安信”。第一道是日志处理类的任务大意是给一串包含敏感字段的日志需要把指定字段的值做脱敏处理并输出。第二道是任务调度给定任务之间的依赖关系和每个任务的执行时间要求算出完成所有任务的最短时间。两道题都不需要高深的算法第一道会字符串处理和哈希表就能做第二道要懂一点拓扑排序和优先队列。但这两道题恰好都发生在“服务端日常开发”的真实场景里这点是奇安信笔试和其他公司最大的不同。它不是在考你“会不会写一个红黑树”而是在考“遇到一个日志字段要脱敏的需求你能不能快速写出不越界的实现”。3.3 安全基础题不懂也能蒙对的几个原则安全基础题我印象比较深的是多选下面哪些做法能有效防止存储型XSS正确选项包括输入校验、输出编码、设置正确的Content-Security-Policy错误选项里混着“使用HTTPS”和“隐藏前端页面入口”。如果你不懂XSS的原理很可能看到HTTPS就觉得安全但HTTPS解决的是传输加密和XSS这种注入漏洞没有直接关系。这类题有一个通用的答题技巧凡是对输入做校验、对输出做编码、对权限做收紧的选项通常都是对的凡是只说“用加密”“隐藏入口”“加防火墙”的选项通常都是干扰项。安全问题的本质是信任边界谁的数据不可信、谁的操作可能越权这才是思考的出发点。我在考场上用这个原则蒙对了好几道不太确定的多选题。4. 编程题复盘从能跑到AC的核心细节4.1 第一道题敏感字段脱敏这道题的描述大概是输入一行日志里面包含若干字段格式类似field1value1field2value2现在要对敏感字段名的值进行脱敏输出处理后的日志。敏感字段列表由输入参数给出。脱敏规则是保留前3位和后4位中间用星号代替。我当时的第一反应是直接用正则表达式替换但很快意识到一个问题正则表达式在字段值本身包含特殊字符的时候容易出现过度匹配或匹配不到的情况。写笔试代码稳定比炫技重要所以我选择了最稳妥的做法先按分割出每一个键值对再按第一个切分键和值判断键名是否在敏感集合里是则按规则脱敏。这道题真正的坑在脱敏规则本身如果字段值长度本来就小于等于7位怎么办题目没有明确说但测试用例里一定有这种边界情况。我当时的处理是如果长度不足7位就只保留第1位和最后1位其余全部用星号覆盖。这种细节决定你能过多少隐藏用例写代码时一定要多问自己一句数据不符合常规长度时程序会不会崩另一个细节是分割顺序value里可能自带所以不能简单用split()正确做法是指定分割次数只切第一个等号。这种小坑在日常开发里特别常见笔试考的就是在短时间压力下你还记不记得这些经验。4.2 第二道题带依赖关系的任务调度第二道题是以任务调度的形式考的拓扑排序。输入有多个任务每个任务有执行时间同时给出任务之间的依赖关系比如任务B必须在任务A完成后才能开始现在只有一个执行线程要求最短的完成时间。常规做法是把依赖关系建模成有向无环图统计每个任务的入度先把入度为0的任务放进优先队列。这里我用的是最小堆堆顶是当前可执行任务里“执行时间最短的”那个每次取出堆顶任务执行执行完毕后把下游任务的入度减一如果减到0就继续入堆。整体复杂度是O((NE)logN)在笔试数据量下完全够用。为什么用最小堆而不是普通队列因为题目问的是最短完成时间在无依赖关系限制的情况下贪心策略要尽量让短任务先执行避免长任务把后续任务堵死。这个点我在考场上也犹豫了一下后来通过一个简单的反例说服了自己如果一个7分钟的任务和三个3分钟的任务都就绪先执行7分钟的和先执行3分钟的最终总耗时差别可能很大。这里多说一句写拓扑排序题务必判断题目是否保证无环。如果存在环需要输出异常标识。我印象里这道题没有考环的输入但严谨起见最好先处理。4.3 输出格式、边界条件与编译器细节编程题满分的前提是答案正确、效率达标但在笔试平台里还有两个容易丢分的地方输出格式和边界条件。我第一次参加在线笔试时因为多输出了一个空格导致全错。从那之后我养成了习惯把循环拼接的每个字符串先放进列表最后用join统一拼接这样既不会有额外空格也不会因为最后多一个分隔符挂掉。这道题我也用了同样处理方式避免了最常见的低级错误。另外笔试平台的编译器版本和本地可能有差异比如本地用的JDK 17平台跑的是JDK 8有些新语法就会编译失败。建议在输入输出的Scanner使用上尽量保守不要使用本机特有的字符集设置数据处理部分用最基础的集合类和数组。稳稳当当跑通比用新鲜语法显示自己厉害重要得多。5. 安全公司笔试里的“隐藏考点”5.1 代码安全意识写出不容易被攻击的代码奇安信笔试和普通互联网公司笔试还有一个微妙差异它会在编程题比较灵活的题目背景里给你埋一些“不安全写法”的选项。比如脱敏题如果问“下面哪种实现方式更安全”A选项是正则表达式一把梭B选项是先解析再逐字段处理C选项是直接把原始日志返回但记录到另一个文件D选项是使用低权限的专用账号来执行日志处理。正确答案显然是B和D的组合。这种题的考点不是算法而是你是否知道“输入不可信”“权限要最小化”这些安全编码原则。即使你算法功底再强如果选了解析逻辑不严格、直接把原始数据落盘的方案也会被判定为安全意识不足。我后来反思安全公司在笔试中布置这种题其实是想筛选出既有工程能力又有安全直觉的人。服务端写接口时传进来一个user参数你会不会想到越权传进来一段富文本你会不会想到XSS这些“第一反应”很难通过突击培训建立更多是平时积累的思维方式。笔试只是把这种思维方式用题目化的方式量出来。5.2 数据隐私与合规常识2023年春招的卷子里数据隐私保护的比重比我预想的高。有一道选择题问服务器日志中包含了用户的手机号、身份证号、IP地址直接存储这些信息可能违反哪些合规要求选项涉及个人信息保护法、网络安全法、等级保护、以及“没有相关规定”的干扰项。这种题如果完全没概念可能觉得“服务器保存用户信息不是很正常吗”。但实际上日志系统里保存原始个人信息是合规重灾区尤其是身份证号、手机号这类敏感个人信息通常需要加密存储或脱敏后才允许落盘。奇安信本身是做安全合规产品的公司它的服务端开发岗考这个点完全合理。对准备笔试的同学我的建议是提前了解个人信息保护法的基本要求比如告知同意、最小必要、存储期限限制、用户删除权保障。不用背法条但至少要形成概念框架清楚“技术实现”和“合规边界”是两回事。笔试里这类题只要你选的是“减小采集范围”“脱敏”“加密”“设置访问权限”这些方向基本稳了。5.3 为什么这次笔试没有考常规漏洞利用我也预想过奇安信笔试会不会考实际漏洞利用比如给一个SQL注入点让你构造payload或者给一段代码让你找出命令注入点。实际情况是完全没有。我想原因有二一是服务端开发岗不是安全研究岗笔试目的是确认基础能力而不是招募攻防人才二是漏洞利用类的题目存在安全风险笔试平台不可能公开要求候选人去攻击什么。笔试不考不代表面试不考。我在后续面试里就被问到过“如果登录接口有暴力破解风险你怎么设计防刷策略”这其实就是把漏洞防护和工程实现结合起来了。所以我的建议是笔试前不需要花大量精力去练习攻击性技术但需要理解常见漏洞的成因和防御方法因为到了面试环节安全公司一定会想办法试探你的安全思维。6. 笔试结束后的复盘与后续流程衔接6.1 考后第一时间做的事交卷之后我没有立刻松口气而是做了一件收益很大的事趁记忆还热乎把考过的题目和选项尽量完整地默写下来。我用的不是系统性的笔记方法就是在手机备忘录里快速记录零散的关键词比如“有向图任务调度最小堆”“日志脱敏保留34”“多选存储型XSS防御”。这个习惯是之前在面经帖里看到的当时觉得有点矫情但真正执行之后发现笔试复盘就是你给自己建立第一手面经库的过程。后面面试的时候面试官问“你对哪个项目印象最深”我抛出了笔试里那道任务调度题并延伸讲了我在实际项目里用拓扑排序处理依赖任务的经历面试官明显对这个话题感兴趣追问了不少细节。6.2 与面试的衔接笔试暴露的薄弱点笔试结果出来大约一周后我收到了面试通知。复盘时我看到自己在选择题里失分最多的模块是Linux I/O模型和数据库索引于是利用面试前的间隙集中补了这两块。不是所有公司都会在面试时逐题讲评笔试但你可以自己猜测失分点然后在面试环节结合项目经历主动展示你对这些薄弱点的理解。比如我明确知道自己epoll那类题不太稳就在自我介绍里主动提了一句“最近在做网络编程相关的项目对epoll的LT和ET模式踩过坑”面试官果然顺着这个话头问了下去。这一招既让面试官看到你的补课能力也让你有机会把话题引到准备好的区域。如果你发现笔试中某道编程题没AC建议考后立刻重写一遍不仅要跑通示例用例还要自己构造几个边界用例去验证。很多时候面试官会拿着你没做出来的题作为考察切入点当场让你讲思路。如果考后没有复盘遇到这种场景会非常被动。6.3 给后来者的一些实在建议结合我这次笔试的完整经历给准备投奇安信服务端开发岗的同学几条实操建议。算法这块不要盲目刷难题。奇安信春招笔试的编程题难度整体可控把LeetCode的数组、字符串、二叉树、DFS/BFS、动态规划这些标签下的题目刷扎实尤其是模拟题和场景题多练习一下。很多同学觉得模拟题没技术含量但它恰恰是考验代码完整性的重点笔试环境里最容易因为读题不细挂掉。基础理论知识要有体系不要只背结论。建议把计算机网络、操作系统、数据库三门课按照“出现问题—设计方案—优化方案”的链路复习。比如你不光要知道TCP是可靠的还要知道它怎么实现可靠不只背哈希索引和B树索引的区别还要会解释为什么InnoDB选择B树。安全公司的笔试里那些工程向题目本质上都在考察你有没有形成体系化的知识树。另外就是调整心态不要被那些从没见过的“安全名词”吓住。我考场上遇到一道关于密码存储的题问哪种方式最安全选项里有MD5、SHA-1加盐、bcrypt、明文存储。就算没接触过密码学只要想到“加盐”“自适应慢哈希”这些关键词也能选对最安全的选项。安全基础题大多数考的是常识和逻辑不用有心理负担。我还想特别提一点保持代码风格干净。笔试环境里大家输出答案往往只求通过但我建议提交前花一分钟检查一下变量命名和函数拆分。因为你提交的代码留在系统里如果面试官后续调取笔试记录清晰整洁的代码会给你加分。这是很多经验帖没提到的小技巧但在实际评审视角里确实会有存在感。最后再分享一个小体会在线笔试开始前找个安静整洁的环境提前开好开发环境把输入输出模板提前写好然后关闭所有不相关页面。真实笔试时时间压力会被无数细节放大比如网页切换、网络波动、编辑器不熟任何一个小状况都可能浪费你五分钟。我自己就是提前打开平台模拟环境刷了一遍所有按钮的位置正式笔试时几乎没用时间适应界面把全部精力都留给了题目本身。这种细节准备和刷题量一样值得投入。希望这篇复盘能帮到想投奇安信或者类似网络安全厂商服务端开发岗位的各位。笔试是个筛子但筛的不是天才而是准备充分的人。