2018-07面试题目

1. JVM的类加载机制

    主要是双亲委派模型的东西。它是什么、怎么工作的、为什么要有它,以及打破双亲委派模型的例子。

2. JVM执行子系统

    主要是Java对象结构,对象头的内容等。

3. JMM模型

    主要是堆、栈、程序计数器等内容。栈的结构(操作数栈、本地变量表、常量池引用)、堆的结构。

4.GC算法

 标记-清除、标记-整理、标记-复制,以及分代垃圾回收算法。这里面可能还会问到对象年龄的一些东西。比如JVM默认对象年龄多大时会进入老年代等。

5. sync和Lock加锁、解锁机制的异同

  sync主要是借用了操作系统的monitor原语实现的,是一个非常重量级的锁。它表现为操作对象头的锁标识来实现加锁,而Lock是一种直接作用于线程的锁,是一种线程准入许可。类似于信号量。同时Lock可以用来实现公平锁。

6.偏向锁、轻量级锁、重量级锁

以上三种锁是虚拟机对锁的一种优化。当只有一个线程进入临界区的时候会不加锁对象,仅会将该线程id记录到临界资源的对象头中,当前线程不阻塞。而当有两个线程进入临界区的时候,一个线程会进入临界区执行,另一个线程会自旋几个CPU时钟周期等待获取临界资源的锁(自旋锁),而如果自旋期间还没进入临界区,那么此时锁会膨胀成重量级锁,将会使用操作系统层面的Mutex。另外,锁只能升级,不能降级。

7.sync和volatile的作用和实现等

 主要是多线程的原子性、可见性、有序性,指令重排序和Happen-before原则。

8. MapReduce

    这个问题主要是当时面试官脑洞大开,随便问了我一下,我并没有大数据的开发经验。只能跟他扯了一下map    reduce来自于函数式编程语言lisp。map是映射,reduce是化简,又和他扯了扯Java的ForkJoin框架。

9. HDFS

 这一部分是面试官看我回答的MapReduce很不错又顺便问的。我也没有HDFS的经验,就和他扯了一会GFS(Google File System)的论文。因为HDFS以及淘宝、腾讯的文件系统都是以这篇论文进行实现的。我说GFS维护一个在内存中运行的namenode主要存储文件的元数据信息,底层又有一些chunk server(数据块服务器)存储具体的文件实体,文件默认三个备份,采用CopyOnWrite(写时复制)巴拉巴拉一堆

10.HashMap的数据结构

数组加链表,数组优化查询速度,链表解决hash碰撞。1.8优化了链表,当链表长度大于8(为什么大于8 :平均查找时间)时转为RBTree(在这里问了我红黑树,我说红黑树太复杂,删除就有七种情况,我不会),防止链表过长带来的查询性能的降低。

11.HashMap与线程安全

 当面试官问你HashMap为什么线程不安全的问题时,其实他是想让你回答HashMap多线程写入的时候链表结构成环,导致CPU空转,利用率100%的这一个BUG。问我问啥出现这个bug,我说是在扩容期间产生的,后面的忘了。又问了我ConcurrentHashMap是怎么解决的这个问题的,我没回答出来。

12.ConcurrentHashMap

 底层数据结构、分段锁、CAS(操作系统提供的CAS原语)

13.阻塞队列的实现类、实现方法、重要API

    Lock和Condition的协作,数组和链表的两种实现方式,出队入队阻塞方法。

14.CopyOnWriteArrayList(写时复制)

实现方式(volatile和System.arrayCopy() )、适用场景(读非常多,写很少)、设计思想(空间换读取效率)

15.一般的数组、链表、栈、队列、树等常用数据结构

 .......

16.Spring IoC的设计思想和实现原理

思想是主要为了解耦。实现原理大概是包扫描、类加载、IoC容器初始化、被@Autowired标记的对象赋值。

17. Spring MVC请求转发的实现

包扫描、类加载、HandlerMap初始化,dispatcherServlet里根据请求的uri和请求方式(GET、POST....)从handlerMap里找到对应的Java方法。

18.  设计模式

我只回答了单例、简单工厂、生产者消费者、代理(动态、静态)。其中单例模式的7种写法也要了解一下,可以和面试官探讨最优雅的静态内部类实现。

19.TCP/IP协议

    TCP三次握手(客户端服务端互相确认收发信功能完好)、TCP拥塞机制、TCP粘包(主要是读写缓冲区引起的,可以引出Netty对粘包的三种解决方案)、TCP分段传输机制

20.UDP为啥不安全、TCP为啥安全

 UDP广播报文,发出去就不管了。TCP建立安全连接后才发送报文。

21.HTTP协议

    实现(基于TCP/IP协议,报文格式)、请求头响应头(URI、请求方法、状态码、Content-length、Content-type等等)、HTTP常见状态码及含义(200,304,400,404,500等等)。

22. NIO

I/O多路复用、Reactor模型、select/poll、epoll以及epoll的那个bug(很多人喜欢问这个bug,我被问过两次)。相比于BIO的优点。

23.数据库

数据库索引类型(hash和tree)、索引分别适用场景(=和<,>)、分库分表(水平分、垂直分)、数据库事务、分布式事务(CAP)、常用的用法、表锁行锁乐观锁、数据库设计范式(这我他妈的哪还记得啊)、innodb和其他引擎。

24.线程池

   线程池的几种实现类(cached、fixed、singleThread 我只记得三种)、线程池参数含义

25.ThreadLocal

    数据结构(线程id为key的map)、内存泄露(可用可达、可达不可用、可用不可达)

26.dubbo和spring cloud

    dubbo和spring cloud的实现原理、优缺点、流程、负载均衡算法(我只回答了随机和权重两种)等等。这里我diss了一下dubbo过分复杂的设计,面试官不置可否,后来我才知道这货是阿里出来的......

27.Linux

    Linux常用命令、管道等

28.git

代码冲突解决

你可能感兴趣的:(2018-07面试题目)