当前位置: 首页 > article >正文

计算机基础复习12.23

ThreadLocal

线程隔离:ThreadLocal为每个线程提供了独立的变量副本,意味着线程之间不会相互影响,可以安全的在多线程环境中使用这些变量而不必担心数据竞争或同步问题

ThreadLocal的实现依赖于Thread类中的一个ThreadLocalMap字段,这个存储ThreadLocal变量本身和对应值的映射。

需要显示调用remove方法,每个线程维护一个名为ThreadLocalMap的map,当你使用ThreadLocal存储值时,实际上是将值存储在当前线程的ThreaLocalMap中,ThreadLocal实例本身作为key, 而你要存储的值作为value,key是弱引用,垃圾回收器会在下次GC时回收该实例,导致key变为null,value是强引用,value仍存在于ThreadLocalMap中,不会被回收

慢查询

使用explain命令分析sql执行计划,找出慢查询原因,是否存在全表扫描,是否存在索引未被利用

创建索引或优化索引,常用于where子句的字段,order by排序,join连表查询,group by字段,创建联合索引,满足最左匹配原则,不然索引会失效

查询优化,避免使用select * 只查询真正需要的列

使用缓存技术  Redis存储热点数据和频繁查询的结果

事务隔离级别

读未提交:指一个事务还没提交时,他做的变更就能被其他事务看到

读提交:指一个事务提交之后,他做的变更才能被其他事务看到

可重复读:指的一个事务执行过程中看到的数据,一直跟这个事务启动看到的数据是一致的

串行化:会对记录加上读写锁,在多个事务对这条记录进行读写操作,如果发生了读写冲突的时候,后访问的事务必须等前一个事务执行完成,才能继续执行

HashMap扩容

初始容量为16,当插入第1-12元素,不需要扩容,插入第13个元素,达到负载因子(0.75)限制,需要扩容,HashMap的容量从16扩容到32

一级缓存:这是一个Map类型的缓存,存储的是已经完全初始化好的bean,即完全准备好可以使用的bean实例,键就是bean的名称,值是bean的实例

二级缓存:同样是一个Map类型的缓存,存储的是早期的bean引用,即已经实例化但未完全初始化的bean,这些bean已经被实例化,但是可能还没有进行属性注入等操作

三级缓存:map类型的缓存,存储的是Objectfactory对象,这些对象可以生成早期的bean引用,当一个bean正在创建过程中,如果被其他bean依赖,那么这个正在创建的bean就会通过这个ObjectFactory来创建一个早期引用,从而解决循环依赖问题

HashMap在多线程中存在的问题

HashMap在多线程同时执行put操作,如果计算出的索引位置是相同的,那会造成前一个Key被后一个key覆盖,从而导致元素的丢失

IOC是通过什么机制实现的

反射:spring ioc容器利用Java的反射机制动态加载类,创建对象实例及调用对象方法,反射允许在运行时检查类,方法,属性等信息,从而实现灵活的对象实例化和管理

依赖注入:IOC的核心概念是依赖注入,即容器负责管理应用程序组件之间的依赖关系。spring通过构造函数,属性注入,方法注入

通过工厂方法来管理对象的创建和生命周期,容器作为工厂负责实例化Bean并管理他们的生命周期,将bean的实例化过程交给容器来管理

Spring事务什么情况下会失效

1.异常捕获处理  对于try catch捕获的异常 且在catch并没有向外抛出

2.Spring 默认只会回滚非检查异常 rollbackFor属性 Exception.class

3.非public 不能使public生效

SpringBoot自动配置

@SpringBootConfiguraton

@EnableAutoConfiguration对应AutoConfigurationImportSelector.class

找到META-INF中spring.factories 

比如Redis配置类  判断是否有配置类存在 如果有会把RedisTemplate放入到spring 容器中

@ComponentScan


http://www.kler.cn/a/449943.html

相关文章:

  • 在 Vue3 项目中安装和配置 Three.js
  • 010 Qt_输入类控件(LineEdit、TextEdit、ComboBox、SpinBox、DateTimeEdit、Dial、Slider)
  • 解锁动态规划的奥秘:从零到精通的创新思维解析(3)
  • 江苏计算机专转本 技能Mysql知识点总结(二)
  • 电脑使用CDR时弹出错误“计算机丢失mfc140u.dll”是什么原因?“计算机丢失mfc140u.dll”要怎么解决?
  • Qt:QMetaObject::connectSlotsByName实现信号槽自动关联
  • TSN(时间敏感网络)介绍
  • 【微服务】SpringBoot 整合Redis实现延时任务处理使用详解
  • 重温设计模式--代理模式
  • LeetCode72. 编辑距离(2024冬季每日一题 37)
  • 不同路径
  • 2023-2024年云赛道模拟题库
  • Java重要面试名词整理(二):SpringMyBatis
  • Mac系统下 idea中如何创建maven项目
  • 从零开始C++游戏开发之第七篇:游戏状态机与回合管理
  • 买卖股票的最佳时机 IV - 困难
  • MySQL数据库多主模式解决方案
  • Mybatis-Plus 开发技巧
  • STM32-按键扫描配置
  • 【漏洞复现】BIG-IP Next Central Manager OData 注入漏洞(CVE-2024-21793)
  • 基于springboot+vue实现的医院质控上报系统 (源码+L文+ppt)4-124
  • 养生保健:开启健康生活之旅
  • WebPlotDigitizer 安装和配置指南
  • 网络中冗余备份
  • 【C/C++】推荐一个性能优良的错误码打印机制,已实测!
  • #渗透测试#漏洞挖掘#红蓝攻防#护网#sql注入介绍10基于文件操作的SQL注入(File-Based SQL Injection)