过完年之后就是春招,想面试的小伙伴想必都在着手准备吧!那么今天我们就来看看!
原因有三个:第一,我想为每一个为梦想时刻准备着的“有心人”,尽一份自己的力量,提供一份高度精华的Java面试清单。
第二,目前市面上的面试题不是答案不准确就是内容覆盖面太窄,所以提供一份经典而又准确的面试题是非常有必要的。
第三,本文会对部分面试题提供详细解读和代码案例,让读者知其然并知其所以然,从而学到更多的知识。(附带答案文档)
一、Java基础(JVM、设计模式、容器、反射、对象拷贝、Java Web、异常、网络)
二、Java多线程与并发编程(JMM、HashMap)
三、开源框架(Spring、Spring MVC、MyBatis)
四、Java微服务(Spring Boot、Spring Cloud)
五、分布式中间件(RabbitMQ、Zookeeper、Kafka、Dubbo、Netty、ShardingSphere、FastDFS、Elasticsearch)
六、数据库(MySQL、Redis、MongoDB)
七、性能调优(SQL、Nginx、Tomcat)
正文
2.==和equals的区别是什么?
3.两个对象的hashCode() 相同,则equals() 也一定为true,对吗?
8.如何将字符串反转?
10.抽象类必须要有抽象方法吗?
11.普通类和抽象类有哪些区别?
12.抽象类能使用final修饰吗?
13.接口和抽象类有什么区别?
2.64位JVM中,int的长度是多数?
4.32位和64位的 JVM,int类型变量的长度是多数?
7.怎样通过Java程序来判断JVM是32位还是64位?
9.解释Java堆空间及GC?
有哪几种设计模式?(单例模式、工厂模式、观察者模式、外观模式、模版方法模式状态模式)解释一下?
2.简单工厂和抽象工厂有什么区别?(简单工厂、工厂方法、抽象工厂)解释一下?
11.如何一边遍历一边删除Collection中的元素?
ArrayList的底层是数组
LinkedList的底层是双向链表。
12.为什么ArrayList的elementData数组要加上transient修饰
由于ArrayList有自动扩容机制,所以ArrayList的elementData数组大小往往比现有的元素数量大,如果不加transient直接序列化的话会把数组中空余的位置也序列化了,浪费不少的空间。
13.为什么HashMap数组的长度是2的幂次方?
14.为什么HashMap中适合用Integer,String这样的基础类型作为key?
15.为什么要把链表转为红黑树,阈值为什么是8?
1.什么是反射?
2.什么是Java序列化?什么情况下需要序列化?
3.动态代理是什么?有哪些应用?
4.什么叫对象序列化,什么是反序列化,实现对象序列化需要做哪些工作?
5.哪里用到反射机制?
6.反射机制的优缺点?
8.如何使用Java的反射?
1.为什么要使用克隆?
2.如何实现对象克隆?
3.深拷贝和浅拷贝区别是什么?
3.说一下JSP的4种作用域?
5.说一下session的工作原理?
6.如果客户端禁止cookie能实现session还能用吗?
8.如何避免SQL注入?
9.什么是XSS攻击,如何避免?
10.什么是CSRF攻击,如何避免?
4.常见的异常类有哪些?
3.简述tcp和udp的区别?
5.说一下tcp粘包是怎么产生的?
8.如何实现跨域?
9.说一下JSONP实现原理?
1.并行和并发有什么区别?
2.线程和进程的区别?
3.守护线程是什么?
4.创建线程有哪几种方式?
5.说一下runnable 和callable有什么区别?
6.线程有哪些状态?
9.线程的 run() 和start() 有什么区别?
10.创建线程池有哪几种方式?
11.线程池中submit() 和execute() 方法有什么区别?
12.在Java程序中怎么保证多线程的运行安全?
13.多线程中synchronized锁升级的原理是什么?
14.什么是死锁?怎么防止死锁?
16.说一下synchronized底层实现原理?
20.什么是反射?什么是 Java 序列化?什么情况下需要序列化?
21.动态代理是什么?有哪些应用?
22.在多线程中,什么是上下文切换?
.........
1.什么是Java内存模型?
3.处理器优化和指令重排
4.并发编程会带来什么问题?
5.什么是内存模型?
6.内存模型怎么解决并发问题的?
6.为什么String, Interger这样的wrapper类适合作为键?
一般问题
1.不同版本的Spring Framework有哪些主要功能?
2.什么是Spring Framework?
4.列举Spring Framework的优点。
6.什么是Spring配置文件?
8.使用Spring有哪些方式?
依赖注入(Ioc)
10.什么是Spring IOC容器?
11.什么是依赖注入?
12.可以通过多少种方式完成依赖注入?
13.区分构造函数注入和setter注入
15.区分BeanFactory和ApplicationContext。
16.列举IoC的一些好处。
Beans
18.什么是spring bean?
22.什么是spring的内部bean?
23.什么是spring装配
24.自动装配有哪些方式?
25.自动装配有什么局限?
注解
26.什么是基于注解的容器配置?
27.如何在spring中启动注解装配?
28.@Component, @Controller, @Repository@, Service有何区别?
29.@Required注解有什么用?
30.@Autowired注解有什么用?
31.@Qualifier注解有什么用?
32.@RequestMapping注解有什么用?
数据访问
34.列举Spring DAO抛出的异常。
36.使用Spring访问Hibernate的方法有哪些?
37.列举spring支持的事务管理类型
1.什么是Spring MVC?简单介绍下你对Spring MVC的理解?
核心组件
4.什么是DispatcherServlet
5.什么是Spring MVC框架的控制器?
工作原理
7.请描述Spring MVC的工作流程?描述一下 DispatcherServlet 的工作流程?
MVC框架
常用注解
9.注解原理是什么?
12.@Controller注解的作用
13.@RequestMapping注解的作用
14.@ResponseBody注解的作用
15.@PathVariable和@RequestParam的区别
其他
19.如何解决POST请求中文乱码问题,GET的又如何处理呢?
21.如果在拦截请求中,我想拦截get方式提交的方法,怎么配置
22.怎样在方法里面得到Request,或者Session?
23.如果前台有很多个参数传入,并且这些参数都是一个对象的,那么怎么样快速得到这个对象?
26.怎么样把ModelMap里面的数据放入Session里面?
28.介绍一下WebApplicationContext
1.什么是Mybatis?
6.#{}和${}的区别是什么?
7.当实体类中的属性名和表中的字段名不一样 ,怎么办 ?
8.模糊查询like语句该怎么写?
9.通常一个Xml映射文件,都会写一个Dao接口与之对应,请问,这个Dao接口的工作原理是什么?Dao接口里的方法,参数不同时,方法能重载吗?
12.如何执行批量插入?
13.如何获取自动生成的(主)键值?
14.在mapper中如何传递多个参数?
17.为什么说Mybatis是半自动ORM映射工具?它与全自动的区别在哪里?
18.一对一、一对多的关联查询 ?
23.什么是MyBatis的接口绑定?有哪些实现方式
24.使用MyBatis的mapper接口调用时有哪些要求?
26.简述Mybatis的插件运行原理,以及如何编写一个插件。
四、Java微服务(Spring Boot、Spring Cloud)
1.什么是 Spring Boot?
3.什么是 JavaConfig?
4.如何重新加载 Spring Boot 上的更改,而无需重新启动服务器?
6.如何在 Spring Boot 中禁用 Actuator 端点安全性?
7.如何在自定义端口上运行 Spring Boot 应用程序?
8.什么是 YAML?
9.如何实现 Spring Boot 应用程序的安全性?
10.如何集成 Spring Boot 和 ActiveMQ?
11.如何使用 Spring Boot 实现分页和排序?
12.什么是 Swagger?你用 Spring Boot 实现了它吗?
13.什么是 Spring Profiles?
14.什么是 Spring Batch?
15.什么是 FreeMarker 模板?
16.如何使用 Spring Boot 实现异常处理?
17.您使用了哪些 starter maven 依赖项?
18.什么是 CSRF 攻击?
19.什么是 WebSockets?
.........
1.什么是Spring Cloud?
2.使用Spring Cloud有什么优势?
3.服务注册和发现是什么意思?Spring Cloud 如何实现?
4.负载平衡的意义什么?
5.什么是Hystrix?它如何实现容错?
6.什么是 Hystrix断路器?我们需要它吗?
7.什么是Netflix Feign?它的优点是什么?
8.什么是Spring Cloud Bus?我们需要它吗?
五、分布式中间件(RabbitMQ、Zookeeper、Kafka、Dubbo、Netty、ShardingSphere、FastDFS、Elasticsearch)
1.什么是rabbitmq
2.为什么要使用rabbitmq
3.使用rabbitmq的场景
4.如何确保消息正确地发送至 RabbitMQ? 如何确保消息接收方消费了消息?
5.如何避免消息重复投递或重复消费?
6.消息基于什么传输?
7.消息如何分发?
8.消息怎么路由?
9.如何确保消息不丢失?
10.使用 RabbitMQ有什么好处?
13.如何保证高可用的?
14.如何保证消息的可靠传输?如果消息丢了怎么办
15.如何保证消息的顺序性
1.什么是Zookeeper?
5.四种类型的数据节点Znode
11.分布式集群中为什么会有Master?
13.集群最少要几台机器,集群规则是怎样的?
17.说几个zookeeper常用的命令。
3.数据文件分段segment(顺序读写、分段命令、二分查找)
4.负载均衡(partition 会均衡分布到不同 broker 上)
5.批量发送
6.压缩(GZIP 或 Snappy)
7.消费者设计
9.如何获取topic主题的列表?
10.生产者和消费者的命令行是什么?
12.讲讲kafka维护消费状态跟踪的方法
15.讲一讲kafka的ack的三种机制
1.为什么要用Dubbo?
3.默认使用的是什么通信框架,还有别的选择吗?
4.一般使用什么注册中心?还有别的选择吗?
5.默认使用什么序列化框架,你知道的还有哪些?
6.服务提供者能实现失效提出是什么原理?
7.服务上线怎么不影响旧版本?
9.同一个服务多个注册的情况下可以直连某一个服务吗?
10.什么是Netty的零拷贝?
13.默认情况Netty起多少线程?何时启动?
14.了解哪几种序列化协议?
15.如何选择序列化协议?
1..sharding-jdbc是否支持批量插入
5.分库分表使用like查询,是否能查询出来?性能如何?会去查询所有的库和表吗?
1.什么是FastDFS?
5.详细描述一下Elasticsearch索引文档的过程
6.详细描述一下Elasticsearch搜索的过程?
11.客户端在和集群连接时,如何选择特定的节点执行请求的?
12.详细描述一下Elasticsearch索引文档的过程。
13.详细描述一下Elasticsearch更新和删除文档的过程。
14.详细描述一下Elasticsearch搜索的过程。
15.在Elasticsearch中,是怎么根据一个词找到对应的倒排索引的?
17.对于GC方面,在使用Elasticsearch时要注意什么?
19.在并发情况下,Elasticsearch如果保证读写一致?
20.如何监控Elasticsearch集群状态?
六、数据库(MySQL、Redis)
1.数据库存储引擎、索引
5.数据库引擎有哪些?
7.常见索引原则有?
8.数据库的三范式是什么?
9.第一范式(1st NF-列都是不可再分)、第二范式(2nd NF- 每个表只描述一件事情)、第三范式(3rd NF-不存在对非主键列的传递依赖)
10.数据库是事务
12.简单说一说drop、delete与truncate的区别
13.什么是视图?
14.什么是内联接、左外联接、右外联接?
15.并发事务带来哪些问题?
16.事务隔离级别有哪些?MySQL的默认隔离级别是?
17.大表如何优化?
18.分库分表之后,id主键如何处理
19.存储过程(特定功能的SQL语句集)
22.简述在MySQL数据库中MyISAM和InnoDB的区别
1.什么是Redis?
2.怎么理解Redis事务?
8.一个字符串类型的值能存储最大容量是多少?
10.缓存雪崩、缓存穿透、缓存预热、缓存更新、缓存降级等问题
11.一个Redis实例最多能存放多少的Keys?List、Set、Sorted Set他们最多能存放多少元素?
16.为什么Redis的操作是原子性的,怎么保证原子性的?
18.使用过Redis分布式锁么,它是什么回事?
19.怎么测试Redis的连通性?
22.为什么Redis需要把所有数据放到内存中?
26.为什么Redis是单线程的?
3.你怎么比较MongoDB、CouchDB及CouchBase?
5.分析器在MongoDB中的作用是什么?
6.能否使用日志特征进行安全备份?
7.数据在什么时候才会扩展到多个分片(shard)里?
8.我可以把moveChunk目录里的旧文件删除吗?
9.如果块移动操作(moveChunk)失败了,我需要手动清除部分转移的文档吗?
七、性能调优(SQL、Nginx、Tomcat)
4.与Oracle相比,Mysql 有什么优势?
5.如何区分FLOAT和DOUBLE?
6.区分CHAR_LENGTH和LENGTH?
8.在Mysql中ENUM的用法是什么?
9.如何定义REGEXP?
11.列的字符串类型可以是什么?
12.如何获取当前的Mysql版本?
14.主键和候选键有什么区别?
1.什么是Nginx?
2.请列举Nginx的一些特性
3.请列举Nginx和Apache 之间的不同点
4.请解释Nginx如何处理HTTP请求
5.在Nginx中,如何使用未定义的服务器名称来阻止处理请求?
6.使用“反向代理服务器”的优点是什么?
7.请列举Nginx服务器的最佳用途。
8.请解释Nginx服务器上的Master和Worker进程分别是什么?
9.请解释代理设计中的正向代理和反向代理?
10.请解释是否有可能将Nginx的错误替换为502错误、503?
11.在Nginx中,解释如何在URL中保留双斜线?
13.解释如何在Nginx服务器上添加模块?
6.内存调优
7.垃圾回收策略调优
8.共享session处理
9.添加JMS远程监控
10.专业点的分析工具有
11.监视Tomcat的内存使用情况
12.打印类的加载情况及对象的回收情况
1.绝对路径用什么符号表示?当前目录、上层目录用什么表示?主目录用什么表示? 切换目录用什么命令?
2.使用什么命令查看IP地址及接口信息?
3.怎么清屏?怎么退出当前命令?怎么执行睡眠?怎么查看当
4.通过什么命令指定命令提示符?
5.查看文件有哪些命令
6.列举几个常用的Linux命令
7.怎么对命令进行取别名?
8.建立软链接(快捷方式),以及硬链接的命令
9.当你需要给命令绑定一个宏或者按键的时候,应该怎么做呢?
10.查看文件内容有哪些命令可以使用?
11.随意写文件命令?怎么向屏幕输出带空格的字符串,比如”hello world”?
12.你的系统目前有许多正在运行的任务,在不重启机器的条件下,有什么方法可以把所有正在运行的进程移除呢?
13.移动文件用哪个命令?改名用哪个命令?
14.复制文件用哪个命令?如果需要连同文件夹一块复制呢?如果需要有提示功能呢?
15.怎样一页一页地查看一个大文件的内容呢?
17.用什么命令对一个文件的内容进行统计?(行号、单词数、字节数)
20.怎样查看一个Linux命令的概要与用法?假设你在/bin目录中偶然看到一个你从没见过的的命令,怎样才能知道它的作用和用法呢?
考虑篇幅,就着重挑了一些常见的重要的面试题展示出来了。所有的面试题目都不是一成不变的,上面的面试题只是给大家一个借鉴作用,最主要的是给自己增加知识的储备,有备无患。