奇安信测试工程师面试复盘:安全厂商测试岗的技术栈与考察重点

奇安信测试工程师面试复盘:安全厂商测试岗的技术栈与考察重点 聊奇安信2020测试工程师面试之前先说说我自己的背景。我在安全行业做了几年测试终端安全产品、Web安全产品都碰过也面过不少安全厂商。奇安信这家公司在安全圈子里不用多介绍终端安全、边界安全、安全服务这几条线都铺得很开产品线复杂测试岗位的职责边界也比普通互联网公司要宽。2020年那会儿我面的是测试工程师岗位整个流程走下来最大的感受是这家公司对测试工程师的要求不是单纯的“会点点点”而是要懂网络、懂系统、懂攻防基础逻辑最好还能写代码做自动化。这篇文章就把我当时的面经、准备过程、踩过的坑整理出来给打算投安全厂商测试岗的朋友做个参考。先给这篇文章定个位如果你是刚入行想转测试的新人或者已经在做功能测试但想往安全厂商跳又或者你只是想看看安全公司的测试面试到底问什么这篇都适合你。我不会只罗列面试题而是把题目背后的考察点、我自己当时的答题思路、以及复盘后发现答得不好的地方都写出来。换句话讲这不是一份“标准答案”而是一份“思考过程记录”。1. 面试准备阶段先搞清楚安全公司的测试工程师在做什么1.1 岗位定位测试工程师在奇安信这类公司到底测什么很多人投测试工程师岗位之前对安全厂商的测试工作没有概念以为就是测App、测网页。实际上差别很大。奇安信的产品线很杂终端安全产品比如天擎这类终端管理软件、网络安全产品防火墙、入侵检测、安全服务渗透测试、应急响应、甚至代码安全工具比如代码卫士这种做源码审计的产品都在做。不同产品线对测试的要求不一样但有一个共同点测试工程师不仅要验证功能对不对还要验证安全特性是否生效、是否会被绕过、是否影响系统性能。我当时投的是终端安全产品线方向的测试岗位所以在准备时就重点补了终端的知识进程、驱动、注册表、文件系统、网络连接。面试时也确实问到了不少这方面的问题。如果你投的是Web方向那就得多看Web漏洞原理如果是移动端方向就得懂Android或iOS的沙箱机制、权限模型。千万别用一套通用的测试知识点去应付所有安全厂商起码要把目标公司的产品线看一遍搞清楚你进去之后大概率测什么。这里还有一个容易被忽略的点安全厂商的测试工程师经常要跟“样本”打交道。终端安全产品测病毒查杀你就要会构造或获取测试样本测防火墙策略你就要会构造恶意流量。这不是常规功能测试的思维而是“攻击者思维”加“验证者思维”的结合。面试官问你对安全测试的理解其实就想看你有没有这个意识。1.2 简历与知识点匹配哪些技能是安全厂商测试岗的入场券我复盘了一下能被约面试简历上起作用的几块内容大概是这么几类。第一是自动化测试经验尤其是Python加pytest框架的落地项目经验这个几乎是标配。第二是Linux操作能力终端安全产品大量跑在Linux服务器上测试环境也多是Linux连基本命令都不熟会很减分。第三是网络基础TCP/IP、HTTP协议这些必须能讲清楚。第四是数据库操作至少会常用的SQL查询。第五如果你有安全相关的项目经验或漏洞案例哪怕是自己在靶场复现的都是很大的加分项。我见过不少简历写了一堆“熟悉自动化测试工具”但一问到框架源码、断言怎么写、用例怎么组织就说不清楚。这种简历在安全厂商这里很容易被识破因为面试官喜欢的不是“用过”而是“理解原理并能改造”。所以如果你还有时间准备我建议把重心放在自己动手写过至少一套完整的UI自动化或接口自动化框架并且能讲清楚里面的每个模块为什么这么设计。这比在简历上堆十个工具名有用得多。1.3 被热搜词点名的方向Linux、pytest、Appium、Jenkins技术栈准备面试的时候“linux面试题测试”“pytest测试框架”“appium自动化测试”“jenkins tessy自动化测试”“sikixix自动化测试”这些方向我基本都过了一遍后来看回头奇安信的面试题确实覆盖在这些范围内。Linux这块终端产品测试必考。我当时被问到的有查看进程的命令、查看端口占用、查看日志、grep和awk的基本用法、如何在Linux上搭测试环境等。不要觉得简单很多人平时用Windows开发Linux只知道ls和cd遇到问题就露馅。pytest这块面试官关注的是fixture机制、参数化、断言、conftest的作用域、如何生成测试报告以及如何跟Jenkins集成做持续集成。Appium作为移动端自动化工具如果面试的岗位涉及移动端产品一定会问到定位方式和等待策略。Jenkins则是测试基础设施的一部分至少得知道怎么配一个job、怎么拉代码、怎么执行测试脚本、怎么看报告。这些技能都不需要你达到专家水平但一定要有真实使用经验能讲出操作细节。2. 面试流程复盘从笔试到技术面到HR面的完整链路2.1 笔试环节基础题、逻辑题和测试设计题怎么拿分正常流程先过笔试。我当时遇到的是线上笔试大概分成三块计算机基础选择题、逻辑推理题、以及两道测试设计大题。计算机基础部分考得比较杂有网络协议TCP三次握手、HTTP状态码、操作系统进程线程区别、死锁条件、数据结构数组链表区别、排序算法时间复杂度难度停留在本科专业课水平只要认真复习过都能答上来。逻辑推理题有点像公务员行测里的图形推理和数字推理考的是思维是否敏捷。这部分没什么取巧的办法建议提前找些题目练手保持手感。重点说说测试设计大题。题目通常会给你一个功能模块比如“设计一个登录功能的测试用例”或者“给一个搜索框做测试分析”。这时候要注意面试官看的不是你列的用例数量而是你的测试思维是否成体系。我当时的答法是按功能、界面、性能、兼容性、安全、异常恢复这几个维度来拆每个维度再列具体场景。比如登录功能功能上要验证正确密码、错误密码、空密码、密码大小写、密码前后空格安全上要验证SQL注入、暴力破解防护、验证码机制、密码是否加密传输异常上要验证断网、服务器超时、重复提交。这么拆下来用例数量自然就上去了而且显得有条理。2.2 技术面从项目经验到知识深挖的过关策略技术面是我感觉最有压力的环节。面我的是测试团队的技术负责人全程没有太多闲聊问题很密集。开场是先让我自我介绍然后直接深挖项目经历。这里有个很重要的经验写简历时一定要保证项目里的每个细节都能讲清楚因为面试官会一层层往深处问。我写过一个基于pytest的接口自动化项目他就问为什么选pytest不选unittestpytest的fixture作用域怎么控制如果一个接口依赖上一个接口的返回值你怎么处理断言失败后你是如何定位是接口问题还是数据问题的这些问题如果平时只停留在“能跑”层面是扛不住的。所以我的建议是准备项目时要做到三点。第一能讲清技术选型的理由比如“选pytest是因为它支持参数化和fixture适合接口测试的复杂场景”。第二能讲清架构设计测试用例、公共方法、配置数据是怎么分层的。第三能讲清你遇到的坑和解决过程比如“接口测试中遇到token过期的问题我们是怎么通过session管理解决的”。有真实的细节才有说服力不能靠背稿子。2.3 面试流程中的隐形考察沟通表达与解决问题思路技术面试之外我觉得奇安信还挺看重候选人的表达能力和解决问题的思路框架。比如面试官会问你“如果给你一个完全陌生的模块让你在一周内完成测试你怎么做”这个问题没有标准答案但考官想听的是你的逻辑链。我当时是这么答的先找产品文档和开发了解功能搞清模块的输入输出和核心逻辑再梳理需求拆解出测试点然后搭建测试环境准备测试数据接着按优先级执行功能测试先核心后边缘最后整理bug列表并输出测试报告。这种回答不见得多出彩但至少说明我有方法。还有一类问题是发散性的比如“你觉得这个产品可能会有什么安全风险”。这时候不要慌按你已有的知识框架来说就好从输入校验、身份认证、权限控制、数据传输安全、日志记录这几个维度去分析。我在面试中就被问到过对“路径遍历”的理解这就是“奇安信 输入验证路径遍历”这个热词的由来。我当时从攻击者可能通过构造特殊路径访问未授权文件的角度说了自己的理解也讲了测试时如何设计用例去验证这类漏洞。面试官应该是满意的因为后面的问题明显轻松了许多。3. 考察重点解析Linux、数据库、自动化这些硬技能3.1 Linux命令行能力终端安全产品测试的基本功Linux这部分值得单独说因为它是安全厂商测试岗和普通业务测试岗最大的区别之一。终端安全产品经常要跑在一堆Linux服务器上做压力测试、稳定性测试、异常恢复测试不会Linux等于干不了活。我当时被问到的几个典型的题包括如何查看某个进程是否在运行、如何杀掉一个僵死进程、如何查看某个端口被哪个程序占用、如何实时查看日志文件、如何统计日志中某个关键词出现的次数。这里列几个高频命令组合建议提前练熟查看进程ps aux | grep 进程名或者用pgrep -f 进程名查看端口占用netstat -tlnp 或 ss -tlnp重点是看监听地址和进程PID实时监控日志tail -f 日志文件路径这个在排查问题时几乎每天都要用关键字过滤grep -i error 日志文件配合 -A 和 -B 可以看上下文文本统计awk {print $NF} access.log | sort | uniq -c | sort -rn这个组合可以统计IP访问次数很多场景都用得上面试不一定会让你现场敲命令但可能会问“你想怎么排查这个问题的思路”你不可能避开Linux命令。如果笔试是线上环境甚至可能会给你一个shell窗口让你实际操作。所以提前在虚拟机里练一练比临时抱佛脚强。3.2 自动化测试框架pytest、Appium、Jenkins的掌握深度自动化测试这一块是重头戏。先说pytest它基本是当前Python测试事实标准。面试官一般会顺着你的项目经历来问比如我之前写了接口自动化用例他问conftest.py文件的作用是什么fixture的scope有哪几种怎么用参数化实现数据驱动如果测试依赖外部接口但外部接口不稳定你怎么处理每个问题都不难但需要真的动手写过才能答得自然。Mobile端自动化的话热词里提到的Appium要注意如果面试岗位涉及移动端产品一定会问。Appium的考点一般集中在uiautomatorviewer怎么定位元素、webdriver和RemoteWebElement的区别、隐式等待和显式等待的使用场景、如何做真机调试、如何处理系统弹窗比如定位权限弹窗。这些细节不难但就是容易在面试中卡壳因为平时都是IDE跑通了就不管原理了。Jenkins几乎是自动化测试的基础设施面试也会顺带问。我当时被问的是如果你要把pytest用例接入Jenkins大概需要哪些步骤我的回答是第一在Jenkins上创建job配置Git仓库地址和凭据第二构建步骤里选择执行shell写好安装依赖和执行pytest的命令第三配置定时构建或轮询SCM实现自动化触发第四用插件收集pytest的测试报告并在页面上展示。这个流程讲清楚就够了关键是要让面试官知道你理解持续集成的链路而不只是听说过Jenkins这个名字。3.3 性能与专项测试测试工程师的另一条腿很多做功能测试的人容易忽略性能和专项测试但在安全厂商这块反而是常见考察点。终端安全软件有个特点它常驻在用户系统里如果占用CPU、内存过高或者拖慢了系统启动速度用户很快就有感知。所以性能测试、稳定性测试、资源占用测试都很重要。面试中关于性能测试的问题主要有怎么制定性能测试方案并发用户数怎么估算关注的指标有哪些怎么样判断性能测试是否通过。我当时被问到一个实际场景“如果安全软件扫描磁盘时导致系统CPU占用率飙升你会怎么定位和验证”我的答题思路是先用top命令确认是安全软件哪个进程在消耗CPU再用strace跟踪系统调用看它在频繁做什么操作同时结合扫描日志看是不是扫描逻辑里有死循环或者重复扫描同一文件的BUG最后通过测试报告给开发提出数据支撑比如某个函数调用次数异常偏高需要优化算法。这个问题考察的不只是性能测试能力还有问题定位能力。内存测试也是热词之一。终端软件常驻内存内存泄漏是常见的稳定性问题。测试方法一般是长时间运行、反复执行某些功能然后持续监控内存变化趋势。如果在压测过程中内存占用不断上升且没有回落趋势基本可以判断存在内存泄漏风险。这需要在测试方案里专门设计稳定性场景比如跑7x24小时。4. 安全测试思维安全厂商最看重的差异化能力4.1 从功能测试到安全测试的思维转变如何理解安全用例普通功能测试关注的是“功能是否正确”安全测试关注的是“功能是否可以被绕过”。这是完全不同的思维模式。我用登录功能举个例子功能测试会验证“用户名密码正确时能登录”安全测试则会进一步问“如果在用户名里输入OR 11能登录吗如果密码字段传一个巨大的字符串会怎样如果连续多次输错密码系统会不会锁定如果通过抓包修改返回结果能不能绕过登录”所以在安全厂商面试时最好能够主动展现出这种安全思维。哪怕你之前没有做过安全测试如果你能在回答功能测试问题时自动补上安全视角面试官就会觉得你有潜力。比如面试官让你分析一个文件上传功能你不仅可以设计正常的上传测试用例还能主动补充“我还会测上传文件的类型校验是否严格、是否对内容做了检测、上传目录是否有执行权限”等安全场景这个回答的含金量就上来了。4.2 路径遍历、输入验证和渗透测试高频安全面试知识点梳理热词里有一个“奇安信 输入验证路径遍历”我印象很深。路径遍历说白了就是攻击者通过构造类似../../etc/passwd这种路径绕过系统的目录限制读取本来不该访问的文件。这个漏洞在很多Web应用和终端软件的日志、配置读取功能里都可能出现。测试时怎么验证呢我会用合法账号登录系统找到文件读取或下载功能然后在参数里构造各种穿越路径观察响应是否返回了预期外的文件内容。如果返回了那就确认存在路径遍历漏洞。还要注意一点就是输入验证不仅是Web端的事。终端安全软件在处理文件路径、注册表项、命令行参数时同样需要做严格的输入校验。所以面试时如果问“你怎么测试一个安全产品的输入验证”可以从Web参数、命令行参数、文件配置项、API请求体这几个入口来梳理测试点。渗透测试在面试中也是一个绕不开的话题但前提是你要有合规意识。安全厂商做渗透测试一定是在授权范围内、有合同保障的面试时应该主动强调这一点测试前要签署授权书并明确测试范围测试过程中做好记录和备份发现漏洞后及时上报而不是利用。这个合规意识就像“把话说到前面”能体现职业素养避免被误读。关于渗透测试的具体分类可以从信息收集、漏洞发现、漏洞利用、后渗透、报告输出这几个阶段来答。面试官不一定需要你具备多强的渗透能力但至少要懂方法论和边界在哪里。我当时被问到“你知道哪些常见Web漏洞类型”我回答了SQL注入、XSS、CSRF、文件上传、SSRF、路径遍历等并简单说了一下原理。这个其实是在考察你的基础面是否够宽。4.3 覆盖率思维代码覆盖率与硬件测试中的ATPG逻辑聊到测试深度覆盖率是安全厂商测试团队绕不开的话题。软件测试里常说的行覆盖、分支覆盖、路径覆盖在安全产品上会更讲究因为安全功能一旦有一个分支没测到就可能留下漏洞。比如一个网络过滤规则的判断逻辑if条件里某个分支没走到某类恶意流量就可能被放行这比语法错误严重得多。所以测试方案设计时要尽量通过代码覆盖率工具如gcov、JaCoCo来辅助衡量用例的充分性。更有意思的是安全厂商的产品里很多会涉及硬件或固件尤其是芯片安全、加密模块、网关设备这些方向所以你可能会接触到ATPG覆盖率这个概念。ATPG生成测试向量用来检测芯片制造过程中的物理缺陷但它的思路和软件测试很相似在有限输入集合下如何最大可能地“激发”内部节点的逻辑变化从而暴露潜在的故障。如果你面试的岗位偏向设备或硬件方向面试官问到ATPG覆盖率最好能说清楚它跟功能和代码覆盖率的不同ATPG覆盖的是电路级的故障模型比如节点短路、开路而代码覆盖率覆盖的是软件执行路径两者不在一个抽象层级但目标是一样的——用尽量少的测试资源发现尽量多的缺陷。这部分我当初准备得不够细面试时只能说个大概方向后来复盘专门补了课。5. 常见问题与避坑经验面试中那些容易翻车的细节5.1 高频问题速查表按面试阶段整理的问题与参考思路为了让你看起来更方便我把高频问题整理成了一张表配合我的答题思路和注意点。注意这不是让你背答案而是帮你梳理准备的框架。面试阶段常见问题我的答题思路踩坑提醒笔试登录功能测试用例设计按功能、界面、安全、性能、兼容性、异常来分析只列用例不写场景显得像背模板技术面为什么选择pytest对比unittest突出fixture、参数化、插件生态只答“好用”没有对比没有说服力技术面如何测试一个安全软件查杀功能从样本准备、查杀流程、误报、性能、回滚机制展开只测正常查杀忽略误报和性能技术面什么是路径遍历漏洞讲原理、给出测试思路、说明修复建议只讲原理不落到测试设计技术面如何排查内存持续增长问题监控内存趋势、结合GC日志、定位泄漏对象不去定位根因而停留在现象HR面为什么选择安全行业结合技能背景、对安全领域的兴趣、个人发展规划空洞回答“安全很重要”没有个人叙事这张表仅做参考。真实面试时重点不在于你背了多少题而在于你能否把一个问题展开成体系化的回答。5.2 我在面试中踩过的坑与复盘后的修正方案下面是我自己面试过程中踩过的比较有代表性的坑逐个复盘给你听希望你能绕开。第一个坑是项目经验讲得太浅。我一开始讲自动化项目时基本在说“我负责搭建框架、写用例、跑回归”面试官追问“框架里的数据驱动是怎么做的”“底层用了什么机制去请求接口”我就回答得比较模糊。后来复盘发现这是因为平时写代码只求能跑不爱看源码也没有预留问题意识。修正方案是每写完一个功能都要逼自己问三个问题它为什么这么实现、有没有更优方案、如果换了场景需要怎么调整。带着这些问题去看项目讲出来才会立体。第二个坑是安全思维展示不够。我在前三轮面试里很少主动在功能测试问题里加入安全视角。直到被问到路径遍历时我才意识到安全厂商的面试官在意的不是你会不会工具而是你有没有“攻击可能性”的感知力。从那之后我调整了答题方式凡是涉及输入框、上传、下载、接口查询的功能用例我都会补充安全类的测试场景。第三个坑是Linux命令忽视了现场操作环节。我笔试前以为只要会看会理解就行结果有些题目给了具体场景让写出命令。我在现场只写出了几个常用的到“统计日志出现次数”这种就卡住了。回来后我把高频命令练了好几遍确保手写也能稳定输出。后来我总结了一句经验测试工程师面试不要只看知识点要按“能不能当场写出来”来准备。第四个坑是性能测试只是形而上地背概念。面试官问“怎么判断是否有内存泄漏”时我一开始回答的是“看内存会不会一直涨”他追问“怎么持续监测、怎么排除缓存影响”我才发现我压根没有真正跑过内存持续测试。后来我专门在Linux环境里跑了一次长期监控用top、free、pidstat和/proc/进程pid/status里的VMRSS字段组合来看才真正理解了内存数据的构成和波动原因。面试中的自信其实是靠真的做过撑起来的。5.3 关于奇安信产品线相关话题的补充天擎与可信浏览器的测试观察奇安信的产品线里天擎这类终端安全管理产品、以及面向国产系统的可信浏览器面试官在聊到业务场景时可能会顺带提及。怎么理解这些产品的测试特点呢天擎这类软件常驻在终端上测试时要特别关注安装卸载、升级兼容、与其他软件的冲突、系统资源占用和自身安全防护是否影响正常业务。安装卸载这块我多说一句企业级终端软件在卸载时往往需要管理员权限甚至会有验证码或审批流程这是为了防卸载保护机制不被恶意滥用属于安全策略的一部分不是故意为难用户。测试这类功能时就要设计正反两面的用例正常授权流程下能不能成功卸载、未授权时是不是能挡住恶意卸载、卸载后遗留文件是否清理干净、重新安装是否正常等。把这些场景测透了就能看出测试工程师对终端管理软件的理解深度。可信浏览器在国产系统上运行测试时更要关注系统适配性、CPU架构差异、兼容性、以及对Web安全特性的支持。这些产品虽然名称不同但测试思路是相通的先弄清产品要保护的核心对象是什么再围绕保护有效性、自身稳定性和用户体验三个维度去铺用例。5.4 给准备者的最后几条实操建议如果你现在准备投奇安信的测试工程师或者投其他安全厂商我给你几条最后的实操建议。第一条去翻一下目标公司的产品线选一个你最可能进入的方向提前了解它的核心功能和典型用户场景面试时如果能结合具体产品聊测试设计效果会好很多。第二条把Linux命令和数据库操作练到不用思考就能写出来的程度这是硬门槛。第三条至少准备一个自动化测试项目并且保证里面的每一个设计决策你都能讲明白为什么。第四条在回答功能测试问题时主动加一句“这个场景我还会从安全角度补充一下”展示你的差异化优势。第五条把合规意识刻在脑子里安全厂商的测试工作离不开授权和边界面试时不要提倡任何破坏性操作。这些经验不只是针对这一场面试而是我认真复盘“奇安信2020测试工程师”这个岗位之后得出的整体心得。如果能帮你少踩些坑这篇文章就值了。我在准备这个系列的时候自己感觉收获最大的一点不是背了多少题而是逼着自己把零散的测试知识重新梳理成了体系。面试过程中的每一次卡壳其实都在提醒我哪块知识是虚的。所以如果你也在准备面试不妨把心态从“应付面试”转成“借机补全自己的能力地图”。你真正掌握了的东西面试官是能感受到的。这篇是系列的第一部分后续我打算接着写测试项目实战、自动化框架搭建和问题排查的详细案例等整理好了再发出来。