
2023年秋招那会儿我投了携程的技术通用岗。说实话当时投这个岗位主要是看中它“通用”两个字——不像有些厂把后端、前端、算法分得特别细通用岗意味着笔试范围广但不深反而适合我这种项目经验一般、但基础还算扎实的选手。结果真到笔试那天还是被赛码网的界面和题量打了个措手不及。这篇就把2023年携程秋招技术通用岗第一批笔试的全过程、踩过的坑、复盘出来的重点一次性说清楚。1. 笔试基本信息与整体策略1.1 岗位定位与笔试通用规则携程的技术通用岗本质上是一个“大池子”招聘逻辑。你投进去之后不会立刻绑定具体的后端/前端/客户端方向而是先通过一轮统一的笔试筛选再根据你的简历、笔试成绩、面试表现来定岗。这种模式的好处是你不需要在投简历那一刻就把自己锁死坏处是笔试题目得覆盖多个方向你复习的时候没法押宝某一个知识点。2023年这批笔试时间是安排在9月上旬线上进行用的是赛码网。整场笔试时长是90分钟题量大概在20道选择题加2道编程题左右。选择题部分是四选一覆盖计算机基础、操作系统、网络、数据库、Java/C语言特性、算法与数据结构编程题则是标准的ACM模式需要自己处理输入输出支持Java、C、Python等主流语言。这里有一个比较关键的细节赛码网的编程题环境默认是“核心代码模式ACM模式混合”的第一道往往偏简单考字符串处理或模拟第二道直接上算法考图论或动态规划。所以如果你是第一次用赛码网强烈建议提前去它的练习场做几道题把输入输出模板背熟不然光调试输入格式就能耗掉20分钟。1.2 时间分配90分钟怎么撑到底我说一下我当时的真实时间分配你可以直接抄作业前5分钟快速浏览全部题目。选择题扫一遍标注出哪些是直接能秒选的、哪些需要动笔算、哪些完全没把握。编程题两道的题目描述先读一遍心里预估难度。接下来40分钟做选择题。优先做有把握的遇到卡壳的超纲题先跳别恋战。一个题如果超过2分钟还没头绪果断标记后跳过。最后45分钟留给编程题。先做简单那道确保拿到基础分再做难的那道哪怕只能通过部分测试用例也能捞到部分分数。这里要提醒的是携程的笔试算分据我了解选择题和编程题是分别计权的编程题如果全A通过全部测试用例占比非常高。所以哪怕选择题错几个只要编程题稳住进面试的几率就很大。反过来如果编程题两题都挂选择题再高也悬。2. 选择题核心考点复盘不只是背八股2.1 数据结构与算法栈、队列、树的“送分题”与陷阱携程的选择题里数据结构部分占比不低但难度整体介于校招常规水平和稍偏上之间。印象比较深的是一道关于“中缀表达式转后缀表达式”的题它不直接问你转换结果而是给出了一个用栈操作的中间状态问当前栈内从栈底到栈顶的元素序列。看着简单但如果不清楚“遇到右括号时要把左括号之上的运算符全部弹出”这个细节很容易在某个中间状态上选错。还有一个高频考点是二叉树遍历序列反推。它给出一棵二叉树的前序遍历和中序遍历要求判断后序遍历的倒数第二个节点是什么。这种题没什么技巧老老实实画图最稳。我当时是直接在草稿纸上把树画出来再写出后序遍历序列前后不到两分钟就解决了。千万不要心算因为遍历序列反推树的题只要中间某一步错后面全错。2.2 操作系统与计算机组成虚拟内存、缓存命中、进程调度操作系统这部分携程考得比较“教科书”。有一道题问的是页面置换算法在一个请求分页系统中页面走向给定分配3个物理块问使用FIFO算法时的缺页次数。这个考点非常经典但有个容易忽略的细节如果题目说的是“开始时内存为空”那么前三次加载页面都算缺页如果题目改成“开始时已装入某些页面”那情况就不一样。做题前一定要看清楚前缀条件我考前刷题时就吃过这个亏后来养成了“先看条件再看计算”的习惯。还有一道关于缓存Cache的题考的是直接映射方式下主存地址如何划分成标记、行号、块内偏移。这题本质是考二进制换算。只要记住Cache行数决定索引位位数块大小决定偏移位位数剩下的位都是标记这题就能做出来。怕的是题目把Cache和内存大小都翻成十进制让你绕个弯。2.3 计算机网络TCP与HTTP的实战化考察网络部分携程没有问太偏的协议细节重点集中在TCP连接管理、HTTP状态码、DNS解析过程。有一道题问的是TCP建立连接的过程中当客户端收到服务器的SYNACK报文后如果客户端此时发送的ACK丢失会发生什么。这个考的是TCP状态迁移的理解服务器端会处于SYN_RCVD状态并超时重传SYNACK客户端则进入ESTABLISHED状态开始正常发送数据但数据报文里也带有ACK标志能帮助服务器确认。很多基础不扎实的考生会在“客户端无法发送数据”这个选项上纠结其实TCP的设计恰恰允许数据捎带确认。HTTP层面携程考了一道关于GET和POST区别的题问的不是常规的“哪个更快、哪个更安全”而是“在什么情况下POST请求体可能被浏览器缓存”。这其实是个偏冷的知识点但结合了实际开发场景。我记得当时犹豫了很久最后选择了一个相对合理的选项浏览器一般不对POST请求体做缓存除了一些特定场景如某些代理服务器会有例外。事后查资料发现这道题可能没有绝对正确的答案关键看你能否排除明显错误的选项。这里给一个实用心得携程的网络选择题很少直接让你背“TCP三次握手第二步是什么”而是倾向于给一个具体场景问某个字段或状态的变化。所以复习时不要把重点放在记忆协议细节而是去理解每个机制“为什么要这样设计”。2.4 Java与C语言特性对比题技术通用岗的选择题里Java和C都会涉及但不会让你写代码主要是语言特性对比和“以下哪个说法错误”这类题。有一道题我记得很清楚关于Java的HashMap在JDK 8中的变化问“当链表长度超过8时链表会转换成红黑树此时数组长度最小是多少”。常规答案是“64”因为链表转红黑树有两个条件链表长度达到8且数组长度不小于64。如果数组长度小于64会先触发扩容而不是直接转树。这个细节看过源码的都知道只看过八股文的就容易忽略。C的题则偏向内存管理。有一道问的是“在C中下面哪种方式创建的对象存放在堆上”选项有局部对象、静态对象、new出来的对象、临时对象。这个属于基础中的基础但既然出现在携程的卷子里说明他们确实希望通用岗候选人掌握底层内存区域划分的基本概念。我自己的感受是携程选择题的Java/C部分不会故意刁难你只要你大学课程没白上、平时写代码时留意过语言底层的设计思路基本都能答个七七八八。但如果平时只是“面向搜索引擎编程”、从不看源码这些题就会变成“好像选哪个都对”的玄学。3. 编程题全解析从读题到AC的全过程3.1 第一题字符串重排简单但不白给第一道编程题题目的表述大致是这样的给定一个字符串要求将其中的数字字符、字母字符、其他字符分别提取出来按“数字-字母-其他”的顺序重新拼接并且在每一类内部保持原有的相对顺序。若某类字符为空则跳过该类。这道题本质是三个队列的拼接算法上没有任何难度只要你会写基本的遍历和判断条件就行。但它的“坑”在于输入输出格式输入可能包含空格所以不能直接用cin s读取要用getline。字符串长度可能达到10^5级别但题目没给额外空间限制所以你可以放心地开三个StringBuilder不需要原地操作。我用Java写了一个很直观的版本核心代码如下import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc new Scanner(System.in); String s sc.nextLine(); StringBuilder digits new StringBuilder(); StringBuilder letters new StringBuilder(); StringBuilder others new StringBuilder(); for (char c : s.toCharArray()) { if (Character.isDigit(c)) { digits.append(c); } else if (Character.isLetter(c)) { letters.append(c); } else { others.append(c); } } StringBuilder res new StringBuilder(); res.append(digits); res.append(letters); res.append(others); System.out.println(res.toString()); } }这里有一个细节值得多说一句Character.isLetter()判断的是Unicode字母也就是说英文字母和中文都会归到字母类。如果题目本意是只保留ASCII字母那就要改成(c a c z) || (c A c Z)。我在考试时选了后者因为题目里明确说了“字母字符”按照一般编程题默认的ASCII范围来处理更安全。这道题还有一个隐藏考点如果你用Python直接.join(filter(str.isdigit, s))也能一行搞定但要注意str.isdigit在处理某些Unicode数字字符时会返回True可能导致输出和预期不一致。所以即使Python很方便也建议按字符ASCII范围手动判断避免边缘case翻车。3.2 第二题图论问题暴力只能过部分用例第二道编程题就明显有区分度了。题干大意是给定一个有向图每个节点有一个权值。现在定义一条路径的价值为路径上所有节点权值之和。求长度为k的路径允许经过重复节点的最大价值。路径长度定义为经过的边数起点可以任意选择。这个题第一眼看上去像是“树上最长路径”或“DAG上动态规划”但“允许经过重复节点”这个条件让问题性质完全变了——你要是在一个正权环里绕圈理论上路径可以无限长价值也无限大所以题目一定还有隐含限制比如要求路径中不能有负权环、或者k不超过某个范围或者权值有正有负。我记得当时看到的输入约束是节点数n不超过50k不超过10^9。这个k的量级决定了纯DFS或BFS一定超时必须用矩阵快速幂或其变种。正规解法是这样的把每个节点拆成“价值”和“转移”两个维度构造一个(n1) * (n1)的矩阵其中前n行n列存图的结构信息最后一列用来累加权值。然后矩阵自乘k次取最大值。这其实就是“带权路径最大值”的经典矩阵优化DP。但如果现场一时半会儿想不起来矩阵快速幂怎么写还有一个保底方案用动态规划先求长度为1到k的路径最大值转移方程是dp[i][v] max(dp[i-1][u] weight[v])其中(u, v)是有向边。这个做法的复杂度是O(k * n^2)在k 10^9时完全不现实但如果测试用例里有一些k比较小的数据你能通过20%-40%的用例也能拿一部分分。我当时选择的是写一个矩阵快速幂模板但由于时间紧张中间有一个状态转移矩阵的维度搞错了导致样例通过但是提交后只过了60%的测试用例。考后复盘发现问题出在初始矩阵的构造上题目允许路径长度为0即只选一个节点作为起点但我的矩阵把长度为0的情况和长度为1的情况混在了一起导致答案多算或者少算了一个节点的权值。这里给出一个经验如果你在笔试中遇到这种“知道思路但不确定细节”的题建议先写一个暴力版本的DP做对拍用小规模数据验证两个算法结果是否一致。赛码网支持在线调试虽然不能像本地IDE那样打断点但你可以先用样例测试再自己构造一个n3、k5的简单例子看矩阵快速幂和暴力DP的输出是否一样。一致后再提交通过的把握就会大很多。3.3 ACM模式下Java输入输出模板赛码网和牛客网类似编程题都是标准ACM模式你需要自己解析标准输入并把结果打印到标准输出。很多人第一次用特别不习惯因为平时在LeetCode上只需要写核心函数输入输出框架都是封好的。这里分享一个我在赛码网笔试中验证过的Java模板import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public class Main { public static void main(String[] args) throws IOException { BufferedReader br new BufferedReader(new InputStreamReader(System.in)); String line; while ((line br.readLine()) ! null) { if (line.isEmpty()) continue; String[] parts line.split( ); // 按题目要求处理输入 } } }用BufferedReader而不是Scanner是因为赛码网的大数据量输入用Scanner会慢很多可能间接导致超时。C则建议用ios::sync_with_stdio(false); cin.tie(0);关掉同步不然大数据量下容易TLE。Python的话用sys.stdin的read()或readline()读输入不要用input()一行行读因为for循环里input()在大数据量下确实吃亏。另外要注意的是赛码网的Java环境是JDK 8还是JDK 11不同批次可能不一样。如果你在代码里用了var或者String.repeat()这些新语法在老版本JDK上会直接编译失败。保险起见尽量使用JDK 8的语法写。4. 笔试环境与意外情况处理4.1 赛码网的在线考试流程赛码网作为现在很多大厂校招笔试的平台整体流程是笔试开始前30分钟你会收到一封包含考试链接的邮件/短信点击链接后进入一个等待页面页面会显示考试倒计时、摄像头状态检查、屏幕录制授权等。建议至少提前20分钟进入因为摄像头权限、浏览器弹窗、屏幕共享这些设置在考前没调好开考后再弄浪费的都是你自己的时间。这里有一个非常实际的建议尽量用Chrome或Edge浏览器并把浏览器装在C盘默认路径下。赛码网部分考场功能插件对非默认路径的浏览器兼容性不太好我之前用绿色版Chrome参加过一次模拟笔试结果摄像头权限怎么都获取不到。后来换回官方安装版一次性通过。另外笔试过程中浏览器会强制全屏且无法切出如果误操作按了AltTab系统会记录一次“切屏警告”多次警告可能被判作弊。我当时直接调成静音模式桌面上只留IDE和浏览器两个窗口物理上避免手滑切出去。赛码网笔试一半支持本地IDE写代码再粘贴也支持网页在线编辑器直接写。我的建议是如果你对IDE不依赖就在网页编辑器上直接写如果日常写代码离不开本地IDE的自动补全就把本地IDE开起来写完把代码复制过去。但注意本地IDE不要放在另一个屏幕上否则容易被摄像头判定为存在“非考试设备”。4.2 断网与断电的应急预案线上笔试最怕的就是断网。赛码网对断网有一定容忍度一般断网30秒内重连考试仍可继续断网超过一定时间系统会自动提交当前进度。问题是你断网期间可能正在编辑代码如果没点“保存到草稿箱”恢复网络后代码可能丢。所以我的建议是写编程题时每隔几分钟就把代码复制到本地记事本或者Word里备份一下。虽然麻烦但万一断网起码代码还在。如果你的网络环境不稳定可以在考前用手机热点作为备用网络。一旦Wi-Fi断了立刻切热点再把网络切回去。提前把手机放在手边不要放到另一个房间。这些看似琐碎的细节关键时刻能救你一命。4.3 摄像头监控与答题规范2023年这届秋招很多大厂的线上笔试都有AI监考功能摄像头实时检测你是否在看向屏幕、面部是否被遮挡、是否有多人出现在镜头范围内。赛码网也不例外。我在笔试过程中不小心低头捡了一支笔系统就弹出了一个“面部检测中断”的提示吓得我赶紧坐直。虽然最后没有被判违规但那一瞬间的紧张情绪会打断做题节奏。关于摄像头有几个注意事项不要戴帽子、口罩、墨镜五官要被清楚识别。眼部不要贴得太近屏幕视线尽量保持在屏幕中间区域频繁看手机或看向屏幕外会被标记异常。房间内尽量只留你一个人。如果有家人走动提前打好招呼。如果你担心这些规则可以在正式笔试前去赛码网做一次模拟笔试。大部分企业会开放“模拟测试”环节专门让你熟悉这套监考流程。千万别跳过这一步我就是靠着模拟笔试提前确认了摄像头、麦克风、网络都OK正式笔试时心态才没崩。5. 常见问题与避坑指南5.1 笔试中的经典时间陷阱除了前面提到的“先跳过难题”外还有一个很隐蔽的时间陷阱编程题编译运行等待时间。赛码网每提交一次代码需要排队编译、运行、比对输出高峰期可能要等20-30秒甚至更久。如果你的代码在编译阶段就报错这一来一回可能就耗掉2-3分钟。所以写编程题时一定要先在本地IDE或网页编辑器的“自测”功能里跑通样例确认无误后再点提交。不要拿提交来试错——这是联考笔试里最浪费时间的操作。另外一个建议把编程题代码写完并测试通过后不要急着提交再仔细读一遍题目确认输出格式是不是“每个结果占一行”、有没有要求浮点数保留几位小数、空行要不要保留。很多题目样例通过但提交后0分就是因为输出多了一个末尾空格或换行。5.2 题目做不完怎么办策略性放弃与蒙题技巧携程这套笔试题量在90分钟内全部做完并且保证准确率还是有一定难度的。如果确实时间来不及我的建议是选择题先排除掉明显错误的选项再从剩余选项里选那个“最像是基础课里讲过”的。大厂的通用岗笔试选择题通常不会出偏题怪题往往是“基础概念一个陷阱”所以你觉得熟悉但又有微妙区别的选项通常是正确答案。编程题如果第二道题实在没思路就写一个最暴力的解法比如直接枚举所有路径哪怕只过20%的测试用例也比交白卷强。赛码网的判分机制一般是按通过的测试用例比例给分所以“部分正确”照样有分。我认识的一位一起参加笔试的朋友第二道编程题只写了暴力DFS通过率大约30%最后还是进了面试。这说明编程题拿到部分分并不丢人比“编译失败0分”强太多了。5.3 复盘笔试结果的黄金时机笔试结束后大多数人会立刻把题目忘掉。但如果你想在后续的面试中占得先机我强烈推荐在笔试结束后40分钟内做一次“回忆式复盘”把选择题里不确定的题目关键词记下来考后立刻查资料弄懂正确思路。这类知识点很可能在面试的“基础知识问答”环节再次出现。把编程题的题目描述、输入输出样例、你的解法思路记在笔记里。携程的一面面试官偶尔会问“笔试第二题你是怎么做的”如果你能清楚地说出当时的思路、以及复盘后发现的更优解法会给面试官留下很深的印象。我当时就是因为复盘了那道“矩阵快速幂求最长路径”的题目在面试时主动和面试官聊起了图论中“路径价值最优化”问题的一般解法面试官明显兴趣大增追问了几个相关场景。这段经历成了整场面试的加分点。5.4 性格测试与综合测评要不要认真做2023年携程的秋招流程里部分岗位在笔试之前或之后还会附带一个性格测评/职业价值观测评。虽然它不计入笔试总分但会作为“是否匹配团队文化”的参考。我个人建议是尽量按照自己的真实情况作答不要刻意去迎合所谓的“理想候选人画像”。因为性格测评题里往往埋了很多重复题和反向题如果你前后答案矛盾太多系统会标记为“诚信问题”反而弄巧成拙。另外一个注意点性格测评通常单独通知、单独计时不要和正式笔试混在一起别以为笔试做完就万事大吉漏做了测评同样会导致流程终止。6. 一个过来人的复盘建议笔试题量大、时间紧、平台卡顿、题目超纲、选择题不确定性高、编程题部分通过拿不到满分……这些都是2023年乃至往年秋招笔试的常态2023年不会更好但也不会更差。我见过太多人因为笔试里一两道题没做出来而心态崩了直接放弃后续面试。但其实笔试说白了只是一道筛选门槛只要你能超过“同批次候选人的中位数”就有机会进入下一轮。从携程这家公司本身来说技术通用岗考察的知识点非常“科班”数据结构、操作系统、网络、语言基础、算法编码。这意味着它不像某些公司那样会考大量“脑筋急转弯”式智力题或偏门冷知识只要你大学课程学得扎实、刷过一定量的LeetCode中等难度题通过笔试的概率就很大。如果你正在准备下一场类似的秋招笔试我最后的建议是提前一天把赛码网的调试流程玩熟考前30分钟检查网络和摄像头考试时先保住选择题的正确率、再拼编程题的通过率遇到做不出的题果断跳过最后留5分钟检查一遍有没有漏题。做到这几点你就可以把更多精力留给后面的面试了。说到底笔试只是秋招路上的一道关卡既不是起点也不是终点。把它当成一次高质量的自测考完无论感觉好坏认真复盘带着收获往前赶比纠结一城一池的得失重要得多。