java面试题有哪些?

SpringMVC

  1. 什么是Spring MVC ?简单介绍下你对springMVC的理解?
  2. SpringMVC的流程?
  3. Springmvc的优点
  4. SpringMVC和struts2的区别有哪些?
  5. 如何解决POST请求中文乱码问题,GET的又如何处理呢?

Spring

  1. AOP(面向切面编程)的原理
  2. AOP的使用场景
  3. IOC(控制反转)的原理
  4. Spring框架中的单例bean是线程安全的吗?
  5. 常用的注解
  6. 用到的设计模式
  7. Spring的优点(解耦、很多主流框架的集成 低侵入式设计,代码的污染极低 等等)
  8. SpringBean的作用域
  9. 事务机制
  10. Spring的核心类,及作用 如BeanFactory、ApplicationContext、BeanWrapper
  11. Spring支持的ORM?
  12. BeanFactory 接口和 ApplicationContext 接口有什么区别 ?
  13. 依赖注入的方式有几种:接口注入、Setter注入、构造方法注入

Mybatis

  1. 什么是mybatis?
  2. MyBatis与Hibernate有哪些不同?
  3. Mybait的优缺点
  4. 常见的标签
  5. 分页及常用的分页插件
  6. #{}和${}的区别是什么?
  7. 一对一、一对多的关联查询 ?
  8. Mybatis的一级、二级缓存:
  9. Mybatis比IBatis比较大的几个改进是什么?
  10. IBatis和MyBatis在核心处理类分别叫什么?
  11. IBatis和MyBatis在细节上的不同有哪些?
  12. 为什么说Mybatis是半自动ORM映射工具?它与全自动的区别在哪里?
  13. MyBatis与Hibernate有哪些不同?

Hibernate

  1. Hibernate工作原理
  2. Hibernate是如何延迟加载(懒加载)?
  3. 缓存机制(一级缓存、二级缓存)
  4. Hibernate的查询方式有几种Hibernate中save、persist和saveOrUpdate这三个方法的不同之处?
  5. get()与load()的区别
  6. Hibernate中的SessionFactory有什么作用? SessionFactory是线程安全的吗?

SpringBoot

  1. 常用的starter有哪些
  2. Spring Boot 的配置文件有哪几种格式?它们有什么区别?
  3. Spring Boot 的核心注解是哪个?常用的注解(如@EnableEurekaClient
  4. @EnableFeignClients @FeignClient @EnableTransactionManagement
  5. @RestController @Configuration @Order @ControllerAdvice等)
  6. Spring Boot 需要独立的容器运行吗?( 可以不需要,内置了 Tomcat/ Jetty 等容器。)
  7. 运行 Spring Boot 有哪几种方式?
  8. SpringBoot与SpringCloud的关系
  9. SpringCloud的各类组件(Feign、Eureka、Hystrix等)的理解及使用

Nginx

  1. Nginx作用
  2. 常用命令
  3. 负载均衡的几种常用方式?
  4. session不同步怎么办
  5. 前端服务器集群后做负载均衡和动静分离

其他

  1. Thymeleaf、freemarker等模板引擎

  2. NoSQL:Redis、Memcache和MongoDB等的区别、使用

  3. xml解析(DOM解析、SAX解析、JDOM解析、DOM4J解析)

  4. POI实现Microsoft Office格式档案读和写的功能

  5. 多线程、线程池的原理及实现

  6. 设计模式

  7. Kafka、MQ等消息机制

  8. Sql优化

  9. jvm原理

  10. 常用搜索引擎Elasticsearch等

  11. 扎实的java基础


程序猿,他们想的是什么?他们想的永远都是技术,他们崇尚的也永远都是技术。

1.HashMap底层 扩容

JDK1.8的HashMap的底层是数组 链表 红黑树,发生hash碰撞采用拉链法解决冲突。数组中存放的是链表。链表的每一个节点是一个Entry,每个Entry中存放了Key,Value,hash值,还有指向下一个元素的引用。

当hashMap中的元素个数超过 [数组大小*负载因子] ,并且新的Entry落在了非空的位置,就会进行数组扩容,将会创建原来HashMap大小的两倍的数组,将原来的对象放入新的位置上。默认情况下,数组的大小为16,负载因子的默认值是0.75。

需要注意的是,hashmap扩容的判断,不一定是数量占比超过0.75就会扩容,如果初始数组16的时候,直接插入8个hashcode一样的不同的元素,此时链表并不会转换成红黑树,而是扩容,直到容量至少扩容到了64。

参考文章:

2.MySQL索引数据结构

MySQL中是使用B 树作为索引。它是B树的变种,因此是基于B树来改进的。

  • B 数的特性B 树索引的所有数据全部存储在叶子节点,并且数据是按照顺序排列的。B 树非叶子节点上不存储数据,仅存储索引。因为数据是按照顺序排列的。所以B 树在范围查找,排序查找,分组查找以及去重查找这些操作上效率很高。

参考文章:

3.索引失效的情况

  1. 如果条件中有or,即使其中有条件带索引也不会使用(要想使用or,又想让索引生效,只能将or条件中的每个列都加上索引)
  2. 对于多列索引,不是使用的第一部分(第一个),则不会使用索引(最左前缀原则)
  3. like查询以%开头
  4. 如果列类型是字符串,没有加单引号会导致失效
  5. 如果mysql估计使用全表扫描要比使用索引快,则不使用索引
  6. 索引列上做计算、函数、类型转换等操作

参考文章

4.最左匹配原则(abcd联合索引,查bcd可以吗)

  • 最左匹配原则就是指在联合索引中,如果你的 SQL 语句中用到了联合索引中的最左边的索引,那么这条 SQL 语句就可以利用这个联合索引去进行匹配。

5.数据库并发事务产生的问题

  • Read uncommitted 读未提交
  • Read committed 读提交
  • Repeatable read 重复读
  • Serializable 序列化

参考文章