1.自我介绍,聊了聊学校近况
2.Java 集合框架,看了哪些源码,arraylist、linkedlist原理,让你实现一个 hashmap 机会如何设计(没让手写)
3.线程池的执行过程、核心参数以及常用的几个线程池(感觉每次面试都会问)
4.JVM 的相关知识,OOM 如何定位,说几个虚拟机指令以及虚拟机栈可能会发生什么错误,四种引用类型
5.Java 并发,synchronized 性能为什么提高了(锁升级过程),与 Java 的 lock 有什么区别以及使用场景
6.网络,输入 www.baidu.com 都会发生什么
7.http 报文结构,头部都有哪些字段
8.进程与线程,了解协程吗(大概说了下)
9.死锁了解吗,说一下条件,如何解决
10.让写一下链表实现插入方法(顺序不在这里,忘了在哪了,突然想起来了),查询效率呢,怎么优化
11.写个算法,给一个表达式的字符串(+-*/),算出字符串的结果,没考虑括号说了下括号的思路
1.面试官看着就很厉害,在家办公感觉很忙,上来先问实习的时间以及时长,说最好半年
2.没有自我介绍直接开始,先是网络,TCP 三次握手四次挥手,time_wait 和 close_wait 具体干什么,为什么要三次两次不行吗,有大量连接处于 time_wait 的原因,TCP 是长连接还是短连接
3.Https 了解吗,说一下整个过程(对称加密,非对称加密),与 http 的不同点
4.进程线程又问了,进程间通信方式(剩下的想不起来)
5.数据库部分知识,手写一个 SQL (子查询 感觉主要看 group by 和 having)
6.算法题,最长公共连续子串
简历写了分布式,聊聊分布式基本信息(CAP,BASE);
Redis的基础数据类型和具体应用场景;
Redis的set求交集的时间复杂度;
MySQL的索引(B+和B树的区别,为啥用B+);
让你设计数据库会注意什么;
线程和进程的区别和联系;
HTTP的一整套;
还有maven的记不清了,因为直接说了不会...
编程题:力扣32最长有效括号
说说自己项目的请求过来,服务器内部怎么处理的;
类似秒杀的系统怎么设计,有什么注意事项;
Redis的缓存雪崩和缓存击穿;
因为提到了降级,说说降级策略(自己给自己挖坑,面完立马去总结了);
MySQL的索引;
JVM GC的一整套(算法、分区、判断方法、GC器);
Spring的AOP和IOC的偏底层实现;
介绍Spring MVC以及其底层原理;
聊聊MQ,你项目用了RabbitMQ仔细说说底层的东西;
几十G的数据都是URL,内存空间只有1G,磁盘空间无限,统计频率最高的Top 10;
编程题:
一个SQL,和从不订购的客户一样,左连接完事;
一个判断平衡二叉树。
感受:我好垃圾,几个场景题都回答得不怎好,面试官建议多看源码。
基本就是对着简历问。
编程题:
力扣88 合并两个有序数组。
感受:还是得多在白板上写代码。
1. 牛客网,永远滴神!(真的很感谢大家的分享)
2. 感谢github上 CyC2018(初期学习参考),SnailClimb的面试总结(面试参考对象)
因为并不是每家都有做录音,忘了一些面试问题。我就贴一下我面过比较普适性的问题。 此外, 我只是做一点些关键词的提示,具体达到面试要求需要自己去详细的理解和掌握 。
一些面试问题,我在自己的有道云笔记有解答。欢迎前辈斧正。链接:http://note.youdao.com/noteshare?id=3fa30656141202169d7d99c632b261c5
1.【高频】Java内存区域: {程序计数器,虚拟机栈,本地方法栈,堆,方法区,元空间}// 每个区域要能介绍一下
2. Minor GC触发条件: eden区剩余内存是否足够。两种情况分开分析。
FULL GC触发条件:Minor GC平均晋升空间大小 > 老年代连续剩余空间,则触发FULL GC
3.【高频】判断对象死亡的方法:{引用计数法,可达分析算法}
深入一些:GC root对象有哪些?为什么选择他们做GC root对象 ?
4.垃圾收集算法:{标记清除算法、标记整理算法、 复制算法、 分代收集算法}
深入一些: 各个算法的优点和适用场景
5.垃圾收集器:{serial、parallel、CMS、G1}
CMS、G1重点,介绍工作流程和优缺点
6.内存泄漏
例子: { 单例 , 容器 等等}
原因 : 长生命周期持有短生命周期引用
7.引用类型:{强引用、软引用、弱引用、虚引用}
8.【高频】类加载过程:{加载,连接,初始化}
有哪些类加载器,能否自定义Java.Object.String 的类加载器?
9.【高频】双亲委派机制,介绍 & 作用
1. ArrayList 和 LinkedList 的区别
2. HashMap & ConcurrentHashMap 的比较: 线程安全问题等等
深入一些:HashMap 为什么线程不安全? 能否举例 = { 并发resize()触发闭环结构 ,覆盖put操作 }
3.【高频】HashMap的相关问题// HashMap系列需要通过关键源码理解,比较重要
为什么 HashMap的size 为 2的幂次方 ?
HashMap resize()过程能否介绍 ?
HashMap效率受什么影响 (负载因子、hash数组size)?
HashMap中扰动函数的作用 ?
4. Hashtable 和 HashMap的区别:{底层数据结构 (JDK1.8后不同)、父类不同、扩容方法不同、线程上锁范围不同(重点)}
5. equals 和 == 区别
为啥重写equals要重写hashCode()
hash值相等,而两个对象不一定equals
6.【高频】String、StringBuffer、StringBuilder的区别和各自使用场景
深入一些:String是如何实现它不可变的?
为什么要设置String为不可变对象? (字节一面这个问题给我问懵了)
7.接口和抽象类区别
8.重写和重载的区别
9.深拷贝和浅拷贝区别
10.Java三大特性
11. Object的方法:{finalize、clone、getClass、equals、hashCode}
12.【高频】设计模式:{单例模式、工厂模式、装饰者模式、代理模式、策略模式 等等}(此处我的掌握也不是很好)
深入一些:单例模式为什么采用双检测机制?
单例为什么用Volatile修饰?
装饰模式和代理模式区别?
1.线程的状态:{new,runnalbe,wait,time-wait,block,terminated }
2.进程、线程、协程的含义和区别。//个人理解是一组渐进提出的概念
3.进程间通信方式:{管道 、FIFO 、信号量、共享内存、消息队列、Socket}
4.如何避免死锁?死锁的四个必要条件
5. Sleep和wait的区别
6.【高频】Sychronized和lock的区别 ?
7. Sychronized的底层优化:{无锁、偏向锁、轻量级锁、重量级锁}
8. volatile的作用:{指令重拍、保证变量的可见性(设计JMM)}
9. ThreadLocal 底层原理
10.【高频】线程池
线程池构造器涉及哪些参数: {corePoolSize,maximumPoolSzie,timeout,timeUnit,RejectHandler,等待队列,线程工厂}
介绍线程池工作过程?
线程池拒绝策略那些?
适用Executor创建线程池的弊端?
11. AQS 框架原理和源码理解
1.TCP/IP 模型 & OSI模型
2.应用层、传输层、网络层常见协议:{DNS、HTTP、FTP、STMP、SSL、TCP、UDP、 ARP、IP}
3.【高频】TCP 三次握手、TCP四次挥手
深入一些:为什么三次握手,能否两次?
四次挥手中什么是 time_wait 状态 ? close-wait 状态?
time_wait状态什么场景下过多,会造成什么问题?
4.TCP可靠性:{ARQ、流量控制、拥塞控制、校验和}
5.【高频】输入URL显示主页的过程//个人仅遇过一次,但是看面经感觉问的挺多
6.HTTPS和HTTP 区别// 字节专属问题
深入一些:HTTPS加密过程介绍 ?
7.Cookie和Session的区别
8.Http1.0 和HTTP1.1 和 Http2.x 的区别
9.get和post的区别
10.常见的状态码
1.用户态和内核态的区别
2.fork()作用
3.Select poll epoll的区别
4.虚拟内存作用? 内存分页的作用?
5.缺页异常的介绍
6.OOM问题和 StackOverFlow的区别
1.【高频】MyISAM和InnoDB的区别:{是否支持行锁、是否支持十五、是否支持 MVCC、底层索引结构不同 }
2.事务特性ACID
深入一些:为什么要有一致性?AID不是已经保证了一致性了吗 ?
3.并发事务带来的问题:{脏读、修改丢失、不可重复读、幻影读}
4.【高频】事务的隔离级别
5.【高频】 MVCC机制
6.【高频】索引
为什么索引使用B+树结构,而不是B树
为什么索引使用B+树结构,而不是红黑树:{磁盘预读取、红黑树高度 }
7.聚簇索引和非聚簇索引区别? 主键索引和二级索引了解吗?
8.为什么不对每个列创建索引呢?
9.【高频】SQL语句优化,SQL题目(字节要求撸代码)
10.explain中 rows、type、key、extra字段的含义?
11.count(1)、count(*)、count(列值)的区别
需要了解linux的指令和 git指令。
对一些大数据场景题需要了解。例如1亿数据取top10,1亿数据取出现频率top10,1亿URL取出重复URL
64匹马,8个跑道,最少比赛几次选出前八?等智力题(字节常考)
此外,项目相关的知识体系需要准备, 例如我的项目涉及Netty和Zookeeper,则我会去准备相应的问题。此处因人而异。
1.问了下简历和岗位相关的项目问题
2.tcp 四次挥手协议,为什么是四次
3.b tree和b+ tree的区别
4.回表,联合索引
5.https ssl讲一下,讲一下证书签发过程
6.算法题: binary tree 每层找最大值:level order traversal(BFS)
array,先递增后递减,可能有重复,找到一个数:三次binary search,第一次找到分界点,然后分别找target number
7.进程通信方法,说下管道
1.get/post 详解 说到get一般把数据放在url上,问:是什么协议规定的,可以放在body里么?
2.说下http request 和 response
然后记得不太清楚了,就感觉问的很细,被锤的感觉
3.算法题:diameter of binary tree, DFS, bottom-up方法,感觉会有很多corner case,但其实点就在于:edges=nodes-1
一亿个shot int,sort them 点在于:short int 是2^16, 然后有范围了,就可以用count sort来做,index当作值
4.什么是前后端分离,不分离的code长啥样
5.什么是事务,transaction
1.primary language是java,所以问了static变量什么作用,放在哪里 hashmap和hashtable区别
2.rand3 () 求rand5 () 说下怎么做
3.算法题: next permutation 点在于:怎么找到需要swap的index和比他值大的index,然后,需要从swap index之后需要sort么?
不需要的,因为前两次找index的时候,保证了从右往左是ascending,所以只需要two pointers reverse就行
计网:
HTTP协议的报文格式
(没答出来,以为是具体的报文格式,多少个字节那些,后面再看一下,原来是 : 请求方法 URL 状态码 这些,难顶)
数据结构:
JVM:
多线程:
设计模式:
生产消费者( 问有没有实际用过,答没有就没有问了)
mysql:
update时什么锁 (next-key lock,但唯一性索引时降级为行锁,不过当时答错了)
场景:
大数据文件如何读取存储(拆分小文件,那怎么标记顺序?如何个别文件损坏怎么办?高可用问题)
这里感觉答得不好
算法:
有序数组转二叉搜索树 (思路对了,但没做出来。看了下是leetCode的easy,都不知道是太紧张还是太菜了)
技术无关
1、一些Java基础知识。
2、倒排索引。
3、讲讲redis里面的哈希表?
4、happen-before的规则?
5、volatile修饰符,synchronize锁。
6、java单例模式的实现?
7、进程与线程的区别,多进程和多线程的区别?
8、HashMap原理,为什么用红黑树,红黑树的特点?
9、快排时间空间复杂度,最好最坏的情况,优化方案?
10、TCP的拥塞控制,具体过程是怎么样的?UDP有拥塞控制吗?如何解决?
11、讲讲了解的垃圾回收算法和回收器,什么时候执行STOP THE WORLD?
12、了解Go语言吗?
13、问项目相关的东西:负责哪个模块?有没有碰到什么问题?怎么解决的?
1、Kylin的项目架构。
2、Paxos和ZAB协议。
3、CAP理论,分区容错性的意义。
4、大表Join小表优化,如何处理数据倾斜?
5、讲一下最大堆和最小堆。
6、HDFS的读取、写入,容错处理。(源码)
7、MapReduce的过程。(第一版和第二版的)
8、MR shuffle,Spark shuffle。
9、namenode HA,脑裂,Yarn的调度机制。
10、Hive的内部表和外部表区别、数仓建模模型、数仓分层、雪花模型和星型模型。
11、了解ClickHouse吗?它与Kylin的区别?
1、LRU算法实现。(伪代码)
2、链表倒数第K个数。(讲思路)
3、一堆螺丝和螺母用最短时间匹配。(代码实现)
4、求每天浏览页面的新用户。(Hive QL实现)
5、求抖音小视频每日点击量最高的10个。(Hash + 最小堆)
1.自我介绍
2.讲一下你做的最好的一个项目,然后问问简历的其他项目,给他讲了好几个算法(项目里面确实算法比较多)
3.讲一下spring mvc的原理
4.了解哪些排序算法?
5.快排的算法流程和时间复杂度?
6.什么是哈希排序?
写题:
1.三路归并算法实现
2.最长不重复子串长度
最后:
让我稍等一会儿,先别退出房间,他去看看同事有没有时间,直接二面
面试官首先先问我实习地点安排在上海没问题吗,答:比较看重机会,位置什么的都可以克服
1.自我介绍
2.问了问我的研究方向,聊了一会儿
3.操作系统的页面置换算法,详细讲了一下
写题:
1.最长上升子序列
2.从54张牌中不放回抽样,每次抽n张,你会怎么实现?算是开放性回答,没写代码,交流思路