面面面(2)

1、介绍下Java泛型

泛型是jdk5以后推出的特性,主要目的是编译时的类型检查,避免运行时类型转换异常,实现代码复用及为了适配更多代码及之前版本。举例在不用泛型时候,用ArrayList存字符串,需要手动强转。如果存了其他类型,运行时才会报错。(这样好处是,比如对于arrayList里面插入不同类型时能尽早识别。)本质是类型参数化。

主要有三个用处:泛型类,比如一般封装好的Result类或者常见的容器类;泛型方法,在方法返回值前面用泛型;泛型通配符。

? extends T上界通配符,可以接收T及其子类,但是不能写,只能读。(因为编辑时,不清楚具体子类型)

? super T 下届通配符,可以接收T及其父类,但是只能写不能读。读只能是object类型。

泛型原理:类型擦除。是在编译时期,把泛型参数替换成边界类型或者是Object类型,同时插入类型转换代码。

2、spingboot启动流程

1、new springBootApplication 先判断是什么类型web还是应用,设置初始化器,监听器,主类。记得推断启动类型是判断类路径中是否有jarakta.servelet.Servelet相关的类就是web 应用,设置初始化器触发springboot自动配置动作,就是从spring.factories加载并初始化类。

2、启动.run方法。1、准备环境,加载配置环境,系统变量,命令行参数,最终封装成configureableEnvironment 2、创建ApplicationContext ,装配Bean,加载配置类,@ComponentScan就是这里发挥作用。3、刷新上下文,所有bean初始化完成,事务监听器配置完毕。web项目这时候会启动内置的tomcat。4、调用commandLineRunner ApplicationRunner 可以启动后输出内容 5、发布ApplicationReadyEvent,所有启动流程结束,应用进入运行状态,准备接收请求

3、@Resource和@Autowired 的区别

一个通过name一个通过类型

4、创建线程的几种方式

4种。1、直接继承Thread,但是java是单继承,不太方便。2、实现Runable接口 ,但是没有返回值 3、实现callable接口,但是得有futureTask 4、还有说用线程池。那就区别于前面new Thread,而是用executorService.execute(new xxThread())方法。

5、在工作中是怎么运用线程的呢?

是用线程池的方式使用线程。如何创建的呢?不能说用executor,因为它的工作队列是无界队列,容易OOM。

6、threadLocal

是每个线程的数据副本,底层是一个threadLocalMap,里面的key是弱引用,存得是该threadLocal对象,value是值,如果在不用完之后remove容易出现内存泄漏问题。

为什么是弱引用,因为这样,remove掉key value之间连接,gc时候就能吧该键值对给回收掉。

假设 Key 是强引用:如果 ThreadLocal 对象(比如局部变量)已经不用了,但 Thread 还在运行(比如线程池的核心线程),那么 ThreadLocalMap 的 Key 会一直强引用 ThreadLocal 对象,导致 ThreadLocal 无法被 GC 回收,进而引发内存泄漏;

用弱引用:当 ThreadLocal 对象没有其他强引用时,GC 会直接回收这个 Key(弱引用对象只要 GC 就会被回收),此时 Map 中会出现'Key 为 null'的无效键值对。⚠️ 注意:弱引用只能解决 Key 的回收问题,Value 依然是强引用 ------ 如果不手动 remove,Value 会一直被 Thread 的 Map 引用,直到 Thread 结束,这才是 ThreadLocal 内存泄漏的核心原因。

7、sychnorized锁升级过程

相关推荐
宁渡AI大模型2 分钟前
河南宁渡科技有限公司|宁渡课堂 AI 全栈面试分享,AI 应用开发高频考点汇总
java·c++·人工智能·python·深度学习·神经网络·rag
代码什么用3 分钟前
JSON一文速通
java·json
Lyyaoo.6 分钟前
【二分查找】【中等】搜索二维矩阵/排序数组的第一位和最后位置/搜索旋转排序数组/旋转排序数组中的最小值
java·数据结构·算法
土司大王15 分钟前
LeetCode hot100——153.寻找旋转排序数组中的最小值:Java 二分模板与 O(log n) 分析
java·算法·leetcode
磐链科技24 分钟前
交易所开发中的合规与安全:KYC、AML、冷热钱包设计要点
java·区块链
码农飞哥35 分钟前
企业级RAG系统架构详解
java·人工智能·ai编程·rag·ai应用
Wang's Blog37 分钟前
Java框架快速入门: Spring Security+OAuth2之搭建授权服务器(依赖与表结构)
java·服务器·spring
土司大王37 分钟前
LeetCode hot100——4.寻找两个正序数组的中位数:Java 二分第K小 递归裁剪
java·算法·leetcode
dllxhcjla40 分钟前
SpringAI+DeepSeek大模型应用开发
java
小鱼干..1 小时前
青少年ctf url
java