第一次面大厂就通过,感觉非常的幸运,下面分享一下面试的一些经验
一面
1.做个自我介绍
2.讲讲项目,讲了一个大创项目然后讲了一下读的一个开源框架,讲了一个实验室项目然后拓展到了mysql索引调优
3.https相比于http的优点
4.三次握手四次挥手的作用是什么,为什么不能减少次数
5.https在传输过程中与http有什么不同(答的很模糊估计是错了)
6.java中的集合了解么,说了一些常用的集合然后还有并发集合
7.这些集合底层实现都讲一下,就讲了LinkedList、ArrayList、HashMap然后被问到HashMap的扩容机制和ConcurrentHashMap的锁机制
8.HashMap为什么不安全,数据覆盖和循环依赖是如何产生的(只答了数据覆盖,另一个忘了)
9.说到锁aqs了解么
10.java中的synchronized了解么,讲了锁的升级,然后分别拓展了三种锁使用的场景以及底层原理
11.epoll了解么(直接回答不了解)
12.线程池了解么讲讲作用和如何使用,讲了7个参数和在不同场景下的如何使用
13.redis用过么,用的不多,回答5种基本数据类型和zset的跳表
14.分布式了解么(直接忘了,面试官可能以为我临时想不起来又问了分布式锁,还是不会)
15.mysql了解么,讲了一下mysql架构和server层组件的作用、server层的binlog和存储引擎层的redolog,还有为什么要二阶段提交,本来还想讲MVCC和索引底层结果时间快到了被打断了
16.面试题:
给你两个链表,链表顺序代表一个数的逆序
如:1->2->3 321
4->1->5->2 2514
将这两个链表相加得到新的链表
5->3->8->2
第一次面大厂有点紧张各种出错,面试官还是比较耐心的引导你往下写,结果这么简单的题最后时间到了还有bug,一个半小时多点面试官直接说今天先到这了,本来以为这算法题没做出来要凉,结果20分钟后hr就告诉1面过了等明天2面
最后反问了下面试官两个问题:
1.公司的技术栈
2.我这次面试有什么缺点需要改正么,面试管说有关面试结果的不能透露
总结:
感觉给出的问题很多都是比较开放的,需要你自己对某个知识点有一定的体系才能答好
计网问的比较多
算法题太久不刷了没提示敲代码都费劲,要多注意平时做题
二面
- 做一个自我介绍
- 介绍一下你的大创的项目,我大概讲了一下 FateServing 中的一些模块,如何对 FateServing 进行二次开发,以及包含了哪些设计模式
- 你提到了责任链模式和适配器模式,讲一下这些设计模式的理念以及在什么情况下使用这些设计模式
- 看到你项目中提到了单点登陆,讲一下单点登录
- 如何实现单点登录?开始没答上来,面试官提醒道你项目中使用的jwt、token就是一种实现方法
- 具体的讲一下你在项目中是如何使用 token 的,可以分别从前端和后端讲
- 那你了解 token 的组成么,最后一个部分好像是加的盐值,其余的不了解了
- StringBuffer 的底层讲一下,讲到了通过锁实现的线程安全,讲了下 java 中锁的实现,感觉不太是面试官想要的点
- String 与 StringBuffer的区别,讲了字符串常量池,new 一个String 对象会发生什么,StringBuffer 可以生成 String,感觉还不是面试官想要的,于是又说了一下 StringBuffer 和 StringBuilder 在 jdk9 中的一个优化,把 char[] 换成了 byte[],面试官问到为什么要这么优化,大概解释了一下
- 聊点别的,线程和进程了解么,讲了一下线程是 cpu 调度的单位,进程是运行中的软件,是资源分配的单位
- 那你知道进程和线程的区别么,进程包括了线程。能不能更详细写,可以从资源,内存消耗,调度等方面说,实在没想出来就过了。
- 你能说一下堆和栈么,刚开始没太听懂讲了一下堆排序中的大顶堆和小顶堆以及栈的结构特点,后来才知道问的是jvm中的堆和栈,大概讲了一下堆和栈是否是线程私有的
- 讲一下垃圾回收吧,聊了垃圾回收算法和垃圾回收器
- 讲一下 mysql 中索引的底层吧,讲了下 B+ 树,并与 B 树进行了一下比较,讲了下 B+ 树的一些优点,讲了下联合索引什么时候会失效
- 讲下索引的分类,我从物理的层面展开分为聚簇索引和非聚簇索引(二级索引),讲了下 InnoDB 和 MyISAM 将数据存储成文件时的区别
- 一定加索引就好么,不一定,在数据量小的时候就不用,创建索引是需要占用内存的,具体建不建要根据数据量和业务决定,这些是 DBA 需要权衡的
- 算法题:
折叠一个链表
例 : 输入 1->2->3->4->5
输出 1->5->2->4->3
思路就是先找到中心点,然后做一个反转链表,然后做一个链表拼接
反问问题:
1.能评价一下我么,还是不方便评价
2.去了公司做什么业务,大概是抖音和今日头条的广告
总结:面过一次就没那么紧张了, 你只需要把自己会的东西尽量的展示给面试管就好了
三面
- 感觉你在前两次面试中发挥的怎么样,回答还可以有一些不足的地方,又问到你觉得具体在哪里呢,回答是在一些知识的欠缺,比如 epoll 机制和https 的建立连接的过程没太答上来,但是之后及时的进行了学习,然后解释了一下这俩知识点,从epoll谈到Linux的IO模型然后到JAVA中的AIO、NIO、BIO,从https讲到了ssl和tls协议,中间者攻击等
- 讲讲项目中你mysql具体是如何优化使性能提升70倍的
- 聊了一下 zgc 为什么这么快
- 聊了下验证码如何设计,从前后端的角度来讲
- 最后一道算法题,寻找两个节点的最近祖宗节点
总结:面试官比较注重你有没有对不会的知识及时补充,是否有学习的兴趣,所以之前不会的题到下一次面试一定要弄明白