一面:数据结构、网络、操作系统
一、计算机网络
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?