点点互动面经
一面
(1)传统自我介绍
(2)我看你大学里做了项目是吧,我们来聊聊吧(撕数据库、计算机网络)
数据库
(3)欸,你用的是 MySQL 吧,我想知道如果我要生成用户的唯一id,有什么方法啊?
(4)那我如果有一个主键值是 10,然后删除了这一行,插入下一行数据的时候,主键值是多少呀?
(5)你知道 MySQL 的索引的索引数据结构吗?
(6)那你知道聚簇索引和非聚簇索引吗?
计算机网络
(7)你项目中前后端用什么协议通信的?「 HTTP 」为什么 说 HTTP 是无状态的呢?
(8)那如何防止 Cookie 劫持?
(9)那我如果使用 HTTPS 协议, Cookie 就不会被第三方拿到吗?
(10)那你知道 HTTP 和 TCP 的关系吗?
(11)TCP 四次握手,如果服务器先发起断开请求连接,那该端口还可用吗?
(12)如果客户端发起一个耗时非常长的操作,但在操作还没完成之前客户端断开了,那服务器怎么提前终止操作防止浪费资源?
Java 基础(表现很差)
(13)你知道 GC 吗?
(14)你知道 final 关键字吗?
(15)那抽象类可以用 final 关键字修饰吗?
(16)追问:那抽象类可以实例化吗?
(17)不满意,继续追问:那我的抽象类里面没有抽象方法,可以吗?
操作系统没问,数据结构与算法也没问,直接到了反问环节···
计算机组成原理
(18)你知道计算机的大端和小端吗?
设计模式
(19)我看你写了用策略模式,能讲一下吗?
(20)那你有了解过工厂模式吗?就简单工厂、工厂方法和抽象工厂?
(21)那你觉得工厂模式和策略模式有什么区别吗?
反问环节
(1)您觉得我在哪些方面还要加强的?
- 「你的接触面广度非常足,但是在一些基础的知识上不够夯实,这些基础还是挺重要的,但你的确会存在一些盲点······」
(2)您觉得我的基础水平与其他面试的应届生相比是中等偏上还是偏下呢?
- 「中等偏上」
(3)如今分布式和集群架构满天飞的时代,我们现阶段应该对于计算机底层基础和这些高层知识如何选择呢?
- 「的确现在满是这种高级词汇,但对于应届生来说,我认为你们还是要打好底层的基础,学高层的东西会很顺利的上手的!」
(4)您觉得一位优秀的后端研发工程师是怎样的呢?
- 「要在一个方向上持续输出,例如你说的想从事 Java 后端开发,你就可以一直往这个方向努力,但你不能局限于这里,你要去了解更多的知识,甚至是前端,我觉得语言是我们最后才考虑的一个因素,其余的深度和广度才是我们应该关注的东西!」
二面
没有自我介绍,直接开撕
基础热身
(1)你说一下面向对象的三大特性
(2)那你知道多态在底层如何实现吗?
(3)你知道一个程序从编写到运行经历了哪些过程吗?
(4)线程间通信有哪几种方式呀?
(5)那你说一下 Java 的 GC 吧
设计模式
(1)你都知道什么设计模式啊?
(2)那你说说策略模式吧
(3)那你知道观察者模式吗?(我也没说呀,不过幸好看过一下)
(4)那你知道命令模式吗?(不会,后面会继续学习···)
(5)欸,对了,你给我说一下设计模式的六大原则吧
(6)你还懂单例模式是吧,你给我说一下单例模式吧
(7)追问:单例模式是如何保证只有一个对象的?
(8)追问:那如果多个线程都对这个公共方法进行调用呢?不会生成多个实例吗?
数据结构与算法
(1)你跟我说下红黑树吧,为什么有这种数据结构?
(2)假设我现在有数组、链表、字典和栈,要插入一个数,哪个性能最好,为什么?
(3)那你觉得哈希表与红黑树的区别是什么吗?
(4)追问:那你知道为什么哈希表支持 O(1) 查找吗?
(5)你知道有哪些分治算法吗?
(6)那你给我说一下归并排序的过程吧
(7)你还知道有哪些算法思想吗?
没有反问环节,可能面试官赶着吃饭,哭了,人没了,被掏空