深圳丰巢java高级社招面经分享
丰巢科技
1.bio与nio的区别
2.select与poll的区别
3.zookeeper的⼯作原理
5.⼆段式满⾜cap理论的哪两个理论
两阶段提交协议在正常情况下能保证系统的强⼀致性,但是在出现异常情况下,当前处理的操作处于错误状态,需要管理员⼈⼯⼲预
解决,因此可⽤性不够好,这也符合CAP协议的⼀致性和可⽤性不能兼得的原理。
6.线程池的参数配置,为什么java官⽅提供⼯⼚⽅法给线程池
7.分布式框架dubbo的好处,不⽤dubbo可不可以。为什么要使⽤分布式
8.七个垃圾回收器之间如何搭配使⽤
新⽣代基本采⽤复制算法,⽼年代采⽤标记整理算法。cms采⽤标记清理;
9.接⼝限流⽅案
10.ConcurrentHashMap使⽤原理
11.解决map的并发问题⽅案
HashMap不是线程安全的;Hashtable线程安全,但效率低,因为是Hashtable是使⽤synchronized的,所有线程竞争同⼀把锁;⽽
ConcurrentHashMap不仅线程安全⽽且效率⾼,因为它包含⼀个segment数组,将数据分段存储,给每⼀段数据配⼀把锁,也就是所谓的锁分段技
术。
12.什么是协程,以及实现要点
13.lru cache使⽤hash map的实现(算法)
14.图的深度遍历和⼴度遍历(算法)
15.基本排序(算法)
1.快速排序:
2.冒泡排序:
3.直接插⼊排序:
4.直接选择排序:
16.设计模式的使⽤
17.java 8流式使⽤
18.说说b+树?
19.内存屏障与volatile:
20.java域的概念
field,域是⼀种属性,可以是⼀个类变量,⼀个对象变量,⼀个对象⽅法变量或者是⼀个函数的参数。
21.分布式设计领域的概念
49
23.mysql调优
27.写⼀个redis分布式锁:
28.spring 7种事务的传播⾏为:
PROPAGATION_REQUIRED如果当前没有事务,就新建⼀个事务,如果已经存在⼀个事务中,加⼊到这个事务中。这是最常⻅的选
择。
PROPAGATION_SUPPORTS⽀持当前事务,如果当前没有事务,就以⾮事务⽅式执⾏。
PROPAGATION_MANDATORY使⽤当前的事务,如果当前没有事务,就抛出异常。
PROPAGATION_REQUIRES_NEW新建事务,如果当前存在事务,把当前事务挂起。
PROPAGATION_NOT_SUPPORTED以⾮事务⽅式执⾏操作,如果当前存在事务,就把当前事务挂起。
PROPAGATION_NEVER以⾮事务⽅式执⾏,如果当前存在事务,则抛出异常。
PROPAGATION_NESTED如果当前存在事务,则在嵌套事务内执⾏。如果当前没有事务,则执⾏与PROPAGATION_REQUIRED类似的
操作。
29.分布式下down机的处理⽅案(⼼跳检测)
1、dubbo:服务器宕机,zk临时被删除;
2、springcloud:每30s发送⼼跳检测重新进⾏租约,如果客户端不能多次更新租约,它将在90s内从服务器注册中⼼移除。
3、apm监控:
30、分析下分布式强⼀致性、弱⼀致性、最终⼀致性?
1.强⼀致性:当更新操作完成之后,任何多个后续进程或者线程的访问都会返回最新的更新过的值。这种是对⽤户最友好的,就是⽤户上⼀次
写什么,下⼀次就保证能读到什么。根据 CAP理论,这种实现需要牺牲可⽤性。
2.弱⼀致性:
系统并不保证续进程或者线程的访问都会返回最新的更新过的值。系统在数据写⼊成功之后,不承诺⽴即可以读到最新写⼊的
值,也不会具体的承诺多久之后可以读到。
3.最终⼀致性:
弱⼀致性的特定形式。系统保证在没有后续更新的前提下,系统最终返回上⼀次更新操作的值。在没有故障发⽣的前提下,不⼀
致窗⼝的时间主要受通信延迟,系统负载和复制副本的个数影响。DNS是⼀个典型的最终⼀致性系统。
31、dubbo与zookeeper两者作为注册中⼼的区别,假如注册中⼼挂了,消费者还能调⽤服务吗,⽤什么调⽤的
1.注册中⼼对等集群,任意⼀台宕掉后,会⾃动切换到另⼀台
2.注册中⼼全部宕掉,服务提供者和消费者仍可以通过本地缓存通讯
3.服务提供者⽆状态,任⼀台宕机后,不影响使⽤
4.服务提供者全部宕机,服务消费者会⽆法使⽤,并⽆限次重连等待服务者恢复
32、dubbo的原理图(画出注册中⼼,消费者,⽣产者的关系图,并说出每个⻆⾊的作⽤)
Consumer服务消费者,Provider服务提供者。Container服务容器。消费当然是invoke提供者了,invoke这条实线按照图上的说明当
然同步的意思了。但是在实际调⽤过程中,Provider的位置对于Consumer来说是透明的,上⼀次调⽤服务的位置(IP地址)和下⼀次调
⽤服务的位置,是不确定的。这个地⽅就需要使⽤注册中⼼来实现软负载。
33、项⽬中有没有⽤到多线程?
1、发送邮件、短信,使⽤多线程异步发送;
2、定时任务使⽤线程池;
34、HashMap的底层原理(包括底层数据结构,怎么扩容的)
35、ConcurrentHashMap的原理
36、分布式锁的实现
基本原理:⽤⼀个状态值表示锁,对锁的占⽤和释放通过状态值来标识。
#丰巢科技##面经##java工程师##社招#