自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(32)
  • 收藏
  • 关注

原创 SpringBoot 启动过程解析

启动入口main()方法调用。初始化过程:加载配置,创建。自动配置:根据项目依赖自动配置组件。Bean 初始化:加载 Bean,完成依赖注入。Web 应用启动:启动嵌入式 Web 服务器,监听 HTTP 请求。事件监听:监听应用启动过程中的各种事件。应用运行:处理 HTTP 请求,执行应用逻辑。优雅关机:应用接收到关闭信号时进行平稳退出。通过理解这些步骤,我们不仅能够更好地掌握 Spring Boot 的启动过程,还可以更高效地调试和优化我们的应用程序。

2025-04-02 02:37:48 809

原创 Java ReadWriteLock 详解:用“图书馆管理员”模型实现高并发读写分离

ReadWriteLock 的核心价值通过读写分离显著提升读多写少场景的性能。需谨慎处理锁升级/降级逻辑。适用场景缓存系统配置中心实时数据监控(高频读取,低频更新)慎用场景写操作频繁需要锁升级的逻辑技术选型建议优先使用解决读多写少问题。在极端高并发读场景下考虑(接受更高复杂度)。

2025-04-02 02:27:02 266

原创 Java ReentrantLock 深度解析:为什么它比 synchronized 更灵活?

何时选择 ReentrantLock?需要可中断、超时获取锁。需要公平锁策略。需要复杂的线程协作(多个条件变量)。何时选择 synchronized?简单同步需求,代码简洁优先。JDK 5 之前性能敏感场景(现代 JDK 差距已缩小)。核心思想:根据需求权衡灵活性与复杂度!

2025-04-02 01:12:15 914

原创 保姆级教程:synchronized 同步方法 vs 同步代码块,看完彻底懂锁!

特性同步方法同步代码块锁对象默认是this(对象锁)可自由指定(更灵活)锁粒度粗粒度(整个方法)细粒度(仅关键代码)性能较低(锁范围大,竞争多)较高(锁范围小,竞争少)适用场景简单逻辑,方法整体需要保护需要精细化控制锁的代码段同步方法:简单粗暴,适合保护整个方法。同步代码块:灵活高效,适合精细化控制。核心思想:用最小的锁范围,实现线程安全,同时最大化并发性能!

2025-04-02 00:16:22 382

原创 Java 锁机制详解:用“厕所门”和“防盗门”轻松理解多线程同步

锁类型特点适用场景自动加锁/释放,简单但性能较低简单同步需求手动控制,支持公平锁/条件变量复杂同步场景读写分离,提升读性能读多写少(如缓存)乐观读,性能最高但实现复杂极高并发读,极少写提示:实际开发中优先选择,需要高级功能时再考虑其他锁。

2025-04-01 23:45:56 234

原创 【机器学习】什么是随机森林?

每棵树独立地做出预测,最终随机森林通过投票(分类问题)或平均(回归问题)得到最终的预测结果。每个学生(决策树)都有自己的观点和判断标准,但是由于每个人的经验和知识不同,他们的答案可能会有所不同。通过让所有学生投票并选取最常见的答案,我们可以减少单个学生错误判断的概率,从而得到更准确的答案。每棵决策树会根据这些特征来判断动物是不是鸟,而随机森林则是由多棵决策树组成,最后通过多数投票来决定最终结果。这个过程类似于随机森林,它由多个决策树组成,每棵树独立地做出预测,最后通过“多数投票”来得出最终的预测结果。

2025-03-24 04:45:20 509

原创 【机器学习】什么是决策树?

可以把它看作是一个“树”,每个节点表示一个特征的判断,而每个分支代表了可能的判断结果,最终的叶子节点表示预测结果。假设我们有一个数据集,其中包含不同动物的特征,如体重、是否有羽毛、是否会飞等,目标是判断动物是鸟还是非鸟(比如猫)。决策树就是通过这种方式来做决策的:根据每个特征(问题)的条件,将数据逐层分组,最终在树的叶子节点给出结果。每问一个问题,都会将可能的答案进一步分成不同的组,这样你最终会根据这些问题判断出一个大致的年龄范围。假设你正在玩一个猜谜游戏,目标是猜测一个人的年龄。

2025-03-24 02:32:53 357

原创 【机器学习】什么是支持向量机?

想象你有一片二维的平面,上面有两种不同的点:一种用红色标记,另一种用蓝色标记。你需要画一条直线(或者高维空间中的超平面)来将这两类点分开,且使得这条直线距离两类点的最近点尽可能远。它的核心思想是通过找到一个最佳的“超平面”来将不同类别的数据分开,并使得不同类别之间的间隔最大化。支持向量机通过找到一个最大间隔的超平面来区分不同的类别,最大化的间隔就是“支持向量机”的优势之一,它使得模型对新数据的预测更加稳定。图中会显示数据点,并且有一条黑色的线,表示支持向量机的决策边界,分割了猫和老虎的两类数据。

2025-03-24 02:11:42 556

原创 机器学习都有哪些算法?

机器学习有很多种算法,通常可以根据任务类型(监督学习、无监督学习、强化学习)以及算法的特性进行分类。无监督学习是指在没有标签的数据集上进行训练,模型的目标是发现数据的内在结构或模式。迁移学习是一种利用已有任务上的知识来帮助新任务学习的技术,通常用于数据稀缺的场景。监督学习是指模型在已标注的数据集上进行训练,目标是学习输入与输出之间的映射关系。每种算法都有其优缺点,选择合适的算法需要根据问题的具体要求和数据特性来决定。强化学习是一种通过与环境交互来学习策略的算法,目标是最大化累积的奖励。

2025-03-24 01:55:01 1314

原创 【机器学习】线性回归和逻辑回归的区别在哪?

在这个例子中,逻辑回归模型输出的是一个概率值,表示给定学习时间为 5 小时,学生通过考试的概率为 57%。线性回归和逻辑回归是两种常见的回归模型,它们有一些相似的地方,但也有很大的区别。让我们通过通俗的例子来理解它们的不同,并提供代码示例。在这个例子中,线性回归模型通过学习数据中的关系(面积和价格之间的线性关系)来预测价格。模型的输出是一个连续的值(房价)。假设你想根据房子的面积来预测它的价格。我们想知道,给定一个学习时间,预测考试是否通过。的数值,例如预测房价、温度、收入等。来预测给定面积的房价。

2025-03-24 01:45:42 448

原创 【机器学习】什么是逻辑回归?

(每周学习的小时数)来预测他们是否能够通过考试(通过或不通过)。为了让问题更简单,我们假设一个学生的学习时间和是否通过考试之间存在某种关系。(Logistic Regression)是一个用于分类问题的统计学模型,尽管名字里有“回归”二字,它其实是用来做分类的,不是做数值预测的。,它预测的是某个事件发生的概率,因此它的输出值是一个介于0到1之间的数字,表示事件发生的可能性。我们要根据这些数据来训练一个逻辑回归模型,预测一个学生学习5个小时是否能通过考试。我们可以通过一个简单的例子来理解逻辑回归。

2025-03-24 01:35:12 1037

原创 【机器学习】什么是线性回归?

线性回归是一种简单而强大的方法,用于预测数值型结果。通过拟合数据点并找到最佳的线性关系,我们可以预测新数据的结果。简单来说,线性回归就是找出一个数学方程(通常是线性方程),它能够预测一个数值结果。你可以通过线性回归找出面积和房价之间的关系。通过这种方式,线性回归帮助我们找到了房价和面积之间的关系,进而可以预测其他房子的价格。假设你有一个简单的数据集,想要预测某个城市的房价。,它通过拟合一个直线(或平面,高维空间下是超平面)来建立。你希望通过这些数据来预测一个新房子的价格。,即每平方米的价格是 3 万元。

2025-03-24 01:03:27 643

原创 【LeetCode.No125验证回文串】StringBuilder.reverse()是否会反转并赋值回其字符串本身?

今天在做力扣算法题时,偶然间注意到一个bug,我们先来看题如果在将所有大写字符转换为小写字符、并移除所有非字母数字字符之后,短语正着读和反着读都一样。则可以认为该短语是一个回文串。字母和数字都属于字母数字字符。给你一个字符串 s,如果它是 回文串 ,返回 true;否则,返回 false。示例 1:输入: s = “A man, a plan, a canal: Panama”输出:true解释:“amanaplanacanalpanama” 是回文串。

2024-10-02 05:00:41 763 1

原创 【Java基础面试题】short s1 = 1; s1 = s1 + 1;与 short s1 = 1; s1 += 1; 有错吗?

这种隐式的类型转换是因为 Java 中的复合赋值运算符会自动进行类型适配,以确保赋值操作的安全性和正确性。是一个复合赋值运算符,它会隐式地执行类型转换。是有区别的,后者会导致编译错误,因为需要显式地将。在 Java 中,对于表达式中的运算符。操作符的存在,避免了显式类型转换的需要。),则会自动将这些操作数提升为。类型,然后将结果赋值给左侧的。是一个整型字面量(默认是。,如果操作数中有一个是。类型,不能直接赋值给。,所以会导致编译错误。

2024-06-27 00:03:12 230

原创 【Java基础面试题】float f=3.4;是否正确?

是一个双精度浮点数(double),而不是单精度浮点数(float)。在 Java 中,浮点数默认被当做双精度类型处理,如果要将其赋值给一个单精度类型的变量,需要进行显式类型转换或者在数字后面加上。类型的变量,因此会导致编译错误。所以,正确的做法是在数字后面加上。,这样就明确指定了这是一个单精度浮点数,这样可以将。明确地转换为单精度浮点数类型,使得赋值语句合法。类型,而这不能直接赋值给一个。在 Java 中,赋值语句。

2024-06-26 23:53:28 385

原创 【Java基础面试题】Math.round(11.5) 等于多少?Math.round(-11.5)等于多少?

方法可以用来对一个浮点数进行四舍五入,并返回最接近的整数。被四舍五入到最接近的整数,而最接近。被四舍五入到最接近的整数,而最接近。

2024-06-26 23:36:41 313

原创 【Java基础面试题】 switch 是否能作用在 byte 上,是否能作用在 long 上,是否能作用在 String上?

换句话就是byte 和 short 类型的取值范围都可以被 int 类型完全覆盖。byte 的取值范围是 -128 到 127,在转换为 int 类型时不会导致精度损失或溢出。类型的值在Java中是64位的,它的取值范围更大,不像。那样可以被编译器在常量表达式中使用。或其他类型上进行条件分支判断,可以考虑使用。(Java 7及以上版本)以及枚举类型上。(Java 7及以上版本)。、枚举(Java 5及以上版本)、语句在 Java 中可以作用在。(Java 7及以上版本)、(Java 7及以上版本)、

2024-06-26 23:10:09 294

原创 Vuex中的 state, mutatio, actionn, commit, dispatch 的用法

mutation 来增加计数器的值。这展示了 action 可以包含异步操作,并且可以提交多个 mutation。这些概念的结合使用让我们可以更好地管理应用程序的状态和行为。这种模式使得应用程序的状态变得可预测,易于测试和维护。使用 Vuex 的好处之一是能够将应用程序的状态和逻辑分离。则是分别用来触发 mutation 和 action 的方法。可以包含任意异步操作,并且可以提交多个 mutation。接着,定义一个包含异步操作的。存储应用程序的状态,使用。首先,定义一个包含状态的。

2024-01-31 23:32:04 582

原创 JavaScript 中的可选链操作符与逻辑空值合并运算符

逻辑空值合并运算符(Nullish Coalescing Operator)是JavaScript ES2020引入的另一个新特性,用于判断一个表达式是否为null或undefined,并在表达式为null或undefined时返回一个默认值。运算符,直接访问深层嵌套对象中的属性或方法,同时避免了因为属性或方法为null或undefined而导致的TypeError错误。但是,如果这些属性或方法中的任何一个为null或undefined,就会导致TypeError错误。它与传统的逻辑或运算符。

2024-01-29 23:47:17 456

原创 import { routes } from “@/router/routes“; 与 import routes from “@/router/routes“;有什么区别

在实际使用中,如果一个模块只有一个默认导出,使用第一种导入方式;如果一个模块有多个按需导出的变量或函数,使用第二种导入方式。两种方式都是用于从其他模块中导入所需的变量或函数,选择使用哪种取决于被导入模块中的导出方式。这种语法使用的是 ES6 的模块导入语法,它从指定的模块中导入特定的变量或函数。这两种导入方式分别是使用了不同的 JavaScript 模块系统语法。这种语法也是 ES6 的模块导入语法,但它是。在这个例子中,它导入了整个。模块,并将其赋值给了名为。

2024-01-28 20:30:24 622 1

原创 TS1258: A default export must be at the top level of a file or module declaration.

然而,由于其设计初衷是为了简化常见的模式,因此有一些限制,其中之一就是不支持 ES 模块的直接导出。这是因为默认导出应该是文件或模块的主要导出,而不是包含在其他作用域(如函数或条件语句)中的局部导出。中使用 ES 模块的导出,符合 Vue 3 的规范和 ESLint 的要求。中,只能使用变量和函数的局部导出,而不能直接使用 ES 模块的导出语法。中,只能使用变量和函数的局部导出,而不能直接使用 ES 模块的导出语法。时,应该将其放在文件或模块的顶层,而不是嵌套的作用域内部。块中不能包含 ES 模块的导出。

2024-01-28 17:38:02 963 1

原创 Node.js高版本降为低版本

首先,使用了nvm安装Node.js v18.16.0,并且node -v显示版本正确,说明node安装成功。打开 Node.js 安装目录(路径通常为 C:\Users<你的用户名>\AppData\Roaming\nvm\v18.16.0)。:特别是在Windows系统下,安装可能需要管理员权限,如果安装时权限不足,可能导致npm未能正确安装。:安装完成后,nvm可能没有正确设置npm的路径,或者系统环境变量未更新,导致命令行找不到npm。处于启动状态,然后我找了一番,最后把正在运行的。

2024-01-07 01:16:47 7630 1

原创 win11安装及使用Node.js步骤

注意:若执行命令npm install express -g 出现如下报错,是由于权限的原因,回到安装目录,右击Nodejs文件夹->属性->安全,点击编辑,将所有权限全部勾上允许即可。快捷键 【win+R】 输入 cmd 回车进入终端,依次输入以下命令行即可查看node及npm的版本。2.创建完两个空文件夹之后,按下【win+R】输入cmd,然后回车,输入下面命令。【win+R】输入cmd,然后回车,输入下面命令。【win+R】输入cmd,然后回车,输入下面命令。),下载node.js安装包。

2024-01-06 23:36:05 2411 1

原创 Typora的破解

点击导航栏->帮助->我的许可证,可以看到Typora已经激活。找到相应语句将对应hasActivated改为true,进入你安装好的目录并找到如下文件,选择用记事本开(保存退出,重启Typora。

2023-12-24 21:52:25 1073 2

原创 数据库中的逻辑删除

通过在数据库表中添加一个表示删除状态的字段,并在查询数据时过滤已被逻辑删除的数据,可以实现逻辑删除的效果。逻辑删除保留了数据的历史记录并提供了恢复和审计功能,但需要注意逻辑删除并非适用于所有情况,特定的业务需求可能需要考虑使用其他删除方式。逻辑删除的好处是,在删除数据时不会真正地删除它们,而是保留数据的历史记录。然而,需要注意的是逻辑删除只是一种软删除方式,对于一些敏感数据或需要完全删除的情况,物理删除可能更合适。逻辑删除是一种软删除的手段,它通过将数据的状态标记为已删除,而不是直接从数据库中删除数据。

2023-08-25 16:50:59 1536 1

原创 探索Java数组底层原理

当我们创建一个数组时,JVM在堆内存中为数组分配一段连续的空间,每个数组元素在内存中占据一定的连续空间。对于基本数据类型,元素的内存空间大小是固定的,而对于引用数据类型,每个元素实际上存储的是对象的引用,也占据固定大小的内存空间。因此,无论数组的长度是多少,通过索引进行数组元素的随机访问所需的时间是恒定的。在内存中,数组的第一个元素被放置在数组的起始地址处,后续元素依次排列在前一个元素之后。可以看到,数组元素0的地址加上4等于数组元素1的地址,其它元素也是一样,因此可以知道,这是一块连续的内存。

2023-08-24 23:45:20 603 2

原创 Java中的自动“装箱”和“拆箱”操作

这意味着,当我们需要将一个int,float,double等基本数据类型的值赋给一个Integer,Float,Double等包装类对象时,编译器会自动进行转换操作。但是在进行自动拆箱时,需要注意避免空指针异常,因为一个包装类对象可能为空。这意味着,当我们需要将一个包装类对象赋给一个基本数据类型变量时,编译器会自动进行拆箱操作。为了避免空指针异常,需要在进行自动拆箱之前,确保包装类对象非空。在Java中,自动装箱和拆箱是指基本数据类型和对应的包装类之间的转换操作。,然后在进行自动拆箱操作时,尝试将。

2023-08-23 18:04:07 184

原创 JVM(Java虚拟机)

JVM(Java虚拟机)是Java平台的核心组成部分之一。它是一个虚拟的计算机,可以在不同的操作系统上运行Java字节码(.class文件),实现了Java的跨平台特性。JVM负责将Java字节码翻译成特定平台的本地机器码,以便在操作系统上执行。以下是一些与JVM相关的重要概念:Java字节码:Java源代码经过编译生成的中间代码,它是在JVM上执行的指令集。Java字节码是平台无关的,可以在任何支持JVM的操作系统上运行。

2023-08-23 16:54:11 84

原创 实体类与数据库字段不匹配问题:java.sql.SQLSyntaxErrorException: Unknown column ‘user_name‘ in ‘field list‘

是否开启自动驼峰命名规则(camel case)映射,即从经典数据库列名 A_COLUMN(下划线命名) 到经典 Java 属性名 aColumn(驼峰命名) 的类似映射。此属性在 MyBatis 中原默认值为 false,在 MyBatis-Plus 中,此属性也将用于生成最终的 SQL 的 select body。错误意思是“字段列表”中的数据字段“user_name”未知列,真的是奇了怪了,我命名时用的是驼峰命名,明明没有用到。这样的下划线命名,为啥会报这样的错呢?在运行代码的时候却报了如下的错误。

2023-08-23 00:36:04 1369

原创 浅谈“垃圾回收”机制中的“压缩”

需要注意的是,内存压缩可能会导致一定的性能开销,因为需要移动对象并更新相应的引用。因此,不是所有的垃圾回收器都会进行内存压缩操作。具体使用何种垃圾回收器以及是否进行内存压缩,取决于JVM的实现和配置。在垃圾回收的过程中,为了提高内存的利用效率,一些垃圾回收器会执行内存压缩(Compacting)操作。内存压缩的目的是将存活的对象移动到一端,使得剩余的内存空间保持连续,从而解决内存碎片化的问题。通过内存压缩,剩余的内存空间变为连续的,可以充分利用内存来存储新的对象,减少内存碎片化的问题。

2023-08-22 23:20:24 137 1

原创 Java中的常量池

在Java编译过程中,编译器会将源代码中出现的字面量常量(如字符串、整数、浮点数等)和符号引用(如类和方法的全限定名、字段的名称和类型描述符等)保存在常量池中。常量池由多个常量表(Constant Tables)组成,每个常量表存储特定类型的常量。常见的常量表类型包括字符串常量表、类常量表、字段常量表、方法常量表等。通过在字节码中保存常量的索引和引用,可以避免重复存储相同的常量数据,并且在运行时可以通过索引快速定位和访问常量。通过在运行时动态修改和访问常量池中的常量,可以实现一些高级的编程技巧和特性。

2023-08-22 23:08:55 243 1

原创 Java基础知识(初学)

1. 历史和发展Java是由James Gosling和Sun Microsystems团队于1995年开发的一种计算机编程语言。最初被设计为一种用于家用电器控制的嵌入式语言,而后应用范围逐渐扩展到Web开发、企业应用、移动应用等领域。Java最初命名为Oak,但后来改名为Java,以和其他同名语言区分开来。Java的版本演进中引入了许多功能和增强,以提高性能、安全性和开发效率。2. 特点和优势面向对象编程语言:Java通过类和对象的概念支持面向对象编程,强调代码的组织、可重用性和灵活性。

2023-08-21 20:58:03 614 2

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除