JAVA面试解析(有赞二面)

640?wx_fmt=jpeg

本文公众号来源:孤独烟

作者:孤独烟

本文的题目出自博客http://www.54tianzhisheng.cn/2018/07/12/youzan/《JAVA面试解析(有赞一面)》,这篇文章的续!

引言

说在前面的话:本文适合人群:急等着换工作的人

本文不适合人群:专攻JAVA某方面技术的人

正文

1、HashMap,源码级别的问了,包括为什么线程不安全评注:这问题一面的时候问过了,嗯,说明大家以后面试,不管是几面,复习过的知识点还是要复习,毕竟一面的面试官只会告诉二面的面试官印象,不会具体聊问了啥问题!比如,我和二面面试官说,这个候选人基础还不错,那二面面试官就会觉得:"咦,这个人基础不错,我试试是不是真的是这样!"所以难免会出现一样的题目!回答: 略去。

2、死锁评注:这问题一面的时候问过了,嗯,凸显!回答: 死锁是指两个或两个以上的进程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去,如果系统资源充足,进程的资源请求都能够得到满足,死锁出现的可能性就很低,否则就会因争夺有限的资源而陷入死锁。

产生死锁的原因主要是:

  • 因为系统资源不足。

  • 进程运行推进的顺序不合适。

  • 资源分配不当等。

3、Synchronized 和 ReentrantLock 锁机制,怎么判断重入锁的,会不会是死锁?评注:并发基础问题,懂并发编程的,应该都会。回答:API方面:synchronized既可以修饰方法,也可以修饰代码块。ReentrantLock只能在方法体中使用。公平锁:synchronized的锁是非公平锁,ReentrantLock默认情况下也是非公平锁,但可以通过带布尔值的构造函数要求使用公平锁。等待可中断:假如业务代码中有两个线程,Thread1 Thread2。假设 Thread1 获取了对象object的锁,Thread2将等待Thread1释放object的锁。

  • 使用synchronized。如果Thread1不释放,Thread2将一直等待,不能被中断。synchronized也可以说是Java提供的原子性内置锁机制。内部锁扮演了互斥锁(mutual exclusion lock ,mutex)的角色,一个线程引用锁的时候,别的线程阻塞等待。

  • 使用ReentrantLock。如果Thread1不释放,Thread2等待了很长时间以后,可以中断等待,转而去做别的事情。

至于判断重入锁,ReenTrantLock的字面意思就是再进入的锁,其实synchronized关键字所使用的锁也是可重入的,两者关于这个的区别不大。两者都是同一个线程没进入一次,锁的计数器都自增1,所以要等到锁的计数器下降为0时才能释放锁。

4、进程和线程的区别?评注:操作系统的题目,很常规!回答:

线程:单个进程中执行中每个任务就是一个线程。线程是进程中执行运算的最小单位。

一个线程只能属于一个进程,但是一个进程可以拥有多个线程。多线程处理就是允许一个进程中在同一时刻执行多个任务。

线程是一种轻量级的进程,与进程相比,线程给操作系统带来侧创建、维护、和管理的负担要轻,意味着线程的代价或开销比较小。

5、进程之间如何保证同步?评注:操作系统老题了,四种方法!回答:上网给大家找了一张图!

640?wx_fmt=png

6、分布式锁评注:此题问的没头没尾的,分布式锁可以问的点很多,比如实现方式啊?性能差距啊?回答:这题如果要详答,看我的另一篇文章《分布式之抉择分布式锁》

从理解的难易程度角度(从低到高)

从实现的复杂性角度(从低到高)

从性能角度(从高到低)

从可靠性角度(从高到低)

7、对象 GC评注:一面问过,把一面的回答贴过来!回答:

640?wx_fmt=png

  • 虚拟机栈中引用的对象

  • 方法区中类静态属性引用的对象

  • 方法区中产量引用的对象

  • 本地方法栈中JNI引用的对象

8、垃圾回收算法评注:一面问过,把一面的回答贴过来!回答:

9、JVM 参数评注:这个回答还是略去吧,这个问题范围太大,我不知道该怎么答。回答:略去。

10、OOM 出现的有哪些场景?为什么会发生?评注:常规题,只是情况太多了!回答:OOM for Heap (java.lang.OutOfMemoryError: Java heap space):heap的最大值不满足需要,将设置heap的最大值调高即可。OOM for StackOverflowError (Exception in thread "main" java.lang.StackOverflowError):如果线程请求的栈深度大于虚拟机所允许的最大深度,将抛出StackOverflowError异常。OOM for GC (java.lang.OutOfMemoryError: GC overhead limit exceeded):此OOM是由于JVM在GC时,对象过多,导致内存溢出。OOM for native thread created (java.lang.OutOfMemoryError: unable to create new native thread):这个异常问题本质原因是我们创建了太多的线程,而能创建的线程数是有限制的,导致了异常的发生。OOM for allocate huge array (Exception in thread "main": java.lang.OutOfMemoryError: Requested array size exceeds VM limit):此类信息表明应用程序试图分配一个大于堆大小的数组。例如,如果应用程序new一个数组对象,大小为512M,但是最大堆大小为256M,因此OutOfMemoryError会抛出,因为数组的大小超过虚拟机的限制。OOM for small swap (Exception in thread "main": java.lang.OutOfMemoryError: request bytes for . Out of swap space? ):抛出这类错误,是由于从native堆中分配内存失败,并且堆内存可能接近耗尽。OOM for exhausted native memory (java.lang.OutOfMemoryErr java.io.FileInputStream.readBytes(Native Method)):由于Native memory被耗尽导致的。

11、JVM 内存结构说下吧评注:常规题,学过JVM的都会!回答:来一张图就好了。

640?wx_fmt=png

12、堆和栈的共享问题?评注:常规题,大家应该都答的上来,属应届生常见问题!回答:数据共享,比如你线程中执行下面两句话

int i = 1;
int j = 1;

如下图所示

640?wx_fmt=png

没有数据共享的特点,比如你线程中执行了下面两句话

String s =  new  String( "Hello World" );
String w = new  String( "Hello World" );

此时如下图所示

640?wx_fmt=png

13、有比较过 Http 和 RPC 吗?评注:此题我按我的理解来答。我不确定对不对,因此我觉得http和rpc没啥可比性,不是一个级别的概念。回答:

14、HttpClient 你说说里面的具体实现吧?(涉及了哪些东西)评注:此题只能回答一个大概,我找了一个架构图来进行说明回答:

640?wx_fmt=png

————  e n d ————

觉得文章不错的,欢迎点在看转发,长按下图关注公众号 程序员乔戈里,收看更多精彩。

640?

公众号后台回复 面经 获取一份乔哥总结的一份帮助很多公众号粉丝拿到offer的Java程序员面试突击手册。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值