Post List Widget

header ads

面试专题一





Java并发篇

相关演示代码地址:guyuexuan039/interview: 面试知识点汇总 (github.com)

一、Java如何开启线程?怎么保证线程安全?

二、Volatile和Synchronized有什么区别?Volatile能不能保证线程安全?DCL(Double Check Lock)单例为什么要加 Volatile?

三、Java线程锁机制是怎样的?偏向锁、轻量级锁、重量级锁有什么区别?锁机制是如何升级的?

四、谈谈你对AQS的理解。AQS如何实现可重入锁?

五、有A,B,C三个线程,如何保证三个线程同时执行?如何在并发情况下保证三个线程依次执行?如何保证三个线程有序交错运行?

六、如何对一个字符串快速进行排序?

Java网络通信篇

一、TCP和UDP有什么区别?TCP为什么是三次握手,而不是两次?

二、Java有哪几种IO模型?有什么区别?

BIO 同步阻塞IO,传统型 web 服务就是这种模型:

特点:可靠性差,吞吐量低,适用于连接比较少且比较固定的场景。JDK1.4之前唯一的选择。

NIO 同步非阻塞IO

在 BIO 的基础上,增加一个 selector ,减少 Thread 对 Server 的压力,就是 NIO:

特点:可靠性比较好,吞吐量较高,适用于连接比较多并且连接比较短(因为对于客户端来说还是一个轮询,查看是否服务端响应了没),适用于轻操作,例如聊天室

AIO 异步非阻塞IO

在 NIO 的基础上,让 Server 处理完成后,主动推送响应到 客户端就是 AIO 了:

特点:可靠性是最好的,吞吐量也是非常高。适用于连接比较多,并且连接也比较长(重操作)。例如:相册服务器。JDK7版本才开始支持

三、Java NIO的几个核心组件是什么?分别有什么用?

四、select, poll 和 epoll 有什么区别?

五、描述下 Http 和 Https 的区别

JVM调优篇

一、说一说JVM的内存模型?

二、Java类加载的全过程是怎样的?什么是双亲委派机制?有什么作用?一个对象从加载到JVM,再到被GC清除,都经历了什么过程?

三、怎么确定一个对象到底是不是垃圾?什么是GC Root?

四、JVM有哪些垃圾回收算法?

MarkSweep 标记清除算法

这个算法分为两个阶段,标记阶段:把垃圾内存标记出来,清除阶段:直接将垃圾内存回收。

这种算法是比较简单的,但是有个很严重的问题,会产生很多内存碎片。

Copying 拷贝算法

为了解决标记清除算法的内存碎片问题,就产生了拷贝算法。

拷贝算法将内存分为大小相等的两半,每次只使用其中一半。垃圾回收时,将当前这一块的存活对象全部拷贝到另一半,然后当前这一半内存就可以直接清除。

这种算法没有内存碎片,但是它的问题就在于浪费空间。而且,它的效率跟存活对象的个数有关。

MarkCompack 标记压缩算法

为了解决拷贝算法的空间利用缺陷,就提出了标记压缩算法。这种算法在标记阶段跟标记清除算法是一样的,但是在完成标记后,不是直接清理垃圾内存,而是将存活对象往一端移动,然后将端边界以外的所有内存直接清除。

这三种算法各有利弊,各自有各自的适合场景。

五、JVM有哪些垃圾回收器?他们都是怎么工作的?什么是STW?它都发生在哪些阶段?什么是三色标记?如何解决错标记和漏标记的问题?为什么要设计这么多的垃圾回收器?

STW:Stop-The-World,是在垃圾回收算法执行过程当中,需要将JVM内存冻结的一种状态。

在STW状态下,Java的所有线程都是停止执行的-GC线程除外,native方法可以执行,但是,不能与JVM交互。GC各种算法优化的重点,就是减少STW,同时这也是JVM调优的重点。

六、 如何进行JVM调优?JVM参数有哪些?怎么查看一个Java进程的JVM参数?谈谈你了解的JVM参数。如果一个Java程序每次运行一段时间后,就变得非常卡顿,你准备如何对他进行优化?

Post a Comment

0 Comments