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