Java知识结构——面试相关总结
前言
由于疫情的原因金三银四也不是那么好找工作了,虽然没打算换工作,不过每年这个时候出去面试一下也是不错的,确认一下自己当前的技术水平,顺便了解一下当前业内流行的技术。当然,要是有好的工作机会,跳槽也无妨..话不多说,总结一下Java的知识点,以后复习起来也容易些
一、Java基础
- 面向对象的概念
- ArrayList,LinkedList
- String为什么final,它的equals方法怎么重写的,String.internal,字符串常量池相关
- HashMap底层实现及在jdk1.7,1.8的区别,HashMap 的长度为什么是 2 的幂次方、HashMap 多线程操作导致死循环问题、HashMap 的线程安全实现有哪些、ConcurrentHashMap 的底层实现
- fail-fast 和 fail-safe
- Integer 缓存池(自动装拆箱)
- JDK 动态代理和 GClib 动态代理、JDK 动态代理具体实现原理、CGLib 动态代理、两者对比。
- 设计模式:单例模式、工厂模式、代理模式、策略模式等
二、多线程
- 悲观锁、乐观锁
- 分布式锁的实现(redis,zookeeper)
- Threadlocal 内存泄漏问题
- Synchronized是悲观锁,CAS是乐观锁
- CAS 带来的 ABA 问题。CAS 带来的循环时间长开销大问题。CAS 带来的只能保证一个共享变量的原子操作问题。CAS 是如何保证原子操作的。
- volatile关键字,指令重排序的问题
- 可重入锁,偏向锁,自旋锁
- ThreadPoolExecutor线程池创建参数
- 线程池的5种状态:
- 1.Running: 接受新task, 处理等待的task
- 2.ShutDown: 不接受新task,但处理等待的task;
- 3.Stop: 不接受新task, 不处理等待的task, 尝试打断正在执行的task;
- 4.Tidying:但所有task都被终止, worCount == 0的时候(workCount是指有效的线程数);
- 5.Terminated: 执行完terminated()方法;
- 多线程间通信的几种方式:
- 使用 volatile 关键字。
- 锁机制
- final 关键字
- ThreadLocal 类
- JUC 包中的相关 lock 类
三、框架
- Spring IOC AOP,如何解决循环依赖
- Spring中FactoryBean,BeanFactory与ApplicationContext
- Spring中的bean是否线程安全?(不安全)
- bean的生命周期,加载过程
- Springboot启动流程
- SpringMVC工作流程
- Mybatis核心对象及流程,缓存机制,与Hibernate对比
- hibernate的对象状态
- SpringCloud隔离,限流,熔断,降级
四、数据库
- MySQL、Oracle、索引、存储过程、查询优化,默认事务隔离级别:可重复读
- MySQL索引分为hash和B+,哈希表的特点就是可以快速的精确查询,但是不支持范围查询,B+树范围查询效率更高,B+树中一个节点为一页或页的倍数最为合适
- InnoDb 和 MyISAM 有什么区别,这两个引擎实现 BTree 索引方式的区别
- 索引的最左匹配原则,索引失效的几种情况,聚簇索引与非聚簇索引
- 事务特性,隔离级别。分布式事务的解决方案
- 慢Sql定位及优化,分库分表等
五、中间件
- Redis数据类型,消息队列,Lua脚本,Redis哨兵模式,持久化RDB和AOF。一致性hash
- Redis作为缓存时的数据一致性,缓存的三个问题及解决方案:缓存雪崩,缓存击穿,缓存穿透
- Kafka,RocketMQ,重复消费,顺序消息,事务消息,高可用,消息丢失,挤压场景,整个消息发送消费的流程
- Zookeeper:zookpeer 选举算法。Paxos 算法。Raft 算法。ZAB 协议
六、JVM
- JVM内存模型
- 程序计数器(记录当前线程)
- Java栈(虚拟机栈)
- 本地方法栈
- 堆
- 方法区
- 直接内存
- JVM 垃圾回收
- 垃圾判断标准
- 引用计数法
- 可达性分析算法(根索法)
- 垃圾回收算法
- 标记清除
- 复制算法(新生代From、To)
- 标记整理(老年代)
- 分代回收
- 垃圾收集器
- Serial 垃圾收集器(单线程、复制算法) (新生代)
- ParNew 垃圾收集器(Serial+多线程) (新生代)
- Parallel Scavenge 收集器(多线程复制算法、高效) (新生代)
- Serial Old 收集器(单线程标记整理算法 ) (老年代)
- Parallel Old 收集器(多线程标记整理算法)(老年代)
- CMS 收集器(多线程标记清除算法) (老年代)
- G1垃圾回收器
- Minor GC 和 Full GC,Full GC 触发条件
七、计算机网络
- OSI七层模型
- HTTP请求流程
- GET/POST区别
- UDP/TCP区别
- TCP三次握手及衍生问题:
- 什么是TIME-WAIT
- 为什么一定是三次握手不是两次
- 流量控制,滑动窗口,拥塞控制,慢启动,拥塞避免,快重传,快恢复
- HTTP 1.0、1.1、2.0
- HTTPS的流程
- SSL是什么
- TCP/IP四层协议
- DNS,ARP协议原理
- DOS攻击如何解决
- DNS欺骗如何解决,ARP欺骗等
- XSS、CSRF、iFrame安全问题
- Session的实现机制,分布式环境下的注意事项
- 如何判断远程机器上某个端口是否开启
- nginx+tomcat,服务端如何获取客户端请求IP
八、算法
- 数据结构:队列,数组,栈,链表,树,散列,堆,图
- 二叉树遍历方式:前序,中序,后序遍历,层次遍历
- 最短路径算法:dijkstra 迪杰斯特拉算法(时间复杂度O(n²)),floyd 弗洛依德算法(时间复杂度O(n³))
- 图:深度优先搜索(DFS),广度优先搜索(BFS)
- 八种数组排序:
-
九、Linux
- 常用命令ls,netstat -anp,top,ifconfig,df -h,ps -ef
- JVM调优命令jstat,jmap,jstack
- 进程调度算法
- 先来先服务FCFS
- 短作业优先SPN
- 最短剩余时间优先SRT
- 高响应比优先HRRN
- 时间片轮转
- 优先权
- 多级反馈队列
- 用户态与内核态转换
遇到的主要问题基本是这些,还没有面试过大厂,不知道大厂面试会问一些什么其他问题,以后有机会面试了再记录下来。