- 博客(37)
- 收藏
- 关注
原创 MySQL 视图:把复杂变简单的“虚拟化”艺术
在数据库的世界里,视图(View)是一张虚拟表。它和我们平常用的物理表(Base Table)不同:物理表里存的是实实在在的数据,占硬盘空间;而视图里存的是一段 SQL 逻辑。当你去查视图的时候,MySQL 才会跑一遍底层的 SQL,把结果临时拼给你看。物理表是“食材”,视图就是一份“菜谱”。你并没有真的把菜做出来存在冰箱里,但只要你想吃,按菜谱一做就有。视图套视图,查起来爽,维护和排查慢查询时会让你抓狂。因为视图隐藏了底层逻辑,一定要在注释里写清楚它依赖哪些表。优先把视图用于报表展示和权限隔离。
2025-12-28 22:19:22
114
原创 【JavaEE】线程安全
操作,cpu寄存器的速度比内存读取的速度块几千倍,所以在短时间内,判断了几千次,才执行一次内存读取操作,而在第二个线程中,修改flag的值,是需要人为来输入的,最快也需要几秒钟,但是实际上,第一个线程已经执行了n次了,n次flag的值都没有发生变化,所以编译器就以为是flag不改变,就直接改成了在cpu的寄存机上读取数据,而不是从内存读取数据了。正常来说这个东西来说是个好东西,对我们写的代码的优化是很强的,因为每个程序员的水平参差不齐,所以大佬们就在。
2025-12-07 22:13:53
815
原创 【JavaEE】进程和线程的区别
进程是,一个运行起来的Java程序就是一个进程。补充:Java 进程的内存结构是在操作系统进程内存基础上,由 JVM 进一步划分(堆、方法区、虚拟机栈等),本质仍属于操作系统分配给 Java 进程的内存空间。进程控制块(PCB)是。把多个线程组织起来,像linux操作系统,是用链表这样的(不一定是链表)把多个PCB串起来。
2025-12-07 22:13:32
551
原创 【MySql】表的设计
这个就不符合3NF,因为通过学号可以找到学院,也可以找到学院地址,但是学院地址也依赖于所在学院,通过学院名,也可以得到学院所在位置。学生和课程之间的关系,一个学生可以选多门课程,但是一门课程可以被多名学生所选择。学生和班级的关系,一名学生只能有一个班级,但是一个班级可以有多名学生。关系型数据库的一个最基础的要求,即表中的字段不可再分,即原子性。在学生表中,一个学号对应着一个学生,一个学生也只对应着一个学号。在满足第二范式的基础上,不存在非关键字段,对任一候选键的。,通俗来说,非关键字段强依赖于候选键。
2025-12-01 12:45:20
334
原创 【MySql】CRUD
[where] …] [limit …语法:在查询后面直接加 order by [要排序的字段] desc/asc 就行, mysql默认是asc的。语法:delete from 表名 [where…语法:insert into 表名[字段1,…] values (,…这里有两个选项%/_ ,%是指匹配大于等于0个字符的数据,_是只匹配只有一个字符的数据。语法:insert into 表名[指定列] values (,…语法:insert into 表名[…语法:select 列名,列名,…
2025-12-01 12:43:37
1042
原创 【JavaEE】synchronized关键字
注: 正常来说这个代码的执行是这样的,外面那个synchronized把线程锁住了,这种情况叫做死锁,随后里面那个synchronized被阻塞等待了,但是大佬们早就想到这个了,所以在Java中就给synchronized整了个可重入的特性,这里只是针对了一个线程一把锁,有可重入锁来解决这个。这个是synchronized的基本特性,多个线程遇到synchronized的时候,如果是同一个对象上的锁的话,那么就会阻塞等待前一个线程结束。但是真正上锁和解锁都是最外围的那个synchronized来进行的。
2025-11-30 13:44:18
260
原创 【JavaEE】死锁和避免方法
可以在JVM的jconsole.exe里面查看Java的线程,如图所示,两个线程都想要获取对方的锁,所以都被阻塞卡住了,这个位置为啥要加一个sleep呢,因为我们知道cpu的线程调用是随机调用执行的,休眠1s保证t1和t2都拿到了自己的锁,并且开始尝试获取对方的锁。而哲学家就餐问题的话,1号哲学家拿1号筷子,2号哲学家拿2号筷子,3号哲学家拿3号筷子,4号哲学家拿4号筷子,5号哲学家。这里就可以写两个线程,两把锁,每个线程获取到一把锁之后,尝试获取对方的锁的代码就可以产生死锁了。,就可以破除循环等待了。
2025-11-30 13:42:00
639
原创 【Java】二叉搜索树
让这个cur往右走,反之往左走,直到找到这个值,然后开始插入,这个时候parent的作用就出来了,看这个val比parent大还是小,如果小,那么这个val就在parent.left,反之,parent.right就是这个val的位置。这个remove稍微有点麻烦,因为我们需要分情况来处理,当然还是老规矩,先找到这个要删除的数据的位置,然后再开始删除,所以我这个位置写了两个方法,一个remove和一个removeChild方法。来保存cur,否则找到了cur已经为空了 ,如果这个val。
2025-11-07 18:54:41
714
原创 【Java】异常
3.若抛出的是「受检异常」(如 IOException),方法必须用 throws 声明该异常(否则编译报错);throws 是「方法声明的一部分」,写在方法名和参数列表之后,作用是告知调用者:该方法可能会抛出这些异常,请你处理(调用者需用 try-catch 捕获,或继续用 throws 向上抛)。throws并没有对异常进行处理,常常是将异常传给JVM,而且会告诉其方法,如果是真正要对异常进行处理的话,就要用try-catch。1.仅声明「异常类型」,不抛出具体对象(实际抛出仍需 throw 语句);
2025-11-05 20:11:26
1038
原创 【Java】String类(超级详细!!!)
在JAVA中被双括号括起来的就是String类,在JAVA中没有’\0’的说法,String类是一个引用类型,本文主要是在Sting类的内部方法的学习以及使用。在 Java 中,Comparator 是一个用于定义对象排序规则的函数式接口(位于 java.util 包),它与。方法来比较两个对象的大小,从而支持排序操作(如:Arrays.sort())比较器”,允许在不修改原类的情况下,为类定义额外或临时的排序规则。在 Java 中,String的equals()方法用于比较两个字符串的。
2025-11-05 18:34:31
1029
原创 【Java】多态
如果父类引用指向的是其他类型的对象,强行向下转型会抛出 ClassCastException(类型转换异常)。多态的核心思想是:父类引用可以指向子类对象,并且通过这个引用调用方法时,会执行子类重写后的方法(而非父类的方法)。典型代表就是重载,在编译的时候,根据用户所传递的实参类型就确定了调用哪个方法。父类引用的对象不同,但调用同一个方法,此时表现出不同的行为,就叫做多态。顾名思义多态,就是多种态度,哈哈哈开玩笑的,在Java中的概念就是。向上转型的实现方式一共有三种,直接赋值,方法的传参,返回值。
2025-09-12 23:04:10
796
原创 【Java】继承
在Java中继承是在类之间的继承关系,将子类的共性抽取出来放到一个公共类中,子类继承父类,和现实是一样的,子类只能有一个父类,但是一个父类可以有多个子类,也可以有多个子类来继承,使用关键字extends来继承父类,比如说,Aminal这个是个父类,Dog可以继承他的属性和方法。这段代码Dog类中是没有name和age的,但是它可以使用,就是因为它继承到了它父类Aminal的属性name和age,所以可以使用其父类的方法和属性,但是当子类和父类有相同的属性的话,是优先访问子类的属性的,
2025-09-12 12:59:30
683
原创 初识C++
Hello,咱们前面学习了C语言和初级数据结构,咱们单单只学习了面向过程的语言和初级数据结构还不够,所以接下来咱们需要学习面向对象语言C语言的进阶版本------C++。
2024-10-12 17:06:28
430
原创 【C语言 || 数据结构】快速排序
快速排序是一种基于分治策略的排序算法,通过选取一个基准元素将数组分为两部分,再递归地对这两部分进行排序,平均时间复杂度为O(n log n)。它在原地进行排序,且在实际应用中非常高效。
2024-06-30 20:57:00
1331
3
原创 【C语言 || 数据结构】二叉树
二叉树是一种基本且高效的数据结构,每个节点最多有两个子节点:左子节点和右子节点。由于其结构简洁和操作的便捷性,二叉树在计算机科学领域有着广泛的应用。结点的度:一个结点含有的子树的个数称为该结点的度;叶子结点或终端结点:度为0的结点称为叶子结点;非终端结点或分支结点:度不为0的结点;双亲结点或父结点:若一个结点含有子结点,则这个结点称为其子结点的父结点;孩子结点或子结点:一个结点含有的子树的根结点称为该结点的子结点;兄弟结点:具有相同父结点的结点互称为兄弟结点;树的度。
2024-06-20 09:43:06
851
4
原创 【C语言 || 数据结构】希尔排序
图示:1.3 直接插入排序的时间复杂度1.4 希尔排序1.4.1 希尔排序概念当gap==3时,如图所示:
2024-06-19 16:35:58
869
9
原创 【C语音 || 数据结构】二叉树--堆
二叉树是一种重要的数据结构,其中每个节点最多有两个子节点:左子节点和右子节点。它常用于实现搜索算法、排序算法、数据存储和图形表示等。二叉树具有递归性,可以通过遍历算法(如前序、中序、后序和层次遍历)来访问其节点。学习和理解二叉树对于掌握更复杂的数据结构和算法至关重要。
2024-06-12 22:15:59
1969
7
原创 【C语言 || 数据结构】队列
在编程的浩瀚宇宙中,数据结构如同星辰般繁多而璀璨。而在这些繁星中,队列(Queue)无疑是一颗独特而耀眼的明星。它以其独特的“先进先出”(FIFO,First In First Out)原则,在计算机科学的各个领域发挥着至关重要的作用。今天,就让我们一起揭开队列的神秘面纱,探索它背后的原理、应用与魅力。队列(Queue)是一种特殊的线性表,其特殊之处在于它只允许在表的一端进行插入操作,而在另一端进行删除操作。具体来说,允许插入的一端称为队尾(Rear),允许删除的一端称为队头(Front)。
2024-05-17 13:48:09
1087
2
原创 【C语言 || 数据结构】栈
前面讲解了数据结构中的链表、顺序表,接下来就是栈了栈是一种限定仅在表尾进行插入或删除操作的线性表。这一端被称为栈顶(top),相对地,另一端被称为栈底(bottom)。栈顶是允许操作的,而栈底是固定的。栈的插入操作通常称为进栈压栈入栈(PUSH),而删除操作则称为退栈出栈(POP)。
2024-05-10 10:07:13
1811
8
原创 【C语言 || 数据结构】双向链表
各位小伙伴大家好,即上回的单向链表之后,双向链表来了,他和单向链表的主要区别就是,他有两个指针,同时指向前面一个节点,和后面一个节点,简直是完美,几乎解决的单向链表的大多数难题双向链表也叫双链表,是链表的一种,它的每个数据结点中都有两个指针,分别指向前面一个节点和后面一个节点。所以,从双向链表中的任意一个结点开始,都可以很方便地访问它的前驱结点和后继结点。
2024-05-09 20:16:42
510
6
原创 【C语言 || 数据结构】单向链表
我们每天都在与代码为伴,挑战着技术的极限。在这条道路上,我们或许会遇到无数困难和挑战,但正是这些磨砺让我们变得更加强大。记住,每一行代码都是智慧的结晶,每一次调试都是对完美的追求。不畏艰难,不惧失败,因为我们知道,只有经过无数次的尝试和努力,才能编织出最美的程序逻辑。让我们携手并进,用键盘敲击出未来的华章!一、单向链表:为什么将这个int给重定义?我们仔细想一下,如果这个是一个几百行的代码的情况下,每次都用int,如果下次要更改类型的话,岂不是要一行一行的换,我们这个定义就可以“以绝后患”。
2024-05-05 18:39:11
278
3
原创 【C语言 || 数据结构】顺序表
顺序表我们进入数据结构的开头,对后面的数据结构有一定的关系,顺序表是属于线性表中的一种还有别的数据结构,如:栈、队列、树......等等。
2024-04-22 22:10:27
602
3
原创 【C语言】自定义类型--结构体
位段,C语言允许在一个结构体中以位为单位来指定其成员所占内存长度,这种以位为单位的成员称为“位段”或称“位域”。利用位段能够用较少的位数存储数据。注意点:由于取地址操作符不能应用在位段上,所以没有能指向位段的指针。因为位段的存放位置不是按照字节为单位来存放的。1. 结构体位段的成员必须是 char、int、unsigned int 或signed int。第一个字节中存了七个bit位了,存放不下c的内存,所以就需要在重新开辟一块空间。,位段的成员在内存中是从左到右分配还是从右到左分配根据系统来定。
2024-03-31 19:06:16
327
2
原创 【C语言】数据在内存中的存储
因为E是个无符号位,而科学计数法的存储方式可能会导致,E出现负数的情况,所以在这里,E就需要在加上一个。在IEEE 754中规定,存储M的时候,默认第一位可以省略掉,只保存小数点后面的数据。如:保存1.82,就可以只保存82,这样就省略掉一个有效数字位。所以从上述代码中可以得出:整型和浮点数的数据在内存中的储存方式是不同的.在VS上面char和signed char类型的取值是一样的。细想一下的话,就会发现这个浮点数的M的位置是有限的,所以,浮点数的取值大小存储在float.h这个头文件里面。
2024-03-31 16:46:23
685
1
原创 c语言分支和循环语句
循环与 while 循环类似,但是 do...while 循环会确保至少执行一次循环。while语句一种入口条件循环,也就是说,在执行多次循环之前已决定是否执行循环。用来判定所给定的条件是否满足,根据判定的结果(真或假),0为假,非0的数都为真。循环,它们是在循环头部测试循环条件。也可以写成:if (判断条件){可以写多条语句}循环是在循环的尾部检查它的条件。根据输入的值,来决定执行的语句。if (判断条件)语句;
2023-12-03 11:52:26
262
1
原创 免费搭建一个属于自己的网站!!!
1、注册完成之后右上角有一个头像,左边点击加号,点击新建仓库,自己创建一个名称,填写好名称之后,路径会自己生成。3、检验自己下载的版本:Ctrl+R键打开终端,输入node -v。3、开源就是别人能看到你的这个仓库,私有就是只有你自己能够看到的。5、然后出现一个一个网址,这个时候一个属于你自己的网站就创建好了。2、可以在仓库介绍里面介绍一下自己的这个仓库是用来干什么的。2、在自己的文件夹里面添加一个名为Hexo的文件夹,并打开。4、下面有三个可点可不点,然后点击创建。5、创建完成之后:点击复制。
2023-11-27 20:09:38
774
2
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅