- 博客(13)
- 资源 (3)
- 收藏
- 关注
原创 主键冲突,失败的insert变成共享锁,导致死锁,经典案例随时复现
具体来说,当我们使用INSERT语句插入数据时,MySQL会根据数据表的唯一索引来创建一条排他锁,这样可以确保其他事务不能同时修改该数据。在MySQL中,当我们使用INSERT语句向表中插入数据时,如果插入的数据与已有的数据主键或唯一索引发生冲突,就会产生唯一键冲突错误(Duplicate Key Error)。总之,当INSERT语句产生唯一键冲突时,MySQL会将产生的排他锁转换为共享锁,以避免出现死锁等问题,保证数据的隔离性和一致性。需要注意的是,该操作只是在发生唯一键冲突时才会执行。
2023-06-09 23:02:53 1999
原创 缓存的优点和缺点
概念:缓存一般是为了应对高并发场景、缓解数据库读写压力,而将数据存储在读写更快的某种存储介质中(如内存),以加快读取数据的速度。先查询缓存中有没有要的数据,如果有,就直接返回缓存中的数据。优点1.提升了用户体验:用户在使用产品过程中建立起来的一种纯主观感受。缓存的使用可以提升系统的响应能力,大大提升了用户体验。2.减轻了服务器压力。客户端缓存、网络端缓存减轻应用服务器压力。服务端缓存减轻数据库服务器的压力。缺点:1.额外的硬件支出。缓存是一种软件系统中以空间换时间的技术需要额外
2022-05-30 00:00:51 2742
原创 堆排序(java完整代码)
这里的堆并不是JVM中堆栈的堆,而是一种特殊的二叉树,通常也叫作二叉堆。它具有以下特点:1)它是完全二叉树2)每个结点的值都大于或等于其左右孩子结点的值,称为大顶堆。每个结点的值都小于或等于其左右孩子结点的值,称为小顶堆。代码中只体现大顶堆。堆排序的基本思想是:.1)将待排序序列构造成一个大顶堆2)此时,整个序列的最大值就是堆顶的根节点。3)将其与末尾元素进行交换,此时末尾就为最大值。4)然后将剩余n-1 个元素重新构造成-一个堆,这样会得到n个元素的次小值。如此反复执行,便能得到一个有序
2022-05-18 02:56:38 1881
原创 哈希表介绍,冲突解决办法,java版HashTableDemo
定义哈希表(Hash table,也叫散列表),是根据关键值key而直接进行访问记录(数据)的数据结构。散列表本质就是一个数组,数据存入到数组中,数据的索引是通过散列函数以key为入参计算出来的返回值(散列函数内部已经对数组长度取模防止数组越界),有的是拿到返回值再取模。关键字:key,散列函数(func),散列表=数组伪代码助理解index = func(key) 或index=func(key)%table.lengthdata = table[index]上面一个简单的
2022-05-16 21:28:53 158
原创 递归解决迷宫问题(java完整代码)
整体思路:1.创建一个10*10的二维数组迷宫。当前迷宫中二维数组的值为0代表从未走过,1,代表障碍物2,代表已经走过,该点只能走一次,不能返回重走,3代表死路(上下左右试探的时候,遇到障碍物或者其他死路点或者已经走过的点,判断该点为死路)。2.设置障碍物3.开始递归尝试路线。按照一个设定的下,右,上,左方向递归测试路线,直到找到最终路线。下面是代码。public static void main(String[] args) { //创建一个10*10的迷宫 int[][
2022-05-14 01:43:22 981
原创 头插法反转整个单链表(java完整代码)
头插法:节点插入到链表的头部,也就是addFirst()方法。单链表:一种链式存取的数据结构,用一组地址任意的存储单元存放线性表中的数据元素。链表中的数据是以结点来表示的,每个结点的构成:元素(数据元素的映象) + 指针(指示后继元素存储位置)。参照代码中的Node内部类。代码中方法介绍:add():插入到链表尾部。addFirst():头插法插入到链表头部。reverseAll():头插法反转整个链表。public class SingleLinkedList { //头结点
2022-05-12 14:17:11 934
原创 通俗理解垂直扩展和水平扩展
垂直的意思就是专注,扎根某个领域,深入发展。举个例子,比如专门的卖书的当当网,专门互联网招聘的拉勾网等就是垂直领域。比如蜘蛛侠,能力越大责任越大。水平可以跟复制,多等概念挂钩,1个10个不行,100个呢,1000个呢?比如成千上万的蚂蚁完成一项搬运工作。举几个对立的例子:服务器垂直(纵向)扩展,增加单台服务器性能。服务器水平(横向)扩展,多个服务器一起服务。垂直分库...
2022-05-11 10:34:15 1776
原创 java中Queue接口方法介绍
队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除(remove或poll)操作,而在表的后端(rear)进行插入(add或offer)操作。可以类比生活中的排队。入队列的时候要排到队伍的最后面(队尾),最前面的人(队头)先出列。先入先出,队伍中前面的人先排队的,而且最先出队。 /** *继承集合接口,所以Queue包含Collection的方法 */public interface Queue<E> extends Collect
2022-05-07 22:20:20 475
原创 java get,post请求带多个header参数,亲测有效
废话不多说,看代码/** * get请求(用于key-value格式的参数,且带有header请求头) * * @param url * @param paramMap 请求的参数map<key,value>键值对 * @param headerMap 请求的参数map<key,value>键值对 * @return */ public static JSONObject doGet(St...
2021-05-26 09:47:56 7005
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人