广联达的笔试在建筑信息化这个圈子里的口碑一直很稳定题不偏、不怪但覆盖面很扎实。作为一个参加过广联达2018校招开发工程师笔试的人我后来陆陆续续也带着几个学弟学妹复盘过这套试卷。说句实话广联达的笔试并不能完全代表国内所有大厂的面试难度但它基本上能代表“行业软件公司开发岗”的出题风格算法要能写出来基础要能背得出代码规范要看得过去。这篇文章我想把这次笔试的完整情况拆给你看从题型分布、计算机基础考点、编程题思路到备考节奏一条一条说清楚。不管你是正在准备校招的应届生还是想测试自己开发功底的从业者这份复盘都能提供一些可复用的经验。当年我参加的那场笔试是在牛客网线上完成的总时长大概90分钟。整体分两大类客观题和编程题。客观题大约占60分考查数据结构、操作系统、计算机网络、数据库以及C/Java语言基础编程题占40分共2道难度呈阶梯分布第一道偏基础、第二道有区分度。这个结构不算复杂但时间紧凑很多同学挂在客观题上纠结太久导致编程题没写完。所以这篇文章我先把客观题的复习重点讲透再进入编程题实战。1. 笔试摸底广联达的考法与筛人逻辑1.1 整体题型分布与时间压力广联达那场笔试的题目量其实不算特别大大概30道客观题加2道编程题。但客观题覆盖广度比较大从数据结构到网络协议再到数据库索引基本都会碰一遍。如果你指望靠刷题App上的“常考100题”就能应付大概率会在考场上遇到几个陌生知识点。题目分布大致是这样的数据结构与算法约10道重点在链表、二叉树、排序、哈希冲突、栈与队列操作系统约5道进程线程区别、死锁条件、虚拟内存、页面置换计算机网络约4道TCP三次握手、HTTP状态码、DNS解析过程数据库约4道SQL基础语法、索引失效场景、事务ACID特性C/Java语言特性约5道虚函数、静态成员、集合类、异常处理智力题/数学题约2道偶尔出现逻辑推理或概率题。时间上我建议客观题控制在40分钟左右做完剩下大约50分钟全部留给编程题。如果你在某道计算机网络题上卡了超过3分钟赶紧凭第一感觉选完走人。这类题往往是二选一模糊项纠结不出正确答案拖时间只会让你后面的编程题没时间调试。1.2 筛选逻辑广联达想要什么样的人广联达是建筑行业信息化软件公司核心产品围绕造价、算量、BIM等领域展开。所以它招开发工程师看重的不只是算法刷题能力还有代码稳定性、工程意识和基本功扎实程度。从笔试题目里能明显感觉到它出的编程题并不追求复杂的算法竞赛难度而是更偏“在工程场景下能写出健壮代码”的能力。第一道编程题基本是常见的字符串处理或模拟题第二道稍微往数据结构和动态规划上靠一点。这种出题思路的目标很清楚筛掉代码写不出来的留下基础扎实、能踏实干活的。所以备考时我不建议一头扎进LeetCode困难题里出不来了。你要把简单、中等题做到熟练尤其是那些高频考点字符串操作、栈的运用、排序、二分查找、简单动态规划这些在广联达笔试里出现的概率非常大。2. 计算机基础客观题考点覆盖与复习方向2.1 数据结构与算法客观题的半壁江山数据结构在选择题里的存在感特别强。链表相关的题目会问“删除单链表中某个节点的时间复杂度是多少”“循环链表判空的两种写法对不对”二叉树部分则偏爱“已知前序和中序求后序”或者“完全二叉树的节点数量推算”。我当时复习的一个取巧做法是把每个知识点的关键结论整理成一页速查表。比如数组访问是O(1)链表访问是O(n)但链表插入删除是O(1)二叉搜索树查找、插入、删除平均时间复杂度都是O(log n)但最坏退化成O(n)哈希表查询期望是O(1)但链表法解决冲突时链上节点多会退化快速排序平均O(n log n)最坏O(n²)堆排序无论好坏都是O(n log n)归并排序空间复杂度O(n)稳定快速排序不稳定。这些结论看起来基础但考试里就是会反复用不同形式考。尤其注意“稳定性”和“时间复杂度优劣”几乎每年都在选择题里出现填的时候一定不要凭感觉。2.2 操作系统、网络与数据库抓主干就够用广联达作为应用型软件公司笔试题不会特别深入底层内核但基本概念必须清楚。操作系统部分死锁的四个必要条件互斥、持有并等待、不可剥夺、循环等待是必考内容另外进程与线程的区别、虚拟内存和页面置换算法也是常客。复习时不要死记硬背定义要能结合例子说明两个进程共享同一个全局变量在单核和多核下表现有什么差异这样面试延伸环节才有话可说。计算机网络部分TCP三次握手和四次挥手是重中之重。选择题可能会问“最后一次挥手报文里的ACK确认号是多少”或者“TIME_WAIT状态出现在哪一端”。HTTP的2xx、3xx、4xx、5xx状态码含义也值得快速过一遍尤其是301和302的区别基本每次笔试都有。数据库部分优先掌握索引相关知识点比如“在什么情况下索引会失效”“联合索引的最左前缀原则是什么”。事务的ACID属性要能说出每个字母的含义并且知道它们分别解决了什么问题。SQL语法倒不会出太复杂的题但基本的SELECT、JOIN、GROUP BY要会写。2.3 C/Java语言题语法陷阱最容易丢分这里必须先强调一句语言题是很多科班学生翻车最惨的地方因为平时写代码用的是框架和库语法细节早就忘了。C的高频考点包括虚函数和纯虚函数的区别、虚函数表怎么工作、new和malloc的区别、const在指针前置和后置的作用、静态成员变量如何初始化。Java方向则喜欢考HashMap底层实现、ArrayList和LinkedList区别、与equals区别、线程创建方式、synchronized和Lock区别。我当时有一个很笨但有效的复习方法就是每道错题都自己写一段小代码去跑一遍。比如“vector扩容后迭代器会不会失效”光看答案背不下来但你在本地写个循环插入再访问迭代器一次运行就能记住。这个方法对语言题特别管用关键是把抽象概念变成可见的运行时行为。3. 编程题实战高频题型的完整解题思路3.1 从字符串到栈括号匹配与表达式求值广联达的第一道编程题基本是“给一个字符串做一些处理”。大概率会考这样两类一类是括号匹配判断另一类是字符串去重、压缩或子串替换。括号匹配是栈这个数据结构最典型的应用场景也是校招笔试里出现频率最高的送分题之一。我当时实际遇到的第一道题是判断一个包含(){}[]的字符串是否合法要求只考虑括号配对且不影响中间字符。这道题解法非常固定import java.util.Scanner; import java.util.Stack; public class Main { public static void main(String[] args) { Scanner sc new Scanner(System.in); while (sc.hasNextLine()) { String s sc.nextLine(); System.out.println(isValid(s)); } } private static boolean isValid(String s) { StackCharacter stack new Stack(); for (char c : s.toCharArray()) { if (c ( || c { || c [) { stack.push(c); } else { if (stack.isEmpty()) { return false; } char top stack.pop(); if (c ) top ! () return false; if (c } top ! {) return false; if (c ] top ! [) return false; } } return stack.isEmpty(); } }这个题看起来简单但笔试评分时会考虑边界条件。栈为空时遇到右括号直接返回false这个细节容易被忽略。另外循环结束时要判断栈是否为空不然((()))和((()会得到一样的结果。实测下来能把边界写全的人已经超过一半。要知道牛客网的在线判题系统是不太友好的它不会告诉你哪个用例错了。所以你自己必须在心里把边界情况全部过一遍空串、只有一个左括号、只有一个右括号、所有括号正确嵌套。这些边界用例只要有一个没处理到就可能在后台判题里丢分。3.2 数组排序与滑动窗口把高频考点练成肌肉记忆第二道编程题的难度就会上来一点。一种常见类型是“在一个数组中找满足条件的子数组”比如最大连续子数组和、无重复字符的最长子串、长度最小的子数组。这里有一个很重要的备考点滑动窗口。它特别适合处理“连续子区间”问题用一个动态窗口遍历数组左右指针根据条件移动时间复杂度通常是O(n)。我拿“无重复字符的最长子串”来举例这道题可以算作校招笔试的明星题目广联达和很多公司都考过类似变体。import java.util.HashMap; import java.util.Map; import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc new Scanner(System.in); String s sc.nextLine(); MapCharacter, Integer map new HashMap(); int left 0; int maxLen 0; for (int right 0; right s.length(); right) { char c s.charAt(right); if (map.containsKey(c)) { // 防止 left 回退取最大值 left Math.max(left, map.get(c) 1); } map.put(c, right); maxLen Math.max(maxLen, right - left 1); } System.out.println(maxLen); } }你可能会问为什么取Math.max(left, map.get(c) 1)而不是直接赋值这是因为left可能已经越过了重复字符的位置如果直接赋值会导致左边界回退计算出的子串长度反而包含重复字符最终结果出错。这是一个非常经典的坑我当年第一次写的时候就在这里翻车了。3.3 动态规划这类题怎么稳稳拿到基础分动态规划是校招笔试的分水岭也是广联达笔试最后一道题比较多见的类型。它会考最长公共子序列、最长递增子序列、编辑距离这类经典模型不太会出那种特别偏的状态设计题。很多同学一看到动态规划就觉得难其实对于笔试拿分你只需要掌握三步定义DP数组的含义写出状态转移方程确定初始化和遍历顺序。拿“最长递增子序列”来说DP数组dp[i]表示“以第i个元素结尾的最长递增子序列长度”。初始化全部为1因为单个元素本身就是一个长度为1的递增子序列。状态转移时遍历j i只要nums[j] nums[i]就尝试更新dp[i] max(dp[i], dp[j] 1)。public class Main { public static void main(String[] args) { int[] nums {10, 9, 2, 5, 3, 7, 101, 18}; int[] dp new int[nums.length]; int ans 0; for (int i 0; i nums.length; i) { dp[i] 1; for (int j 0; j i; j) { if (nums[j] nums[i]) { dp[i] Math.max(dp[i], dp[j] 1); } } ans Math.max(ans, dp[i]); } System.out.println(ans); } }这个写法的时间复杂度是O(n²)笔试完全够用。如果你的目标是秀优化可以用贪心加二分降到O(n log n)但如果时间紧张先把O(n²)写对拿分比优化到O(n log n)但写错要强得多。笔试判题看的是最终通过率不会因为复杂度低而给额外加分。4. 主观题与在线笔试细节容易踩坑的地方4.1 Java/C输入输出处理基础但决定生死很多第一次参加线上笔试的人会栽在输入输出上非常可惜。牛客网和赛码网的判题机制是你提交的代码必须自己读取输入并把结果输出到标准输出。一旦一行输入没读对整个程序就报废后面的逻辑再正确也没有用。Java刷题时最好统一用这种模板import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc new Scanner(System.in); // 处理多行输入 while (sc.hasNext()) { int n sc.nextInt(); int[] arr new int[n]; for (int i 0; i n; i) { arr[i] sc.nextInt(); } // 处理逻辑输出结果 System.out.println(result); } sc.close(); } }这里有个容易忽略的点就是sc.close()。在本地IDE里面不写也能跑但在在线判题平台特别是在循环读取多组测试用例时不关闭Scanner有时会导致资源占用异常。虽然绝大多数情况不会判错但养成收尾习惯总没坏处。C方向则推荐使用cin 但要注意字符串读取用getline与cin 混用时会吞掉换行符。不少同学在这里卡住读出来的句子少一个首字母或第一行空字符串这种问题排查起来很费时间。4.2 时间分配策略放弃也是一种能力笔试90分钟客观题和编程题同时展示在屏幕上。我个人的策略是先快速浏览编程题判断难度然后在心里给每道题分配好时间预算。如果客观题整体感觉不熟那就先把简单的、有把握的题目做完把不确定的标记出来最后再倒回来看。编程题如果第一道15分钟没思路立即跳过先看第二道。很多人觉得第一道简单不甘心放弃结果死磕30分钟后第二道也没时间做了。广联达这两道编程题未必是第一道比第二道简单遇到反直觉的节奏不要慌先做能拿分的部分。另外如果编程题写了一大半但结果不对一定要把已通过的测试用例结论写进注释里比如“这里测试了空串、纯数字、带符号的情况”让阅卷人看到你的思考过程。部分在线笔试会有面试官人工看注释你写在注释里的思路也能体现工程素养。4.3 判题环境模拟本地能跑的代码线上不一定能过一个非常真实的教训是本地IDE和在线判题平台的环境不一致。2018年那次笔试身边有同学在本地跑得稳稳的代码粘到牛客网却编不过原因是Java版本不同或者类名不是Main。这里给你一个检查清单笔试前在牛客网或赛码网找几道往年真题实际模拟一遍类名必须是Main不能加public前缀以外的修饰Java代码不能有package语句C程序不要用非标准头文件不要读本地文件也不要输出多余的中文提示信息最后一行输出要有换行但不影响判题。这些细节不提前跑一遍根本不会意识到。我强烈建议考前一周至少做3次完整的在线模拟完全按照考试的时间限制来把IDE切换成平台自带的编辑器。要适应没有代码补全的环境很多人的手速和正确率会在这里明显下降。5. 备考时间线与资源清单5.1 三轮复习法基础、刷题、模拟如果你离笔试还有一个月以上可以按三轮来准备。半个月以内也不要慌压缩成两轮保住最核心的算法和基础部分。第一轮基础铺垫约10天系统过一遍数据结构、操作系统、计算机网络、数据库和语言特性。可以不用做题但必须把课本或笔记里的概念看懂同时整理自己的速查表。这一轮不要追求快但要求每个考点都能用自己的话讲明白。第二轮刷题强化约12天以LeetCode和牛客网真题为主线。保持每天刷4到6道题按专题来刷比如今天只做栈和队列、明天只做二叉树。要特别重视错题的整理每道错题记录三要素题目类型、卡住原因、正确解法。第三轮模拟实战约5天每天上午严格按照笔试时间做一套完整的模拟题。这个阶段不只测正确率还要练时间分配和心理节奏。晚上把当天错误的知识点重新过一遍不留死角。5.2 资料清单与使用顺序资料不在多在于吃透。我当时用的组合是《剑指Offer》适合用来打基础每一道题都配有思路讲解难度贴合行业软件公司笔试LeetCode Hot 100刷完剑指Offer后继续刷尤其关注字符串、滑动窗口、二叉树、动态规划和链表牛客网历年真题专门找广联达和其他建筑软件公司的大厂真题练手感受出题风格操作系统、计算机网络、数据库的笔记本或考研复习资料不需要整本看只看高频考点章节即可。不推荐一上来就刷LeetCode困难题。你的目标是高效拿下笔试不是冲击算法竞赛。广联达的技术栈覆盖面主要以C、Java、.NET为主所以在语言选择上如果你C和Java都会一点我的建议是选Java因为Java的字符串和集合类在笔试中更不容易写出内存错误调试效率也更高。5.3 错题复盘怎么整理一份真正有用的错题本很多人刷题只是看一遍题解过几天又忘了。我推荐一个“三天三刷”的错题复盘法做错的题当天写一遍标准题解隔三天不看答案重新在空白IDE里写一遍一周后只写核心状态转移方程或关键的数据结构操作快速默写出来。这个方法能对付“看答案觉得自己会一上考场手全忘”的毛病。我在广联达笔试前用这个方法复盘了大约60道错题主观感受是考场上面对陌生题型没有那么慌遇到类似题型时可以直接套用状态转移方程的模板。要注意的是错题本不是抄题。每一道题只需要写三样东西错误原因、正确思路、如果再给我一次机会我会特别注意什么。这样复盘起来效率更高考前翻一遍只需半小时。6. 关于广联达笔试的一些额外经验6.1 结合建筑信息化行业特点的“隐形考点”广联达是建筑行业信息化软件公司这一点会偶尔渗透到笔试题里。客观题中可能出现一两道与建筑场景结合的题目比如“BIM模型的构件数量统计适合用哪种数据结构”“海量图纸文件如何做快速检索”。这类题具备一定的行业特色但底层还是数据结构与算法的知识。我的经验是遇到这类题不要慌把它拆解成通用技术问题。构件数量统计本质上是分组计数用哈希表就行海量文件检索本质上是索引设计和数据库索引的思路一致。广联达不期望你懂施工工艺它考查的是你在新领域场景中快速建模的能力。如果时间宽裕考前可以花一两个小时浏览一下广联达的产品线比如算量软件、BIM技术、造价大数据。你不需要深入理解业务逻辑但要知道它们大概做什么这样万一笔试或面试聊到产品你能接得上话。6.2 笔试与后续面试的衔接广联达的笔试通过后紧接着会有技术面试。笔试中出现过的编程题很可能被面试官拿出来追问比如“你这个算法还能不能优化”“为什么这里用HashMap而不是TreeMap”。所以笔试结束后不要立刻把代码扔了要自己再想一想优化方案和扩展场景。我就遇到过类似情况笔试里要求判断括号字符串面试环节考官问“如果加上通配符允许*代替左括号、右括号或空字符判断逻辑要怎么改”这其实就是LeetCode那道带通配符的括号匹配题。如果你笔试后顺手思考过变体面试时就能直接给出解法印象分会明显提升。另外一个经验是笔试答题时尽量保持代码风格整洁。变量命名清晰、逻辑分层合理、关键边界条件有注释这些细节面试官在查看笔试记录时是能看到的。一轮技术面往往没有时间让你手写太多代码笔试代码就是你最早的代码面。6.3 现场心态调整一个实测有效的建议最后分享一个心态层面的技巧。线上笔试时很多人会在前10分钟疯狂看题结果发现客观题有不会的、编程题第一道也不顺利心态瞬间崩盘。我建议的做法是开考后先花3分钟快速浏览全部题目主观题占几道、编程题各大概什么套路。然后不管客观题里有没有不会的先直接进入编程题的第一道趁头脑清醒时把代码写完。为什么这样做因为编程题占比高、确定性也高一旦写出并且通过测试用例整场考试的基础分就稳了。而客观题哪怕有好几道不会大概率也能凭经验蒙中一部分对总分影响有限。这个答题顺序在广联达笔试里帮我节省了大量时间我把这道题全部做完之后还剩30分钟回头去补客观题节奏完全不一样。笔试这件事说到底是熟练度和心态的博弈。熟练度靠刷题和笔记打磨心态靠模拟考和合理策略稳住。把上面这些点吃透不管进入哪家公司的笔试环节你都不会因为没提前适应题型而吃亏。