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

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&#xff08;SpEL&#xff09; Value("${my.property}") private String myProperty; Value("#{2 * 3}") private int computedValue; 2.逃逸分析 逃逸分析&#xff1a;当一个对象在方法中被定…...

多线程执行大批量数据查询

// 创建一个固定大小的线程池ExecutorService executorService Executors.newFixedThreadPool(5);// 创建多个查询任务List<Callable<List<ShopCompareBase>>> tasks new ArrayList<>();//查询门店 切割,分成十份List<List<String>> sho…...

ChatGPT高效处理图片技巧使用详解

ChatGPT&#xff0c;作为OpenAI开发的预训练语言模型&#xff0c;主要用于生成自然语言文本的任务。然而&#xff0c;通过一些技巧和策略&#xff0c;我们可以将ChatGPT与图像处理模型结合&#xff0c;实现一定程度上的图像优化和处理。本文将详细介绍如何使用ChatGPT高效处理图…...

leetcode——相交链表(java)

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

RubyFPV开源代码之系统简介

RubyFPV开源代码之系统简介 1. 源由2. 工程架构3. 特性介绍&#xff08;软件&#xff09;3.1 特性亮点3.2 数字优势3.3 使用功能 4. DEMO推荐&#xff08;硬件&#xff09;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层

仓库地址 在初版代码中&#xff0c;已经实现了基础的增删改查。 但是&#xff0c;逻辑处理都放在Controller层中并没有分为Service层&#xff0c;所以&#xff0c;代码升级时候必须补充上去。 代码结构 升级后的代码结构有所变化。 --common 公共插件 --controller…...

机器学习11-学习路径推荐

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

[ACTF2020 新生赛]Upload1

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

【PyTorch】0.初识:从吃货角度理解张量

0.初识张量 PyTorch 是一个 Python 深度学习框架&#xff0c;它将数据封装成张量&#xff08;Tensor&#xff09;来进行运算。PyTorch 中的张量就是元素为同一种数据类型的多维矩阵。在 PyTorch 中&#xff0c;张量以 "类" 的形式封装起来&#xff0c;对张量的一些运…...

医学图像分析工具09.1:Brainstorm安装教程

1. 安装前准备 **官方安装包和数据&#xff1a;**https://neuroimage.usc.edu/bst/download.php **官方安装教程&#xff1a;**https://neuroimage.usc.edu/brainstorm/Installation Matlab 版本要求&#xff1a; 有 Matlab&#xff1a; R2009b (7.9) 或更高版本没有 Matlab&…...

springboot基于Spring Boot的智慧养老服务系统的设计与实现

系统介绍&#xff1a; 智慧养老服务系统是一种运用现代科技手段&#xff0c;整合各类养老资源&#xff0c;为老年人提供全方位、个性化服务的综合性平台。该系统通过智能化设备、大数据分析、云计算等技术&#xff0c;实现对老年人健康状况、生活需求的实时监控与精准匹配&…...

Linux内核中IPoIB驱动模块的初始化与实现

InfiniBand(IB)是一种高性能的网络互连技术,广泛应用于高性能计算(HPC)和数据中心。为了在InfiniBand网络上运行标准的IP协议栈,Linux内核提供了IP over InfiniBand(IPoIB)驱动模块。IPoIB允许在InfiniBand网络上传输IPv4和IPv6数据包,从而使得现有的IP应用程序能够无…...

WPS计算机二级•幻灯片的基础操作

听说这是目录哦 PPT的正确制作步骤&#x1f6e3;️认识PPT界面布局&#x1f3dc;️PPT基础操作 快捷键&#x1f3de;️制作PPT时 常用的快捷技巧&#x1f3d9;️快速替换PPT的 文本字体&#x1f303;快速替换PPT 指定文本内容&#x1f305;能量站&#x1f61a; 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…...

基于微信小程序的民宿预订管理系统

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码 精品专栏&#xff1a;…...

网络(三) 协议

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

【深度解析Java 20天速成】04_IDEA的安装与使用

【Why IDEA ?】 【注】JetBrains官方说明&#xff1a; 尽管我们采取了多种措施确保受访者的代表性&#xff0c;但结果可能会略微偏向 JetBrains 产品的用户&#xff0c;因为这些用户更有可能参加调查。 此外&#xff0c;2022年&#xff0c;某美国软件开发商在对近千名专业的Ja…...

gitlab处理空文件夹的提交或空文件夹提交失败

问题描述 厂家发给了我一个压缩包文件&#xff0c;压缩包解压之后本地编译没问题&#xff1b;推送到gitlab之后&#xff0c;再编译就报错了&#xff1b; 问题原因 经过分析之后发现&#xff0c;压缩包解压之后存在很多空文件夹&#xff1b;但是gitlab推送的时候&#xff0c;…...

计算机网络之链路层

本文章目录结构出自于《王道计算机考研 计算机网络_哔哩哔哩_bilibili》 02 数据链路层 在网上看到其他人做了详细的笔记&#xff0c;就不再多余写了&#xff0c;直接参考着学习吧。 1 详解数据链路层-数据链路层的功能【王道计算机网络笔记】_wx63088f6683f8f的技术博客_51C…...

深入浅出Asp.Net Core MVC应用开发系列-AspNetCore中的日志记录

ASP.NET Core 是一个跨平台的开源框架&#xff0c;用于在 Windows、macOS 或 Linux 上生成基于云的新式 Web 应用。 ASP.NET Core 中的日志记录 .NET 通过 ILogger API 支持高性能结构化日志记录&#xff0c;以帮助监视应用程序行为和诊断问题。 可以通过配置不同的记录提供程…...

Spark 之 入门讲解详细版(1)

1、简介 1.1 Spark简介 Spark是加州大学伯克利分校AMP实验室&#xff08;Algorithms, Machines, and People Lab&#xff09;开发通用内存并行计算框架。Spark在2013年6月进入Apache成为孵化项目&#xff0c;8个月后成为Apache顶级项目&#xff0c;速度之快足见过人之处&…...

系统设计 --- MongoDB亿级数据查询优化策略

系统设计 --- MongoDB亿级数据查询分表策略 背景Solution --- 分表 背景 使用audit log实现Audi Trail功能 Audit Trail范围: 六个月数据量: 每秒5-7条audi log&#xff0c;共计7千万 – 1亿条数据需要实现全文检索按照时间倒序因为license问题&#xff0c;不能使用ELK只能使用…...

vue3 字体颜色设置的多种方式

在Vue 3中设置字体颜色可以通过多种方式实现&#xff0c;这取决于你是想在组件内部直接设置&#xff0c;还是在CSS/SCSS/LESS等样式文件中定义。以下是几种常见的方法&#xff1a; 1. 内联样式 你可以直接在模板中使用style绑定来设置字体颜色。 <template><div :s…...

Nuxt.js 中的路由配置详解

Nuxt.js 通过其内置的路由系统简化了应用的路由配置&#xff0c;使得开发者可以轻松地管理页面导航和 URL 结构。路由配置主要涉及页面组件的组织、动态路由的设置以及路由元信息的配置。 自动路由生成 Nuxt.js 会根据 pages 目录下的文件结构自动生成路由配置。每个文件都会对…...

GitHub 趋势日报 (2025年06月08日)

&#x1f4ca; 由 TrendForge 系统生成 | &#x1f310; https://trendforge.devlive.org/ &#x1f310; 本日报中的项目描述已自动翻译为中文 &#x1f4c8; 今日获星趋势图 今日获星趋势图 884 cognee 566 dify 414 HumanSystemOptimization 414 omni-tools 321 note-gen …...

EtherNet/IP转DeviceNet协议网关详解

一&#xff0c;设备主要功能 疆鸿智能JH-DVN-EIP本产品是自主研发的一款EtherNet/IP从站功能的通讯网关。该产品主要功能是连接DeviceNet总线和EtherNet/IP网络&#xff0c;本网关连接到EtherNet/IP总线中做为从站使用&#xff0c;连接到DeviceNet总线中做为从站使用。 在自动…...

深入解析C++中的extern关键字:跨文件共享变量与函数的终极指南

&#x1f680; C extern 关键字深度解析&#xff1a;跨文件编程的终极指南 &#x1f4c5; 更新时间&#xff1a;2025年6月5日 &#x1f3f7;️ 标签&#xff1a;C | extern关键字 | 多文件编程 | 链接与声明 | 现代C 文章目录 前言&#x1f525;一、extern 是什么&#xff1f;&…...

使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台

🎯 使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台 📌 项目背景 随着大语言模型(LLM)的广泛应用,开发者常面临多个挑战: 各大模型(OpenAI、Claude、Gemini、Ollama)接口风格不统一;缺乏一个统一平台进行模型调用与测试;本地模型 Ollama 的集成与前…...

Xen Server服务器释放磁盘空间

disk.sh #!/bin/bashcd /run/sr-mount/e54f0646-ae11-0457-b64f-eba4673b824c # 全部虚拟机物理磁盘文件存储 a$(ls -l | awk {print $NF} | cut -d. -f1) # 使用中的虚拟机物理磁盘文件 b$(xe vm-disk-list --multiple | grep uuid | awk {print $NF})printf "%s\n"…...