一面:数据结构、网络、操作系统

一、计算机网络

1、谈谈ISO七层模型、五层模型、TCP/IP模型,分别阐述没一次层的作用与区别?

2、谈一下TCP、UDP有什么区别?

3、谈一下为什么TCP是面向连接的?能说一下三次握手、四次挥手吗?

 

二、数据结构

*话题一:数组、链表

1、能谈一下数组、链表的区别吗?

     数组:查找快、更新慢。

     链表:更新快、查找慢。

2、为什么数组比链表查找快(从内存的角度说)?或者数组和链表在内存上的表现是什么样子的?

     数组是连续的存储空间,链表是在内存中存储是碎片化的。

3、那怎么改善链表的查找速度?

     跳表

4、跳表它本质上跟那种查找思想类似?

     查找:二分查找、hash查找

     类似于二分查找的思想。

 

*话题二:查找、排序(排序需要手写代码)

1、谈一下你知道的排序?(冒泡、快排、归并比较常见) 时间复杂度,排序稳定性。

     插入排序:直接插入排序、希尔排序

     交换排序:冒泡排序、快速排序

     选择排序:简单选择排序、堆排序

     归并排序

     

2、谈一下查找?

     二分查找、线索查找、hash查找

 

3、hash查找要考虑的重要问题有哪些?

     数组+链表

     要考虑hash均匀分布、hash算法。

 

话题三:树、图基本操作

1、二叉树的前序、中序、后序遍历?

2、还有其他的树吗?比如平衡二叉树:线索二叉树、B+树、红黑树?(基本不问,简单说说算法思想)

3、图的广度优先遍历、深度优先遍历?

4、最短路径之类(基本不问,简单说说算法思想 )?

 

三、操作系统

1、能谈谈线程与进程的区别吗?

2、谈谈线程的不同状态?

3、线程start()以后马上就进入Runable阶段吗?

     处于Ready状态,需要等时间片。

4、什么是线程安全?

5、实现生产者-消费者问题(Java代码实现)?

6、IO有几种模型

     阻塞IO、异步IO、多路复用IO

二面:Java基础和架构思想

一、Java基础

1、谈谈java中基本数据类型?

2、谈谈equals与==有什么区别?

     去网上找题,别背概念。

3、String用什么实现的?

     内部的char数组为什么设计成final?

     String为什么设计成final?也是因为它的不可变性质吗?

     能谈谈equals和hashcode的分别的作用是什么吗?它们有什么区别?

4、能说一下有哪些容器吗?

     List:ArrayList、LinkedList、Vector

     Map:HashMap、Hashtable、TreeMap

     高并发Map:ConcurrentHashMap     

     ...

5、Map发问连环炮?

     话题一:

     HashMap与HashSet有什么区别?

     hashMap可以key为空或者value为空吗?可以同时为空吗?

     HashSet有什么特点?

   

     话题二: 

     HashMap底层是怎么实现的?

          1.6:数组+链表

          1.8:数组+链表/红黑树

     为什么要二次hash?谈谈扩容|什么时候扩容?     

     HashMap与Hashtable有什么区别吗?

     Hashtable加同步锁有什么问题?能不能有更好的实现方式?

     ConcurrentHashMap底层怎么实现的?怎么保证同步的(CAS)?

 

     话题三:

     如果前面的,你都答出来了?

     什么是CAS?它synchronized有什么区别?

     谈谈synchronized?

     能谈一下volatile吗?

 

6、JVM连环炮+并发编程?

     话题一:

     1、谈谈内存区域?

          堆、栈、方法区、(程序计算器、本地方法栈 )|可以不谈

     2、堆、栈、方法区分别有什么用?存储什么内容?

     3、能谈谈堆吗?

          新生代、老年代

     4、怎么判断对象不可用?

     5、能谈一下GC策略吗?它是怎么回收不可用对象的?

          标记-清除,复制、标记-整理、分代。

     6、能谈一下垃圾回收器吗?(暂无碰见问的)

     7、对象怎么分配的?

 

     话题二:

     1、谈一下类加载过程?

     2、谈一下双亲委派机制?

 

 

     话题三:

      1、谈一下Java内存模型

      2、谈一下Synchronized、volatile?

      2、谈一下AQS、CountDownLatch、ReentrantLock?(暂时还没有人问)

      3、谈一下ThreadLocal?

      4、谈一下CAS?

      5、谈一下线程池原理?

     

二、设计模式

     1、谈一下六种设计原则?开闭原则什么意思?里氏XX是什么意思?

     2、写一个单例模式?后续自己扩展各种的优缺点?

     3、谈一个你熟悉的设计模式?

 

三、缓存

     1、设计一个高效的缓存?

     2、谈谈LRU算法?(解决高效的缓存)

 

三、架构思想 、高并发、大数据量解决方案。

     1、一个很大的日记文件,统计出访问排行?

     2、mapreduce思想?谈谈shuffle?