algorithm-tree-pseudo-tree
基环树 (pseudotree)
在基环树中,除了环上的节点之外,其他节点都只属于一条路径,从根节点到其他节点都是唯一的。
每一个内向基环树(连通块)都由一个基环和其余指向基环的树枝组成
相关题解
2127. 参加会议的最多员工数
note-book-the-design-and-implementation-of-redis
本文不适合学习,偏向复习用
相关文章:Redis笔记——Redis设计与实现
数据结构与对象
看前须知
对象章节的有些内容最好提前了解下,比如以下内容:
在 Redis 的数据库中新创建一个键值对时, 我们至少会创建两个对象, 一个对象用作键值对的键(键对象), 另一个对象用作键值对的值(值对象)
对于 Redis 数据库保存的键值对来说, 键总是一个字符串对象, 而值则可以是字符串对象、列表对象、哈希对象、集合对象或者有序集合对象的其中一种
当我们称呼一个数据库键为“字符串键”时, 我们指的是“这个数据库键所对应的值为字符串对象”
当我们称呼一个键为“列表键”时, 我们指的是“这个数据库键所对应的值为列表对象”
简单动态字符串(Simple Dynamic String,SDS)
在Redis中,有两种字符串,一种是传统的C字符串,通常仅用于无需修改的地方(例如日志中)。
而如果Redis需要一个可以修改的字符串,就会使用SDS(键值对的字符串都是使用SDS)
SDS定义
123456789struct sdshdr { // 记录 buf 数组中已使用字节的数量 ...
algorithm-tree-trie
字典树
概念
字典树,也称为前缀树(Trie树),是一种用于存储和管理一组字符串数据的树状数据结构。字典树的主要特点是能够有效地支持字符串的插入和查找操作,以及高效地完成具有相同前缀的字符串的检索。
字典树是一种多叉树结构,每个节点代表一个字符,根节点通常为空。从根节点到某个节点的路径上的字符连接起来即构成一个字符串。
模板
添加和搜索操作的模板
12345678910111213141516171819202122232425262728class Trie { class TrieNode { boolean end; // int cnt; // 维护节点数量 TrieNode[] children = new TrieNode[26]; } TrieNode root = new TrieNode(); void insert(String word) { TrieNode cur = root; for (char c : word.toCh ...
tips-git
基本
graph LR
subgraph 1
direction LR
a(workspace) --add--> b(index) --commit--> c(repository) --push--> d(remote)
d --pull--> a
d --clone--> c
c --checkout--> a
end
subgraph 2
a(workspace) --stash --> e(stash)
e -- stash pop --> a
end
一些case
取消跟踪文件
众所周知,在.gitignore中添加文件名称,可以避免添加“脏东西”到git仓库中
但如果已经添加了“脏东西”,那么在gitignore中再添加名称也没用了
需要手动取消跟踪:git rm --cached file-name
重新跟踪文件
这个case比较特殊,有次在一个本地Github仓库的子目录中clone其它仓库,然后一顿敲代码后,直接add ...
note-book-java-vm
《深度理解Java虚拟机》阅读笔记
Java内存区域与内存溢出异常
运行时数据区域
程序计数器
当前线程所执行的字节码的行号指示器,控制程序的分支、循环、跳转、异常处理和线程恢复等功能
每条线程都需要有个独立的程序计数器,线程之间计数器互不影响(线程私有)
执行Java方法时,计数器记录的时正在执行的虚拟机字节码指令地址;执行本地方法时,计数器值为空
Java虚拟机栈
线程私有
执行方法时,vm都会同步创建一个栈帧,用于存储局部变量表、操作数栈、动态链接、方法出口等信息
方法被调用的过程对应一个栈帧从入栈到出栈的过程
如果线程请求的栈深度超出vm所允许的深度,则会抛出StackOverflowError异常。如果vm可以动态分配栈容量(深度),当栈扩展到无法申请到足够的内存时,则会抛出OutOfMemoryError异常。(HotSpot vm时不可以动态扩展的,以前的Classic vm倒是可以)
局部变量表
存放编译期可知的各种vm基本数据类型、对象引用和returnAddress类型
这些数据类型的存储空间以局部变量槽来表示,64位的long和double占用两个变 ...
note-hexo
Hexo折腾史
推荐博客
Heo的Butterfly主题美化教程
icat的魔改教程
搭建Hexo
全局安装hexo命令
1npm install -g hexo-cli
初始化Hexo
hexo init
安装主题(两种方式)
在hexo主目录下【推荐】使用npm【不推荐】git clone -b master https://github.com/jerryc127/hexo-theme-butterfly.git themes/butterfly
把主题放置在主目录中,更容易定制主题npm i hexo-theme-butterfly
虽然配置容易,但主题会放在node_modules中,定制主题不方便
本地部署(本地测试)
hexo server
远程仓库配置
新建Github远程仓库
git push -u origin main
部署到Github
两种方式都可以,可以只用一种,也可以都用
本地一键部署Github PagePush部署不需要push,可以单独deploy
这样部署不仅方便,而且就不需要push源文件到main分支就可以查看效果(避免过多提交代码 ...
note-misc
work
specialist vs generalist。个人体验是先宽,后窄,再宽。“先宽”开始几年尽量接触不同的技术栈,找到自己的兴趣;“后窄”在senior / staff阶段成为某个方向的专家,最好要end to end pipeline熟练,这些技术积累会成为以后找工作的“矛”;“再宽”sr staff+需要更广的系统经验,或者management track需要融合非技术的部分。——【一亩三分地】
躺平有时,积极有时。
休息有时,然后工作有时。
在某种意义上,很多时候我们不是停留在想,而一定要去做。
你其实想的话,你的损耗会很大;但是做的时候,可能会让自己慢慢边平静。
——罗翔
不要到当机会来临的时候,才感叹自己的无能。——井冈山赵子龙【力扣】
不要用战术上的勤奋掩盖战略上的懒惰。——雷军
不要以执行层面的发挥来掩盖在战略和定位上的无能。——黄有璨【知乎】
只有当一个人有时候不能睡懒觉的时候,能睡懒觉才会变得有价值且能让人极大快乐。当一个人天天都能睡懒觉的时候,睡懒觉本身会变成一种负担。——姚同学【朋友圈】
第一届互联网人出路分享大赛
三十 ...
algorithm-string-kmp
KMP算法概念
KMP算法是一种用于字符串匹配的经典算法,它的全名是Knuth-Morris-Pratt算法,是由Donald Knuth、Vaughan Pratt和James H. Morris分别独立发明的。KMP算法用于在一个主文本字符串中查找一个模式字符串的出现,它的主要优势在于在匹配失败时避免不必要的回溯。
KMP算法通过构建部分匹配表(Partial Match Table),也称为最长前缀后缀匹配表(Longest Prefix Suffix Table),来避免这种不必要的比较。
性能分析
KMP算法的时间复杂度为O(m + n),其中m是主文本字符串的长度,n是模式字符串的长度。
参考
算法学习笔记(13): KMP算法
模板
1234567891011121314151617181920212223242526// 利用匹配获取pmt数组public static int[] getPmt(char[] pattern) { int pmt[] = new int[pattern.length]; // pmt[0] = 0; // 计算p ...
solution-idea-run-admin-terminal
问题
今天需要在Idea的命令行中使用Mysql,输入Mysql发现无法找到(之前都是用的Navicat)
环境
Windows10+Mysql8
解决
刚开始,发现mysql的环境变量都没有配,于是在path中加上C:\Program Files\MySQL\MySQL Server 8.0\bin
在cmd窗口试了下还是不行。于是试了下管理员的cmd窗口,是可以的。
于是,去Idea里的terminal窗口中试了下,发现不行,所以Idea的terminal没有管理员权限
解决这个问题,只需要设置Idea管理员启动即可(右键→属性→兼容性→以管理员身份运行)
note-spring
Spring基础
Spring 的核心是一个 容器,通常称为 Spring 应用程序上下文,用于创建和管理应用程序组件。这些组件(或 bean)在 Spring 应用程序上下文中连接在一起以构成一个完整的应用程序,就像将砖、灰浆、木材、钉子、管道和电线绑在一起以组成房屋。
依赖注入
将 bean 连接在一起的行为是基于一种称为 依赖注入(DI)的模式。(见显式配置示例)
显式配置
例如,以下 XML 声明两个 bean,一个 InventoryService bean 和一个 ProductService bean,然后通过构造函数参数将 InventoryService bean 注入到 ProductService 中:
1234<bean id="inventoryService" class="com.example.InventoryService" /><bean id="productService" class="com.example.ProductService" ...