1、计算机网络

* TCP三次握手过程、参数;
* TCP四次挥手过程、参数;
* TCP和UDP的区别?应用场景有何不同?
* TCP阻塞控制;
* OSI七层模型、各层所用到的协议;
* 一些常见协议的原理:ARP、ICMP、FTP等(TCP UDP更不用说啦,一定要了解)
2、数据库知识

* 数据库有哪些索引?原理是什么?
* 索引有什么作用?有什么特点
* 索引为什么用B+树?
* B+树和B-树有什么区别?
* mysql中MyISAM和InnoDB的区别?
* 事务的四大特性(常考)
* 数据库优化的一些策略;
* 增删改查要熟悉,随时可能提一个需求让你写一个SQL语句;
* 数据库索引:聚集索引和非聚集索引的区别?
3、编程语言基础(以Java为例)

* 面向对象的特性?(封装继承多态)如何体现出来?
* 重载和重写有什么区别?
* 集合类有哪些?(常考)
* Set和List的区别;
* ArrayList、Linkedlist、Vector区别?(常考,建议看下底层实现代码)
* ArrayList如何扩容?(常考)
* Map下Hashmap、TreeMap的区别?
* TreeMap底层是什么?红黑树还是二叉树?
* Map、List下哪些类是线程安全的?(常考)
* Hashmap的扩容机制;
* Hashmap如何解决哈希冲突?与HashTable有何不同?
* 正则表达式;(服务端岗位常考)
* 接口跟抽象类的区别?
* Java可以多继承吗?
* JVM垃圾回收机制;(常考)
* Java中是值传递还是引用传递?
* Java中锁机制;
* Lock的底层怎么实现的?源码怎么写的?
* sychronized的底层实现?
* sychronized修饰静态方法和修饰普通方法有什么区别?
* 异常类有哪些实现类、子类?
* 多线程中如何保证线程安全?
* 多线程有哪些常见的线程安全的类?
* 如何开启一个线程?
* get请求和post请求有什么区别?
* 反射的原理?
* ClassLoader和Class.forName()这两个有什么区别?(反射源码的考察)
* NIO这一块有什么了解?
4、项目框架(以Spring为例)

* 简述Springmvc的流程;
* Spring的核心特性是什么?
* 理解AOP、IoC的基本原理;
* AOP的一些场景应用;
* Springmvc和Springboot有什么区别?
* Springboot为什么配置简单?(即它自动做了什么操作才能简化程序员的操作)
* Spring容器的加载顺序?
* @Resource 和 @Autowired 区别?分别用在什么场景?
* 静态代理和动态代理的区别?
* Hibernate和mybatis的区别?
* mybatis是如何工作的?
* Hibernate对象有几个状态值?
  这是之前在面试过程中经常会问到的一些问题,我汇总贴在上面,后面也会不定时地进行更新,希望能帮到大家,祝愿大家都能找到一份满意的工作!

  一些推荐的小Tips:

*   JVM推荐的书籍:周志明的《深入了解Java虚拟机》,我觉得讲得比较明白比较细,我就看了前一部分已经完全够应付所有的面试问到的JVM问题了;
*
Spring书籍:《Spring源码深度解析》,我个人觉得不是很好啃下来,可能需要一些Spring项目开发经验的会好理解一些,硬啃的话很多地方可能看不太懂,建议更多地与实践相结合;
* Java并发:《Java并发编程实战》,我觉得这一本讲得也很好,也建议反复地看反复消化,对于面试问到的一些底层原理讲解得很清楚;
* 数据库:《高性能MySQL》,很厚,慢慢看吧。其实数据库的话,更多问到的是索引机制这一块,还有性能调优之类等,问的方向比较固定。
* 算法及代码:建议牛客网或者LeeCode,我面试的时候坚持一天一道题,只要消化理解了,其实进步还是特别大的,特别是思路上的提高真的很快。