2024 秋招总结+面经

离谱的很的2024秋招,投了65家,笔试测评35+,约面20+,OC/Offer 7
C/C++ 客户端、服务端、嵌入式投了个遍,C++中大厂就两家有意向,其他不是泡池子就排序挂,算了应该也不等了,Java大数据方向某家开的实在太高了,去你的C艹!
OC/Offer C/C++/Go:3, Java: 4

基本背景

科班硕士,接触计算机非常早,有一年华为云的实习,项目较多,成绩较好(保研+国奖),其他比赛相关的也有。
从小到大,做项目较多,技术栈较全,今年秋招除了前端和算法没投,其他大部分方向都试了一下。
主要方向包括:1.C/C++/Go 服务端; 2. C/C++ 客户端(Qt, Electron); 3. C/C++ STM32/x86 嵌入式; 4. 大数据,数据仓库,数据平台相关(Hadoop/Hive/Zookeeper); 5. Java 服务端(Springs); 6. 云计算,云原生等方向 (IaaS/SaaS/k8s);

基本总结

一个字卷捏,总跨度7 ~ 10月,历经4月左右,前期(7~8月提前批)对非9的人来说确实挺难的,一度怀疑人生,9月中旬后期开始慢慢喜报连连,面试遇到的面试官90%都挺好,体验良好。
大公司面试基本上贴近社招,以实习、项目细节、场景题、工程问题为主,最多在项目/实习过程中针对特定点问类似八股的问题,总之基本上体验很舒服。
其中有些大公司可能一面必须问八股,不过基本上都很通用的问题,偏向数据结构、算法、操作系统、编译语言类问题,基本上问题不大,也不用特别准备。
然后是手撕、场景题,可能和我背景有关,基本上手撕就没遇见几次原题,不是场景题就是原创题或创意题,这点好评,绝大部分中大厂都不是网上那种故意出困难题恶心人,非常贴近上下文和工程实际。
小公司投的不多,有些小公司问题太水,练手几次就没怎么投了,有些小公司八股简直精神污染,啥xxx类的默认构造参数是啥,啥xxx框架某某符号的区别,滚滚滚,不知道也不想知道。
面试尽量抓住主动权,主动暗示面试官,避免ta乱问,比如某某问题回答的时候带上你擅长的小点,实践中面试官后面大概率就问这几个点,如果可以直接当场演示项目,可以有效避免乱问,不过翻车也可能,有些面试官很讨厌这种风格,偶尔一激动该翻车也翻车。
问题不会,其实没关系的,可以猜的,比如当时一个全栈的岗位,因为我接触计算机比较早,前端这块我写ES5和传统的页面技术多啊,Reactor/Vue这些还处于萌萌哒的状态,几个ES6的问题过来,实在酸爽,只能ES5连蒙带猜,加场景解释应付过去,不过结果还是好的,感谢面试官不杀之恩。

客户端/服务端方向

绝大部分公司C/C++这边基本上都有一定量的八股环节,如百度、腾讯、米哈游等,问题大同小异基本上是STL(如各种容器底层)、编译器/编译过程/CMAKE类(静态链接、GCC/VSBuild等)、C/C++语言基础(如内存对齐、sizeof、虚函数表等),这类问题基本上送分题。

客户端方向的话,除了C/C++基础,其实就可视化编程那套,问来问去都吐了,兴趣也不是特别大,前期投了几个,后面没怎么投了。

服务端方向的话,HTTP/TCP/DNS/IP等网络问题少不了,光那个经典的URL到浏览器渲染问题不知道遇到几次了,然后从一个小点随机抽取小问题进行问,如HTTPS细节,HTTP1/2/3区别等,粘包/拆包等。
我遇到基本上都是综合问题,这类综合问题还是爽,如该大问题,基本上从客户端发送URL到服务端处理完,返回到前端DOM解析给你讲个饱,中间再把DNS、鉴权、文法处理、DOM更新等子步骤一通吟唱,基本上一道题面试5~10分钟没了。
问数据结构,TreeMap,HashMap,B+Tree,ArrayList 递归从 链表/线性表-> 二分查找树-> 平衡树(附带旋转、剪断等平衡操作基本思想) -> HashTable -> Hash+LinkedList -> Hash+List+Tree -> 内存不够 -> B+Tree 给你讲个饱,然后直接自动分析一下各种情况复杂度和线程安全问题等,一般可以直接代入下一个线程安全环节。
问线程安全问题,这个互斥锁->CAS->Atomic->lock段->AQS等一路连招就行,然后竞争型多线程编程扯一下,非竞争型无锁(如分治任务分配)扯一下,线程池技术扯一下,如果Java再适当讲一下与C++11的区别和锁的升级问题,JUC那套也够了。
问操作系统,基本上那个破页面问题、虚拟内存问题,问了好几次,信号量问题也有较大概率问,一般会问虚拟内存作用常见实现、内存管理相关、任务分配相关等。C++这块可能会顺便往内存池、对象池、各种池、程序内存结构(堆栈,esp, ebp, segment相关)上带,这类问题写过这些池子或有汇编基础,比较好答,直接回答我之前某某项目怎么样怎么样就可以搞定大部分问题。
然后这一块,一般肯定带一下进程、线程的区别,Go基本上还问一下协程,不过基本上也是送分题,难得不大。

问RPC,这个属实是问麻了,好几个公司都问,无论C++,Java还是Go,几乎必问的问题,无聊的很捏,基本上关键字就是心跳包、异常措施、异步问题、使用场景、性能问题、协议设计等。

C/C++高频基础

STL,list,unordered_map, map, 各种迭代器,std::xxx这些

C语言基础,sizeof,对其,位段,宏等

元模板编程相关,如模板虚函数,与inline结合这些等

指针类问题(场景题或八股),虚函数相关问题

C++ 11+, std::move,&&, 智能指针, std::mutex, std::thread 等这些几乎必问

C++面向对象,多继承特性,构造函数,new/malloc这类区别问题,高级的可能问对象内存管理这些,析构函数

C/C++问的很少的但是可以加分的

这类问题问的较少,但是可以在场景题或综合题里面加分的

运算符重载,友元等,可以顺带一下提一下他们的应用价值和场景

RTTI,高级特性,可以说一下场景、价值

SFINAE,高级特性,这个可以提一下C/C++的设计思想,对比一下为什么这种编译期特性性能上的优势和Java这类语言运行期机制的异同

内嵌汇编、特权指令和指令加速,有时候可以说一下这个特性,为什么需要指令加速、特权指令,asm关键字

汇编,我之前搞了挺久i386/ARM汇编相关,很多C++底层问题用汇编回答其实更好,如switch优化、段地址寻址、中断这些

匿名函数,这个几乎没被问过,[&]、[=]这些区别,匿名函数的递归,typeid, typeof相关

其他C++ 11+的新关键字

JAVA服务端

我搞C/C++非常久了,很多问题其实不用太怎么准备,但是Java不行啊,Java主要都我本科以后才搞的,虽然JDK已经看了挺多了,但是有些Spring八股真的恶心人,多CPPer这种看管底层的人实在不舒服,好在大公司问的也合理,配合C++功底,其实翻车也不多。

问JVM调优,这个我的策略直接将三种情况的实际方案,如I/O对象、容器占用没光,JMAP相关命令连招;垃圾回收如各种串行收集器、并行收集器、并发收集器这些结合一下具体场景答一下;通用类问题,如Stop the world,OOM这类避免等。

问JDK八股,这些和C++ STL差不多,基本上就是那些扩容方法,为什么这样扩容,为什么1.5为什么不2这些,扩麻了都,忘记了就直接用C++ STL相似的赌,基本问题也不大。其他一些就是一些常用的utils的用法如StringBuilder这些,无聊的很。

问JUC,现在基本上JUC必问,这个其实还好,不就是Atomic封装的高级数据结构实现的高级轻量锁吗,CAS+AQS+各种Lock ->各种工具容器(如ConcurrentHashMap,ConcurrentLinkedDeque) -> 然后说一下和互斥锁实现的一些差异也够了。

如果是Springs,几乎必问AOP/IOC,AOP这玩意不就是类似C++以前采用的钩子函数吗,那个啥函数注入,基本上我都用C++之前项目的I/O计数的场景说明,然后适当介绍一下代理模式差不多了,IOC有点像C++的对象池,然后说一下线程安全和几个常见注解(@Scope)、随便说一下反射怎么给Java对象成员赋值够了。

其实大部分Java语言问题除了字节码、类加载、双亲委派、JVM这些实在太Java的问题,大部分用C++也可以搞定。

其他通用问题

由于背景问题,我有一个100TB的分布式项目和华为云实习,这些问题和项目关系非常大,基本上围绕具体场景和优化进行。

MYSQL

引擎N件套,如InnoDB,MyISAM,ARCHIVE,MEMORY等

索引N件套,如为什么Hash,为什么BTree,那些字段可不可以加索引,为什么,聚集索引,主键索引,索引失效的问题,explain等

亿级大表优化,如拆表,索引怎么搞,分区等

中间缓存表使用,为什么这样设计,枚举类型等

事务,线程安全,存储过程等

REDIS

因为这玩意差点翻车了好几次,哇怎么这么喜欢问这玩意,这玩意我用的又不久,好多特性还来不及看,呜呜呜

Redis vs Memcache,为什么Redis这么快

Redis常用数据结构,我用的最多的那个

使用场景,那些地方用它,为什么用它,技术选型

线程安全,为什么单线程这些

其他性能问题,什么缓存击穿这些,可以结合实际场景来答一下

其他杂七杂八的问题,Redis集群设计,一致性hash等

RABBITMQ

嘻嘻,这个问的不算多,好多面试官听见兔子就随便问一下,kafka? (优质解答:没怎么用过捏) 哈哈哈
一些问题: 1. 热点数据特点,怎么避免重复消费;2. MQ使用背景,为什么使用这玩意;3. 结合项目的一些乱七八糟的问题,为什么这个不用RocketMQ/不用Kafka,MQ在你项目中起到的作用,和RPC的区别等。

HADOOP/HIVE等大数据处理

其实基本上问的就是Map-Reduce那堆,Map-Reduce的设计思想,应用场景这些,不过涉及大数据处理基本上都会问一通分治思想,一个挺有意思的综合题,写出归并排序,并说一下归并排序中各过程与Map-Reduce的相似处。

其他一些杂七杂八的问题:如技术选型为什么用这个,场景题(TB级别、PB级别怎么实现优化等),规模问题问性能指标问题(如1e6,1e7,1e8的存储介质表现,冷热存储,QPI,IOPS等),HDFS系列问题(有可能提到其他文件系统细节)。

C/C++ 嵌入式方向

本来觉得后端命不久矣了,正好之前高中玩了挺久嵌入式,想趁机转一波嵌入式,好家伙给机会的公司不多就算了,面试过了还要我转Java(不是吧阿sir, 好歹我本科无人机有获奖啊,又不是不会啊!!!搞Java我来您这。。。),裂开。前期投了几家嵌入式,发现情况不怎么好,后期不敢乱投了。

有一说一,嵌入式笔试比应用开发的笔试良心太多了,应用无论客户端还是服务端,妈的前面小题就已经够恶心了,然后基本上代码大题都至少有一道甚至多道动规/回溯恶心一遍,相比之下作惯应用笔试,嵌入式笔试大部分简直降维打击。就算联发科这类有名的公司笔试也比应用开发的良心太多。

嵌入式出去C/C++基础一般会问挺多嵌入式基础, 其实相比后端那卷的收敛的问题,相对其实相对简单不少,基本上就是:

STM32八股,定时器,GPIO等 (实在吐槽,这么喜欢问STM32,理解一下x86的同学啊,x86嵌入式我更会一些啊,呜呜呜)

时钟,晶振原件,其他常见原件作用等

中断,中断的实现(中断向量表这些),指令集问题,中断在驱动的应用

最小系统,那些构成最小系统这些问题

DMA、I2C、其他如一些串行端口、并行端口这些吧

寄存器使用,引脚一类基础问题

PCB板的一些问题,如高速信号走线等

FLASH类问题,说一下几种FLASH等

其他一些杂七杂八的问题

算了算了,就不该碰瓷嵌入式的,面试能答出来,也不给机会,爱好只能是爱好。。。

基本结论

我不觉得今年有什么回暖不暖的,确实头部大厂工资都开始卷了,利好头部的人,但是后面的基本上惨兮兮,同名的情况也不怎么样,比亚迪今年也翘的很(钱是真的少),身边没约面的也挺多,以前本科可以随便进的公司,现在硕士还不一定进的去,给硕士开本科价都十分正常。
计算机现在也开始慢慢封车门的感觉,学历今年明显比以前更重要,实习+项目+竞赛+成绩也不一定有双9有用,就算简历过了、面试过了,排序挂就很酸爽,面试官前一秒对你各种赞美夸奖,下一秒池子泡到开奖。其实这种行为非常理解,HC指标毕竟就这么一点点,只能硬卷了。
今年秋招C++方向真的是又卷,钱也就那样,HC相比Java更是少之又少,进度推的也慢,同门Java、算法、前端基本上比我快了不少,拿的意向相比今年Java 吓人的小目标,实在窝囊,毕竟C++是真爱啊,搞了这么多年了,非常遗憾,不过面向薪资的编程,去你的C++。

除了学历这种案底问题,其他方面,其实个人建议,1是项目一定要多实践,项目和实习是王,其实项目写多,很多问题可以直接裸面的,直接上场景回答比单纯八股管用;2是没必要盲目刷题,现在公司精明的很,原创题不说,场景题、业务题也开始多起来了,更重要是对数据结构和算法的深入了解,可以参与开源项目或写写简易版编译器、解释器、数据库、框架、操作系统等这类综合性强的项目。
最后祝我们都有美好的未来!