大厂秋招面经,特意分享大家
阿里
Java
- JVM分区
- 垃圾收集算法
- synchronized原理
- 双亲委派机制
- 线程池参数
- newFixedTheadPool底层,优缺点
- springmvc
- @Autowired原理
- springboot原理
- @OnConditionalClass实现原理
- @OnMissingBean没有bean会怎么样,会classNotFound
- HashMap 底层数据结构
- HashMap 什么时候扩容?装载因子和临界值默认是多少?扩容成多大?为什么容量是2的幂次方?
- 线程安全的Map?分段锁是如何实现的?JDK 1.8之后有哪些优化?
- Lock和Synchronized区别
- AQS实现
- 锁优化
- String StringBuilder StringBuffer区别,特点,场景
- ConcurrentMap 源码
- CMS
- 线程生命周期(状态)
- ReentrantLock与AQS同步框架
- CAS原理是什么?
- synchronize原理是什么?
- springboot 和 spring 的区别是什么?
- spring中bean的初始化过程
- 谈一谈异常机制
- Spring IOC和AOP
- Arrays.sort()底层原理
场景题
- 一个8G的服务器,堆的大小应该设置成多少
- 海量数据求频率最多的100个
- spring一个事务中调用另外一个事务,另一个- 事务发生异常会怎么样
- 一个父类加载器能不能加载一个子类加载器,为什么
- select * from A where id in (select id from B)怎么优化
- 一个16G的内存堆分配多少,采用什么垃圾收集器,为什么用cms不用g1,为什么(面试官一直问为什么使用cms或者使用g1,回答了这两个的优缺点之后还是不满意)
- 多线程解析一个超大文件怎么处理,如果文件切分的时候关键信息被分到了不同的解析线程中怎么办
- hashset是如何判断两个对象相等的
- 如何要两个对象相等equals和hashcode这两个方法要怎么重写
- hash算法(最开始讲hash冲突算法,面试官说不是这个,我又说对hash值对质数取余,面试官也说不是这个,不知道他要我回答啥。。。)
- 不使用任何优化,直接访问数据库,如何优化 (提示 redo、undo log的开销)(这里应该还可以答:批处理、连接池等)
- 行锁锁的是索引,如果一个表没有主键怎么加锁?(锁表)
- hashmap 为什么不直接用红黑树,还要用链表?
- 红黑树的特性?各种操作的时间复杂度?最多旋转几次达到平衡?
- finally 中 return 会发生什么?
- 如何破坏双亲委派
- 浏览器中用户信息和密码的安全有没有考虑过
- 两个线程如何交替打印A和B
- 100万个数,数据类型是int,给你8核CPU,8G内存,如何求数组的和?
- 很多个不重复的数,假设用的数组来装,我希望你实现一个方法,每次调用这个方法给我随机返回100个不重复,记住是随机的。
- 四个引用的具体应用场景
- 垃圾回收器具体应用场景
- 可达性分析算法具体应用场景
- 垃圾回收器参数调优(给具体场景 大概就是并发低延时)
- 高并发多连接jvm 线程池参数调优(顺着来)
- 高并发系统调优(再顺一下)
- 队列与栈的 应用场景
- 点赞高并发怎么办?
- 消息中间件用过么?怎么自己设计一个消息中间件?
- 假设catch,final,catch中有return,那么final还会不会执行
- 假设1亿的11位的手机号,运行空间128M,如果要进行排序,那么要怎么设计
- jvm的设计角度,gc你怎么优化?
- 你怎么设计md5函数?
- cpu一直被占满,怎么排查?
- 让你自己设计一个垃圾回收器,尽可能提高回收效率,你会怎么设计?(ZGC和香浓多,整就完事了)
- MD5加密算法,不使用hashmap和映射,你自己来设计一个同类型的,给定字符串可以生成64位随机数的,你怎么设计
- 利用java现有的东西,让你设计一个对象,实现类似synchronize的功能,使得多个线程不冲突,你如何设计?(ThreadLocal玩起来)
- synchronize锁定.class和锁定一个实例有什么区别?
- explain中的key字段的值等于ref时,有没有触发索引?
- 如何实现单点登录,如何实现权限控制,用户密码泄露后如何保证安全性
- spring中循环依赖如何解决?如果让你来实现你怎么做?
- 如果我的服务器ip地址变了,客户端如何感知到呢?
- 轮询的负载均衡的缺点是什么?如何改进?
- 让你来实现真正的负载均衡,你如何做?(我回答记录每台服务器在最近的一段时间内接收的请求的数量,每次都把请求发送给数量最小的服务器,后来面试官提醒我还应当考虑每个请求耗费的时间)
- 秒杀项目中静态资源CDN怎么做?
- css文件能放到CDN上吗?
- 秒杀缓存如何与数据库的数据保持一致性?
- 通过广播的方式去更新每个节点的缓存,如果某个节点的缓存更新失败,那么如何排查是哪个节点呢?
- 消费者消费失败是怎么处理的
- 如何保证消息消费的顺序性
- 如何保证消息不被重复消费
- 项目中要进行分布式扩展应该怎么做
- 缓存和mysql数据一致性如何保证
- 微信步数排行,假设百万级用户,怎么排序,实时更新(我说排序就是海量数据排序的方式分组排序再归并,然后实时更新的话也是组内更新组内排序,但是每组的分度值可能不一样,比如0-2000可能一组,但2000-4000可能要分五组之类的,因为步数特别少和特别多的都是少数。)
- 发生了OOM,应该怎么去分析解决?jvm调优
- 什么时候发生线程的上下文切换?
- CAS是硬件实现还是软件实现
- 除了wait和notifyall,还有什么办法实现类似的功能
- 微信抢红包设计(只讲了类似多线程抢、Semphore,缓存)、海量文件找重复次数最多的个数(分治)
MySQL
- 索引怎么优化
- 为什么用B+树
- Innodb 和 Myisam 的区别
- 聚集索引和非聚集索引 创建以后的文件大小
- 为什么不用哈希索引?
- 有几种事务隔离级别?
- Innodb 行锁是如何实现的?
- mysql怎么分页
- 索引为什么查找快
- 慢查询如何优化
- mvcc原理
Redis
- redis基本数据类型
- redis集群?切片
- 为什么用Redis,Redis宕机了怎么办,数据呢?怎么保持热点数据?过期机制,淘汰机制?
- redis是单线程么?为什么快?io模型什么怎么样的,具体是怎么个流程?
- 缓存穿透、雪崩,redis持久化机制
计网
- tcp三次握手
- HTTP 和RPC区别?还有呢?
- JWT流程,安全?Session?
- 盐有单独保存起来么
- HTTP 和 HTTPS的区别
- https的加密证书怎么获取
- 加密后客户端保留的是公钥还是私钥
- 讲一下ftp
- cookies
- http以及https 以及加密手段
- 浏览器输入url后的一系列操作
- HTTP状态码
- 为什么用Jwt,cookie,session有什么好处?
- TCP怎么确保可靠性的?丢包和串包怎么办?
- DNS说一下?
操作系统
- 上下文切换
- 内核态用户态
- 多路复用IO模型,select,poll,epoll
分布式
- 怎么实现分布式锁
- redis分布式锁有什么缺点,怎么解决
- 单体应用和微服务区别,为什么要有微服务?好处?还有呢?
- 微服务流程?
- 分布式缓存?
- 分布式session原理
- SpringCloud及其组件你了解哪些?
算法
- n个线程顺序循环打印0-100
- 手写LinkedList的数据结构并写出add和remove算法
- 微信红包算法实现
- 链表如何找环
- 有序链表合并
- 共计9个苹果,有2只猴子,一个猴子每次拿2个苹果,一个猴子每次拿3个苹果,如果剩余的苹果不够猴子每次拿的数量,则2只猴子停止拿苹果,请用java多线程模拟上面的描述,要求性能尽可能高效(这个题开始是用可重入锁写的,结束之后自己本地测试发现程序不会自动结束,后来改成用AtomicInteger和cas来实现了)
- 设计一个多线程打印程序,第i个线程只打印i-1数字,比如第1个线程打印数字0,第2个线程只打印数字1,依次类推。任意给定一个数字序列,比如3382019835830,能够使用该程序打印出来。
腾讯
算法
- 判断树是否对称:1
- 在一个大数组里求第100大的数字:1
- 找出A[1000]、B[1000]、C[1000]中的重合的数字:1
- 给出25亿个QQ号,找出其中重复的?如果不用bitmap且只有一台机器怎么做?:1
- 你了解哪些排序?:1
- 快排什么时候复杂度不好?:1
- 红黑树的特点?如果给红黑树插入数据,红黑树是怎么做的?:1
- 写一个栈:1
- 两个特别大的数相乘:1
- 求两个已排序数组合并后的中位数:1
- 设计栈,使得getMin()和getMax()的时间复杂度为O(1):1
- 一个数组中只有一个数字出现了奇数次,其他数字出现了偶数次,找到出现了奇数次的那个数:1
- 100层楼和2个玻璃杯,怎样用最少的次数找出杯子在哪一层会碎:1
- 哈希表是如何实现的?:1
- 1TB的数据如何进行排序:1
- 对100TB的数据进行排序?(拆分多个数据段进行排序,然后归并):1
- 判断链表有环,找环入口:2
- 100万个数找最小的10个(大顶堆):1
- 旋转数组找出最小值:1
- 找链表中间节点:1
- 找链表倒数第k节点:1
- 微信发红包 m块钱发给n个人 你怎么设计算法:1
- 很多数中有俩数重复了咋判断:1
- 单调栈问题:1
- 分组反转单向链表:1
- 非递归实现后序遍历:1
- 把数组排成最小的数:1
- 找第k大元素:1
- 链表循环右移动k位置:1
- 如何自己实现一个kv结构的,你有哪几种方式:1
- 用hash表有什么问题,和解决了什么问题?:1
- 用树解决了什么问题,红黑树和hash分别是有序还是无序的呢?:1
- 为什么是有序还是无序?具体怎么实现的呢?:1
MySQl
- mysql慢查询如何优化?:2
- 优化器是什么时候起作用的?:1
- MVCC的原理?:1
- InnoDB和myISAM的区别?:2
- InnoDB的聚集索引和MyISAM的非聚集索引的区别?:1
- B+树、B树、红黑树的区别:2
- 辅助索引的叶子上有什么内容?辅助索引和主键索引性能差距在哪里?:1
- 数据库事务性质,并发一致性问题:1
- 数据库存储过程,视图,函数的使用,几种连接方式:1
- 索引:2
- 事务的ACID:2
- 数据库的join操作实际上是MySQL底层是怎么做的呢:1
- limit a,b是什么意思,会有什么性能上的问题:1(limit之前的数据先查出来、a代表起点、b代表数量,如果a很大的话,那么MySQL需要先去遍历前a条数据而不是直接定位,所以这里存在性能问题)
- 数据库容灾方面问题,数据库挂了怎么办:1
- 数据库集群怎么实现数据一致性:1
java
- 从java代码到.class文件,中间经历实现你了哪些过程?:1
- Java数据类型,大小:1
- instanceof和getClass:1
- JMM:2
- 介绍项目中的SpringIOC DI MVC AOP:1
- JVM数据区:1
- GC相关:1
- OOM情况:1
- 多态的实现:1
- Java类的分类:1
- 普通类,接口,抽象类的区别:1
- Java创建线程的方式:1
- 线程的状态:1
- 单例模式:1
- 类加载过程:1
- 双亲委派模型:1
- Java会出现内存泄露吗:1
- 如何定位和解决OOM:1
- Java的GC中什么场景下使用CMS和G1:1
- hashmap:1
- JVM参数调优:1
- Minor GC和Full GC:1
- 线程池:1
- spring bean的什么周期:2
- spring 单例的bean是否线程安全:1
- 有状态的bean和无状态的bean区别:1
- spring事务了解么:1
- 如何实现HashMap取出的顺序和放入顺序一致?:1
- HashMap的扩容的时间复杂度,如何优化?:1
- JDK8添加了哪些特性?:1
- java为什么说它即是解释型语言,又是编译型语言:1
- 面向对象和面向过程的区别?:1
- java的类和c++的类有什么区别:1
- java语言的三大特性:1
- 怎么拼接多个string:1
- 讲讲异常:1
- 深拷贝和浅拷贝:1
- java的包装类的了解?为啥要有包装类:1
- Java的集合:1
- 乐观锁和悲观锁:1
- synchronize和Lock区别:1
- synchronized的底层是怎么实现的?:1
- ReentrantLock的区别:1
- ThreadLocal的原理是什么:1
- CountdownLatch:1
redis
- redis在你项目中怎么用的?防止重复提交是怎么做到的?:1
- Redis五种数据类型:1
- Hash底层:1
- redis跳表的优势:1
- reactor模式:1
- redis持久化:1
计网
- HTTP还是HTTPS请求?有什么区别?:3
- HTTP过程的四次挥手?:2
- TIME_WAIT的作用?:2
- cookie的作用?:1
- 腾讯和百度两个网页能获取对方的cookie吗?:1
- 在百度里搜索abc的过程?:1
- 搜索的时候,数据包是怎么交给网卡的?(7层 5层网络模型)层层封包都加的是什么内容?:1
- 网卡怎么知道数据是发送给百度服务器的,怎么找到服务器的?:1
- 计算机网络分层,各层的协议:1
- http流量控制,拥塞避免如何实现:1
- 多少种请求方式,get和post区别:1
- Https端口443以及怎么的实现流程:1
- Session和Cookie区别:1
- TCP和UDP的区别:1
- TCP三次握手:1
- CLOSE_WAIT:1
- DNS解析的过程:1
- HTTP长连接和短连接:1
- TCP拥塞控制:1
- 了解粘包吗,怎么设置不粘包:1
- sql注入如何防范:1
- xss如何防范:1
- udp的最大包长度,为什么这么大?:1
- 傻瓜窗口了解吗?怎么解决?:1
- socket去写的时候你会怎么写?考虑什么?:1
- http常见头部信息有哪些:1
- 你知道https的非对称加密和对称加密使用了哪些算法么:1
os
- 内核态和用户态的区别?:1
- 用户态通过什么样的接口调用内核?
- 进程在内存中是如何分配的?(段页式及其细节、数据段、栈段、代码段):1
- 操作系统进程同步方式:1
- 进程怎样通信:2
- 套接字:1
- 线程通信机制:1
- CPU密集型任务适合多进程还是多线程?:1
- 进程的同步机制,你在什么时候用:1
- 向一个进程发出kill信号接下来发生什么?:1
- 共享内存的坏处:1
- 操作系统中中断的分类:1
- 操作系统页置换算法:1
- 僵尸进程问题:1
- 页式和段式的区别,优缺点,应用场景。:1
- 讲一下虚拟内存、页表:1
- 为什么顺序io比随机io快?:1
- 随机io的过程是什么?:1
- 用户态和内核态的区别?如何切换?:1
- 原子操作的意义:1
- i++为什么不是原子操作,如何去保证是原子操作?:1
分布式
- 高并发系统大量请求如何优化:1
- 分布式系统CAP:1
- 秒杀系统解决超卖问题,(数据库排它锁和乐观锁CAS版本号机制):1
- base理论:1
- 两阶段提交:1
- redis分布式锁的注意事项,实现过程?:1
亮点
- Netty,NIO通信框架:1
- BIO、NIO、AIO:1
- NIO又可以分为三种,基于轮询、基于多路复用、基于事件回调:1
- 如何指定使用哪种方式:1
- 知道他底层怎么实现的吗:1
- Netty底层Buffer的实现:1
- 日志清理如何解决:1
- 日志合并如何解决:1
- reactor模式:1
- 讲讲netty的io模型:1
- 讲讲多路复用机制,你觉得什么时候多路复用性能会比较好?
字节
算法(好多树)
- 每K个节点翻转链表(链表k个一旋转):2
- 二叉搜索树转链表:1
- 负载均衡算法:1
- 排序算法哪些是稳定的:1
- 二叉树求和:1
- 序列化和反序列化二叉树:1
- 如何判断一颗树是否是完全二叉树:1
- 求数组的极值点:1
- 最大连续子序列:1
- 回文链表:1
- 链表反转:1
- 对称二叉树:1
- 二叉树右视图:1
- 移动零:1
- 给定链表,确定中间数:1
- 链表奇数位升序、偶数位降序:1
- 二叉树的左视图:1
- 一致性hash:1
- 旋转数组的最小值:1
- 判断两个链表是否交叉?:1
- 三数之和:1
- 两个链表相加:1
- 给一个序列判断是不是二叉搜索树的后序遍历:1
- 单词翻转
- 二叉树层序遍历:1
- 最长连续子串:1
- 岛屿:1
- 无重复字符的最长字串:1
- 设计一个数据结构 list: rpush rpop lpush lpop index 五种方法的时间复杂度均为 O(1),数据量上限是100w(我回答使用双端队列+hashMap, 面试官说可以用两个数组实现)
- 求集合的子集:1
- 字符串全排列:1
Java(所有谈谈的,老哥我最喜欢了,狂吹)
- 常见的GC回收器,越详细越好:1
- SpringMVC的请求过程:1
- 常见的GC回收器,越详细越好:1
- 线程池(所有你知道的),原理尽量详细些:2
- HashMap底层实现:1
- concurrenthashmap:1
- ConcurrentHashMap的扩容机制:1
- LinkedHashMap 底层数据结构?使用场景? :1
- Spring AOP怎么实现,围绕bean生命周期去讲:1
- 三大特性:1
- 谈谈多态:2
- 接口和抽象类的区别:1
- 谈谈集合:1
- Arraylist和LinkedList的区别:1
- Hashmap底层:1
- ==跟equals的区别:1
- 有界无界队列:1
- 线程的创建方法:1
- 深拷贝、浅拷贝:1
- sychronized:1
- GC算法:1
- JVM内存结构:1
- 谈谈cas:1
- 谈谈JVM:1
- JDK动态代理:1
- 类加载的过程:1
- 说说Object类,作用,有什么方法:1
- Treeset Treemap的底层实现:1
- volatile:1
- 谈谈反射:1
字节问的Java没啥难度,简单的一批
计算机网络
- https通信过程:1
- https加密过程,怎么判断证书的有效性:1
- tcp、udp区别
- tcp(所有):1
- TCP拥塞控制:1
- TCP滑动窗口:1
- http 头部有哪些key:1
- http状态码有哪些:1
- DNS服务器怎么处理域名请求的,了解原理吗:1
- GET、POST:1
- HTTP2.0有哪些改动:1
- 路由器怎么工作的:1
- 七层协议讲一下:1
- http是否无状态?如何有状态?session和Cookies的区别:1
MySQL
- 聚簇索引和非聚簇索引底层实现:1
- 隔离级别:2
- mysql在业务中怎么实现乐观锁:1(MVCC各种吹)
- MVCC原理,和for update有什么区别:1
- Innodb\myisam区别:1
- 谈谈B+树前世今生以及所有:1
- ACID:1
- 联合索引底层结构:1
- SQL里where having分别是做什么的,有什么区别,什么时候用:1
- MySQL索引类别:1
- 左连接和内连接的区别:1
- 谈谈binlog和redolog :1
题:
- 获取所有课程得分均大于80分的学生的平均得分:2
Redis
- 分布式锁怎么实现,Redis加锁过程:1
- Redis的setnx有哪些注意点,比如宕机时会发生什么:1
- zset底层原理:(吹它的跳跃表和压缩列表):3
- Redis中的哨兵:1
- 谈谈Redis集群 Redis Cluster,以及主从复制原理:1
- redis的hashmap和java的hashmap有何异同:1
- 持久化策略:1
- 利用redis的可重入锁如何设计:1
- redis分布式锁是否公平锁?
操作系统
- 进程间通信有哪些,各个优缺点:2
- select/poll/epoll:2
- 用户态、内核态:1
- 信号量 同步 互斥的区别:1
- 页面的置换算法:1
- 进程间的同步方式用过哪些:1
linux
- linux如何查找CPU故障
RocketMQ
- RocketMQ有哪些组件:1
Mybatis
- mybatis的缓存:1
项目
- Jmeter压测的时候为什么会丢包
感觉字节基本没有Spring,可惜了,问的Java也比较基础!! 如果有中间件的话,多熟悉熟悉。 其次就是计算机网络和操作系统的知识多熟悉熟悉,最后就是大家都知道的算法!!!
以上还有各个大厂总结的面经,都在链接:https://github.com/DreamCats/Dc-Notes
#面经##Java##校招##字节跳动##阿里巴巴##腾讯#