- java面试第一季笔记:
- java面试第二季笔记
- java面试第三季笔记
- 1.线程安全的类有哪些,平时有使用么,用来解决什么问题
- 2.mysql日志文件有哪些,分别介绍下作用
- 3.你们项目为什么用redis,快在哪,怎么保证高性能,高并发的
- 4.redis字典结构,hash冲突怎么办,rehash,负载因子
- 5.jvm了解哪些参数,用过哪些指令
- 6.zookeeper的基本原理,数据模型,znode类型,应用场景有哪些
- 7.一个热榜功能怎么设计,怎么设计缓存,如何保证缓存和数据库的一致性
- 8.容器化技术了解么,主要解决什么问题,原理是什么
- 9.java类加载过程
- 10.自增操作
- 11.回表查询 (索引失效)
- 12.b树和b+树的区别
- 13.hystrix熔断
- 14.reactor模型
- 15.BIO、NIO、AIO区别
- 16.volatile作用,原理,怎么保证可见性的,内存屏障
- 17.tcp/ip协议
- 18.CPU占用过高原因定位
- 算法:对于一个字符串,计算其中最长回文子串的长度
- 1.redis集群,为什么是16384,哨兵模式,选举过程,会有脑裂问题么,raft算法,优缺点
- 2.jvm类加载器,自定义类加载器,双亲委派机制,优缺点,tomcat类加载机制
- 3.tomcat热部署,热加载了解么,怎么做到的
- 4.cms收集器过程,g1收集器原理,怎么实现可预测停顿的,region的大小,结构
- 5.内存溢出,内存泄漏遇到过么,什么场景产生的,怎么解决的
- 6.锁升级过程,轻量锁可以变成偏向锁么,偏向锁可以变成无锁么,自旋锁,对象头结构,锁状态变化过程
- 7.kafka重平衡,重启服务怎么保证kafka不发生重平衡,有什么方案
- 8.怎么理解分布式和微服务,为什么要拆分服务,会产生什么问题,怎么解决这些问题
- 9.你们用的什么消息中间件,kafka,为什么用kafka,高吞吐量,怎么保证高吞吐量的,设计模型,零拷贝
- 算法1:给定一个长度为N的整形数组arr,其中有N个互不相等的自然数1-N,请实现arr的排序,但是不要把下标0∼N−1位置上的数通过直接赋值的方式替换成1∼N
- 算法2:判断一个树是否是平衡二叉树
- 二面
1.Innodb的结构了解么,磁盘页和缓存区是怎么配合,以及查找的,缓冲区和磁盘数据不一致怎么办,mysql突然宕机了会出现数据丢失么 - 2.redis字符串实现,sds和c区别,空间预分配
- 3.redis有序集合怎么实现的,跳表是什么,往跳表添加一个元素的过程,添加和获取元素,获取分数的时间复杂度,为什么不用红黑树,红黑树有什么特点,左旋右旋操作
- 4.io模型了解么,多路复用,selete,poll,epoll,epoll的结构,怎么注册事件,et和lt模式
- 5.怎么理解高可用,如何保证高可用,有什么弊端,熔断机制,怎么实现
- 6.对于高并发怎么看,怎么算高并发,你们项目有么,如果有会产生什么问题,怎么解决
- 算法:给定一个二叉树,请计算节点值之和最大的路径的节点值之和是多少,这个路径的开始节点和结束节点可以是二叉树中的任意节点
- 算法:求一个float数的立方根,牛顿迭代法
- 什么时候能入职,你对岗位的期望是什么
- 你还在面其他公司么,目前是一个什么流程
- 阿里
一面
1.synchronized原理,怎么保证可重入性,可见性,抛异常怎么办,和lock锁的区别,2个线程同时访问synchronized的静态方法,2个线程同时访问一个synchronized静态方法和非静态方法,分别怎么进行 - 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是怎么保证高可用性的,讲讲它的设计架构,为什么读写都在主分区,这样有什么优缺点
- 了解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也扛不住了怎么办
- 四面
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.给了几个场景解决分布式事务问题
- 你觉得你们的业务对公司有什么实际价值,体现在哪,有什么数据指标么
- 五面
hr面完后又来了一面,说是交叉面 - 1.怎么理解用户态,内核态,为什么要分级别,有几种转换的方式,怎么转换的,转换失败怎么办
- 2.怎么理解异常,它的作用是什么,你们工作中是怎么使用的
- 3.你们用redis么,用来做什么,什么场景使用的,遇到过什么问题,怎么解决的
- 4.jvm元空间内存结构,永久代有什么问题
- 5.你平时开发中怎么解决问题,假如现在线上有一个告警,你的解决思路,过程
- 6.你们为什么要用mq,遇到过什么问题么,怎么就解决的
- 一面
1.http请求头,expire,cache-control字段,状态码,301,302,401,403 - 2.https原理,数字签名,数字证书,非对称加密算法过程,有什么问题
- 3.tcp连接client和server有哪些状态,time_wait状态
- 4.虚拟内存,虚拟地址和物理地址怎么转换,内存分段,内存分页,优缺点
- 5.linux最多可以建立多少个tcp连接,client端,server端,超过了怎么办
- 6.eureka原理,强一致性么,为什么,怎么保证强一致性,多级缓存怎么保证一致性,eureka集群,宕机了服务还能调用么
- 7.hystrix原理,半开状态知道么,具体的一个转换过程,它的隔离是怎么实现的
- 8.zookeeper一致性保证,zab协议原理,半数原则如果查询到另外一半呢,那zookeeper属于哪种一致性,强一致性么,还是最终一致性
- 9.zookeeper选举机制,选举过程有什么问题
- 算法:最长不重复的连续子串
- 聊天:头条为什么用go,对java和go怎么看,愿意转go么
- 二面
1.函数a调用函数b的过程,是怎么传参的 - 2.java里面的函数调用有哪些,io流里面有函数调用么
- 3.fork函数,父子进程的区别,孤儿进程,僵尸进程会有什么问题,进程有哪些状态,进程间怎么同步,通信,消息队列,管道怎么实现的,进程调度算法,各有什么优缺点
- 4.dos攻击,ddos攻击,drdos攻击,怎么解决,syn flood
- 5.自旋锁,线程上下文切换的开销具体是什么,中断,有哪些中断,用户态和内核态切换过程
- 6.一张大表怎么更改表的数据结构,字段,用alter会有什么问题,怎么解决呢,有什么好的方案,双写的话会有什么问题,还有其他方案么
- 7.redis管道用过么,用来做什么,它的原理是,保证原子性么,和事务的区别,redis事务保证原子性么
- 8.redis强一致性么,怎么保证强一致性,有什么方案
- 9.kafka怎么保证消息不丢失的
- 算法:找出所有相加之和为 n 的 k 个数的组合,组合中只允许含有 1 - 9 的正整数,并且每种组合中不存在重复的数字,输入: k = 3, x = 9 输出: [[1,2,6], [1,3,5], [2,3,4]]
- 三面
感觉面试官很忙,就问了几个电商场景的技术解决方案 - 算法:一个环上有10个点,编号为0-9,从0点出发,每步可以顺时针到下一个点,也可以逆时针到上一个点,求:经过n步又回到0点有多少种不同的走法
- 如果n=1,则从0出发只能到1或者9,不可能回到0,共0种走法
- 一面
手写hashmap(卒) - 滴滴
一面
1.排序算法了解哪些,快排,快排复杂度,优化,堆排序,建堆过程 - 2.反射了解么,原理是什么
- 3.treemap和linkdedhashmap区别,实现原理
- 4.jvm类加载的过程讲讲,符号引用是什么,哪些情况会发生初始化
- 5.spring的循环依赖,怎么解决的,为什么需要加个三级缓存,二级不行么
- 6.springboot有什么特点,相比与spring,了解springboot的自动装配的一个原理么
- 7.kafka支持事务么,你们项目中有使用么,它的原理是什么
- 8.怎么统计一亿用户的日活,hyperloglog有什么缺点,bitmap不行么
- 算法:求一个环形链表的环的长度
- 二面
1.redis的几种数据类型,你们用过哪些,zset有用来做什么 - 2.垃圾收集器,cms垃圾收集过程,为什么停顿时间短,有什么缺点,concurrent mode failure怎么办,内存碎片怎么解决,为什么不用标记整理法
- 3.线程池原理,核心参数,线程数设置,参数动态调整后变化过程,Tomcat线程池原理,常用的线程池,你们一般使用哪种,为什么,会有什么问题,线程抛异常怎么办,阻塞队列原理
- 4.做过分库分表么,为什么要分库分表,会有什么问题,多少数据适合分库分表,跨库,聚合操作怎么做
- 算法:给定一个二叉树, 找到该树中两个指定节点的最近公共祖先
- 三面
1.nio讲讲,实现原理,优缺点 - 2.了解netty么,讲讲netty的设计模型,架构,使用场景
- 3.zookeeper读写数据过程
- 京东
一面
1.tcp和udp的区别,tcp怎么保证可靠连接的,出现网络拥塞怎么解决 - 2.tcp和udp的报文结构了解么
- 3.给了一个业务场景写sql语句
- 4.你们建表会定义自增id么,为什么,自增id用完了怎么办
- 5.一般你们怎么建mysql索引,基于什么原则,遇到过索引失效的情况么,怎么优化的
- 6.jvm内存结构,堆结构,栈结构,a+b操作数栈过程,方法返回地址什么时候回收,程序计数器什么时候为空
- 7.redis实现分布式锁,还有其他方式么,zookeeper怎么实现,各有什么有缺点,你们为什么用redis实现
- 算法:返回一个树的左视图
- 二面
1.spring你比较了解哪方面,讲讲,生命周期,bean创建过程 - 2.使用过事务么,遇到过事务失效的情况么,原因是什么
- 3.springboot是怎么加载类的,通过什么方式
- 4.什么对象会进入老年代,eden和survivor比例可以调整么,参数是什么,调整后会有什么问题
- 5.微信朋友圈设计,点赞,评论功能实现,拉黑呢,redis数据没了怎么办
- 算法:给你两个非空的链表,表示两个非负的整数。它们每位数字都是按照逆序的方式存储的,并且每个节点只能存储一位数字。
- 请你将两个数相加,并以相同形式返回一个表示和的链表
- 三面
感觉面试官对es很熟悉,一直问es问题 - 算法:验证二叉搜索树
java面试第一季笔记:
https://blog.csdn.net/weixin_50280576/article/details/112916150
java面试第二季笔记
https://github.com/MaJesTySA/JVM-JUC-Core
java面试第三季笔记
https://blog.csdn.net/u011863024/article/details/115270840
3季汇总:https://blog.csdn.net/lijiaming_99/article/details/120843548
1.线程安全的类有哪些,平时有使用么,用来解决什么问题
StringBuffer
Vector
LinkedBlockingQueue (指定容量阻塞队列)
CopyOnWriteArrayList (读多写少)
ConcurrentHashMap
ConcurrentSkipListMap(有序)
2.mysql日志文件有哪些,分别介绍下作用
错误日志
通用查询日志
慢查询日志
bin log (二进制操作日志append-主从同步和恢复数据)
redo log (事务操作日志-循环写入-断电重启后恢复事务数据)
undo log (反向数据操作进行事务回滚)
参考: https://zhuanlan.zhihu.com/p/365896972
3.你们项目为什么用redis,快在哪,怎么保证高性能,高并发的
1> redis是内存数据库,没有事务,所以处理简单快捷
2> redis使用了多路复用技术,一个io多路复用程序可以监听多个socket,然后放到事件队列中
4.redis字典结构,hash冲突怎么办,rehash,负载因子
拉链: (数组+链表)
rehash: 多次hash
公共溢出法:有冲突时放入公共区
参考:http://t.zoukankan.com/gylic-p-13141930.html
5.jvm了解哪些参数,用过哪些指令
-Xms | 初始化堆空间大小 | -Xms64m (一般为操作系统可用内存的1/64大小) |
---|---|---|
-Xmx | 最大堆空间大小 | -Xmx2048m (一般为操作系统可用内存的1/4大小) |
-XX:+PrintGCDetails | 打印GC详情 |
---|---|
-XX:+HeapDumpOnOutOfMemoryError | 当抛出OOM时进行HeapDump |
---|---|
-XX:+UseG1GC
-XX:MaxGCPauseMillis=200ms G1最大停顿时间暂停时间不能太小,太小的话就会导致出现G1跟不上垃圾产生的速度。最终退化成Full GC。所以对这个参数的调优是一个持续的过程,逐步调整到最佳状态。
参考:https://www.cnblogs.com/wuzhenzhao/p/12469403.html
6.zookeeper的基本原理,数据模型,znode类型,应用场景有哪些
ZooKeeper是一个分布式文件系统
参考:https://www.cnblogs.com/restartyang/articles/7770881.html
7.一个热榜功能怎么设计,怎么设计缓存,如何保证缓存和数据库的一致性
ACP原则:
要么AP,放弃强一致性(最终一致性)
要么CP,放弃高可用性(某一时刻)
更新redis缓存和更新数据库两个操作,要么加分布式锁保持强一致性;
要么先更新数据库,再删除redis缓存,保持最终一致性
参考:https://www.csdn.net/tags/NtzacgysMTQwNDAtYmxvZwO0O0OO0O0O.html
8.容器化技术了解么,主要解决什么问题,原理是什么
docker充当着软件的角色运行在我们的操作系统,其实它是一个进程,利用操作系统提供的各种功能实现了进程间网络、空间、权限等隔离,让多个 docker 容器进程相互不知道彼此的存在。
容器隔离,指定资源占用,独立环境
参考:https://blog.csdn.net/qq_20042935/article/details/121926223
9.java类加载过程
1、ClassNotFoundExcetpion
我们在开发中,经常可以遇见java.lang.ClassNotFoundExcetpion这个异常,今天我就来总结一下这个问题。对于这个异常,它实质涉及到了java技术体系中的类加载。Java的类加载机制是技术体系中比较核心的部分,虽然它和我们直接打交道不多,但是对其背后的机理有一定理解有助于我们排查程序中出现的类加载失败等技术问题。
2、类的加载过程
一个java文件从被加载到被卸载这个生命过程,总共要经历5个阶段,JVM将类加载过程分为: (加链初使卸)
加载->链接(验证+准备+解析)->初始化(使用前的准备)->使用->卸载
(1)加载
首先通过一个类的全限定名来获取此类的二进制字节流;其次将这个字节流所代表的静态存储结构转化为方法区的运行时数据结构;最后在java堆中生成一个代表这个类的Class对象,作为方法区这些数据的访问入口。总的来说就是查找并加载类的二进制数据。
(2)链接:
验证:确保被加载类的正确性;
准备:为类的静态变量分配内存,并将其初始化为默认值;
解析:把类中的符号引用转换为直接引用;
(3)为类的静态变量赋予正确的初始值
3、类的初始化
(1)类什么时候才被初始化
1)创建类的实例,也就是new一个对象
2)访问某个类或接口的静态变量,或者对该静态变量赋值
3)调用类的静态方法
4)反射(Class.forName(“com.lyj.load”))
5)初始化一个类的子类(会首先初始化子类的父类)
6)JVM启动时标明的启动类,即文件名和类名相同的那个类
(2)类的初始化顺序
1)如果这个类还没有被加载和链接,那先进行加载和链接
2)假如这个类存在直接父类,并且这个类还没有被初始化(注意:在一个类加载器中,类只能初始化一次),那就初始化直接的父类(不适用于接口)
3)加入类中存在初始化语句(如static变量和static块),那就依次执行这些初始化语句。
4)总的来说,初始化顺序依次是:(静态变量、静态初始化块)–>(变量、初始化块)–> 构造器;
如果有父类,则顺序是:父类static方法 –> 子类static方法 –> 父类构造方法- -> 子类构造方法
https://blog.csdn.net/weixin_37766296/article/details/80545283
10.自增操作
11.回表查询 (索引失效)
- like前模糊查询
- 范围匹配,where col > 3,使用not或!=
- where条件左边使用函数
- in子表查询
- 联合索引没有从最左匹配,如(a、b、c索引)查询b、c
- or语句前后没有同时使用索引,当or左右查询字段只有一个是索引,该索引失效,只有当or左右查询字段均为索引时,才会生效
- 查询字段数据类型不一致出现隐式转换,如字符串数字没有加双引号, (本身是int,加上双引号还是可以走索引)
- 使用is null 或 is not null
参考:https://blog.csdn.net/u012060033/article/details/122544952
12.b树和b+树的区别
b+树只在叶子节点存储数据,所以在非叶子节点上可以存储更多的key,树深度更低,查找io次数更少;
而且存储数据都在叶子节点,数据顺序排列且相连,便于区间查找和搜索
参考:https://blog.csdn.net/weixin_43256529/article/details/111730659
13.hystrix熔断
服务熔断的打开关闭条件
涉及到断路器的三个重要参数:快照时间窗、请求总数阀值、错误百分比阀值。
1:快照时间窗:断路器确定是否打开需要统计一些请求和错误数据,而统计的时间范围就是快照时间窗,默认为最近的10秒。
2:请求总数阀值:在快照时间窗内,必须满足请求总数阀值才有资格熔断。默认为20,意味着在10秒内,如果该hystrix命令的调用次数不足20次,即使所有的请求都超时或其他原因失败,断路器都不会打开。
3:错误百分比阀值:当请求总数在快照时间窗内超过了阀值,比如发生了30次调用,如果在这30次调用中,有15次发生了超时异常,也就是超过50%的错误百分比,在默认设定50%阀值情况下,这时候就会将断路器打开。
https://blog.csdn.net/CSDN_WYL2016/article/details/106427153
注意事项:如果同时配置ribbon和feign的超时时间,以feign的为准
结论:根据上面分析,Hystrix的熔断时间要大于Feign或Ribbon的connectTimeout+readTimeout,
由于ribbon的重试次数为RetryCount = (maxAutoRetries + 1) (maxAutoRetriesNextServer + 1),因此必须保证(maxAutoRetries + 1) (maxAutoRetriesNextServer + 1)*(ConnectTimeout+ReadTimeout)< timeoutInMilliseconds,因为如果小于超时时间, 那就熔断了, 没有机会重试了。
原文链接:https://blog.csdn.net/weixin_40857858/article/details/108327446
14.reactor模型
https://blog.csdn.net/weixin_39724469/article/details/111295927
15.BIO、NIO、AIO区别
https://blog.csdn.net/vtopqx/article/details/88115899
https://lijie.blog.csdn.net/article/details/105462088
16.volatile作用,原理,怎么保证可见性的,内存屏障
主内存可见性
保证指令有序性
https://blog.csdn.net/qq_38826019/article/details/119276621
17.tcp/ip协议
https://blog.csdn.net/tfygg/article/details/50757544
18.CPU占用过高原因定位
先用top找到CPU占用最高的进程,然后用ps -mp pid -o THREAD,tid,time,得到该进程里面占用最高的线程。这个线程是10进制的,将其转成16进制,然后用jstack pid | grep tid可以定位到具体哪一行导致了占用过高。
算法:对于一个字符串,计算其中最长回文子串的长度
双指针法
// 在 s 中寻找以 s[l] 和 s[r] 为中心的最长回文串
String palindrome(String s, int l, int r) {
// 防止索引越界
while (l >= 0 && r < s.length()
&& s.charAt(l) == s.charAt(r)) {
// 双指针,向两边展开
l--; r++;
}
// 返回以 s[l] 和 s[r] 为中心的最长回文串
return s.substring(l + 1, r);
}
String longestPalindrome(String s) {
String res = "";
for (int i = 0; i < s.length(); i++) {
// 以 s[i] 为中心的最长回文子串
String s1 = palindrome(s, i, i);
// 以 s[i] 和 s[i+1] 为中心的最长回文子串
String s2 = palindrome(s, i, i + 1);
// res = longest(res, s1, s2)
res = res.length() > s1.length() ? res : s1;
res = res.length() > s2.length() ? res : s2;
}
return res;
}
参考:https://labuladong.github.io/algo/2/18/23/
一面
1.redis集群,为什么是16384,哨兵模式,选举过程,会有脑裂问题么,raft算法,优缺点
https://blog.csdn.net/chuixue24/article/details/115396646?spm=1001.2101.3001.6661.1&utm_medium=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-1.pc_relevant_default&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-1.pc_relevant_default&utm_relevant_index=1
2.jvm类加载器,自定义类加载器,双亲委派机制,优缺点,tomcat类加载机制
https://blog.csdn.net/codeyanbao/article/details/82875064
https://blog.csdn.net/qq_45788043/article/details/114896230
Tomcat 实际上只有 WebAppClassLoader 加载器中打破了双亲委派,其他类加载器还是遵循双亲委派的。 这样做最主要原因是保证同个 Web 容器中的不同 Web 应用程序所使用的类库相互独立,避免相互影响
https://blog.csdn.net/a745233700/article/details/120802616
3.tomcat热部署,热加载了解么,怎么做到的
Tomcat要监听class文件是否变化应该是新起了一个线程来观测。那么看到在Context的启动方法中,看到调用了threadStart的方法。
https://blog.csdn.net/fk_99/article/details/122236199
4.cms收集器过程,g1收集器原理,怎么实现可预测停顿的,region的大小,结构
5.内存溢出,内存泄漏遇到过么,什么场景产生的,怎么解决的
6.锁升级过程,轻量锁可以变成偏向锁么,偏向锁可以变成无锁么,自旋锁,对象头结构,锁状态变化过程
7.kafka重平衡,重启服务怎么保证kafka不发生重平衡,有什么方案
8.怎么理解分布式和微服务,为什么要拆分服务,会产生什么问题,怎么解决这些问题
9.你们用的什么消息中间件,kafka,为什么用kafka,高吞吐量,怎么保证高吞吐量的,设计模型,零拷贝
算法1:给定一个长度为N的整形数组arr,其中有N个互不相等的自然数1-N,请实现arr的排序,但是不要把下标0∼N−1位置上的数通过直接赋值的方式替换成1∼N
算法2:判断一个树是否是平衡二叉树
二面
1.Innodb的结构了解么,磁盘页和缓存区是怎么配合,以及查找的,缓冲区和磁盘数据不一致怎么办,mysql突然宕机了会出现数据丢失么
innodb_flush_log_at_trx_commit特别需要关注,默认情况下这个参数是1,即严格保证数据库的一致性,事务在提交之后立即将log buffer的数据写入到log file,同时调用文件系统的flush操作。
https://blog.csdn.net/weixin_39620662/article/details/113590744
2.redis字符串实现,sds和c区别,空间预分配
https://www.cnblogs.com/kmcl1314/p/15666106.html
3.redis有序集合怎么实现的,跳表是什么,往跳表添加一个元素的过程,添加和获取元素,获取分数的时间复杂度,为什么不用红黑树,红黑树有什么特点,左旋右旋操作
4.io模型了解么,多路复用,selete,poll,epoll,epoll的结构,怎么注册事件,et和lt模式
5.怎么理解高可用,如何保证高可用,有什么弊端,熔断机制,怎么实现
6.对于高并发怎么看,怎么算高并发,你们项目有么,如果有会产生什么问题,怎么解决
算法:给定一个二叉树,请计算节点值之和最大的路径的节点值之和是多少,这个路径的开始节点和结束节点可以是二叉树中的任意节点
算法:求一个float数的立方根,牛顿迭代法
什么时候能入职,你对岗位的期望是什么
你还在面其他公司么,目前是一个什么流程
阿里
一面
1.synchronized原理,怎么保证可重入性,可见性,抛异常怎么办,和lock锁的区别,2个线程同时访问synchronized的静态方法,2个线程同时访问一个synchronized静态方法和非静态方法,分别怎么进行
https://blog.csdn.net/weixin_38106322/article/details/104440920
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算法做了哪些优化,头插法有什么问题,为什么线程不安全
https://blog.csdn.net/xuchuanliang11/article/details/104997366
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.了解哪些设计模式,工厂,策略,装饰者,桥接模式讲讲,单例模式会有什么问题
装饰者模式:https://zhuanlan.zhihu.com/p/421998141
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是怎么保证高可用性的,讲讲它的设计架构,为什么读写都在主分区,这样有什么优缺点
了解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也扛不住了怎么办
四面
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.给了几个场景解决分布式事务问题
你觉得你们的业务对公司有什么实际价值,体现在哪,有什么数据指标么
五面
hr面完后又来了一面,说是交叉面
1.怎么理解用户态,内核态,为什么要分级别,有几种转换的方式,怎么转换的,转换失败怎么办
2.怎么理解异常,它的作用是什么,你们工作中是怎么使用的
3.你们用redis么,用来做什么,什么场景使用的,遇到过什么问题,怎么解决的
4.jvm元空间内存结构,永久代有什么问题
5.你平时开发中怎么解决问题,假如现在线上有一个告警,你的解决思路,过程
6.你们为什么要用mq,遇到过什么问题么,怎么就解决的
你觉得和友商相比,你们的优势在哪
聊天:炒股么,为什么买B站,天天用,看好他
菜鸟
不知道为啥可以同时两个流程,可能真的缺人(想去阿里的大家抓紧机会)
算是给我2次选择机会了,面了几面(2面只用了11分钟,哈哈),主要问项目了
抖音
感觉头条不怎么问项目,或许是我项目太low了,比较喜欢问计算机基础和中间件知识
一面
1.http请求头,expire,cache-control字段,状态码,301,302,401,403
2.https原理,数字签名,数字证书,非对称加密算法过程,有什么问题
3.tcp连接client和server有哪些状态,time_wait状态
4.虚拟内存,虚拟地址和物理地址怎么转换,内存分段,内存分页,优缺点
5.linux最多可以建立多少个tcp连接,client端,server端,超过了怎么办
6.eureka原理,强一致性么,为什么,怎么保证强一致性,多级缓存怎么保证一致性,eureka集群,宕机了服务还能调用么
7.hystrix原理,半开状态知道么,具体的一个转换过程,它的隔离是怎么实现的
8.zookeeper一致性保证,zab协议原理,半数原则如果查询到另外一半呢,那zookeeper属于哪种一致性,强一致性么,还是最终一致性
9.zookeeper选举机制,选举过程有什么问题
算法:最长不重复的连续子串
聊天:头条为什么用go,对java和go怎么看,愿意转go么
二面
1.函数a调用函数b的过程,是怎么传参的
2.java里面的函数调用有哪些,io流里面有函数调用么
3.fork函数,父子进程的区别,孤儿进程,僵尸进程会有什么问题,进程有哪些状态,进程间怎么同步,通信,消息队列,管道怎么实现的,进程调度算法,各有什么优缺点
4.dos攻击,ddos攻击,drdos攻击,怎么解决,syn flood
5.自旋锁,线程上下文切换的开销具体是什么,中断,有哪些中断,用户态和内核态切换过程
6.一张大表怎么更改表的数据结构,字段,用alter会有什么问题,怎么解决呢,有什么好的方案,双写的话会有什么问题,还有其他方案么
7.redis管道用过么,用来做什么,它的原理是,保证原子性么,和事务的区别,redis事务保证原子性么
8.redis强一致性么,怎么保证强一致性,有什么方案
9.kafka怎么保证消息不丢失的
算法:找出所有相加之和为 n 的 k 个数的组合,组合中只允许含有 1 - 9 的正整数,并且每种组合中不存在重复的数字,输入: k = 3, x = 9 输出: [[1,2,6], [1,3,5], [2,3,4]]
三面
感觉面试官很忙,就问了几个电商场景的技术解决方案
算法:一个环上有10个点,编号为0-9,从0点出发,每步可以顺时针到下一个点,也可以逆时针到上一个点,求:经过n步又回到0点有多少种不同的走法
如果n=1,则从0出发只能到1或者9,不可能回到0,共0种走法
如果n=2,则从0出发有4条路径:0->1->2, 0->1->0, 0->9->8, 0->9->0,其中有两条回到了0点,故一共有2种走法
快手
感觉像刷kpi的,一看JD发现招的资深研发工程师,我对快手的印象又不好了
一面
手写hashmap(卒)
滴滴
一面
1.排序算法了解哪些,快排,快排复杂度,优化,堆排序,建堆过程
2.反射了解么,原理是什么
3.treemap和linkdedhashmap区别,实现原理
4.jvm类加载的过程讲讲,符号引用是什么,哪些情况会发生初始化
5.spring的循环依赖,怎么解决的,为什么需要加个三级缓存,二级不行么
6.springboot有什么特点,相比与spring,了解springboot的自动装配的一个原理么
7.kafka支持事务么,你们项目中有使用么,它的原理是什么
8.怎么统计一亿用户的日活,hyperloglog有什么缺点,bitmap不行么
算法:求一个环形链表的环的长度
二面
1.redis的几种数据类型,你们用过哪些,zset有用来做什么
2.垃圾收集器,cms垃圾收集过程,为什么停顿时间短,有什么缺点,concurrent mode failure怎么办,内存碎片怎么解决,为什么不用标记整理法
3.线程池原理,核心参数,线程数设置,参数动态调整后变化过程,Tomcat线程池原理,常用的线程池,你们一般使用哪种,为什么,会有什么问题,线程抛异常怎么办,阻塞队列原理
4.做过分库分表么,为什么要分库分表,会有什么问题,多少数据适合分库分表,跨库,聚合操作怎么做
算法:给定一个二叉树, 找到该树中两个指定节点的最近公共祖先
三面
1.nio讲讲,实现原理,优缺点
2.了解netty么,讲讲netty的设计模型,架构,使用场景
3.zookeeper读写数据过程
京东
一面
1.tcp和udp的区别,tcp怎么保证可靠连接的,出现网络拥塞怎么解决
2.tcp和udp的报文结构了解么
3.给了一个业务场景写sql语句
4.你们建表会定义自增id么,为什么,自增id用完了怎么办
5.一般你们怎么建mysql索引,基于什么原则,遇到过索引失效的情况么,怎么优化的
6.jvm内存结构,堆结构,栈结构,a+b操作数栈过程,方法返回地址什么时候回收,程序计数器什么时候为空
7.redis实现分布式锁,还有其他方式么,zookeeper怎么实现,各有什么有缺点,你们为什么用redis实现
算法:返回一个树的左视图
二面
1.spring你比较了解哪方面,讲讲,生命周期,bean创建过程
实例化(new)-> set属性 -> 调用BeanPostProcessor初始化方法 -> 调用DisposableBean的销毁方法 -> 结束
2.使用过事务么,遇到过事务失效的情况么,原因是什么
3.springboot是怎么加载类的,通过什么方式
4.什么对象会进入老年代,eden和survivor比例可以调整么,参数是什么,调整后会有什么问题
5.微信朋友圈设计,点赞,评论功能实现,拉黑呢,redis数据没了怎么办
算法:给你两个非空的链表,表示两个非负的整数。它们每位数字都是按照逆序的方式存储的,并且每个节点只能存储一位数字。
请你将两个数相加,并以相同形式返回一个表示和的链表
三面
感觉面试官对es很熟悉,一直问es问题
1.es倒排索引,原理,lucene,分词,分片,副本
2.es写数据原理,数据实时么,为什么不实时,会丢数据么,segment,cache,buffer,translog关系
3.es深度分页,优化
项目介绍