来到北京带孩子看病一年最后也没看好,一地鸡毛,撤了撤了,回杭州过日子了,所以最近在看杭州的机会,因为北京的薪资待遇是比杭州高的,所以回去为了不降薪只能往更高的级别上面了,以下是自己近一个多月来面试是十几家的面试记录,老规矩先写为敬,但是大家要注意了:
以下为p7+以上面试题,工作年限未满3-5年或者Java级别未到p7及以上的不建议继续阅读!
魔点(钉钉人脸考勤机)2022.7.14 20:00 研发效能(私有化项目怎么不重复开发)
用户服务中心是怎么设计的,要考虑哪些设计
灰度通过什么东西实现的,cookie被禁用怎么办
介绍一下个性化项目拿到的结果系统QPS 多少50-500(1000万pv)
分别介绍一下springclould和kafka分别是什么东西
腾讯springclould刚开源吗?是,Spring Cloud Tencent于2022年 6 月 14 日正式对外开源,主要是结合北极星提供了一整套的k8s解决方案,感兴趣的同学可以去看看Github
springclould能集成Dubbo吗?可以
使用Spring Cloud Alibaba中的Nacos来作为服务注册中心,并且在此之下可以如传统的Spring Cloud应用一样地使用Ribbon或Feign来实现服务消费
说一下Fegin,超时时间怎么设置,负载均衡怎么实现
Fegin,Ribbon,Hystrix超时时间执行顺序(包裹关系,调度逻辑),如果都设置了的话实际以哪个为准
如果hystrix.command.default.execution.timeout.enabled为true,则会有两个执行方法超时的配置,一个就是ribbon的ReadTimeout,一个就是熔断器hystrix的timeoutInMilliseconds, 此时谁的值小谁生效
如果hystrix.command.default.execution.timeout.enabled为false,则熔断器不进行超时熔断,而是根据ribbon的ReadTimeout抛出的异常而熔断,也就是取决于ribbon
ribbon的ConnectTimeout,配置的是请求服务的超时时间,除非服务找不到,或者网络原因,这个时间才会生效
ribbon还有MaxAutoRetries是单个实例的重试次数,MaxAutoRetriesNextServer对切换实例的次数(是切换次数,不是重试次数), 如果ribbon的ReadTimeout超时,或者ConnectTimeout连接超时,会进行重试操作
由于ribbon的重试机制,通常熔断的超时时间需要配置的比ReadTimeout长,ReadTimeout比ConnectTimeout长,否则还未重试,就熔断了
为了确保重试机制的正常运作,理论上(以实际情况为准)建议hystrix的超时时间为:(1 + MaxAutoRetries)*(1+ MaxAutoRetriesNextServer) * ReadTimeout.
用kafka做了些什么,它的优点(精巧)有哪些,怎么做到速度快,做了哪些优化:https://www.jianshu.com/p/8b00d7167b46,
它保证最少消费一次还是最多消费一次:https://www.cnblogs.com/yn-huang/p/11684688.html
通常来讲,kafka可以做到至少消费一次,但是可能会出现多次消费
也可以做到做多消费一次,但是可能会出现数据丢失。
刚好消费一次,必须在至少消费一次基础上,对幂等性进行判断,同时还需手动维护偏移量。主要是利用数据库的唯一主键以及保存相应偏移量做到的。其中最重要的是有rebalance方法需要重写监听器。
这种方案适合用于集群消费,属于比较成熟的生产运用方案。
它的offset存在哪里(Kafka把对offset的保存放在了一个topic里面:https://www.cnblogs.com/chaiyu2002/p/12045087.html),
它和RecketMQ在服务器存储上有什么区别:https://zhuanlan.zhihu.com/p/163759210,
kafka怎么实现ISR(副本复制,高可用保证机制)https://zhuanlan.zhihu.com/p/528619168
每个 Leader 会动态维护一个 ISR 列表,该列表里存储的是和 Leader 基本同步的 Follower。如果有 Follower 由于网络、GC 等原因而没有向 Leader 发起拉取数据请求,此时 Follower 相对于 Leader 是不同步的,则会被踢出ISR列表。所以说,ISR 列表中的 Follower 都是跟得上 Leader 的副本
当宕机后会从所有副本中顺序查找,如果查找到的副本在 ISR 列表中,则当选为 Leader。另外还要保证前任 Leader 已经是退位状态了,否则会出现脑裂情况(有两个 Leader)。怎么保证?Kafka 通过设置了一个 controller 来保证只有一个 Leader
某一个toicp副本全挂掉了是不是就不可用了
Redis名称的由来,全名是什么https://blog.csdn.net/weixin_39503283/article/details/125637081
Redis全称 - Remote Dictionary Server(远程字典服务器)
Redis数据结构:
string(字符串)
list(列表)
hash(字典)
set(集合)
zset(有序集合)
Zset数据结构:
zset(有序集合)是Redis中最常问的数据结构。它类似于Java语言中的SortedSet和HashMap的结合体,它一方面通过set来保证内部value值的唯一性,另一方面通过value的score(权重)来进行排序。这个排序的功能是通过Skip List(跳跃列表)来实现的。
跳表全称叫做跳跃表,简称跳表。跳表是一个随机化的数据结构,实质就是一种可以进行二分查找的有序链表。跳表在原有的有序链表上面增加了多级索引,通过索引来实现快速查找。跳表不仅能提高搜索性能,同时也可以提高插入和删除操作的性能。
Redis可以用来做什么?做分布式锁会有什么问题https://zhuanlan.zhihu.com/p/413682456
Redis持久化有哪两种(RDB 、AOF),常用怎么设置
加密狗能做什么
怎么防止客户破解使用未购买的功能
接口聚合层怎么做https://zhuanlan.zhihu.com/p/79525360
激活方式是什么
深度科技(互联网票据)2022.7.15 10:00
Kafk的生产消费模型是什么?https://blog.csdn.net/qq_44862918/article/details/124421477
http://www.javashuo.com/article/p-bwprasrr-b.html
分区存在的意义是什么?
分区对于 Kafka 集群的好处是:实现负载均衡。分区对于消费者来说,可以提高并发度,提高效率。若没有分区,一个topic对应的消息集在分布式集群服务组中,就会分布不均匀,即可能导致某台服务器A记录当前topic的消息集很多,若此topic的消息压力很大的情况下,服务器A就可能导致压力很大,吞吐也容易导致瓶颈。
有了分区后,假设一个topic可能分为10个分区,kafka内部会根据一定的算法把10分区尽可能均匀分布到不同的服务器上,比如:A服务器负责topic的分区1,B服务器负责topic的分区2,在此情况下,Producer发消息时若没指定发送到哪个分区的时候,kafka就会根据一定算法上个消息可能分区1,下个消息可能在分区2。当然高级API也能自己实现其分发算法
多消费者之间和topic的关系是什么?https://blog.csdn.net/liaomingwu/article/details/122977564除了Kafka外还了解其他的消息中间件吗?
RecketMQ消费模型,相对于Kafka顺序消费https://blog.csdn.net/weixin_47082274/article/details/106194391,事务消费https://baijiahao.baidu.com/s?id=1705546875648352210&wfr=spider&for=pc
https://www.likecs.com/show-1022520.html
消费模型有两种:广播消费消息模型,集群消费消息模型。
广播消费消息模型,指消费这消费某主题的所有队列的消息,消费组在该消息模型下不起作用,类似JMS的publish/subscribe.
集群消费消息模型,是指同一个消费组的消费者各自消费某一主题的消费队列的消息,比如有一个主题 topicA,该主题有4个队列(创建主题的时候可以指定该主题的队列的数量),有一个消费组testConsumerGroup,该消费组有四个消费者(四个机器或者四个进程),则四个消费者各自消费一个消息队列。
情景回顾:在做RocketMQ的监控时,测试消息的消费情况,发现不同消费组,都会消费掉同一条消息,这和我对当时集群消费模型的理解(即:集群模式,消息队列中的消息只能被消费一次)不符。在查阅资料及代码验证后得出结论:
1. 在Rocket集群消费模式下,(订阅)同一个主题(Topic)下的消息,对于不同的消费组是一种“广播形式”,即每个消费组的都会消费消息。
2. 在Rocket集群消费模式下,(订阅)同一个主题(Topic)下的消息,对于相同的消费组的消费者而言是一种集群模式,即消费者平分消息并消费。
SpringCloudGateway怎么做消息解析?https://baijiahao.baidu.com/s?id=1717126366440376459&wfr=spider&for=pc
我要怎么在网关把请求搂出来,过滤关键字,异步处理
https://www.cnblogs.com/dalianpai/p/12288884.html
mysql索引为什么只支持左匹配而不支持右匹配?二叉树支持右查询么?https://blog.csdn.net/ibigboy/article/details/104571930/
使用netty怎么写一个http-client
https://www.freesion.com/article/6329179461/
https://www.cnblogs.com/xinsheng/p/5546603.html
redis复杂命令有哪些,比如时间复杂度大于log(n)的有哪些?
https://blog.csdn.net/wf_feng/article/details/121526392
k8s上载应用部署时,怎么做存活检测和就绪检测
https://blog.csdn.net/xueqinglalala/article/details/121906019
说说适配器模式,解决的问题
https://blog.csdn.net/Liuxiangming1314/article/details/124605237
命令模式,状态模式和策略模式有什么区别
https://blog.csdn.net/netyeaxi/article/details/88809729
https://www.cnblogs.com/Yunrui-blogs/p/15189860.html
springboot启动过程中引导tomcat启动
https://blog.csdn.net/weixin_43955575/article/details/123413206
Java并发编程包中有哪些我们常用的工具类
我们通常所说的并发包也就是 java.util.concurrent 及其子包,集中了 Java 并发的各种基础工具类,具体主要包括几个方面:
1.提供了比 synchronized 更加高级的各种同步结构,包括 CountDownLatch、CyclicBarrier、Semaphore 等,可以实现更加丰富的多线程操作,比如利用 Semaphore 作为资源控制器,限制同时进行工作的线程数量。
2.各种线程安全的容器,比如最常见的 ConcurrentHashMap、有序的 ConcunrrentSkipListMap,或者通过类似快照机制,实现线程安全的动态数组 CopyOnWriteArrayList 等。
3.各种并发队列实现,如各种 BlockedQueue 实现,比较典型的 ArrayBlockingQueue、 SynchorousQueue 或针对特定场景的 PriorityBlockingQueue 等。
4.强大的 Executor 框架,可以创建各种不同类型的线程池,调度任务运行等,绝大部分情况下,不再需要自己从头实现线程池和任务调度器。
Kafka topic 调优参数有哪些?
https://blog.csdn.net/qq_43692950/article/details/125101044
mysql软件自身的调优参数有哪些?
https://blog.csdn.net/weixin_33586619/article/details/113555982
jvm在Java8启动参数有哪些?
https://blog.csdn.net/weixin_36237278/article/details/114509836
杭州小蜴网络技术有限公司(阿里奢侈品电商)2022.7.18 19:00
之前工作中比较难的或者比较有挑战性的技术点/工作/实现
qps多少,数据量多少,归档表怎么做的,判断分表是基于什么
为什么没有考虑sharding-proxy
https://www.sohu.com/a/389465088_411876
数据分片怎么做的,数据怎么迁移,分表键怎么设置
存量数据和增量数据怎么切换到线上
说一下mysql索引的类型?
b树索引和hash索引在使用过程中有什么区别,hash索引有什么优势?
b+树和b-树区别,为什么用b+树?b+树存储什么结构,最底下叶子结点存储的什么,数据保存在哪里
你用了哪些redis缓存技巧?
缓存使用的注意点?需要考虑什么?
有没有一些不能过期的场景,内存满了怎么办
aof(日志)和rdb(快照)什么区别?有什么优点?怎么选择使用,
恢复备份哪个更快?哪个数据更完整?
ThreadLocal用过吗?使用过程中有什么问题(内存泄露),需要注意什么?
它使用的弱引用还是强引用,为什么?除了及时remove还有注意什么?
gc是怎么判断是否该回收的?
并发cas了解过没有?
乐观锁和悲观锁分别是什么?
讲一下分布式c(一致性)a(高可用)p(分区容错性)的概念,nacos是cp还ap
什么业务要保证cp,什么场景要保证ap,谈谈你的理解
分布式事务怎么用,两阶段提交的流程和三阶段提交的区别,有什么优缺点?
怎么弥补数据不一致的问题
https://blog.csdn.net/leftfist/article/details/123031310
据你所知的分布式事务解决方案?全局唯一ID怎么设计,雪花什么结构
https://blog.csdn.net/JavaShark/article/details/125350886
消息队列用过什么?https://zhuanlan.zhihu.com/p/451672054
kafka为什么速度快?Kafka读盘的时候做了哪些优化?说一下零拷贝
https://www.jianshu.com/p/0af1b4f1e164
Kafka有半事务的概念吗
https://www.jianshu.com/p/e1831c883e54
小远机器人 2022.7.19 17:00
map.get和put做了些什么
int和Integer在MySQL存储上有什么不同
int的最大长度是多少?2的31次方
消息队列的存储机制
spring Mvc
spring Aop
springboot 自己写start
类加载机制
双亲委派模型
jvm内存模型,有哪些垃圾回收算法
sisp协议
https怎么做的,公钥私钥怎么用
个推 2022.7.20 19:00
配置中心怎么同步配置到项目
spring启动流程
消息MQ怎么持久化
吉喵云(东南亚跨境电商-萧山) 2022.7.25 19:30
说说过去开发6年最自豪的事情
jdk源码,map为什么要用链表:
用链表是为了应对哈希冲突这种情况的
用数组不行吗?说说数组扩容的过程
https://www.jb51.net/article/220323.htm
红黑树长度少于多少时转回链表,为什么;
6和8是指:表示若桶中链表元素超过8时,会自动转化成红黑树;若桶中元素小于等于6时,树结构还原成链表形式。
1)原因:
红黑树的平均查找长度是log(n),长度为8,查找长度为log(8)=3,链表的平均查找长度为n/2,当长度为8时,平均查找长度为8/2=4,这才有转换成树的必要;链表长度如果是小于等于6,6/2=3,虽然速度也很快的,但是转化为树结构和生成树的时间并不会太短。
2)选择6和8的原因1:
如果是小于等于6,6/2=3,虽然速度也很快的,但是转化为树结构和生成树的时间并不会太短。
2)选择6和8的原因2:
中间有个差值7可以防止链表和树之间频繁的转换。假设一下,如果设计成链表个数超过8则链表转换成树结构,链表个数小于8则树结构转换成链表,如果一个HashMap不停的插入、删除元素,链表个数在8左右徘徊,就会频繁的发生树转链表、链表转树,效率会很低。
负载因子为什么是0.75 https://blog.csdn.net/m0_64355285/article/details/122343224
https://www.cnblogs.com/theRhyme/p/10609207.html
负载因子是0.75的时候,空间利用率比较高,而且避免了相当多的Hash冲突,使得底层的链表或者是红黑树的高度比较低,提升了空间效率
说一下类加载机制,为什么要用双亲委派模型,什么时候用自定义类加载器,什么时候卸载
https://blog.csdn.net/qq_27706119/article/details/119838302
AQS读写锁怎么分别实现的 https://blog.csdn.net/qq_44377709/article/details/121571109
Sping自动配置是怎么实现的
https://blog.csdn.net/weixin_46394920/article/details/121879443
https://blog.csdn.net/zjcjava/article/details/84028222
FactoryBean(是什么)和BeanFactory区别
https://blog.csdn.net/weixin_46034896/article/details/123813245
BeanFactory是个Factory,也就是IOC容器或对象工厂,FactoryBean是个Bean。在Spring中,所有的Bean都是由BeanFactory(也就是IOC容器)来进行管理的。但对FactoryBean而言,这个Bean不是简单的Bean,而是一个能生产或者修饰对象生成的工厂Bean,它的实现与设计模式中的工厂模式和修饰器模式类似
说说SpringMVC的过程
https://blog.csdn.net/qq_45069944/article/details/122301502
Spring怎么解决循环依赖,为什么二级缓存不行
https://blog.csdn.net/f80407515/article/details/123166627
https://blog.csdn.net/weixin_40701758/article/details/123569043
什么场景下用AOP https://blog.csdn.net/qq_22169603/article/details/106236301
Netty对线程做了哪些优化
https://www.cnblogs.com/luoxn28/p/11875340.html
你有什么问题要问我?
邦盛科技 2022.07.26 19.30
元空间有什么用
多现程怎么用,除了线程池还能怎么创建线程
线程池有几个参数,默认什么拒绝策略,达到最大线程数会怎么样?
双亲委派模型
threadlocal底层是什么数据结构,map的hash碰撞怎么办,hash算法用的哪种 内存溢出怎么办
jvm启动参数
g1(jdk9开始默认)和cms还有之前的区别
对象回收计数默认多少
mybatis缓存,怎么读取xml
aop用到的注解
老年代怎么回收对象
中电金信研究院(自研) 2022.08.01 14.00
单机/docker监控检查是怎么做的
怎么做自动重启
vue用的hash还是hstory模式,hstory模式下/怎么避免接口404
jekis怎么配置prod
vue入口在哪里,加个页面放哪个目录下
probfful协议包含哪些,msg,server和rpc分别什么意思,string=1是什么意思
浙江安厨 2022.08.01 17.00
theadlocal什么数据结构,怎么做的
类加载集制,双亲委派,怎么跳出双亲委派
jvm对象从新生代到老年代的过程
MySQL事物的隔离级别,mvcc和传播级别
如何排查cpu100%
怎么做定位排序
布隆过滤器什么数据结构
Redis的aof怎么重写优化压缩的
缓存击穿,缓存穿透与缓存雪崩
多线程怎么保证线程安全
溪数科技 2022/08/03 18.05
Linux里fock一个子线程什么原理
编码题:组织树怎么递归分组,结束节点是什么
杭州星辰 2022/08/03 19.00
AQS
cms和g1的三原色区别
MySQL的mvcc中rc和c区别
synic怎么锁住的
rocketmq怎么样会丢失数据,怎么避免,
存储和Kafka持久化
布隆过滤器怎么修改一个值
IOC和aop用到Java的哪些原理
springboot自动装载的过程
volta原理
spring事务传播
认养一头牛(二开) 2022/08/05 13.40
dobble底层怎么提供服务,调用者怎么调用服务提供者的接口的
mq是怎么保证不丢失消息的,持久化机制
MySQL数据持久化的过程,redulog和undulog怎么执行的
2022/08/05 15.00
tcp的四次挥手
https://blog.csdn.net/u013328965/article/details/124129387
tcp沾包拆包. 粘包原因
发送的数据包(消息)小于一次tcp报文所能传输的最大值,由于发送速度过快,此时TCP在封装过程中会将多个完整的消息封装成一个TCP数据包;
接收方不及时读取套接字缓冲区数据(应用层缓冲区),这将发生粘包。
主要的原因是数据发送过快,数据堆积导致缓冲区积压多个数据后打包才一次性发送出去(如果客户端每发送一条数据就睡眠一段时间就不会发生粘包)。出现粘包会导致接受端没有办法解析粘包(粘在一块的消息),因为在TCP的首部没有表示数据长度的字段。
- 拆包原因
发送的数据包(消息)超过一次tcp报文所能传输的最大值时,就会将一个数据包拆成多个最大tcp长度的tcp报文分开传输。进行MSS(最大报文长度)大小的TCP分段,当(TCP报文长度-TCP头部长度)>MSS的时候将发生拆包。
MSS:Maximum Segment Size ,TCP提交给IP层最大分段大小,不包含TCP Header和 TCP Option,只包含TCP Payload ,MSS是TCP用来限制application层最大的发送字节数。如果底层物理接口MTU= 1500 byte,则 MSS = 1500- 20(IP Header) -20 (TCP Header) = 1460 byte(一般来说还需要减去12“tcp option” = 1460-12 = 1448),如果application层 有2000 byte发送,需要两个segment才可以完成发送,第一个TCP segment = 1460,第二个TCP segment = 540。 - 解决方案
发送端给每个数据包添加TCP首部时,首部中应该至少包含数据包的长度,这样接收端在接收到数据后,通过读取包首部的长度字段,便知道每一个数据包的实际长度(简单理解就是,应用层下来的报文前面加上一个报文长度字段);
发送端将每个数据包封装为固定长度(不够的可以通过补0填充),这样接收端每次从接收缓冲区中读取固定长度的数据就自然而然的把每个数据包拆分开来;
可以在数据包之间设置边界,如添加特殊符号,这样,接收端通过这个边界就可以将不同的数据包拆分开。
为什么UDP没有粘包?
粘包拆包问题在数据链路层、网络层以及传输层都有可能发生。日常的网络应用开发大都在传输层进行,由于UDP有消息保护边界,不会发生粘包拆包问题,因此粘包拆包问题只发生在TCP协议中。
具体原因是由于UDP发送的时候,没有经过Negal算法优化,不会将多个小包合并一次发送出去。另外,在UDP协议的接收端,采用了链式结构来记录每一个到达的UDP包;
UDP是基于报文发送的,从UDP的帧结构可以看出,在UDP首部采用了16bit来指示UDP数据报文的长度,因此在应用层能很好的将不同的数据报文区分开,从而避免粘包和拆包的问题。
负载均衡高可用keeplive
https://blog.csdn.net/qq_45737042/article/details/119934812
beanfactory和factorybean的区别 https://blog.csdn.net/qq_20161461/article/details/125033055
BeanFactory: 是 IOC 容器,并且提供方法支持外部程序对这些 bean 的访问,在程序启动时 根据传入的参数产生各种类型的 bean,并添加到 IOC容器(实现 BeanFactory 接口的类) 的 singletonObject 属性中。
1、负责生产和管理bean的一个工厂。
2、事IOC容器的核心接口,它的职责包括:实例化、定位、配置应用程序中的对象及建立这些对象的依赖。
3、多种实现:如 DefaultListableBeanFactory、XmlBeanFactory、ApplicationContext等,其中XmlBeanFactory就是常用的一个,该实现将以XML方式描述组成应用的对象及对象间的依赖关系。
FactoryBean:是个接口,它的实现类首先是个 bean,也存放在 BeanFactory 中。它具有工厂方法的功能,可以让我们自定义Bean的创建过程,并添加到了 IOC容器中的factoryBeanObjectCache 属性中。
bean的生命周期:https://blog.csdn.net/weixin_45723046/article/details/124546319
简单的来说,一个Bean的生命周期分为四个阶段:
1、 实例化(Instantiation)
2、 属性设置(populate)
3、 初始化(Initialization)
4、 销毁(Destruction)
jvm调优 https://blog.csdn.net/weixin_45735355/article/details/121397268
io多路复用的原理 https://blog.csdn.net/qq_25086397/article/details/124432092
AQS的获取独占锁 https://www.cnblogs.com/wurao/p/15815158.html
juc下的四并发工具类
RocketMQ消息发送
Redis——缓存击穿、穿透、雪崩https://blog.csdn.net/admans/article/details/123971680
Spring Data JPA 与 MyBatis对比 https://blog.csdn.net/qq_28289405/article/details/83503343
Spring循环依赖为什么需要三级缓存?https://blog.csdn.net/m0_46546381/article/details/124534149
暄暄科技(二面CTO)2022/08/06 14.00
jvm三色标记法
卡表是用来干嘛的
java内存模型(主线程,副线程)
除了cms和g1还知道哪些垃圾回收算法
类加载机制
加载 >> 验证 >> 准备 >> 解析 >> 初始化 >> 使用 >> 卸载
加载:在硬盘上查找并通过IO读入字节码文件,使用到类时才会加载,例如调用类的main()方法,new对象等等,在加载阶段会在内存中生成一个代表这个类的java.lang.Class对象,作为方法区这个类的各种数据的访问入口
验证:校验字节码文件的正确性
准备:给类的静态变量分配内存,并赋予默认值
解析:将符号引用替换为直接引用,该阶段会把一些静态方法(符号引用,比如main()方法)替换为指向数据所存内存的指针或句柄等(直接引用),这是所谓的静态链接过程(类加载期间完成),动态链接是在程序运行期间完成的将符号引用替换为直接引用,下节课会讲到动态链接
初始化:对类的静态变量初始化为指定的值,执行静态代码块
怎么打破双亲委派模型
怎么实现热加载
zk怎么保持数据一致性的
用zk怎么实现分布式锁
2022.9.7 上行创盈
kafka消费者和提供者怎么在zk中推送和消费消息
Redis用过哪些数据结构
怎么保证Redis和MySQL的数据一致性
Redis持久化过程中rdb快照模式时会阻塞吗?bgsave在fock子线程时会阻塞一小段时间,
新版本多线程也只是接收时多线程接收后面还是默认单线程处理的,需要手动开启多线程