- 博客(10)
- 收藏
- 关注
原创 JVM虚拟机栈
2)当变量作用范围到了该方法之外,如静态的static修饰的变量可以被不同栈共享,变量被返回了,或这变量是参数传进来的,就不一定线程安全。在 Linux 中,TID 和 PID 在单线程进程中相同,但在多线程进程中,多个 TID 会对应同一个 PID。因为 ps H -eo 会显示所有线程的信息,使用 grep 进程id 可以只显示目标进程的线程。比如Object类中的一些方法。进程 ID(Process ID),表示该线程所属的进程 ID。就是一个栈,栈内元素是栈帧,每个栈帧对应一个方法的调用。
2025-03-21 17:22:53
384
原创 Redis持久化
线程并不能直接修改内存,它会维护一个“页表”,在子进程执行备份时,会从主进程。在主进程进行写操作时会从内存拷贝一份副本,之后读写都在副本上进行。(本文图像来自《黑马面试篇》)
2025-03-21 15:52:54
122
原创 Redis双写一致性
这种情况原先缓存中是10,线程2在缓存删掉后数据库更新前访问缓存,就会由于缓存未命中而写入缓存,最后会导致数据库中是20,缓存中是10的情况。先删一次缓存,修改数据库后,再删一次。)考虑到缓存一般是读多写少,为读操作添加共享锁,一个线程读的时候其他线程也可以读,但是不能写。实际情况下写入缓存是很快的,基本不会出现查询与写入之间另一个线程更新数据库并删除缓存。对DB操作后,发送消息到cache管理,再更新缓存,但也会有不一致的问题。为写操作添加互斥锁,一个线程写的时候,其他线程不能读写。
2025-03-21 15:48:39
132
原创 android studio 安装database navigator插件报错java版本不匹配
com/dbn/DatabaseNavigator has been compiled by a more recent version of the Java Runtime (class file version 55.0), this version of the Java Runtime only recognizes class file versions up to 52.0
2024-09-10 18:31:34
507
1
原创 简单理解归并排序
设置三个指针 i, j, k分别指向A[0], B[0], C[0]这时每个小块就可以看成是有序的,因为它的里面只有一个元素。归并排序就是将一个序列拆成一个一个元素组成的小块。假设我们要将两个升序数组合并为一个升序数组。我们需要再创建一个数组,它的大小为A和B的和,然后把每个小块按照上面的思想递归地慢慢合并。最后就能得到一个有序的序列。复杂度o(nlogn)
2023-12-04 16:09:34
349
原创 最小生成树的定义
一个图,含有v个节点,每个节点之间都相连(无回路),所以有v-1条边,于是任意再在两个节点间加一条边,就有了一条回路,但是此时的图可能不是唯一的。再加一个条件,边的权重和最小。
2023-12-04 14:48:54
383
原创 一种快速排序的冷门方式
这是两个指针分别指向8和28,下一次循环时前面的指针就大于后面的指针了,这时跳出循环。第一次排序完成,此时前指针指向28,我们就知道第二次排序的序列二该从28开始了。{12,2,16,30,8,28,4,10,20,6,18}快速排序的过程。然后前指针指向18,后指针指向12前的6,开始循环。以第一个元素为轴值,先将12与最后的元素18交换。之后是16大于12,10小于12,交换16和10。18大于12,6小于12,所以将18与6交换。跳出循环后将12放到原本的后指针的后面。
2023-12-04 14:33:42
376
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人