- 博客(23)
- 收藏
- 关注
原创 Java 多线程核心基础与线程安全
当多线程首次调用 getInstance, 可能都发现 instance 为 null, 于是又继续往下执行来竞争锁, 其中竞争成功的线程, 再完成创建实例的操作. 当这个实例创建完了之后, 其他竞争到锁的线程就被里层 if 挡住了. 也就不会继续创建其他实例.1.方法notify()也要在同步方法或同步块中调用,该方法是用来通知那些可能等待该对象的对象锁的其他线程,对其发出通知notify,并使他们重新获得该对象的对象锁。由于操作系统无法保证线程的调度顺序,我们可以让需要后执行的线程。
2026-05-29 23:08:31
235
8
原创 Java多线程编程:从入门到实战
一个线程就是一个“执行流”,每个线程之间都可以按照顺序执行自己的代码,多个线程之间“同时”执行着多份代码。同时,线程也是CPU 真正执行任务的单位。举个栗子:去奶茶店买奶茶(奶茶店中有自己独立的“程序”让我们拿到奶茶,所以也可把这个看为一个线程),奶茶店有不同岗位员工,每个员工都是独立的“执行流”。如果店里只有一个员工(单线程),那速度将会很慢效率极低;多个员工分工合作(多线程),那效率会得到大幅提高,这就是多线程的优势。一段代码,如果多线程环境下代码运行的结果是符合预期。
2026-04-28 10:42:08
6547
13
原创 计算机体系与进程管理全解析
是操作系统对一个正在运行的程序的一种抽象,也可以把进程看做程序的一次运行过程;在操作系统内部,进程又是操作系统进行资源分配的基本单位。站在操作系统的视角,管理进程:1)先描述出一个进程是什么样的,使用结构体,描述出进程的核心属性,进程控制块(PCB)是非常大的结构体有很多属性2)再把多个进程组织起来Linux操作系统,用链表把多个PCB连起来。
2026-04-22 23:47:33
463
8
原创 数据库事务:ACID特性与实战应用
事务的隔离性:mysql可同时被多个客户访问,为了保证不同客户端在对同条数据修改时出现的互相影响的情况,事务之间就需要互相隔离,也就是隔离性。
2026-04-14 11:15:51
413
5
原创 MySQL索引原理与优化实战
MySQL索引是提高查询效率的重要数据结构,主要采用B+树实现。B+树具有稳定时间复杂度O(logN),支持范围查询,通过减少磁盘IO提升性能。索引页是内存与磁盘交互的最小单元(16KB),采用页目录结构实现二分查找优化查询。索引类型包括主键索引、普通索引、唯一索引等,其中主键索引即聚集索引。创建索引可通过自动约束或手动命令实现,复合索引可包含多列。合理使用索引能显著提升查询效率,但过多索引会影响增删改性能并占用磁盘空间。通过分析不同数据结构特点,B+树因其均衡性能成为MySQL索引的最佳选择。
2026-04-11 23:28:25
5706
6
原创 数据库入门指南:核心操作与约束详解
这里给有个小教训就是一口气还是不能贪多啊,这边东西还是很多,应该把联合查询单开一章的,没有规划好,写了有种不到头的感觉,这期到现在已经写不动了,就没有配运行图片了,后期有空再给这个单开一章,有问题可以找我交流哦。insert into 表名[(指定列)] values (值[,值,]),[(值[,值,])] //多行插入;insert into 表名(字段1,字段2,,,) values (值1,值2,,,)//查询表中的所有列,不加条件限制,表中所有记录查出来。
2026-03-28 22:58:30
412
6
原创 深入解析Set与Map的奥秘
知识比较细碎,单看感觉难度不大,但是真的融合用起来还是有一定难度。数据结构还是太有实力了,这篇文章拖了好多天了,今天总算是写完了,天气太冷了压根不想动,但是还有好多东西没有学,任重道远,加油吧,老铁们!!
2026-01-30 16:29:02
900
5
原创 二叉搜索树:高效查找与删除指南
对有n个结点的二叉搜索树,若每个元素查找的概率相等,则二叉搜索树平均查找长度是结点在二叉搜索树的深度 的函数,即。3. cur 不是 root,cur 是 parent.right,则 parent.right = cur.right。3. cur 不是 root,cur 是 parent.right,则 parent.right = cur.left。2. cur 不是 root,cur 是 parent.left,则 parent.left = cur.right。最优情况下,二叉搜索树为完全二叉树,
2025-12-29 12:36:48
1054
1
原创 排序算法及实现
写这么久不做总结是不可能的,我的天啊天啊,最开始听的时候感觉很简单,等所有内容听完了,发现之前听的都糊在一起了,然后就开始敲敲敲把它们都拆分出来,太不容易(呜呜呜)。这是我第一篇写那么长的博客,太有成就感了!昨天晚上刷翁恺说的话,个人觉得还是很不错的鸡汤,分享给大家:“计算机的所有东西都是人做出来的,别人能想出来,我也一定能想出来,计算机里头没有任何黑魔法,所有的东西只不过是我现在不知道而已”!关关难过关关过,加油吧大家。
2025-12-24 23:26:07
977
3
原创 深入解析优先级队列与堆结构
依旧小结,整体来说堆这一节难度不大,但是还是搞了挺久的,可能冬天到了要冬眠了吧,天天晕晕的。老己不要对自己太好哇!!!
2025-12-20 23:28:51
959
5
原创 树结构入门:从概念到遍历
非终端结点或分支结点:度不为0的结点;如上图:D、E、F、G...等节点为分支结点兄弟结点:具有相同父结点的结点互称为兄弟结点;如上图:B、C是兄弟结点堂兄弟结点:双亲在同一层的结点互为堂兄弟;如上图:H、I互为兄弟结点结点的祖先:从根到该结点所经分支上的所有结点;如上图:A是所有结点的祖先子孙:以某结点为根的子树中任一结点都称为该结点的子孙。如上图:所有结点都是A的子孙森林:由m(m>=0)棵互不相交的树组成的集合称为森林。
2025-12-16 11:08:57
678
3
原创 二叉树经典题解:从基础到进阶
遍历二叉树,当左子树为空且右子树不为空时,左子树在字符串中用()表示,否则直接返回。3,定义inbegin和inend在左右子树中进行递归,确定新的根结点和左右子树。2,如果一个结点为root,另一个在这个root的子树中,返回root。3,遍历左右子树如果左右子树一边一个指定结点,返回这层的root。2,先压入左子树,走的时候先存根节点的值,走完后遍历它的右子树。1,用栈模拟递归过程,把根节点压入栈,循环弹出栈顶节点。2,判断当前root的左子树是否和子树的左子树相同。
2025-12-05 21:54:03
773
4
原创 循环队列与栈的巧妙实现
这里我们需要了解循环队列和普通队列的不同:普通队列的下标可以一直往后加,当循环队列的rear走到当前位置时,如果在选择普通的+1就会越界,那么怎么让他的下标指向下标0位置完成循环呢?1,下标最后再往后(offset 小于 array.length): index = (index + offset) % array.length。1,判断第二个栈是否为空,为空把第一个栈所有元素放入第二个栈,取栈顶元素。2,取出n-1个元素放入空队列中,将队列1的唯一元素拿出。1,将n个元素都放入不为空的队列1中。
2025-11-24 19:32:05
616
9
原创 深入解析:双向链表LinkedList的实现与应用
依旧给出部分功能的实现代码//无头双向链表实现//定义类部类,即每个小结点//头插法}else {head = cur;//尾插法}else{last=cur;//任意位置插入,第一个数据节点为0号下标return;return;return;}else {//插入结点位置cur = code;//定义一个私有类来查找目标元素=0){index--;return cur;//查找是否包含关键字key是否在单链表当中。
2025-11-17 00:34:34
607
1
原创 链表部分功能实现
总结:实在是不想在细写每一步啥意思了,重点看move的两个,next存储的是下个结点的地址,val是这个结点的值。关关难过,关关过,加油。
2025-11-11 19:52:24
233
1
原创 深入理解ArrayList:从原理到实战
别看这代码简单我写了半天,不知道为什么就是搞了半天(心碎了),但是对顺序表有了很好的理解也值了(经验值+1)下次更新顺序表的发牌游戏,加油加油加油,明天必须再写一篇,哈哈哈。大家都别只看代码,还是要自己动手敲啊,敲了才知道那理解的不太好,看别人写都老简单了。
2025-11-07 22:17:26
409
1
原创 Java字符串操作全攻略
我的每个博客都要写个小结,哈哈哈哈,String其实没准备写,因为感觉用起来没什么难的,然后今天写题目发现知道大概调用那个,但是还是写不出来,查了各函数的意思才知道所以就决定还是写这个加深下印象吧。c,compareTo 先按照字典次序⼤⼩⽐较,如果出现不等的字符,直接返回这两个字符的⼤⼩差值,如果前k个字符相等(k为两个字符⻓度最⼩值),返回值两个字符串⻓度差值。字符"|","*","+"都得加上转义字符,前⾯加上“\\” ⽽如果是 "\" ,那么就得写成"\\\\"
2025-11-03 23:03:26
294
1
原创 Java图书管理系统开发教程
这里的将menu定义为抽象方法是因为不同的用户有不同的菜单,这里后面会实现动态绑定。work方法有两个部分,一个是choice及操作者所选择的身份信息,一个是操作书架,不同的身份信息对应的功能不同,所以我们通过choice再去调用work,是其保持一致到此我们的图书管理系统就已经全部写完了,稍微复杂一点的地方在数组的调用,可着重看一下这块部分。这个代码就是看起来唬人,其实写起来也还好,对不懂的地方多研究一下,相信大家都可以完成,有不懂的地方可以问我哦。
2025-11-01 17:28:34
881
1
原创 揭秘Java抽象类的核心特性与应用
抽象类本身不能被实例化, 要想使用, 只能创建该抽象类的子类. 然后让子类重写抽象类中的抽象方法. 但是使用抽象类相当于多了一重编译器的校验. 使用抽象类的场景为实际工作不应该由父类完成, 而应由子类完成. 那么此时如果不小心误用成父类 了, 使用普通类编译器是不会报错的. 但是父类是抽象类就会在实例化的时候提示错误, 让我们尽早发现问题.在Java中,一个类如果被 abstract 修饰称为抽象类,抽象类中被 abstract 修饰的方法称为抽象方法,抽象方法不用 给出具体的实现体。
2025-10-13 22:20:40
302
原创 解密Java多态:从原理到实战
当类的调用者在编写 eat 这个方法的时候, 参数类型为 People(父类), 此时在该方法内部并不知道, 也不关注当前的 a 引用指向的是哪个类型(哪个子类)的实例. 此时 a这个引用调用 eat方法可能会有多种不同的表现(和 a 引用的实例 相关), 这种行为就称为。将一个子类对象经过向上转型之后当成父类方法使用,再无法调用子类的方法,但有时候可能需要调用子类特有的 方法,此时:将父类引用再还原为子类对象即可,即向下转换。,被重写的方法返回值类型可以不同,但是必须是具有父子关系的。
2025-10-12 22:45:18
916
原创 Java继承机制深度解析
优先在子类中找,找到则访问,否则在父类中找,找到 则访问,否则编译报错。通过派生类对象访问父类与子类同名方法时,如果父类和子类同名方法的参数列表不同(重载),根据调用 方法适传递的参数选择合适的方法访问,如果没有则报错;在子类方法中或者通过子类对象访问方法时,则优先访问自己的,自己没有时 再到父类中找,如果父类中也没有则报错。如果访问的成员变量子类中无,则访问父类继承下来的,如果父类也没有定义,则编译报错。,使其访问父类相关内容,否则默认访问子类。如果访问的成员变量与父类中成员变量同名,则优先访问自己的。
2025-10-10 21:02:50
265
1
原创 Java数组操作全攻略:从基础到排序
元素类型[ ][ ] array = new 元素类型[ ][ ]{ { },{ } }以升序数组为例,将数组中相邻元素从前往后依次进行比较,如果前一个元素比后一个元素大,则交换,一趟下来后最大元素 就在数组的末尾。元素类型[ ][ ] array = new 元素类型{ { },{ } }元素类型[ ][ ] array = new 元素类型[ 行数 ][ 列数 ]如果等于,返回该元素所在数组的下标。
2025-10-10 20:24:59
262
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅