惯例自我介绍
问在字节夏令营做的项目,如何进行设计的。
比方说你用了 Redis,为什么要用 Redis?
Redis是基于内存的可持久化的健值数据库
Redis 为什么快?
基于内存操作
高效的数据结构设计
单线程设计
Redis 有哪些数据结构,zset 底层结构?为什么要有跳跃表和字典两个?
String,Hash,List,Set,ZSet
如果是使用跳跃表skiplist,则会结合一个哈希字典dict来实现:
即使用哈希字典dict来保存键和分值的映射,实现O(1)复杂度获取某个键的分值;通过跳跃表skiplist来根据分值排序来排序该集合,从而实现按分值排序,其中跳跃表的每个节点都同时包含分值和键。
在内存使用方面,哈希字典dict和跳跃表skiplist是通过指针来共享键和分值的,故不会存在两份数据,节省了内存。
如果只使用哈希字典来实现,则获取给定键对应的分值复杂度为O(1),但是如果每次获取有序集合,则需要获取整个集合然后排序,需要O(NlogN)的时间复杂度和O(N)的空间复杂度。
如果只使用跳跃表skiplist来实现,则每次获取某个键的分值都需要在跳跃表来查找,时间复杂度为O(logN)
你是怎么解决超卖少卖的?如果我不在缓存中做,非要用数据库来控制超卖少卖呢?
计算机网络的三次握手,四次挥手,TIMEWAIT 状态?如何尽量处理 TIMEWAIT 过多?
修改内核参数
写道算法题,数组的逆序数。要求能运行!
写个 LRU。
写个最长回文序列
限流的算法?为什么用令牌桶?令牌桶的限流有什么缺点?
了解分布式消息吗?
Kafka怎么保证信息有序?
二面:
惯例自我介绍
先写个题,矩阵中的最长递增路径,给定一个整数矩阵,找出最长递增路径的长度。对于每个单元格,你可以往上,下,左,右四个方向移动。 利用记忆化搜索搞定。
又问了一下字节夏令营的项目。
让你系统的设计一个高并发的架构,你会从哪几个方面考虑?
再写一个判断一个二叉树是另一个二叉树的子树? 剑指offer原题
情景设计:一个千万级的APP,你要搞定关注和粉丝列表,你用什么来做。要求最后一个关注的在最前面。
新增和取关都要比较快的反馈你怎么做?
如果一个人关注了之后,服务器宕机了怎么办?
了解RPC吗?说了一点点
远程过程调用
你在学校里面觉得做得最自豪的一件事?
你为什么会想来字节跳动?
这个时候必须吹一波,因为想和优秀的人做有挑战的事。
然后 get 字节的offer。
一面:时长1h30min
自我介绍
TCP的三次握手,为什么三次握手
TCP粘包,保护消息边界和流?
客户端和服务器最多能发送和接收多少TCP连接数?
说一下B树和B+树的区别。
B树和B+树都是平衡的多叉树
B+树的非叶子节点只存储索引,数据全在叶子节点
为什么数据库索引中用B+数而不用B树
B+树相比B树的优势?我说了查询性能更稳定,他说这样不是降低查询效率嘛,那为什么不用B树呢?
了解数据库索引吗?说一下种类,说一下应用场景。
索引是怎么提高性能的,在哪些列上可以创建索引,在哪些列上不能创建索引
什么时候索引会失效?
怎么知道有没有加索引
B+树的叶子结点上存了哪些信息呢
数据库的事务说一下,详细说一下脏读,说一下隔离级别
事务由一系列操作构成,这些操作要么都执行,要么都不执行。事物具有原子性,一致性,持久性,隔离性
脏读就是事务B读到事务A未提交的数据
事务的底层原理是什么呢
MVCC详细说一下
说一下Hashmap和CourrentHashMap
红黑树说一下,说一下左旋和右旋,画一下给我看看
说一下并发编程的几个特性
原子性
可见性
有序性
volatile关键字的两层语义
可见性,有序性(禁止指令重排)
它的底层原理是啥呢
手写一个计数器,开10个线程,保证最后计数输出为10
问一下JVM的内存模型
说一下内存结构,那这两个有什么联系呢,为什么要分代
说一下GC算法
说一下OutOfMemoryError
类加载详细说一下
说一下四种引用状态
说一下最长上升子序列,nlogn的时间复杂度
二面:29min
自我介绍
说一下项目
怎么解决超卖少卖的问题,怎么用数据库配合解决
了解分布式事务吗
说一下分布式唯一ID生成
了解RPC吗
远程过程调用
了解netty吗
Netty是由JBOSS提供的一个java开源框架,现为 Github上的独立项目。Netty提供异步的、事件驱动的网络应用程序框架和工具,用以快速开发高性能、高可靠性的网络服务器和客户端程序。
也就是说,Netty 是一个基于NIO的客户、服务器端编程框架,使用Netty 可以确保你快速和简单的开发出一个网络应用,例如实现了某种协议的客户、服务端应用。Netty相当于简化和流线化了网络应用的编程开发过程,例如:基于TCP和UDP的socket服务开发。
说一下你登录注册的模块吧,详细过程
你Token的过期时间为什么不能存在cookie里面呢?没想过
考虑过跨域攻击啥的吗,没考虑
那我就没啥问题了,等会给你发两个题做一下就没了。
问了项目部署在哪个环境下:Linux
Linux环境下上线一个服务,如果CPU占用太满了,怎么排查。
top 命令排查
通过ps -mp pid -o THREAD,tid,time命令, 查看某个进程下的线程情况,
怎么查看内存占用。
free
说到内存泄漏,问有没有碰到,内存泄漏怎么解决?我说了GC
说了一下怎么判断对象是否存活,介绍了一下GC的算法
问了一下c++每次都要new,delete,但是经常会忘了delete,那么有什么方式解决这个问题?我觉得比较像IOC的原理,就说了用容器去管理对象,我们在外面不用new,只需要从容器里拿,容器帮助我们解决new,delete。
生活场景下什么时候用UDP。
看视频和直播基于UDP,QQ聊天部分基于UDP。
介绍一下TCP,说一下三次连接的过程,为什么不是二次,四次挥手为什么不是四次?
有没有写过这个连接,说了一下课设写过一个简单的聊天服务器,不过就很简单的你发送我回答那种
问了一个我的项目是什么。说了一下是跟着视频写的,但是自己做了一些优化,感觉凉凉。
说一下mysql和redis的区别
mysql是关系型,有表和表之间的关系构成,redis是非关系,只有key和value
redis为什么不能代替mysql,如果redis能存大量的数据呢为什么不能?说到了事务
问我项目中哪里用到了,woc,一紧张给忘了哪用了
又扯了一下实习的工作,说下自己对于这个的理解
有没有什么想我的?问了一下工作地点。
二面:
说一下多态的底层的原理?说了一下编译时多态和运行时多态以及JVM调用invokestatic方法然后调用动态分派的过程,通过栈帧的信息去找到被调用方法的具体实现,然后使用这个具体实现的直接引用完成方法调用。
然后问我它是怎么找到对象实际类的?我不知道啊说了一下反射?他说反射太慢了,那我就不知道了,只知道调了命令
ArrayList 和 Linklist 的区别?大致都说了一下,扯到 ArrayList 线程不安全,我是个智障忘了 Linklist 线程安全不安全了。就说我还没注意到这个,跳过。
详细说一下 Hashmap 的 put 过程
插入链表的时候是前插还是后***还真没注意,就说没注意,猜测是后插。
HashMap 和 TreeMap 的区别
为何要用红黑树? 说了一下插入删除查询的时间复杂度的原因
那为什么不直接用红黑树?说了一下小于8个时候查询什么的O(n)就很优秀了,实现红黑树又比较复杂。
他说这个跟你没关系啊,实现都是底层的事情?那就说了小于8个时候查询什么的O(n)就很优秀了
你为什么一直说个人理解? 我说有的问题我也不能确定我的回答就是正确的,只能通过我已经学过的东西和看过的东西来去确定
在数据量比较小的时候,红黑树未必比链表快。
写道算法题:问我写 Java 的为什么笔试都是 c++ 写的
给定一个字符串,里面只有数字(0 ~ 9)、字母(a ~ z,A ~ Z),小数点(.),在这个字符串中找出一个最大的合法数字连续子串
123.456 -> 456
123.789.456 -> 789.456
123abc789.4mk56.1cde23 -> 789.4
123.456.789->789
二十分钟写完:
写的稍微有点点问题,但是面试官没看出来,说了一下时间复杂度我说 O(n),他说你这个里面不是又套了一重循环吗,为什么不是 O(n^2) 的
本来说今天就到这结束了,看我没说话又问了一点。
问了一下 c++ 的模板? 我心里我没用过啊,然后说了一下模板不能在局部定义就不知道了
linkhashmap 应用场景 我没用过,因为知道是根据 key 插入有序,说了一下先来后到的场景
深拷贝? 我不清楚说了一下拷贝的概念
问了一下 Java 是引用传递还是值传递
Java只有值传递
面完发面经,求OFFER
一面:2019-9-3 10:30开始
惯例自我介绍,五十分钟
说一下 HashMap 的结构,为什么非线程安全,为什么容量是 2 的次幂
因为在put操作时,存在扩容动作,在多线程下会出问题
那 CourrentHashMap 为什么线程安全
采用CAS的方法来优化底层操作。
说一下 Volatile 关键字,聊到底层原理
引申出 Synchronized
说一下 JVM 的内存分配,详细的说一下每一块是存啥,堆分配
说一下对应的 GC 算法
说一下 G1 垃圾回收器
线程池种类,拒绝策略,任务执行流程
说一下死锁
说一下Redis的几种数据结构,问我 zset 的底层数据结构(就知道跳跃表)
zset底层是跳跃表和Hash
说一下 Redis 的数据淘汰策略
TCP 的三次连接
Mysql 的几种引擎,区别是啥
说一下索引,B+ 树
数据库的几种隔离级别,解释一下什么是幻读
一、数据库事务隔离级别
数据库事务的隔离级别有4个,由低到高依次为Read uncommitted 、Read committed 、Repeatable read 、Serializable ,这四个级别可以逐个解决脏读 、不可重复读 、幻读 这几类问题。
√: 可能出现 ×: 不会出现
脏读 | 不可重复读 | 幻读 | |
Read uncommitted | √ | √ | √ |
Read committed | × | √ | √ |
Repeatable read | × | × | √ |
Serializable | × | × | × |
1.脏读:
脏读就是指当一个事务正在访问数据,并且对数据进行了修改,而这种修改还没有提交到数据库中,这时,另外一个事务也访问这个数据,然后使用了这个数据。
2.不可重复读:
是指在一个事务内,多次读同一数据。在这个事务还没有结束时,另外一个事务也访问该同一数据。那么,在第一个事务中的两次读数据之间,由于第二个事务的修改,那么第一个事务两次读到的的数据可能是不一样的。这样就发生了在一个事务内两次读到的数据是不一样的,因此称为是不可重复读。(即不能读到相同的数据内容)
例如,一个编辑人员两次读取同一文档,但在两次读取之间,作者重写了该文档。当编辑人员第二次读取文档时,文档已更改。原始读取不可重复。如果只有在作者全部完成编写后编辑人员才可以读取文档,则可以避免该问题。
3.幻读:
是指当事务不是独立执行时发生的一种现象,例如第一个事务对一个表中的数据进行了修改,这种修改涉及到表中的全部数据行。同时,第二个事务也修改这个表中的数据,这种修改是向表中插入一行新数据。那么,以后就会发生操作第一个事务的用户发现表中还有没有修改的数据行,就好象
发生了幻觉一样。
聊项目,秒杀系统设计的,为什么这么设计,那么设计为什么不行
写道算法题:给你一个二叉树,返回每一层的数值相加计算得到的平均值的数组,其实就是一个层序遍历
一面完下午五点收到的二面通知
二面:2019-9-4 14:30开始
惯例自我介绍
说一下秒杀系统里面怎么解决超卖的问题的
那么在 Mysql 里面用什么方法解决
说一下Innodb 和 Myisam 两个引擎的区别
数据库的事务特点以及几种隔离级别,解释一下什么是幻读和脏读
说了一下行锁和表锁,共享锁和排它锁
Spring 的 IOC 介绍,提到了反射
说一下 Java 的反射
问了一个 Http 1.0 和 Http 1.1 区别,我不知道说了一下 Http 和 Https 的区别
为什么 Https 是安全的
Http 的长连接说一下,然后给我解释了一下 http 1.0 和 http 1.1 的区别就是这个长连接
OSI 的七层模型,http 在哪一层, TCP 在哪层
写了两个算法题
第一个是给定两棵二叉树,把它们合并成一个二叉树,合并规则如下:如果两棵树的对应节点不为空,把这两个节点的和作为新树的节点,如果有一个节点为空,则把非空的节点作为新树的节点。
第二个就是给你一个循环链表让你找入口节点。考虑空间复杂度和不考虑空间复杂度两种做法
一面:
自我介绍
static关键字,final关键字。
HashMap是不是线程安全的?为什么不是线程安全?
courrenthashmap怎么保证线程安全?回答了jdk改版后的区别。
问了CAS是啥,大致的说了一下,过程说的是对的,但是几个字母说错了,尴尬。
线程池有几种,记得有四种,只说了三个名字出来。
说一些你知道的这几个线程池的区别,各自的特点。
说了一下一个新的进程加入到线程池的步骤
说一下线程池的几个重要的参数。
问了我newFixedThreadPool这个线程池的初始化大小是怎么决定的,我说测试一下看一般会有多少线程再来决定,面试官想知道一个理论的方法,我不知道。
问了一下你在项目里面承担了什么样的角色,你觉得比较难的点在哪,怎么解决的?
大致说了一下Redis的持久化,以及前缀树来过滤敏感词,问了时间复杂度和空间复杂度。
不知道空间复杂度是多少。
然后看了我在简历上说在学院的助理干过。问我这个工作是干啥的,中间有没有发生什么事情?
说了一件比较操蛋的事情,然后问我是怎么解决的,自己是怎么想的?
然后问了他Java在OPPO里面会用来干啥,就结束了。
二面+HR面:
前期主要是介绍项目,介绍项目的难点,你是怎么解决的。为什么这样去解决。
你是怎么学习的。
你的日后职业生涯规划是什么。
差不多都是这样的问题吧,都是聊项目。
HR面试:
内容被要求保密,但基本上都是差不多HR常问的那些问题。
一面:
自我介绍
学习了哪些数据结构?
问了堆和栈的区别:我知道想问操作系统的但是我刚开始一紧张我卡词了然后我说了一下竞赛里面的堆栈,
Java内存划分:介绍了一下几个区域,然后还详细说了一下这个里面是放啥的
怎么GC?说了一下GC条件,对象存活判断的两个方法,GC算法
引用计数法的问题
new一个对象是放到堆上那么你new一个线程呢,放到哪里? 不知道
问了堆的划分,问了GC Eden区的时候对象会怎么办
问了Java虚拟机初始化的参数,我不知道说了有关年轻代的几个参数
如果老年代满了怎么办,我不清楚说了好像是有个full gc可以操作一下
说一下项目的登录注册功能,说一下如何保持你的登录态
你说了你做性能优化,为什么要做性能优化
说一下你项目中出现的异常
数据库挂掉了是怎么表现的,比方说什么日志? 哎都给提醒了我也不知道了,就说了你网页请求访问是没有响应的,功能都没了
最近看了哪几本书,你怎么学习
比方说你碰到了Redis的一个问题,谷歌不到,认识的人也不会,你怎么办? 我说去官网找客服,谁都可以不会但是开发的人员不能不回会
有没有看过一些开源的源码?一开始尬住了,最近是没怎么看源码,面试官很好问了我又没有看过jdk的,我说了看了hashmap,courrenthashmap这些数据结构的都看了
问了一下为什么长度达到一定的长度要转化为红黑树
有什么问题?问了部门业务,说接下来有段空档期想给点建议好继续学习,说了学习微服务,redis继续深入的了解。
二面:
先自我介绍一下
问了实习的东西,觉得最难的最有挑战性的点在哪
kafka的重复消费? 没说好
问了一下项目,登陆注册功能实现
问了生成验证码的实现
设计一个怎么使得验证码有效期,过了一段时间就过期了。
问了线程和进程的区别。
ArrayList的底层原理?怎么扩容?
数组,1.5倍扩充
线程池的概念,好处在哪
多进程和多线程的区别?
这些问题是最常见,感觉基本上也就会问这些。
OIS参考模型,每一层涉及到了哪些协议,每一层负责了什么?
TCP的特点是什么?什么是窗口滑动协议,什么是快速重传,什么是拥塞避免,什么是慢启动?怎么做到可靠数据传输?
TCP的流量控制是什么?如果RcvWindow=0应该怎么办?
有哪几种定时器?作用分别是什么?
TCP和UDP的区别?什么场景使用TCP,什么场景什么UDP?哪些应用层协议使用了TCP,哪些使用了UDP?UDP要实现可靠数据传输应该怎么做?
TCP的三次握手和四次挥手?为什么是三次,为什么是四次?为什么TCP采用随机初始序列号?客户端和服务器最多能发送和接收多少TCP连接数?(最后一个问的较少)
如果TCP连接的时候服务器发送的最后一个报文时,客户端挂了会怎样?那如果服务器宕机了,客户端怎么处理?
TIME_WAIT 和 CLOSE_WAIT 状态?TIME_WAIT 为什么需要保持 2MSL 这么长的时间?大量TIME_WAIT造成的影响?如何尽量处理 TIMEWAIT 过多?
TCP粘包(问的较少, 偏C++)
影响TCP 网络时延的因素
当你输入域名访问一个网站的时候,背后的过程是什么涉及到哪些协议?
什么是https协议?https协议用到了哪种密钥?
什么是有状态什么是无状态?
HTTP的八种请求?GET和POST的区别?
HTTP的一些常见的状态码要熟悉!重定向和转发的区别?
HTTP和HTTPS的区别?HTTP1.0和HTTP1.1的区别?
HTTPS的工作流程?
Cookie,Session,Token的区别
SSL加密的过程?延伸出对称加密和非对称加密的过程和区别
DNS协议!域名解析过程,递归查询和迭代查询的区别?
Ping命令的过程和ARP协议(这个做了解就好了)
这个是我比较惨的,但是一般问的不深。
进程和线程的区别是什么?进程和线程占有的资源是哪些?
操作系统创建进程的过程?进程的状态和控制原语?Java的Runnable对应着哪些操作系统状态?还有哪些控制函数像sleep,notify这些改成成什么状态了?
进程间通信!为什么需要进程间通信?线程通信?
进程同步和进程互斥。实现临界区互斥的基本方法?
如何正确的停止一个线程!
中断和异常
进程隔离,虚拟内存,虚拟地址空间
多线程、多进程的区别及适用场景
什么是缓存?有哪些缓存的更新算法?
用过的Linux命令,常用:看被占用的端口的进程;查看一个进程的端口号;显示CPU的信息 ,查看CPU使用率;查看所有进程;查看进程的详细信息;查看内存使用情况等等
僵尸进程,孤儿进程以及守护进程?怎么创建一个守护线程?僵尸进程危害以及避免僵尸进程的方式!
进程调度算法以及死锁!产生死锁原因;产生死锁的条件;处理死锁的几种条件;银行家算法
操作系统的特征(这个最基本,但是一次面试我不知道)
这块我也不是很熟悉,只知道一些基本的,最后的两个选看我觉得,会更好,但是千万不能看了一点就说会,不然会给自己埋大坑。
数据库的事务,事物的特性,事务的隔离级别分别解决了哪些问题,理解什么是脏读,幻读! 事务的实现原理通过什么要保证的事务的特性?
什么是左连接,什么是右连接,什么是全连接,什么是内连接?
数据库的索引有什么作用?用什么来实现的?好处坏处是啥?
索引的种类,原理,索引存了哪些内容,什么时候索引会失效?唯一索引和主键索引的区别!单列和联合索引,最左匹配原则,什么时候该用联合索引?
怎么看这个表是否加了索引?
B树和B+树有什么区别?为什么索引不用B树?那B+树的叶子结点上存了哪些信息?
数据库的锁?乐观锁悲观锁,共享锁和排它锁。
MySql中主要使用的引擎,它们主要的区别是啥。
数据库范式
数据库五大约束?
数据库连接池:工作原理,参数,种类,会出现的问题
数据库的读写分离,数据切分(数据库分库分表,水平切分垂直切分啊)
数据库的主从:实现原理,mysql主从复制的方式,如何配置主从同步,主从同步会出现的问题
Java知识要准备的太多了,很多细节,我就捡着说一些都是我自己汇总的一些
Java 基础
Java和c++的区别(第一次被问我说的很糟),Java为什么跨平台?
Java语言的特点和特性(第一次我也回答的很糟),多态的底层原理?
抽象类和接口的区别?抽象类与普通类的区别?
Java访问修饰符有哪些?
this关键字和super关键字?
Object类下面的方法,尤其是hashCode方法和equals方法?
== 和 equals 的区别是什么?若对一个类不重写,它的equals()方法是如何比较的?int 和Integer的比较!
Java基本的数据类型?
String为什么不可变?好处在哪?String 常量池?String, Stringbuffer, StringBuilder 的区别。
static关键字(第一次问我忘了都不知道)和final关键字
ArrayList 和 LinkedList 区别?三种方式访问集合中的元素,ArrayList遍历删除会出的问题?Foreach原理以及Fail-fast机制!
Java泛型
Java反射:反射的好处;得到class的方式;反射的原理
Throwable、error、exception的区别?异常的种类!
Java创建线程的四种方式?线程实现callable接口和runnable接口的区别?线程中start和run的区别?
sleep(),wait(),yield()和join()方法?sleep()与wait()的区别?
Java是值传递还是引用传递
Java的null类型?java创建对象时,new 出一个对象 和 = null的区别?空串与null串?
Java中创建对象的5种方式?
为什么会出现 4.0-3.6=0.40000001 这种现象?
HashMap,HashTable,CourrentHashMap:
HashMap的底层实现,put,get过程;
如何解决Hash碰撞的;(延伸出Hash冲突的几种解决方法)
HashMap的初始化容量为什么为2的次幂?
为什么HashMap是非线程安全的?
HashMap和HashTable的区别?
为什么HashMap长度大于8才转换为红黑树,而不是6?
HashMap和TreeMap比较?
HashMap,HashTable,CourrentHashMap的key和value是否可为null?那为什么这么设计?
CourrentHashMap为什么是线程安全的?(引出Java线程安全,Volatile关键字,CAS这些)
并发编程的的三个概念(特性)?为什么会有Volatile关键字?volatile关键字的两层语义!!Volatile底层原理!!
什么是线程安全?产生线程不安全的原因是什么?Java线程安全的类?
Java线程安全的类:公平锁/非公平锁;可重入锁;独享锁/共享锁;乐观锁/悲观锁;自旋锁等等
synchronized关键字:三种应用方式;为什么能实现实现内存可见性;底层原理是啥?
ReentrantLock关键字:实现原理;CAS原理以及CSA的问题
synchronized和ReentrantLock的异同以及Synchronized修饰静态方法和成员方法的区别?
线程池:
线程池的好处?
基本组成部分?
Java中的ThreadPoolExecutor类!线程池涉及到的参数!
线程池的状态?
线程池任务执行流程!!
任务缓存队列及排队策略,如何自定义拒绝策略?
线程池的种类?
配置线程池大小,根据CPU密集和IO密集划分
阻塞队列以及生产者消费者的实现
内存泄漏和内存溢出,常见的内存泄露(介绍一下HashMap泄露的场景),避免内存泄漏的几点建议?如何定位找到内存泄漏!!
ThreadLocal介绍,实现原理!!ThreadLocal是如何做到为每一个线程维护变量的副本的呢?ThreadLocal和同步机制的区别。
设计模式的单例和工厂是面得最多的!单例的几种实现方式,一般写典型的双重检查锁定,因为会延伸出volatile,线程安全这些。
然后就是饿汉式,线程安全为什么不用这个方式呢,简单又线程安全?然后是抽象工厂模式和工厂方法模式区别?JDK或者Spring当中哪里用了设计模式?
JVM:
Java内存模型?JVM内存结构?内存模型和内存结构的联系?Java对象结构?
JAVA虚拟机内存划分?每个区域分别装着哪些东西
为什么要划分?
堆的划分,为什么要设置两个Survivor区?新生代 Survivor 空间不足怎么办?年轻代的几个参数?
一个对象从创建到销毁都是怎么在这些部分里存活和转移的?
Java中new对象干的几件事?
Java四种引用状态?
类加载的过程?类加载基于的机制?为什么要双亲委派?为什么需要破坏双亲委派?自己写个String能加载吗?类初始化时机?
对象的创建的过程?
GC算法与垃圾回收!为什么需要垃圾回收以及什么时候GC?GC涉及到的内存部分?对象存活判断的几种方式?
说一下你了解的几个垃圾收集器
JVM初始化步骤
JVM调优(这个比较少)
Java 虚拟机栈会出现的两种异常?
Redis:
Redis是什么,用在哪?Redis 的缺点?
Redis是单线程的为什么速度那么快?那它为什么弄成了单线程的?(这个背一下网上的答案是不够的的,我在面阿里三面的时候就被问了,答案的话我也只知道网上的,还需要自己去思考)
Redis和memcache有什么区别?Redis和MySql的区别?
Redis 支持的数据类型有哪些?用在什么场景?它的底层数据结构是啥?Zset底层为什么要用两个数据结构?
Redis的并发竞争问题如何解决?
Redis的缓存穿透,缓存雪崩,缓存击穿?怎么解决?
怎么保证缓存和数据库数据的一致性?
Redis有哪些数据淘汰策略
Redis持久化方式!!
Redis集群!集群是如何判断是否有某个节点挂掉?集群进入fail状态的必要条件?
Redis哨兵
Redis主从复制和一致性保证!
Redis热key问题
Spring:
这一块问的比较少其实,但是IOC和AOP问的很多
SpringBoot的启动和运行原
IOC和AOP原理?
Spring生成代理对象
BeanFactory 和 FactoryBean 的区别
Spring各个注解的作用?注解的原理?
哪些bean会被扫描?Bean的生命周期!!
Spring 实例化 Bean 的过程。
Spring 直接注入和直接new一个对象有什么不同?
Spring事务管理:事务原理?事务管理接口?实现方式!
Spring解决对象相互依赖
Kafka:
优点和缺点?和传统的MQ对比有什么区别?
为什么 Kafka 吞吐量高
一些概念像broker,topic,partition这些
partition 删除策略
写入可靠性保障(分布式一致性问题)
两种消费模式
kafka消费者消费消息的流程
kafka 如何保证消息有序
消息丢失场景:如何防止数据丢失,消息重复解决方案
主节点选择方案
个人不同项目会问的:(高并发)
如何解决超卖少卖?
你自己重新设计一下,一个高并发,你要怎么应对
单用户订单存Hash,那一个用户下了很多单怎么办?
减库存然后下订单,但是服务器宕机?
负载均衡实现方式,策略?
限流主要的算法?令牌桶算法的缺点在哪?(导致不公平性)