NLP 转后端开发,顺利拿到字节实习 offer!!
简单介绍一下我的基本情况,上海双非本 + 985 硕,目前在读研二。本科 + 研究生大部分时间都在搞算法, NLP 相关,今年终于认识到了理想和现实的差距,遂在 5 月份下定决心转后端开发。之后处理一些事情,暑假 7 月底的时候正式开始学习 Java,历时三个月, 9 月底开始投日常实习,10 月 17 结束。面试过的公司包括: B 站,蔚来,百度以及字节,B 站挂在二面,其他均拿到日常实习的 Offer,最终选择了字节跳动。
从以上我的基本情况大家能看出,我的战线比较短。但是在这些时间里,我的作息基本上都是早 7 晚 11,很辛苦。
这篇文章首先分享我的面试经历,后面的部分与大家分享我的学习经验。
面经部分
下面的部分总结了面试过程中被问到的知识点(还记得的部分),以及我个人的一些心得体会,供大家参考。
百度
百度给我的面试体验还是蛮好的,是我面试的所有公司中唯一一家对八股考察非常详细的。一面是非常详细的八股面试,涉及到 Java 基础知识、数据库、spring、jvm、多线程、场景设计等等,基本上准备的都被问过了,但是整体来说难度不高,知识面比较广但是不会深挖。二面来说区别就非常大了,注重实践能力的考查,而且会深入到底层原理。
面试之前会有自我介绍的环节,包括项目介绍。百度两面对我的项目提问都不多,可能是我介绍项目的时候就比较详细的原因。
接下来的部分是知识点整理:
百度一面(1h+):
- 常用 GC 算法,常用的垃圾收集器, G1 了解吗
- 场景题: cpu 打满且频繁 full GC,怎么解决?
- 有 jvm 调优的经验吗?实际工作中遇到过内存相关的问题吗?用过哪些堆栈工具调试?
- Mysql 索引,数据结构为什么使用 B+ 树
- 索引覆盖了解吗
- 索引失效的场景
- 简单描述一下数据库的四种隔离级别以及对应的三种相关问题
- MVCC + 锁 保证隔离性
- 造成幻读的原因了解吗,快照读、当前读。
- 数据库自增 ID 和 UUID 对比
- HashMap 源码,数据结构,如何避免哈希冲突,对比 HashTable
- HashMap 源码中,计算 hash 值为什么有一个 高 16 位 和 低 16 位异或的过程?
- 为什么重写 equals 还要重写 hashCode,不重写会有什么问题
- ConcurrentHashMap 底层实现,扩容问题。
- 如果让你自己实现哈希表,你会考虑什么问题?
- 场景题:亿级别黑名单、短链接,你考虑使用什么数据结构?布隆过滤器、前缀树。其中布隆过滤器问了基本的原理和实现方式
- Java 引用类型,强软弱虚
- Java 是引用传递还是值传递
- Object 类你了解哪些方法
- 接口和抽象类的区别
- 线程池核心参数,以及工作原理
- ReentrantLock 对比 sync 锁
- lockInterruptibly()、acquire()、tryAcquire() 方法
- CAS 机制了解吗,存在什么问题
- 对象锁和类锁的区别
- 如果让你自己实现阻塞队列,如何实现?阻塞唤醒这一部分,如何实现?
- ThreadLocal ,Volatile
- 看你项目中用到了 Netty,简单介绍下吧。这里还有个 问题是问到 Netty 和 SpringBoot 整合的,但我一直都没理解她想问什么
- 粘包拆包问题,Netty 解决粘包拆包的 Decoder
- Spring 事务了解吗,Spring 事务的注解不生效,是什么原因
- 算法题: 手写快速排序,时间复杂度,稳定性
整理感觉不错,基本都答上来了,按 照 Guide 哥星球里的内容,认真准备就好。
百度二面(45 min):
- 看你项目中用了一致性哈希做负载均衡,简单介绍一下
- 项目中 CompletableFuture 如何使用的
- 算法题:给定一个字符串,找到其中最长回文串
- 计网和组成原理学过吧,你认为哪个掌握的好? 我选了计网。这一部分问的很深入,我没来得及记录,以下部分只是一些零散片段,但是整体问的时候是有逻辑的。
- OSI 七层模型
- TCP 三次握手,四次挥手整个过程包括状态的转换。为什么是三次握手、四次挥手。发送 Fin ,实际的意义代表什么?(发送方没有数据要发送了,可以断开连接)
- 四次挥手,为什么等待 2 MSL
- 流量控制、拥塞控制
- 后面关于网络就更深入了,TCP 底层是怎么实现的,如果让你用 Java 模拟 TCP 的过程,做一个仿真,你有什么想法。大学学习计网的时候,协议栈之类的了解过吗(这部分我都不懂,认栽了)
- 看你项目中用到了 Spring,自动装配的过程了解吗。
- Spring 启动类的注解,介绍一下
- 因为我项目中用到了,所以被提问了 Spring 二次开发常用的扩展点,还涉及到了 Bean 的生命周期。 BeanPostProcessor,在你项目中如何使用的
- Spring 中你常用哪些注解? Autowired 实现原理
计网仿真 TCP 以及后面深入的部分我不懂, Autowired 实现原理 没说清除,其余的都答上来了。