ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

远景智能秋招笔试复盘:Java、Linux与数据结构考点全解析

远景智能秋招笔试复盘:Java、Linux与数据结构考点全解析 远景智能的秋招笔试说实话在投递之前我就听师兄提过一嘴题量不小、覆盖面广、而且不只是考算法Java、Linux、数据结构这些基础会揉在一起出。2023秋季招聘软件技术笔试题第二批我是在截止前一周才做的整体感受是——它不像很多大厂那样搞几道hard算法定生死而是更在意你能不能把基础知识讲清楚、用明白。尤其是那些看起来平平无奇的题目背后藏着的坑特别深。这篇文章我就把整套卷子的结构、考点分布、典型题型和我的复盘过程完整写出来给后续要投递的同学一个参考。1. 整套笔试题的卷面结构与考察逻辑1.1 题型占比与时间分配的实战判断第二批笔试题的卷面大致分四个部分单项选择、多项选择、填空、两道编程题。总时长90分钟我实测下来时间相当紧张——前面选择填空大约50题编程题虽然只有两道但第二道题涉及状态设计和边界处理不提前规划时间很容易做不完。从占比来看选择题和填空题覆盖了Java语法、数组与指针、Linux命令、网络基础、数据库SQL大概占了70%的分值两道编程题占30%。这里有个容易被忽略的点选择题并不是单纯选答案有些多选题会故意设计成完全正确和不完全正确的干扰项稍不注意就会多选或少选。我统计了一下多选题的分值占比大概在20%左右但错误率比单选高了不少。时间分配上我的建议是前40分钟解决所有选择和填空留30分钟给第一道编程题最后20分钟处理第二道编程题。如果你第一道编程题预计要写40分钟以上第二道就用最朴素的办法拿部分分。远景智能的这套题不按单题给分而是按整体正确率划线所以牺牲一道编程题去保证选择题正确率往往比硬磕两道题都半成品要划算。1.2 从岗位描述反推考点他们到底想招什么样的人投递远景智能软件技术岗的同学JD上会明确写熟悉Java/Python、了解Linux、有数据结构与算法基础。但笔试的考点分布比JD暗示的更聚焦——它考察的核心其实是两个能力第一你能不能在没有IDE和搜索引擎的环境下写出逻辑严密的代码第二你对于运行机制的理解是否停留在会用API的层面。举个例子填空题里有一道关于Java中HashMap在JDK8之后链表转红黑树的阈值问题。如果只是背过8和64这两个数字这道题也能答但它紧接着又考了一道为什么是树化阈值8、最小容量64的简答。这就是典型的知道你背过但更想知道你懂不懂背后的泊松分布和哈希冲突概率模型。这反映到筛人逻辑上就是他们宁可要一个基础扎实、能推断出结论的人也不要一个只会背面试题锦集的人。这一点和热词里提到的java笔试题大全带答案那种刷题思维完全不同。远景的题很少出现网上流传的原题更多是把基础概念换一个包装场景比如把数组和指针的题目套到一段多线程共享数据的代码里让你判断最终输出。如果你只背了静态的结论碰到这种动态场景很容易翻车。2. 数组和指针Java与C/C的边界题才是重头戏2.1 一道看似简单的指针选择题坑在数组名退化热词里数组和指针笔试题被搜得很频远景第二批确实考了这类题但问法比一般刷题网站刁钻。它给了一段C代码声明int arr[5]然后问sizeof(arr)、sizeof(arr[0])、sizeof(*arr)、sizeof(arr1)的值分别是多少。如果你只记过数组名是首地址很容易把后两个也填成4或8。实际上sizeof(arr)是整个数组的大小也就是20字节sizeof(arr[0])是指针大小在64位系统上是8sizeof(*arr)是arr[0]的大小4而sizeof(arr1)虽然写法上看起来像野指针但这里arr作为右值发生了数组到指针的退化所以结果是8。这个知识点考的不是你会不会算而是你清不清楚数组名在什么场景下会退化成指针、什么场景下会保留数组类型。我当时做题时就在这上面停了一分钟因为四个空连在一起很容易模式化地把前两个填对之后后两个顺手就填错了。这里的一个实操经验是遇到数组和指针混合的题目先圈出取地址符和sizeof括号里的表达式有没有发生求值sizeof里的表达式不参与真正的运行期计算只做类型推导。2.2 Java引用传递的经典误解值传递还是引用传递Java部分的数组和指针题其实考的是引用传递的理解。题目大概是这样定义一个方法void change(int[] arr)方法内执行arr[0] 100然后在main里新建数组arr {1,2,3}并调用change(arr)问最终arr[0]的值。这道题80%的人都能答对是100但它紧接着问如果在方法内执行arr new int[]{7,8,9}外部数组变不变答案是外部数组不变。因为Java的arr是一个引用传递的是引用的拷贝所以你在方法内重新赋值只是让拷贝指向了新对象原引用不受影响。这个知识点本身不冷门但远景把两道题放在一起考就是想筛选出那些真正理解引用是一个变量它的值是地址的人而不是只记住数组是引用传递这句话的人。这里我补充一个自己的调试经验如果你对方法内的数组修改是否会影响到外部有疑惑不需要去硬记值传递还是引用传递直接在change方法第一行打印arr.hashCode()在调用方再打印一次。如果两次打印的哈希值一致说明引用指向同一个对象那对内容的修改自然会反映出来如果方法内重新new了数组哈希值就会变外部不受影响。这种验证方式放在笔试阶段也可以用来做心理检查如果一个题目的代码片段没有new那所有对内容的修改都是对原对象生效的。2.3 字符串与字符数组隐藏的不可变性考点字符串相关的坑在远景笔试里也占了几个选择题。比如它问String s hello; s world;这个过程创建了几个对象很多人会答2个但实际上是3个——hello一个、world一个、helloworld一个。如果再算上字符串常量池里的引用可能更多。这道题考察的是String的不可变性以及字符串拼接在底层是创建StringBuilder还是直接创建新对象的问题。更进阶的版本是混合String和StringBuilder的题目。它给出一段代码用StringBuilder拼接然后问toString()之后和直接用拼接有没有区别。答案是没区别因为在编译期就会优化成StringBuilder.append()。但如果拼接发生在循环里并且每次循环都产生新的StringBuilder那性能就会断崖式下降。这类题的判断方法很简单看变量是否在循环体内声明如果声明在循环内那每次迭代都会创建新对象即使逻辑正确也会被面试官追问性能优化。3. Linux与系统编程考察的不只是命令而是系统观3.1 文件描述符与重定向一道命令题背后的进程模型远景笔试的Linux部分热词里linux笔试题搜得很多但实际考法比常见的说出chmod权限要深入得多。它考了一道关于重定向的填空题在shell中执行cat file1.txt file2.txt 21如果file2.txt不存在系统会显示什么这道题看似是考命令实际上考三件事标准输出和标准错误的区别、重定向符号处理顺序、文件描述符的指向。关键在于21把标准错误重定向到了当前标准输出的目标——也就是file2.txt。但这里有个顺序陷阱如果写成cat file1.txt 21 file2.txt那标准错误会先指向终端然后再把标准输出重定向到文件最终错误信息还是会打到终端上。这个顺序问题如果不实际操作光靠背结论很容易搞混。我当时做的时候就先把理解成左边是旧内容、右边是新内容的赋值操作在草稿纸上画了文件描述符的指向图最后才判断清楚。如果你在笔试前想突击这个知识点我给你一个最稳妥的记忆锚点从左到右依次解释重定向每一步都站在当前shell进程的文件描述符表角度去理解。标准输入是0标准输出是1标准错误是2file就是让1号描述符指向这个文件21就是让2号描述符指向1号当前指向的地方。顺序不同第一步改变的描述符就不同最终的结果自然不同。3.2 进程、管道与僵尸进程系统编程基础题Linux部分还有一道综合题考的是fork()和管道。题面大致是父进程创建一个管道然后fork()一个子进程子进程往管道写数据父进程从管道读数据问如果不关闭管道的读端会发生什么这个题目的答案是父进程会一直阻塞在read()上因为管道有数据可读时read返回没数据时会阻塞等待写入端关闭。如果写端一直不关闭子进程没退出或子进程也继承了写端读端就永远等不到EOF。这道题的隐藏考点是fork()之后子进程会复制父进程的文件描述符表所以管道有两个写端——父进程的和子进程的。即使子进程写完之后退出父进程的写端还开着read()仍然不会返回EOF。正确的做法是父进程把自己的写端也关掉只保留读端。这个话题在笔试里不会要求写完整代码但会考你填空父进程应该关闭___端以及判断某个操作后会发生什么。这一题我建议所有准备笔试的同学都自己在本地跑一次。代码量不多大概十几行但运行结果会给你非常直观的体感。很多系统编程的题比如僵尸进程的产生原因和waitpid的作用都可以用这种自己写一个不回收子进程的父进程然后ps -el看状态为Z的方式去理解。笔试只是结果你真正要建立的是一套进程生命周期的系统观。3.3 网络排查里的Linux考点从ping到traceroute网络基础的部分远景笔试和Linux命令做了结合。它给了若干条命令让你选出哪一个可以查看本机监听的TCP端口。ping是ICMP探测netstat -tlnp才能看监听traceroute是看路由路径ifconfig是看网卡配置。这题本身不难但它的意义在于提醒你实际项目里排查网络问题光会ping是远远不够的。如果你以后做分布式或物联网方向类似连接超时排查的思路可以提前储备一下先用ping确认网络通不通再用telnet ip port确认目标端口通不通接着用traceroute看哪一跳延迟异常最后用tcpdump抓包看有没有重传。这些其实都不是特别高深的命令但笔试把它们放在一起考说明岗位日常开发中很可能要跟设备、网络打交道系统级的排查能力是刚需。4. 算法与数据结构题目难度适中但边界条件和设计感很重4.1 第一道编程题字符串相关双指针技巧与复杂度分析第一道编程题我印象比较深题目是给定一个字符串找出最长无重复字符子串的长度。这道题在LeetCode上是第3题本身不冷门但远景给了一个额外的限制字符串中不仅包含字母还包含数字和特殊字符要求你写时考虑字符集可能很大的情况不能假设只有26个小写字母。这道题最标准的解法是滑动窗口加哈希表。我用一个HashMapCharacter, Integer记录每个字符最近一次出现的索引然后用left指针维护窗口的左边界。遍历到某个字符时如果它已经在哈希表里且索引不小于left就把left移动到上次出现位置的下一个否则窗口就能继续扩大。每次计算right - left 1更新结果。时间复杂度O(n)空间复杂度O(min(字符集大小, n))。这里我想强调一个容易扣分的点很多人在笔试里会直接写假设只有小写字母然后用一个长度为26的数组代替哈希表。如果题目没有明确说明字符集范围这种假设是有风险的。我写的时候就按照任意ASCII字符来考虑虽然代码稍微多几行但能体现你考虑到了题目隐含的边界。笔试阅卷很多时候会看注释和思路而不是只跑测试用例。4.2 第二道编程题带过期时间的缓存设计如何用数据结构组合实现第二道编程题的分值更高题目类似设计一个带有过期时间的KV缓存支持get和put操作并且在get时如果key已过期则视为不存在。这道题说难不难说简单也不简单因为它考察的不是某个孤立算法而是数据结构的组合能力。我的做法是用一个HashMap存key到value以及过期时间的包装对象再用一个优先队列小顶堆来维护每个key的过期时间。put时插入到map和堆中get时先从堆顶弹出所有已经过期的key再检查map中是否存在目标key。这样做的好处是过期key的清理只需要在插入和查询的时机进行时间复杂度依然是O(logn)级别最坏情况也就是每轮弹出若干个过期项。但这里有一个隐藏的坑如果同一个key被多次put堆里会存在多个不同过期时间的相同key。我在弹堆顶时需要判断当前堆顶的过期时间是否等于map中该key的过期时间如果不是说明这是旧数据直接弹出忽略。如果不加这个判断很可能会在get一个没过期的key时因为堆顶是同一个key的早过期版本而误删。这个细节我是在写完后自己走了一遍测试用例才发现的如果笔试时时间紧很容易漏掉。这道题反映出来的思路是远景对算法题的考察不只是会不会写某个模板而是能不能在模板基础上做变通。优先队列加哈希表并不是什么冷门组合但能结合过期逻辑处理干净的人并不多。如果你的目标是这类公司建议把常考的设计题比如LRU缓存、LFU缓存、带过期时间的缓存都亲手写一遍重点练组合数据结构处理工程问题的感觉。4.3 数据结构基础填空题从B树到HashMap的冲突处理除了编程题数据结构部分的选择填空也不少。特别是B树的非叶子节点不存储数据只存储索引、叶子节点用链表串起来这些特性在笔试里出现了两次。远景的考法是把B树和InnoDB索引做结合问为什么数据库索引适合用B树而不是AVL树。这个问题的标准答案是B树高度更低且叶子节点链表便于范围查询但如果你只答了矮没答范围查询和磁盘IO次数少就会被判定为不完整。HashMap的冲突处理也考了一道问的是JDK8之前用链表解决冲突JDK8之后引入红黑树的条件是什么。这道题的考点不只是阈值8和最小容量64还包括哈希桶中的元素是相互独立事件还是相关事件——官方注释里提到泊松分布。我当时在答案里写了当哈希函数足够随机时桶中元素个数到8的概率极低但一旦超过8说明哈希函数可能有问题用红黑树来缓解极端情况这样的回答能顺带展示理解深度。5. 从这套题反推你应该怎么准备才能避开最常见的坑5.1 选择题的选项设计与多选变单选陷阱这套笔试题里真正拉分的其实是多选题。我观察到一个规律几乎每一道多选题都有一个听起来完全正确但表述夸张的选项比如Java的垃圾回收会立即回收不再使用的对象Linux的rm命令删除的文件一定无法恢复。这种选项如果你不确定最好的策略是不选。因为多选题的计分规则通常是多选错选不得分少选按比例得分——我不知道远景第二批是否完全如此但很多笔试都采用这种规则。所以实际操作上我在做多选题时会把没把握的选项当作错误选项处理只保留那些能百分百确认的选项。这听起来有点保守但对于保证整体正确率非常有效。你想想单选错一题丢一分多选错一题可能丢两到三分而且多选题往往集中在Java和Linux这两个板块这些板块的正确率对最终的筛选结果影响很大。5.2 边界测试与读题仔细程度编程题最容易踩的隐性坑编程题的隐性坑主要集中在边界条件上。第一道字符串题目如果字符串为空我的滑动窗口应该直接返回0如果字符串只有一个字符应该返回1。这些看起来很简单但一定不要在笔试里跳过去。有的同学喜欢先写主逻辑再补边界我建议反过来先把边界的if判断写好再写核心逻辑这样就不会出现主逻辑跑通了但空输入报异常的情况。更值得提的是读题。远景的第二道编程题的题面里有一个小陷阱它说过期时间以毫秒为单位为每个key单独设置。如果你没注意每个key单独设置很容易默认所有key共用一个全局过期时间然后设计出一个完全错误的数据结构。这是笔试非常经典的失分点——不是不会而是没看清。我的习惯是读题时拿笔圈出每个数字和限定词特别是每个单独最多不超过这些词然后用自己的话把题目重述一遍再开始写。5.3 从笔试到面试的复盘方法哪些知识点大概率会被追问如果你笔试顺利通过接下来就是面试环节。远景的面试官通常会拿着笔试题的答题记录来问特别是那些你答错或答得不完整的地方所以考完一定要复盘。我在笔试结束后花了大约一小时把所有不确定的题目整理成了三个清单一是完全不会的二是会但答错的三是会且答对的。重点分析第二类因为这类通常代表你有一个自以为理解了的盲区。比如我当时就对21这个重定向顺序特别模棱两可虽然最后选对了但我知道自己是蒙的。考完后我不仅补了重定向的知识还连带复习了shell里文件描述符的继承规则后来面试时果然被问到了类似的场景。另外一个复盘技巧是把题目里出现的所有为什么问题单独摘出来用STAR法则写成一段面试回答。比如HashMap为什么用红黑树“为什么树化阈值是8”“Linux下如何排查端口占用”这些问题既可能是笔试原题也很可能是面试官追问的素材。提前准备好结构化的回答比临场发挥要稳得多。6. 写在最后这类笔试的真正价值不是刷过去而是查漏补缺远景智能这套2023秋季招聘软件技术笔试题第二批对我来说更像是一次基础知识的全面体检。它没有特别偏难怪的算法也没有需要背大量框架API的题它的每一道题几乎都在围绕你对底层机制的理解深度来设计。哪怕你最后不投远景我也建议你按照类似的维度去做一次自测Java集合的底层结构、Linux文件描述符与进程模型、数组和指针在不同语言中的差异、经典算法题的边界处理——这些几乎是大厂笔试通用的考点。我个人还有个体会是笔试准备不要太依赖现成的题库。像热词里的java笔试题大全带答案这类资料可以用来看考点范围但如果你只背答案碰到远景这种包装过的题目会非常别扭。与其花时间背三五十道题不如把HashMap源码、常见Linux命令的底层语义、三五种经典数据结构的设计思想弄明白。笔试只是敲门砖真正帮你走到最后的是你对计算机系统如何运作这件事的扎实理解。最后分享一个小技巧笔试前最好自己在一台Linux机器上把fork、管道、重定向、netstat这些命令都跑一遍不需要多深入只要把现象和原理对应上就行。很多笔试题目你光看文字觉得抽象但只要脑子里有一个实际跑起来的样子选起答案来会果断很多。祝准备笔试的各位顺利把这套题里的经验转化成自己的知识网络后面不管去哪家都会省力不少。
返回列表