- 博客(33)
- 收藏
- 关注

原创 计算机操作系统(慕课版 汤小丹 人民邮电出版社)期末复习笔记
一组等待的进程,其中每一个进程都持有资源,并且等待着由这个组中其他进程所持有的资源。
2024-11-28 22:56:21
2308

原创 沉浸式快速上手Linux基础中的基础(爆肝几千字,真的不看看吗)
ps命令是最基本同时也是非常强大的进程查看命令,使用该命令可以确定有哪些进程正在运行和运行的状态、进程是否结束、进程有没有僵死、哪些进程占用了过多的资源等等,总之大部分信息都是可以通过执行该命令得到的。挂载,在Windows上通俗简单地来说就是,你把硬件插到电脑上,本身这个硬件不存在这个电脑中,但是我们要使用它怎么办,电脑就会帮我创建一个临时的虚拟的盘,供用户使用。可见cp命令是很危险的,万一输错命令了,把目标文件选错了,选错的那个文件里面的内容就不在了!例如,当前目录中的文件在目标目录中都不存在,
2024-11-28 12:10:20
923
原创 线程池的线程数配置策略
例如,若IO等待时间占50%,则线程数 ≈ 逻辑核心数 × (1 + 0.5) = 12(8核为例)。避免过多的线程导致频繁的上下文切换(Context Switching),浪费CPU时间。线程数 = CPU逻辑核心数 × (1 + 平均IO等待时间 / CPU计算时间)额外+1是为了在某个线程因页错误(Page Fault)等阻塞时,仍能保持CPU满载。将任务拆分为CPU和IO两部分,分别使用不同的线程池(如。例如,4核8线程的CPU建议配置16个线程。,等长时间等待操作,CPU空闲。
2025-05-04 22:01:33
412
原创 在MySQL中建索引时需要注意哪些事项?
频繁作为查询条件的字段:WHERE(减少全表扫描的开销,从而提高查询性能)、JOIN(加快表之间的连接速度)、ORDER BY(直接利用索引的有序性进行排序,提高排序性能)、GROUP BY(帮助数据库快速将数据分组) 中频繁出现的列。在 MySQL 中建立索引是优化查询性能的重要手段,但不当的索引设计可能导致资源浪费、性能下降甚至拖慢写入速度。选择性高的字段:对于选择性高的字段,索引可以更有效地过滤数据,减少需要扫描的记录数。:多个列组合的索引,如果多个条件经常一起查询,可以考虑联合索引,
2025-05-03 22:28:38
364
原创 前端跨域问题怎么在后端解决
Web内容的源由用于访问它的URL 的方案(协议),主机(域名)和端口定义。只有当方案,主机和端口都匹配时,两个对象具有相同的起源。同源不同源一句话就可以判断:就是url中 scheme host port 都相同即为同源。下面认识下url 结构中的这三个部分。
2025-05-03 22:26:12
1411
原创 Java集合(ArrayList,HashSet)底层原理
为什么再一次扩容,因为优先增长是靠右移一位进行的,右移一位相当于折半,10的一半是5,所以第二次扩容将ArrayList底层的实现数组的容量扩容成了15(原来的1.5倍)(最小的扩容是1,但优先扩容嘛)。不是一开始我们去new这个ArrayList对象的时候,它就会被分配一个长度为10的数组,一开始是空数组。当进行添加操作的时候ArrayList底层实现的数组才会进行第一次的扩容,默认值是10是因为它靠Math的max方法去比较了默认值10和minCapacity(最小容含量,在第一次的时候是1)的值。
2025-03-18 11:02:04
213
原创 用户的登录态一般是什么时候存到session中?什么时候存到token中?
单页应用(SPA)、移动端 App 或第三方服务集成(如 OAuth 登录),避免 Cookie 跨域限制。例如支付、账户设置等场景,Session 可通过服务端即时吊销会话(如强制退出登录)。用户登录后,服务端生成签名的 Token(如 JWT),包含用户标识和元数据(如。:Token 可携带用户基础信息(如 JWT Claims),减少服务端查询次数。多个服务实例无需共享会话存储,仅需验证 Token 有效性(如签名、过期时间)。通过权衡安全性、扩展性、客户端环境等因素,选择最适合业务场景的认证机制。
2025-03-17 16:42:34
770
原创 MySQL中的回表是什么?
当需要频繁地访问不同的数据页时,磁头就需要不断地移动,这会带来大量的寻道时间和旋转延迟,也就是随机 I/O。与顺序 I/O 相比,随机 I/O 的性能要差很多,因为顺序 I/O 可以在一次磁头移动过程中连续读取多个数据页,而随机 I/O 每次都需要重新定位磁头,大大增加了磁盘 I/O 的开销。那么在回表时,就需要依次从数据页 A、B、C、D 中读取数据,这就导致了大量的随机 I/O。到主键索引中查找记录时,就会需要频繁地访问不同的数据页。但这些主键值在主键索引中对应的记录可能分散在不同的数据页上,例如。
2025-03-15 15:36:42
656
原创 LeetCode 环形链表II:为什么双指针第二次会在环的入口相遇?
【代码】LeetCode 环形链表II:为什么双指针第二次会在环的入口相遇?
2025-03-15 15:29:59
286
原创 依赖注入是什么?什么时候要用到依赖注入?为什么相较于使用@Resource或者@Autowired,spring官方更推荐使用构造函数进行依赖注入?
用于解耦组件之间的依赖关系,通过外部(如框架)将依赖项“注入”到对象中,而不是由对象自行创建或查找依赖。构造函数注入在 Spring 中会显式暴露循环依赖(启动时报错),而字段注入可能隐式掩盖问题,导致运行时异常。@Autowired // 依赖可能未被注入,导致后续 userRepo 为 null。:由外部(如 Spring 容器)主动将依赖对象传递给目标对象,而不是目标对象自己创建依赖。Spring 容器可以自动处理依赖的创建、生命周期和依赖之间的关联(如循环依赖)。
2025-03-04 20:29:25
848
原创 MySQL索引的最左前缀匹配原则是什么?
从表中可看到s_name是最左边的一列,然后是s_gen,最后是s_dept_id。比如WHERE A=1 AND B>2 AND C=3,这时候在索引中,A和B会被使用,但C可能不会被使用,因为B的范围查询导致C在索引中的顺序不再连续,无法有效利用。由此,也可以推测:s_dept_id字段索引长度为5,s_name字段索引长度为42(47 - 5),s_gen字段索引长度为9(56 - 47)。的,比如先按A排序,A相同的情况下按B排序,再按C排序。如果跳跃某一列,被跳过的那一列后面的字段索引会失效。
2025-03-04 17:37:18
463
原创 构造函数注入和@Autowired 注入
通过模拟框架,可以指定模拟对象在特定情况下的行为,例如返回特定的值、抛出特定的异常等。这样可以隔离被测试的代码单元,使其更容易进行独立的测试,提高测试的可维护性和可靠性。综上所述,在 controller 层注入 service 时,构造函数注入通常是更好的选择,它提供了更明确的依赖关系、更高的稳定性和更好的可测试性。构造函数注入创建的对象通常是不可变的,一旦对象被创建,其依赖关系就不能被改变。代码的阅读者需要查看类的字段上的注解才能确定其依赖哪些服务,这使得代码的理解和维护变得更加困难。
2025-02-25 20:31:40
718
原创 为什么MySQL选择使用B+树作为索引结构
B+树的所有查询路径等长,每次查询都需要从根节点到叶子节点,路径长度相同,性能稳定(O(logN))。,它是多路平衡搜索结构,能减少磁盘 I/O 操作,还可像二分查找一样快速定位数据,数据存储具有冗余与可靠性的特点,能适应动态数据变化,在数据插入和删除时可通过结构调整保持平衡和有序。在原B+Tree的基础上,增加一个指向相邻叶子节点的链表指针,使得这棵B+树的。另一个竞争者是二叉树(如红黑树) 相对于二叉树,树高较高(log₂N),存储海量数据时I/O次数远超B+树。B+树从根节点到叶子节点的路径长度。
2025-02-25 20:27:36
1213
原创 MySQL的InnoDB引擎中的聚簇索引和非聚簇索引有什么区别?
(又叫二级索引):非聚簇索引之所以叫非聚簇索引,是因为它将数据与索引分开存储。:聚簇索引之所以叫聚簇索引,是因为它将数据存储与索引放到了一块。通过非聚簇索引查询时,需要先找到主键,再通过聚簇索引回表查询完整数据(称为。非聚簇索引如何避免回表:如果查询的字段全部包含在索引中(如联合索引),可避免回表,直接通过索引返回结果。如果没有主键,InnoDB会选择第一个唯一的非空索引(UNIQUE NOT NULL)作为聚簇索引。在查找效率上,通过聚簇索引查询时,可以直接定位到数据行,无需回表。
2025-02-24 20:45:42
196
原创 MySQL 的存储引擎有哪些?它们之间有什么区别?
ACID 是数据库事务的核心特性,确保了数据的可靠性和一致性。MySQL 的 InnoDB 存储引擎通过事务日志、锁机制和 MVCC 实现了 ACID 特性,适用于需要高可靠性和数据完整性的场景。
2025-02-24 20:41:12
1040
原创 HTTP请求方法 —— GET和POST的区别
选择GET还是POST取决于具体的应用场景:如果需要从服务器获取数据,且对数据没有修改,使用GET。如果需要向服务器发送数据,或者数据量较大,或者包含敏感信息,使用POST。
2024-10-26 15:18:35
523
原创 idea推荐插件系列——GenerateAllSetter插件
当你有一个复杂的 Java 对象,并且需要为其多个属性设置值时,手动编写每个 setter 方法会比较繁琐。GenerateAllSetter 插件可以自动为你生成所有属性的 setter 方法调用,大大提高开发效率。总之,GenerateAllSetter 插件为 Java 开发人员提供了一种便捷的方式来快速设置对象的属性值,减少了手动编写 getter、setter 方法的工作量,提高了开发效率。安装插件后,在需要生成所有 setter 方法的对象上右键,在弹出的菜单中通常可以找到你需要的功能。
2024-10-26 15:10:12
945
原创 domain 包下的 po 包、dto 包和 vo 包
在 Java 后端项目开发中,domain 包下的 po 包(Persistent Object,持久化对象)、dto 包(Data Transfer Object,数据传输对象)和 vo 包(View Object,视图对象)具有不同的作用和特点。它是与数据库进行交互的对象,包含了数据库表中的字段信息,并且可能与数据库中的列名一一对应。PO 和 DTO 一般不包含业务逻辑方法,而 VO 可能包含与界面展示相关的特定方法,但通常也不包含复杂的业务逻辑。PO 包含与数据库表对应的字段和数据库相关的注解。
2024-10-14 19:47:00
656
原创 用BCrypt对用户密码进行加密、校验用户登录时密码是否正确(包含代码实现)
BCrypt 是一种密码哈希函数,主要用于对密码进行安全加密存储。一、特点安全性高使用了自适应哈希算法,其工作因子(cost factor)可以根据硬件性能进行调整,增加破解难度。随着计算机性能的提高,可以逐步增加工作因子来保持密码的安全性。盐值(salt)随机生成且包含在加密后的结果中。盐值的作用是使相同的密码在不同的应用场景下生成不同的哈希值,从而防止彩虹表攻击。彩虹表攻击是一种密码破解方法。它通过预先计算大量密码的哈希值,并将密码和对应的哈希值存储在一个表中(即彩虹表)。
2024-10-14 19:42:03
990
原创 前端开发中的对象扩展符
在前端开发中,对象扩展符(Object Spread Operator)是一种非常有用的语法特性。它允许你在创建新的对象时,将一个或多个已有对象的属性复制到新对象中,同时还可以对这些属性进行修改或添加新的属性。对象扩展符使用三个点(...)表示。在上面的例子中,obj2是一个新的对象,它包含了obj1的所有属性(a和b),同时还添加了一个新的属性c。
2024-10-06 22:42:45
297
原创 什么是单点登录?如何实现单点登录?
在开发中,单点登录(Single Sign-On,SSO)是一种重要的业务模式,主要是指在多个相关但独立的软件系统中,用户只需进行一次身份认证,就可以在这些系统之间无缝切换,而无需重复输入用户名和密码进行多次登录。提升用户体验对于用户来说,单点登录极大地提高了使用多个系统的便利性。想象一下,如果你需要使用企业内部的多个业务系统,如办公自动化系统、邮件系统、项目管理系统等,如果没有单点登录,那么每次进入不同的系统都需要输入用户名和密码进行登录,这不仅繁琐,而且容易忘记密码或输入错误。
2024-10-06 22:31:44
1998
原创 @Autowired 和 @Resource的区别
如果你正在使用 Spring 框架,并且希望利用 Spring 提供的更多特性(如@Primary@Qualifier),那么@Autowired是一个更好的选择。如果你希望你的代码更加标准化,不依赖于 Spring 框架的特定实现,或者你需要通过名称来精确控制依赖注入,那么@Resource可能更适合你的需求。
2024-10-05 22:56:56
693
原创 Mybatis实体类的属性名与数据库表返回的字段名不一致导致查询为null的解决办法
MyBatis 的驼峰命名自动映射功能是通过将数据库表中的下划线命名的字段自动转换为 Java 实体类中的驼峰命名属性来实现的。例如,数据库表中的 “user_name” 字段可以自动映射到 Java 实体类中的 “userName” 属性。例如,创建一个名为 “mydb” 的数据库和一个名为 “MYDB” 的数据库,实际上是创建了同一个数据库。我们知道在设计数据库字段名时,使用下划线命名确实比较常见,而在 Java 中,实体类的属性名通常采用驼峰命名法。在 Windows 系统上。
2024-10-05 22:50:47
1072
原创 JavaWeb的三大组件 —— Servlet、Filter和Listener
JavaWeb的三大组件Servlet、Filter和Listener各自具有独特的功能和生命周期,它们共同构成了JavaWeb应用程序的基础架构。Servlet用于处理HTTP请求和响应,Filter用于在请求和响应之间执行通用操作,Listener用于监听Web应用程序中的事件。通过合理使用这三大组件,可以开发出功能丰富、性能优良的Web应用程序。
2024-10-02 19:20:26
583
原创 COOKIE和SESSION的原理和区别
Cookie 是一些数据, 存储于你电脑上的文本文件中。当 web服务器向浏览器发送 web 页面时,在连接关闭后,服务端不会记录用户的信息。Cookie 的作用就是用于解决 "如何记录客户端的用户信息": 当用户访问 web 页面时,他的名字可以记录在 cookie 中。在用户下一次访问该页面时,可以在 cookie 中读取用户访问记录。Cookie 以名/值对形式存储,如下所示:当浏览器从服务器上请求 web 页面时, 属于该页面的 cookie 会被添加到该请求中。
2024-10-02 19:17:53
1492
原创 经典题:equals() 方法和 == 操作符的区别
=对于基本数据类型,比较的是值。对于引用数据类型,比较的是引用(即内存地址)。equals()默认情况下,比较的是引用(与==在引用类型上的行为相同)。但许多类(如字符串、包装类)都重写了此方法,以提供基于内容的比较。如果你的类需要基于内容的比较,你应该重写equals()方法。
2024-09-26 18:50:25
365
原创 如何解决 Spring Boot配置文件application.properties || application.yml中文乱码问题
我的解决办法:Settings ——》 File Encodings ——》检查Path里有没有包含乱码的文件夹子 ——》勾选UTF-8。以上是我的解决办法,希望能帮助到您。
2024-09-26 18:47:52
371
原创 ServerSocket类和Socket类的区别
一旦连接成功,客户端和服务器之间就可以通过输入输出流(:创建一个套接字并将其连接到指定主机上的指定端口号。:监听并接受连接,返回一个与客户端连接的。:在指定的端口上创建一个服务器套接字。类用于创建客户端的套接字。:返回套接字的输入流,用于读取数据。:返回套接字的输出流,用于写入数据。Socket`对象进行通信。对象就会创建一个新的。:关闭服务器套接字。
2024-09-15 16:24:46
335
原创 IDEA如何回退到之前的工程,恢复之前的代码
有时候在各种原因不小心失误撤销后又想不起来代码是怎么写的时候,或者不知道动了什么东西程序突然就跑不起来的时候,在IDEA中按照“”其实可以将代码恢复到以前的状态(类似快照)。4. 在历史记录种找到需要恢复的记录,右键选中点击。2. 右击项目,选择。
2024-09-15 16:15:28
5384
原创 一觉醒来spring boot包不见了
并且我在磁盘里找了下昨天写的springboot项目,发现文件也好端端的,没有损坏。然后我试了下用maven启动昨天编写的测试类,发现是可以运行的。希望能帮你解决问题。
2024-09-14 12:04:52
501
1
原创 DELETE和TRUNCATE的区别
更快,因为它在内部操作时不需要逐行删除,而是直接删除整个数据页,并且释放空间。操作会为每行删除生成日志记录,这可能会增加日志的大小,并可能影响性能。操作逐行删除数据,并记录每行的删除操作,这可能需要更多的时间和资源。操作也不会删除表的结构,但它会重置表的自动增量计数器(如果有的话)。当你需要删除表中的部分数据或者需要在删除时使用条件时,应该使用。当你需要快速删除表中的所有数据,并且不需要触发器和事务控制时,根据你的具体需求,你可以选择最适合的方法来清空表中的数据。操作不会删除表的结构,只是删除数据。
2024-03-29 20:24:01
294
4
原创 常用的DOS命令
此外,DOS还能有效地管理各种软硬件资源,对它们进行合理的调度,所有的软件和硬件都在DOS的监控和管理之下,有条不紊地进行着自己的工作,但是请谨慎操作,避免死机。1.开始+系统 + 命令提示符 2.Win键+R 输入cmd 打开控制台 (推荐使用) 3.在任意的文件夹下面,按住shift键 + 鼠标右键点击,在此处打开命令行窗口 4.资源管理器的地址栏前面加上 cmd 路径(cmd+空格+文件路径) 管理员方式运行: 选择以管理员方式运行以得到最高使用权限。#盘符切换:<1> 要切换的盘的名称+冒号。
2023-05-23 19:18:31
82
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人