暑期实习总结与建议(真诚版)
一、暑期过程(略啰嗦)
3.7 从美团离职,开始找暑期,4.18 收到唯一一个 offer 和一个 hr 面(接了 offer,结束暑期)。
第一场面试是 3.17 的字节,连 HashMap 和 HashTable 的区别、B 树和 B+ 树的区别这些很基础的东西都说不上来,后来接连面了十几场,也只能说答上来 60% - 70% 左右。
四月初清明那会已经基本上心灰意冷了,开始投日常,没想到剩的两个流程都走到了最后。
二、准备暑期的学习建议
2.0 要构建自己的知识体系
具体来说就是写文档 / 博客。个人觉得这一点非常非常重要。
2.1 熟悉基础八股
什么是基础八股呢,举例子:
HashMap 的底层原理、Redis 主从复制过程、InnoDB 为什么采用 B+ 树的数据结构、AQS 原理、G1 垃圾回收器、浏览器访问网站的全过程、IO多路复用
怎么熟悉?构建自己的知识体系 + JavaGuide 等总结的八股 + 网上其他人整理的各模块的常用八股 + 面经补充
这个阶段要注重理解,只有真正理解了,才能记得住,才能承受住面试官的拷打。
2.2 深入底层
现在的面试很多时候不会局限于基础八股,会考察比较硬核的计算机基础知识,主要体现在操作系统上,比如说:
线程上下文切换涉及到哪些操作?为什么切换是比较重的操作?
CPU Cache 和内存是怎么交换数据的?
从操作系统的角度,一次磁盘 IO 的流程?
2.3 灵活运用
这部分不太好描述,对应的能力是在学习计算机知识的过程中自己沉淀的理解,举几个例子吧:
Java 在日常编码的过程中如何保证线程安全?
实现一个线程安全的无锁队列,说说你的方案,元素的入队和出队的实现方式?
Redis Client 是怎么传输命令到 Server 的?(比较特别的是七层网络模型中的表示层,也就是数据如何编码和序列化)(面试时甚至让我写对应的 JSON)
2.4 实战能力
比如:你们 MySQL 机器的配置是?一次 IO 需要多少时间?访问一次内存需要多少时间?同机房的网络传输大概多快?
2.5 系统设计题
个人感觉这部分可以找几个典型场景吃透,推荐 https://www.nowcoder.com/discuss/743518189807505408
2.6 算法
我自己是只刷了 hot 100,刷了 1.5 遍,大概 3.25 之后就没刷过了
我个人的考量是 hot 100 刷透是完全够的,再深入刷性价比不高
面试的时候也会对 hot 100 拓展,比如:升序数组中重复元素的个数、非递归实现二叉树的后序遍历、含重复元素的数组的全排列
三、关于面试
最想说的是:不要过于怀疑自己的能力而内耗,很多时候是运气问题!
面试问的很难答的不好不代表不会过,体现出自己的思考就好
面试前可以花几个小时时间把体系过一遍,每次过的时候把不熟悉的地方重点标记一下,多看两遍
3.1 面试官对候选人的期待是什么?
我基本上每场面试的反问都会问这个问题,总结了一下:
- 不强求很契合的技术栈,更多是对候选人本身特质的考察,所以会对简历上信息做针对性提问,准备面试的时候突出你擅长的领域即可
- 举例:简历上写了单例模式,面试官会问:项目中如何使用单例模式的、单例模式的实现有哪些、单例模式的经典应用场景
- 总结一下,就是 what(实现方式有哪些)、why(优缺点、和其他的比较)、how(项目中怎么用的、经典应用场景)
- 聪明、对技术感兴趣、有钻研能力
最后祝大家都能拿到满意的 offer🥺🥺🥺
#实习进度记录#