年末了在这里做一个年度总结,今年面试了不少的大厂(其实就是想体验一下各大厂的技术深度,看一下自己与岗位的匹配度),总结的面试高频题目,发现 Java 程序员确实要学的东西太多了:Linux、JVM、Redis、MySQL、Tomcat、MyCat、Spring(全家桶)、各大框架、Netty、微服务、分布式、高并发、Nginx、多线程、中台(今年流行的)、算法、设计模式、中间件等等等等,以上相关的题目我都有做一个整理,以及真题解析。
注意注意:Spring+逻辑算法+MySQL+中间件+Redis+并发编程+JVM+消息队列等面试答案、学习文档笔记、思维导图(xmind)。
技术面试必备知识
数据库:MySQL、SQL、Database、Redis
Java:基础、容器、并发、虚拟机、IO
系统设计:设计基础、分布式、集群、攻击技术、缓存、消息队列
面向对象:设计模式、面向对象思想
网络:计算机网络、HTTP、Socket
操作系统:计算机操作系统、Linux
算法:剑指 Offer 题解、Leetcode 题解、算法
Java 经典高频问题
运行程序之前
基础知识
Java 三大特性
异常
多线程
常用 API
IO
集合框架
网络编程
Java 基础学习路线思维导图
Spring Boot 灵魂拷问
Spring Boot、Spring MVC 和 Spring 有什么区别?
什么是自动配置?
什么是 Spring Boot Stater ?
你能否举一个例子来解释更多 Staters 的内容?
Spring Boot 还提供了其它的哪些 Starter Project Options?
Spring 是如何快速创建产品就绪应用程序的?
创建一个 Spring Boot Project 的最简单的方法是什么?
Spring Initializr 是创建 Spring Boot Projects 的唯一
为什么我们需要 spring-boot-maven-plugin?
如何使用 SpringBoot 自动重装我的应用程序?
什么是嵌入式服务器?我们为什么要使用嵌入式服务器呢?
如何在 Spring Boot 中添加通用的 JS 代码?
Spring 学习路线思维导图
Java 面试宝典
String 类能被继承吗,为什么
String,Stringbuffer,StringBuilder 的区别?
ArrayList 和 LinkedList 有什么区别
类的实例化顺序,比如父类静态数据,构造函数,字段,子类静态数据,构造函数,字段,他们的执行顺序
用过哪些 Map,都有什么区别,HashMap 是线程安全的吗,并发下使用的 Map 是什么,他们内部原理分别是什么,比如 hashcode,扩容等
HashMap 为什么 get 和 set 那么快,concurrentHashMap 为什么能提高并发
抽象类和接口的区别,类可以继承多个类么,接口可以继承多个接口么,类可以实现多个接口么
什么情况下会发生栈内存溢出
什么是 nio,原理
反射中,Class.forName 和 ClassLoader 区别
tomcat 结构,类加载器流程
讲讲 Spring 事务的传播属性,AOP 原理,动态代理与 cglib 实现的区别,AOP 有哪几种实现方式
Spring 的 beanFactory 和 factoryBean 的区别
Spring 加载流程
Spring 如何管理事务的
RabbitMQ 面试专题
什么是 rabbitmq
为什么要使用 rabbitmq
使用 rabbitmq 的场景
如何确保消息正确地发送至 RabbitMQ? 如何确保消息接收方消费了消息?
如何避免消息重复投递或重复消费?
消息基于什么传输?
消息如何分发?
消息怎么路由?
如何确保消息不丢失?
使用 RabbitMQ 有什么好处?
rabbitmq 的集群
mq 的缺点
Java 程序设计总复习题
编写一个 Java 程序实现多线程,在线程中输出线程的名字,隔 300 毫秒输出一次,共 输出 20 次。
编写程序,在屏幕上显示带标题的窗口,并添加一个按钮。当用户单击按钮时,结束程序
编写一个 Java 程序将当 100,101,102,103,104,105 个数以数组的形式写入到 Dest.txt 文件 中,并以相反的顺序读出显示在屏幕上
应用 FileInputStream 类,编写应用程序,从磁盘上读取一个 Java 程序,并将源程序代 码显示在屏幕上。(被读取的文件路径为:E:/myjava/Hello.java)
利用线程方法编写 JApplet 程序,实现在浏览器端实时动态显示本地系统时钟
利用 Applet 类和 Runnable 接口实现滚动字幕,其中字幕文字(“学好 Java 有工作”)和 时间间隔(“200”)需要由页面文件中<Applet>标记的子标记<Param>传递。
MySQL 灵魂拷问
Mysql 的技术特点是什么?
Heap 表是什么?
Mysql 服务器默认端口是什么?
与 Oracle 相比,Mysql 有什么优势?
如何区分 FLOAT 和 DOUBLE?
如何获取当前的 Mysql 版本?
Mysql 中使用什么存储引擎?
Mysql 驱动程序是什么?
主键和候选键有什么区别?
如何使用 Unix shell 登录 Mysql?
你怎么看到为表格定义的所有索引?
InnoDB 是什么?
MySQL 学习路线思维导图
23 种设计模式知识要点
单例模式
工厂模式
抽象工厂模式
模板方法模式
建造者模式
代理模式
原型模式
中介者模式
命令模式
责任链模式
设计模式学习路线思维导图
并发编程面试专题
Java 中守护线程和本地线程区别
什么是多线程中的上下文切换
死锁与活锁的区别,死锁与饥饿的区别
线程与进程的区别
Java 中用到的线程调度算法是什么
什么是线程组,为什么在 Java 中不推荐使用
在 Java 中 Executor 和 Executors 的区别
什么是原子操作,在 Java Concurrency API 中有哪些原子类(atomic classes)
什么是 Executors 框架
什么是阻塞队列,阻塞队列的实现原理是什么,如何使用阻塞队列来实现生产者-消费者模型
并发编程学习路线思维导图
JVM 虚拟机面试专题
Java 类加载过程?
描述一下 JVM 加载 Class 文件的原理机制?
Java 内存分配。
GC 是什么? 为什么要有 GC?
简述 Java 垃圾回收机制。
如何判断一个对象是否存活?(或者 GC 对象的判定方法)
垃圾回收的优点和原理。并考虑 2 种回收机制。
垃圾回收器的基本原理是什么?垃圾回收器可以马上回收内存吗?有什么办法主动通知虚拟机进行垃圾回收?
Java 中会存在内存泄漏吗,请简单描述。
深拷贝和浅拷贝
JVM 虚拟机学习路线思维导图
Redis 面试专题
为什么要用 redis /为什么要用缓存
为什么要用 redis 而不用 map/guava 做缓存?
redis 和 memcached 的区别
redis 常见数据结构以及使用场景分析
redis 设置过期时间
redis 内存淘汰机制(MySQL 里有 2000w 数据,Redis 中只存 20w 的数据,如何保证 Redis 中的数据都是热点数据?)
redis 持久化机制(怎么保证 redis 挂掉之后再重启数据可以进行恢复)
redis 事务
Redis 常见异常及解决方案
分布式环境下常见的应用场景
Redis 学习路线思维导图
Linux 面试专题
Linux 中主要有哪几种内核锁?
Linux 中的用户模式和内核模式是什么含意?
怎样申请大块内核内存?
用户进程间通信主要哪几种方式?
通过伙伴系统申请内核内存的函数有哪些?
面试各种难题应对方案
面试笔试经验技巧:
如何巧妙的回答面试官的问题?
如何回答技术性的问题?
如何回答非技术性的问题?
如何回答快速估算类问题?
如何回答算法设计问题?
如何回答系统设计问题?
如何解决求职中的时间冲突问题?
什么是职场暗语?
如何应对自己不会回答的问题?
最后
对于上面所有的问题我都有整理好的答案,记录在我的 Java 学习笔记里,这份笔记包括了 Linux、JVM、Redis、MySQL、Tomcat、MyCat、Spring(全家桶)、各大框架、Netty、微服务、分布式、高并发、Nginx、多线程、中台(今年流行的)、算法、设计模式、中间件、消息队列、HTTP 网络模块、等面试答案、学习文档笔记、思维导图(xmind);内容实在是太多了,没办法都展示出来。