前言
最近面试了很多公司,就其中的技术点做个梳理,即是分享,也当做是个笔记
一、Java
1、Java基础
2、Java集合框架
List、Set、Map的区别?
List : 存储的元素是有序的、可重复的。
Set : 存储的元素是⽆序的、不可重复的。
Map: 使⽤键值对key-value存储,Key 是⽆序的、不可重复的,value 是⽆序的、可重复的,每个键最多映射到⼀个值。
HashMap底层实现原理?
ArrayList底层实现原理?
3、Java并发编程
进程与线程的区别?
什么是线程安全与线程不安全?
synchronized有哪些优缺点?
优点:
1.在同一个时刻,只有一个线程可以执行某个方法或者某个代码块。
2.一个线程的变化(主要是共享数据的变化)被其他线程所看到(可见性)
缺点:
1.无法判断获取锁的状态。
2.如果锁的那个方法执行时间较长就会一直占用着不去释放,不能让使用同一把锁的方法继续执行
3.使用synchronized,当多个线程尝试获取锁时,未获取到锁的线程会不断的尝试获取锁,而不会发生中断,这样会造成性能消耗。
4.有可能产生死锁,导致程序中断。
4、JVM
JVM内存泄漏与内存溢出有什么区别?
内存泄漏:
程序运行结束后,没有释放所占用的内存空间(如果是关键业务代码问题,导致可用内存越来越少,最终会变成内存溢出)
内存溢出:
程序运行时,在申请内存空间时,没有足够的内存空间供其正常使用,导致程序运行停止,并抛出 OutOfMemoryError
。
二、Spring
什么是Spring?
Spring是一个开放源代码的设计层面框架,Spring的目的解决软件开发的复杂性。
Spring的核心是什么?
依赖注⼊(DI)和面向切面编程(AOP)
Spring中bean的生命周期?
1、通过构造构创建bean实例(默认无参数构造)
2、为bean的属性设置值与对其他bean引用(调用set方法)
3、把bean实例传递bean后置处理器的方法BeanBeforePostProcessor
4、调用bean的初始化方法(需要进行配置,可在方法上加注解:@PostConstruct)
5、把bean实例传递bean后置处理器的方法BeanAfterPostProcessor
6、获取bean实例对象
7、当容器关闭时,调用bean的销毁方法(需要进行配置,可在方法上加注解:@PreDestroy)
spring事务传播特性?
spring事务不生效的场景?
Spring循环依赖是什么?怎么解决的?
Spring MVC怎样统一处理异常?
全局异常处理:
类注解@RestControllerAdvice+方法注解@ExceptionHandler
@Validated 或 @Valid 验证错误返回全局处理:
类注解@RestControllerAdvice+方法注解@BindExceptionHandler、@ExceptionHandler
@RestControllerAdvice(basePackages = "com.xxx..controller")
public class BaseController {
/**
* 全局异常处理
*
* @param e
* @return
*/
@ExceptionHandler(value = Exception.class)
public ResponseData exceptionHandle(Throwable e) {
}
/**
* Validated 或 Valid 验证错误返回处理
*
* @param e
* @param bindingResult
* @return
*/
@BindExceptionHandler
@ExceptionHandler(value = BindException.class)
public ResponseData bindExceptionHandle(BindException e, BindingResult bindingResult) {
// @Validated 或 @Valid 验证错误返回处理
List<FieldError> fieldErrorList = bindingResult.getFieldErrors();
StringBuilder errorMsgSb = new StringBuilder();
for (FieldError fieldError : fieldErrorList) {
this.errorMsgHandle(errorMsgSb, fieldError.getField(), fieldError.getDefaultMessage());
}
return toFailure(ResponseCodeEnum.ERROR_VALID, errorMsgSb.toString());
}
}
三、Mybatis
Mybatis怎样创建数据源?
Mybatis一级缓存和二级缓存的区别?
一级缓存:
默认开启;sqlsession级别
一级缓存时执行commit,close,增删改等操作,就会清空当前的一级缓存;
当对SqlSession执行更新操作(update、delete、insert)后并执行commit时,不仅清空其自身的一级缓存(执行更新操作的效果),也清空二级缓存(执行commit()的效果)。
二级缓存:
手动开启;mapper级别
二级缓存指的就是同一个namespace下的mapper,二级缓存中,也有一个map结构,这个区域就是一级缓存区域。一级缓存中的key是由sql语句、条件、statement等信息组成一个唯一值。一级缓存中的value,就是查询出的结果对象。
Mybatis的mapper接口方法是怎样被调用到的?
四、Redis
Redis支持哪些数据类型?
String、Hash、List、Set、ZSet
Redis缓存雪崩、缓存击穿、缓存穿透的分别含义?如何避免?
Redis分布式锁怎么实现?
1.SETNX + EXPIRE
2.Redisson框架
3.多机实现的分布式锁Redlock+Redisson
https://www.cnblogs.com/wangyingshuo/p/14510524.html
Redis怎样实现集群?(例如:哨兵模式)
五、MySQL
MySQL有几种索引类型?
1.普通索引
2.唯一索引
3.主键索引
4.聚合索引
5.全文索引
MySQL优化策略有哪些?
1.全值匹配
2.最佳左前缀法则
3.避免索引列操作
4.范围条件放最后
5.覆盖索引
6.慎用不等于<>
7.字段默认为Null,会影响索引
8.Like查询要当心
9.字符类型加单引号
10.OR改UNION会提高效率
详细请查看:https://blog.csdn.net/ylfcf/article/details/113099341
MySQL的索引是什么数据结构?
MySQL索引的数据结构是树,常用存储引擎innodb采用的是B+Tree
六、Spring Boot
1、什么是 Spring Boot?
Spring Boot 是可以轻松创建,“直接运行”的独立的、生产级的基于 Spring 的应用程序。
2、Spring Boot 有哪些特征?
- 创建独立的 Spring 应用程序
- 直接嵌入 Tomcat、Jetty 或 Undertow(无需部署 WAR 文件)
- 提供默认的“入门”依赖项以简化您的构建配置
- 尽可能自动配置 Spring 和 第三方库
- 提供生产就绪功能,例如指标、健康检查和外部化配置
- 完全无需代码生成,无需 XML 配置
3、Spring Boot 有哪些优点?
1、减少开发,测试时间。
2、使用 JavaConfig 有助于避免使用 XML。
3、避免大量的 Maven 导入和各种版本冲突。
4、提供意见发展方法。
5、通过提供默认值快速开始开发。
6、没有单独的 Web 服务器需要。这意味着你不再需要启动 Tomcat,Glassfish
或其他任何东西。
7、需要更少的配置 因为没有 web.xml 文件。只需添加用@ Configuration 注释
的类,然后添加用@Bean 注释的方法,Spring 将自动加载对象并像以前一样对其
进行管理。您甚至可以将@Autowired 添加到 bean 方法中,以使 Spring 自动装
入需要的依赖关系中。
8、基于环境的配置 使用这些属性,您可以将您正在使用的环境传递到应用程序:
-Dspring.profiles.active = {enviornment}。在加载主应用程序属性文件后,
Spring 将在(application{environment} .properties)中加载后续的应用程序属
性文件
4、Spring Boot有哪些注解?
@SpringBootApplication、@EnableAutoConfiguration、@Configuration等
5、Spring Boot的启动过程?
七、Spring Cloud
1、什么是 Spring Cloud?
Spring Cloud 流应用程序启动器是基于 Spring Boot 的 Spring 集成应用程序,
提供与外部系统的集成。Spring cloud Task,一个生命周期短暂的微服务框架,
用于快速构建执行有限数据处理的应用程序。
2、使用 Spring Cloud 有什么优势?
1、与分布式系统相关的复杂性-这种开销包括网络问题,延迟开销,带宽问题,
安全问题。
2、服务发现-服务发现工具管理群集中的流程和服务如何查找和互相交谈。它涉
及一个服务目录,在该目录中注册服务,然后能够查找并连接到该目录中的服务。
3、冗余-分布式系统中的冗余问题。
4、负载平衡 --负载平衡改善跨多个计算资源的工作负荷,诸如计算机,计算机
集群,网络链路,中央处理单元,或磁盘驱动器的分布。
5、性能-问题 由于各种运营开销导致的性能问题。
6、部署复杂性-Devops 技能的要求。
Spring Cloud组件有哪些?
Eureka注册中心、Zuul服务网关、Ribbon负载均衡、Feign服务调用、Hystrix熔断器
Spring Cloud中Hystrix熔断器有什么作用?怎样使用?
八、MQ
使用MQ的作用是什么?
十九、其他
分布式事务怎么实现?
总结
提示:这里对文章进行总结: