- 博客(23)
- 收藏
- 关注
原创 小根堆创建,插入,删除,排序等操作图解
堆:是用数组实现的完全二叉树,没有使用指针,根据数组的下标进行构建堆eg:parentIndex = i;—》 leftIndex = 2i+1;rightIndex = 2i+2;堆的分类:大根堆,小根堆。大根堆的每个子树,根节点是整个树中最大的数据,每个节点的数据都比其子节点大小根堆的根节点数据是最小的数据,每个节点的数据都比其子节点小注意:堆的根节点中存放的是最大或者最小元素,但是...
2020-03-28 11:50:46 41629
原创 图解Mysql索引原理
索引像是一本书的目录列表,能根据目录快速的找到具体的书本内容,也就是加快了数据库的查询速度索引本质是一个数据结构索引是在存储引擎层,而不是服务器层实现的,所以,并没有统一的索引标准,不同存储引擎的索引的工作方式不同,也不是所有的存储引擎都支持所有类型的索引,即使多个存储引擎支持同一种类型的索引,其底层实现也可能不同————《高性能mysql》希望这些内容可以帮助你更好的理解mysql的索引,对sql优化能有更好的想法💡。
2024-06-04 17:39:59 1437
转载 JDK1.7 HashMap的死循环
所以在并发的情况,发生扩容时,可能会产生循环链表,在执行get的时候,会触发死循环,引起CPU的100%问题,所以一定要避免在并发环境下使用HashMap。曾经有人把这个问题报给了Sun,不过Sun不认为这是一个bug,因为在HashMap本来就不支持多线程使用,要并发就用ConcurrentHashmap。
2024-05-20 16:17:02 41
原创 Java集合之HashMap
HashMap是基于哈希表的Map接口实现的一种存储key、value的数据结构,提供了所有可选的映射操作,且键值允许null的存在,不保证数据映射的顺序,也不能保证顺序在一段时间内保持不变。
2024-05-15 14:03:45 610
原创 java多线程——线程池
线程池是管理java线程生命周期的工具降低资源消耗。通过池化技术能够重复利用已创建的线程,降低线程频繁创建和销毁造成的资源消耗提高线程的可管理性。无需程序员手动销毁线程,控制线程创建的数量,避免无限制的创建影响系统稳定性。
2024-05-15 14:00:51 1193
原创 Java集合之List
List是一个类似于数组的数据结构,可以存储任意类型的对象;List中常用的主要有ArrayList、LinkedList两个实现类,本篇文章也是主要讲解这两种结构,如图:这两个List的继承结构也不相同,在后文的内容都会有所体现。
2024-05-13 17:11:28 1158
原创 ThreadLocal 源码详解
ThreadLocal是一个java提供的本地线程副本变量工具类。主要用于将私有线程和该线程存放的副本对象做一个映射,各个线程之间的变量互不干扰,在高并发场景下,可以实现无状态的调用,特别适用于各个线程依赖不通的变量值完成操作的场景方法作用获取当前线程的副本变量值保存当前线程的副本变量值移除当前线程的副本变量值为当前线程初始副本变量值。
2024-05-13 15:03:15 525
原创 Node.js开发——一文教会你Promise实操
结果:返回一个新的promise对象,只有所有的promise都成功才返回成功,只要有一个失败就直接失败;结果:返回一个新的promise,第一个完成的promise对象的结果就是最终的结果状态。存储promise对象成功或失败的结果,也就是异步任务成功或失败的结果。是promise实例对象中内置的一个属性:promiseState。结果:返回一个失败的Promise对象,无论参数是什么。参数:promises:包含n个promise的数组。参数:promises:包含n个promise的数组。
2024-05-11 09:44:02 1086
原创 图解一致性哈希算法,一篇就吃透!
这种虽然有三个节点,但所有数据都存储在节点C上,一点也不均衡,当集群扩容或收缩时,受影响的数据过多,相当于退化为了普通哈希,如果节点C被移除了,那么根据规则节点C上的数据就会迁移到节点B上,若数据量过多超过了节点B的处理上限,那么节点B就会出问题,以此类推可能出现一连串的系统瓶颈问题,直到整个系统瘫痪。如上述的集群扩容,集群收缩也是同样的情况,所以这种对机器数量取模的hash函数,在集群扩容和收缩时都有非常大的局限性,为了解决该问题,一致性哈希算法应运而生~完全不用迁移数据吗?
2024-05-11 09:36:23 1190
原创 一篇文章教会你sql调优,简单有效可落地
数据库操作很容易变成接口的性能怪物,这篇文章也不讲非常深奥有难度的实操,都是一些非常简单可实现的思路和方法,我也是通过这些思路将2s的慢sql优化到了2ms。
2024-05-09 12:04:26 418
原创 Mysql 日志(redolog, binlog, undoLog)
write ops和checkpoint之间还空着的地方,可以用来记录新的操作,如果write ops追上了checkpoint,此时不能进行新的更新操作,需要停下来先擦除一部分内容。mysql的基本存储结构是页(记录都在页里面),所以更新语句时,mysql需要先把要更新的语句找到,加载进内存(buffer pool),再修改对应的记录,再写会磁盘。:是mysql server层面的日志,属于逻辑日志,是以二进制形式记录的,记录的是。的方式,即一份日志文件写到一定大小的时候会更换下一个文件,不会覆盖。
2024-05-09 11:52:14 957
原创 Node.js开发——MongoDB与Mongoose关系与基础操作
mongoDB是非关系型数据库database:数据库collection:集合,类似于mysql中的tabledocument:文档,类似于mysql表中的一条数据。
2024-04-30 16:00:50 882 2
原创 详解mysql事务(事务,隔离级别,死锁,mvcc)
InnoDB的mvcc是通过在每行记录后面保存两个隐藏的列来实现的,分别是行的创建时间,行的过期时间(并不是真正的时间,而是系统版本号),而事务开始时刻的系统版本号会作为事务的版本号。指的是整个数据库事务是不可分隔的工作单位,只有使事务中所有的数据库操作都执行成功,整个事务的执行才算成功,事务中任务一个sql语句执行失败,那么已经执行成功的sql语句也必须撤销,数据库状态应该退回到执行事务前的状态。因此,事务是一致性的单位,如果事务中某个动作失败了,系统可以自动地撤销事务使其返回初始化的状态。
2024-04-30 15:57:30 349 1
原创 leetcode-----无重复字符的最长子串
题目描述:给定一个字符串,找出其中不含有重复字符的最长子串的长度例1:"abcabcbb" -》 3例2:"bbbbb" -》1例3:"pwwkew" -》3解法一、暴力枚举思路:给定两个下标left和right,表示一个子串,对于每个子串,都将right元素和right之前的元素进行比较,判断是否有重复元素,若都不重复,right向右移动一步abcabcbbab ->判断s[1],s[0]是否相等abc->分别判断s[2]和s[1],s[0]是否相等a...
2020-11-16 21:31:44 165
原创 leetcode-----两数相加
问题描述:给出两个非空得链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且他们的每个节点只能存储 一位 数字。如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。除了数字0之外,这两个数都不会以0开头示例:输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)输出:7 -> 0 -> 8原因:342 + 465 = 807思路:从头遍历,直到两个链表都走到结尾,若其中一个走到结尾则用0补上。和十进制的
2020-11-02 19:50:31 166 1
原创 leetcode-----两数之和
问题描述:给定一个整数数组nums和一个目标值target,请你在该数据中找出 和 目标值的那两个整数,并返回他们的数组下标。你可以假设每种输入只会对应一个答案,但是,数组中同一个元素不能使用两遍。实例:给定 nums=[2,7,11,15],target = 9。因为nums[0] + nums[1] = 2+7 = 9,所以返回[0,1]解法一、暴力枚举 枚举数组中的每一个元素x,寻找数组中是否有元素y满足x+y == target,即y=target-x;当我们使用遍历整个数组的方式..
2020-10-30 15:26:15 129
原创 动态规划-----爬楼梯
题目描述:共有n个台阶,每次只能走1,2个,完成走完n个台阶共有多少中方式解析:第n个台阶走几步取决于 走到n-1和n-2的方式 ,因为走完n-1还剩1阶台阶,走完n-2还剩2个台阶,所以都只需要再走1步即可,所以是 count(n) = count(n-1)+count(n-2);private static int stepMethods(int n) { if (n == 1) { return 1; } else if ...
2020-09-04 17:00:05 137 1
原创 java之List集合调用remove方法【陷阱及正确用法】
《阿里巴巴开发手册》一、通过forEach 调用List.remove()抛出异常信息:java.util.ConcurrentModificationException ---》 fast_fail机制查看remove方法源码,并没有和异常相关信息查看编译后的class文件 :原来for each的实际上使用的是iterator来遍历循环,其中核心方法是hasNext()和next()看一下具体的实现:这是java集合的 fas...
2020-06-16 13:34:53 873
原创 详解Tcp和Udp的区别
Tcp:面向连接,可靠的,字节流服务Udp:无连接,不可靠的,数据报服务服务类型字节流:【“流”是指流入到进程或从进程流出的字节序列】应用层发送的次数,与接收的次数没有关系,tcp模块会先将发送端的数据放入tcp发送缓冲区中,当tcp模块真正开始发送数据时,tcp缓冲区中的数据可能会被封装成一个或多个tcp报文段发出(发送方由内核根据当前的网络情况(滑动窗口,拥塞控制)和对方给出的窗口...
2018-08-10 23:02:25 464
原创 详解希尔排序的实现
希尔排序是简单插入排序的改进版本,也称为缩小增量排序。实现思想: 将待排序数据分成若干组(gap组),每组内的数据是不连续的,是间隔了一定“增量”的,然后对每组数据进行简单插入排序,使得待排序的全部数据大概有序,再依次缩减增量进行插入排序,知道全部数据基本有序(组内数据的增量足够小的时候),最后再对全部数据进行一次简单插入排序(只有一组),即可完成排序 (注:简单插入排序是数据越有序越快)如下图
2017-10-25 22:46:54 648
原创 详解TCP三次握手和四次挥手过程
tcp是主机对机的传输控制协议,采用流式服务,提供面向链接,可靠的链接服务采用三次握手建立客户端与服务器之间的链接: 三次握手是在客户端执行connect(向服务器发起链接)时开始的 先看一下三次握手的过程 1.服务器通过listen调用进入LISTEN状态,被动等待客户端链接2.客户端向服务器端发送SYN(请求链接),此时客户端进入SYN_SENT状态3.服务器端监听到有链
2017-10-12 12:31:23 285
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人