前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >总结一套Java面试题送给大家

总结一套Java面试题送给大家

作者头像
攻城狮的那点事
发布2019-10-08 16:28:59
5100
发布2019-10-08 16:28:59
举报

最近面试的Coder们,你们对结果还满意吗?今天给大家总结下Java面试中常见的问题和应对策略,虽然可能好多人认为我把那些面试中常见的记下就行了,但你确定你真的都能记得住吗。尤其对中高级的Java开发来说,有经验的面试官问的知识点都很广,你想全部记住基本可能性不大。所以,技巧和策略很重要。我们先说说Java面试中的基础问题吧。

1,Jvm的内存结构

这道面试题对Java高级开发来说基本必问,主要考察面试者对JVM内存结构的理解,堆内存中新生代和老年代的划分及运作、以及垃圾回收。

详解请看下面的文章。

2,谈谈你对Java垃圾回收的理解?

这个是JVM原理及内存结构引深的话题,我们知道,Java垃圾回收就是针对JVM内存结构中的堆内存而言的。这里涉及的问题:

1),垃圾回收时对象存活的判断方法?

2),垃圾回收算法?

3),垃圾收集器有哪几种及原理?

详解请看下面的文章。

3,Java中有那些锁,说说他们的实现原理?

这是中大型公司对Java中高级开发者几乎必问的话题,关于锁的面试题中Synchronized是重点被问的对象。Java锁也是并发编程必须要掌握的知识点。

具体请看:Java中的锁及实现原理

4,Java中有哪些连接池?

常见的Java连接池有:C3P0,DBCP,Proxool,Druid等。

目前最常用的是Druid。连接池的特点及原理大家也需要了解下,这里不做解释。

5,说说你用过的集合,及实现原理?

这个题一方面考察应聘者对Java集合基础知识的掌握,同时也考察应聘者的知识深度及相关扩展。扩展的知识点就是CurrentHashMap,最好结合HashMap和HashTable去讲讲CurrentHashMap的实现原理,这是绝对的加分项。

HashMap、CurrentHashMap及HashTable的区别

  1. HashMap是线程不安全,CurrentHashMap和HashTable是线程安全的;
  2. ConcurrentHashMap对整个Hash桶数组进行了分段,而HashMap和HashTable没有;
  3. ConcurrentHashMap在每一个分段上都用锁进行保护,从而让锁的粒度更精细一些,并发性能更好,而HashTable是对整个桶上锁
  4. ConcurrentHashMap实现线程安全效率比HashTable高;

6,多个线程如何实现顺序执行?

这个题主要考察你对多线程的理解情况,可以通过线程的join()方法实现。

7,说说事务隔离级别?

1)、未提交读(Read uncommitted)

就是一个事务读取到其他事务未提交的数据,是级别最低的隔离机制。缺点是会产生脏读、不可重复读、幻读。

2)、提交读(Read committed)

就是一个事务读取到其他事务提交后的数据。Oracle默认隔离级别。缺点是会产生不可重复读、幻读。

3)、可重复读(Repeatable read)

就是一个事务对同一份数据读取到的相同,不在乎其他事务对数据的修改。MySQL默认的隔离级别。缺点为会产生幻读。

4)、序列化(Serializable)

事务串行化执行,隔离级别最高,牺牲了系统的并发性。缺点:可以解决并发事务的所有问题。但是效率低下,消耗数据库性能,一般不使用。

注:Spring项目中,事务隔离级别配置使用isolation关键词,如下所示:@Transactional(isolation=Isolation.DEFAULT),DEFAULT为数据源的默认隔离级别。

8,说说你用过哪些索引,及对索引的理解?

这里主要以Mysql数据库为例展开说明。一般项目中用的最多的就是:主键索引、唯一索引、组合索引。

Mysql索引数据结构为B+Tree。对不同存储引擎来说,InnoDB的数据文件本身就是索引文件,B+Tree的叶子节点上的data就是数据本身,key为主键,这是聚簇索引。而MyISAM引擎使用B+Tree作为索引结构,叶节点的data域存放的是数据记录的地址。

9,Dubbo支持哪些通信协议?

  • dubbo 协议 (默认); 单一长连接,NIO异步通信,基于hessian序列化协议。
  • rmi 协议; 走java二进制序列化,多个短连接,适合消费者和提供者数量差不多,适用于文件的传输,一般较少用。
  • hessian 协议; 走hessian序列化协议,多个短连接,适用于提供者数量比消费者数量还多,适用于文件的传输,一般较少用;
  • http 协议; 走json序列化
  • webservice 协议;走SOAP文本序列化
  • redis 协议
  • rest ( 就是 RestFull)

10,Dubbo服务失败默认重试几次,如何配置?

在Dubbo服务的提供者中,超时默认重试2次。可通过retries关键词设置。如:

代码语言:javascript
复制
<dubbo:service interface="com.***" ref="demoService" retries="0" timeout="5000"/>

11,Dubbo提供者在集群时对消费端如何实现负载均衡?

Dubbo提供者的负载均衡通过配置loadbalance实现。Dubbo实现负载均衡的策略:按权重随机分配、轮询、一致性Hash、最少访问调用

1)、按权重随机分配; 这是Dubbo提供者默认的负载均衡策略。按权重随机分配,即是不均等随机事件。比如一块不均匀的硬币,字面30%概率,花面70%概率。这种就是不均等的随机事件

2)、轮询; 当多线程出现时,使用原子类的整数去取莫轮询节点。注意:sequences是成员变量,每次调用函数所有的权重都回归最初。

3)、一致性Hash;使用一致性hash算法,同一请求总是会hash到同一台机子上。一致性hash算法把请求,节点都hash后,放到一个圆环上,按照顺时针转动到的第一个节点为结果。这样就减少了结果的变化。还可以通过增加虚拟节点的方式均衡hash后的概率问题,当然增加节点需要交叉增加。

4)、最少访问调用; 如果有多台机器的最少活跃数相同,在这几个中使用第一种按权重随机的方式。最少活跃调用数,相同活跃数的随机,活跃数指调用前后计数差。使慢的提供者收到更少请求,因为越慢的提供者的调用前后计数差会越大。

12,Zookeeper的有几种角色及选举机制?

Zookeeper主要有三种角色,分别如下:

Zookeeper选举机制

目前有3台服务器,每台服务器均没有数据,它们的编号分别是1,2,3按编号依次启动,它们的选择举过程如下:

  • 服务器1启动,给自己投票,然后发投票信息,由于其它机器还没有启动所以它收不到反馈信息,服务器1的状态一直属于Looking(选举状态)。
  • 服务器2启动,给自己投票,同时与之前启动的服务器1交换结果,由于服务器2的编号大所以服务器2胜出,但此时投票数没有大于半数,所以两个服务器的状态依然是LOOKING。
  • 服务器3启动,给自己投票,同时与之前启动的服务器1,2交换信息,由于服务器3的编号最大所以服务器3胜出,此时投票数正好大于半数,所以服务器3成为领导者,服务器1,2成为小弟。

ZK中每个Server在工作过程中有三种状态:

  • LOOKING:当前Server不知道leader是谁,正在搜寻
  • LEADING:当前Server即为选举出来的leader
  • FOLLOWING:leader已经选举出来,当前Server与之同步

13,分布式锁你是如何实现的?

首先告诉面试官你用分布式解决了什么问题。实际分布式锁也是跟Java锁一样,都是为了解决并发环境下对接口的操作。目前主流的分布式锁实现方案:

1,redis分布式锁;

2,Zookeeper分布式锁

他们二者的对比:

获取锁:Redis分布式锁是通过创建key,如果创建成功就获取了锁;而在Zookeeper是通过创建同一个临时节点,因为Zookeeper节点命名路径保证唯一,只要谁能够先创建成功,谁能够获取到锁。

释放锁 :Redis在释放锁的时候,为了确保是锁的一致性问题,在删除的redis 的key时候,需要判断同一个锁的id,才可以删除。Zookeeper使用直接关闭临时节点session会话连接,因为临时节点生命周期与session会话绑定在一块,如果session会话连接关闭的话,该临时节点也会被删除。

解决死锁:Redis 是对key设置有效期解决死锁现象,Zookeeper使用会话有效期方式解决死锁现象。

性能方面:因为Redis是NoSQL数据库,相对比来说Redis比Zookeeper性能要好。

可靠性:从可靠性角度分析,Zookeeper可靠性比Redis更好。

14,说说你项目中分布式事务的实现方案?

分布式事务解决方案通常有两种:TCC补偿式事务和可靠消息最终一致性。

二者的区别:

1,TCC是通过try...confirm...cancel实时处理,而消息最终一致性一般都是非实时处理;

2,TCC使分布式系统服务内聚,不利于扩展;而消息最终一致性可以实现系统解耦,更有利于系统后期的扩展;

其实他们两还有很多区别与特点,如果面试官问道你这个话题,除了告诉他你有了那个技术解决分布式事务外,还一定要告诉他你为什么选用这个解决方案。不管任何技术的选用都基于业务,没有那个好那个坏。

15,说说你在项目中遇到的问题及解决方案?

这是对有工作经验的面试者常用到的话题。也是用来考察应聘者思考问题及解决问题的能力。如果你们遇到了这个问题,一定要慎重回到。就算你已经总结了好了几个应对的答案,但不建议记着回答。可以先告诉面试者让我想想,先思考10-30s,然后再去回答。这是一个开放性的问题,没有确切的答案,只是看你总结的到位不到位,切记,不要告诉面试官遇的问题是由于你自己的代码不谨慎造成的。

参考:分布式环境下编号唯一性生成方案(分布式环境中某个服务集群,在并发情况下造成编号重复问题解决方案)。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-09-30,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 攻城狮的那点事 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
文件存储
文件存储(Cloud File Storage,CFS)为您提供安全可靠、可扩展的共享文件存储服务。文件存储可与腾讯云服务器、容器服务、批量计算等服务搭配使用,为多个计算节点提供容量和性能可弹性扩展的高性能共享存储。腾讯云文件存储的管理界面简单、易使用,可实现对现有应用的无缝集成;按实际用量付费,为您节约成本,简化 IT 运维工作。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档