一、Java 线程
摘要:创建和运行线程 方法一:继承 Thread,重写 run() 方法 实际上是用 匿名内部类 实现了一个 Thread 的子类,override run() 方法 start() 让线程 runable,即让操作系统可以给它分配时间片 // 创建线程对象 Thread t = new Thread()
阅读全文
JVM 例子,理解
摘要:一个线程一个栈,栈为线程私有。图中只有一个 main 线程。某方法返回时,它对应的栈帧也会释放掉。 方法区进行类加载,类的字节码中有代码 code 所有对象都在堆进行分配 main 线程的时间片(内核分配的)用完了, 上下文切换,cpu 执行 t1 ,要把 main 线程的栈帧都保存下来
阅读全文
深入理解 Java 虚拟机 —— Java 内存模型与线程
摘要:处理器的效率和一致性(与 java 内存访问可类比) 计算机同时去做几件事情,不仅是因为计算机的运算能力强大了,还有一个很重要的原因是计算机的运算速度与它的存储和通信子系统的速度差距太大,大量的时间都花费在磁盘I/O、网络通信或者数据库访问上。 如果不希望处理器在大部分时间里都处于等待其他资源的空闲
阅读全文
Redis 跳表
摘要:参考 小林:https://xiaolincoding.com/redis/data_struct/data_struct.html#%E8%B7%B3%E8%A1%A8 cmu: https://www.cs.cmu.edu/~ckingsf/bioinfo-lectures/skiplists.
阅读全文
Redis 持久化方式
摘要:参考: 小林coding https://xiaolincoding.com/redis/storage/aof.html#aof-%E9%87%8D%E5%86%99%E6%9C%BA%E5%88%B6 https://www.cnblogs.com/lovezhr/p/15886823.html
阅读全文
LeetCode —— 动态规划
摘要:70. 爬楼梯 假设你正在爬楼梯。需要 n 阶你才能到达楼顶。 每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢? f(x) = f(x-1) + f(x-2) f(0)=1 f(1)=1 f(2)=2 > f(3)=3 > f(4)=5 设一个存放三个整数的数组,分别保存 f(
阅读全文
LeetCode —— 二叉树操作
摘要:543. 二叉树的直径 乍看是 根节点的 左子树最大高度 + 右子树最大高度 + 1 (如图一) 但其实不能这样,因为路径可能并不经过根节点(如图二) 因此要用一个 max 来保存最后的最大路径和 在求二叉树高度的递归中,在每个根节点(在每次递归中),比较 max 与 以这个当前根节点的 左子树最大
阅读全文
LeetCode —— 单调栈/单调队列
摘要:42. 接雨水(单调递减栈) class Solution { public int trap(int[] height) { int res = 0; Stack<Integer> leftWallStack = new Stack(); int len = height.length; left
阅读全文
深入理解 JVM —— 类加载及执行子系统案例
摘要:Tomcat —— 正统的类加载器结构 为一个功能健全的Web服务器,都要解决 如下的这些问题: 部署在同一个服务器上的 两个Web应用程序 所使用的 Java类库可以实现相互隔离。这是最基本的需求,两个不同的应用程序可能会依赖同一个第三方类库的不同版本,不能要求每个类库在一个服务器中只能有一份,服
阅读全文
深入理解 JVM -- 类加载
摘要:Java虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这个过程被称作虚拟机的类加载机制。 与那些在编译时需要进行连接的语言不同,在Java语言里面,类型的加载、连接和初始化过程都是在程序运行期间完成 的 这种策略让Ja
阅读全文
LeetCode —— 递归 dfs、回溯
摘要:22. 括号生成 class Solution { public List<String> generateParenthesis(int n) { List<String> result = new ArrayList(); if (n == 0) { return result; } // 必须
阅读全文
LeetCode —— 链表操作
摘要:21. 合并两个有序链表 可以和后面的 23. 合并 K 个升序链表 结合在一起看,不过这里只有两个链表,不用优先级队列,简单一比较就好 注意这个 // 这个head是特意造的,只是为了后面插入新节点的时候好插入,可以不用对头节点做特殊判断。最后返回head.next即可 ListNode head
阅读全文
MySQL —— 锁的粒度和类型、next-key lock
摘要:参考 https://xiaolincoding.com/mysql/lock/mysql_lock.html 全局锁(备份数据库) 加全局锁 flush tables with read lock 释放全局锁 unlock tables 执行后,整个数据库就处于只读状态了,这时其他线程执行以下操作
阅读全文
MySQL —— 事务的隔离级别、MVCC
摘要:《凤凰架构》一书中对事务的隔离级别以及事务的定义很清晰 https://www.cnblogs.com/suBlog/p/16592859.html 总结 写锁:X 排他锁,其他事务不能写入数据,也不能施加读锁(可读,但是不可加读锁) 读锁:S 共享锁,多个事务可以同时施加读锁,但是其他事务不能写入
阅读全文