广联达校招开发笔试复盘:数据结构、C++与算法考点全解析 📅 发布时间:2026/8/30 5:22:48 👁 浏览次数: 又是校招季后台好几个准备投工程造价软件方向的学弟学妹来问我说广联达的笔试到底刷不刷人、难不难。我翻了翻之前整理过的旧笔记正好存了一份当年参加广联达2018校招开发工程师笔试的完整复盘。当时考完我就在记事本里记了不少吐槽和考点今天整理出来给后面准备进建筑信息化、造价软件这类公司的同学做个参考。笔试考的不算偏但题量不小而且有几道题明显结合了广联达自己做建筑软件的业务背景这一点和纯互联网公司的笔试风格不太一样。如果你正在准备类似岗位这篇内容应该能帮你少踩几个坑。1. 考情全览广联达开发笔试的基本盘1.1 笔试题型与整体节奏广联达2018校招开发岗的笔试线上笔试和线下笔试都有我当时参加的是线下统一笔试安排在某个高校的机房全程闭卷、限时120分钟。卷面结构大概是四个板块选择题、简答题、编程题、逻辑推理题总分我记得是100分左右选择题占大头编程题次之逻辑题虽然分值不高但很能拉开差距。选择题的数量我记得接近30道覆盖数据结构、C/Java基础、操作系统、计算机网络、数据库还有两三道和软件工程、设计模式相关的题目。简答题通常是2道考一道算法设计思路再考一道业务场景设计比如让你画一个模块的类图或者说一下某个功能怎么拆分。编程题一般是2道独立成卷手写代码不会给编译器纯纸上写或者机房里的文本编辑器里写没有自动判题。逻辑推理题放在最后大概8到10道是那种公务员行测风格的图形推理和数字推理。整套卷子说难不难说简单也不简单。难的地方在于时间紧选择题里面有几道C的细节题特别容易绕进去一旦在选择题上磨太久后面的编程题时间就会很紧张。我当时身边就有同学选择题做得过于认真结果编程题草草写了两行就到时间了。1.2 笔试考点的分布与权重从考点分布来看广联达的笔试更偏向基础功底的考查而不是追逐热门框架。整张卷子几乎没怎么提Spring、Redis这类工具重点还是放在语言基础、数据结构和算法基本功上。这其实很符合广联达这种做行业软件的公司业务核心是桌面端产品、图形处理、工程算量技术栈相对稳重对候选人基本功的依赖度高。我当时按照回忆整理了一个大概的考点分布表虽说不一定每年完全一致但大方向可以参考板块题量核心考点我的直观感受选择题约28题C/Java语法、数据结构、OS、网络、数据库细节多C坑多网络题偏TCP/UDP简答题2题算法设计思路、模块设计重表达一定要写清楚步骤编程题2题树/图/DP/字符串处理手写代码很考验熟练度逻辑推理约10题图形推理、数字推理、文字逻辑时间够的话难度不大从权重上就能看出来C和数据结构是重点中的重点。广联达早年Windows桌面端产品比较多C在开发团队里的地位一直很稳固笔试考察C属于正常操作。如果当年你主要用Java问题也不大考题通常是用C或Java二选一作答编程题不限制语言。但选择题里的语法题两种语言都会考到所以准备的时候不能只看一门。2. 核心考点拆解这些知识点必须吃透2.1 数据结构与算法笔试的“定海神针”数据结构这部分广联达笔试的难度和一般大厂校招差不多选择题里会有一些比较基础但容易混淆的概念题比如完全二叉树和满二叉树的区别、哈希冲突的几种处理方式、深度优先遍历和广度优先遍历在什么场景下更合适等。这类题本身不难但一定要把概念理解到“能给别人讲清楚”的程度而不是死记结论。举个例子我印象很深的一道选择题问的是在一个有n个节点的完全二叉树中如果按层序遍历编号那么编号为i的节点的左孩子的编号是多少前提是左孩子存在。这个考点就是把完全二叉树的性质和数组存储方式结合起来。如果平时没推过这个结论很容易在2i和2i1之间犹豫。正确答案是2i我当时推导了一遍反而更放心了。这种题没有技巧就是要熟悉顺序存储结构下的父子节点编号规律。算法设计题方面笔试比较偏爱这几类二叉树遍历相关、动态规划求最优解、字符串匹配或编辑距离、图的最短路径或拓扑排序。广联达没有考特别刁钻的竞赛题大部分是LeetCode中等偏下难度的题目但要求你写出思路并且把复杂度分析做对。简答题里有一道让我设计一个查找字符串中最长不重复子串的算法并说明复杂度这题如果刷过LeetCode第3题就是白送分但关键在于你要把滑动窗口的推导过程写清楚不能只丢一个结论上去。我建议准备这类笔试时不光是会AC还要练习“用两句话说明思路”的能力。因为笔试卷上没法实时跑代码老师阅卷时看的就是你的思路是否清晰、代码风格是否规范、边界条件有没有考虑到。这些都是在平时写代码时就要养成习惯的。2.2 C/Java语言细节选择题里最容易丢分的板块很多同学在校招准备时把精力都放在刷算法题上忽略了语言基础结果在选择题上翻了车。广联达笔试选择题里C和Java的语法题占了一半左右而且非常细。C考的多的有构造函数和析构函数的调用顺序、虚函数和纯虚函数的区别、const放在不同位置的作用、指针和引用的区别、static关键字的几种用法、内存泄漏的场景。我记得有一道题问的是在C中下面哪种情况不会调用拷贝构造函数选项里有“用一个对象初始化另一个对象”“函数参数按值传递”“函数返回一个对象时”等这里考察的是拷贝构造和移动构造的区分如果对C11的移动语义不熟悉很容易纠结。后来我复习的时候才发现这题其实还隐含了NRVO优化的知识点在某种编译优化下返回值可能连移动构造都不调用。只能说好题但现场做的时候是真拿不准。Java方面考得比较多的是HashMap底层原理、和equals的区别、String和StringBuilder的区别、线程创建方式、异常处理机制。注意广联达笔试里的HashMap题不是考察put流程那种深度源码题更多是考基本概念和底层数据结构比如HashMap什么时候会从链表转红黑树负载因子默认是多少这类。虽然看起来偏基础但如果你平时只会调用HashMap而不看源码这些题就只能靠蒙了。我的建议是C把《C Primer》里前几章和类、继承、多态相关的内容再过一遍尤其要把代码跑一遍看结果。Java就把集合框架、并发包里常用的几个类源码翻一翻不需要背每一行但要知道核心设计的出发点是什么。2.3 操作系统与网络经典理论题占了半壁江山操作系统和计算机网络在选择题里出现的频率也比较高但难度控制得很亲民。操作系统主要考进程管理、死锁、内存管理、虚拟内存这几个经典模块。常见题目有进程和线程的区别、死锁产生的四个必要条件、银行家算法是否安全、页面置换算法中LRU和FIFO的缺页次数比较等。网络部分基本就是TCP/IP协议栈的内容TCP三次握手和四次挥手各字段的状态变化、TCP和UDP的区别、HTTP和HTTPS的区别、DNS解析流程。我当时遇到的一道题是问TCP连接中TIME_WAIT状态为什么要等待2MSL这属于高频考点理由有两个一是确保最后的ACK报文能够到达对端二是让本次连接中的所有报文在网络中消失防止影响下一条相同四元组的连接。这题属于背了就拿分没背就只能现场编。数据库部分考得不多大概有2到3道题集中在索引和一些常见SQL语句上。我记得有一道题是在问联合索引(a, b, c)的情况下哪些查询条件用不上索引属于最左前缀原则的变形考查。这题如果看过索引原理就很简单如果没有系统学过建议在准备时补一下这块内容因为后面面试也很爱问。3. 编程题实战复盘两道题考察的真实能力3.1 编程题之一二叉树的层序遍历当年笔试的编程题第一道是一道二叉树的层序遍历要求按层输出并且每层单独一行。题目描述大概是这样给定一棵二叉树的根节点请按照从上到下、从左到右的顺序逐层输出节点值每一层输出一行。这道题在LeetCode上是102题的水平难度中等偏下。但笔试环境里没有自动判题也没有语法提示你必须在白板上直接把代码写完整。我当时写的是C版本用队列实现核心思路很简单用一个队列保存当前层的节点用一个变量记录当前层的节点数遍历完一层之后再更新为下一层的节点数。这段代码的基本形态是vectorvectorint levelOrder(TreeNode* root) { vectorvectorint result; if (root nullptr) return result; queueTreeNode* q; q.push(root); while (!q.empty()) { int levelSize q.size(); vectorint currentLevel; for (int i 0; i levelSize; i) { TreeNode* node q.front(); q.pop(); currentLevel.push_back(node-val); if (node-left ! nullptr) q.push(node-left); if (node-right ! nullptr) q.push(node-right); } result.push_back(currentLevel); } return result; }这道题本身不复杂但笔试里能全对的人并不算多。很多同学会忘记在每一层循环之前先保存queue.size()直接写成for (int i 0; i q.size(); i)这样queue的size会随着元素的加入发生变化导致一层处理了两层的内容。这种错误就是典型的平时在IDE里有调试器辅助而在笔试环境下就暴露出来的问题。我当时交卷后复盘觉得这道题其实不只是考层序遍历还在考察边界思维和代码基本功。比如root为空的情况、左右孩子为空的情况、返回类型是嵌套容器的情况只要有一个地方没考虑清楚写出代码就会结构混乱。如果你准备去参加类似的笔试建议把二叉树相关的遍历方式都手写一遍包括前序、中序、后序、层序、之字形遍历每一种都要能做到不查资料直接写出来。3.2 编程题之二最长公共子序列第二道编程题比第一道要难一些考的是动态规划的经典问题最长公共子序列LCS。题目给了两个字符串要求返回它们的最长公共子序列长度。这道题和最长公共子串不一样子序列不要求在原字符串中连续只要求保持相对顺序。动态规划的思路是定义dp[i][j]表示字符串A前i个字符和字符串B前j个字符的最长公共子序列长度。状态转移方程是如果A[i-1] B[j-1]那么dp[i][j] dp[i-1][j-1] 1如果A[i-1] ! B[j-1]那么dp[i][j] max(dp[i-1][j], dp[i][j-1])当时我的第一反应是这题用二维数组做DP时间复杂度O(nm)空间复杂度也是O(nm)。如果笔试时间充裕还可以用滚动数组优化空间到O(min(n, m))但在纸上写代码时我选择用完整的二维数组因为这样思路更直观不容易写错。这道题暴露了很多人的一个通病对动态规划的状态定义不清晰。如果状态定义不准确后面边界条件和状态转移都会跟着错。尤其是dp数组的初始化通常需要把第0行和第0列都初始化为0因为空串与任何字符串的公共子序列长度都是0。这个细节看似简单但笔试卷上很容易漏掉。关于编程题我特别想强调的一点是如果笔试环境支持语言选择一定选自己最熟的语言不要试图在笔试里“展示”你多会一门新语言。我见过有同学平时用Java笔试时觉得C更对胃口结果语法细节频频出错反倒不如用Java稳稳写完。笔试题评的是你解决问题的能力不是语言数量。3.3 手写代码的应试技巧既然线下笔试没有编译器这里分享几个我自己总结出来的手写代码注意事项现在回头看这些细节比多刷几道题更值钱。第一代码结构要完整。不要只写核心函数把必要的头文件、返回值、边界判断都要写出来。阅卷老师第一眼看的是结构一个结构完整、缩进一致的代码天然比一段乱糟糟的代码得分高。第二变量命名要清晰。笔试代码里没有人要求你用a、b、c这种短命名用node、levelSize、currentLevel这样的命名不仅方便自己整理思路也能让阅卷老师快速理解你的做法。第三边界条件一定要写。很多阅卷老师在评分时会特别注意你是否处理了空指针、空字符串、负数输入这类边界情况这是一种代码习惯不像算法能力需要长期积累临时注意也能提高卷面印象分。我当年在编程题上加了不少注释虽然笔试不一定要求注释但我在关键的状态转移方程旁边写了简单注释方便阅卷老师看懂我的思路同时万一代码写了一半至少能表明我知道接下来该怎么做。这在手写代码的阅卷环境下算是一种“止损策略”非常推荐。4. 业务向与逻辑题容易被忽视的加分项4.1 广联达笔试里的业务题在考什么广联达这家公司业务核心是建设工程领域的软件产品和服务最知名的就是工程造价系列。笔试里出现了一些让人意外的建筑行业背景题比如问你对BIM的了解、工程造价的基本概念、一个工程算量软件应该包含哪些模块等。这些题对于专业是软件工程或计算机科学的同学来说可能第一反应是“这也能考”但仔细想想广联达是垂直行业软件公司希望校招生对业务场景有一定敏感度这也很合理。我记得笔试里有一道简答题大意是如果让你设计一个装修工程算量系统你会怎么划分功能模块这类题目没有标准答案但考察的是结构化拆分能力。阅卷时希望看到你有清晰的模块划分思想比如主材管理、人工费用计算、工程进度关联、报表输出等。就算你完全不懂装修也要能按照软件设计的基本原则把模块列出来。我当时在这部分准备得很仓促全靠建筑行业知识的那种基础认知硬撑着写了几个模块。后来复盘发现这类业务题最好的应对方式不是去背行业知识而是学会“用软件工程的思路拆解一个陌生领域”。先画用户角色再梳理核心业务流程最后拆功能模块。方法论对了就算不了解具体业务也能交出一份像样的答案。4.2 逻辑推理题笔试里的时间陷阱逻辑推理题放在卷子的末尾很多人时间不够就直接放弃了但这类题恰恰是容易拿分的地方。图形推理和数字推理其实都有固定的规律模式最常用的有数量变化、位置旋转、图形叠加、颜色变化、数列的差分和比值等。如果平时稍微练过一些行测题看到题目就能迅速归类。我印象比较深的一道数字推理题是3, 7, 13, 21, 31, 。这个数列相邻项差值分别为4、6、8、10是一个等差数列所以下一项是31加12等于43。这道题属于最简单的二级等差数列亏得它简单否则我时间真的不够用。但这也说明逻辑题的难度整体不算高关键要在短时间内识别规律不能被前面的选择题拖住太多时间。我的策略是拿到卷子先花30秒把整张卷子浏览一遍心里有数哪些题好做、哪些题难做。正式作答时逻辑题可以先跳过等选择题做完再回头处理。如果最后实在时间不足优先保编程题因为编程题的分值更重一道顶好几道逻辑题。不过如果选择题已经耗费了很多时间这本身就是策略失误平时练习时就要有意识地控制选择题时长。5. 常见问题与避坑手册笔试现场的经验之谈5.1 时间分配不合理选择题磨蹭太久这个问题在考场里非常常见我自己也差点中招。广联达笔试的选择题里C语法和数据结构概念的题目有不少选项都具有迷惑性。比如一道题里同时出现“值传递时会调用拷贝构造函数”“const引用传递时不会调用拷贝构造函数”“浅拷贝和深拷贝的区别”这三个相关选项你会忍不住想在每一个选项上都琢磨一会儿。结果越琢磨越紧张时间很快过去。建议是选择题平均每题控制在1.5分钟以内超过这个时间就先用排除法选出认为最对的选项并在试卷上用符号标记出来如果最后有时间再回头检查。千万不要在一道2分的题目上耗掉10分钟这在整卷考试里是很亏的。5.2 编程题只看不做笔迹潦草平时复习算法时很多同学喜欢在IDE里跑题看着测试用例通过就觉得掌握了。但笔试是手写代码或者没有自动判题的文本编辑器完全依赖你的“代码记忆”。如果你平时没有动手在白纸上完整写过一道题的代码考场里会发现很多基础语法会突然想不起来比如vector的嵌套初始化写法、map和pair的配合使用、Java里List接口和ArrayList的转换。这种问题不是不会做而是不熟练。我后来总结出一个方法刷题时每做完3道题就挑一道中等题在白纸上重新写一遍不打开IDE不参考代码。这个过程刚开始很痛苦但效果非常好能把“我大概会了”变成“我真的会了”。如果万一在考场里遇到编程题卡壳不要空着把思路用注释或者文字写出来。比如写出“这里我打算用动态规划dp[i]表示前i个元素的最优解状态转移方程是……”即便没有完整代码阅卷老师也能看到你有解题思路通常可以给到部分步骤分。这在笔试评分中是一个很重要的保底策略。5.3 忽略行业背景知识的积累计算机专业的同学在准备校招时容易陷入“刷题背八股”的循环但在广联达这类垂直行业公司的笔试中行业知识会成为隐形加分项。当年考试的简答题里出现了BIM相关内容虽然分值不算高但如果你能答出BIM是建筑信息模型是覆盖建筑全生命周期的数字化集成过程就能比纯粹只说“不了解”的同学高一档。不需要成为建筑行业专家但对公司的主营业务、核心产品、行业热词要有所了解。在笔试前去网上搜一下“广联达产品线”“BIM和工程造价的关系”“施工阶段信息化”这几个关键词花半小时浏览一下官方介绍就足够应付笔试里的业务题了。这笔投入的性价比很高因为大多数人不会准备你准备了就赢在细节上。6. 从笔试到面试怎么把这场考试的价值用到后续环节6.1 笔试复盘时重点记录哪些内容笔试完了别急着对完答案就翻篇。我当时做的第一件事是把所有还记得的考点和题目记录下来尤其是那些自己不会做或者做错了的。复盘不是看分数而是找出知识点盲区。比如我当时在C移动语义和NRVO优化上栽了跟头这个知识盲区如果不暴露面试时同样会被问到。所以笔试后的24小时很重要趁记忆还新鲜把所有能回忆起来的题目都整理到一个文档里。这份复盘文档在后续面试中也派上了大用场。因为很多笔试考点会被面试官换着方式再问一遍。比如笔试考了进程和线程的区别面试时可能就问“一个进程崩溃了其他进程会受影响吗线程呢”本质上还是同一个知识体系。有了笔试题库的整理你的面试准备会更有方向感而不是漫无目的地刷面经。6.2 广联达面试中可能出现的追问方向广联达的面试风格总体务实技术面会围绕简历项目深入提问也会继续考察算法和基础知识。笔试中涉及的领域面试官很喜欢进行“追加提问”。比如你在笔试里写了二叉树层序遍历面试官可能追问如果二叉树非常大放不进内存怎么办如果要求以之字形顺序输出怎么办这都是在考察你是否真的理解了算法思路而不是背代码。如果笔试中遇到业务类题目面试官可能会在面试时让你展开讲一讲。我当时在笔试里写了工程算量系统的模块划分二面时面试官就追问了一句“如果你来设计怎么处理工程变更导致的算量数据同步问题”。这个问题其实是开放的核心考察你的逻辑能力和对软件工程流程的理解。所以笔试里写的每一个答案都得做好在面试中被拿出来继续追问的准备写的时候就要有理有据别随便编。6.3 一条相对稳妥的备考时间线如果你正在准备广联达或者同类公司下一年的校招我建议至少提前两个月开始系统备考。第一个月集中刷数据结构与算法以LeetCode中等难度题为主每周挑3道题做白纸手写练习同时过一遍C或者Java语言基础中的高频考点。第二个月上半段开始整理计算机网络和操作系统的常见问答题不需要死记硬背但要能用自己的话说清楚原理。第二个月下半段做模拟笔试训练找个安静的教室卡着120分钟完整做一套题把时间分配练成肌肉记忆。笔试前一天不要再啃新的知识点了把整理出来的知识点清单和错题本翻一遍就够了。重点看一下容易混淆的点比如TCP的TIME_WAIT和CLOSE_WAIT区别、HashMap扩容条件、虚函数表指针存放位置等。早睡比熬夜多刷两道题有意义得多。说到底笔试只是整个校招流程中的一道门槛它的筛选逻辑很简单专业基础扎实、代码功底可靠、能在限定时间内稳定输出。广联达的题目风格不会故意刁难人题目本身也都来自常见考点。只要把基础打牢时间分配好拿下面试通知并没有那么难。希望这份复盘能帮到你。