- 博客(17)
- 收藏
- 关注
原创 手写位图:
向上取整:a/b->(a+b-1)/b 即可向上取整,b-1就是余数,只要加一点b的余数就可以实现向上取整;也就是说创建一个大小为5的整形数组,就能够装下5*32个数,并且为0~5 * 32-1 这段范围的所有数。既然是位图,肯定要知道操作的是哪里的位,所以可以把位图看成是一个整形数组,一个int类型就有32位。用bit组成的数组来存放数值,1代表存在、0代表不存在,取值存值都使用位运算。好处是极大的节省空间,从一个数要三十二位字节到只占用 1 bit 的空间。限制是加入的数必须为连续一段范围内的数。
2025-05-21 12:18:23
225
原创 MySQL锁机制
innoDB的行锁是针对索引加的锁,不通过索引条件检索数据,那么innoDB将对表中的所有记录加锁,此时就会升级为表锁;为了避免DML在执行时,加的行锁与表锁冲突,引入意向锁,使得表锁不用检查每行数据是否加锁,使用意向锁来减少表锁的检查。InnoDB的数据时基于索引组织的,行锁是通过对索引上的索引项加锁来实现的,而不是对记录加的锁。,在表上有活动事务的时候,不可用对元数据进行写入操作,元数据也就是表结构,元数据锁就是为了。索引上的等值查询(唯一索引),给不存在的记录加锁时,优化为间隙锁,也就是说。
2025-05-18 15:44:40
675
原创 Java线程池
用Java并发包下的CompletableFuture的runAsync方法System.out.println(("任务执行中,执行线程:"+Thread.currentThread().getName()));这个方法会自动将任务提交到线程池中异步执行,按照自定义线程的条件;创建一个新类,实现rejectExecutionHandle接口,并重写rejectedExecution()方法。
2025-05-17 21:08:17
342
原创 MySQL进阶--索引
有时候需要建立很长的字符串,这会让索引变得很呢大,1查询时,浪费大量的磁盘io,影响查询效率,这是可以之将字符串的一部分前缀,建立索引,这样可以大大节约索引空间,从而提高索引效率。尽量使用覆盖索引,也就是select 列的时候,选出来的列数据尽量是覆盖索引的,减少select * 查询使用了索引,并且需要返回的列,在该索引中已经全部能够找到,不然即使用了索引会发生回表查询,多次查询索引,效率也会下降。用or分割开的条件,如果or前的条件中列有索引,而后面的列中没有索引,那么涉及的索引都不会被用到。
2025-05-17 18:07:38
487
原创 构造前缀信息的技巧-解决子数组相关问题:
/则从这个前缀和下标的下一个位置开始到现在的位置,则为符合条件的最长子数组的长度。// 因为构造的sum数组多了一个sum【0】表示前零个数的前缀和。//对应数组就是sum[right+1]-sum[left]//0这个前缀和,已经出现过一次。//前right个数的前缀和减前left-1个数的前缀和。// value : 这个前缀和最早出现的位置。//sum[i]表示前i个数的和。// left--right区间的和。
2025-03-19 16:47:45
707
原创 守护线程与普通线程的区别:
与普通线程不同,守护线程的服务是非关键性的,它们的存在并不影响程序的完成。守护线程是可选的后台服务,用于执行非主要的任务,而普通线程则是执行核心业务逻辑的重要线程。普通线程(User Thread): 这些线程是程序中的主要活动线程,通常负责执行应用的核心任务。守护线程: JVM会在没有任何普通线程存活时自动退出,这意味着如果所有的普通线程都结束,守护线程也会被强制终止。守护线程(Daemon Thread)和普通线程(User Thread)在Java中都是线程的两种类型,但它们之间有着一些关键的区别。
2025-03-18 13:38:07
360
原创 单调栈算法以及相关练习
/(cur-left)*(i-cur)得到区间的组合数 * 这些区间的最小值。while (r>0 && temperatures[i]>temperatures[stack[r-1]]){ //stack[r-1]就是查看栈顶的值但是不对栈进行操作。while ( r>0&& arr[stack[r-1]]>=arr[i]){//如果栈顶的值大于等于当前值,就让栈顶出栈并结算。// (cur位置的高度-Max{left位置的高度,i位置的高度}) * ((i-left-1)*(i-left)/2)
2025-03-16 23:10:20
1048
原创 二分搜索算法
/从中点值先开始判断,因为是有序数组,当中点值大于num的时候,则表明中点值右边的所有值都是大于num的,这个时候就只需要改变右边界,从中点值的左边继续找即可,如果中点值小于num则说明中点+1,到右边界的范围中可能存在>=num的值,改变左边界,继续二分判断即可!//等同于(l+r)/2,这样子做的目的是为了防止溢出!//判断中点与num的大小,如果相等则直接返回表示找到num,不等则看大小关系,中点值大于num改变右边界,小于num改变左边界,继续二分查找!
2024-01-24 01:50:45
892
1
原创 MySQL day2
注意:当and和or要同时使用时,要注意优先级,and的优先级要高于or 如果要先执行or部分语句,像将其用括号括起来!下划线:任意一个字符。(%是一个特殊的符号,_也是一个特殊的符号,查找名字中的这些特殊字符时,要加上转移字符 \ )// sal在前,起主导,只有sal相等的时候,才会考虑启用ename排序。数据定义语言(凡是带有create、drop、alter的都是DDL)数据操作语言(凡是对表当中的数据进行增删改查的都是DML)in后面跟的是具体的值。=、大于>、小于=、小于等于
2024-01-22 22:08:23
948
原创 MySQL day1
数据库:英文单词DateBase,简称DB。按照一定格式存储数据的一些文件的组合。顾名思义:存储数据的仓库,实际上就是一堆文件。这些文件中存储了具有特定格式的数 据。数据库管理系统DateBaseManagement,简称DBMS。数据库管理系统是专门用来管理数据库中数据的,数据库管理系统可以对数据库当中的数据 进行增删改查。常见的数据库管理系统:MySQL、Oracle、MS SqlServer、DB2.......等SQL:结构化查询语言。
2024-01-21 23:28:28
830
1
原创 Java集合模块的深度学习
如果只重写equals方法,创建一个对象就放到hash后的表中的索引,,这时候不管内容是否相同或者不同了,因为底层自带的哈希code方法,是根据对象是否相同来创建的,只要对象不同,hashcode值就不同!key和value之间存在单向一对一的关系,即通过指定的key总能找到对应的value,通过Map的get方法,传入一个key,会返回对应的value值。但是value的值是可以相同的,Map存储的时候是根据key的哈希值来确定索引的,所以value的值不影响存放。
2023-10-25 21:42:56
100
原创 异或运算解leetcode136——只出现一次的数字
所以我们看到这道题时可以很轻松,只需要定义一个变量,令它为零,然后遍历整个数组依次去进行异或操作即可,我们知道出现两次的数进行异或就变成零了,那么最后整个结果就时那个只出现一次的数了。题目:给你一个 非空 整数数组 nums ,除了某个元素只出现一次以外,其余每个元素均出现两次。异或运算符合是交换律和结合律即:a ^ b ^ c= a ^ (b ^ c) ,a ^ b ^ c = a ^ c ^ b。输入:nums = [4,1,2,1,2]输入:nums = [2,2,1]输入:nums = [1]
2023-10-09 21:28:58
195
1
原创 桶排序妙解leetcode1748——唯一元素的和(附带另一种常规解法)
题目:给你一个整数数组nums。数组中唯一元素是那些只出现的元素。请你返回nums中唯一元素的4唯一元素为 [1,3] ,和为 4。0没有唯一元素,和为 0。
2023-10-07 23:54:50
228
1
原创 求小于n的质数数量:
比如:如果求小于20的质数数量,设置大小为20的布尔数组k[20],将所有值初始化为true从2开始,判断k[2]是true,进入内循环,将k[4],k[6]......k[18]设false,然后到3,判断k[3]是true,进入内循环,将k[9],k[12] k[15]k[18]设为false,然后4,k[4]是false,不进入,然后5,以此类推一直到n-1;最终数组中剩下的就都是质数了。1.除了2这个偶数,其他的偶数都是非素数,因此,我们只需要对n以内的奇数进行判断就可以了。
2023-09-20 10:37:08
418
5
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅