秋招总结 | 非科班菜鸡大厂艰难求职之路
一、写在前面
- 求点赞、评论、收藏!
- 秋招大致从6月中旬到9月下旬,主要还是集中到八月底(实习结束),TP,vivo等提前批开放的很早,抱着试一试的想法,没想到顺利通过了,还拿到了不错的评级和薪资。后来因为拿到了鹅厂的转正offer,所以后续只针对性地投了几家,开始全部冲的成都岗位,结果因为投的比较晚,京东、字节、百度甚至没有面试机会(大家也慎重考虑,感觉成都卷的一比)。岗位基本全部是后台开发,九月份返校之后很多没有做记录,这里凭借记忆做一下简单的介绍,如果对大家有帮助的话,务必<stron>,给俺加加热度,感谢~。</stron>
截止到10.20面试情况:
- 已意向:腾讯(小sp)、阿里(yyds)、美团(小sp)、字节(yyds)、TP-LINK(yyds-2)、vivo(sp)
- 无消息:商汤、华为
10.20更新 字节、米哈游面经
二、秋招情况
1. TP-Link(成都已意向)
2. vivo(深圳已意向)
3. 商汤科技-SCG(成都HR面完等结果)
- 详见帖子商汤科技 后端开发一二三面面经
4. 腾讯-TEG(深圳已意向)
- 实习转正,感谢鹅给我带来的成长。没有腾讯就没有秋招的我,这里也感谢年初不曾放弃的自己。
5. 阿里-阿里云(杭州已意向,已签三方)
简历评估面:基本是针对简历上的点一个一个问,穿插八股
系统调用:本质是过程调用,调用方和被调用方处在不同的状态下(用户态和内核态),系统调用返回后可能不会直接到对应的函数栈,也可能会执行调度
内存泄漏:编码习惯、智能指针的使用、内存泄漏发生的检测工具(valgrind)、堆栈信息
代码量,如何统计:用正则表达式、VS自带
git行数信息:git --nums
python协程:省去了线程切换
python为什么用多进程而不用多线程:数据安全角度引入了GIL,全局解释器锁;由于GIL存在,一个进程只能执行一个线程,因此多线程(计算密集型,获取锁释放锁)效率并不高;对于IO型任务我们可以通过线程调度来让线程在执行IO任务时让出GIL
MySQL中drop、truncate、delete区别:delete删除一行,记录在日志;truncate清空表数据,不记录日志(只记录释放)不能恢复,没有激活触发器,执行速度快(表和索引会恢复到原始大小、索引还在);drop删除数据和表结构(全部释放)
三大范式
一面:主要问了项目、智力题、补充做算法题
介绍项目,围绕项目说了很多
python相关的内容
cpp四种强制转换
智力题:3点15分时钟和分钟的夹角、赛马问题
算法:具体题目记不清了,一道easy、一道medium、一道数据库设计题
boss面:技术内容不多
项目经历
转码历程、学习经过
进程线程区别:task_strcut、数据结构、clone参数、使用场景和注意事项
智能指针:shared_ptr unique_ptr weak_ptr, 使用场景、数据结构、线程安全等方面
多态:静态多态、动态多态、虚表、虚指针
boss介绍业务
HR面:常规问题
6. 美团-基础研发(成都已意向)
这里有点记不太清了T_T,记录一下影响深刻的吧
北京一面:
OS中信号实现的机制:软中断、信号表、kill命令
大量的TIME_WAIT的消耗了什么资源:文件描述符?这里不太确定
项目设计中的心跳机制:这里是项目本身的问题,和面试官探讨了如何解决
得知是北京岗位,申请调了一下岗位重新面试。。。
成都一面:
项目
常规八股:线程进程,RC、RR下加锁的区别,多路复用
字符串的全排列(回溯)
成都二面:
项目问了很久
介绍业务
HR面:常规问题
7. 华为-CBG(深圳、主管面完等结果)
一面:
项目,和面试官聊了很多可以优化的点
SSL握手、数字证书
有效括号(dfs):给定n,输出所有合法括号序列
面试官介绍业务
二面:
项目
合并字符串(并查集):给定字符串数组,任意串中的字符重复出现过则合并,返回不能合并的数量
主管面:
项目
主管介绍业务(HMS、PUSH)
工作地考虑
薪资
8. 字节-抖音电商(上海,已意向)
一面 10.09
算法1:寻找有序数组中给定数字的上下界,不存在返回-1
一次二分找下届 + 遍历找上界,时间复杂度
两次二分,类似实现lower_bound和upper_bound, 时间复杂度
实现2
算法2:二叉树的层序遍历
队列和栈的区别
遍历奇数层
遍历斐波那契层
斐波那契递归过多会有什么问题,如何解决
写一下优化的算法
二面 10.11
https
四次握手
对称加密和非对称加密
浏览器什么时候用私钥
虚拟内存概念和优势
主键索引和普通索引区别
为什么先要到主键上
算法题:类似岛屿数量,增加了相同数量岛屿合并、并求出最大岛屿面积的操作
三面 10.15
虚函数
构造函数和析构函数可以是虚函数吗
构造函数和析构函数中调用虚函数
虚拟内存
抛硬币概率问题
算法:拓扑排序
9. 米哈游-服务端开发(上海,二面挂)
一面 10.8
快速排序时间复杂度,最坏情况
快速排序口述一下
快速排序是稳定的吗
数组中存在大量相同的数,快速排序会有什么问题吗
C++智能指针
shared_ptr是线程安全的吗
weak_ptr如何让访问资源
多态
虚函数
纯虚函数
多个虚函数,虚指针如何正确访问
static和dynamic_cast区别
dynamic_cast可以转换不含虚函数的父子类吗
读取数据的过程
僵尸进程及其解决方案
孤儿进程及其解决方案
Linux CPU占用过高如何定位
TCP保证可靠的一些机制
重传机制
拥塞控制控制的是什么
拥塞窗口和收发窗口的关系
Nagle算法及其问题和解决方式
反问
二面 10.13
算法1 实现atoi
算法2 top k
C++智能指针
weak_ptr怎么实现lock
unique_ptr怎么实现资源独享
io复用
ET模式下读缓冲区满了怎么办
引出reactor模式
引出消息队列
反问:游戏服务器和服务器的区别、建议
//实现atoi class Solution { public: int atoi(const char *str) { int n = strlen(str); long long res = 0; int flag = 1; int i = 0; while (str[i] == ' ') i++; if (str[i] == '+') i++; else if (str[i] == '-') { i++; flag = -1; } while (i < n) { if (str[i] > '9' || str[i] < '0') { return flag * res; } else { int temp = str[i] - '0'; if (flag == 1 && 10 * res + temp > INT_MAX) return INT_MAX; if (flag == -1 && flag * (10 * res + temp) < INT_MIN) return INT_MIN; res = 10 * res + temp; } i++; } return flag * res; } };
//topK问题 class Solution { public: int findKth(vector<int> a, int n, int K) { // write code here int l = 0, r = n - 1; int index = partition(a, l, r); int target = n - K; while (true) { if (index == target) { return a[index]; } else if (index > target) { index = partition(a, l, index - 1); } else index = partition(a, index + 1, r); } return -1; } int partition(vector<int>& nums, int l, int r) { int i = l, j = r; int temp = nums[l]; while (i < j) { while (i < j && nums[j] >= temp) j--; while (i < j && nums[i] <= temp) i++; if (i < j) swap(nums[i], nums[j]); } swap(nums[i], nums[l]); return i; } };
10. 其他
- 其实在八月多的时候也陆续投过一些其他公司,后来因为拿到了一些意向,所以很多面试都拒绝了。
11. 总结:面试项目问的居多,涉及分布式、高并发的场景是面试官爱考察的点。八股文还是以前那些吧,个人觉得能够结合更底层的方式去说,会让面试官更满意。剩下的就是等消息,已经面不动了。
更新一下:近期收到了上海米哈游和字节节后面试的通知,然而已经耍了一个月。。。属实是面累了,不会整了,祝大家国庆愉快。
三、经验分享
- 楼主背景:22届985材料本硕,2020年9月开始正式接触C++,课题组的事情非常多(项目申报、专利、材料撰写这些,硕士狗懂得都懂)自主学习的时间特别少,一路磕磕绊绊也算是有所收获。在这里也简单分享一下学习历程。
1. 语言基础
- 这一块基本是看书 + coding,学习语言基本是在项目(科研项目)中慢慢摸索,后续慢慢看完了 C++Primer, 中间穿插了数据结构和算法的学习,对我而言,快速上手使用C++的一些东西让我觉得成就感满满 。
- 书籍:C++ Primer、Effective C++、深度探索C++对象模型、STL源码剖析(惭愧、后两本基本没看)。
2. 数据结构和算法
- 书籍:大话数据结构,这里说一下只看这一本是完全不够的,也是我现在算法薄弱的原因,个人觉得时间充裕的话,还是找一些更深的系统性学习一下
- 刷题:主要是在leetcode中文站,陆陆续续刷了400左右吧。 我的顺序 按tag刷一部分(看大佬们的总结穿插针对性学习)、剑指offer、codetop (这里因为我缺少系统学习,刷了不少题但是感觉算法依旧很薄弱,大家引以为戒)
- 视频:资源很多不做多说
- 关于算法的总结网上有很多很多的相关资料,我整理了一下面试中遇到的一些数据结构设计的代码code,欢迎勘误
3. 计算机网络
书籍:计算机网络(谢希仁老师版本的,简单轻薄hh)、UNIX网络编程(看了一点点)、图解HTTP(第一本书里面这里讲的比较少)
视频:bilibili(【up:方方方已经存在了】),教材刚好是谢希仁老师的,算是我的计网启蒙课
博客、公众号:小林coding的图解网络,再有就是日常的一些积累,包括一些网络新技术
4. 操作系统
- 书籍:深入理解计算机系统、Linux内核设计与实现(惭愧惭愧又没看完,只看了一点)
- 视频:清华大学陈渝、哈工大李治军
- 博客:这里零零散散的很多基本就是靠日常积累了
- Linux:多练习常用的指令~
5. 数据库
- 先用起来,基本的CRUD
- 书籍:高性能MySQL,重点看了5-6章、极客时间MySQL实战45讲
- 刷题:我只刷了leetcode上面的免费的几题emmm
- 技术博客,这里基本是零零散散去熟悉和了解,主要是数据结构、日志、隔离级别之类的
6. 项目
项目或者实习经历,会让面试官的提问更有指向性,甚至在很多面试中,我连八股文都没有被问到,全程讨论项目的技术点、改进优化方案,同时自己的项目或者想法也在面试中不断累积和完善,可能是所谓以战养战吧!
课题组项目
开源项目:这里很多大佬们推荐了我就不说了
确保写在简历上的项目点是你很熟悉的、相关领域的技术是有一定了解的。这样和面试官谈起是游刃有余的。并且最好有自己的领悟,能在开放性的场景(面试高频)中结合自己了解的技术做理论分析。
7. 实习
- 没有这段实习经历,我感觉自己毫无亮点。实习帮我巩固了硬实力,也稳固了心理防线,认识了很多志同道合的伙伴,一路带我学习~
8. 总结
一是扎实的学习、二是不断的探索和主动学习、三是共同战斗。
因为我实际接触编码的时间很短、理解也很浅薄,很多说法并不是适合所有人,很多知识最好是系统性的学习,包括到现在,我依旧认为自己一窍不通,还有无数东西需要学习;关于主动学习,自觉做得还不错,我常常习惯顺着一条线把问题理清楚(当然可能并未清楚,只是达到我心中的预期);另外有一群志同道合的大佬一起并肩作战,压力会小很多、动力会多很多。很多时候累了烦了我就告诉自己,先做五分钟,一切都可以静下来。回想最初的那段时间,工作点在赶项目(编码无关的项目)、写文档,剩下的那么零零散散的时间真的是挤出来学习的。我一直觉得自己是运气很好的人,希望能把好运带给大家。大伙早做决心、早作准备、拿到满意的offer。共勉!
四、写在最后
- 以上就是我,一个非科班转码一年菜鸡的成长和收获,如果看到这里你有收获的话,烦请评论+点赞+收藏啦,对我很重要hhh~
#我的秋招总结##腾讯##美团##华为##字节跳动##商汤科技##米哈游##阿里云#