面面面(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锁升级过程

相关推荐
桦02 小时前
【C复习】
c语言·开发语言
05大叔2 小时前
RAG开发
java·服务器·前端
JavaWeb学起来2 小时前
Python学习教程(一)环境安装,基本数据类型,变量
开发语言·python·python基础
迷藏4942 小时前
# 发散创新:用 Rust实现高性能测试框架的底层逻辑与实战演练
java·开发语言·后端·python·rust
XuDream2 小时前
idea中忽略idea文件不提交git和取消被 Git 追踪
java·git·intellij-idea
chushiyunen2 小时前
python单例模式、大模型一次加载多次复用
开发语言·python·单例模式
SadSunset2 小时前
第五章:Redis 的 Java 客户端
java·数据库·redis
skywalk81632 小时前
训推一体化的AI飞桨套件:paddlex初探,还是不太顺利
开发语言·paddle
浮尘笔记2 小时前
PHP中常规通用接口验签加密规则设计
开发语言·后端·网络安全·php