首发于个人公众号上,原文链接:https://mp.weixin.qq.com/s/AYe3tnuOmqR4jdDndDGW-Q
最近应邀在牛客网写 C++ 求职专栏,又把以前的秋招总结补充了很多东西,现在想想还是发出来,希望能够帮助更多的新手小伙伴们。
楼主本硕均读于双非院校(普通二本学校)、本硕都是计算机相关专业,英语六级水平,本科时期辅修了一个水的不能再水的英语第二学位。
本科时期学过很多语言:VB、C、C++、C#、Java都有所涉猎,研究生时期则主攻Python和C++。研二上学期开始系统学习C++,并且不断系统看书和实践,中间崩溃过、迷茫过、放纵过,但从未放弃,始终相信自己,坚持咬牙走下去。所幸天道酬勤,最终也是拿到了一些不错的offer 。
笔者从 2020.6.15 号正式开始投递简历,到2020.8.23号截止一共投递过 94 家公司,其中既有提前批(2020年6月-7月),也包括正式批(2020年7月-10月)。
小建议:如果说求职者对自身实力不自信,可以多投投一些公司,选择面放宽一些,不要死盯着那几个大厂投。
共计笔试59场(最多一天做了5场笔试,那天差点去世),54 家公司给了面试机会,54家企业中有些企业是免笔试的。
最终成功走到了6家公司的offer环节:字节跳动研发岗SP、华为通用软件开发、百度C++研发岗、B站后端研发岗、深信服C++研发岗以及农业银行研发岗,最后签了字节跳动,也是自己心心念念的大厂之一,十分满意了~
接下来从6个方面对秋招进行复盘和总结,希望能够帮到大家鸭,特别是大三大四的小学弟们。
在秋招过程中,算法是极其重要的,再次重申一遍,真的很重要!笔试就不提了,算法不过关,笔试基本凉凉,面试基本都要手撕代码,很多面试过程中算法题具有一票否决权,如果你能够顺利解出来,面试也不一定过。即使面试过了,手撕代码没撕出来,面评估计也是一般般了。但是如果算法题做不出来或者说bug太多调试不通的话,面试上基本上就跪了(个人以及身边朋友经历,不一定准确),在牛客网上也看到过很多基础很好的牛友就是因为面试过程中的算法题没解出来而直接饮恨的,希望大家千万重视算法这一块,千万千万要重视算法。
我大概在力扣上刷了300+,HOT100都刷了,剑指offer刷了3遍,刷完这些基本够用了,自己也有注意总结题型,常见题型就是那些,所以算法题基本没怎么拉过我后腿。一般来说,主要考的就是动态规划、贪心、二叉树、链表、数组、字符串之类的。
推荐资料:
力扣1-300题(前300道题非常经典,建议学有余力的同学都刷一刷)
力扣HOT100(跟上面有不少是重复的,刷的时候要注意总结)
啊哈!算法、大话数据结构(这两本书都是面向新手的图书,图画很多)
剑指offer(这本书不需要多做介绍,校招必备)
挑战程序设计竞赛(这本书属于进阶一点的算法书籍了,作者是ACM-ICPC全球总冠军,可以说是世界顶级程序设计高手的经验总结了,需要慢慢消化,经典题型太多)
程序员代码面试指南(左程云大神的书,我并没有看完,只是看了其中的海量数据处理部分的题目就已经十分受用了,在某大厂三面中就考查到了其中的海量数据集处理的问题)
操作系统是比较重要的,面试三大要点之一(操作系统、计网、数据库),我是在B站上看过一些操作系统视频,同时自己慢慢看书、看博客学的。其中死锁、虚拟内存、堆栈、进程线程、内存管理、磁盘调度等都是重点,也是面试过程中问的比较多的一些知识点。你如果能够在面试过程中讲出来一些具体的操作系统知识,而不是泛泛而谈,肯定是很加分的,比如常见知识点进程线程区别,在提到线程切换比进程更快时,你如果能够很清楚明白的说出来进程切换做了哪些、线程切换做了哪些以及线程为什么比进程快,毫无疑问很加分的。
推荐资料:
B站哈工大操作系统:https://www.bilibili.com/video/BV1d4411v7u7
B站清华大学操作系统:https://www.bilibili.com/video/BV1js411b7vg
B站美国麻省理工MIT 6.828操作系统神级课程:https://www.bilibili.com/video/BV1px411E7ST
现代操作系统(也是讲操作系统的一本好书,讲的很细)
深入理解计算机系统(大名鼎鼎的CSAPP,被誉为“和金子一样重要的计算机基础书籍” , 很厚的一本黑皮书,需要慢慢看)
现代操作系统:原理与实现(上海交通大学陈海波教授的著作,书中主要介绍操作系统的理论与具体实现细节等,感觉不如CSAPP)
计算机网络也是重点之一,特别是HTTP以及TCP/UDP相关知识点,算是校招必备考点了,面试必问,但是难度是逐年上升的,原因可能就在于内卷程度越来越严重了吧。比如说以前对于三次握手四次挥手只问过程,现在直接让面试者画出客户端以及服务器端的各个状态码以及解释各种意外情况,比如SYN请求丢失会怎么样?
建议计网的学习先从视频入手,然后再看经典书籍,毕竟视频中的知识都是别人总结好又给你讲解的,只有自己亲自揣摩、亲自动手实践得来的知识才是自己的,自己学来的才是真,经过实践方知分晓的~
推荐资料:
B站韩立刚老师的计算机网络(韩老师讲课诙谐易懂,让你在哈哈大笑中学到很多知识点:https://www.bilibili.com/video/BV17p411f7ZZ**)**
图解HTTP、图解TCP/IP(这两本书比较简单,日本人写的,把复杂的知识点简单化)
网络是怎样连接的(这本书紧紧围绕一个问题:输入一个URL,直到我们在网页端看到请求的内容,这中间发生了什么?抽丝剥茧将这个问题逐步细化,带你走完整个网页访问的过程)
计算机网络:自顶向下方法 (也是常见经典书籍之一,重点看第三章传输层TCP/UDP)
C++跟Linux基本是离不开的,特别是后端方向跟网络通信关系很大。在实际工作里,很多成熟的项目都是在Linux上进行开发的。所以有必要学一些Linux以及一些网络通信编程,网络通信涉及到的知识点很多,比如IO模型、线程池、多线程之类的。本人在秋招过程中被问过不少网络通信的问题,最频繁的就是select、poll、epoll的区别以及相关底层实现了。这里也推荐一些资料,都是我个人看过的。
推荐资料:
鸟哥的Linux以及**Linux就该这么学这两本书(**个人感觉更适合作为一本工具书来使用,当然了,如果你有充足的时间也可以系统的看上一遍,对于Linux也会有更深的认识和了解了)
TCP/IP网络编程(韩国人写的,书中例子很多,适合作为入门,另外github上有很多笔记,可以边看别人的笔记边看书,加深个人理解)
Linux高性能服务器编程(游双老师的书,其中前四五章讲的是计网的东西,后面讲的很好,涉及内容很多,看完就大概明白服务端编程常见知识点和所需要掌握的技能了)
Linux多线程服务端编程:使用muduo C++网络库 (北师大陈硕大神的书,需要很多基本,建议后期再看,我也只是看了一小半)
数据库主要问的都是MySQL以及Redis相关的一些知识,普通研发岗掌握这两个基本也够用了,数据库常问知识点包括索引相关、性能优化、B+树、Redis底层模型、跳表以及缓存击穿、雪崩、穿透等常见问题。有时候也会让你手写一些简单的SQL语句,比如给你一个学生表和课程表,让你找出成绩排名前十的学生姓名之类的。
推荐资料:
MySQL必知必会(一本很薄的小册子,不到一周就看完了,看完基本的SQL语句没什么问题了)
高性能MySQL(建议只看索引以及优化这两章,后续的可以慢慢再看,这本书,真的真的很厚。)
Redis设计与实现(算是Redis入门资料吧,认真看完的话就对Redis有大概了解了,话说Redis这么火爆是有原因的,其中的一些精妙设计真的看完令人大呼过瘾,不得不承认,人与人之间真是有差距的。。。)
极客时间- Redis核心技术与实战 (中科院的研究员开设的Redis专栏,个人已经买了,非常不错)
另外再推荐基本数据库底层的书籍:数据库系统实现(华东师范大学数据学院指定数据库原理书籍)、MySQL技术内幕 -InnoDB存储引擎(**InnoDB的详细剖析)
C++的知识点比较多,也比较细,其实C++并不容易学好,如果你只是简单学习一下语法比如for循环、变量类型之类的,那么一两周你就可以上手,但是如果想要学好C++还是需要持之以恒的coding,由于个人是 C++ 技术栈,这里也只是推荐 C++ 相关书籍和视频,都是本人自己看过的经典书籍和资料。
推荐资料:
**B站黑马C++视频(黑马机构出版的入门级C++教学视频,很不错:https://www.bilibili.com/video/BV1Tb411j7uM**)
STL源码剖析视频(C++大师侯捷老师的源码视频,搭配STL源码剖析看效果更佳:https://www.bilibili.com/video/BV1db411q7B8)
C++ Primer 第五版(我愿称之为C++圣经,800页左右,我看了2遍,超级棒!强推!)
Effective C++、More Effective C++(前者2遍,后者1遍,跟C++Primer中很多内容是有重复的)
STL源码剖析(源码方面的好书,看了2遍,现在时不时还拿出来翻翻)
深入探索C++对象模型(重点是虚函数那一章,看完你就会对虚函数有新的认识了)
可能有些人会问,这些书你都看了吗?这也太多了之类的?自己能不能看完?
说实话,看着是挺多,但是其中有很多知识点是一样的,比如你详细了解计网后,游双老师的那本Linux高性能服务端编程中的前四章你大概略过即可,就不再需要细看了,知识是有相关性和相通性的,有了前面的沉淀后期自然就好很多了。
还有就是学会善用目录。有时候,看过目录后就大概知道这章或者这小节讲的是什么了,建议在看一本书的时候先看一遍目录,挑选出自己不懂得或者感兴趣的章节来看,而将已看过的或者暂时不需要的放到后期再去看 。
慢慢学、慢慢看,慢慢的就会有收获了。
如果你像我一样学校不太好,不是什么重点学校或者不是计算机专业的,那么请你笨鸟先飞,赢在起跑线上。上面的书籍资料之类的,我并不是在5个月时间内看完的,自从学**C++**以来就慢慢看、慢慢学的,我想其他语言,Java/Go之类的也应该如此。
正所谓,天道酬勤,你付出汗水和努力,剩下的交给时间就好!
最近在看汇编语言,王爽老师的那本《汇编语言》讲得真好,以前的那些寄存器、数据总线、地址总线概念忽然变得很清晰明了、活灵活现了,我自己也慢慢学会使用汇编写一些程序,懂得一些指令级程序优化的思路和方法,算是沉迷其中不可自拔吧!哈哈~
一入IT就做好终生学习的准备吧,你既然想要拿别人拿不了的高薪,怎么能不付出比别人多的汗水、时间和精力呢?天上掉馅饼是不可能的,如果你还在想着偷懒耍滑,想要不付出时间和汗水就想拿到好offer,说明你并不是很适合计算机这一行~
如果你没有别人聪明,不如别人条件好,如果你下定决心学习计算机,请你多投入时间、多投入精力、多投入汗水!
首发于个人公众号上,原文链接:https://mp.weixin.qq.com/s/MsaAr1ofstCgxqs749W1wg
大家好,我是阿秀
阿秀粉丝群里一位小伙伴顺利上岸百度实习岗了,把他的经历分享给大家!
本文发布相关内容,已取得粉丝本人同意~
新年就该分享一些喜庆的事情鸭!
本人本科就读于某计算机评级为 B 的双非学校,大学四年完全晃悠过去了。
本科时完全没有和工作有关的概念,就是该上课上课,老师的作业能混就混,后来随大流,迷迷糊糊去考研。
结果可想而知,考研结果比较差,大四春季跑了春招,被吊打的体无完肤。
还好后来,调剂去了一所比较差的一本学校,有点水往低处流了。
到了那里以后,才知道本科时候都在浪费时间,所以决心要好好找工作。
从研一开始就选择了C++,不为别的,就因为C++技术栈基本上只有大厂有,也就是想断掉自己去小厂的路,逼一逼自己。研一寒假开始刷题,我主要是刷力扣和剑指offer,其中力扣已经刷了440道了。
由于网课的存在,刷题的时间多了起来,并在那个时候看了 redis 的源码和游双老师的 Linux服务器开发,后面还看了 muduo (这个真没啥用,我看了还是不懂,哈哈)。
研二开始后,差不多十月份开始自己整理找工作相关的知识,就有点类似于阿秀前期发布的两期C++49问和59问一样,然后开始投实习,前段时间上岸百度实习岗,来分享一波,以下是面经。
阿秀的《逆袭进大厂》系列目前已经出了两期了,反响还不错,没看过的欢迎各位去移步。
1、介绍项目
2、针对项目:这个日志如何实现
3、deque的实现原理
4、vector与deque的优劣
5、vector的扩容实现
6、讲讲C++内存分区
7、讲讲移动构造函数
8、讲讲指针和引用
9、讲讲顶层 const、底层 const,引用更接近哪个
10、说下虚函数机制
11、深浅拷贝,深拷贝除了改写拷贝构造函数以外还要做什么操作(不太会,他提示下赋值操作符呢,我就说是要重载一下赋值操作符么?)
12、什么情况会调用拷贝构造,什么时候会用赋值操作
13、析构函数设为虚函数可不可以?
14、public、protected、private继承分别可以访问什么(woc,这个东西没怎么用过,也没背到八股文,猜着说了一通)
15、简洁说说进程、线程,不要展开太多
16、进程 fork 的时候,虚拟地址空间的五大分区哪些不需要写时复制过去?(猜了下 data 段?他质疑了一下,我说 bss 也不会?因为 static 不能多次初始化,他说 static 可以多次赋值啊,然后跳过了....)
17、算法:链表相交(先装死说了个求全部长度的思路,然后断线了,他让我把代码发邮箱,我在写代码的时候再写了一个不用求长度的思路)
1、问了一下你看过什么书
2、你看过 STL,讲讲内存配置器
3、讲讲迭代器(通过萃取迭代器的类型,面试官非要问具体怎么实现。我说我看的时候不太明白,他说没事,其实我第一次看也不太明白2333)
4、说说 vector,你自己想一个 vector 的设计方法
5、map 和 unordered_map 的区别
6、list 和vector 的区别
7、说一下 tcp 和 udp,tcp 如何保证有序,如何保证不丢失,如何保证不重复?
8、http 懂什么(说了一通,他说不用展开,我明白了)
9、说一下如何实现一个线程池
10、说一下如何实现一个线程安全的队列(我还想展开无锁队列,被叫停了)
11、malloc需要指定内存的大小,free为什么不需要?(我不会,他说你自己想一个实现方法,我说能不能在指针的上一个地址保存所要开辟的数组个数,然后free的时候先向上查找得到元素个数,然后再进行一个释放。他说行吧,这也是一种实现方法)
12、算法:LRU、旋转数组的查找
首发于个人公众号,原文链接:https://mp.weixin.qq.com/s/IsuN7Wo8AyC_FFwXJdU7fg
大家好,我是阿秀。
最近很开心鸭,因为不少粉丝朋友都来找我报喜,真心替他们感到高兴!
有通过自己的努力艰难爬坑社招去长沙多益做游戏开发的,也有校招实习去腾讯 WXG 部门的,还有去字节抖音的,真的太牛逼了。
不会有人不想去鹅厂吗?而且还是腾讯 WXG ...
最让我印象深刻的莫过于这位粉丝朋友了,他跟我报喜的时候我跟他聊了很多。
他跟我一样,是一位普通双非学校的学生,大一一年还去搞硬件了,大二才开始学习准备软件开发的知识。
认真苦学一年半,终得正果!
恭喜这个逼!下面来看他的故事!
字节:深圳-安全与风控部门
腾讯:深圳- CSIG 腾讯云部门
目前状态:字节 offer 审批中,腾讯 HR 面已过
本人就读于某双非大学,现计科大三。大一时一直在学嵌入式做小车,从大二开始接触 Java,突然对 Java 很感兴趣,所以想学一下相关的技术,算起来,应该是疫情那个假期开始正式起步吧。
我在刚上大学的时候就下定决定毕业出去工作,没有打算考研。大一的时候听到实验室的学长年薪 15W就傻了,当时已经刷新了我对大学生薪水的认知;大二时带我的助班去了华为工作,年薪居然有 30W 之多,这更加使我目瞪口呆。
那时,我便下定决心,我毕业之后也要年薪 15W ,呜呜呜。
大二自学的时候仅仅是想着能多学一点以后工资可能就会高一点,从来没有想过进大厂
对于我这种普通学校的学生而言,毕业后能有一份不错的工作就很满意了。
这里也很感谢阿秀哥指导我HR面,让我提前知道 HR 面大概会考察哪些知识点,提前有了准备!
我也是大二开始有计划地开始刷leetcode,先刷一年简单题,是的整整一年,我刷的很慢,但每道题都是我自己亲手解出来的,并且也学了许多后端的技术框架。
大三上学期开始刷 middle 和 hard ,开始看源码和一些经典书籍去深入了解知识,点亮自己的技能树。
也不知道从什么时候开始有了想去大厂的念头,也许是实验室的一次聚会上谈到每个人的规划时,学长对我说我准备了这么久可以去冲一下大厂。
这句话打动了我。
是呀,我做了这么多准备,小公司也用不上,何必不试一下大厂?试一下又不会掉块肉
然后开始疯狂地查缺补漏,去年寒假在家时只有除夕和大年初一没有学习,其它时间每天都在学习、做项目、查缺补漏,有时候做梦都能梦到自己在和面试官对话哈哈。
能通过这几轮面试,有很大的运气成分,因为我还有许多东西没有学,比如 Redis 的源码、Kafka 和 K8S 之类的。
Java 方面倒是准备挺多的,什么源码、多线程、微服务框架都有去准备,可惜字节和腾讯的面试都不怎么问我Java2333
CSIG一面
- 自我介绍
- 部门主要是Python和Golang,进来转语言有没有问题?
- 上次一面为什么挂?说说上次面试没回答上来的问题
- 10000个数,小顶堆思路 找前100个和找前1000个 的时间复杂度有什么区别?
- 系统中死循环如何定位?
- 如果是项目运行中呢?
- 进程、线程、协程?
- TCP三次握手、四次挥手?
- 介绍一下简历的项目
- 中途打断,为什么要用定时同步任务?
- 为什么想到用LRU设计商品推荐?
- LRU有什么缺点?
- 有了解过LFU吗?
- 点赞是如何设计的?
- 如果用户量很多,你会怎么设计点赞?
- 就比如说用别的方案,比如用rabbitMQ?(给了个不太好的方案)
- 这是最基础的方案,优化一下,如何减少对数据库的访问?(给了个好一点的方案)
- 考虑一下在MQ后面做处理?(突然领悟)
- redis了解吗?redis有哪些地方可能是你以后做项目会用到或者借鉴的?
- 有了解过设计模式吗?介绍一下工厂模式?
- 介绍一下秒杀项目?
- 讲了一下秒杀的逻辑,从前端到后端再到数据库
- 细问商品库存校验的实现(如何防止超卖)
- 为什么要加rabbitMQ?
- 为什么不用其它MQ?比如RocketMQ,Kafka?
- MySQL了解吗?说一下MySQL索引?
- 假如有一个非唯一索引,它是如何访问到数据的?
- 反问
CSIG二面
-
自我介绍
-
后端哪些方面学得比较好
-
MySQL学生选课系统表的设计
-
MySQL主键和唯一键的区别
-
有做过数据库性能调优吗
-
一条SQL语句执行慢是为什么
-
什么情况下会出现死锁?具体一些?
-
上一个问题我有提到间隙锁,面试官突然问我,你说什么锁?我:间隙锁....
-
间隙锁是什么锁?(我不知道面试官是真的不懂还是故意问的)
-
在编程过程中如何避免死锁(这回不能答八股文的死锁避免了)
-
场景题:你和另一个用户同时登录网站去修改一个数据,如何避免覆盖修改(或者是修改丢失)
-
哪个语言比较擅长
-
实现一个HashMap,口述思路
-
hashcode和equals在什么时候需要重写
-
使用Java的时候用什么组件操作数据库
-
MyBatis和其它的相比有什么优势
-
MyBatis底层是如何管理Connection的
-
你觉得你的优势是什么
-
你的主动性如何
-
你的责任心如何
-
假如团队中有个别成员的进度没有达到预期,你会怎么处理
字节一面
- 进程和线程的区别
- 进程被分配哪些资源
- 线程同步机制
- 线程共享哪些资源
- 线程独占哪些资源
- 程序计数器的作用
- 进程和线程的调度区别
- 进程常见的状态
- 阻塞态能直接到运行态吗
- 就绪态到运行态的条件(上一个进程时间片用完,本进程被系统调度)
- 解释一下 LRU
- 让你实现 LRU 你怎么实现
- LRU 各个操作的时间复杂度
- 计网七层模型、五层模型、四层模型
- 五层模型中各个层都有哪些协议,简单描述
- FTP 是什么协议
- TCP 和 UDP的区别
- 三次握手、四次挥手
- 为什么是三次握手、四次挥手
- MySQL 的索引是什么
- 使用 B+ 树有什么优点
- B+ 树和 B 树相比较
- B+ 树的叶子结点存放数据有什么好处
- 设计题,先说思路再写代码:
- 已知一天内用户登录登出的日志(数据量较大),求这一天用户在线的最大峰值。
- 日志包含字段(userid, login_time, logout_time),登录登出时间精确到秒。
字节二面
-
二面面试官果然像传说中的那样没有一面面试官那么严肃~
-
自我介绍
-
项目中JWT的作用
-
token和cookie的区别
-
进程和线程的区别与调度
-
假如有一段程序,只有main函数,也没有fork之类的操作,它跑起来的时候系统是几个进程几个线程?
-
进程之间如何通信
-
写两个代码:1、剑指offer30 的变形题 2、剑指offer13 两题很快秒了,继续问问题
-
项目中的定时任务具体实现逻辑以及功能
-
当场优化项目中的某个功能,允许去查阅资料(之前说过这个功能设计得不太好)
-
Redis的几种数据结构
-
Redis的容灾方案(持久化+集群)
-
定时持久化数据会有什么问题?(其实是想问RDB的缺点)
-
AOF模式下,机器宕机之后如何恢复数据?
-
关系型数据库的事务要保证什么(四大特性)
-
细说事务隔离级别
-
口述思路:删除单链表倒数第k个节点(还是剑指offer!)
-
秒给思路,随后追问:思路有什么问题?
-
如果链表有环?
-
僵尸进程以及带来的问题?
-
僵尸进程中子进程未释放的具体是什么资源?
-
近期的学习规划、打算
-
反问
字节三面
没有自我介绍,上来直接开始
-
现在读大三是吗?
-
以前去实习过吗?
-
你的项目里用到了 RateLimiter 限流,你用代码实现一下?(我的内心:What......)我说:我只是简单地用过,但是没有去研究过它的底层原理
-
说一下 RateLimiter 的工作原理?
-
RateLimiter 写不了是吧,那写一个代码,输入的是一个代码段,用字符串表示,输入的代码里面会有一些注释,输出去掉所有注释之后的代码
-
写了50分钟,面试官给的最后一个输入没跑通,然后说时间关系,今天就写到这儿了,让我下去可以再看看代码
-
写代码是因为感兴趣吗?
-
你觉得你和其他同学相比写代码的能力怎么样?
-
怎么证明?(证明上一个问题的回答)
-
以前打过ACM是吗?(只参加过一次而已)
-
反问
字节HR面
- 自我介绍
- 高考之后为什么选择现在的这个学校?
- 第一志愿学校是什么
- 深圳这边夏天也很热,能否适应
- 对计算机专业的理解
- 对计算机感兴趣吗
- 怎么想到做简历上的这个项目
- 项目团队有几个人
- 团队有没有组长或负责人
- 从项目中收获了什么
- 遇到了问题怎么解决
- 有没有遇到过解决不了的问题,后来怎么办
- 开发时和同学有意见冲突怎么办
- 有没有投递别的互联网公司
- 为什么想来字节跳动
- 对字节跳动的了解,评价一下
- 来字节实习想收获什么
- 平时怎么学习
- 毕业前/后的规划
- 为什么不考研
- 评价一下自己,优缺点
- 什么时候能来,能实习多久
- 实习期间要不要兼顾学校课程
有人可能会担心普通本科进不了大厂,没有 211 以上的学历加成之类的。
我想说的是,可能你没有别人学校好,但你就不去尝试了吗?这条路是很难,可再难,也有人上岸了啊。
NBA已故球星科比的名言就很好:总有人要赢得,为什么不能是我呢?
对啊,总有人要上岸的,为什么不能是你呢?
最后,再次恭喜这个哥们!