平安产险-核⼼系统部java工程师面经(社招)
平安产险-核⼼系统部
1、简历:
1. 介绍简历上主要项⽬,画框架图,说流程。2. 针对简历上的技能进⾏提问。
2、队列:
3. 说说rabbitmq的结构。
a.消息处理过程:
b.四种交换机:
i.直连交换机,Direct exchange:带路由功能的交换机,根据routing_key(消息发送的时候需要指定)直接绑定到队列,
⼀个交换机也可以通过过个routing_key绑定多个队列。
ii.扇形交换机,Fanout exchange:⼴播消息。
iii.主题交换机,Topic exchange:发送到主题交换机上的消息需要携带指定规则的routing_key,主题交换机会根据这个规
则将数据发送到对应的(多个)队列上。
iv.⾸部交换机,Headers exchange:⾸部交换机是忽略routing_key的⼀种路由⽅式。路由器和交换机路由的规则是通过
Headers信息来交换的,这个有点像HTTP的Headers。将⼀个交换机声明成⾸部交换机,绑定⼀个队列的时候,定义⼀
个Hash的数据结构,消息发送的时候,会携带⼀组hash数据结构的信息,当Hash的内容匹配上的时候,消息就会被写⼊队
列。
4. rabbitmq队列与消费者的关系?
a.⼀个队列可以绑定多个消费者;
b.消息分发:若该队列⾄少有⼀个消费者订阅,消息将以循环(round-robin)的⽅式发送给消费者。每条消息只会分发给⼀个
订阅的消费者(前提是消费者能够正常处理消息并进⾏确认)。
5. rabbitmq交换器种类。
1. fanout交换器:它会把所有发送到该交换器的消息路由到所有与该交换器绑定的队列中;
2. direct交换器:direct类型的交换器路由规则很简单,它会把消息路由到哪些BindingKey和RoutingKey完全匹配的队列中;
3. topic交换器:匹配规则⽐direct更灵活。
4. headers交换器:根据发送消息内容的headers属性进⾏匹配(由于性能很差,不实⽤)。
6. 项⽬中哪⾥⽤到了kafka,kafka特性?
a.场景:
i.⼤数据部⻔流数据处理;
ii. elk;
b.特性:
它被设计为⼀个分布式系统,易于向外扩展;
它同时为发布和订阅提供⾼吞吐量;
它⽀持多订阅者,当失败时能⾃动平衡消费者;
它将消息持久化到磁盘,因此可⽤于批量消费,例如ETL,以及实时应⽤程序。
7. rabbitmq、RocketMq、kafka对⽐。1.中⼩型公司⾸选RabbitMQ:管理界⾯简单,⾼并发。
2.⼤型公司可以选择RocketMQ:更⾼并发,可对rocketmq进⾏定制化开发。
3.⽇志采集功能,⾸选kafka,专为⼤数据准备。
3、SpringCloud:
8. 介绍springcloud核⼼组件及其作⽤,以及springcloud⼯作流程。
M.
springcloud由以下⼏个核⼼组件构成:
Eureka:各个服务启动时,Eureka Client都会将服务注册到Eureka Server,并且Eureka Client还可以反过来从Eureka Server拉
取注册表,从⽽知道其他服务在哪⾥
Ribbon:服务间发起请求的时候,基于Ribbon做负载均衡,从⼀个服务的多台机器中选择⼀台
Feign:基于Feign的动态代理机制,根据注解和选择的机器,拼接请求URL地址,发起请求
Hystrix:发起请求是通过Hystrix的线程池来⾛的,不同的服务⾛不同的线程池,实现了不同服务调⽤的隔离,避免了服务雪崩
的问题
Zuul:如果前端、移动端要调⽤后端系统,统⼀从Zuul⽹关进⼊,由Zuul⽹关转发请求给对应的服务
9. 介绍springcloud⼼跳机制,以及消费端如何发现服务端(Ribbon)?
特性
10. eureka的缺点。
a.某个服务不可⽤时,各个Eureka Client不能及时的知道,需要1~3个⼼跳周期才能感知,但是,由于基于Netflix的服务调⽤端
都会使⽤Hystrix来容错和降级,当服务调⽤不可⽤时Hystrix也能及时感知到,通过熔断机制来降级服务调⽤,因此弥补了基于
客户端服务发现的时效性的缺点。
11. eureka缓存机制?
a.第⼀层缓存:readOnlyCacheMap,本质上是ConcurrentHashMap:这是⼀个JVM的CurrentHashMap只读缓存,这个主要是
为了供客户端获取注册信息时使⽤,其缓存更新,依赖于定时器的更新,通过和readWriteCacheMap的值做对⽐,如果数据不
⼀致,则以readWriteCacheMap的数据为准。readOnlyCacheMap缓存更新的定时器时间间隔,默认为30秒
b.第⼆层缓存:readWriteCacheMap,本质上是Guava缓存:此处存放的是最终的缓存,当服务下线,过期,注册,状态变
更,都会来清除这个缓存⾥⾯的数据。然后通过CacheLoader进⾏缓存加载,在进⾏readWriteCacheMap.get(key)的时候,⾸
先看这个缓存⾥⾯有没有该数据,如果没有则通过CacheLoader的load⽅法去加载,加载成功之后将数据放⼊缓存,同时返回数
据。readWriteCacheMap缓存过期时间,默认为 180秒。
c.缓存机制:设置了⼀个每30秒执⾏⼀次的定时任务,定时去服务端获取注册信息。获取之后,存⼊本地内存。
12. rpc和http的区别,使⽤场景?
13. 分布式事务如何保持⼀致性?
14. 什么情况下⽤到分布式开发?
15. jvm内存模型,各个部分的特点?1. PC寄存器:
a.每个线程拥有⼀个pc寄存器;
b.指向下⼀条指令的地址。
2.⽅法区:
a.保存装载的类的元信息:类型的常量池,字段、⽅法信息,⽅法字节码;
jdk6时,String等常量信息置于⽅法区,jdk7移到了堆中;
b.通常和永久区(Perm)关联在⼀起;
3.堆:
a.应⽤系统对象都保存在java堆中;
b.所有线程共享java堆;
c.对分代GC来说,堆也是分代的;
4.栈:
a.线程私有;
b.栈由⼀系列帧组成(因此java栈也叫做帧栈);
c.帧保存⼀个⽅法的局部变量(局部变量表)、操作数栈、常量池指针;
d.每⼀次⽅法调⽤创建⼀个帧,并压栈。
16. 类加载器,双亲委派模型?
#平安产险总部##面经##社招##java工程师#