库洛后端工程师笔试:五模块基础覆盖与两道算法题
- 轮次
- 笔试
- 时间
- 2026-09
- 来源
- 牛客网
《面试题目》
- 计算机基础:单选,共 8 题、每题 3 分,考计算机网络与操作系统的基础知识。
- 代码阅读题:单选,给一段代码问最终的运行结果,以 Java 代码为主,其中有一道前端 JavaScript。
- 数据结构题:单选,考哈夫曼树、排序、堆等基础数据结构。
- 后端开发题:不定项,覆盖 Java、数据库等内容,范围较广。
- 算法题一:奇偶分类讨论(难度接近简单题)。
- 算法题二:背包问题——每种物品的数量、花费和价值各不相同,求能取得的最大价值(二维 DP,难度接近中等题)。
《参考解析》
五模块结构说明这场笔试在考什么:单选 + 不定项 + 两道编程,是一套典型的「广度优先」笔试卷——不追求难题,而是用一个较大的题量筛掉基础有洞的人。3 分一题的基础单选意味着错四道就等于丢掉一道编程题的分数,所以备考顺序应该反过来:先把计网、操作系统、数据结构这些「背了就有分」的基础题的错题率压下去,再回头打磨算法题。计网要覆盖 OSI 与 TCP/IP 分层、TCP 三次握手与四次挥手、拥塞控制、HTTP 状态码与 HTTPS 握手、DNS 解析过程;操作系统要覆盖进程与线程、调度算法、死锁四条件、内存分页与分段、虚拟内存与页面置换、IO 模型。
代码阅读题怎么练:这类题考的是「心算执行引擎」,Java 侧的高频考点集中在几处:基本类型与包装类的自动装箱拆箱(尤其 Integer 缓存 -128~127 导致 == 结果不一致)、字符串常量池与 intern、String 拼接在循环里的对象创建、try/finally 与 return 的执行顺序(finally 里改返回值的影响)、静态代码块与构造代码块和构造函数的执行顺序、继承下的字段隐藏与方法覆写、异常捕获匹配顺序、以及位运算与自增自减的求值。练法是别用 IDE 跑,先自己在纸上推一遍再验证,错的题记下「是哪个语言规则没记住」——考场上很快就能定位。出现一道 JS 说明公司是全栈技术栈,this 指向、var/let 作用域、隐式类型转换、事件循环这类基础值得顺手过一遍。
哈夫曼树、排序与堆:数据结构单选基本围绕这几块的「性质」出题。哈夫曼树要会算带权路径长度 WPL(每次取最小的两个合并,合并值放回集合,累加所有合并值即 WPL),要记住它没有度为 1 的节点、n 个叶子对应 2n−1 个节点,以及编码是前缀码。排序要记牢各算法的平均/最坏时间复杂度和稳定性:快排平均 O(n log n)、最坏 O(n²) 且不稳定;归并排序稳定、代价是 O(n) 额外空间;堆排 O(n log n) 且不稳定;需要稳定结果时优先归并或桶/计数排序(后者要求数据范围合适);「已经基本有序时哪种最快」的答案是插入排序与冒泡的最优情况 O(n)。堆要记住是完全二叉树用数组存储,下标 i 的左右孩子是 2i+1、2i+2,构建堆是 O(n) 而非 O(n log n),堆排是 O(n log n) 且不稳定。
多约束背包(二维 DP):题干里「每种物品有数量、花费和价值」且数量有限,属于有界(多重)背包,不是最简单的 0/1 背包。最直接的二维写法是 dp[i][j] 表示前 i 种物品、预算为 j 时的最大价值,对第 i 种物品枚举取 k 件(0 ≤ k ≤ count[i] 且 k*cost[i] ≤ j),转移为 dp[i][j] = max(dp[i-1][j], dp[i-1][j-k*cost[i]] + k*value[i])。这个写法的复杂度是 O(n × 容量 × 平均件数),件数大时会超时,优化手段是二进制拆分把 k 件拆成 1、2、4… 的若干组,转成 0/1 背包做到 O(n × 容量 × log 件数);如果转移只依赖上一层,还能把第一维滚动成一维、容量倒序遍历——但一维写法在「每种物品可重复取」时正序遍历、不可重复时倒序遍历,这个方向搞反是经典丢分点。面试里即使只写出二维版,也要主动说明优化方向与复杂度,这比闷头写更重要。
考场策略:笔试是限时的,模块化卷子最忌讳在一道题上死磕。建议开场先花两分钟通读,把最有把握的模块(通常是计算机基础与数据结构)先做完做对,代码阅读题逐题推演但设一个心理时限(比如 90 秒没结论就先标记跳过),把时间留给不定项和编程题——不定项选错会倒扣分或不得分的话,不确定的选项宁可少选。编程题先写暴力或朴素 DP 拿到部分分,再考虑优化;写完必须自己造几组边界用例(空输入、单元素、容量为 0、数量为 0)跑一遍,很多失分不是算法错而是边界没处理。