此面经合集主要来源于网络(牛客网、博客网站等),个人按公司进行分类整理。
阿里
面经1
1.简单介绍项目
2.知道哪些数据结构以及他们的特点
3.链表增删快,那如何提高其查询效率,有没有什么想法?
4.B+树了解吗?B+树如何范围查询?B+树退化的极端情况是什么?
5.跳表了解吗?
6.大顶堆、小顶堆了解吗?
7.实现长地址请求到服务端,然后服务端重定向短地址给客户端,如何实现长短地址的互相映射?
8.那我现在有10份数据,有1000个线程来争抢,你要怎么处理?
9.分布式是什么?为什么要分布式?分布式又会有哪些问题?分布式系统是如何实现事物的?
10.Redis集群了解吗?如何处理宕机的情况?Redis的同步策略?
11.LRU算法了解吗?你会如何实现它?这个算法可以应用在哪些场景下?
12.TCP为什么是三次握手?两次行不行?多次行不行?
13.TCP的安全性是如何实现的?两台服务器之间可以同时建立多条TCP链接吗?怎么实现的?
14.客服端输入一个网址后,是如何拿到客服想要的数据的,是怎样在网络中传输的?
15.cookie和session
16.java有哪些锁?共享锁是什么?CAS?乐观锁和悲观锁?synchronied的底层原理?锁升级?死锁怎么形成的?如何破解死锁?
面经2
校招
1、Java容器:List,Set,Map
2、Map的遍历方式
3、HashMap扩容为什么是扩为两倍?
4、Java线程同步机制(信号量,闭锁,栅栏)
5、对volatile的理解:常用于状态标记
6、八种基本数据类型的大小以及他们的封装类(顺带了解自动拆箱与装箱)
7、线程阻塞几种情况?如何自己实现阻塞队列?
8、Java垃圾回收
可达性分析->引用级别->二次标记(finalize方法)->垃圾收集 算法(4个)->回收策略(3个)->垃圾收集器(GMS、G1)。
9、java内存模型
10、TCP/IP的理解
11、进程和线程的区别
12、http状态码含义
13、ThreadLocal(线程本地变量),如何实现一个本地缓存
14、JVM内存区哪里会出现溢出?
15、双亲委派模型的理解,怎样将两个全路径相同的类加载到内存中?
16、CMS收集器和G1收集器
17、TCP流量控制和拥塞控制
18、服务器处理一个http请求的过程
19、例举几个Mysql优化手段
20、数据库死锁定义,怎样避免死锁
21、spring的aop是什么?如何实现的
22、面向对象的设计原则
23、策略模式的实现
24、操作系统的内存管理的页面淘汰 算法 ,介绍下LRU(最近最少使用算法 )
25、B+树的特点与优势
面经3
校招
自我介绍,说简历里没有的东西
说几个你最近在看的技术(MySQL,多线程)
口述了一个统计数据的场景题
如果这个统计数据场景不用MySQL,而是用Java来实现,怎么做
如果数据量过大,内存放不下呢
用面向对象的思想解决上面提出的问题,创建出父类,子类,方法,说一下思路
下一个场景,口述了一个登录场景,同学用线程池做登录校验,会有什么问题
如何解决这些问题
你给出的方案弊端在哪里,还有哪些方案
面经4
校招
谈谈类加载机制。
hashmap和concurenthashmap
16g机器,让你分配jvm内存怎么分配。
机器慢了怎么排查。
谈谈consul和zookeeper,还有服务发现机制。
详细说明raft协议。
谈谈consul和zookeeper区别。
服务注册的时候发现没有注册成功会是什么原因。
讲讲你认为的rpc和service mesh之间的关系。
面经5
两年经验,社招
一面
1.synchronized原理,怎么保证可重入性,可见性,抛异常怎么办,和lock锁的区别,2个线程同时访问synchronized的静态方法,2个线程同时访问一个synchronized静态方法和非静态方法,分别怎么进行
2.volatile作用,原理,怎么保证可见性的,内存屏障
3.你了解那些锁,乐观锁和悲观锁,为什么读要加锁,乐观锁为什么适合读场景,写场景不行么,会有什么问题,cas原理
4.什么情况下产生死锁,怎么排查,怎么解决
5.一致性hash原理,解决什么问题,数据倾斜,为什么是2的32次方,20次方可以么
6.redis缓存穿透,布隆过滤器,怎么使用,有什么问题,怎么解决这个问题
7.redis分布式锁,过期时间怎么定的,如果一个业务执行时间比较长,锁过期了怎么办,怎么保证释放锁的一个原子性,你们redis是集群的么,讲讲redlock算法
8.mysql事务,acid,实现原理,脏读,脏写,隔离级别,实现原理,mvcc,幻读,间隙锁原理,什么情况下会使用间隙锁,锁失效怎么办,其他锁了解么,行锁,表锁
9.mysql索引左前缀原理,怎么优化,哪些字段适合建索引,索引有什么优缺点
10.线上遇到过慢查询么,怎么定位,优化的,explain,using filesort表示什么意思,产生原因,怎么解决
11.怎么理解幂等性,有遇到过实际场景么,怎么解决的,为什么用redis,redis过期了或者数据没了怎么办
二面
1.hashmap原理,put和get,为什么是8转红黑树,红黑树节点添加过程,什么时候扩容,为什么是0.75,扩容步骤,为什么分高低位,1.7到1.8有什么优化,hash算法做了哪些优化,头插法有什么问题,为什么线程不安全
2.arraylist原理,为什么数组加transient,add和get时间复杂度,扩容原理,和linkedlist区别,原理,分别在什么场景下使用,为什么
3.了解哪些并发工具类
4.reentrantlock的实现原理,加锁和释放锁的一个过程,aqs,公平和非公平,可重入,可中断怎么实现的
5.concurrenthashmap原理,put,get,size,扩容,怎么保证线程安全的,1.7和1.8的区别,为什么用synchronized,分段锁有什么问题,hash算法做了哪些优化
6.threadlocal用过么,什么场景下使用的,原理,hash冲突怎么办,扩容实现,会有线程安全问题么,内存泄漏产生原因,怎么解决
7.垃圾收集算法,各有什么优缺点,gc roots有哪些,什么情况下会发生full gc
8.了解哪些设计模式,工厂,策略,装饰者,桥接模式讲讲,单例模式会有什么问题
9.对spring aop的理解,解决什么问题,实现原理,jdk动态代理,cglib区别,优缺点,怎么实现方法的调用的
10.mysql中有一个索引(a,b,c),有一条sql,where a = 1 and b > 1 and c =1;可以用到索引么,为什么没用到,B+树的结构,为什么不用红黑树,B树,一千万的数据大概多少次io
11.mysql聚簇索引,覆盖索引,底层结构,主键索引,没有主键怎么办,会自己生成主键为什么还要自定义主键,自动生成的主键有什么问题
12.redis线程模型,单线程有什么优缺点,为什么单线程能保证高性能,什么情况下会出现阻塞,怎么解决
13.kafka是怎么保证高可用性的,讲讲它的设计架构,为什么读写都在主分区,这样有什么优缺点
14.了解DDD么
三面
1.线程有哪些状态,等待状态怎么产生,死锁状态的变化过程,中止状态,interrupt()方法
2.你怎么理解线程安全,哪些场景会产生线程安全问题,有什么解决办法
3.mysql多事务执行会产生哪些问题,怎么解决这些问题
4.分库分表做过么,怎么做到不停机扩容,双写数据丢失怎么办,跨库事务怎么解决
5.你们用的redis集群么,扩容的过程,各个节点间怎么通信的
6.对象一定分配在堆上么,JIT,分层编译,逃逸分析
7.es的写入,查询过程,底层实现,为什么这么设计
8.es集群,脑裂问题,怎么产生的,如何解决
9.while(true)里面一直new thread().start()会有什么问题
10.socket了解么,tcp和udp的实现区别
11.设计一个秒杀系统能承受千万级并发,如果redis也扛不住了怎么办
12.项目介绍
四面
1.讲讲你最熟悉的技术,jvm,mysql,redis,具体哪方面
2.new Object[100]对象大小,它的一个对象引用大小,对象头结构
3.mysql主从复制,主从延时怎么解决
4.怎么保证redis和mysql的一致性,redis网络原因执行超时了会执行成功么,那不成功怎么保证数据一致性
5.redis持久化过程,aof持久化会出现阻塞么,一般什么情况下使用rdb/aof
6.线上有遇到大流量的情况么,产生了什么问题,为什么数据库2000qps就撑不住了,有想过原因么,你们当时怎么处理的
7.限流怎么做,如果让你设计一个限流系统,怎么实现
8.dubbo和spring cloud区别,具体区别,分别什么场景使用
9.给了几个场景解决分布式事务问题
五面
1.怎么理解用户态,内核态,为什么要分级别,有几种转换的方式,怎么转换的,转换失败怎么办
2.怎么理解异常,它的作用是什么,你们工作中是怎么使用的
3.你们用redis么,用来做什么,什么场景使用的,遇到过什么问题,怎么解决的
4.jvm元空间内存结构,永久代有什么问题
5.你平时开发中怎么解决问题,假如现在线上有一个告警,你的解决思路,过程
6.你们为什么要用mq,遇到过什么问题么,怎么就解决的
腾讯
面经1
一面
项目:
你为啥用redis做缓存
你自己测的他的并发量有多少-5000
有没有考虑怎么优化
10万请求进来会面临什么问题?
数据量多的话,销峰-令牌桶
令牌桶在哪实现-nginx
数据结构:
二叉排序树和平衡二叉树的区别
100万数据里找重复数据 -set
set怎么实现-hashmap
还可以怎么做 -hashmap分文件再set
这相当于两次hash,有啥优点
计网:
三次握手都做了什么?
报文里有啥
校验和怎么实现?
网络出现拥塞怎么办-拥塞机制
怎么判断是否发生拥塞
门限值指的是什么-包的个数还是包的数据量
面经2
校招,云平台
自我介绍
TOP K问题
了解Nginx,那设计一个具体的负载均衡策略方案
了解MySQL主从复制,那自己设计一个主从复制方案
写代码,实现BlockingQueue
面经3
两年经验,社招
一面
1、mysql索引结构?
2、redis持久化策略?
(1)RDB:快照形式是直接把内存中的数据保存到一个dump的文件中,定时保存,保存策略。当Redis 需要做持久化时,Redis会fork一个子进程,子进程将数据写到磁盘上一个临时RDB文件中。当子进程完成写临时文件后,将原来的RDB替换掉。
(2)AOF:把所有的对Redis的服务器进行修改的命令都存到一个文件里,命令的集合。使用AOF做持久化,每一个写命令都通过write函数追加到appendonly.aof 中。aof的默认策略是每秒钟fsync一次,在这种配置下,就算发生故障停机,也最多丢失一秒钟的数据。缺点是对于相同的数据集来说,AOF的文件体积通常要大于RDB文件的体积。根据所使用的fsync策略,AOF的速度可能会慢于RDB。Redis默认是快照RDB的持久化方式。
3、zookeeper节点类型说一下;
4、zookeeper选举机制?
5、zookeeper主节点故障,如何重新选举?
6、syn机制?
7、线程池的核心参数;
8、threadlocal的实现,原理,业务用来做什么?
9、spring DI的原理;
10、四次挥手;
11、gc root选择;
12、标记清除算法的过程,标记清楚算法如何给对象分配内存空间?
13、cms算法的缺点;
二面
1、CorruntHashmap理解
2、ThreadLocal原理
3、hashmap;
4、Java数据类型,同步机制;
5、讲讲贪心算法;
6、如果线上用户出现502错误你怎么排查?
7、并发量很大,服务器宕机。你会怎么做?
三面
1、syn和lock的区别,哪个更好?怎么选择?
2、hashmap源码,为什么8个节点变成红黑树又为什么到了6个节点才恢复为链表?
3、缓存穿透,怎么解决?
4、负载均衡算法,实现;
5、轮询和随机的缺点;
6、分布式服务治理;
7、dns迭代和递归的区别;
8、算法题:最长回文串
9、为什么连接的时候是三次握手,关闭的时候却是四次握手?
因为当Server端收到Client端的SYN连接请求报文后,可以直接发送SYN+ACK报文。其中ACK 报文是用来应答的,SYN报文是用来同步的。但是关闭连接时,当Server端收到FIN报文时,很可能并不会立即关闭SOCKET,所以只能先回复一个ACK报文,告诉Client端,"你发的FIN 报文我收到了"。只有等到我Server端所有的报文都发送完了,我才能发送FIN 报文,因此不能一起发送。故需要四步握手。
面经4
一年社招
1.自我介绍 就背景进行一些提问
2.简单说说计算机网络
3.简单描述一下从浏览器输入一个地址到服务端整个交互过程
4.说说数据结构
5.操作系统用过吗
6.用过 linux 的哪些命令
7.查看一个进程监听了哪些端口
8.详细介绍项目(简历上的域名访问不了)
9.讲解之前工作经历中做的东西
10.做一道算法题(判断二叉树是否对称)
11.java 如何从源代码转换成机器码执行的
12.java 的击穿
13.网络的七层结构
14.tcp\udp 详解 区别
15.https 协议的交互过程
16.linux 基础命令
17.linux 开机过程
18.了解现在市面上主流的 cpu 架构
19.fpga 概念了解吗
20.市面上的图数据库
21.rdf 讲解
22.图数据库底层存储
23.b 树,b+树的概念和区别
24.红黑树平衡二叉树优缺点和应用场景
25.有没有了解 docker 等云技术
字节跳动
面经1
1.自我介绍
2.业务部分:
- 2.1 堆和栈的区别
- 2.2 调用一个函数在堆中的过程
- 2.3 密码学 中间人攻击、RSA、DSA密码的差别、加密过程,私钥加密公钥加密,数字签名的过程(跟本人网络空间安全背景有关)
- 2.4 键入一个URL
2.5 彩虹表、 kerberos、ECC(椭圆曲线加密)
3.算法题:
1.一个无序数组,求其topK
2.时段统计。动态规划。
面经2
一年经验,Java开发
- 自我介绍;
- 项目介绍;
- 手撕算法:NC95 最长连续子序列
- 手撕算法:NC91 最长递增子序列
- 线程和进程的区别?怎么创建线程?有哪些状态?有什么区别?
- Java1.8了解哪些新特性?重点讲讲HashMap和CurrentHashMap。
- OSI七层协议和TCP/IP五层协议有什么区别?TCP/UDP在哪一层?对TCP了解多少?
面经3
字节电商后端
算法题
- 求从一个树的左边的叶子节点到一个树右边的叶子节点的最短路径)
- 最长回文子串
- 给定一个数N,求(1-n)所有的可能子序列。比如给个1 返回1 给个2 返回1,2,1 2
进程和线程区别
为什么进程切换开销比线程切换开销大?
你知道逻辑地址和物理地址么?
sql题(表T (id,name,salary,city)用SQL实现找到同时符合城市平均工资大于5000,单人工资大于10000的人的名字)
wifi属于OSI哪一层
三次握手四次挥手相关(细节,以及为什么三次,为什么四次)
hashmap的底层原理
红黑树和二叉搜索树,二叉树之间的区别
为什么hashmap不直接用红黑树
面经4
一面:
1.IM系统用户登录怎么实现的?
2.登录状态是怎么保存的?session是怎么获取的?sessionid是怎么识别的?整个流程是什么样的?有没有考虑分布式session?
3.Redis的数据类型
4.Redis数据类型的底层数据结构
5.三次握手、四次挥手
6.Redis持久化机制
7.MySQL的InnoDB索引数据结构
8.哪些SQL的关键字会让索引失效
9.队列、栈、数组、链表
10.算法题:leetcode 92题
二面:
1.讲讲爬虫的构成
2.爬虫抓到的数据不清洗吗?不去重吗?
3.对爬虫有什么更多的了解吗?
4.Linux进程间通信机制
5.进程和线程的区别
6.线程私有的数据有哪些?(不是Java线程)
7.讲一下堆排序,每次调整的时间复杂度?堆排序是稳定的吗?
8.哈希表的原理,怎么减小哈希表的冲突,怎么保证哈希表的并行读写
9.Kafka用过吗?说说Kafka的原理?怎么保证Kafka的高可用?Kafka怎么保证消息有序?
10.项目里的set实现点赞,zset实现关注,为什么?
11.zset底层实现?说一下跳表?节点的高度是多少?怎么决定节点的高度?
12.https了解吗?
13.中间人攻击知道吗?怎么做https的抓包?https怎么篡改?
14.虚拟地址到物理地址的映射过程
15.算法题:给一个数组,建一颗最小高度的二叉树(递归和非递归)
三面:
1.介绍一下做过的项目,哪些挑战性比较大,比较有难度的
2.IM项目怎么用Netty的,为什么要用Netty,长连接交互是怎样的
3.消息怎么存储,怎么发送,怎么知道消息已读和未读的
4.读了5条消息、又来5条消息,你是怎么去更新的,你的消息是幂等的吗?
5.项目里怎么用ES的,ES怎么支持搜索的
6.技术论坛网站的评论是怎么存储的
7.查询评论是在DB里扫表查询吗?怎么展示所有的评论?性能如何?想要查询更快可以做哪些优化?
8.结合缓存和DB的时候会出现哪些问题?要怎么解决?
9.快排了解吗?介绍一下快排?时间复杂度是多少?为什么会退化成O(n^2)?单链表可以做快排吗?快排最核心的逻辑是什么?写一下单链表快排
面经5
一面
1、自我介绍
2、项目
3、volatile原理和作用
4、什么是指令重排序,举个例子
5、AQS原理
6、JVM内存模型
7、类加载过程
8、双亲委派机制
9、介绍代理模式
10、redis数据结构
11、HTTP状态码,header
12、MVCC原理
13、算法: 股票问题
二面
- 项目为啥立项,你做了什么模块
- 你的日志模块是怎么设计的,怎么开发的
- 你的token怎么做的,怎么保证唯一
- 你开发的业务模块怎么设计数据表的,具体用了哪些中间件
- mysql中inoodb的索引有哪些种类
- B+树索引具体是怎么实现的
- B树与B+树的区别
- 为什么B+树的中间节点不储存数据?
- 给一个索引,在有的查询过程中他没有走索引查询,说说你能想到的原因
- 红黑树了解过么?
- 用过redis么?
- 聊一下你对git的理解
- git rebase与git merge的区别
- 聊一下你对工作流的理解
手撕算法:
给四个整数,判断是否只通过四则运算加()优先级能否运算出24
面经7
一面:
1、自我介绍
2、JAVA SDK起到的作用
3、项目
4、数据流(项目)
5、排序(介绍下你知道的排序和复杂度)
6、Arrays.sort底层的排序算法(有三种策略)
7、堆排序基本思路
8、linux,操作系统的开机流程
9、进程和线程的区别
10、进程切换会发生什么
11、进程调度算法有哪些
12、TCP、udp区别
13、java锁,关键字区别
14、公平锁、非公平锁解释一下
二面:
1.算法题:由前序遍历中序遍历重建子树;
2.为什么静态类中不能使用非静态类(从类加载过程回答);
3.java类加载过程;
3.1.加载阶段中,为什么要有自定义的类加载器;
3.2.双亲委派原则的机制;
4.HashMap数据结构;
4.1.为什么小于6是链表,大于8变成红黑树;
4.2.HashMap扩容机制;
4.3.HashMap是否线程安全,例子;
4.4.ConcurrentHashMap和HashTable的区别;
4.5.ConcurrentHashMap如何保证高效,为什么是线程安全,为什么比HashTable优秀,分段锁机制;
4.6.CAS能保证线程安全吗(我回答能,面试官说不能。。估计想考ABA问题),volatile关键字能保证线程安全吗;
5.随机数求根,比如根号二的值。(二分查询)
6.有n个筐,筐固定,每个筐内有不同数目的苹果,移动苹果,使每个筐苹果平均(移动的代价:1~2算1步,1~3算2步)使步数最小;
三面:
1、自我介绍
2、解决什么问题,做了些什么?(项目)
3、多个接口,有失败怎么办(项目)
4、redis分布式锁怎么实现
5、时间过期怎么办
6、ArrayList怎么扩容,时间复杂度O(n)?插尾部O(1),平均是多少,答案O(2)需要考虑扩容。
7、HashMap底层原理
8、mysql索引什么原理、B+树
9、mysql和redis区别(讲一下各自优缺点)
10、为什么不用redis存数据?
11、算法:LRU缓存(),先讲一下再写
面经8
抖音电商
1.自我介绍
2.讲一下HashMap的put方法
3.讲一下HashMap的扩容过程
4.讲一下你自定义协议怎么解决粘包问题的?
5.算法题:LeetCode 二叉树根节点到子节点的路径和
6.mysql的索引结构
7.为什么用B+树呢?
8.having的作用
9.聚簇索引、非聚簇索引
10.聚簇索引比非聚簇索引的优点
11.mysql的四个隔离级别,应用场景
12.如何在可重复读隔离级别解决幻读问题
13.dubbo的负载均衡策略
14.java的动态代理
15.Spring哪里用到了动态代理?
16.CGlib动态代理说一下
17.MQ如何保证消息不会丢失
面经9
一面
怎么理解微服务
微服务的缺点
微服务之间怎么做负载均衡
Oauth2基本流程、原理
登录模块是怎么做的
cookie和session的区别
购物车为什么用Redis存,是永久存储吗
为什么购物车多读多写
Redis怎样清除过期key,有哪些策略
lru是怎样的过程
Redis字典底层怎么实现的
hashtable是怎样实现的
ziplist怎样实现的
普通的哈希表怎样实现的
哈希表怎么扩容
使用MQ的好处
MQ解耦和微服务解耦的区别
算法:最长回文子串
https建立连接的过程(SSL/TLS协商的过程)
对称加密和非对称加密的优缺点
为什么要区分内核态和用户态
什么时候从用户态切换到内核态
你编程的情况下,系统调用什么时候会发生
2面
手写单例模式
volatile什么作用
多线程的几种实现方式
四种方式的区别
锁用过哪些
排它锁什么意思
自旋锁什么意思
CAS相关
MySQL可以不指定主键建表吗,背后的逻辑是什么
聚簇索引和其他索引有什么区别
建唯一索引,插入数据时是怎么处理的
重复插入会报错,是怎么处理的
不同事物隔离级别的实现
lc40 组合总和II
3面
有在实习吗
面试通过后可以实习吗
做项目的过程中遇到过什么问题
内存泄露具体发生在哪
什么情况下会出现多线程访问
缓存穿透,怎么解决
缓存雪崩,怎么解决
缓存与数据库数据一致性
超卖问题怎么解决的
集群环境下,Redis内存里的数据怎么保证一致
算法:给定一个字符数组,和一个字符串,在字符串里找到任意一个完全由字符数组组成的子串,字符顺序无所谓(滑动窗口)
面经10
项目介绍;(问的比较深,包括权限校验、SQL优化、索引相关)
手写SQL:获取一个商铺最近一周每一天的销售总量。
如何判断是否命中索引?如何优化索引?
线程有哪些状态?阻塞状态又分为哪些,有什么区别?
手撕算法:NC90 包含min函数的栈
手撕算法:寻找二叉树每层结点的最大值
简述上述两个算法的思路和时间空间复杂度。
优化上述两个算法,要求分别在O(1)和O(N)时间复杂度内解决上述问题。
百度
面经1
shiro的组件
分布式一致性算法
zookeeper那些能参与投票,leader能投票吗?
netty零拷贝实现
volatile,如何感知到变量变化的
redis高可用
http如何跨域?
tcp如何长链接。
http如何操作浏览器缓存。
用过消息队列吗?
怎么自己扩展validator(参数校验那个)
jwt组成 header payload 签名加密算法那些。
rsa如何运用到jwt中
synchronized和volatile的区别
什么是上下文切换,URL解析过程
http有那些方法,get那些
进程和线程的区别。
和别人协作出现冲突怎么办
如何学一个新语言
怎么自学的
面经2
一面
自我介绍
说说IO多路复用
你刚刚说的多路复用针对的是各个请求(比如set,get),那返回值Redis是怎么处理的(愣住)
MySQL B+树一般几层,怎么算的
数据库隔离级别
脏读、不可重复读、幻读(结合具体场景来讲)
MySQL隔离级别分别怎么实现的
MVCC
redo log、undo log
刷脏页的流程
算法题:平方根
二面
自我介绍
项目是自己练手的项目吗,怎么找的
项目是从0开始搭建的,还是有用开源的脚手架
秒杀大概用到哪些东西,怎么实现的
MQ幂等性和消息积压问题
缓存与数据库数据一致性
唯一ID
Java里怎么保证多个线程的互斥性
一个线程有哪些状态
AQS怎么理解的
Spring IOC容器创建Bean的流程
创建的Bean是单例还是多例的
SpringCloud config是怎么在Bean创建后更新Bean的值的
SpringBoot自动配置原理
SpringMVC执行流程
使用Spring和直接使用Java语言面向对象开发,有哪些好处
怎么理解面向对象
了解哪些设计模式
策略模式描述一下
JVM由哪些模块组成
框架里打破双亲委派机制的SPI大概怎么实现的
那说说双亲委派
垃圾回收主要回收哪些区域
怎么识别哪些是垃圾
哪些是根节点
什么时候会出现Full GC
不同垃圾收集器的区别
TCP为什么要握三次手,为什么要挥四次手,大概什么流程
实现环形队列(数组,增加和删除功能)
反转链表(迭代)
三面
专业是偏向硬件吗
对百度了解多少
有什么兴趣爱好
经常打球吗
喜欢听什么音乐
经常听音乐吗,什么时候开始喜欢听音乐的
你说两个具体的歌名我听听
平时是怎样的一个人,有什么特点
有做过什么有成就感的事吗
后面选择百度的概率有多少
想过自己5年后、10年后是怎样的吗
面经3
1.面试官介绍自己,然后自我介绍
2.java中的线程池有哪些?为什么使用线程池?你在哪里使用过或是见过?
3.Mysql底层是怎么实现的?从内存布局,磁盘布局说起?
4.Mysql有哪些索引?B树和B+树的区别,分别解决了什么问题?
5.try catch finally机制讲解一下?
6.为什么要使用SpringBoot做开发?与传统的开发有什么不一样的?
7.什么是微服务?微服务是如何实现服务的注册与发现的?
8.java中的集合分类有哪些?知道Queue吗?她下面有哪些实现类?重点说说HashMap?
9.在集合中哪些集合类是线程安全的?
10.什么是数字签名,作用是什么?使用的是什么算法?
11.常见的网络攻击有哪些?
12.在表单提交的时候,容易发起什么样的攻击?
13.在进行服务调用的时候如何进行身份验证,如何防止网络攻击?
14.你见过哪些安全框架?具体怎么使用的?(shiro)
15.两道算法题:1)普通的二分查找,问了其中的一些细节,二分查找存在的问题? 2)判断S1中是不是有S2的排列,找到返回true,否则返回false
16.Cookie和session 的使用场景,他们之间的关系?
17.String,StringBuilder,StringBuffer的区别,String的两种初始化的区别?
18.说说自己做过的java项目?使用了哪些框架?
19.说说自己教研室的项目,你在其中扮演的角色,解决了什么问题?
面经4
spring事务
反射原理
lock底层实现
线程池实际应用及如何设计参数
数据库事务隔离级别
动态代理两种实现方式
hashmap底层数据结构
concurrentHashMap如何保证线程安全
双亲委派原则
算法:两个栈实现队列、链表找环的入口
京东
面经1
kafka在应用场景以及 项目 里的实现
bitmap底层
object里有哪些方法
hashmap相关
sychronized和reentrantlock相关问题以及锁升级
cas和volatile
线程几种状态以及转化
jvm内存模型
mybatis相关问题
Redis数据结构,问了下跳表的底层
RDB和AOF
MySQL索引有哪些
b+树底层实现
最左前缀原理
面经2
一面
1、线程的状态
2、cms
3、增量更新法
4、GcRoots是哪些
5、java基础
6、mysql索引
7、项目具体实现
二面
1、怼项目
2、springcloud作用
3、为什么用springboot
4、Nacos原理,如何保证nacos和服务实例发生网络分区服务丢失问题
5、为什么需要同步锁
hr
1、自我介绍
2、个人优势
3、有无实习
面经3
1.索引
2.谈谈多线程
3.jvm如何调优
4.mq在项目中的用法
5.遇到的多线程问题,如何解决
6.算法:
6.1最长无重复字串
6.2 找到A^2+B^2 = C
面经4
项目
说一下项目难点以及如何解决
Java基础
线程的几种状态,以及状态的转换
阻塞状态和等待状态的区别
怎么实现线程安全
锁怎么实现线程安全
synchronized可重入吗,为什么需要可重入
悲观锁和乐观锁
怎么判断JVM里是否出现死锁
如何预防线程死锁
MySQL
为什么数据库索引用B+树,而不用list、map、二叉树或红黑树
计组
二进制有原码,为什么还要有反码和补码
场景题
一个数组,可以不断地添加元素,而不出现数组下标越界异常。怎么实现?
有A、B两个大文件,每个文件几十G,而内存只有4G,其中A文件存放学号+姓名,而B文件存放学号+分数,要求生成文件C,存放姓名和分数。怎么实现?
面经5
一面
1、三次握手
2、四次挥手,每一次挥手之后客户端和服务器的状态,为什么TIME_WAIT是2倍最大报文存活时间
3、NIO和BIO的区别,select和epoll的底层原理
4、同步和异步的区别,异步底层的实现原理
5、Bean的生命周期
6、BeanDefinitionReader是怎么读取XML中的配置的
7、Bean实例的创建有哪几种方式
8、AOP的理解,代理方式,代理底层怎么实现的
9、SpringMVC的流程,View输出的是什么,HandlerAdapter的作用是什么,JSP懂不,servlet懂不
10、线程池,拒绝策略,任务执行流程,worker线程管理
11、synchronized和Lock的区别,sync在jvm里怎么实现的,公平和非公平的区别,抢占是怎么体现的,是队列里的线程去抢占锁吗,AQS解释一下
12、数据库的事务并发有哪几种,隔离级别有哪几种,还有哪种方式可以解决幻读
13、MVCC
二面 7.27
1、项目中遇到什么困难
2、粘包半包问题怎么解决
3、你的自定义协议怎么解决的
4、讲讲reactor
5、编解码在reactor的哪一步
6、超时重传和快速重传
7、给定一个数组,找出现频率最高的前m个数,讲下思路
面经6
数据库乐观锁、悲观锁
为啥用Redis
sql语句执行顺序
SpringMVC优点,原理
aop优点,原理
ioc优点,原理
面向对象概念
封装
项目中封装如何体现
高内聚,低耦合啥意思,如何去设计
设计一个电梯场景,实现面向对象,高内聚,低耦合的情况
统计学校内共享单车数量,你有啥想法(开放题)
shopee
面经1
消息队列如何保证可靠性
消息队列如何保证消息幂等性
消息队列的优缺点
为什么用b+树
聚集索引和主键区别,其他引擎怎么做的
平时数据库编码
explain参数
http报文参数有哪些吗?
做题,链表奇偶有序输出
面经2
- 自我介绍
- 有哪些排序算法?
- 介绍下快排/堆排/归并排序。
- 数据库中的索引应该如何设计?
- 有哪些索引失效的情况?
- 你们用到的HTTP接口用到了什么提交方式?
- GET/POST的区别?
- 除了GET/POST还有哪些?
- 面向对象的基本原则?再详细说下依赖倒转。
- 介绍下策略模式和观察者模式?
- 如何保证用户请求的等幂性?等幂性指的是用户可能连点提交三次支付请求,返回同样的结果(支付成功),但实际后台只执行一次,保持一致性。
- 介绍下TCP四次挥手?
- 第四次挥手后客户端是立刻就关闭了吗?是什么状态?
- 两个大文件,分别每行都存一个url,查找两个文件中重复的url。
- 一个大文件中,每一行有一个整数,怎么找第100大的数?
- 一个大文件中,每一行有一个整数,怎么找中位数?
- redis的基本数据结构?
- zset是怎么实现的?有哪些命令?
- 算法题 力扣221. 最大正方形
面经3
自我介绍、项目介绍,问了数据量
了解微服务吗?(有没有自己在做项目时进行调研,了解企业目前常用的工具、方法)
了解springcloud吗?
一台机器无法满足运载需求,怎么办呢?答:多搞几台机器,问:多台机器如何协同工作?
开始瞎答:mapreduce
解释一下mapreduce
如果有一个很大的文件,TB级别,文件里是乱序的数字,如何排序?mapreduce如何实现?
排序过程中的归并排序,请描述一下其过程?时间复杂度
进程、线程区别,问使用Java时,里面多线程的概念和os里的线程进程的区别是什么?真正使用时,Java里的线程和进程是如何调度?
多线程的同步互斥的方法?答了信号量,问具体怎么实现,答pv操作,给了具体的场景,问变量如何初始化(等同于口述代码)
有哪些索引?(mysql为例)
b树、b+树是什么样的树结构,查询复杂度?是平衡二叉树吗?
使用过redis吗?具体做什么?
手撕代码:LRU算法;正反序层序遍历二叉树
网易
面经1
Java基础:容器、反射、范型
Q3:说一说Java有哪些容器;
Q4:List和Set的区别?不可重复是什么意思?
Q5:HashMap是线程安全的吗?如果想用线程安全的HashMap怎么做?
Q6:如果让你设计一个线程安全的HashMap怎么做?
Q7:Java反射了解吗?什么场景下使用反射?
Q8:知道什么是范型吗?编码:写一个范型类
JVM
Q9:说一说Java的垃圾回收(从确认垃圾算法和回收垃圾算法说)
Q10:你刚刚说的都是垃圾回收相关算法,那具体回收的垃圾回收器知道吗?
设计模式
Q10:编码:写一个单例模式
Q11:单例模式有很多,你这个属于哪一方法实现?还有哪些方法?
Q12:Spring里面的bean也有单例,那这个单例和Spring里面的bean单例是一个吗?
数据结构与算法
Q13:有哪些排序算法?他们的性能怎样?
Q14:编码:写一个快排(没写出来,耽误了10多分钟??)
Q15:知道二叉树吗?二叉树的特性有哪些?(这个没get到咋回答,应该是满足一定条件的二叉树子节点和父节点的关系,节点数量和深度之类的关系吧)
Q15:给了一个二叉树,写出前序,中序,后序遍历方式
面经2
网易云音乐
项目延申;(较浅)
知道哪些优化网络的方法?(延申到MySQL主从同步、TCP传输机制、Redis缓存等);
知道哪些确保线程安全的方法?(延申到AQS、ThreadLocal、Synchronized、锁升级等);
知道SSM和SpringBoot的区别吗?如何搭建项目?如何迁移两者项目?
知道Spring中的IOC和AOP吗?底层是如何实现的?在项目中哪些地方体现?
JVM内存结构和Java反射机制体现在Spring中哪些方面?
手撕代码:(归并+二分)在保证一个数组安全的情况下使其有序,并且找到目标值又或者最接近目标值的数。
基础乐理了解多少?制作一首音乐的流程有哪些?如何利用大数据预测下一首爆火歌曲(乐理+代码层面)?
滴滴
面经1
项目相关(项目的架构、项目中的重难点)
算法题糊脸:最长回文子串
了解MySQL的数据结构吗,B+树
聚簇索引、非聚簇索引
什么情况下会回表
脏读、幻读、不可重复读
MySQL事务隔离级别怎么实现的(锁机制+MVCC),怎么解决的幻读(间隙锁、next key)
Redis中zset的数据结构(数据结构由编码决定,zset有两种编码,对应的数据结构分别是压缩列表 | 跳表+字典)
如何解决哈希冲突(拉链法、开放定址法、再哈希法)
三次握手、四次挥手(越详细越好,说了详细的过程、状态变换、第一次握手占不占序列号、不携带数据的ack占不占序列号等等)
面经2
项目相关(模块划分,项目需求,技术方案,数据库设计,表的结构及关系,担任角色)
http协议的关键字段,比如request和response头部信息有哪些关键字段,有什么含义
http状态码:100,200,502,504
http和https的区别,https是为了解决什么问题
三次握手、四次挥手(详细过程+状态变化)
出现大量的close_wait可能是什么原因,解决方案,通过什么工具看出来网络有问题等等
Java中常见的集合有哪些,List、Set、Map初始容量加载因子了解吗
Java中线程通信的方式有哪些,大概的原理
MySQL如果遇到性能不好的问题,比如说慢查询,怎么做
数据库优化方案(索引 | 分库分表)
有哪些索引,数据结构,建立索引的原则
分库分表的原则,说说场景(水平 | 垂直、热数据 | 冷数据 blabla)
算法题:两数之和
华为
面经1
7.22一面
从白板实现一个双向链表,并且写出增删改查
从白板实现一个二叉树,并且补充遍历方法
聊项目
7.26二面
聊项目,0八股文
主要从你觉得的难点,以及考察一些对项目的理解程度
题目:给定一个字符串 s,你可以通过在字符串前面添加字符将其转换为回文串。找到并返回可以用这种方式转换的最短回文串
7.30三面
业务主管面
聊研究生的事情,学了什么课,自己觉得优势在哪,以后想在哪发展
有赞
面经1
1、集合八股文(list接口下的、map接口下的)
2、map中提到了concurrentHashMap,说到了synchronized,所以让我说一说lock锁和synchronized的区别
3、线程池的七个参数
4、线程池任务提交流程、线程池的任务执行流程。
5、mysql的事务隔离级别,以及解决的问题
6、mvcc的实现原理
整理不易,如果觉得对你有帮忙,可以点个赞鼓励一下!
我是程序员大彬 ,专注Java后端硬核知识分享,欢迎大家关注~