2022年2022年互联网Java高级面试题 .pdf
《2022年2022年互联网Java高级面试题 .pdf》由会员分享,可在线阅读,更多相关《2022年2022年互联网Java高级面试题 .pdf(10页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、商汤1.简历写什什么问什什么,注意所?用技术产品的同类产品?生态及对?比。2.kafka数据分区和消费者的关系,kafka 的数据 offset读取流程,kafka 内部如何保证顺序,结合外部组件如何保证消费者的顺序1、 kafka 数据分区和消费者的关系:1个 partition只能被同组的?一个consumer消费,同组的 consumer则起到均衡效果2、 kafka 的数据 offset 读取流程1.连接ZK 集群,从 ZK中拿到对应topic 的 partition信息和 partition的Leader 的相关信息2.连接到对应Leader 对应的 broker3.consumer
2、将 ?自 ?己保存的 offset 发送给 Leader4.Leader 根据 offset 等信息定位到segment (索引?文件和?日志 ?文件)5.根据索引?文件中的内容,定位到?日志 ?文件中该偏移量量对应的开始位置读取相应?长度的数据并返回给consumer3 、kafka 内部如何保证顺序:kafka 只能保证 partition内是有序的,但是partition 间的有序是没办法的。爱奇艺的搜索架构,是从业务上把需要有序的打到同?一个 partition 。4 、3.cms 垃圾回收机制1、概念: CMS 全称 Concurrent Mark Sweep,是 ?一款并发的、使?
3、用标记- 清除算法的垃圾回收器?,2、使 ?用场景:GC过程短暂停,适合对时延要求较?高的服务,?用户线程不不允许?长时间的停顿。3 、缺点:1、服务 ?长时间运?行行,造成严重的内存碎?片化。2、算法实现?比较复杂(如果也算缺点的话)。4 、实现机制:根据GC的触发机制分为:1、周期性 Old GC (被动): 2s 执 ?行行 ?一次;2、主动 Old GC :触发条件:i. YGC 过程发?生 Promotion Failed,进 ?而对 ?老老年年代进?行行回收ii. ?比如执?行行了了System.gc() ,前提是没有参数ExplicitGCInvokesConcurrentiii
4、. 其它情况 .4.springcloud各个组件功能,内部细节,与dubbo区别, dubbo架构, dubbo 负载策略略1、 springcloud各个组件功能:a. Ribbon ,客户端负载均衡,特性有区域亲和、重试机制。b. Hystrix ,客户端容错保护,特性有服务降级、服务熔断、请求缓存、请求合并、依赖隔离。c. Feign ,声明式服务调?用,本质上就是 Ribbon+Hystrixd. Stream ,消息驱动,有Sink 、 Source 、 Processor 三种通道,特性有订阅发布、消费组、消息分区。e. Bus,消息总线,配合Config 仓库修改的?一种Str
5、eam 实现,f. Sleuth ,分布式服务追踪,需要搞清楚TraceID 和SpanID 以及抽样,如何与ELK 整合。g. Eureka ,服务注册中?心,特性有失效剔除、服务保护。h. Dashboard, Hystrix 仪表盘,监控集群模式和单点模式,其中集群模式需要收集器?Turbine 配合。i. Zuul , API服务 ?网关,功能有路路由分发和过滤。j. Config ,分布式配置中?心, ?支持本地仓库、SVN 、Git 、 Jar 包内配置等模式,2、 dubbo 负载策略略:名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - -
6、 - - - - - 名师精心整理 - - - - - - - 第 1 页,共 10 页 - - - - - - - - - 5.mapreduce原理理1、简介: mapreduce源 ?自 google 的 ?一篇 ?文章,将海?量量数据处理理的过程拆分为map 和 reduce 。mapreduce 成为了了最早的分布式计算框架,这样即使不不懂的分布式计算框架的内部运?行行机制的 ?用户,也可以利利 ?用分布式的计算框架实现分布式的计算,并在hadoop 上?面运?行行。2、设计思想:hadoop ?文件系统 ,提供了了?一个分布式的?文件系统,但是hadoop ?文件系统读写的操作都涉
7、及到?大量量的?网络的操作,并不不能很好的完成实时性 ?比较强的任务。但是 hadoop 可以给上 ?面的应 ?用提供 ?一个很好的 ?支持。 ?比如 hadoop ?文件系统上 ?面可以运?行行mapreduce。mapreduce是?一个计算的框架, mapreduce是?一个分布式的计算框架,这样mapreduce利利?用分布式的 ?文件系统,将不不同的机器 ?上完成不不同的计算,然后就计算结果返回。这样很好的利利 ?用了了分布式的 ?文件系统。数据分布式的存储,然后计算的时候,分布式的计算,然后将结果返回。这样的好处就是不不会涉及到?大量量的?网络传输数据。3 、优点: mapredu
8、ce 的计算框架的优点是,极强的扩展能?力力,可以在数千台机器?上并发的执?行行。其次,有很好的容错性,另外,就是向上的接 ?口简洁。?用户只需要写map 和 reduce 函数,即可完成 ?大规模数据的并 ?行行处理理。4 、缺点: mapreduce 并不不适合对实时性要求?比较 ?高的场景,?比如交互式查询或者是流式计算。另外,也不不适合迭代类的计算(?比如机器?学习类的应 ?用)。1、 mapreduce的启动时间?较长,对于批处理的任务,这个问题并不算?。但是对于实时性?较 ?的任务,其启动时间长的缺点就很不合适了。2、 mapreduce?次执?的过程? ,往往涉及到多出磁盘读写,
9、以及?络的传输。对于迭代的任务,这样很好的开销需要很多次,明显降低了效率。3、 ?Storm和 Spark, ?个是流式计算的框架,?个是机器学习的框架。他们更适合解决这类型的任务。6.nio ,bio ,sellector/epoll,aio ,netty?自带编解码器?,netty 优势, java 内存模型Netty?高性能: 1、NIO 异步 ?非阻塞通信 2、“ 零拷 ?贝 ” 3、内存池 ByteBuf 4、Netty提供了了多种内存管理理策略略,通过在启动辅助类中配置相关参数,可以实现差异化的定制。 5、 ?高效的Reactor线程模型: Reactor单线程 ( 多线程、主从)
10、 模型,指的是所有的IO 操作都在同?一个NIO 线程上?面完成 6、为了了尽可能提升性能, Netty采 ?用了了串串?行行 ?无锁化设计,在IO 线程内部进?行行串串?行行操作,避免多线程竞争导致的性能下降。表?面上看,串串?行行化设计似乎CPU利利?用率不不?高,并发程度不不够。但是,通过调整NIO 线程池的线程参数,可以同时启动多个串串?行行化的线程并?行行运?行行,这种局部?无锁化的串串?行行线程设计相?比 ?一个队列列- 多个?工作线程模型性能更更优。 7、 ?高效的并发编程: Netty的 ?高效并发编程主要体现在如下?几点: 1) volatile的 ?大量量、正确使?用; 2
11、) CAS和原 ?子类的?广泛使?用; 3) 线程安全容器?的使 ?用; 4) 通过读写锁提升并发性能。 8、 ?高效的序列列化框架: 9、灵活的 TCP参数配置能?力力:合理理设置TCP参数在某些场景下对于性能的提升可以起到显著的效果,例例如SO_RCVBUF 和 SO_SNDBUF。如果名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 10 页 - - - - - - - - - 设置不不当,对性能的影响是?非常?大的。7.akka 模型1、概念: Akka 是 ?一个
12、构建在JVM 上,基于 Actor 模型的的并发框架,为构建伸缩性强,有弹性的响应式并发应?用提 ?高更更好的平台。2、 Actor 模型: Akka 的核 ?心就是 Actor ,所以不不得不不说Actor , Actor 模型我通俗的举个例例?子,假定现实中的两个?人,他们只知道对?方的地址,他们想要交流,给对?方传递信息,但是 ?又没有 ?手机,电话, ?网络之类的其他途径,所以他们之间只能?用信件传递消息,很像现实中的的邮政系统,你要寄?一封信,只需根据地址把信投寄到相应的信箱中,具体它是如何帮你处理理送达的,你就不不需要了了解了了,你也有可能收到收信 ?人的回复,这相当于消息反馈。上
13、述例例?子中的信件就相当于Actor 中的消息, Actor 与Actor 之间只能通过消息通信。8.java arraylist,linkedlist区分及实现原理理, hashmap和 concurrenthashmap区分及实现原理理, concurrenthashmap 1.7和 1.8 区分,实现细节, linkedhashmap排序原理理,应 ?用如何保证数据幂等1、 java arraylist ,linkedlist 区分及实现原理理:1. ArrayList 是实现了了基于动态数组的数据结构,?而LinkedList 是基于链表的数据结构; 2. 对于随机访问get 和 se
14、t , ArrayList 要优于 LinkedList ,因为 LinkedList 要移动指针; 3. 对于添加和删除操作add 和remove , ?一般 ?大家都会说 LinkedList要 ?比 ArrayList 快,因为 ArrayList 要移动数据。2、 concurrenthashmap 1.7和 1.8区分:去除 Segment + HashEntry + Unsafe的实现,改为 Synchronized + CAS + Node + Unsafe的实现其实 Node 和 HashEntry 的内容 ?一样,但是 HashEntry 是?一个内部类。?用 Synchro
15、nized + CAS 代替 Segment ,这样锁的粒度更更 ?小了了,并且不不是每次都要加锁了了,CAS尝试失败了了在加锁。put ()? 方法中 初始化数组?大 ?小时,1.8不不 ?用加锁,因为?用了了个 sizeCtl 变量量,将这个变量量置为 -1 ,就表明 table 正在初始化。3 、linkedhashmap排序原理理:1publicLinkedHashMap()2/ 调?用 HashMap 的构造 ?方法,其实就是初始化 Entry table3super();4/ 这?里里是指是否基于访问排序,默认为 false5 accessOrder =false;6名师资料总结
16、- - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 10 页 - - - - - - - - - 1、 LinkedHashMap存储数据是有序的,?而且分为两种:插?入顺序和访问顺序。默认为插?入顺序。2、 LinkedHashMap有 ?自 ?己的静态内部类Entry ,它继承了了HashMap.Entry,定义如下 :1/*2* LinkedHashMap entry.3*/4privatestaticclassEntryextendsHashMap . Entry 5/ These
17、 fields comprise the doubly linked list used for iteration.6 Entry before, after;78Entry( int hash,K key ,V value, HashMap. Entry next)9super( hash , key , value, next);10113 、所以 LinkedHashMap构造函数,主要就是调?用HashMap 构造函数初始化了了?一个Entry table ,然后调?用 ?自身的init 初始化了了?一个只有头结点的双向链表。9.web.xml listener, filter,se
18、rvlet加载顺序。如何不不再 web , xml 中配置来加载 filter1、 web.xml listener, filter , servlet 加载顺序: context-param - listener - filter - servlet2、10. ?无穷数就top K 问题,提供多个?方案1、最简单且最容易易想到的算法是对数组进?行行排序(快速排序),然后取最?大或最 ?小的K个元素。总的时间复杂度为O(N*logN )+O(K)=O(N*logN ) 。该算法存在以下问题:1. 快速排序的平均复杂度为O(N*logN ) ,但最坏时间复杂度为O(n2) ,不不能始终保证较好的
19、复杂度2. 只需要前 k?大或 k?小的数, ,实际对其余不不需要的数也进?行行了了排序,浪费了了?大量量排序时间总结:通常不不会采取该?方案。2、虽然我们不不会采?用快速排序的算法来实现TOP-K 问题,但我们可以利利?用快速排序的思想,在数组中随机找?一个元素key ,将数组分成两部分 Sa和 Sb,其中 Sa的元素 =key ,Sb的元素 delta,因此时间复杂度跟数据分布有关。整个算法的时间复杂度为O(N * log ( Vmax-Vmin ) /delta ),在数据分布平均的情况下,时间复杂度为O(N * logN )。4 、上 ?面 ?几种解法都会对数据访问多次,那么就有?一个
20、问题,当数组中元素个数?非常 ?大时,如:100 亿,这时候数据不不能全部加载到内存,就要求我们尽可能少的遍历所有数据。针对这种情况,下?面我们介绍 ?一种针对海 ?量量数据的解决 ?方案。在学习堆排序的过程中,我们知道了了堆这种数据结构。为了了查找Top k ?大的数,我们可以使 ?用?大根堆来存储最 ?大的 K个元素。?大根堆的堆顶元素就是最 ?大 K个数中最 ?小的?一个。每次考虑下 ?一个数 x时,如果 x?比堆顶元素 ?小,则不不需要改变原来的堆。如果想 x ?比堆顶元素 ?大,那么?用x替换堆顶元素,同时,在替换之后,x可能破坏最 ?小堆的结构,需要调整堆来维持堆的性质。总结:该算
21、法只需要扫描所有的数据?一次,且不不会占 ?用太多内存空间(只需要容纳K个元素的空间),尤其适合处理理海?量量数据的场景。算法的时间复杂度为O(N * logk ),这实际上相当于执 ?行行了了部分堆排序。5、 TOP-K 问题是 ?一个经典的问题,这个问题是存在线性算法的,只不不过算法的使?用范围有?一定的限制。如果所有N个数都是正整数,且他们的取值范围并不不?大,可以考虑申请空间,记录每个整数出现的次数,然后再从?大到?小取最?大的K个。实际就是利利 ?用计数排序的思想。 假设所有整数都在(0, maxN )区间,利利 ?用?一个数组count maxN 来记录每个整数出现的次数。coun
22、t i 表示整数 i在N个数中出现的次数。只需要扫描 ?一遍就可以得到count 数组,然后寻找第K?大的元素。这是?一个典型的以空间换取时间的做法。当数组中取值范围?比较?大时,是及其浪费空间的。如3,1.9999 ,为了了求出最 ?大的K个元素,需要额外申请 ?一个?长度为 10000 的数组。极端情况下,如果 N 个整数各不不相同,我们甚?至只需要 ?一个 bit 来存储这个整数是否存在,这样可节省很?大的内存空间。11.a,b,c三张表,做关联查询,如何优化,可做外键,只在c表加 a表外键即可。1. 对于要求全?面的结果时,我们需要使?用连接操作(LEFT JOIN / RIGHT J
23、OIN / FULL JOIN);2. 不不要以为使?用MySQL 的 ?一些连接操作对查询有多么?大的改善,核?心是索引;3. 对被驱动表的join 字段添加索引;12.CourrentHashMap JDK1.7和 JDK1.8 有什什么区别?名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 10 页 - - - - - - - - - 1. Java 7 为实现并?行行访问,引?入了了Segment 这 ?一结构,实现了了分段锁,理理论上最?大并发度与Segment
24、个数相等。2. Java 8 为进 ?一步提?高并发性,摒弃了了分段锁的?方案,?而是直接使?用 ?一个 ?大的数组。同时为了了提?高哈希碰撞下的寻址性能,Java 8 在链表?长度超过?一定阈值( 8 )时将链表(寻址时间复杂度为O(N))转换为红 ?黑树(寻址时间复杂度为O(long (N) )。其数据结构如下图所示13. 线程 a,b ,c,d运 ?行行任务,怎么保证当 a,b,c线程执?行行完再执?行行d 线程 ?1、 CountDownLatch类?一个同步辅助类,常 ?用于某个条件发 ?生后才能执 ?行行后续进程。给定计数初始化CountDownLatch,调?用 countDow
25、n()?方法,在计数到达零之前,await ?方法?一直受阻塞。重要?方法为countdown() 与await () ;2、 join ?方法将线程 B加?入到线程 A的尾部,当 A执?行行完后B才执?行行。1publicstaticvoidmain ( String args) throws Exception 2 Th t = newTh( t1);3 Th t2 = newTh ( t2);4 t. start();5 t. join();6 t2. start();783 、notify 、 wait ?方法,Java 中的唤醒与等待?方法,关键为 synchronized代码块,参
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 2022年2022年互联网Java高级面试题 2022 互联网 Java 高级 试题
限制150内