数字马力

我爱海鲸 2025-02-27 21:53:44 暂无标签

简介长沙、支付宝内包、java后端面试、初试、二面、HR面

时间:2025-02-21 19:02:00~2025-02-21 19:56:00

1、自我介绍:

2、HashMap的底层原理:

jdk8之前:数组+链表

jdk8之后:数组+链表+红黑树

默认初始容量16,负载因子0.75(即容量达到12时会发生扩容*2),hash表(数组)长度到达64且发生hash冲突的链表长度到达8,会使链表转化为红黑树,当链表长度减少到6时,红黑树又会退回为链表

HashMap 的基本原理

3、线程安全的HashMap

Java 提供了 Collections.synchronizedMap 方法,可以将 HashMap 包装成一个线程安全的 Map

ConcurrentHashMap 是 Java 提供的专门用于高并发环境的线程安全 Map 实现。它通过分段锁(JDK 1.7)或 CAS 操作(JDK 1.8 及之后)来实现高效的并发访问。

Hashtable 是 Java 早期提供的线程安全 Map 实现,它的所有方法都是同步的。然而,Hashtable 的性能较差,通常不推荐使用

如果你需要对 HashMap 进行更细粒度的控制,可以手动加锁,例如使用 ReentrantLock 或 synchronized 关键字。

4、spring的AOP实现

基于代理的 AOP

  • JDK 动态代理:适用于目标对象实现了接口的情况。

  • CGLIB 代理:适用于目标对象未实现接口的情况,通过生成子类实现代理。

基于 AspectJ 的 AOP

  • 编译时织入:在编译时将切面织入目标类。

  • 加载时织入:在类加载时将切面织入目标类

5、CGLIB的底层实现

CGLIB 通过字节码生成技术动态创建目标类的子类,并结合 MethodInterceptor 实现方法拦截和增强。它的底层实现依赖于 ASM 和 FastClass 机制

6、AOP在你的项目中的应用

日志记录

事务管理(@Transactional编译后再反编译回来,你就会发现它会将的你方法使用try包裹起来)

权限校验

性能监控

缓存管理

异常处理

参数校验

多数据源的实现

7、springboot自动装配的原理

  1. 条件化配置:根据类路径、配置文件、环境变量等条件,动态决定是否加载某个配置类或 Bean。

  2. SPI 机制:通过 META-INF/spring.factories 文件定义需要自动加载的配置类。

  3. 约定优于配置:Spring Boot 提供了一套默认配置,开发者只需按需覆盖即可。

以下是 Spring Boot 自动装配的工作流程:

  1. 启动 Spring Boot 应用

    • Spring Boot 启动时,会调用 SpringApplication.run() 方法。

  2. 加载自动配置类

    • 通过 AutoConfigurationImportSelector 从 META-INF/spring.factories 文件中加载所有自动配置类。

  3. 条件化筛选

    • 根据条件化注解(如 @ConditionalOnClass@ConditionalOnBean 等)筛选出符合条件的配置类。

  4. 加载配置类

    • 将筛选出的配置类加载到 Spring 容器中。

  5. 创建 Bean

    • 根据配置类中的 @Bean 方法创建 Bean,并将其注册到 Spring 容器中。

8、用过哪些缓存

Caffeine、redis

Cache缓存的用法

9、多线程在项目中的应用

并发处理任务(在微服务中通过多线程批量调用微服务接口)

异步处理(使用是spring事件驱动开发异步保存日志或者处理其他任务)

定时任务调度

10、线程池的几个核心参数

核心线程数

线程池维护线程的最大数量,只有在缓冲队列满了之后才会申请超过核心线程数的线程

缓存队列

当线程池的任务缓存队列已满并且线程池中的线程数目达到maximumPoolSize,如果还有任务到来就会采取任务拒绝策略
通常有以下四种策略:

丢弃任务并抛出RejectedExecutionException异常。

也是丢弃任务,但是不抛出异常。

丢弃队列最前面的任务,然后重新尝试执行任务(重复此过程)

重试添加当前的任务,自动重复调用 execute() 方法,直到成功

11、Mysql底层InnoDB 存储引擎使用的是什么数据结构

B+树

12、B+树有什么特点

“矮胖”,非叶子节点不存储数据,只存储指向下一个节点的指针

13、B+树有什么好处(为什么要用b+树)

磁盘只需要经过少量的IO就能检索大量的数据,高效的查找、插入和删除性能

14、项目中碰到过哪些问题,怎么解决的

在博客中搜索bug

15、其他问题忘记了。。。

2025-02-27 start:

2025年2月25日星期二  进行了第二面

1、在项目中遇到了什么问题,怎么解决的?

2、分布式事务的原理

3、什么是熔断和限流

4、怎么实现一个熔断

5....

2025年2月27日星期四

hr面试,谈了当前薪资,期望薪资,压力大在哪个时间段。。。

end

你好:我的2025