Java面试题合集


前言

最近面试了很多公司,就其中的技术点做个梳理,即是分享,也当做是个笔记


一、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的作用是什么?

十九、其他

分布式事务怎么实现?

总结

提示:这里对文章进行总结:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值