news 2026/9/6 4:05:14

趋势科技校招开发岗笔试题解析:从编程到基础这样复习稳

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
趋势科技校招开发岗笔试题解析:从编程到基础这样复习稳

前几天一个学弟发消息问我,说手头拿到一份趋势科技2017年校招开发岗试题(B),想让我讲讲这套题怎么答、知识点怎么复习。他说现在开发岗笔试卷得很,总觉得自己准备好了,一看到卷子又慌。我看了下这套题,倒是想起不少当年自己笔试和后来帮人改卷的细节。这份卷子虽然挂在2017年,但说句实在话,它的命题逻辑放在今天也并不过时。我今天就借着这套题,把这类型笔试的考察重点、答题顺序、复习策略一次聊透。

先说这套题适合谁看:正在准备校招开发岗的同学、想进外企安全厂商的候选人、以及那些刷了很多LeetCode但觉得笔试还是答不完整的同行。这类卷子考察的东西其实很固定,不管年份怎么变,出题人想要验证的能力就那几样:编程基本功、计算机基础知识的体系化程度、以及你在有限时间内的工程判断力。把这三点想明白,复习方向就不会跑偏。

1. 拿到这份卷子,先别急着做题:先看命题人的心思

1.1 安全厂商开发岗的笔试,为什么会长这样

趋势科技是做什么的,大家多少有数:终端安全、网关安全、服务器防护,面向企业客户的那一套安全产品线。这家公司的开发岗,不是单纯写业务代码的岗位。写业务代码,你只要懂框架、懂数据库、懂接口对接,可能就够了。但安全产品的开发岗,你面对的是底层系统、网络流量、文件格式、进程行为这些东西,所以笔试考察的范围一定会往计算机基础上靠。

这就解释了为什么这类卷子的题型覆盖面特别广,从编程题到网络、操作系统、数据库、语言基础都有涉及。但它的深度并不会到竞赛级别,出题人想确认的不是你会不会奇技淫巧,而是你有没有把一个开发工程师该有的知识底子打牢。

我把这类卷子常见的考察模块整理了一下,基本逃不出这张表:

考察模块常见题型复习优先级
编程题链表、二叉树、字符串、动态规划极高,决定区分度
计算机网络TCP/UDP、HTTP、DNS、三次握手高,安全岗尤其看重
操作系统进程线程、内存、死锁、调度高,底层安全绕不开
数据库SQL编写、索引、事务中高,工程必需
C/C++/Java基础指针、内存、集合、并发高,语言功底直接暴露
逻辑与英语阅读理解、常识推理中,外企常设置

所以你看,它不是那种只刷题就能过的考试,但也不是需要你把整本《深入理解计算机系统》背下来的考试。它考的是体系,不是孤点。

1.2 这套B卷的整体印象与做题顺序

说回这份2017年的B卷。我整体翻下来的第一感觉是:题量不算吓人,但每道题都踩在关键知识点上,几乎没有送分题,也没有纯偏题怪题。程序题部分占了较大比重,基础题部分分布比较均匀,属于那种"你哪块没复习到,马上就会露馅"的卷子。

我的建议是做题顺序上不要完全按题目顺序走。先把整张卷子从头到尾扫一遍,花两三分钟判断题目的难度分布。通常的顺序策略是:先做自己最有把握的题,尤其是语言基础和简单编程题,这些是稳拿的分;然后做网络和操作系统这类需要记忆准确的知识点题;最后集中火力攻编程大题和复杂的基础题。

为什么要这么做?因为笔试的时间是固定的,但人的大脑状态是波动的。开头几分钟如果死磕一道难题,后面会越来越慌,连本来会做的题都可能出错。先把节奏稳住,把确定能拿的分拿到手,再谈挑战难题。

2. 编程题:链表、二叉树、字符串,三类题目先拿下,编程题就稳了一半

2.1 链表高频题:环、交点、反转,画图比硬记管用

校招笔试里的链表题,翻来覆去就是那几道:判断链表有没有环、找环的入口、找两个链表的交点、反转链表、合并两个有序链表。趋势科技的B卷里链表题出现的概率很高,因为它能同时考察指针操作能力和数学推导能力。

拿"找链表环的入口"这道题来说,标准解法是快慢指针。第一步,快指针每次走两步,慢指针每次走一步,如果两个指针相遇,说明有环;第二步,让快指针回到头节点,两个指针都改成每次走一步,再次相遇的位置就是环入口。

ListNode *detectCycle(ListNode *head) { ListNode *slow = head, *fast = head; while (fast && fast->next) { slow = slow->next; fast = fast->next->next; if (slow == fast) break; } if (!fast || !fast->next) return NULL; slow = head; while (slow != fast) { slow = slow->next; fast = fast->next; } return slow; }

这里的关键是理解为什么第二步能定位到环入口。假设头节点到环入口的距离是D,相遇点距离环入口是S,环的长度是L。第一次相遇时慢指针走了D+S,快指针走了D+S+nL,因为快指针速度是慢指针的两倍,所以D+S+nL = 2(D+S),化简得到D = nL - S。这个式子说明,从相遇点继续走D步,刚好走到环入口。所以让快指针从头开始,和慢指针同速前进,它们再相遇的位置一定是入口。

我见过很多同学这道题背下来了,但问一句"为什么能相遇"就卡住。笔试如果不只考写代码,可能还会让你简单说说思路。把数学推导吃透,反而比多刷十道题有用。

2.2 二叉树和字符串题,怎么答才不丢分

二叉树这边,层次遍历、前中后序遍历、最大深度、最近公共祖先,这几道是常客。字符串这边,反转字符串、最长回文子串、字符串匹配,也经常出。

我特别想提醒一点:写树的题目时,很多同学习惯直接写递归,但忽略了递归的终止条件。比如求二叉树的最大深度,代码看起来很简单:

int maxDepth(TreeNode *root) { if (!root) return 0; int left = maxDepth(root->left); int right = maxDepth(root->right); return (left > right ? left : right) + 1; }

但你要知道递归函数每一步在做什么,而不是只会套模板。面试官如果追问"如果这棵树有十万层会怎样",你要能说出递归栈溢出的风险,以及怎么改成迭代方式。这类追问在安全厂商的面试里很常见,因为他们平时处理的数据量和系统环境,可能真的不允许你无脑递归。

字符串题里,最长回文子串是一个不错的练手题。最简单的思路是中心扩展法:字符串的每个字符或者每两个字符之间的空隙都可以作为回文中心,向两边扩展,记录最长的长度。这个做法时间复杂度O(n²),空间复杂度O(n),面试场景下已经足够。不要一上来就写Manacher算法,笔试时间有限,能写出一个正确、清晰、易读的解法,比炫技重要。

2.3 动态规划和贪心,校招要掌握到什么程度

很多同学一听到动态规划就头疼,觉得它是笔试里最劝退的部分。但趋势科技这类外企安全厂商的校招笔试,动态规划考察的难度其实比较克制,不会出很难的题。爬楼梯、最长递增子序列、最长公共子序列、0-1背包,这几类属于高频,掌握它们就够应付大多数场合。

拿爬楼梯这道题举例:一次可以上1级或2级台阶,问上n级台阶有多少种方法。它的本质是斐波那契数列,状态转移方程是dp[i] = dp[i-1] + dp[i-2]。

public int climbStairs(int n) { if (n <= 2) return n; int a = 1, b = 2; for (int i = 3; i <= n; i++) { int c = a + b; a = b; b = c; } return b; }

动态规划的复习重点不在于背状态转移方程,而在于三个问题:怎么定义状态、怎么推导转移方程、怎么初始化边界。你把这套思考方式练熟,遇到新题才有自己推导的能力。说实话,这比刷一百道题更重要。

3. 基础题:网络、操作系统、数据库,能不能脱颖而出就看这里

3.1 计算机网络:从HTTP到TCP/IP,必须形成体系

安全厂商做的是网络层、应用层的东西,所以网络是笔试的重头戏。常见考点包括TCP三次握手和四次挥手、TCP与UDP的区别、HTTP状态码、DNS解析流程、IP地址和子网划分。

TCP三次握手为什么是三次而不是两次,这是每次必考的问题。核心原因是需要确认双方的收发能力。第一次握手,客户端发送SYN,服务端知道客户端的发送能力正常;第二次握手,服务端返回SYN+ACK,客户端确认了自己的发送和服务端的接收都正常,同时知道了服务端的发送能力正常;第三次握手,客户端发送ACK,服务端确认了客户端的接收能力正常。如果是两次握手,服务端无法确认客户端的接收能力是否正常,可能造成资源浪费和连接错误。

答题的时候,只背握手过程是不够的,你要能解释为什么会有三次,以及如果丢包了会怎样。类似的问题还有"TCP和UDP的区别,视频通话为什么要用UDP"这类结合实际场景的题,答题时尽量把场景和原理结合起来,比干巴巴对比优缺点好得多。

3.2 操作系统:进程线程、内存管理和死锁

操作系统这块,考得最多的是进程与线程的区别、死锁的四个必要条件、虚拟内存、页面置换算法、进程调度算法。我甚至见过有同学把进程和线程的区别背了,但一问"进程之间怎么通信",就开始支支吾吾。这套卷子里,进程通信也是一个绕不开的点。

死锁这块,四个必要条件要烂熟于心:互斥、请求与保持、不可剥夺、循环等待。对应的预防方法也很固定:破坏互斥条件不太现实,但可以用SPOOLing技术;破坏请求与保持条件,就要求进程一次性申请所有资源;破坏不可剥夺条件,就是资源可以被抢占;破坏循环等待,就是给资源编号,要求按序申请。

安全产品开发岗为什么要问操作系统?因为杀毒软件要做文件监控、进程监控,要理解系统调用和内核态用户态的切换。你连进程调度和虚拟内存都说不清,很难让人相信你能处理底层安全相关的工作。

3.3 数据库:SQL和索引原理,一个都不能少

数据库题通常分两类:一类是写SQL语句,另一类是考索引和事务的原理。SQL题里,分组统计、多表连接、子查询是高频考点。

比如这样一道常用题:查询每个部门里员工数量超过5人的部门名称和员工数。

SELECT d.name, COUNT(e.id) AS cnt FROM department d LEFT JOIN employee e ON d.id = e.dept_id GROUP BY d.id, d.name HAVING COUNT(e.id) > 5 ORDER BY cnt DESC;

这里要注意GROUP BY的写法:select出来的非聚合列,最好都出现在GROUP BY里,这在某些数据库的严格模式下是硬性要求。HAVING是在分组之后过滤,WHERE是在分组之前过滤,很多人在这里栽跟头。

索引这块,最常问的是索引失效的场景和覆盖索引。比如对索引列使用函数、隐式类型转换、like以通配符开头,这些都会导致索引失效。复习时不要只背结论,可以自己建一张表,用EXPLAIN命令看看执行计划,观察索引到底有没有生效。这种动手验证的方式,比死记硬背可靠得多。

4. 语言基础与工程能力:C/C++和Java怎么复习最有效

4.1 C/C++的考点:指针、内存、构造析构,全是细节

趋势科技的开发岗对C/C++的考察比较看重,因为Windows/Linux平台的安全产品,底层大多用C/C++写。指针和引用的区别、const的用法、内存分配方式、构造函数和析构函数的调用时机、深拷贝与浅拷贝,这些都是必考范围。

指针和引用这块,一个经典的例子:

void swap(int *a, int *b) { int t = *a; *a = *b; *b = t; } int x = 3, y = 5; swap(&x, &y);

用指针的话,函数里拿到的是变量的地址,可以修改原变量;用引用也一样能改,但引用必须在声明时初始化,不能为空,也不能改变指向。指针则可以为空,也可以重新赋值。面试时如果问"什么时候用指针,什么时候用引用",你要能说出场景:可能为空、需要重定向,用指针;想避免拷贝、又确保非空,用引用。

内存这块,栈区和堆区的区别、malloc和new的区别、内存泄漏怎么排查,也是高频。做安全产品的人对内存尤其敏感,因为很多漏洞就是内存管理不当导致的。

4.2 Java的考点:集合、JVM、并发,按这个顺序复习

如果卷子里有Java题,通常集中在集合框架、JVM内存模型、并发编程三块。HashMap的原理是被问爆的题目,底层数据结构是数组加链表加红黑树,扩容机制、hash冲突怎么解决、为什么线程不安全,这些都要能说清楚。

并发这块,synchronized和volatile的区别是常考问题。volatile保证可见性和有序性,但不保证原子性;synchronized可以保证原子性、可见性和有序性。你可以用一个经典的例子解释:两个线程同时执行count++,用volatile修饰count,结果依然可能小于20000,因为count++不是原子操作。只有用synchronized或者AtomicInteger才能保证结果正确。

JVM这块,校招不太会问特别深,但内存区域的划分、类加载机制的几个阶段、垃圾回收的基本算法,最好能答出来。特别是"新生代和老年代谁适合什么样的回收算法"这类问题,复习时结合JVM调优的实际场景来理解,效果会好很多。

4.3 工程能力考查:代码规范、异常处理和边界条件

程序题拿分不止看算法对不对,还看工程的严谨程度。同样是反转字符串,一个版本没考虑空字符串,一个版本提前做了判空处理,后者在阅卷人眼里明显更可靠。

异常处理也一样。Java里捕获异常,不能只写一个catch (Exception e)就完事,你要能根据实际情况分类处理。C/C++里则要注意资源释放,申请了资源就要想着对应释放,RAII思想在校招笔试中的体现就是"看到new就要想到delete"。

我改过不少笔试卷子,说句实话,很多代码逻辑是对的,但一上来就写,连个空指针判断都没有,或者命名全是a、b、c这种无意义的字母。阅卷人一天看几百份卷子,看到这种代码,即使思路对,也想多扣几分。写干净、规范、有防御意识的代码,本身就是一种竞争力。

5. 常见问题与答题技巧实录:时间分配、心态管理和止损策略

5.1 时间不够用怎么办:我的做题顺序和止损思路

笔试最常见的惨案是时间不够。一份卷子放在面前,题目难度不一,但时间只有一个多小时,很多同学在编程题上耗了太久,导致后面的基础题来不及做,白白丢分。

我个人的做题策略是这样:发卷后先用3到5分钟扫一遍全部题目,按"必拿分题、可争分题、放弃题"三个档次分类。选做顺序是:语言基础题和简单编程题最优先,因为这是送分题;网络、操作系统、数据库的基础概念题其次,因为这是记忆性知识,会就是会,不会就是不会,拖得再久也编不出来;复杂编程题和综合分析题放最后,能做多少做多少。

这里有个止损的原则:如果一道题超过十分钟还没有任何思路,果断跳过。校招笔试不是高考,不要求你拿满分,它的目的是在有限时间内筛选出最合适的人。你在一道题上死磕,丢的是后面十道题的分,这笔账怎么算都不划算。

题目类型建议单题用时超时处理策略
语言基础题3-5分钟超时就先蒙一个,不恋战
概念解答题5-8分钟超过8分钟先跳过,最后回来补
简单编程题10-15分钟画出思路就写,别反复重写
复杂编程题15-20分钟10分钟没头绪就换题,有时间再回来看
综合应用题10分钟左右先写流程和关键点,不追求满分

5.2 遇到完全不会的题,怎么答才不白卷

很多同学遇到不会的题,直接空着,这是最亏的做法。阅卷人看的是你的综合能力,一道题完全空着,连一点思考过程都没有,他想给你分都给不了。哪怕你不能完整解出来,也要写出相关知识点、写出大概思路、甚至画个草图。

打个比方,题目问虚拟内存的作用,你答不上来,但你知道分页和页表,那你就写"虚拟内存通过分页机制让进程拥有独立、连续的逻辑地址空间",顺便画个逻辑地址到物理地址的转换过程。这不丢人,反而能让阅卷人看到你懂一部分,至少不是什么都不懂。

我经常和学弟学妹说:笔试的答题过程就像面试的自我介绍,你不一定能覆盖所有点,但你要让对方看到你的思考路径。哪怕是最后一步卡住了,也要把你走到哪一步清清楚楚地写出来。阅卷人眼里,一个能写出大部分思路的人,比一个空着题的人有价值得多。

5.3 读题不仔细,是笔试丢分的隐形杀手

有一种丢分最冤,不是不会做,而是把题目看错了。比如题目要求用Java实现,你整篇卷子用C++;题目要求输出满足条件的格式,你输出数组本身;题目说不用考虑边界输入,你还是写了边界判断,看似严谨,实则浪费。

我有个习惯,拿到题目先给关键词划线:语言要求、输入输出格式、时间复杂度要求、需要实现的具体功能。把这些划出来,再开始写代码。这个习惯帮我避免过特别多低级错误。

还有就是注意题干里那些"陷阱"词。比如"请用非递归方式实现",说明递归虽然能做但不符合要求;"请写出时间复杂度和空间复杂度",说明你在代码完成后还要补上复杂度分析。这些细节往往是阅卷人的评分点,别忽略。

5.4 编程环境不熟悉,先做一次模拟考试

校招笔试的在线编程环境,和本地IDE有很大差别:没有自动补全、没有本地调试、代码编译报错不友好,甚至有些环境不支持重命名变量。很多人第一次在这种环境下做题,各种不适应,本来会写的题也写崩了。

我建议在正式笔试之前,拿一套往年的题,去牛客网或者赛码网,严格按考试时间做一次全真模拟。目的是熟悉在线答题流程、感受时间压力、测试自己的输入输出处理能力。至少做一次,你会发现自己比想象中更容易在边界条件上翻车。

6. 笔试之后:从试题反推面试重点与复习方向

6.1 从卷子里的高频知识点,倒推面试会追问什么

笔试不是终点,而是起点。你做完一套卷子,最高效的利用方式是反过来分析:这套卷子考了哪些知识点,哪些是你答不上来的,这些知识点在面试中大概率会被继续追问。

比如卷子里考了TCP三次握手,面试官就可能追问"为什么挥手要四次""TIME_WAIT为什么要等2MSL"。卷子里考了HashMap的结构,面试官就可能追问"红黑树和链表的临界值为什么是8""为什么线程不安全"。你把笔试暴露的问题一个个补上,面试时就不会再被同样的点卡住。

我在准备面试时会做一件事:把笔试做错的题整理成一个表格,每个知识点后面写上"笔试掌握程度"和"面试追问风险",然后把风险高的优先补。这套方法很笨,但非常有效。

6.2 安全厂商开发岗的独特加分项,怎么补最实在

如果你确定要投的是安全厂商的开发岗,除了常规的开发知识,还有几样东西能让你在笔试和面试中都加分。

第一个是Linux基础。安全产品大量部署在Linux服务器上,你至少得熟悉常用的文件操作、进程管理、网络排查命令。会看日志、会用ps、netstat、tcpdump,这些能力在面试时会让你明显区别于纯业务开发出身的人。

第二个是脚本语言能力。Python也好,Shell也好,安全团队经常需要写自动化脚本分析样本、处理日志。笔试不一定直接考,但面试时聊到项目经历,你能说一句"我写过Python脚本批量处理过xxx",很加分。

第三个是调试和逆向的基础认知。不用你会做逆向分析,但你要理解调试器、反汇编、可执行文件格式这些概念。在安全厂商的面试官面前,这些术语能够证明你是真的对安全有兴趣,而不是只为了拿一个offer。

6.3 给准备校招的人一份复习清单,按优先级排序

如果你现在离校招还有两三个月,我建议按这个顺序分配精力:数据结构与算法是第一优先级,每天保持刷题手感;计算机网络和操作系统是第二优先级,因为这两块是面试的重灾区;C/C++或Java语言基础是第三优先级,重在把常考的点答透;数据库和Linux是第四优先级,广度优先,不求深。

复习的时候不要光看不练,也不要光练不看。看十天书再刷一天题,效果远不如每天各花两小时。给自己定个固定的节奏,比如上午刷算法题,下午过基础概念,晚上整理错题和知识点,长期坚持,效果比突击好太多。

我个人在实际操作中的体会是,像趋势科技这种外企安全厂商的校招笔试,并不追求你是个全能天才,它更像是一次系统性的体检,看看你大学四年有没有把计算机的基础打扎实。你在试卷上暴露的每一个问题,其实都是未来成长的入口。基础扎实的人,面对什么年份的卷子都不慌,因为题在变,底层逻辑永远在那里。最后再分享一个小习惯:每次模拟笔试结束,花十五分钟把自己卡住的知识点抄在卡片上,考前只看卡片,效率比翻书高得多。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/2 23:44:53

LTC3300主动均衡程序详解:从引脚功能到核心代码架构

简介&#xff1a;本资源是一套基于LTC3300芯片的电池主动均衡嵌入式程序工程&#xff0c;面向BMS开发工程师、嵌入式硬件开发者及新能源储能系统设计人员&#xff0c;解决多节串联锂电池组在充放电过程中因单体差异导致的电压失衡问题。压缩包含276个文件&#xff0c;主体为53个…

作者头像 李华
网站建设 2026/9/3 22:06:29

用工程手段约束大模型:BoqCalc管道如何杜绝AI价格幻觉

在工程造价数字化项目里&#xff0c;最让人头疼的往往不是模型能力不够&#xff0c;而是模型“一本正经地胡说八道”。你问它 C30 混凝土的单价&#xff0c;它可能给你一个看起来合理、实际上完全对不上的数字&#xff1b;你问它某项清单的综合单价&#xff0c;它甚至会把单位“…

作者头像 李华
网站建设 2026/9/5 18:46:43

从上下文到反馈:如何让AI编程产出生产级代码

如果说大模型是引擎&#xff0c;上下文就是方向盘。很多人开着 AI 这辆车&#xff0c;却始终在停车场里绕圈——原因不是你不会踩油门&#xff0c;而是你根本还没把目的地告诉它。过去一年里&#xff0c;AI 编程从话题变成了日常。越来越多工程师开始把重复性编码任务交给 AI&a…

作者头像 李华
网站建设 2026/9/5 22:00:09

文本转SQL超越人类基准:核心机制与工程落地指南

1. 先理解“文本转SQL”和“人类基准”到底在说什么 最近“首个文本转SQL模型超越人类基准”这个说法在数据库开发圈子里讨论得比较多。很多同学第一反应是&#xff1a;自然语言直接生成SQL&#xff0c;那以后是不是不用写SQL了&#xff1f;这个理解方向不算错&#xff0c;但和…

作者头像 李华
网站建设 2026/9/6 9:17:25

如何处理 MySQL 的主从同步延迟?

考点分析是否理解复制机制&#xff1a;能否说清主从复制中 binlog、I/O 线程、SQL 线程的协作流程&#xff0c;以及延迟产生的根本环节。能否量化延迟&#xff1a;是否掌握 Seconds_Behind_Master 的含义与局限性&#xff0c;是否了解 GTID、Performance Schema 等更精确的度量…

作者头像 李华
网站建设 2026/9/4 22:22:51

基于MATLAB的SAR成像仿真与舰船检测系统实践

简介&#xff1a;本资源是一套面向雷达信号处理与遥感图像分析方向的MATLAB实践系统&#xff0c;适用于高校研究生、科研人员及SAR图像处理初学者&#xff0c;聚焦SAR成像仿真建模与海面舰船目标自动检测两大核心任务。压缩包共12个文件&#xff08;3.64MB&#xff09;&#xf…

作者头像 李华