- 博客(21)
- 资源 (2)
- 收藏
- 关注
原创 JAVA并发编程
一个或者多个操作要么全部执行成功要么全部执行失败。:程序执行顺序按照代码顺序先后执行,但是CPU可能会对指令进行重排序。:当多个线程访问同一个变量时,如果一个线程修改了变量,其他线程立即获取最新的值。
2023-08-08 17:41:41
85
原创 知识点总结3
但:分表需要修改源程序代码,会给开发带来大量工作,极大的增加了开发成本,故:只适合在开发初期就考虑到了大量数据存在,做好了分表处理,不适合应用上线了再做修改,成本太高等。6、数据库升级,比如:把MySQL数据库换成大数据引擎处理数据、换成阿里云POLARDB,POLARDB 是阿里云自研的下一代关系型分布式云原生数据库,100%兼容MySQL,存储容量最高可达 100T,性能最高提升至 MySQL 的 6 倍。5、硬件升级,这办法是最简单的,相对的成本也高,老板就不愿意了。虚拟机栈:也是线程私有的,
2023-08-08 17:39:46
96
原创 知识点总结2
一个结点就是磁盘一个内存页,内存页大小固定,那么相比 B树 这些便可以存更多的索引结点,出度更大,树高也就会更矮,这样查询次数少,磁盘 IO 少,性能也就更佳。,B+树需要拆分合并索引数据页,跳表则独立插入,并根据随机函数确定层数,没有旋转和维持平衡的开销,因此。因为B+树的原理是 叶子节点存储数据,非叶子节点存储索引,B+树的每个节点可以存储多个关键字,有层数概念的双向链表,有头节点,尾节点,记录长度和层数,头节点是傀儡结点用来指向下一个结点。是链表结构,一条数据一个结点,如果最底层要存放。
2023-08-08 17:38:29
106
原创 知识点总结
首先,调用key1所在类的hashCode()计算key1的哈希值,此哈希值经过扰动函数计算,使其hash值更散列(调用 key 对象的 hashcode() 方法计算出来 hash 值,将 hash 值的高 16 位右移并与原 hash 值取异或运算(^),混合高 16 位和低 16 位的值,得到一个更加散列的低 16 位的 hash 值),得到在Entry数组中的存放位置。 如果key1的哈希值与已经存在的数据的哈希值都不相同,此时的key1-value1添加成功。红色节点的父节点都是黑色。
2023-08-08 17:37:07
76
原创 分布式锁(Redission)
Redisson是一个在Redis的基础上实现的Java驻内存数据网格(In-Memory Data Grid)。它不仅提供了一系列的分布式Java常用对象,还提供了许多分布式服务,其中就包含了各种分布式锁的实现Redis提供了分布式锁的多种多样功能。
2023-07-21 11:45:14
505
1
原创 分布式锁(redis)
实现分布式锁时需要实现两个基本方法互斥:确保只能有一个线程获取锁非阻塞:尝试一次,成功返回true,失败返回false手动释放:获取锁的时候添加一个超时时间DEL lock我们利用redis的方法,当有多个线程进入时,我们就利用该方法来获取锁。第一个线程进入时,redis 中就有这个key了,返回了1,如果结果是1,则表示他抢到了锁,那么他去执行业务,然后再删除锁,退出锁逻辑,没有抢到锁(返回了0)的线程,等待一定时间之后重试。
2023-07-21 11:14:31
316
1
原创 若依后端笔记
1.自定义注解只是标记,不具备切面逻辑:自定义注解本身只是一个标记,指示哪些方法需要记录日志,但它本身并不能实现切面逻辑,即在目标方法执行前后进行日志记录。因此,需要编写切面来定义日志记录的具体逻辑。2.日志记录与业务逻辑相分离:切面的作用是实现与业务逻辑相分离的横切关注点,并提供一种通用的方式来处理这些关注点。日志记录通常不仅仅是简单的打印一行日志,还可能涉及日志级别、日志内容格式化等复杂操作,因此将日志记录逻辑放在切面中,能够使业务逻辑更加清晰和干净。
2023-06-19 22:08:47
183
原创 Git常用操作
1.打开Git Bash2.设置用户信息git config --global user.name “bxh”git config --global user.email “1344971042@qq.com”查看配置信息:git config --global user.namegit config --global user.email打开GitBash,执行touch ~/.bashrc 创建.bashrc文件打开GitBash,执行 source ~/.bashrc1)在电脑任意位置创建一个空目
2023-04-23 12:06:51
70
原创 LeetCode 206.反转链表
题目描述:反转一个单链表。示例: 输入: 1->2->3->4->5->NULL输出: 5->4->3->2->1->NULL递归法class Solution {public: ListNode* reverseList(ListNode* head) { if(head==NULL){ return NULL; } if(head->next.
2021-01-28 10:27:39
98
原创 LeetCode 226.翻转二叉树
题目描述:翻转一棵二叉树。示例:输入: 4 / \ 2 7 / \ / \1 3 6 9输出: 4 / \ 7 2 / \ / \9 6 3 1class Solution {public: TreeNode* invertTree(TreeNode* root) { if(root==NULL){ return NULL; }.
2021-01-27 23:47:20
90
原创 LeetCode 116.填充每一个节点的下一个右侧指针
题目描述给定一个 完美二叉树 ,其所有叶子节点都在同一层,每个父节点都有两个子节点。二叉树定义如下:struct Node {int val;Node *left;Node *right;Node *next;}填充它的每个 next 指针,让这个指针指向其下一个右侧节点。如果找不到下一个右侧节点,则将 next 指针设置为 NULL。初始状态下,所有 next 指针都被设置为 NULL。进阶:你只能使用常量级额外空间。使用递归解题也符合要求,本题中递归程序占用的栈空间不算做额外的.
2021-01-27 23:43:11
208
原创 LeetCode 114.二叉树展开为链表
给你二叉树的根结点 root ,请你将它展开为一个单链表:展开后的单链表应该同样使用 TreeNode ,其中 right 子指针指向链表中下一个结点,而左子指针始终为 null 。展开后的单链表应该与二叉树 先序遍历 顺序相同。实例1:输入:root = [1,2,5,3,4,null,6]输出:[1,null,2,null,3,null,4,null,5,null,6]示例 2:输入:root = []输出:[]示例 3:输入:root = [0]输出:[0]class So.
2021-01-27 23:39:42
347
原创 LeetCode 1. 两数之和
1.两数之和给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 的那 两个 整数,并返回它们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。你可以按任意顺序返回答案。示例 1:输入:nums = [2,7,11,15], target = 9输出:[0,1]解释:因为 nums[0] + nums[1] == 9 ,返回 [0, 1] 。示例 2:输入:nums = [3,2,4], target = 6输出:
2021-01-24 14:34:16
83
原创 c++内存分区与new关键字使用
c++核心编程内存分区模型c++程序在执行时,将内存大方向分为4个区域代码区:存放函数体二进制代码,由操作系统进行管理的全局区:存放全局变量和静态变量以及常量栈区:由编译器自动分配释放,存放函数的参数值,局部变量等堆区:由程序员分配和释放,若程序员不释放,程序结束时由操作系统回收1.1程序运行前在程序编译后,生成了exe可执行程序,未执行前分为两个区域代码区: 存放cpu执行的机器指令 代码区是共享的,共享的目的是对于频繁被执行的程序,只需在内存中有一份代码即可 代码区
2021-01-22 11:55:15
149
原创 抽象类和接口
抽象类和接口用关键字abstract修饰的类称为抽象类。例如:abstract class A { … }用关键字abstract修饰的方法称为抽象方法。对于抽象方法,只允许声明,不允许实现,即抽象方法只有方法声明,而没有方法体。例如:abstract int min(int x,int y); 抽象类可以包含抽象方法。抽象类可以包含普通类能够包含的任何东西,例如非抽象方法、成员变量等,此外还可以有抽象方法。例如:abstract class A { abst
2020-06-17 15:45:17
361
原创 java基础2
方法重载:方法重载是多态性的一种。对象的功能通过类中的方法来体现,功能的多态性就是通过方法重载来体现。方法重载的意思是:一个类中可以有多个方法具有相同的名字,但这些方法的参数必须不同,即或者是参数的个数不同,或者是参数的类型不同。当调用一个重载的方法时,Java编译器就是先根据方法名,再根据方法的参数类型、参数顺序、参数个数匹配结果来确定匹配哪个方法。public class TestOverload { public static void main(String[] args) { fl
2020-06-17 09:58:04
170
原创 java基础知识点
知识点标识符用户定义命名的字,其作用是用于标识常量、变量、文件、类、方法等的名字。开始字符可以是字母,下划线,符号之一,推荐字母开头。组成可以是字母、下划线,符号之一,推荐字母开头。组成可以是字母、下划线,符号之一,推荐字母开头。组成可以是字母、下划线,、数字。注意:Java语言严格区分大小写注释行注释 //块注释 /* */文档注释 /** */注意:文档注释只能放在类块前与类块内的函数块前,如果放在函数块内部,则被当成块注释。在文档注释中可以使用HTML标记来得到一些定制的格式。
2020-06-16 15:44:43
177
原创 java修饰符
Java修饰符修饰符用来定义类、方法或者变量,通常放在语句的最前端。访问控制修饰符Java中,可以使用访问控制符来保护对类、变量、方法和构造方法的访问。default(即默认,什么也不写): 在同一包内可见,不使用任何修饰符。使用对象:类、接口、变量、方法。private在同一类内可见。使用对象:变量、方法。 注意:不能修饰类(外部类)私有访问修饰符是最严格的访问级别,所以被声明为 private 的方法、变量和构造方法只能被所属类访问,并且类和接口不能声明为 private。声明为私有访问
2020-06-15 20:27:05
108
原创 配置jdk
配置jdk以下的变量可以设置成用户变量,也可以设置成系统变量。他们的区别只是使用权限的问题而已。去oracle官网下载适合自己电脑版本的jdk最好安装到默认路径安装成功之后的样子如下:然后去控制面板找到高级系统设置点击环境变量在系统环境变量新建一个变量名为JAVA_HOME,变量名为之前安装的jdk的路径在Path路径下添加**%JAVA_HOME%\bin;**在新建一个CLASSPATH变量值设置为**.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\
2020-06-11 18:01:53
175
原创 位运算技巧
位运算技巧数字和1相与 判断奇偶x&1=1 奇数x&1=0 偶数不用其他空间交换两值a=a^b;b=a^b;a=a^b;或a=a+b;b=a-b;a=a-b;a^0=a a^a=0不用其他空间找数组中唯一成对的那个数int b=0;for(int i=1;i<10;i++){b=b^i;}int a[10]={1,3,4,3,5,6,8,7...
2019-11-13 11:18:20
231
bxh_2018_0620_hotel.zip
2020-06-16
爬虫+机器学习聚类分析
2020-06-15
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人