二本,现终拿到字节SP,说几点感悟

这是去年春招拿到腾讯阿里 Offer 实习,实习转正失败,秋招拿到字节 sp 的一个读者,这篇经历是春招拿到腾讯实习 offer 写滴。

对于想要认真学习的小伙伴,绝对值得再次好好读一读过来人的经验。

我的春招

Hello,首先自我介绍一下,我是一所普普通通的二本院校的大三学生,坐标江苏。

今年三月份拿到了腾讯实习的offer,人生中第一次面试是腾讯,部门是 TEG 的云架构,并且顺利签约,说实话内心还是挺高兴的,在这里和大家分享一下自己的经历。

二本,现终拿到字节SP,说几点感悟_第1张图片

我的看法

下手要果断。不要怕自己不够好不够强,我大概是二月底开始投简历。我一开始使用了牛客网投简历的方式,很遗憾,记得牛客网公众号当时给我的等待面试安排直到现在我都没有收到安排,效率过慢,很容易失去机会。不过我的简历是很简单地使用牛客网的模板写的。

有了想法就果断去投,要去官网投!

注:平时让大家去牛客网,更多的是大家去那里找内推,查看公司招聘时间,笔试时间,最后还是要进去官网投递的,而不是在牛客网投递。

对于大概的需要学习的知识有:

比较牢靠的基础知识

  • 计算机网络

  • 操作系统

  • 语言基础

  • 多线程

  • 算法

  • 数据库

  • 项目

关于简历

我是遵循着越精简越好的做法写的。本来写了两三页,最后删删改改保留到了最后一页内容,无用的可以删掉,比如学生会经历啥的,基本没用,不过很多公司制定的简历都是要必填的话,可以都写上去。

如果是内推直接发简历的话建议写的少一些,把重点和亮点写上去,让 hr 一眼就直接看见,包含了一定需要的信息,比如姓名学校什么的,自己比较擅长的知识,比如说 redis,爬虫,linux,或者对 jvm 理解比较深,也可以强调一下,面试官会针对着你的简历去问。

项目的话不要太大众化,也千万不要造假,最好是自己真的比较熟悉的,面试官会问有没有 github 链接,这个时候如果没有还是比较尴尬的,可以分条写下重点内容、利用的知识点,最后可以总结不足之处,遇到困难如何解决,后期会如何去改进。项目不用很多,我写的是2个,不过越多一般会比较好,前提是比较有价值的。

关于基础知识点

计算机网络

腾讯基本上是必问,特别是 TEG这 些部门,我的三轮技术面每一轮都是从计算机网络开始问的,而且问了还挺久的,一定要重视 TCP 协议,三面面试官让我讲TCP 里面的各种机制,然后我因为时间间隔久,说的就比较乱,这里建议可以自己整理一个大纲,然后好好填充,最后复习,不要抄网上的,一个是各种版本太多,还有的是不一定完全正确。

我是从大一开始就看计算机网络自顶向下方法这本书,大概断断续续读了有两三遍,这本书在本科应付面试还是够了。

我也只读了这一本书,我觉得自定向下的方式还是挺好的,和 csapp 不太一样,计网还是举了很多比较通俗的小例子,比如邮递员啊,一家人和邻居的互动这些,看着还是挺有趣的,前六章一定要读懂,记住关键知识点。

在校招的层次上,这本书已经是很详细了。举个例子,面试有一个高频题目,就是 web 页面请求的过程,可能大家看过面经的都会粗略的说什么 DNS 查询啊,三次握手,浏览器解析。

但是这个问题其实在书上的 326~331 页上有十分详细的过程,同时也囊过了前六章的非常多的知识点,书中是用Bob用他的便携机在学校查询了谷歌主页来举例。你说的越详细,面试官对你越评分会越高。

操作系统

操作系统是我比较薄弱的地方,我看 csapp 都挺吃力的,经常看的犯困,当时学校教的其实也比较水,就是直接教你怎么算,然后出英文试卷,相当于背题应试。那怎么够呢,我因为看书吃力,于是选择了看 b 站清华大学的操作系统课,老师是向勇和陈渝,对于我这种比较笨的人还是挺友好的,然后对应着 csapp 来看,会好一些。

还有就是 linux,似乎很多面试官会问你平时是不是使用 Linux 编程,我直接就怂,虽然平时项目上线会用 linux,不过我大概只知道一些指令,比如 ps, netstat 这些,然后去 proc 查查 cpu 状态,这个三面面试官也问了,你平时如何查看 cpu 状态,如何查看内存占用情况,如何定位程序出错的地方(大概是)。

然后我就开始扯什么 top 啊,什么利用率负载率啊。最后还算是扯过去了,二面面试官也针对 Linux 问了挺多的,遇到不会的就诚实的说不会,不要强行去解释,也不要逞能,这样会被怼的很惨。三面的时候面试官还问我磁盘问题,RAID1-5,我觉得这个对我来说还是挺深的…

语言基础

这里扯下 java 的,二面面试官针对java问的比较多,一和三基本没问。

其实我二面是答得最不好的一轮,很多概念模糊了,也犹豫了挺久的,比如他问我抽象类和接口的区别,我大概还是一年前看的了,当时我努力搜寻记忆中的概念…,憋了好一会才憋出来几个区别。

不过事后看看真的很简单,基本上是看了一遍就回忆出来了,大概还有类继承的一些问题,jvm 让我每一块分开来说,面向对象,我每个说的都不太详细,还是挺遗憾的,因为我真的对java太有信心了,一直没去复习看它,结果眼高手低了。

所以千万不要放弃每一个知识点,然后聊了一下 go 语言,我之前有去看过云风 c 语言写的协程,大概了解了一些。java 我看的书是 JAVA核心卷,Thinking in Java,effective Java,其实我觉得这三本书是挺够的了,特别是 Thinking in Java,初看是略看,然后多看几次,就能注意到很多细节,而细节往往可以决定成败。

其实说是三本书,还有很多是不必看的,比如 Swing 编程这些。核心卷对于入门来说非常友好,因为很简单。Effective Java 放在最后看,往往是优化代码,让代码更加安全、性能高、优雅。

多线程

我用的是 java 并发编程的艺术这本书,多线程一定要好好学,项目中一定是常用到的,然后推荐大家看一看并发编程网,里面的内容基本是很优秀的。很多是国外搬运翻译的。

算法

算法靠刷,刷多了有题感,不过腾讯是挺爱问排序算法的,那基本的稳定和不稳定排序算法是要熟悉的,比如我二面问了希尔排序,我本来以为大概率是问快速排序的,然后希尔时间复杂度我还说错了,,,,

好在其他我都记得比较熟悉,堆排序,快速排序(随机选基数,三路快排)等,归并排序(我觉得这个很重要,因为 java 的 sort 就是用的快速排序+归并排序),而且归并排序是稳定排序。基于归并排序的算法题延申的都挺多的,有看到其他大厂的笔试算法题就是归并。

算法的话,如果时间充足,比如我是大一寒假开始写算法,我是每一题自己钻,然后看题解,往往一天只写两三题。

目前为止刷题总数 leetcode + 牛客,加上一些 OJ 平台,大概是 600+ 的题量,可惜腾讯的面试里问的算法不怎么多…,这里总结一下必要的算法知识,首先是数据结构每一个都需要很熟悉,比如链表,哈希表,树,图,栈,队列,堆。

(1)链表,什么反转链表,环形链表,链表排序等等算法,比如 LRU,就是用一个双向链表 + HashMap 来实现。别看链表基础,但是很多大厂是挺喜欢链表的,比如字节跳动,再比如跳跃表,是 redis 里的 zset 的底层实现。

(2)哈希表,最好要理解底层实现,建议看源码,一定要清楚如何实现。用处也是非常非常多。比如记忆化递归在有时候数组不适用的情况就是用 map,还有HashSet,TreeSet,这些的源码都建议去看。哈希表的用处还非常广泛,这个基本是最常用的数据结构。

(3)树,树有很多,二叉搜索树,AVL 树,红黑树(旋转不如AVL频繁),字典树(敏感词过滤)等,leetcode 树专题,不要犹豫,直接刷,腾讯这次笔试也有树的题目。而且很容易变种,树基本是以递归,不过也会有题目要求使用非递归,这个时候就要用栈和队列来辅助,比如迭代方式前序遍历。关于树的算法题太多了,有一阵子 leetcode 周赛,每次第三题都是树。

(4)图,图的考察点不如以上频繁,大概是有向图,无向图,BFS 和 DFS,还有拓扑排序,Dijkstra 最短路径,Krusal 最小生成树等等。

(5)栈,用法也是多,感觉很多情况是和字符串挂钩,更难一些的是单调栈,某年京东除了一题很难的题目,就是用单调栈。

(6)队列,用法也是很多,比如拓扑排序,求二进制,BFS 等等。

(7)堆,很多时候有妙用,比如拓扑排序,Top K 问题。

以上数据结构一定要很熟悉,应用实在是太广泛了。我大一的时候,用c语言写动态扩容栈、队列,红黑树,斐波那契堆,二叉堆,有向图(包含各种算法),AVL树等挺难的数据结构,如果时间充足可以这么写着玩,锻炼coding能力。

重要的算法有:二分,递归,记忆化递归,回溯,广度优先,动态规划,数学(有蛮多脑筋急转弯题目的),滑动窗口(双指针),排序算法,程序设计(比如设计LRU,LFU)。

数据库

如果写后台那大概率是和数据库打交道的,这里推荐大家学习 Mysql,redis,mongoDB。MySQL 可以学习的太多了,首先要写得一手好 sql 语句,这里要注意利用到索引,减少表连接,提高 sql 效率等等,leetcode 上直接就用 sql 练习,刷个几十道足够。

然后深入一点,学习引擎,索引(聚簇索引,二级索引,B+树,Hash索引,最左匹配等),ACID特性等等,索引是重点,三面的时候详细问了B+树,然后就扯到了索引。这里建议重视一下索引,一是它是真的非常有意思,二是它真的很重点…

关于 NoSql,看的出来三面面试官是挺挖掘深度的,对于项目,数据库,操作系统,计网,问的都是挺细节挺深的,他问我聊不了解 MongoDB,我说用过但不是很了解,是以前写爬虫的时候配合用的,可以有什么什么用,扯了一堆。

然后 redis 也问了,比如主从辅助,哨兵,选举机制,分区集群,等等。还好我redis学的还可以,都答上来了。

redis是绝对值得认真学习的。

最后说几句

无论是春招还是秋招,也无论拿到什么样的 offer,这绝对不是终点,而是人生另外一个重要的起点,为了让我们以后有更多的选择,我们都得持续学习,只有持续学习,我们才能变的更强,当然,所谓学习 ,绝对不局限于编程知识哦。

其实大部分情况下,大家都很努力,如果有个过来人指点一下,推一把,或许你可以走的更快。

如果想要最后再冲刺一下春招,或者是提前为今年的秋招做准备的,我强烈建议你看一下这份现在圈内疯狂转发的《Java面经》。朴实无华全是干货,毕竟这几个月面试竞争压力大,多看多学,知道面试官要问什么很关键,这样有很大概率在千千万万的面试者中脱颖而出。

这份文档有263页,相当的细,免费分享给大家,先展示部分截图内容。

有需要学习的,拉到文末,点击名片即可免费获取

部分目录:

内容截图:

Java基础部分

Java多线程部分

数据结构与算法部分

Linux命令部分

Java 内存模型 和 垃圾回收部分

内容太多我懒得一一截图了,你们领了自己去慢慢看吧,绝对有收获!

有需要的点击下方名片免费领取!

你可能感兴趣的:(Java,面试,java,职场和发展,java进阶,java面试)