- 博客(47)
- 收藏
- 关注
原创 MySQL中的锁详解
锁是计算机协调多个进程或者线程并发访问某一资源的机制。那么如何保证数据并发访问的一致性、有效性是数据库必须解决的一个问题,锁的冲突也是影响数据库并发访问性能的一个重要因素,所以数据库中锁的应用极为重要,其复杂度也更高。数据库锁是数据库管理系统用来管理对数据库中数据的并发访问的一种机制。锁的存在主要是为了保证数据的完整性和一致性,以及支持事务的原子性。
2024-08-26 22:17:30
367
原创 求职Leetcode题目(8)
第一种方法,直接暴力手撕算法:解法2:该算法是通过两数相乘时,乘数某位与被乘数某位相乘,与产生结果的位置的规律来完成。具体规律如下:乘数 num1 位数为 M,被乘数 num2 位数为 N, num1 x num2 结果 res 最大总位数为 M+Nnum1[i] x num2[j] 的结果为 tmp(位数为两位,"0x", "xy" 的形式),其第一位位于 res[i+j],第二位位于 res[i+j+1]。
2024-08-26 17:13:31
367
原创 java中位运算在算法中的应用
在Java语言中,提供了7种位运算符,分别是按位与(&)、按位或(|)、按位异或(^)、取反(~)、左移()和无符号右移(>>>)。位运算通常比算术运算更快,原因有以下几点:1. 硬件支持:位运算是直接在硬件层面上执行的,现代CPU有专门的电路来处理位运算,因此执行速度非常快。2. 节省空间:位运算不需要额外的内存空间,操作直接在寄存器中完成。3. 原子性:位运算是原子操作,不会出现像浮点运算那样的精度问题。
2024-08-26 02:02:26
841
原创 JAVA中的Stream流的使用详解
下面我们来举个例子来感受一下Stream有多优雅Stream的类型我们可以对流进行中间操作或者终端操作。小伙伴们可能会疑问?
2024-08-23 11:09:43
627
原创 Mysql索引的失效情况
在数据库中,单列索引只基于表中的一个列创建。而复合索引(也称为多列索引或多字段索引)是基于表中两个或更多列创建的索引。例如,对于一个包含 id, name, age 和 city 字段的表,我们可以创建一个基于 (name, age, city) 的复合索引。
2024-08-19 11:24:43
732
原创 JAVA中的网络编程巨详解(2w字)
在学习 Java 网络编程之前,我们先来了解什么是计算机网络。计算机网络是指两台或更多的计算机组成的网络,在同一个网络中,任意两台计算机都可以直接通信,因为所有计算机都需要遵循同一种网络协议。下面是一张简化的网络拓扑图。
2024-08-18 20:35:52
666
原创 MySQL索引的性能优化
在数据库调优中,我们的目标就是响应时间更快,吞吐量更大。利用宏观的监控工具和微观的日志分析可以帮我们快速找到调优的思路和方式。
2024-08-15 19:03:08
1353
原创 求职Leetcode算法题(7)
这道题要求时间复杂度为o(log n),那么第一时间想到的就是二分法,二分法有个前提条件是在有序数组下,我们发现在这个数组中存在两部分是有序的,所以我们只需要对前半部分和后半部分分别进行二分查找得到目标值就OK了。可以发现的是,我们将数组从中间分开成左右两部分的时候,一定有一部分的数组是有序的。拿示例来看,我们从 6 这个位置分开以后数组变成了 [4, 5, 6] 和 [7, 0, 1, 2] 两个部分,其中左边 [4, 5, 6] 这个部分的数组是有序的,其他也是如此。
2024-08-15 17:15:33
807
原创 全网最详细JAVA中反射详解(1.5w字)
对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。要想解剖一个类,必须先要获取到该类的字节码文件对象。而解剖使用的就是Class类中的方法。所以先要获取到每一个字节码文件对应的Class类型的对象。反射就是把java类中的各种成分映射成一个个的Java对象。例如:一个类有:成员变量、方法、构造方法、包等等信息,利用反射技术可以对一个类进行解剖,把一个个组成部分映射成一个个对象。
2024-08-15 00:25:52
1061
原创 JAVA线程中synchronized的四种锁状态详解
当一个实例方法被声明为synchronize时,锁时当前实例对象(this)。这意味着同一时间只有一个线程可以执行该实例的所有同步实例方法,如果多个线程尝试访问同一个对象的同步实例方法,它们将会被序列化,一个接着一个执行。当一个静态方法被声明为synchronize时,锁时这个类的class类。这意味着同一时间只有一个县城可以执行该类的所有同步静态方法。这与实例方法同步不同,因为他锁定的是类本身而不是类的某个特定的实例。这里介绍一下“临界区”的概念。在上面的例子中,如果。
2024-08-12 00:31:20
1073
原创 JAVA中的volatile和synchronized关键字详解
保证可见性:当一个变量被声明为`volatile`,并且每次使用这个变量时都必须从中读取,。这确保了所有线程看到的变量值都是最新的。a=1;b=a;使用 volatile 关键字修饰共享变量可以禁止这种重排序。怎么做到的呢?
2024-08-08 23:58:16
1214
原创 求职Leetcode题目(5)
我们可以想到,所有的不被包围的 O 都直接或间接与边界上的 O 相连。具体地,我们首先遍历该数组一次,如果某个元素为 0,那么就将该元素所在的行和列所对应标记数组的位置置为 true。那么我们首先要来考虑什么情况下, 'O' 不会被 'X' 包围。那就是这个'O'是在矩阵的边界上或者和矩阵边界上的'O'可达的。本题要求将所有被字母 X 包围的字母 O都变为字母 X ,但很难判断哪些 O 是被包围的,哪些 O 不是被包围的。这道题要将所有被 'X' 包围的 'O' 进行替换。
2024-08-07 00:17:53
652
原创 JAVA中的JMM(Java 内存模型)详解
因为在不同的硬件生产商和不同的操作系统下,内存的访问有一定的差异,所以会造成相同的代码运行在不同的系统上会出现各种问题。
2024-08-05 12:07:02
1256
原创 JAVA线程中的安全性问题详解
在一个单向行驶的道路上,每辆汽车都遵守交通规则,这时候整体通行是正常的。『单向车道』意味着『一个线程』,『多辆车』意味着『多个 job 任务』。如果需要提升车辆的同行效率,一般的做法就是扩展车道,对应程序来说就是『加线程池』,增加线程数。这样在同一时间内,通行的车辆数远远大于单车道。然而车道一旦多起来,『加塞』的场景就会越来越多,出现碰撞后也会影响整条马路的通行效率。这么一对比下来『多车道』就比『单车道』慢多了。防止汽车频繁变道加塞可以在车道间增加『护栏』,那在程序的世界里该怎么做呢?『线程安全问题』
2024-08-03 11:32:04
1013
原创 MySQL中索引详解
除聚簇索引之外的所有索引都称为辅助索引。在中InnoDB,辅助索引中的叶子节点存储的数据是该行的主键值都。在检索时,InnoDB使用此主键值在聚簇索引中搜索行记录。这里以user_innodb为例,user_innodb的id列为主键,age列为普通索引。
2024-08-03 01:31:03
1376
原创 求职Leetcode题目(4)
可定义 boolean[][] dp ,dp[i][j] 代表 s1 前 i 个字符与 s2 前 j 个字符拼接成 s3 的 i+j 字符,也就是存在目标路径能够到达 i ,j;边界 2:if i=0 : dp[0]dp[j] = s2[0-j) equals s3[0,j) 遇到 false 后面可以直接省略。边界 3:if j=0 : dp[i]dp[0] = s1[0-i) equals s3[0,i) 遇到 false 后面可以直接省略。边界 1:dp[0][0] = true;
2024-08-02 16:32:25
612
原创 求职Leetcode题目(3)
整体的思路是遍历字符串,遍历过程中将每行都看成新的字符串构成字符串数组,最后再将该数组拼接起来即可如果 numRows=1 则说明当前字符串即为结果,直接返回否则整个字符串需要经历,向下向右,向下向右,这样的反复循环过程,设定 down 变量表示是否向下,loc 变量表示当前字符串数组的下标如果 down 为 true,则 loc+=1,字符串数组下标向后移动,将当前字符加入当前字符串中。
2024-07-31 11:13:53
1003
原创 求职Leetcode题目(2)
据说这是2024年字节二面的题目,我感觉这道题跟接雨水有点类似,最重要的思路还是要找到什么时候能形成矩形的这么个情况,某个范围的矩形的高度,是由最短的柱形来决定的。
2024-07-30 19:27:22
1171
原创 JAVA中的多线程详解
进程是一个包含自身执行地址的程序,多线程使程序可以同时存在多个执行片段,这些执行片段根据不同的条件和环境同步或者异步工作,在一个进程内部可以执行多项任务,进程内部的任务被称为线程,线程是进程中的实体,一个进程可以拥有多个线程。多线程是指在一个程序中同时执行多个线程,每个线程都有自己独立的执行路径。在多线程中,程序的执行可以同时进行多个任务,从而提高系统的资源利用率和响应性能。在传统的单线程编程模型中,程序按照顺序执行,一次只处理一个任务。这种方式在某些情况下可能会导致效率低下或者无法满足需求。
2024-07-29 15:55:07
1136
原创 Java 序列流:Java 对象的序列化和反序列化详解
序列化是指将一个对象转换为一个字节序列(包含对象的数据对象的类型和对象中存储的属性等信息),它可以将多个InputStream对象串联起来,使得它们可以被当作一个单一的输入流来处理,以便在网络上传输或保存到文件中,或者在程序之间传递。在 Java 中,序列化通过实现 java.io.Serializable 接口来实现,只有实现了的对象才能被序列化。
2024-07-25 20:00:29
1082
原创 JAVA中的泛型机制详解
擦除方法定义中的类型参数原则和擦除类定义中的类型参数是一样的,这里仅以擦除方法定义中的有限制类型参数为例。如何证明类型擦除呢?return t;this.t = t;//输出结果为123//尽管Box在编译的时候是Integer类型,但是在运行的时候它只是Box//编译的时候就报错了//ture原始类型相等// true在这个例子中,我们定义了两个ArrayList数组,不过一个是泛型类型的,只能存储字符串;一个是。
2024-07-25 19:41:05
1090
原创 JAVA IO流中的转换流(字节流和字符流之间的转换)
转换流主要有两类:InputStreamReader和OutputStreamWriter。这两个类都属于字符流。其中InputStreamReader将输入流转为输入流,继承自Reader。OutputStreamWriter是将输出流转为输出流,继承自Writer。
2024-07-22 23:49:20
1084
原创 LeetCode 中有关数组的题目(JAVA代码实现)
这道题的思路还是简单的,首先我们需要两个指针,一个end用于不断向后获取s字符串中的字符,并将其存入map中,当end将要存入下一个字符时,判断map中是否有相同的字符,如果存在,就将strat更新为此位置,然后ans是用来存入start和end的最大不重复子串的最大值,整个循环结束之后,返回ans就OK了。看看结果,直接超过了百分之百的人!
2024-07-22 09:10:36
829
2
原创 十五届蓝桥杯JAVA B组题目详解(持续更新中)
这套题罗里吧嗦一大堆,不仔细看真的容易审题不清晰,而且很容易被误导,这道题难就难在题目理解上,这道题我们其实可以不用管副节点, 而且主节点添加了什么元素,以及副节点添加了什么元素,是否与主节点相等,你全都不用管,你只要在意主节点要添加元素的时候,你就往里面添加就好了,这个题目的意思就是,副节点会自动填充,我们不需要管,那这就好办了,我们只需要每次在显现元素的时候,找到所有队列中元素最少的就好了。由于副本的同步速度各异,因此为了保障数据的一致性,元素添加到主节点后,需要同步到所有的副节点后,才具有可见性。
2024-07-20 23:18:20
1261
原创 JAVA IO中的缓冲流,PrintStream类和PrintWriter以及System.in获取用户输入流详解
Java 的缓冲流是对字节流和字符流的一种封装,通过在内存中开辟缓冲区来提高 I/O 操作的效率。Java 通过 BufferedInputStream 和 BufferedOutputStream 来实现字节流的缓冲,通过 BufferedReader 和 BufferedWriter 来实现字符流的缓冲。它们内部维护了一个字节数组缓冲区,当进行读写操作时,先将数据读取到缓冲区或者从缓冲区写入数据,然后再与底层设备进行交互。这种方式减少了与底层设备的直接交互次数,提高了读写的效率。 缓冲流的基本原理:字节
2024-07-19 23:46:11
1155
原创 JAVA中的Prim和Dijkstra问题详解
所谓最小生成树,是指一个图的子图,它包含图中所有的顶点,。。在每一步,算法都会选择连接已选顶点和未选顶点之间权重最小的边,并将其加入到最小生成树中,同时将新加入的顶点标记为已选。。Prim算法的具体步骤如下:1. 初始化:选择一个起始顶点v,加入到最小生成树中,并将与v相连的边和它们的权重记录下来。2. 循环执行以下步骤,直到所有顶点都被加入最小生成树:a. 在所有连接已选顶点和未选顶点的边中,找到权重最小的边(u, v),其中u是已选顶点,v是未选顶点。
2024-07-15 20:38:28
893
原创 JAVA中的回溯算法解空间树,八皇后问题以及骑士游历问题超详解
设码在棋盘的某一位置(x,y)上,按照“走马日”的规则,下一步有8个方向走,如图所示。若给定起始位置(x0,y0),使用站和队列探索出一条马遍历棋盘的路径。,使得任何一个皇后都无法直接吃掉其他的皇后?为了达到此目的,任两个皇后都不能处于同一条横行、纵行或斜线上吗,问有多少种摆法。整体的思路就是不断递归下一个元素,然后从currentSubset中移除最后添加的元素,进行回溯,准备处理下一个元素。为背景的问题:如何能够在8×8的国际象棋棋盘上放置八个。意思就是一个集合s所有的子集的集合。
2024-07-11 19:15:37
1191
原创 JAVA的线性表数据结构的超详解
数组是实现顺序存储结构的基础程序设计语言中,数组(Array)具有相同数据类型,是一个构造数据类型。一维数组占用一块内存空间,每个存储单元的地址是连续的,数据的存储单位个数称为数组容量。设数组变量为a,第i个元素(存储单元)为a[i],其中序号i称为下标,一维数组使用一个下标唯一确定一个元素。如果数据存储结构存取任何一个元素的时间复杂度是O(1),则称其为随机存储结构。因此,数组是随机存储结构。数组一旦占用一片存储空间,其地址和容量就是确定的,不能更改。因此,数组只能进行赋值,取值两种操作,不能进行插入和删
2024-07-06 01:51:06
911
原创 JAVA中的static和内部类超详解
目录1.static的作用为什么要有这个static的修饰呢?静态方法 静态代码块2.内部类的概念1.静态内部类2.匿名内部类实例1:不使用匿名内部类来实现抽象方法实例2:匿名内部类的基本实现实例3:在接口上使用匿名内部类static是静态修饰符,什么叫静态修饰符呢?大家都知道,在程序中任何变量或者代码都是在编译时由系统自动分配内存来存储的,而所谓静态就是指在编译后所分配的内存会一直存在,直到程序退出内存才会释放这个空间,也就是只要程序在运行,那么这块内存就会一直存在。这样做有什么意义呢?在Java程序里面
2024-07-03 12:32:22
1007
原创 JAVA中的异常超详解
通常使用java语言内置的异常类就可以描述在编写程序时出现的大部分情况,但是有些时候,程序员需要根据程序设计的需要来创建自己的异常类,用以描述java语言内置异常类所不能描述的一些特殊情况。下面就来介绍如何创建和如何自定义异常。自定义异常类必须继承自Throwable类,才能被视为异常类,通常是继承Throwable的子类Exception或者Exception类的子孙类。下面是一个实例来演示如何创建一个自定义异常类1、创建一个MYException异常类,它必须继承Exception类。
2024-07-01 02:39:29
985
原创 JAVA中的二分查找详解
二分法的时间复杂度是 O(log n),其中 n 是数组的长度或搜索空间的大小。这是因为每次迭代都会将搜索区间减半,因此需要 log₂(n) 次迭代来将区间缩小到一个点。二分法的空间复杂度通常是 O(1),因为它只需要常数级别的额外空间来存储索引或中间值。- 二分法要求搜索区间是有序的,因此它不适用于无序数据的搜索。- 对于非单调函数,二分法可能无法找到零点或最优解。- 在实际应用中,二分法通常需要结合其他算法或逻辑来处理边界条件和特殊情况。
2024-06-22 20:15:42
1075
原创 java中的的七大常见排序超详解
1.第i趟,设前i个元素构成的{a0,a1,。。。,an-1}的适当位置,使插入后的子序列认识排序的,ai的插入位置由关键字比较大小确定。2.重复执行1操作,n个元素共需要进行n-1趟排序,每一行将第一个元素ai插入前面的子序列。关键字序列{32,26,87,72,26*,17}的直接插入排序(升序)过程如图所示,以“*”区别两个关键字相同的元素,其中{}表示一个排序的子序列。 详细的基本步骤: 运行结果 时间复杂度分析:最坏情况下为O(N*2),此时待排序列为逆序,或者说接近逆序
2024-06-22 15:38:13
1115
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人