发布时间:2023-09-11 14:30
适当夸夸面试官(或所在公司)不会有坏处
如果某个问题完全不会(或稍微懂点),直接承认(或略作回答)并把话题引导向类似话题(redis集群的槽机制 -> 一致性哈希)
第二条如果完全不会,可以在表达自己不会之后给与面试官一点反问,表现出自己的求知欲与关注度
所有话题都可以适当性的发散,不要太发散以免显得有备而来
所有问题(熟悉或不熟悉)的回答不要太快,给面试官反应与打断的时间,同时方便自己梳理逻辑,显得沉稳;回答太快容易显得有备而来
一定要乐观向上(至少摄像头下的你看起来得是这样)
80%面试官的80%的问题来自于简历的自写技术栈及第一个项目,这一条真的非常重要
入职阿里40w+(整理)
入职腾讯35w+(整理)
1、为什么MySQL索引更适合B+树而不是二叉树、B树
https://blog.csdn.net/qq_38038480/article/details/81738079
2、微服务下的用户登录权限校验解决方案
https://www.cnblogs.com/zxfei/p/11716822.html
3、微服务之熔断、降级、限流 熔断是在客户端还是服务端?
https://blog.csdn.net/aa1215018028/article/details/81700796
4、kafka如何保证消息不丢失?Kafka Rebalance机制
保证消息不丢失:https://www.jianshu.com/p/68c173e4c549
Rebalance机制:https://www.cnblogs.com/yoke/p/11405397.html
5、redis集群模式下key的寻址
https://blog.csdn.net/chang384915878/article/details/86749209
6、算法题:给定一组非负整数,重新排列它们的顺序使之组成一个最大的整数。
输入: [10, 2]
输出: 210
输入: [3,30,34,5,9]
输出: 9534330
输入:[5, 60, 2, 80, 342]
输出:865432200
输入是数组,输出是字符串。
1、什么是幂等,Get和Post的区别
2、Https实现方式 能用私钥加密公钥解密吗
3、希尔排序是什么
4、解释一下【宁用组合,不用继承】
5、List list;可以这样定义吗?为什么?解释一下泛型擦除?为什么java必须强制?(因为别的语言有泛型,java没有,运行时擦除,所以在编译前强制)
6、什么是STW,stop the world,为什么用
7、我能在一个有序链表来进行二分查找么?(不能,没有索引)
8、COW ,copy on write是什么
9、CSRF攻击是什么
10、DMA是什么
11、CPU负载过高怎么处理
12、还有别的 服务器指标吗
13、经常触发FullGC怎么排查处理
14、CPU过高怎么排查处理
15、令牌桶是什么
16、反爬虫怎么做(一开始说的mq削峰,但是如果大流量都到不了mq层,在网关/nginx做)
17、解释一下【数据存取在内存用平衡二叉树(avl,红黑树),在硬盘用b树b+树】
18、解释一下BIO、NIO
19、解释一下多路复用,多路复用需要CPU参与吗
20、为什么Eden与s0s1比例为8:1:1
21、ABA问题怎么解决
22、为什么不用Mysql的缓存而用redis的
23、HashMap1.7 1.8区别,为什么
24、你觉得哪门数学对你的工作有帮助?为什么?(高数,积分可以求时间空间复杂度,线代,数据库连表查询就是矩阵相乘-笛卡尔积)
25、CPU负载跟使用率的区别
26、第一第二第三范式,为什么生产环境不用外键
1、主要方向是什么(Spring+java为核心,微服务架构和redis等)
2、为什么ZK可以作为注册中心?ZK都有什么用?树状结构有什么用?(数据隔离)
3、redis的数据结构为了性能做了哪些优化?(list,zset没有锁不需要竞争,String是simple)
4、redis的map扩容原理?
5、redis过期数据清除原理?
6、用的主从还是cluster?(cluster)原理是什么?如何保证多节点数据一致性?
7、你们项目中用的什么收集器?(G1)为什么性能好?(描述收集过程,可以并行)
8、Synchronized与volatile区别?锁升级原理?(展开聊,核心是根据并发的数量进行升级)
9、负载均衡有哪些?(服务端负载nginx 客户端负载ribbon,,,轮询、最少连接、一致性哈希)
10、为什么用mongo
11、spring-cache有什么用?(集成redis,简单,可以替换底层为guava)
12、算法题,三个线程顺序打印1-10(sync对全局唯一的递增量进行加锁保证顺序)
13、为什么想换工作?
1、讲当前组的业务(人财物)
2、梳理业务线,描述当前项目的设计过程,业务流程,相对于之前有什么变化和好处(有具体数值体现最好)
3、项目中为什么用这些组件?技术选型过程?你做了什么?
4、如果是别的部门选型会怎么选?看重什么?
5、项目中遇到哪些挑战?
1、不要拿被问的问题反复重复。。。
2、一定要主动说
1、讲讲项目
负责为用户还各种费用并且消解债务的系统
SpringBoot 和Jetty有什么区别?
2、IO模型
nio中的惊群现象是什么怎么解决?
3、Redis的主从同步、Zookeeper的主从同步
redis实现分布式锁使用的命令?
set key value [ex|px] seconds|milliseconds [NX|XX]
ex和px都是设置过期时间,如果是ex使用秒为单位,如果是milliseconds使用毫秒为单位
NX和XX是设置策略,NX表示没有的时候我设置,XX表示存在我才设置
set不成功返回null,set成功返回ok
还可以使用lua脚本来实现,redis.call(\"参数名称\",args)
解决redis释放锁的各种问题(但是换来的性能不好):使用Redssion框架
两者使用对比:
ZAB协议:
CAP定理:
BASE理论
集群模式有哪几种?分别都怎么实现的?
raft协议听过吗?
4、业务场景设计题:被调方单机最多只能够提供1w的qps,如果调用方突然暴涨到2w的qps,这种情况怎么解决?
fail-over:
如果允许任务延迟执行,可以放到消息队列中去,然后慢慢的消费,或者快速抛出处理中异常,上游去补单+幂等重试。
如果就是要实时交付,在接口调用开始做一个限流,超过了最大限制使用异常通知。这时候需要注意控制连接数,不能够过大,否则会导致大量超时,不能够实时反馈。
5、volatile如何实现的?
redisson如何保证watch机制准确关闭?
6、和我讲讲MySQL分页查询如何去做?如果不使用id去实现为什么慢?
主要从回表的方面回答。
数据平滑迁移方案?
需要开发的工具:迁移工具、数据对比工具
1、开启双写(insert),双update操作,其中update新库返回0(影响条数为0表示新库没有数据)记录到日志中去,日志格式为库名、表名、数据id。
2、迁移工具开始先将老库的最后一条数据的id记录到文件中
3、开始迁移比<=记录id的所有记录到库中,然后将update日志中的记录都读取重新update一次
4、开启比对工具,不断的比较,将不一致的数据打印错误日志。
5、反复校验数据,直到数据都一致。
6、这时候可以代码上线了。
快手发红包场景设计
1、数组的大小如何计算
数组对象本身的大小和它自身的长度是有关系的,因为长度越长要存放的引用也就越多
如果是引用类型的数组,计算总空间大小的时候还是要考虑数组中存放的对象的大小的。
2、时间空间复杂度
空间复杂度和字符串的长度有关系
时间复杂度和分割之后的字符个数有关系
3、字符串反转,以单词为单位反转。
实现一个空间复杂度为O(1)的字符串反转。
快手使用的技术栈
涉及的Java相关:常见集合类源码、多线程并发、虚拟机一些特性(如内存分布、垃圾回收)、网络编程(如网络io等等)
数据存储:redis、mysql
消息队列:kafka、rocketmq
计算机网络:http协议、tcp/ip协议(常见的一些参数和调优)
还有就是zk、主从同步、还有一些解决分布式问题的方案
比如想CAP定理、AKF拆分
kafka相关
kafka一般用在业务需要解除耦合的场景,比如我们现在做的打款流程,发送金币
kafka消费者一般用于两个系统的解除耦合的操作,比如我们给用户发钱,不会同步的给一个一个用户发钱,而是会通过kafka将这个事件发出来,然后开启异步的consumer去做处理,这样一来可以提高机器的处理速度增大吞吐量、二来可以将补偿逻辑写到一起不用再单独的想着去写补偿逻辑了
MySQL相关
mysql一般用于存储可靠数据,比较重要的数据,而且要求数据是关系形的
比如我们会存储一些发邀关系、用户和师傅的关系
mysql的话会存储一些可靠的数据,比如金币、比如应该发放的工资等等
利用mysql去做存储,一般都是利用它有事务的特性
可以比较好的实现原子操作
因为想金币、工资这种比较重要的不能够出现中间状态
需要有一种机制去保证数据的可靠性
但是有时候但系统的数据库可以很方便的实现事务,但是在分布式场景下我们是系统与系统、集群与集群所以要考虑的分布式情况下的事务
分布式事务要考虑的情况就比较多了,这个好像也问得挺多的,你如何去保证多个系统数据之间的一致性??
一般有很多开源的实现方案,什么两阶段提交协议、三阶段提交协议、saga协议等等
绝大部分都是基于CAP定理去考虑的
就是你到底要数据强一致性、还是可用性,等等
如果要数据强一致性,那么可用性是必然下降的
我们一般用的是弱一致性,提高可用性,常见的就是tcc
tcc的原理就是,由一个主调方,由主调方挨个的调用被调方,相当于是try操作,等到所有的被调方都try成功后,再进行commit操作;
如果try成功的话,基本认为被调方请求处理都是成功了
接下来commit必须要成功,所以如果当出现commit出现失败或者处理中的情况下,需要进行不断的补偿
直到都成功,整个请求才算成功;
但是还有可能不是commit请求出现异常,有可能是try请求出现异常
这个业内的实现方式一般也是处理中就不断的补偿、如果一旦有一个被调方请求try失败了,那么会将之前try过的被调方再发起一遍cancel请求去取消刚才try锁定的资源
如果try请求出现处理中那么会进行挂起,并等待补偿继续try,直到得到一个终态,要么成功、要么失败,这就是最终一致性,而不是强一致性
但是应用场景的话,我这一种是真实线上存在的
其实面试的时候会问得比较细,很多细节点如果不是真的做过是感受不到的
老师如果你没有这方面的经验,可以去网上找找开源项目看看吧
刚才的方案只是能够解决分布式的一种方案,但是还是有很多缺陷,缺陷就是调用链路太长锁定的时间太长会造成资源的浪费,并发量不高的情况,可以用这一种方案,但是如果并发特别高的话就不能用了
redis相关
我们好像问redis比较多
redis一般比mysql快百倍的速度,但是一般不是很可靠
我们的业务场景比如会用redis存储用户的消息飘新,如飘小红点、飘数字
还有会存储一些比如需要限制弹窗次数的数值
1、IOC的理解
2、Mysql怎么用乐观锁
3、Synchronized能与wait或lock混用吗
4、Dubbo选择的原因,为什么不考虑gRPC?http2的了解?
5、客户端负载均衡与服务端负载均衡优劣
6、JWT用什么保证一致
7、如何设置线程池的参数
8、@component与@bean的区别
9、@autowried是按类型还是按名称
10、@Resource?
11、对于经典三层的理解
1、详细解释CAP 结合zookeeper
2、详细介绍系统设计,画图解释系统架构,以及拆分过程,为什么要用nacos替换consul,(不应该经常更替组件)
3、为什么总mysql替换mongo(雪花模型,最根本的原因就一个,元数据更容易用mysql表示,因为MongoDB是文档数据库,不容易抽象)
4、100G的数字数组用256M内存怎么排序(答,位图,建议用大数据的方式,分而治之)
5、大数组取最大值?取前三个值?(答,排序取值,建议直接遍历比较取最大值,cas)
6、Vue生命周期
7、描述一下多线程技术的演进(答:1.5前后的lock出现、sync的锁升级,线程池的出现,线程池静态方法的废弃,Thread到runnable到callable,Future)
8、什么是堆排序
9、Mysql与Redis的QPS是多少?如果一个千兆网卡跟Redis呢
1、方向是paas云,提供k8s+docker的开箱即用的产品,所以问的方向大多在这里
2、都有哪些注册中心?区别是什么?为什么会出现zk?zk原理?zk保证了cp还是ap?为什么后来弃用了?zk和nacos的区别?zk底层数据结构?什么算法?具体原理?(znode,paxos,忘记了。。)
3、Hystrix原理?ribbon如何跟其他服务注册中心结合使用?
4、Springcloud都有哪些?
5、Docker是做什么的?有什么优势?
6、讲一下你理解的容器编排
7、算法题,1,十个线程并行计算,最后主线程统一输出结果(countdownlauch+callable+线程池)2.一个数组,只有一个数字出现了一次,其他的都是两次,找出这个数字(位图)
8、多线程同步的方法
1、介绍下项目
2、进程线程区别?什么时候用多进程与多线程?多进程如何通信?
3、百度搜索输入i会有一个下拉列表,如何实现?
4、项目中的难点是什么?
5、为什么用Mysql没用Mongo?
6、为什么不用zk?
7、BOSS三面
8、描述下java(类)启动流程
9、慢sql优化?
1、自我介绍
2、ES的查询怎么进行性能优化?
3、ES写入怎么进行性能优化?
4、ES的深度分页问题?
5、Redis的常用数据结构有哪些?你们项目里面分别用来做什么?
6、Zset的底层数据结构了解吗?Zset是怎么实现的?
7、Redis的缓存过期和淘汰策略了解吗?LRU和LFU具体有什么区别?Redis是怎么实现LRU和LFU的?
8、你们怎么解决Redis缓存和DB数据不一致的问题?延迟双删的原理
9、HashMap源码了解吗?讲讲get和put的过程?HashMap怎么解决Hash冲突?java8的HashMap中为什么要引入红黑树?
10、HashMap是线程安全的吗?ConcurrentHashMap怎么保证线程安全的?
11、MySQL隔离级别?不可重复读和幻读的区别?
12、给了几种情况让MySQL判断索引是不是命中?
13、新建MySQL索引的时候依据什么原则呢?
14、有没有遇到MySQL主从的数据一致性问题,怎么解决的?
15、Jvm垃圾回收算法了解吗?
16、能讲讲CMS和G1收集器的具体原理吗?哪些垃圾收集器是吞吐量优先的?
17、还有什么问题要问我吗?
1、自我介绍
2、介绍下你们的项目?你主要负责哪一块?
3、问我们的业务细节,可能面试官对我们的业务比较感兴趣,这个问的很细,我一直举例子说了好几遍
4、对着我项目中的一个短信切包问题从头问到尾,这一个问题就解释了大概20分钟,项目细节问的很多很细,里面各种是怎么实现的
5、还有什么要问我吗?
1、自我介绍
2、介绍下之前的项目,你自己主要负责哪一块?
3、照着简历问项目细节,连环问了40多分钟
主要解决了什么问题?
怎么实现的?
你做了哪些优化?你是怎么实现的?
为什么不像XXX这么实现呢?
4、你们项目的限流怎么做的?
5、滑动窗口了解吗?
6、MySQL事务的隔离级别?
7、数据倾斜问题了解吗?
8、你们MySQL的架构是什么?大概是什么样的数据量级?
9、你和内推你的同学是什么关系?
10、你目前在这家公司的薪资大概是多少?
11、还有其他问题问我吗?
1、自我介绍
2、最有挑战或者说你觉得最有意义的项目介绍
3、tcp三次握手,有哪些状态?
4、springboot的启动过程说一下?
5、一个含有域名的正常C端请求,在获取响应数据之前,请求的处理链路能描述一下吗?cdn是怎么做网络解析的?
6、rocketmq的rebalance原理?消息怎么保证有序性?
7、redis你经常使用的数据存储结构?zset、string类型的底层实现
8、redis的持久化方式、特点。数据如何同步和恢复?(主下面新加入一个从节点,数据怎么同步? 节点宕机,重启怎么恢复数据)
9、redis的Gossip协议、集群选举方式raft算法、分片方式(客户端编码key分区(提问了什么是一致性hash算法)、codis、cluster)
10、Redis的分布式锁底层实现原理了解吗,怎么确保唯一?(AP模型) 红锁了解不?(面试官这方面挺懂的,后续还引导我理解红锁的思想)
11 、什么是CAP理论?为什么redis采用的是raft,而不是paxoy算法?
12、redis为什么那么快?
13、什么是缓存的击穿和雪崩? 缓存热点key怎么处理?
14、如果说直播时的一个活动场景,发送优惠券(有效期前5分钟要提醒用户,优惠券快过期提醒),该怎么实现? rocketmq的延时消息是怎么实现的?
15、concurrenthashmap了解吗?怎么扩容? 扩容期间能否进行put和查询?说下ConcurrentHashMap,怎么实现size的?
16、volatile关键字的使用及原理
17、threadlocal是否了解?
18、mysql索引结构、mysql为什么采用B+树而不是B树?B+树的时间复杂度、一般树高是多少?
19、mysql事务的隔离级别、MVCC机制原理、如何解决幻读问题?binlog了解吗?
20、JVM的垃圾回收算法、对象什么时候被转移到老年代?
21、编程题:
求一个单词的最大回文子串(滑动窗口)
单向链表逆向按K个一组翻转 12345678 -》87654312 (先把链表整个翻转一次,再按组翻转,最后再把结果链表再翻转一次)
单向链表,偶数点正序、奇数点逆序,合并转换,使得整个链表是升序的。
二叉树Z字形打印
22、系统设计题:
1.长短链接url转换系统设计
2.100个乒乓球,两个人轮流拿。每批次可以随机拿1~5个球,谁拿到最后一批,就算谁赢。我先拿,设计一个方案,保证我一定赢。(答案:我先拿4个,然后两个人一组作为一个批次,保证每批次的和都是6。
15组之后就是94了,接下来该对方去拿。这样可以确保最后我是肯定赢的。--》即需要确保对方最后一次去拿球时,剩余是6个球。)
23、扩展(朋友问到的算法题)
旋转数组,查找元素下标
数组,移动K位 {1,2,3,4,5} ->移动2位 {3,4,5,1,2}。
链表去重 https://leetcode.com/problems/remove-duplicates-from-sorted-list-ii/
单向链表,中间一段做翻转。 比如说12345 -》 14325
实现一个简单的StringBuilder
手写一个简单的hashmap
系统设计题:直播抢发红包方案设计
1、自我介绍
2、最有挑战或者说最有意义的项目介绍、针对你说的相关内容随机提问(讲业务项目的时候,我会延伸一下我们公司项目的一些好的系统模块设计方案、与三方平台交互的限流处理设计等。讲技术项目的话,我会说自己搭建的xxl-job调度平台和源码设计,还有一个自己手写的服务探活应用)
3、CopyOnWriteArrayList的优缺点及常用场景
4、Set集合的底层原理
5、Map有哪些类型?HashMap和LinkedHashMap有什么不同?
6、线程有哪些状态?线程池的原理?怎么实现线程复用?worker线程了解吗?
wait/notify和sleep方法的区别?
volatile关键字的使用及原理
公平锁和非公平锁底层实现区别?
Juc并发包常见工具类是否使用过?底层原理是否了解?
7、zk的选举机制具体说一下?
大型项目,当有很多实例节点部署时,zk做注册中心不太适合,为什么?
zk集群宕机了,dubbo服务还能否正常调用?比如说宕机2小时这种的?
8、guava的本地缓存,缓存回收策略。底层了解吗?类似于guava的本地缓存设计思路,你怎么设计一个LRU缓存?
9、rocketmq消息怎么保证不丢失?当下游的服务消费能力有限时,怎么处理?(增加下游服务实例节点、拉取线程等mq参数设置调整、下游服务RateLimiter自身限流等)
10、cannel是怎么结合mysql实现数据同步的?
11、java的双亲委派加载机制,这样的设计有什么好处?
12、mysql:
mysql的锁。什么时候加记录锁、间隙锁、临键锁? 意向锁设计的意义?
mysql怎么解决幻读?
慢sql优化
有没有遇到过死锁问题、怎么排查和解决?
13、jastack命令有没有用过?jastack查看线程状态主要关注哪些状态?
Cpu使用率高问题怎么排查?哪些问题会导致Cpu使用率高?
14、垃圾回收算法:
你们线程采用的什么垃圾回收策略(PartNew+CMS)?主要关注和设置了哪些参数?
对G1垃圾回收器是否了解?有什么特点?有没有尝试采用G1垃圾回收器对你们的服务进行优化?
FullGc问题的排查和解决经历说一下。
你们线上服务的jvm内存主要参数设置?(我们线上主流服务配置,4核8G虚拟机,新生代3g,老年代2g,eden:g1=6)为什么会那样设置?
15、算法题:
1000张票,3个黄牛,卖票及结果统计问题。每卖100个,票价涨100元。类似这样的多线程问题。
三轮面试(两轮技术一轮人事),每轮自我介绍是必须的,简略个人信息介绍
然后大概讲了下工作经历和工作内容,每段工作经历担任的角色
完成的主要工作,贡献内容,带团队几人,离职原因。
1、MySQL相关问题
- 一条sql执行,在MySQL中的执行流程(考察MySQL架构及各组件作用)
- redolog、undolog、binlog、relaylog作用、写入时机、如何保证断电数据一致
- buffer刷盘策略
- innodb行锁(显式加锁实现)以及产生间隙锁、next-key锁、表锁的原因
- 分库分表(结合mycat讲的)
- 分布式事务问题(分库分表相关,引出不同系统通信的分布式事务问题以及解决方案)
- 索引问题,主要是索引类型和组合索引优化
2、Kafka相关问题
- 架构模型
- 数据一致性问题(producer、broker、consumer是如何保证的)
- 消费模式为什么只有pull
- log文件的写入(工作原理、buffer刷盘相关)
- 索引(稀疏索引、内存映射是怎么回事)
- __consumer_offsets、log、索引文件关系
- 写log和写索引机制(主要为buffer、和内存映射的考察)
- 如何实现高吞吐量的
- ISR、OSR概念和副本在这两者的角色切换,产生的时机
- 消息的批量发送
- 多partition、多consumer的partition分配问题,是如何分配的,数量关系不对应会出现什么问题
- partition的master和副本消息同步原理,HW、LEO是怎样工作的
- 选主问题以及master挂了选主问题,为什么不采用zookeeper的选主策略或借助zookeeper选主
3、rocketmq相关问题
- 架构模型
- producer、namespace、broker、consumer通信关系
- 消息的存储(commitlog、索引)以及与Kafka的区别,buffer的刷盘以及与Kafka异同
- commitlog存储内容、索引存储内容、队列中的内容
- 消息从生产到消费各环节是如何保证消息不丢的(消息的传输、持久化、offset机制)
- 队列的读写分离(Kafka为什么不读写分离),读写队列不对等会有什么问题。
- 读队列和consumer数量不对等队列分配
- 事务消息流程
- 集群下topic消息发送策略
- 消息的消费模式(pull、伪push),消费者组消费模式(Kafka为什么不支持组内广播)
4、spring相关问题
- 事务控制原理,以及调用同类的事务方法失效原因和解决办法
- spring启动流程
- spring boot自动装配原理
- springmvc工作原理、组件、功能
- service异常处理(事务方法异常处理)
- 全局异常处理(controlleradvice)
5、mybatis相关问题
- 架构组成和调用dao方法底层流程(从启动到执行sql)
- 插件原理
6、dubbo相关问题
- 架构设计
- 支持的协议、协议特点
- 流程(服务注册、服务发现、服务消费)
- zookeeper挂了还能否消费服务?
- SPI机制
7、spring cloud各组件
- 由于没有项目实战,只讲了gateway、feign、hystrix、eureka的作用及使用,说自己平时研究用的,没有深问
8、redis相关问题
- 高可用方案
- 分布式锁实现原理
- key设计问题
- 数据分片问题
- 常用操作命令
- 主从切换锁丢失问题
- 整个redis集群挂掉,业务服务应对方案(按redis作用讲)
- 批量命令(mget、mset相关)和不同数据类型如何批量修改值
- 生产禁用命令以及原因,scan、unlink命令考察
- 单线程为什么快、吞吐高
- 跳表
9、Java基础
- 常用设计模式,项目场景举例说明和具体怎样用的(要求详细讲,应该是怕背题糊弄),我主要讲了策略模式(营销策略)、享元模式(配置缓存、营销规则缓存、流水号自增实现中对缓存的使用)、单例模式(讲的静态内部类实现单例)、工厂模式(营销策略对象的生产)在项目中的使用。
- Integer缓存的数值范围(-128~127)问题(integer 127 == 127为true,integer 128 == 128为false)
- voliate关键字作用、原理,引出JMM工作模型
- synchronized关键字用法及锁定范围
- JUC包,主要是各种锁作用和实现(CAS、AQS)和atomic类原理(问到UNSAFE为止)
- HashMap、ConcurrentHashMap
- 线程池种类、用法,自己new线程池的各个参数含义作用
- 线程池工作原理,主要考察核心线程、非核心线程创建时机。拒绝策略执行时机和有哪些策略,执行后会有什么结果
- JVM模型、常用参数
- Xms、Xmn为什么设置成相同大小
- heap内存划分比例,原因,给出一组配置参数,计算Eden、survivor(from、to)、old区大小
- 线上heap持续增长问题排查(引出OOM dump堆内存设置)
- 线上cup飙升如何用命令快速定位线程
- jps、jstat、jstack、jmap命令的使用
- 如何dump堆内存并分析大对象(jmap -dump:format=b,file=dump文件保存路径 PID,使用MAT分析)
- 服务响应慢如何在线快速分析GC(命令:jstat -gc PID 1000 100,然后解读GC日志)
- JVM调优(高吞吐、低停顿怎么调)
- 在线修改JVM参数
10、编码
- 二叉树树高计算
- 二叉树遍历
11、有什么想问的以及闲聊内容
- 问了下公司的技术栈(cloud、dubbo都有用,不同的事业线技术选型不同,看各事业线老大)
- 了解了下公司业务内容以及规模
闲聊
- SC体系和ASC体系应对集群容错、限流、熔断技术实现
- servicemash
- 微服务发展
- 微服务的个人看法,不涉及到具体技术细节了,随意聊了
1、都知道哪些数据结构,collection集合有哪些
2、ConcurrentHashMap 原理
3、SQL怎么优化
4、联合索引最左原则
5、多线程,多个方法改并行执行怎么做,谁执行最快取谁,怎么做
6、Redis数据结构,如果设计一个延时队列用哪种
7、AOP原理,cgLib与jdk动态代理区别
8、事务传播
9、Dubbo都有哪些负载均衡
10、Synchronized与Lock区别
11、CountDownLatch
12、LocalThread
13、FutureTask
14、实现线程的几种方式
15、线程池创建的方式
16、SQL题,查询某天考试所有科目的成绩最高的学生
【
语文 张三 50
语文 李四 50
数学 王五 99
】
1、没有自我介绍,直接屏幕展示开始敲代码问问题...
2、几个题目,sql应该建立几个索引?什么情况下用的到?索引排序?
3、主键索引与唯一索引哪个性能好?为什么?
4、三个线程,主线程的A为100,线程1设置A为200,线程2设置A为300,线程3打印A,问并行的执行情况?
5、如果要只打印第一个执行结束的线程值怎么做?(一开始说的主线程轮询,优化方法是CountDownLatch设置为1,主线程监听)
6、更改代码,线程1、2都会打印A的值,如果是先打印200再打印300,那么3打印出来的是什么?(答,不一定,没有用volatile修饰)
7、介绍下项目,你在项目中是什么角色?负责什么模块?
8、拆库了吗?为什么(没有,动态库动态表没有引入分布式事务,而且体量够了)
9、为什么没用Feign而是用Dubbo
10、GCRoot有哪些
1、asm(字节码增强相关技术)
2、springboot启动过程
3、kafa的零拷贝机制
4、jvm优化手段
5、阿里jvm监控组件arthas
6、如何远程debug
7、spring容器加载过程 bean的生命周期 spring组件销毁的过程
8、消息堆积和消息延时如何处理
9、网络的七层五层结构
10、es建立索引的原则
11、redis新版功能(多线程 i/o多线程) redis淘汰策略
12、json序列化的方式以及他们之前的区别
13、protobuf有了解吗
14、maven 的scope和 dependency 和dependencyManagent
15、mycat分页原理
16、分库分表之后的查询怎么搞
17、线上故障定位和排查怎么做的
18、mysql中一条sql的执行过程
19、rocketmq的offset是怎么提交的
20、mysql索引的存储结构,mysql为什么不用红黑树作了存储结构
21、dubbo预热
22、某个微服务要调用下游五个微服务如何提高响应时间
23、阿里推荐的新建多线程的方式
1、spring bean的生命周期,作用域,在平时开发中使用spring bean需要注意什么?
2、假设一个类中有a,b两个方法,a中没有事务,b中有事务,a方法中调用b,此时事务是怎样的
3、redis数据类型中的数据结构
4、rocketmq的如何保证消息一致性
1、hashmap中put原理,数组存放的数据是什么样的?扩容说一下?为什么用红黑树?key是否可为空?和concurrenthashmap的区别;hash冲突咋解决?
2、ioc的原理说一下?spring用到哪些设计模式?aop原理
3、线程的状态,线程状态的切换,cas原理,底层实现,和syncronized区别?线程池核心参数,拒绝策略哪些,你们环境中这些参数如何设置
4、jvm内存结构,jvm如何调优,你们设置的多少
5、mysql索引结构,mysql调优,最左匹配原则,a,b,c的一些索引失效场景
6、redis锁结合使用场景,需要注意什么?假设业务执行时间大于设置的超时时间如何解决;
1、redis雪崩,缓存击穿以及解决方案
2、redis缓存怎么使用的?有用过redis的二级缓存吗,你们使用的哪种高可用部署方式,几个哨兵?假设10g内存,导入20g的数据,会发生什么
3、mysql主从复制过程,binlog和redolog中的一样吗
4、zk的核心概念
5、在你们项目中es用来做什么?脑裂咋解决的?大数据量下的查询优化
6、dubbo的工作过程,如何服务治理的,spi,哪里使用了spi?和jdk的区别?有哪些负载均衡策略以及实现原理
7、网关使用的什么,鉴权如何做的
1、加密:使用过了哪些加密技术,加密后的数据很长,数据库加密字段怎么设置的?后台推送给前端的数据怎么加密的?
2、rocketmq怎么保证消息的顺序性,分布式事务怎么实现的
1、Thread run 和 start方法有什么区别
2、你觉得你在自己的项目,你还可以做哪些优化
3、如果你的业务线越来越多了,你觉得你的代码会有什么问题?
4、如何排查问题,如果用户a和用户b同时使用一个功能,用户b出错了,用户a正常,你从哪些方面排查?
5、有没有印象深刻的bug?怎么解决的?
6、说下常用的数据结构的底层原理
7、线程安全问题怎么解决?
8、你在项目中,Redis是怎么用的?
Redis的运行机制
9、jvm运行机制、怎么调优
10、spring有有用到哪些设计模式
11、ThreadpoolExecutor 几个参数
12、ThreadLocal 底层原理
13、SpringBoot启动机制
14、线程池
15、你知道有哪些设计模式,并说下应用场景
1、jdk1.6升到1.8 还有 tomcat6升到8分别都有什么变化?
2、jdk1.8新特性?
3、为什么要用stream?并发场景使用stream有做压测吗?
4、线程池参数怎么配置?为什么这么配置?做过压测吗?遇到过线程池拒绝的情况吗?怎么处理的?
5、mysql索引类型?
6、需要对索引优化,你会怎么做?
7、explain解释字段含义?
8、项目中如何发现慢sql的?在项目中你是怎么优化的?
9、linux指令?maven指令?git指令?
10、在使用springboot遇到了什么问题?为什么推出springboot,使用springboot的好处?
11、springmvc是怎么解决并发问题的?
12、有经历过jvm调优吗?
Java基础
* 集合类型(Array,Link,HashMap,Set)
* 多线程(线程池:调度,生命周期,ThreadLocal)
* GC
Spring
* Spring IOC AOP是如何做的,原理是什么
* Spring Cloud了解多少(这家公司用的不是scn和sca 所以基本上没怎么问,但是其他公司问了)
* 如果让你实现一个配置中心,该怎么做
数据库
* MySQL内存模型
* MySQL 索引的类别,区别,索引实现原理(B+树的原理,优势),索引优化的方法
* MySQL 事务(什么是事务,用于什么场景,什么情况会死锁,怎么避免)
* MySQL 日志,UnDo和ReDo 是做什么的
* MVCC是什么,怎么实现的
* MySQL集群架构怎么做?如果让你设计一个集群架构的服务拆分,数据库部分应该怎么设计
Redis
* Redis 用来做什么
* Redis 线程模型
* 缓存穿透、击穿、雪崩是什么,怎么解决
* Redis 持久化机制,RDB和AOF有什么不同,怎么实现的,项目中怎么用
* Redis 集群架构有几种,怎么做的
* Redis与数据库一致性怎么做
* Redis内存淘汰规则有几种(引申手写一个LRU算法)
Kafka
* 消息组件一般解决什么问题
* Kafka 的消费流程
* Kafka 持久化怎么做的
* Kafka 与RabbitMQ区别,分别在什么场景下使用
Zookeeper
* ZK如何进行选举
* ZK如何保证一致性,协议内容及实现原理
* ZK的集群模式,对节点数有什么要求
* ZK 崩溃恢复怎么实现
算法,一般1~2道算法题,这部分得靠刷题
* 设计一个LRU算法
* 两个有序集合找第K大的值
* 一个无序数组,找第K大的值
1、介绍一下限流的那个令牌桶是什么
2、dubbo的用法,原理
3、做了哪些模块 怎么做的
4、RocketMQ 怎么用的 为什么用
5、sqlServer知道吗 一个表两个字段 一个表三个字段 合并起来有多少个字段
6、表连接有哪几种方式
7、mysql事务是什么
8、会哪几种设计模式 最擅长哪个 为什么要单例 spring 用了哪些?
9、会写前端吗 vue 用的怎么样
1、讲一下你最近这个项目是做了哪一块的,是怎么实现的?
2、你的分布式事务用的是哪一个?
3、用mq解决分布式事务的原理实现是什么样的,底层是什么样的?
4、你们的这种方式和其他的比如TCC有什么区别
5、JDK1.8有什么新特性?工作中有用到么?
6、有没有处理过高并发?是怎么解决的?怎么保证第一个人能抢到商品
7、你的商城有没有聊天室,在线咨询怎么解决?
8、消息推送是怎么实现的?
9、支付这块有没有做过,微信呢?
10、加班的看法,期望薪资
机试:下午2点机试,早上10点的时候hr发了2份word,大概60页的题库
题目是50道不定项选择,要求正确率80%+
1、自我介绍
2、对外包公司怎么看
3、介绍下第二个项目,内部有哪些组成,分别是干什么的
4、讲一下你们的API网关,怎么实现的?
5、说一下Guava ,是什么,用了什么功能?
6、对代码风格,代码规范的认识?对用Java写过程代码是怎么看?
7、如果让你去完整设计一个项目,有什么思路?对软件工程的理解?
8、设计模式知道哪些?展开说一下
1、自我介绍
2、介绍最近一个项目或者比较熟悉的一个项目
3、权限管理是怎么做的,表是怎么设计的?
4、数据表怎么建表,是用工具还是直接create一张表?表是怎么设计的?
5、项目的数据库用的什么
6、左连接和内连接的区别
7、MD5摘要算法是什么,对加密算法熟悉么? 对称加密,非对称加密分别有哪些算法,应用场景?两者有什么不同
8、Redis中存哪些信息?
9、RocketMQ的重复消费问题讲一下?你们的MQ应用场景有哪些
10、sql语句里面的分组,用到的具体函数?having讲一下应用场景,举一个具体的例子
11、服务器部署,运维谁负责?架构是谁搭的?
12、平常的工作是什么?
13、linux命令,在文件中查找一些关键字?
14、前端技术什么水平,vue,h5这方面?
15、设计模式中的策略模式你了解么?讲一下代理模式,有哪几种?
16、说一下数据结构中的栈和堆,对他们有什么认识?
17、为什么来深圳
18、说说常用的Spring注解
19、开发过程中遇到过什么比较难的问题?怎么解决的
20、技术方面哪一块最熟悉?
1、SpringBoot启动过程
2、SpringBoot加载指定位置JAR包
3、SpringBoot tomcat启动过程
4、Sentinel降级后恢复原理
5、时间滑动窗口限流原理
6、线程池核心线程数设置的多少
7、你知道Java中有哪些锁
8、Lock实现原理
9、非公平锁与公平锁实现区别
10、死锁
11、数据库死锁
12、MySql在RR隔离级别下什么时候会发生幻读
13、QPS,TPS,吞吐量
14、Oauth2四种模式
15、dubbo与fegin的比较
16、分布式锁
17、单例为什么要双重检查锁
18、DDD与MVC的区别
19、多表联合查询与业务层里面进行逻辑拼接的优劣
1、为什么选择分布式微服务而不是单体集群
2、为什么使用SpringCloud
3、选择SpringCloud后有没有后悔使用了哪些组件
4、假设某市举行选美大赛,候选人有100位,该市有800万人口,根据往年经验,约有30%~40%的人参与投票,每人只能投一票,投票时间为24小时,这个系统你怎么设计
5、假设投票高峰期在投票开始的前15-20分钟,这个时候你怎么设计
6、假设选美大赛升级为全球活动,会有60亿人参与,此时系统需要怎么设计
1、HashMap插入的过程
2、HashMap为什么使用尾插法
3、Hash冲突有什么解决方式
4、JVM内存布局
5、常量池在JVM哪里
6、volatile实现原理
7、你用过什么设计模式
8、你用到哪些设计思想
1、dubbo服务注册过程
2、Spring bean
3、SpringBoot自动装配
4、nacos与zookeeper的区别
5、JVM内存布局
6、类加载机制
7、JVM调优
8、读写锁实现
9、分布式锁
1、写SQL语句分析索引
2、使用SQL语句实现指定的功能
3、Redis底层数据结构
4、RabbitMq事务
5、MVVC底层数据结构
6、一致性hash
7、JVM内存结构
8、JVM调优
1、JVM调优
2、JVM排查问题
3、synchronized
4、Lock
5、AQS其他实现
6、并发容器
7、CurrentHashMap实现
8、创建线程
9、线程池构造器参数
10、ThreadLocal
11、双亲委派机制
12、Spring FactoryBean
13、innodb聚簇非聚簇索引
14、MVVC底层实现
15、数据库死锁
16、Redis底层数据结构
17、Redis持久化
18、Linux awk与grep命令
1、自我介绍 聊各种过去经历
2、mysql索引数据结构 MVVC
3、volatile
4、阐述一个对象在JVM中完整的生命周期
5、线程池的各个参数 队列有哪几种 各个参数什么含义
6、Mybatis源码
1、据说面架构设计 场景 架构合理性 考虑并发及需求对接合理性
2、考虑讲项目的时候顺带带出别的系统 讲述问题的解决 如何解决的
1、倒排索引
2、讲讲redis里面的哈希表?
3、happen-before的规则?
4、volatile修饰符,synchronize锁
5、java单例模式的实现,懒汉、饿汉?
6、进程与线程的区别,多进程和多线程的区别?
7、HashMap原理,为什么用红黑树,红黑树的特点?
8、快排时间空间复杂度,最好最坏的情况,优化方案?
9、TCP的拥塞控制,具体过程是怎么样的?UDP有拥塞控制吗?如何解决?
10、讲讲了解的垃圾回收算法和回收器,什么时候执行STOP THE WORLD?
11、了解Go语言吗?
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 + 最小堆)
最新面试题整理合集( 提取码:5555)
Spring Security 实现数据库登陆判断以及主界面获取用户名
TensorFlow深度学习应用开发实战(深度学习简介和开发环境搭建)
读论文《Learning to Measure Changes: Fully Convolutional Siamese Metric Networks for Scene Change Detec》
[开发杂谈记录] Windows CMD使用socket代理
开源大数据调度系统Taier技术公开课——Taier数据开发介绍
vue/react使用JSDoc、jsconfig.json 完成vscode对于webpack的alias引入的js方法的提示