常考知识点
1、java的基本数据类型与包装类;
2、final修饰变量类方法;
3、String为什么是不可变的,以及new String(“abc”)创建了几个对象;
4、String、StringBuffer、以及StringBuilder的区别;
5、static修饰变量,方法,代码块;
6、重写跟重载的区别;
7、接口跟抽象类;
8、反射、继承、枚举、异常等知识点;
9、为什么要重写hashcode和equals方法,以及hashcode相同equals是否相同;
10、JDK 1.7与1.8之前的区别;
11、i++ 和 ++i;
集合相关
1、ArrayList的底层实现、扩容过程、add过程、Fail-Fast机制;
2、ArrayList与Linkedlist、Vectot的区别;
3、如何获得一个线程安全的List;
4、CopyOnWriteArrayList是如何实现线程安全的;
5、Linkedlist的底层实现,以及如何使用LinkedList实现一个LRU;
6、TreeSet、HashSet、LinkedHashSet的底层实现以及之间的区别;
7、PriorityQueue、LinkedBlockingQueue、ArrayBlockingQueue的实现以及区别;
8、HashMap的底层实现,扩容过程,达到阈值一定会扩容吗、put过程、树化过程,如何确定负载因子、以及为什么线程不安全和1.8做了哪些优化;
9、HashMap与HashTable的区别,如何获得一个线程安全的Map;
10、ConcurrentHashMap为什么是线程安全的,以及1.8做了哪些优化;
11、LinkedHashMap的底层实现,以及如何实现LRU;
12、TreeMap的底层实现;
13、迭代器的实现;
JVM相关
1、运行时数据区域,以及各个区域中存放什么,如何进行交互的;
2、一个对象从创建到回收的整个过程(从类加载到GC),能掌握这个基本就没什么太大的问题;
3、堆中的对象都存放什么数据,以及对象头中的数据(Synchronized锁升级过程中常问道);
4、判断内存区域是否需要回收、垃圾收集算法、垃圾收集器(主要掌握CMS、G1当然越多越好);
5、内存分配策略(如何在Eden和老年代中分配)、回收策略(Minor GC、Full GC);
6、Java内存模型(不是java内存区域),常在线程中问道(volatitle的设计与实现);
7、虚拟机类加载机制,类的生命周期,类加载器(可以尝试一下手写类加载器有被问道过)、双亲委派模型;
8、Jvm调优与故障处理,可以自己手动实现以下;
多线程与锁
1、进程与线程的区别,怎么根据硬件确定你最大创建的线程数(线程池需要考虑);
2、线程创建的方法,如何获得一个带返回值的线程;
3、线程的状态、线程的属性;
4、线程间的通信、sleep、yield、join、wait、notify\notifyAll、信号量、管道,以及sleep与wait的区别;
5、锁、偏向锁、轻量级锁、重量级锁、乐观锁、悲观锁、自旋锁、共享锁、排他锁、可重入锁和非可重入锁;
6、volatitle的底层实现;
7、synchronized底层实现、锁升级过程和实例锁跟类锁的区别,以及与Lock的区别;
8、CAS、AQS的原理与实现;
9、ReentrantLock、ReentrantReadWriteLock、StampedLock实现原理以及特点;
10、ThreadLocal的特性与底层原理;
11、线程池创建需要的参数、如何设置参数、线程池的运行过程、高并发下如何12、使用线程池;
Mysql相关
1、innoDB跟myisam的区别;
2、InnoDB的索引实现,唯一索引、覆盖索引、前缀索引、联合索引、最左匹配原则;
3、什么时候需要索引,以及如何选择索引;
4、MVCC的原理、redo、undo、回滚段;
5、自增锁、共享锁、排他锁、意向锁、插入意向锁、记录锁、间隙锁是什么;
6、事务的四大特性、并发一致性导致的问题、四种隔离级别解决的问题以及如何实现的(加了什么锁);
7、第三范式;
8、如何优化mysql;
Redis相关
1、Redis为什么这么快;
2、Redis数据结构以及底层实现;
3、Redis持久化机制、RDB、AOF以及如何选择,AOF重写;
4、Resdis过期键删除策略、内存淘汰策略;
5、Redis事务;
6、Redis高可用、高性能、Redis 主从架构、Redis Sentinel、Redis集群方案;
7、缓存穿透、缓存击穿、缓存雪崩原因以及解决方案;
Spring相关
1、介绍一下IOC和AOP;
2、spring配置bean实例化有哪些方式;
3、Bean注入属性有哪几种方式;
4、Spring bean的作用域;
5、Spring Bean的生命周期(建议看完整个IOC的生命周期有能力的看看源码;
6、Spring框架中的单例bean是线程安全的吗,以及如何处理;
7、Spring AOP底层实现,以及两种动态代理的实现(建议自己手动实现两种代理方式);
8、AOP中的各种名词概念;
9、循环依赖问题,要说三级缓存;
10、Spring事务的传播行为、隔离级别、超市属性、只读属性,回滚规则;
11、以及Spring中的各种注解;
SpringBoot
1、Springboot启动原理解析;
2、Springboot得生命周期;
3、SpringBoot自动配置模块;
4、SpringBoot Starters;
5、SpringBootApplication介绍;
SpringCloud
1、介绍各个组件的功能;
2、REST API与RPC;
3、Spring Cloud 和dubbo区别;
4、Eureka怎么实现高可用;
5、什么是Eureka的自我保护模式
6、Eureka和ZooKeeper都可以提供服务注册与发现的功能,请说说两个的区别;
Dubbo
1、服务注册与发现;
2、SPI;
3、服务暴露过程;
4、服务引用;
5、降级;
6、负载均衡;
高并发场景
1、如何定时得往数据库中插入500万条数据以及删除,保证数据插入正确做到最优解;
2、在高并发下如何设计使用Redis;
3、微服务和分布式是什么;
4、BIO和NIO;
5、在高并发场景下如何设计一个接口,保证这个接口高性能高可用;
6、分布式锁Redis和zookeep,和分布式事务。如果没有了解过分布式事务建议自己用本地消息表得方式实现,简单至少有个整体得概念。
算法
1、有时间得建议多刷刷算法,没时间得就看看常用算法
2、主要是数据结构,问了时间空间复杂度;
3、问了大顶堆;
4、如何读取一个很大得文件里面存入了很多url怎么找到最常用得url;
5、还有常见得url转换问题;
6、链表逆转,找两个数组中相同得数等等;
小编说
以上面试题和知识点你要是掌握一半了,你就可以开始向BAT这些大厂投简历了,你要是全部掌握了相信你起码也是一个阿里P7水平了,因为这些题目全部都是今年BAT大厂的面试真题和知识点。如果你对以上知识点并不熟悉的话,你得赶紧加快你学习的步伐了,因为这些全是现在面试的必问方向!
很多人会问,我对以上知识点并不熟悉掌握,可我并不知道从哪开始学,这些知识点又太多太杂了,我该侧重学哪些知识点呢?这些问题你不用担心,以上面试题和知识点我已经全部帮你整理成一份将近500页的PDF文件,每个知识点都有单独的分区和面试题整理,这份PDF完全是按照java工程师的方向整理的。
部分展示如下: