03 2023 档案

摘要:函数式编程介绍分为两章节。 第一章介绍C++函数式编程语法, 第二章简单介绍函数式编程思想。 C++语法 lambda表达式 lambda表达式是一个匿名函数。Lambda表达式基于数学中的λ演算得名,直接对应于其中的lambda抽象。 语法:[捕获列表](参数列表)->返回类型{函数体} 比如定义 阅读全文
posted @ 2023-03-29 14:40 kiper 阅读(38) 评论(0) 推荐(0) 编辑
摘要:背景 之前某需求在触发流控时需要中断ExcutorService中的子线程,发现无论Shutdown、ShutdownNow方法都无法直接停止子线程,今天看到线程的interrupt()方法才了解如何停止。 stop() 和 interrupt() stop方法 stop() 方法会真的杀死线程,不 阅读全文
posted @ 2023-03-18 17:26 kiper 阅读(172) 评论(0) 推荐(0) 编辑
摘要:Java 语言在 1.5 之前,提供的唯一的并发原语就是管程,而且 1.5 之后提供的 SDK 并发包,也是以管程技术为基础的。 管程:管理共享变量以及对共享变量的操作过程,让它们支持并发。 MESA 模型 先后出现过三种不同的管程模型,分别是:Hasen 模型、Hoare 模型和 MESA 模型。 阅读全文
posted @ 2023-03-18 16:26 kiper 阅读(87) 评论(0) 推荐(0) 编辑
摘要:安全性 并发bug三大源头 源头 原子性问题 可见性问题 有序性问题 bug风险点 存在共享数据并且该数据会发生变化(即多个线程会同时读写同一数据) 分类 数据竞争 当多个线程同时访问同一数据,并且至少有一个线程会写这个数据。 假设 count=0,当两个线程同时执行 get() 方法时,get() 阅读全文
posted @ 2023-03-18 15:37 kiper 阅读(40) 评论(0) 推荐(0) 编辑
摘要:AOF记录内容 传统数据库的日志,例如 redo log(重做日志),记录的是修改后的数据,而 AOF 里记录的是 Redis 收到的每一条命令,这些命令是以文本形式保存的(类似mysql binlog中的statement格式)。 MySQL redo log是物理日志,记录的是某个数据页上做了什 阅读全文
posted @ 2023-03-14 14:55 kiper 阅读(145) 评论(0) 推荐(0) 编辑
摘要:|题目|难度|要点| | | | | |拼车|●|不需要构造原始数组,直接判断即可| |航班预定统计|●|构造原始数组| |区间加法|●|构造原始数组| 差分数组中,diff[i] 就是 nums[i] 和 nums[i-1] 之差;diff[0] = nums[0]; 拼车 class Solut 阅读全文
posted @ 2023-03-13 23:35 kiper 阅读(15) 评论(0) 推荐(0) 编辑
摘要:原子性 原子性:一个或多个操作在CPU执行的过程中不被中断的特性 原子性问题源头是线程切换,保证对共享变量的修改时互斥的,就可以保障原子性。 简易锁模型 临界区:一段需要互斥执行的代码 改进锁模型 明确锁的范围,能够锁住的资源。 简易锁模型容易出问题的地方: 1、锁住了错误的资源 2、锁的粒度太大, 阅读全文
posted @ 2023-03-13 18:17 kiper 阅读(68) 评论(0) 推荐(0) 编辑
摘要:单线程:指redis网络IO和键值对读写。Redis 的其他功能,比如持久化、异步删除、集群数据同步等,其实是由额外的线程执行的。 采用单线程原因 多线程会有共享资源竞争带来的额外开销,如锁。为了避免竞争,采用了单线程。 redis快的原因 内存 内存操作比磁盘快 数据结构 高效的数据结构,参考Re 阅读全文
posted @ 2023-03-13 17:10 kiper 阅读(45) 评论(0) 推荐(0) 编辑
摘要:目录1. 全局锁1.1 使用场景1.2 readonly和FTWRL区别2. 表级锁2.1 表级锁类型2.1.1 表锁2.1.2 元数据锁(MDL)2.1.3 意向锁2.1.4 自增锁2.2 如何安全地给表新增字段2.2.1 新增字段阻塞场景2.2.2 新增字段安全方案2.2.2.1 方案2.2.2 阅读全文
posted @ 2023-03-13 09:51 kiper 阅读(166) 评论(0) 推荐(1) 编辑
摘要:|题目|难度|要点| | | | | |区域和检索 - 数组不可变|●|构造前缀和数组,避免每次O(n)遍历统计区间和| |二维区域和检索 - 矩阵不可变|●|矩阵前缀和,并通过矩阵加减拼凑目标矩阵| 区域和检索 - 数组不可变 class NumArray { private int[] preS 阅读全文
posted @ 2023-03-11 21:43 kiper 阅读(14) 评论(0) 推荐(0) 编辑
摘要:|题目|难度|要点| | | | | |删除有序数组中的重复项|●|快指针与慢指针值不同,那么应该将值放在慢指针下一位| |移除元素|●|快指针对应值若不需移除,那么应该将值放在当前慢指针| |最长回文子串|●|以当前位置或者当前位置及相邻位置扩散寻找回文子串 删除有序数组中的重复项 class S 阅读全文
posted @ 2023-03-11 20:26 kiper 阅读(15) 评论(0) 推荐(0) 编辑
摘要:Java内存模型 并发场景下,可见性/原子性/有序性是并发编程Bug源头,而Java内存模型解决了可见性和有序性问题。 Java内存模型定义 可见性问题原因是缓存,有序性问题原因是编译优化。为了兼顾程序性能和功能正常,按需禁用缓存以及编译优化。而按需,则是按照开发者代码完成。 Java 内存模型是个 阅读全文
posted @ 2023-03-11 16:44 kiper 阅读(81) 评论(0) 推荐(1) 编辑
摘要:5种类型操作 string 类型|命令|作用 -|-|- string|| |set key val|设置键值对 |set key val nx ex timeout|设置键值对,nx代表不存在则设置,ex表示过期时间设置 |del key|删除键值对 |get key|获取值 |mset key1 阅读全文
posted @ 2023-03-11 16:28 kiper 阅读(72) 评论(0) 推荐(0) 编辑
摘要:redis快的原因 内存操作 优秀的数据结构 redis数据类型和底层数据结构 底层数据结构 简单动态字符串 双向链表 压缩列表 哈希表 跳表 整数数组 数据类型和底层数据结构映射关系 键和值的组织结构 全局哈希表:保存了所有键值对的映射关系 一个哈希表,其实就是一个数组,数组每个元素称为一个哈希桶 阅读全文
posted @ 2023-03-11 16:23 kiper 阅读(210) 评论(0) 推荐(1) 编辑
摘要:noip http://wiki.noip.space/basic/ 阅读全文
posted @ 2023-03-09 14:53 kiper 阅读(3) 评论(0) 推荐(0) 编辑
摘要:目录背景核心矛盾解决思路异常根源cpu缓存导致的可见性问题线程切换带来的原子性问题编译优化带来的有序性问题 背景 核心矛盾 CPU/内存/IO设备的速度差异 解决思路 计算机体系结构——CPU 增加了缓存,以均衡与内存的速度差异 操作系统——操作系统增加了进程、线程,以分时复用 CPU,进而均衡 C 阅读全文
posted @ 2023-03-08 19:44 kiper 阅读(20) 评论(0) 推荐(1) 编辑
摘要:C++11 阅读全文
posted @ 2023-03-02 23:41 kiper 阅读(11) 评论(0) 推荐(0) 编辑
摘要:针对什么代码做事件驱动 什么代码值得基于事件做拆分?目标是为了高性能,服务里对资源操作速度由快到慢:CPU > 内存 > 磁盘 > 网络。由于CPU和内存都是纳秒级,故只有磁盘和网络可以考虑采用事件驱动的异步方式处理。机械硬盘最慢也就几十毫秒,属于可控,而网络速度慢波动大,既受制于连接对端性能,也受 阅读全文
posted @ 2023-03-01 23:19 kiper 阅读(42) 评论(0) 推荐(0) 编辑
摘要:|题目|难度|要点| | | | | |回文链表|●|栈或者后半段反转| 栈 递归 class Solution { ListNode node; public boolean isPalindrome(ListNode head) { node = head; return traverse(he 阅读全文
posted @ 2023-03-01 20:06 kiper 阅读(16) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示