JAVA面试总结(商汤科技)

本文总结了商汤科技JAVA面试中的核心知识点,包括Kafka的数据分区与消费者关系、CMS垃圾回收机制、SpringCloud组件功能、数据一致性策略、并发编程技术如Netty、Akka模型、数据库优化和并发控制等。此外,还讨论了Docker的区别、高并发系统优化与幂等性设计以及面试中常见的微服务拆分、数据库设计和索引优化等内容。
摘要由CSDN通过智能技术生成

商汤
1.简历写什么问什么,注意所⽤技术产品的同类产品⽣态及对⽐。
2.kafka数据分区和消费者的关系,kafka的数据offset读取流程,kafka内部如何保证顺序,结合外部组件如何保证消费者的顺序
1、kafka数据分区和消费者的关系:1个partition只能被同组的⼀个consumer消费,同组的consumer则起到均衡效果
2、kafka的数据offset读取流程
1.连接ZK集群,从ZK中拿到对应topic的partition信息和partition的Leader的相关信息
2.连接到对应Leader对应的broker
3.consumer将⾃⼰保存的offset发送给Leader
4.Leader根据offset等信息定位到segment(索引⽂件和⽇志⽂件)
5.根据索引⽂件中的内容,定位到⽇志⽂件中该偏移量对应的开始位置读取相应⻓度的数据并返回给consumer
3、kafka内部如何保证顺序:
kafka只能保证partition内是有序的,但是partition间的有序是没办法的。爱奇艺的搜索架构,是从业务上把需要有序的打到同⼀
个partition。
4、
3.cms垃圾回收机制
1、概念:CMS全称 Concurrent Mark Sweep,是⼀款并发的、使⽤标记-清除算法的垃圾回收器,
2、使⽤场景:GC过程短暂停,适合对时延要求较⾼的服务,⽤户线程不允许⻓时间的停顿。
3、缺点:
1、服务⻓时间运⾏,造成严重的内存碎⽚化。
2、算法实现⽐较复杂(如果也算缺点的话)。
4、实现机制:根据GC的触发机制分为:
1、周期性Old GC(被动):2s执⾏⼀次;
2、主动Old GC:触发条件:
i. YGC过程发⽣Promotion Failed,进⽽对⽼年代进⾏回收
ii. ⽐如执⾏了System.gc(),前提是没有参数ExplicitGCInvokesConcurrent
iii. 其它情况…
4.springcloud各个组件功能,内部细节,与dubbo区别,dubbo架构,dubbo负载策略
1、springcloud各个组件功能:
a. Ribbon,客户端负载均衡,特性有区域亲和、重试机制。
b. Hystrix,客户端容错保护,特性有服务降级、服务熔断、请求缓存、请求合并、依赖隔离。
c. Feign,声明式服务调⽤,本质上就是Ribbon+Hystrix
d. Stream,消息驱动,有Sink、Source、Processor三种通道,特性有订阅发布、消费组、消息分区。
e. Bus,消息总线,配合Config仓库修改的⼀种Stream实现,
f. Sleuth,分布式服务追踪,需要搞清楚TraceID和SpanID以及抽样,如何与ELK整合。
g. Eureka,服务注册中⼼,特性有失效剔除、服务保护。
h. Dashboard,Hystrix仪表盘,监控集群模式和单点模式,其中集群模式需要收集器Turbine配合。
i. Zuul,API服务⽹关,功能有路由分发和过滤。
j. Config,分布式配置中⼼,⽀持本地仓库、SVN、Git、Jar包内配置等模式,
2、dubbo负载策略:
5.mapreduce原理
1、简介:mapreduce源⾃google的⼀篇⽂章,将海量数据处理的过程拆分为map和reduce。mapreduce 成为了最早的分布式计算框
架,这样即使不懂的分布式计算框架的内部运⾏机制的⽤户,也可以利⽤分布式的计算框架实现分布式的计算,并在hadoop上⾯运⾏。
2、设计思想:
hadoop ⽂件系统 ,提供了⼀个分布式的⽂件系统,但是hadoop⽂件系统读写的操作都涉及到⼤量的⽹络的操作,并不能很好
的完成实时性⽐较强的任务。
但是hadoop可以给上⾯的应⽤提供⼀个很好的⽀持。⽐如hadoop⽂件系统上⾯可以运⾏mapreduce。mapreduce是⼀个计算的
框架,mapreduce是⼀个分布式的计算框架,这样mapreduce利⽤分布式的⽂件系统,将不同的机器上完成不同的计算,然后就计算结果
返回。这样很好的利⽤了分布式的⽂件系统。
数据分布式的存储,然后计算的时候,分布式的计算,然后将结果返回。这样的好处就是不会涉及到⼤量的⽹络传输数据。
3、优点:mapreduce的计算框架的优点是,极强的扩展能⼒,可以在数千台机器上并发的执⾏。其次,有很好的容错性,另外,就
是向上的接⼝简洁。⽤户只需要写map和reduce函数,即可完成⼤规模数据的并⾏处理。
4、缺点:mapreduce并不适合对实时性要求⽐较⾼的场景,⽐如交互式查询或者是流式计算。另外,也不适合迭代类的计算(⽐如
机器学习类的应⽤)。
1、mapreduce的启动时间⽐较长,对于批处理的任务,这个问题并不算⼤。但是对于实时性⽐较⾼的任务,其启动时间长的缺点就很
不合适了。
2、mapreduce⼀次执⾏的过程⾥⾯,往往涉及到多出磁盘读写,以及⽹络的传输。对于迭代的任务,这样很好的开销需要很多次,明
显降低了效率。
3、⽽Storm和Spark,⼀个是流式计算的框架,⼀个是机器学习的框架。他们更适合解决这类型的任务。
6.nio,bio,sellector/epoll,aio,netty⾃带编解码器,netty优势,java内存模型
Netty⾼性能:
1、NIO异步⾮阻塞通信
2、“零拷⻉”
3、内存池ByteBuf
4、Netty提供了多种内存管理策略,通过在启动辅助类中配置相关参数,可以实现差异化的定制。
5、⾼效的Reactor线程模型:Reactor单线程(多线程、主从)模型,指的是所有的IO操作都在同⼀个NIO线程上⾯完成
6、为了尽可能提升性能,Netty采⽤了串⾏⽆锁化设计,在IO线程内部进⾏串⾏操作,避免多线程竞争导致的性能下降。表⾯上看,串⾏
化设计似乎CPU利⽤率不⾼,并发程度不够。但是,通过调整NIO线程池的线程参数,可以同时启动多个串⾏化的线程并⾏运⾏,这种局部⽆锁化的串
⾏线程设计相⽐⼀个队列-多个⼯作线程模型性能更优。
7、⾼效的并发编程:Netty的⾼效并发编程主要体现在如下⼏点:

  1. volatile的⼤量、正确使⽤;
  2. CAS和原⼦类的⼴泛使⽤;
  3. 线程
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值