📓 Archive

Timeline

2025

2025年03月25日 02:58:05

MADDY

Intro(Maddy | 自建个人邮箱) # 下载: maddy-0.8.1-x86_64-linux-musl.tar.zst 证书操作可参考 DOCS | acme自动化管理证书 颁发证书:acme.sh --issue --dns dns_tencent -d mail.wtfu.site -d mta-sts.wtfu.site --keylength 2048 创建目录:mkdir -p /usr/local/nginx/conf/certificate/mail 安装到 nginx 里面,稍后为 MTA-STS 提供验证。acme.sh --install-cert -d …

2025年03月16日 20:28:47

ENDIANNESS

Intro(ENDIANNESS | 字节序 | 端序 | 尾序) # 参考 wiki,记录这个是因为老是记不住,天天查,所以已自己比较容易记忆的方式将其记录下来,动手过一遍,避免胡翻乱找。 字节序分为大端(Big)和小端(Little) 高位低地址,低位高地址被称为大端序(Big ),参考下图可以理解为 顺序放置。 低位低地址,高位高地址被称为小端序(Little),参考下图可以理解为 逆序放置。 大小端序出现的背景: 计算机都是从低位往高位读取字节数据,而且方便处理,所以出现了小端序。但是小端序不符合人类的阅读习惯,且除了计算机内部之外,其他场合几乎都是大端字节序,比如网络传输一般采用大 …

2025年03月06日 14:03:10

MYBATIS

Intro(Mybatis) # Mybatis最早Apache基金会的一个开源项目iBatis,2010年这个项目被迁移到google code,并改名为MyBatis. Mybatis是支持SQL查询,存储过程和高级映射的持久层框架 Mybatis封装了JDBC几乎所有的代码和参数手工设置以及结果检索 Mybatis可以使用XML和注解进行映射关系配置。 理论性知识可以参考 部分原理 使用 # 加载jar包(mybatis,jdbc) # <dependency> <groupId>org.mybatis</groupId> …

2025年03月04日 21:30:59

IMHEX

Intro(ImHex | 十六进制编辑器) # 一个瑞士小孩哥使用 C++23 写的开源 十六进制编辑器,主要包括十六进制预览(Hex editor),单多字节数据编码(data inspector),基于节点的预处理器(data processor),书签列表(Bookmarks),一些其他内置工具,数据分析和图表可视统计,使用向导,在线商店,其中包括各路大神写的(类库,magic文件,编码集等)。 当然,最主要,也是最核心的就是下面需要单独介绍的 模式语言(暂且这么翻译)。 使用场景: 针对某个实例文件,结合模式语言,展现结构列表,可视化二进制数据。比如 分析 java 字节码, …

2025年03月03日 22:19:10

RIFF

Intro(RIFF) # 摘自:维基百科 资源交换文件格式(英语: Resource Interchange File Format,缩写为 RIFF),又译资源互换文件格式,是一种文件格式(meta-format)标准,把资料存储在被标记的区块(tagged chunks)中。它是在 1991 年时,由 Microsoft 和 IBM 提出。它是 Electronic Arts 在 1985 提出的 Interchange File Format(IFF)的翻版。这两种标准的唯一不同处是在多比特整数的存储方式。 RIFF 使用的是小端序,这是 IBM PC 使用的处理器 80x86 所使 …

2025年03月03日 22:19:10

ANI

Intro(ANI | Animated cursors | 动画光标) # 摘自:维基百科 .ANI 文件格式是 Microsoft Windows 操作系统上用于动画鼠标光标的图形文件格式,该格式基于 Microsoft 资源交换文件 格式,该格式用作存储动画的单个帧(标准Windows图标)的容器。 数据结构验证 # Reference # https://en.wikipedia.org/wiki/ANI_(file_format) https://www.daubnet.com/en/file-format-ani …

2025年03月03日 22:19:10

FILE-FORMAT

Intro(File Format | 文件格式) # RIFF ANI Reference #

2025年02月20日 18:58:18

10_SINGLE-TABLE-ACCESS

开场序言 # Note 对于我们这些 MySQL 的使用者来说, MySQL 其实就是一个软件,平时用的最多的就是查询功能。DBA 时不时丢过来一些慢查询语句让优化,我们如果连查询是怎么执行的都不清楚还优化个毛线,所以是时候掌握真正的技术了。我们在第一章的时候就曾说过, MySQL Server 有一个称为 查询优化器 的模块,一条查询语句进行语法解析之后就会被交给查询优化器来进行优化,优化的结果就是生成一个所谓的 执行计划 ,这个执行计划表明了应该使用哪些索引进行查询,表之间的连接顺序是啥样的,最后会按照执行计划中的步骤调用存储引擎提供的方法来真正的执行查询,并将查询结果返回给用户。不过查 …

2025年02月20日 18:58:18

11_MULTI-TABLE-JOIN

开场序言 # Caution 搞数据库一个避不开的概念就是 Join ,翻译成中文就是 连接 。相信很多小伙伴在初学连接的时候有些一脸懵逼,理解了连接的语义之后又可能不明白各个表中的记录到底是怎么连起来的,以至于在使用的时候常常陷入下边两种误区: 误区一:业务至上,管他三七二十一,再复杂的查询也用在一个连接语句中搞定。 误区二:敬而远之,上次 DBA 那给报过来的慢查询就是因为使用了连接导致的,以后再也不敢用了。 所以本章就来扒一扒连接的原理。考虑到一部分小伙伴可能忘了连接是个啥或者压根儿就不知道,为了节省他们百度或者看其他书的宝贵时间以及为了我的书凑字数,我们先来介绍一下 MySQL 中支 …

2025年01月24日 03:39:27

REVERSE-LINKED-LIST

Intro(REVERSE-LINKED-LIST | 反转链表) # 题目描述 # 给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。如下: graph LR; A[1] --> B[2]; B --> C[3]; C --> D[4]; D --> E[5]; E --> F[NULL]; graph RL; E[5] --> D[4]; D --> C[3]; C --> B[2]; B --> A[1]; A[1] --> F[NULL]; Attention 在力扣题目 206. 反转链表 、 剑指 Offer 24. 反转链表 中,根据官方题解可知有 迭代 和 递 …

2025年01月19日 18:32:56

CYCLE-LINKED

Intro(CYCLE-LINKED | 环形链表检测) # 题目描述 # 给定一个链表,如果它是有环链表,实现一个算法返回环路的开头节点。若环不存在,请返回 null。如下: graph LR; A[3] --> B[2]; B --> C[0]; C --> D[-4]; D --> B; style B fill:#6f9,stroke:#333,stroke-width:4px; graph LR; A[3] --> B[2]; B --> C[0]; C --> D[-4]; D --> E[NULL]; Attention 在力扣题目 面试题 02.08. 环路检测 中,根据官方 …

2025年01月19日 18:32:56

APPLY

Intro(Apply | 链表应用) # 反转链表 环形链表检测

2025年01月19日 18:32:56

LINKED

Intro(Linked | 链表) # 链表应用 Reference #

2025年01月05日 01:53:21

UNBLOCK-NETEASE-MUSIC

Intro(UNblock Netease Music) # 解锁网易云变灰歌曲, docker run -d --restart=always \ -v /root/UNMCertificates/server.crt:/app/server.crt \ -v /root/UNMCertificates/server.key:/app/server.key \ -p 14163:14163 -p 14126:14126 --name UNM pan93412/unblock-netease-music-enhanced -t hello:world -p 14163:14126 -o …

2024

2024年12月23日 04:27:49

MIDDLE-CLICK

Intro(Middle) # 下载 # 因为 IDEA 中的 debug 相关功能的设置,比如 breakponits-enabled。里面提及到如果修改点击断点的默认行为,则会使用到 拖动到断点到编辑区域或者点击鼠标中间的按钮。使用触摸板的话就只能模拟了。 经查,有个叫 middle的软件,可以实现类似功能。但是收费,所以找破解版。如下下载: 下载来源: Middle 1.8.8 破解版 – 触控板辅助和增强应用 下载地址: Middle 1.8.8 Crked - Digit77.com.dmg。(后期不知道会不会失效)。 激活 # Attention 如果出现 文件无法打开或者损坏的 …

2024年12月20日 03:21:03

TLS-RECORD-CONSOLE-OUTPUT

wireshark capture package: instance-tls-ssl.pcapng,use filter:ip.addr == 47.94.20.18 && tcp.port == 443 /Library/Java/JavaVirtualMachines/jdk1.8.0_181.jdk/Contents/Home/bin/java -agentlib:jdwp=transport=dt_socket,address=127.0.0.1:64185,suspend=y,server=n …

2024年12月14日 12:00:19

TLS-SSL

Intro(TLS/SSL) # placeholder 协议规范(TLS-RECORD) # 参考 wiki: TLS_record 实例分析用到的 已经记录过的数据,一个是来自 bctls-debug-jdk15to18 结合 idea bug(Evaluate and log) 输出,另外一个是 wireshark Attention 第一次整理好相关东西后,发现当时没有记录解密相关的东西,然后不得不重新进行第二版。所以下面实例分析中用到的数据是第二个版本。 TLS-Record 基本结构 图片引用自: 7: TLS record format 建立会话基本流程 TLS_record …

2024年12月02日 18:08:41

ZERO-COPY

Intro(ZERO COPY) # Caution 下述零拷贝内容翻译自 Efficient data transfer through zero copy 概览 # 许多 Web 应用程序提供大量的就静态内容,这相当于从从磁盘读取数据并将完全相同的数据写回响应的 socket。此活动似乎只需要相对较少的 CPU 活动,但是在某种程度上是低效的。内核从磁盘读取数据,并将其跨越内核用户边界推送到应用程序,然后再跨越一次推送到需要被写的 socket。实际上,应用程序充当一个低效的中介,将数据从磁盘文件传输到 socket。 每一次数据从用户内核空间移动的时候,必须被复制,这会消耗 CPU 循 …

2024年11月10日 21:09:57

DOC

Notes, hosted by 12302

2024年11月10日 21:09:57

MISC

Notes, hosted by 12302

2024年11月10日 21:09:57

DevOps

Notes, hosted by 12302

2024年11月10日 21:09:57

ALGORITHM

Notes, hosted by 12302

2024年10月31日 19:58:15

GOLAND

Intro(GoLand) # 断点不生效 # GoLand(2023.2.6) 中使用了最新版的 go(go1.23.2 darwin/amd64) 环境,但是由于工具自带的插件中的 dlv 版本为 1.21.0 ,导致 debug 的时候出现下述错误,以致断点不生效: WARNING: undefined behavior - version of Delve is too old for Go version 1.23.2 (maximum supported version 1.21) 。 根据类似问题 Issues-GO-14287 中提到修复步骤,使用如下命令进行解决: …

2024年10月23日 18:17:38

IT-Corner

Intro(Corner of Information Technology, IT) # Reference #

2024年10月23日 18:17:38

ENCODING

Intro(Encoding) # varint zigzag Reference #

2024年10月23日 18:17:38

VARINT

Intro(Varint-encoding) # 定义描述 # varint 类似于 utf-8,varchar等长度不定。顾名思义,属于变长的 int。对于一个 int 类型的数据来说,一般都为四个字节(固长)。所以变长的话就是将固定的四个字节中浪费的那部分去掉,比如对于整形 2 来说对应的二进制为 \(00000000\space00000000\space00000000\space{\color{red}00000010}\) 前面的三个字节都为0,而且完全可以使用一个字节表示,此处对于整数2 来说,前三个字节就是浪费。所以出现了varint。使用少量字节来表示整数。使用定义型的方式 …

2024年10月23日 18:17:38

ZIGZAG

Intro(ZigZag-encoding) # 定义描述 # 正如 varint 编码 中所述,它对于负数来说显得手足无措,心有余而力不足。zigzag 编码 就是用来弥补 varint 的缺陷的。它会将负数映射成正值(但是不需要额外的映射表),比如:(0 = 0, -1 = 1, 1 = 2, -2 = 3, 2 = 4, -3 = 5, 3 = 6 ...),从而能够使用 varint 继续编码。zigzag 编码的大致原理就是采用异或操作,将阻碍压缩的 1 进行消除。 没有特别说明的都已 32 bit 进行阐述。 异或操作 异或运算(XOR | ^),相同为 0,不同为 1。并且异或 …

2024年10月23日 18:17:38

COMPLEMENT

Intro(Complement) # 重新认识计算机中的数字表示 # 主要以一个字节,8比特位进行分析 首先要知道计算机中的数字表示有空间限制,比如 java 中 byte 类型就用一个字节(8 bit)表示,而 int 得用 4byte(32 bit)。而且 java 默认都是有符号的,也即第一个比特位表示符号,一个byte 类型的变量可表示的值就是 \(00000000\) - \(11111111\)。 还有一点至关重要,就是进位后的值超出 8 位后会截断。比如 \(11111111 + 1 = 1{\hspace{0.5em}}00000000 ==截断==> 00000000 …

2024年10月23日 18:17:38

NUMERATION

Intro(System of numeration) # 补码 进制转换图 # 浮点数 # 按照 IEEE 754 浮点数标准,一般会以四个字节来保存,布局结构图如下: 在谈论计算保存字节值之前先了解一下科学计数法: 在十进制中: \(12302 = 1.2302 * 10^4\), \( 0.00123 = 1.23 * 10^{-3}\) 在二进制中: \(11000 = 1.1 * 2^4\), \( 0.0101 = 1.01 * 2^{-2}\) 将 9.625 这个数改成 IEEE 754 标准的机器数步骤如下: 1. 确定符号位,正数,所以为 0。 2. 将十进制转换为二进 …

2024年10月19日 16:28:25

PROXY

Intro(PROXY) # Reference #

2024年10月14日 10:31:23

EXT2

Intro(EXT2-FS) # 注意 # Caution a).: 上述的图例是模拟 1M 的 ext2 文件系统,采用 block = 1024B ,inode size = 128B,进行划分的。 b).: 转换成数值的时候是小端读取。比如 [80 00 00 00] ==int=> 0x00000080 = 0x80 = 128。 c).: bitmap 采用的是 (MSB)10001001(LSB),参考 block-bitmap 中的部分描述、以及 wiki,比如 10000111,指的是第1,2,3,8个,不是1,6,7,8。 准备 # 在 Ubuntu-22.04 上准备两个 …

2024年10月14日 10:31:23

FS

hello fs ext2-fs Problem # Linux U盘格式化救急 # 挂载磁盘不成功显示mount: /mnt: wrong fs type, bad option, bad superblock………….. 输入 lsblk -a -o NAME,PHY-SEC,TRAN,PATH,MAJ:MIN,SIZE,TYPE,FSTYPE,FSSIZE,FSAVAIL,FSUSED,FSUSE%,FSVER,RO,MOUNTPOINT,VENDOR,REV 查看 U盘 属于那个设备,一般根据大小,生产厂商可以判断,另外有没有文件系统之类的。 可以看到 sdb 并没有文件系统格式 输 …

2024年10月14日 10:31:23

CORE

hello core

2024年09月26日 18:54:33

SQUIRREL

Intro(RIME | SQUIRREL | 自定义输入法) # Caution 因为需要输入法配置灵活度高,所以找到开源的鼠须管,基于中州韵输入法引擎的一个 macosx 端实现。 详细介绍(自序、历史、概念、项目构成、开发计划) 另外本文主要针对 【朙月拼音】 和 【小鹤双拼】 等方案进行配置,当然其他方案也可以局部参考。 贴一些使用过程中的感受: 1. 好用是真好用,但是学习成本是真 TM 高。如果只是想简单使用,默认配置基本够用。如果想打造成满心欢喜的神兵利器,还是需要时间滋养的。可以循序渐进。 2. 官方的概念多且杂,但是还又不能不看,建议有个全局了解。这样碰见其他人分享的配置文 …

2024年09月24日 15:59:00

THREAD-POOL

Intro(THREAD POOL) # ThreadPoolExecutor.java 线程池解决了两个不同的问题: 1). 在执行大量异步任务时,由于减少了每个任务的调用开销,它们通常提供改进的性能; 2). 在执行一组任务时,它们提供了一种绑定和管理资源(包括线程)的方法。每个ThreadPoolExecutor还维护一些基本统计信息,例如已完成任务的数量。 核心和最大线程数: 线程池会根据核心线程数和最大线程数自动调节池中的线程数量。当一个任务提交的时候,如果少于核心线程数的线程正在运行,则一个新的线程被创建用来处理当前的任务请求(即使其它线程空闲)。如果运行的线程数在核心线程和最大 …

2024年09月24日 15:59:00

VPS

Intro(VPS) # 购买 # ECS 入口 配置远程登录 # 1). Ali 重置密码 ,使用 ssh 登录:47.94.20.118 主机:i-2zeeuol1151zswgxvpf5 2). 修改主机名hostname 使用 hostname 查看,或者cat /etc/hostname. 使用sudo hostnamectl set-hostname hostname进行更改。 3). 配置ssh登录 3.1) 上传ssh公匙, 参考 ssh-copy-id -i iname remote. 3.2) 配置sshd后台进程:vim /etc/ssh/sshd_config …

2024年09月20日 21:39:58

STICKER

Wechat-emoji # emoji content emoji content emoji content emoji content emoji content emoji content emoji content emoji content emoji content emoji content /微笑 [微笑] /::) /撇嘴 [撇嘴] /::~ /色 [色] /::B /发呆 [发呆] /::| /得意 [得意] /:8-) /流泪 [流泪] /::< /害羞 [害羞] /::$ /闭嘴 [闭嘴] /::X /睡 [睡] /::Z /大哭 [大哭] /::'( /尴尬 [尴 …

2024年08月26日 18:31:24

FRIDA

Intro(FRIDA) # APK 加固信息 通过MT文件管理器 -> 安装包提取(左侧菜单) -> 选择应用,查看加固状态 # app-demo site.example.framework # 哔哩哔哩 tv.danmaku.bili # 个人所得税 cn.gov.tax.its # 交管12302 com.tmri.app.main command frida -D 192.168.1.200:5544 -l agent/frida_multiple_unpinning.js -f com.tmri.app.main -F frida -U -f …

2024年08月13日 20:58:24

SOCKET

Intro(SOCKET) # socket 是网络架构中程序与操作系统网络协议栈进行交互的接口API。从所处的地位来讲,套接字上联应用进程,下联网络协议栈,是应用程序通过网络协议进行通信的接口。 linux数据结构定义 、 C demo 作为服务端,先创建一个socket,返回fd,然后与地址(ip+port)进行绑定,监听,然后接收 作为客户端,先创建一个socket,返回fd,然后与地址(serv ad)进行连接,发送 系统调用 # socket() # 原型:int socket(int domain, int type, int protocol); 例如:socketfd = …

2024年08月08日 06:57:17

TOMCAT

Intro(TOMCAT) # 正常启动参数 /Library/Java/JavaVirtualMachines/jdk1.8.0_181.jdk/Contents/Home/bin/java -Djava.util.logging.config.file=/Users/stevenobelia/software/apache-tomcat-8.5.53/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager …

2024年08月04日 17:17:10

PROPERTIES

Intro(PROPERTIES) # System.properties() # 在System类中有 initProperties(Properties props); native 方法。在C代码 GetJavaProperties(env);中会获取到一些props。这个方法的实现在 java_props_md.c中。在 626 行setProxyProperties(&sprops); 会进行系统代理的设置。继续调用到 java_props_maxosx.c中。主要会使用 macosx SDK 中的 SCDynamicStoreCopyProxies(_:) 【函数调用 C …

2024年08月04日 17:17:10

MISC

hello misc Properties

2024年07月18日 21:13:01

00_SPRING_STARTUP

Intro(Startup Process) # spring.version = 4.3.7.RELEASE Tip 1.) ApplicationContext继承了BeanFactory接口,在内部实现中采用委托的方式调用正真的beanfactory. 解析流程 # 1). 以ClassPathXmlApplicationContext为例,新建一个应用上下文:new ClassPathXmlApplicationContext("_framework/spring/res/factory-bean.xml"); 2). 紧接着通过super(parent)调用父类构造器,一直往上传, …

2024年06月27日 19:26:22

01_FACTORY_BEAN

Intro(FactoryBean) # spring.version = 4.3.7.RELEASE 准备编码 # // 创建普通bean @Data @NoArgsConstructor @AllArgsConstructor public class Tool { private int id; } // 创建工厂 @Data public class ToolFactory implements FactoryBean<Tool> { private int factoryId; private int toolId; @Override public Tool …

2024年06月27日 19:26:22

SPRINGCORE

spring core Reference #

2024年06月20日 20:38:12

08_VARIABLES

Intro(VARIABLES) # 变量分类: 【系统变量 [全局变量 | 会话变量] 】 【用户自定义变量 [用户变量 | 局部变量]】: 系统变量 # 说明: 变量由系统提供的,不是用户定义的,属于服务器层面 使用语法: case1:查看所有的系统变量: <br>`show global|session variables;` <br><br>case2:查看满足条件的部分系统变量: show global|session variables like '%char%'; case3:查看指定的某个系统变量的值: `` select @@global|session.变量名; …

2024年06月19日 20:44:41

06_TCL

Intro(TCL) # Reference # delete 和 truncate在事务中的区别

2024年06月19日 20:44:41

07_VIEW

Intro(VIEW) # 含义:虚拟表,和普通表一样使用 mysql5.1版本出现的新特性是通过表动态生成的数据,行和列的数据来自定义视图的查询中使用的表,并且实在使用视图时动态生成的,只保存了sql逻辑,不保存查询结果 好处: 1).: 重用sql语句 2).: 简化复杂的sql操作,不必知道它的查询细节 3).: 保护数据,提高安全性 应用场景: 1).: 多个地方用到了同样的查询结果 2).: 该查询结果使用的sql语句较复杂 示例 # create view my_v1 as select stuname, majorname from stu_info s inner join …

2024年06月19日 20:44:41

09_PROCEDURE_FUNCTION

Intro(PROCEDURE) # 类似于java中的方法,MySQL 5.0 版本开始支持存储过程。 含义:一组预先编译好的sql语句的集合,理解成批处理语句。 好处: 1). 提高代码的重用性 2). 简化操作 3). 减少编译次数并且减少了和数据库服务器的连接次数,提高了效率。 创建语法 # create procedure 存储过程名称(参数列表) begin 存储过程题(一组合法的sql语句) end Note 注意: 1). 参数列表包含三部分(参数模式,参数名,参数类型),例如:IN stuname varchar(20) 参数模式: in: 该参数可以作为输入,也就是该参数 …

2024年06月19日 20:44:41

10_FLOW_CONTROL

Intro(FLOW CONTROL) # 简单介绍: 顺序结构:程序从上至下依次执行 分支结构:程序从两条或多条路径中选择一条去执行 循环结构:程序在满足一定条件的基础上,重复执行一段代码 分支结构 # IF函数 # 功能:实现简单的双分支 语法:if(表达式1,返回值2,返回值3) 如果表达式1成立,则if使用返回值2,否则使用返回值3. 应用:任何地方 CASE函数 # 特点: 1). 可以作为表达式,嵌套在其他语句中使用,可以放在任何地方,begin end 中或begin end外面。可以作为单独的语句去使用,只能放在 begin end 中。 2). 如果when中的值满足或条件 …

2024年06月18日 21:33:36

04_DML

DML语言的学习 #

2024年06月18日 21:33:36

05_DDL

DDL语言的学习 # 1.库和表的管理 # 2.常见数据类型介绍 # 3.常见约束 # 含义:一种限制,用于限制表中的数据,为了保证表中数据的准确和可靠性 分类:六大约束: ①: NOT NULL: 非空,用于保证该字段的值不能为空。 ②: DEFAULT:默认,用于保证该字段有默认值。 ③: PRIMARY KEY: 主键,用于保证该字段的值具有唯一性,并且非空。 ④: UNIQUE:唯一,用于保证该字段的值具有唯一性,可以为空。 ⑤: CHECK:检查约束【mysql中不支持】 ⑥: FOREIGN KEY:外键,用于限制两个表的关系,用于保证该字段的值必须来自于主表的关联列的值。在从表 …

2024年06月10日 00:51:05

BOOK

Intro(Vim实用技巧_高清_中文版.pdf) # 练习文件「practical-vim」repo:https://github.com/rxedu/practical-vim 当前clone文件路径~/Desktop/_scratch/practical-vim。 第一章 vim解决问题的方式 # 1). 重复命令:. 2). 复合命令:(C:c$, s:cl, S:^c, I:^i, A:$a, o:A<CR>, O:ko) 3). 将 + 号前后追加空格,采用删1加3的方式:使用s命令删除当前光标下的+,然后输入空格+空格。 4). 重复,回退命 …

2024年06月10日 00:51:05

VIM

Intro(VIM) # 版本信息 # 基本操作配置 # 命令和解释 命令 解释 基本配置 set nocompatible 不与VI兼容(采用vim自己的操作命令) syntax on 打开语法高亮。自动识别代码,多种颜色显示 set showmode 在底部显示编辑模式 set showcmd 命令模式底部显示键入指令 set mouse=a 支持使用鼠标 set encoding=utf-8 使用utf-8编码 set t_Co=256 启用256色 filetype indent on 开启文件类型检查 缩进 set autoindet 按下回车,自动缩进,跟上一行保持一致 set …

2024年06月07日 08:32:16

MAKE

Intro(make) # demo # # makefile 对空格相当挑剔,必须是制表符 # https://stackoverflow.com/questions/24145650/makefile6-missing-separator-stop OBJS = main.o tool1.o tool2.o CC = gcc CFLAGS += -c -Wall -g mytool: $(OBJS) $(CC) $^ -o $@ %.o: %.c $(CC) $^ $(CFLAGS) -o $@ .PHONY: clean clean: # 禁用回显使用@,或者在外部 make -s …

2024年06月07日 00:57:08

09_INNODB_TABLE-SPACE

书接上文 # prerequirement 通过前边儿的内容大家知道, 表空间 是一个抽象的概念,对于 系统表空间 来说,对应着文件系统中一个或多个实际文件;对于每个 独立表空间 来说,对应着文件系统中一个名为 表名.ibd 的实际文件。大家可以把表空间想象成被切分为许许多多个 页 的池子,当我们想为某个表插入一条记录的时候,就从池子中捞出一个对应的页来把数据写进去。本章内容会深入到表空间的各个细节中,带领大家在 InnoDB 存储结构的池子中畅游。由于本章中将会涉及比较多的概念,虽然这些概念都不难,但是却相互依赖,所以奉劝大家在看的时候:不要跳着看! 不要跳着看! 不要跳着看! 回忆一些旧 …

2024年06月06日 08:32:43

08_DATA_HOME_WITH_DATADIR

数据库和文件系统的关系 # 我们知道像 InnoDB 、 MyISAM 这样的存储引擎都是把表存储在磁盘上的,而操作系统用来管理磁盘的那个东东又被称为 文件系统 ,所以用专业一点的话来表述就是:像 InnoDB 、 MyISAM 这样的存储引擎都是把表存储在文件系统上的。当我们想读取数据的时候,这些存储引擎会从文件系统中把数据读出来返回给我们,当我们想写入数据的时候,这些存储引擎会把这些数据又写回文件系统。本章就是要唠叨一下 InnoDB 和 MyISAM 这两个存储引擎的数据如何在文件系统中存储的。 MySQL数据目录 # MySQL服务器程序在启动时会到文件系统的某个目录下加载一些文件, …

2024年06月05日 18:09:58

ANALYZE_TOOLS

分析工具 # 通过工具进行分析,结合书中的概念学习innodb存储引擎。 .frm 解析工具如下: dbsake(a(s)wiss-(a)rmy-(k)nif(e) for MySQL), github mysqlfrm, download archive, mysql-utilities pdf frm-parser .ibd 解析工具有: innodb-java-reader innodb_ruby frm-parser # Note 开源仓库 使用frm解析工具对/tmp/mysql/demos/record_format_demo.frm ,进行分析,解析结果如下。 Caution …

2024年06月03日 09:17:08

07_B+TREE_INDEX_USE

书接上文 # prerequirement 我们前边详细、详细又详细的唠叨了 InnoDB 存储引擎的 B+ 树索引,我们必须熟悉下边这些结论: 1). 每个索引都对应一棵 B+ 树,B+ 树分为好多层,最下边一层是叶子节点,其余的是内节点。所有用户记录都存储在 B+ 树的叶子节点,所有目录项记录都存储在内节点。 2). InnoDB 存储引擎会自动为主键(如果没有它会自动帮我们添加)建立 聚簇索引,聚簇索引的叶子节点包含完整的用户记录。 3). 我们可以为自己感兴趣的列建立 二级索引,二级索引的叶子节点包含的用户记录由索引列+主键组成,所以如果想通过二级索引来查找完整的用户记录的话,需要通 …

2024年06月01日 00:38:56

RUBYMINE

Intro(RubyMine) # SDK警告阻止⚠️ # IDE中使用了最新版的 ruby sdk(ruby-3.3.1-p55) 环境,但是由于项目中使用的配置Gemfile.lock中使用BUNDLED WITH \n 2.1.4版本的bundle,导致每次运行都会出现红色的警告信息。 根据 issues-5234 中提到的bundle版本2.3.4,使用命令/usr/local/opt/ruby/bin/gem install bundler -v 2.3.4安装,然后修改Gemfile.lock文件中的BUNDLE WITH版本即可解决。 …

2024年05月27日 20:43:02

BURP-SUITE-PRO

Intro(Burp-Suite-Pro) # 抓包软件 下载 # 组合包:Burp_Suite_Pro_v1.7.31_Loader_Keygen.zip 包括注册机jar包和官方的jar包 也就是当前这个使用的是官方的,而不是修改过的。 单独注册机下载:burp-loader-keygen.jar。 需要注意注册机有的有后门,可以参考: 恶意软件逆向:burpsuite 序列号器后门分析 官方下载地址: https://portswigger.net/burp/releases/professional-1-7-31 单独应用下载:burpsuite_pro_v1.7.31.jar。 可 …

2024年05月15日 02:26:00

BC

Intro(BC | basic calculator) # 保留位数 # echo 'scale=3; 10 / 3' | bc echo 'scale=5; 820 / (480 + 90)' | bc 进制转换 # Caution 1).: 特别需要注意 ibase,obase,以及值之间的联系,不然会出现意想不到的结果。如下图: 参见 简而言之,就是在进制转换的时候,不管ibase、obase哪一个在前,都要以前面使用的进制为主,对后面的值以前面的进制进行转换。举例如下: 在2到八进制中,可以写成ibase=2;obase=1000;,或者obase=8;ibase=2;,对于第一 …

2024年05月14日 07:38:10

ZOOKEEPER

hello zookeeper Reference #

2024年05月11日 03:55:27

INSTALL

Intro(Install) # 压缩包安装 # Docker 配置环境 # 启动服务器 $ docker run -d -p 6379:6379 --name redis-6.2.8 redis:6.2.8 redis-server --save 60 1 --loglevel warning # 使用自定义的配置文件 $ docker run -d -p 6379:6379 -v /myredis/conf:/usr/local/etc/redis --name redis-6.2.8 redis:6.2.8 redis-server …

2024年05月11日 03:55:27

REDIS

hello redis Reference # 周阳-尚硅谷reids视频教程 阮一峰-CAP 定理的含义 缓存穿透,击穿,雪崩 Redis Ziplist(压缩列表) 理解redis跳表 redis的MULTI与PIPELINE redis主从复制原理 Redis三种集群模式详解 reids 事务错误图解 缓存穿透、缓存击穿、缓存雪崩的理解和解决方案 面试题

2024年05月11日 03:55:27

INSTALL

Intro(Zookeeper) # 压缩包安装 # Docker 配置环境 # 启动服务器 $ docker run -d -p 2181:2182 --name zookeeper-3.6.3 zookeeper:3.6.3 # 使用自定义的配置文件 $ docker run -d -p 2181:2182 -v $(pwd)/zoo.cfg:/conf/zoo.cfg --restart always --name zookeeper-3.6.3 zookeeper:3.6.3 测试 # 使用redis容器内部客户端进行访问 $ docker run -it --rm …

2024年05月10日 16:30:19

SSH

Intro(SSH) # SSH登录 # 准备步骤 # 生成公私匙: ssh-keygen -t rsa -b 4096 -C 12302@example.com 复制公匙到主机:cat ~/.ssh/id_virmach_ras.pub | ssh root@107.174.101.187 "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys" ssh-copy-id使用 # (ssh-copy-id) 是一个可执行的脚本文件,可以把本地的ssh公钥文件安装到远程主机对应的账户下。也就是将你的公共密钥填充到一个远程机器上 …

2024年05月07日 19:50:27

HTTP

Intro(HTTP) # 分块传输编码 # Response Header 中存在 Transfer-Encoding: chunked的话,就是分块传输,数据需要按照 格式 解码。[ 参考] 应用场景:使用 socket 发送 http/https 请求的时候会返回数据报文,需要自己解析。比如: 1. 模拟 vless客户端发送 wss + https 请求: 先与vless服务器创建一个通过tls加密的websocket隧道连接。 2. 发送command(ipaddr, port) + 握手消息到websocket服务器,并与目标服务器建立连接并且发送Client Hello[一般情 …

2024年05月01日 16:49:40

SCALABLE-IO-IN-JAVA

Intro(Scalable IO in Java) # Scalable network services Event-driven processing Reactor pattern Basic version Multithreaded versions Other variants Walkthrough of java.nio nonblocking IO APIs Network Services # Web services, Distributed Objects, etc. Most have same basic structure: Read request ➠ …

2024年04月18日 13:25:16

PARALLELS-DESKTOP

Parallels Desktop(PD) # 下载 # ParallelsDesktop-19.1.0-54729.dmg Parallels Desktop Activation Tool 4.0.0 [MacKed].dmg 激活 # Warning 1). 打开激活工具,如图,直接双击就能启动激活工具,无需把工具移动到应用程序目录。当然,移动到应用程序目录后再打开也是没问题的。 2). 运行激活工具后,点击弹出窗口的安装补丁按钮,输入密码即可。 3). 激活之后再次打开pd,会报“请移动到废纸篓”,只需要打开访达,点击侧边栏的应用程序,找到pd,右键打开即可。(只有激活后第一次打开需 …

2024年04月18日 13:25:16

NIO

Buffer # public final Buffer clear() { position = 0; limit = capacity; mark = -1; return this; } public final Buffer mark() { mark = position; return this; } public final Buffer reset() { int m = mark; if (m < 0) throw new InvalidMarkException(); position = m; return this; } public final Buffer …

2024年04月18日 03:11:28

VMWARE-FUSION-PRO

VMware fusion pro # 下载 # VMware-Fusion-13.5.1-23298085_universal.dmg 激活 # #任选其一激活即可 4A4RR-813DK-M81A9-4U35H-06KND NZ4RR-FTK5H-H81C1-Q30QH-1V2LA ✅ 4C21U-2KK9Q-M8130-4V2QH-CF810 MC60H-DWHD5-H80U9-6V85M-8280D HF200-0W05K-089X8-4R1EK-032J0 JU090-6039P-08409-8J0QH-2YR7F 4Y09U-AJK97-089Z0-A3054-83KLA …

2024年04月09日 19:21:33

CLEAN-MY-MAC-X

Intro(CleanMyMacX) # 电脑清理软件 下载 # CleanMyMac_v4_15_0_macOS.dmg Reference # https://www.naodai.org/archives/56.html https://go.naodai.org/d/Software/CleanMyMac/CleanMyMac_v4_15_0_macOS.dmg …

2024年03月28日 10:06:31

23-VISITOR

访问者模式 # 描述 # 在访问者模式(Visitor Pattern)中,我们使用了一个访问者类,它改变了元素类的执行算法。通过这种方式,元素的执行算法可以随着访问者改变而改变。这种类型的设计模式属于行为型模式。根据模式,元素对象已接受访问者对象,这样访问者对象就可以处理元素对象上的操作。 访问模式可以有变形,比如有些写法中被访问的是抽象类,而另外的是接口实现。 ASM里面就用到了访问者模式来处理字节码信息。 UML # 代码实现 # public class Main { public static void main(String[] args) { List<Staff> …

2024年03月28日 09:06:38

JVISUALVM

Intro(jvisualvm) # OQL控制台 使用样例 select s from java.lang.String s where s.toString().contains("hello") select s from java.lang.String s where s.toString().equals("12") select s from java.lang.String s where /^\d+$/.test(s.toString()) select i from java.lang.Integer i where i.value > 12302 Reference # …

2024年03月28日 01:39:41

JVM

内存模型 # 方法区 # JVMS: The Java Virtual Machine has a method area that is shared among all Java Virtual Machine threads. The method area is analogous to the storage area for compiled code of a conventional language or analogous to the “text” segment in an operating system process. It stores per-class …

2024年03月28日 01:39:41

HSDB

Intro(HSDB) # -XX:-UseCompressedOopsoops: ordinary object pointer,普通对象指针压缩,例如Object o = new Object();其中o就是个指向new Object()对象的指针,o在指针压缩前占用8个字节,在指针压缩后占用4个字节。 -XX:-UseCompressedClassPointers压缩Klass Pointer,压缩前8个字节,压缩后4个字节。 sudo java -cp $JAVA_HOME/lib/sa-jdi.jar sun.jvm.hotspot.HSDB Reference # …

2024年03月28日 01:39:41

TOOLS

hello tools

2024年03月27日 05:09:13

LINUX

Intro(Linux) # 系统调用实现 # 系统调用的实质是通过中断去切换到内核态,执行内核函数,访问硬件资源或者执行更高权限的操作。 内核函数和我们普通的函数形态上并没有什么区别,只是一个运行在用户态,一个运行在 受保护空间地址 的内核态。好像早期的操作系统允许用户执行中断调用特定的内核函数。 对于中断的调用,可以通过保存在 中断向量表 里面的 中断号 去调用,调用的 系统调用号(如上右图) 保存在 系统调用表 中,对于中断号,可以直接写,比如:int 0x80,系统调用号可以在触发中断前保存在 eax 寄存器里面:movl eax, 2,表示调用一个 fork系统调用。其他参数传递, …

2024年03月27日 05:09:13

SHELL

Intro(SHELL) # Shell环境 # Shell 变成跟JavaScript,php编程一样,只要有一个能编写代码的文本编辑器和一个能解释执行的脚本解释器就可以了。Linux下面的shell很多,常见的有: 查看当前使用的shell echo $SHELL; 一般约定为#!后面跟解释器路径 #!/bin/sh #!/bin/bash #!/sbin/sh 名称 路径 Bourne Shell /usr/bin/sh 或者 /bin/sh Bourne Again Shell /bin/bash C Shell /usr/bin/csh K Shell /usr/bin/ksh …

2024年03月27日 05:09:13

UTIL

hello util

2024年03月27日 05:09:13

WIN

Intro(windows) # windows禁止更新 # 1.服务管理 # Caution 1). 组合键 Win + R 输入 services.msc 回车 打开服务管理列表,找到 Windows Update,打开后启动类型选择 禁用。 2.组策略配置 # Caution 需要注意:(方式2(组策略配置) 执行完后会自动新建 方式3(注册表编辑) 的效果) 2). 组合键 Win + R 输入 gpedit.msc 回车 打开组策略编辑器:计算机配置 > 管理模板 > Windows组件 > Windows 更新 > 管理最终用户体验,双击进入。 进入后选择 配置自动更新,右键编辑 …

2024年03月23日 02:51:17

MAC

Intro(Mac OSX) # zsh终端输出多一个’%' # 参考:在~/.zshrc配置文件中追加export PROMPT_EOL_MARK=控制结尾变量。 macOS_14_Sonoma_关闭输入法图标提示 # 参考:终端输入sudo defaults write /Library/Preferences/FeatureFlags/Domain/UIKit.plist redesigned_text_cursor -dict-add Enabled -bool YES 快捷键记录 # Note [command+Shift+F]呼出访达聚焦搜索 Note …

2024年03月23日 02:31:58

WGET

Intro(wget) # 响应内容到标准输出 # wget -q -O - -A 'Accept: application/xml' http://localhost:8080/test/helloxml Reference # https://blog.csdn.net/geekooler/article/details/100853072

2024年03月11日 21:27:13

STRING

Intro(String) # 内存布局 # intern() # String.intern()方法表示获取一个字符串对象的值在常量池中的引用。如果常量池中存在,则直接返回引用。如果不存在,常量池创建并返回引用。 不同jdk版本创建并返回引用是有区别的: JDK1.6,不存在则在永久代字符串常量池创建等值字符串, JDK1.6之后,在堆区字符串常量池创建的是堆中String obj的引用。 参考1, 参考2 另外字符串常量池的实现是 C++ 中的hashtable。 String s = new String("ABC") 这行单纯代码层面来说,只创建一个对象。如果包含类加载的过程,有可能 …

2024年03月07日 23:21:16

JAVASTRACE

Intro(JavaStrace) # 一个java程序的运行全过程解析。 右上java源代码,右下常量池,左下为Code方法块。 { public _jvm.classPrase.Student(int, java.lang.String, java.lang.String); descriptor: (ILjava/lang/String;Ljava/lang/String;)V flags: ACC_PUBLIC Code: stack=3, locals=4, args_size=4 0: aload_0 1: iload_1 2: aload_2 3: invokespecial …

2024年03月03日 03:48:08

BYTECODE

Intro(ByteCode) # Hello.class 参考 JDK8 JVM虚拟机实现规范 Chapter 4. The class File Format,包括 常量池数据结构 JDK8 JVM虚拟机实现规范 Chapter 6. The Java Virtual Machine Instruction Set 工具: 进制转换echo 'ibase=16;12'| bc 十六进制转utf-8echo -n "6E756D" | xxd -r -p | iconv -f utf-8 下面为java源代码和class字节码。编译使用-g参数,会包含 LocalVariableTable …

2024年02月29日 16:20:46

03-02-RB-TREE

Intro(Red-Black) # 定义 # 示例 # 性质 # 每个节点非黑即红。 根节点是黑色的。 每个NULL叶结点是黑色的[示例没画出来]。 如果一个节点是红色的,那么它的两个子节点都是黑色的。 从任一节点到叶子节点的所有路径上都包含相同数目的黑色节点(黑高相同) 来源 # 平衡因子 # 平衡 # Reference # https://drive.google.com/file/d/1aZEr0b1O9rww1kvtYZ9v1k3mdLHbwCuA/view?usp=sharing …

2024年02月26日 13:37:04

HASHMAP

Intro(HashMap) # hello hashmap 构造器 # public HashMap(int initialCapacity, float loadFactor) { if (initialCapacity < 0) throw new IllegalArgumentException("Illegal initial capacity: " + initialCapacity); if (initialCapacity > MAXIMUM_CAPACITY) initialCapacity = MAXIMUM_CAPACITY; if (loadFactor <= 0 …

2024年02月26日 13:37:04

COLLECTION_MAP

Intro(Collection&Map) # HashMap Reference # https://en.wikipedia.org/wiki/Java_collections_framework

2024年02月24日 00:04:58

03-01-AVL-TREE

Intro(AVL) # 平衡二叉树又称AVL树。它可以是一颗空树,或者具有以下性质的二叉排序树:它的左子树和右子树的高度之差(平衡因子)的绝对值不超过1且它的左子树和右子树都是一颗平衡二叉树。因此它也被称为高度平衡树。 查找、插入和删除在平均和最坏情况下的时间复杂度都是 \({\color{red}O(\log_2 N)}\)。增加和删除元素的操作则可能需要借由一次或多次树旋转,以实现树的重新平衡。 AVL 树得名于它的发明者 G. M. Adelson-Velsky 和 Evgenii Landis,他们在1962年的论文《An algorithm for the …

2024年02月22日 16:43:43

01-BINARY-TREE

Intro(BinaryTree) # 二叉树 # 定义 # 二叉树的每个结点至多只有二棵子树(不存在度大于2的结点),二叉树的子树有左右之分,次序不能颠倒。二叉树的第i层至多有2i-1个结点;深度为k的二叉树至多有2k-1个结点;对任何一棵二叉树T,如果其终端结点数为n0,度为2的结点数为n2,则n0=n2+1。 性质 # 1). 在非空二叉树中,第i层的结点总数不超过2i-1, i>=1; 2) 深度为h的二叉树最多有2h-1个结点(h>=1),最少有h个结点; 3). 对于任意一棵二叉树,如果其叶结点数为N0,而度数为2的结点总数为N2,则N0=N2+1; 4). 具有n个结点的完全二 …

2024年02月22日 16:43:43

TREE

Intro(Tree) # 一、什么是树? # 在计算机科学中,树是一种非线性的数据结构,用于模拟具有层次关系的数据集合。它由有限节点组成,每个节点可以有零个或多个子节点。树的根节点是层次结构的顶部,其他节点都是其子节点。根据节点的度数(即子节点的数量),树可以分为二叉树、三叉树、多叉树等。 二、树的遍历方式 # 1. 先序遍历:先访问根节点,然后访问左子树,最后访问右子树。 2. 中序遍历:先访问左子树,然后访问根节点,最后访问右子树。 3. 后序遍历:先访问左子树,然后访问右子树,最后访问根节点。 三、常见的树 # 二叉树:二叉树是树的一种特殊形式,每个节点最多有两个子节点(通常称为左子 …

2024年01月30日 20:38:55

AES

Intro # 原理 # 实现 # import org.bouncycastle.jce.provider.BouncyCastleProvider; import javax.crypto.Cipher; import javax.crypto.KeyGenerator; import javax.crypto.SecretKey; import javax.crypto.spec.IvParameterSpec; import javax.crypto.spec.SecretKeySpec; import java.security.AlgorithmParameters; …

2024年01月30日 20:38:55

DES

Intro # 原理 # 实现 # import javax.crypto.Cipher; import javax.crypto.SecretKey; import javax.crypto.SecretKeyFactory; import javax.crypto.spec.DESKeySpec; import javax.crypto.spec.IvParameterSpec; import javax.crypto.spec.SecretKeySpec; import java.security.AlgorithmParameters; import …

2024年01月30日 20:38:55

CRYPTO

Intro # 常见的 对称加密 算法主要有 DES、3DES、 AES 等,常见的 非对称算法 主要有 RSA、DSA、ECC,散列算法 主要有 SHA-1、 MD5 等。 代码实现参考 Key # 生成自定义key # 使用ascii生成可以的方法如下: public static byte[] getRandomKey(){ int len = 16; // 128 ->16 256->32 byte[] keys = new byte[len]; Random rdom = new Random(); for (int i = 0; i < len; i++) { keys[i] = …

2024年01月30日 12:27:29

RSA

Intro(RSA) # 前情提要 # 欧拉函数 # 欧拉函数 \(\varphi(n)\) 是小于等于 n 的正整数中与 n 互质的数的数目。 例如:\(\varphi(8) = 4\),因为 1,3,5 和 7 均与 8 互质。 有如下性质: 1. 欧拉函数是积性函数,即是说若 m,n 互质,则 \(\varphi(m*n) = \varphi(m) * \varphi(n)\)。 2. 如果 n 为质数,则 \(\varphi(n) = n - 1\)。 同余 # 对某两个整数 a b,若它们除以正整数 m 所得的余数相等,则称 a b 对于模 m 同余,也就是说,存在整数 k …

2024年01月29日 23:21:44

21-STRATEGY

策略模式 # 描述 # 在策略模式(Strategy Pattern)中一个类的行为或其算法可以在运行时更改。这种类型的设计模式属于行为型模式。 在策略模式定义了一系列算法或策略,并将每个算法封装在独立的类中,使得它们可以互相替换。通过使用策略模式,可以在运行时根据需要选择不同的算法,而不需要修改客户端代码。 在策略模式中,我们创建表示各种策略的对象和一个行为随着策略对象改变而改变的 context 对象。策略对象改变 context 对象的执行算法。 我们将创建一个定义活动的 Strategy 接口和实现了 Strategy 接口的实体策略类。Context 是一个使用了某种策略的 …

2024年01月27日 13:17:13

13-CHAIN-OF-RESPONSIBILITY

责任链模式 # 描述 # 顾名思义,责任链模式(Chain of Responsibility Pattern)为请求创建了一个接收者对象的链。这种模式给予请求的类型,对请求的发送者和接收者进行解耦。这种类型的设计模式属于行为型模式。 在这种模式中,通常每个接收者都包含对另一个接收者的引用。如果一个对象不能处理该请求,那么它会把相同的请求传给下一个接收者,依此类推。 我们创建抽象类 AbstractLogger,带有详细的日志记录级别。然后我们创建三种类型的记录器,都扩展了 AbstractLogger。每个记录器消息的级别是否属于自己的级别,如果是则相应地打印出来,否则将不打印并把消息传给 …

2024年01月25日 20:42:30

06-ADAPTER

适配器模式 # 描述 # 适配器模式(Adapter Pattern)是作为两个不兼容的接口之间的桥梁。这种类型的设计模式属于结构型模式,它结合了两个独立接口的功能。 这种模式涉及到一个单一的类,该类负责加入独立的或不兼容的接口功能。举个真实的例子,读卡器是作为内存卡和笔记本之间的适配器。您将内存卡插入读卡器,再将读卡器插入笔记本,这样就可以通过笔记本来读取内存卡。 我们通过下面的实例来演示适配器模式的使用。其中,音频播放器设备只能播放 mp3 文件,通过使用一个更高级的音频播放器来播放 vlc 和 mp4 文件。 UML # 代码实现 # public class Main { …

2024年01月25日 20:22:27

22-TEMPLATE

模板模式 # 描述 # 在模板模式(Template Pattern)中,一个抽象类公开定义了执行它的方法的方式/模板。它的子类可以按需要重写方法实现,但调用将以抽象类中定义的方式进行。这种类型的设计模式属于行为型模式。 UML # 代码实现 # public class Main { public static void main(String[] args) { Game game = new Cricket(); game.play(); game = new Football(); game.play(); } } Game.java public abstract class …

2024年01月25日 02:28:52

03-ABSTRACT-FACTORY

抽象工厂模式 # 描述 # 抽象工厂模式(Abstract Factory Pattern)是围绕一个超级工厂创建其他工厂。该超级工厂又称为其他工厂的工厂。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。 在抽象工厂模式中,接口是负责创建一个相关对象的工厂,不需要显式指定它们的类。每个生成的工厂都能按照工厂模式提供对象。 抽象工厂模式提供了一种创建一系列相关或相互依赖对象的接口,而无需指定具体实现类。通过使用抽象工厂模式,可以将客户端与具体产品的创建过程解耦,使得客户端可以通过工厂接口来创建一族产品。 UML # 代码实现 # Main.java public class …

2024年01月25日 02:13:44

01-SINGLETON

单例模式 # 描述 # 单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。 这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象。 单例模式是一种创建型设计模式,它确保一个类只有一个实例,并提供了一个全局访问点来访问该实例。 UML # 代码实现 # public class Main { public static void main(String[] args) { //获取唯一可用的对 …

2024年01月25日 02:13:44

02-FACTORY

工厂模式 # 描述 # 工厂模式提供了一种创建对象的方式,而无需指定要创建的具体类。 工厂模式属于创建型模式,它在创建对象时提供了一种封装机制,将实际创建对象的代码与使用代码分离。 UML # 代码实现 # public class Main { public static void main(String[] args) { ShapeFactory shapeFactory = new ShapeFactory(); Shape shape1 = shapeFactory.getShape("CIRCLE"); shape1.draw(); Shape shape2 = …

2024年01月22日 04:55:38

USAGE

目录结构 # Gradle uses two main directories to perform and manage its work: the Gradle User Home directory and the Project Root directory. 参考 初始化脚本 # 在项目构建之前进行初始化。 参考 基本用法 # 初始化脚本(又名init 脚本)与 Gradle 中的其他脚本类似。但是,这些脚本是在构建开始之前运行的。 以下是几种可能的用途: 设置企业范围的配置,例如在哪里可以找到自定义插件。 根据当前环境设置属性,例如开发人员的计算机与持续集成服务器。 提供构建所需 …

2024年01月19日 21:00:59

DEBUG

debugger # 参数解释 # index explain -Xdebug 启用调试特性 -Xrunjdwp 在目标 VM 中加载 JDWP 实现。它通过传输和 JDWP 协议与独立的调试器应用程序通信。从 Java V5 开始,您可以使用 -agentlib:jdwp 选项,而不是 -Xdebug 和 -Xrunjdwp。 -Djava.compiler=NONE 禁止 JIT 编译器的加载 transport 传输方式,有 socket 和 shared memory 两种,我们通常使用 socket(套接字)传输,但是在 Windows 平台上也可以使用shared memory( …

2024年01月13日 06:50:22

XML_SCHEMA

Intro(XML Schema) # XML约束就是用于限制XML文件中可以出现的标签以及属性(顺序/格式/类型)文件。DTD约束(约束的粒度比较粗糙)简单/Schame约束(粒度比较细)复杂。 DTD约束 # <?xml version="1.0" encoding="UTF-8" ?> <!--引入本地DTD约束--> <!DOCTYPE persons SYSTEM "person.dtd"> <persons> <person name="pOne"> <name>张三</name> <age>18</age> </person> </persons> <!-- …

2024年01月13日 06:14:20

IO

Structure # FileDescriptor # 文件描述符类的实例充当底层机器特定结构的不透明句柄,表示打开的文件、打开的套接字或另一个字节源或接收器。文件描述符的主要实际用途是创建FileInputStream或FileOutputStream来包含它。 它相当于将指定文件的信息与新建的文件指针fp相关联,在 FILE 结构内部记录了这样一些信息:文件内部的当前读写位置、读写报错的记录、文件结尾指示器、缓冲区开始位置的指针、文件标识符、一个计数器(统计拷贝进缓冲区的字节数)等等。后继的操作就可以使用这个指针(而不是文件名)来处理指定文件。 参考 InputStream # …

2024年01月12日 05:25:07

01_NETTY-CODE-FLOW

Netty编码流程 # 写一个简单的http server public class TestServer { public static void main(String[] args) { EventLoopGroup bossGroup = new NioEventLoopGroup(); EventLoopGroup wordGroup = new NioEventLoopGroup(); ServerBootstrap serverBootstrap = new ServerBootstrap(); try { …

2024年01月12日 05:25:07

LESSON

Reference # https://www.bilibili.com/video/BV1c4411J7Ty

2024年01月12日 03:00:28

NETTY

依赖包 # <dependency> <groupId>io.netty</groupId> <artifactId>netty-all</artifactId> <version>4.1.10.Final</version> </dependency> Reference # https://mrdear.cn/posts/framework-netty-reactor-model.html https://www.bilibili.com/video/BV1c4411J7Ty

2024年01月12日 03:00:28

FRAMEWORK

hello framework

2024年01月12日 02:33:49

GRADLE

Gradle入门到实战 # Groovy语言的学习 # 学习Geadle我们需要先来学习一下Groovy,很多同学估计听说过Groovy语言,有的也许没听说过,其实我们每天在配置Gradle的时候就是在跟Groovy接触了。Groovy是一门jvm语言,最终编译成class文件然后在jvm上执行,Java语言的特性Groovy都支持,我们可以混写Java和Groovy,就是在同一文件中可以混写, 注意,这里与Java和Kotlin可不一样,Java和Kotlin是可以互相调用,而不能在同一文件混写 。 Groovy的优势是什么呢?Groovy增强了Java的很多功能。比如解析xml文件,文件 …

2024年01月12日 02:33:49

GRADLE

Intro # Gradle是一个开源的自动构建工具,它在设计之初就是为了能够灵活地构建几乎所有类型的应用。以下是他的一些重要特性: 高性能:Gradle使用了缓存机制来加快构建 基于JVM:Gradle是基于JVM的工具,这对于熟悉Java的开发者来说是一件好事,因为你可以使用标准的Java APIs 在你的构建逻辑中,比如自定义的task或插件。这同时也使得Gradle可以轻易地实现跨平台。 声明式(Conventions):Gradle汲取了Maven的长处,以Java项目为例,只要将合适的文件放在合适的地方,应用合适的插件就可以简单地执行构建 扩展性:Gradle具有良好的可扩展性, …

2024年01月09日 18:34:32

SPECIFICATION

MySQL数据库设计规范___MSB___ # 规范背景与目的 # MySQL数据库与 Oracle、 SQL Server 等数据库相比,有其内核上的优势与劣势。我们在使用MySQL数据库的时候需要遵循一定规范,扬长避短。本规范旨在帮助或指导RD、QA、OP等技术人员做出适合线上业务的数据库设计。在数据库变更和处理流程、数据库表设计、SQL编写等方面予以规范,从而为公司业务系统稳定、健康地运行提供保障。 设计规范 # 2.1 数据库设计 # 以下所有规范会按照**【高危】、【强制】、【建议】**三个级别进行标注,遵守优先级从高到低。 对于不满足【高危】和【强制】两个级别的设计,DBA会强制 …

2024年01月09日 17:39:36

06_B+TREE_INDEX

前情提要 # prerequirement 前边我们详细唠叨了 InnoDB 数据页的 7 个组成部分,知道了各个数据页可以组成一个 双向链表 ,而每个数据页中的记录会按照主键值从小到大的顺序组成一个 单向链表 ,每个数据页都会为存储在它里边儿的记录生成一个 页目录 ,在单页中通过主键查找某条记录的时候可以 页目录(page-directory) 中使用二分法快速定位到对应的槽,然后再遍历该槽对应分组中的记录即可快速找到指定的记录(如果你对这段话有一丁点儿疑惑,那么接下来的部分不适合你,返回去看一下 数据页结构 吧)。页和记录的关系示意图如下: 其中页a、页b、页c … 页n 这些页可以不在 …

2024年01月09日 17:33:02

04_INNODB-RECORD-STRUCT

准备工作 # Comment 到现在为止, MySQL 对于我们来说还是一个黑盒,我们只负责使用客户端发送请求并等待服务器返回结果,表中 的数据到底存到了哪里?以什么格式存放的? MySQL 是以什么方式来访问的这些数据?我们前边唠叨请求处理过程的时候提到过, MySQL 服务器上负责对表中数据的读取和写入工作的部分是 存储引擎 ,而服务器又支持不同类型的存储引擎,比如 InnoDB 、 MyISAM 、 Memory 啥的,不同的存储引擎一般是由不同的人为实现不同的特性而开发的,真实数据在不同存储引擎中存放的格式一般是不同的,甚至有的存储引擎比如 Memory 都不用磁盘来存储数据,也就是 …

2024年01月09日 17:33:02

05_INNODB-PAGE-STRUCT

不同类型的页简介 # 前边我们简单提了一下 页 的概念,它是 InnoDB 管理存储空间的基本单位,一个页的大小一般是 16KB 。InnoDB 为了不同的目的而设计了许多种 不同类型的页 ,比如存放表空间头部信息的页,存放Insert Buffer信息的页,存放INODE 信息的页,存放undo 日志信息的页等等等等。当然了,如果我说的这些名词你一个都没 有听过,就当我放了个屁吧~ 不过这没有一毛钱关系,我们今儿个也不准备说这些类型的页,我们聚焦的是那些存放我们表中记录的那种类型的页,官方称这种存放记录的页为 索引( INDEX )页 ,鉴于我们还没有了解过索引是个什么东西,而这些表中的记 …

2024年01月07日 11:54:03

BINARY-SEARCH

binary search # implement # JAVA import org.junit.Assert; import org.junit.Test; public class BinarySearch { @Test public void testBinarySearch(){ int[] arr = new int[]{4,8,10, 16,18,20,50,100}; Assert.assertEquals("", binarySearch(arr, 0, arr.length - 1, 4), 0); Assert.assertEquals("", …

2024年01月07日 11:54:03

SEARCH

hello search

2023

2023年12月28日 19:39:20

JUL

JUL(java util logging) # 配置模板 # vim $(dirname $(which java))/../jre/lib/logging.properties vim ``dirname $(which java)``/../jre/lib/logging.properties ############################################################ # Default Logging Configuration File # # You can use a different file by specifying a …

2023年12月28日 19:39:20

LOG_FRAMEWORK

hello log framework

2023年12月26日 18:22:11

TEMP

渲染 # md文件 # 直接在render.md中添加md文本即可 html文件 # 在index.html中写入东西,然后可以安装响应的插件直接打开 1. live server extension 2. open in browser Reference # https://stackoverflow.com/questions/30039512/how-to-view-an-html-file-in-the-browser-with-visual-studio-code

2023年12月26日 04:50:37

JAVAAGENT

Intro(JavaAgent) # 通过实现agent类中的premain方法将自定义的类转换器注册到JVM中,从而实现类加载之前对字节码进行处理。本次实验中对类未进行处理,而是在加载类之前打印输出。 完整代码可 参考 代码实现 # MyAgent package agent; import java.lang.instrument.ClassFileTransformer; import java.lang.instrument.Instrumentation; public class MyAgent { public static void premain(String args, …

2023年12月24日 23:16:19

03_DQL

DQL语言的学习 # 1.基础查询 # 语法:select 查询列表 from 表名; 特点: 1,查询列表可以是:表中的字段,常量值,表达式,函数 2,查询的结果是一个虚拟的表格 1.查询表中的单个字段 select last_name from employees limit 10; 2.查询表中的多个字段 select last_name, salary, email from employees limit 10; 3.查询表中的所有字段 select * from employees limit 10; 4.查询常量值 select 100;,select 'john'; 5.查询 …

2023年12月18日 01:23:26

02_FUNCTION

函数 # For server side help, type ‘help contents’ mysql> help contents You asked for help about help category: "Contents" For more information, type 'help <item>', where <item> is one of the following categories: Account Management Administration Compound Statements Contents Data Definition Data …

2023年12月17日 20:41:01

01_DATABASE_RELATED_CONCEPTS

数据库相关概念 # DDL(Data Definition Language) # 数据库定义语言 statements are used to define the database structure or schema. DDL是SQL语言的四大功能之一。用于定义数据库的三级结构,包括外模式、概念模式、内模式及其相互之间的映像,定义数据的完整性、安全控制等约束DDL不需要commit. CREATE、ALTER、DROP、TRUNCATE、COMMENT、RENAME。 DML(Data Manipulation Language) # 数据操纵语言statements are …

2023年12月15日 11:53:36

NETWORK-STACK

Intro(网络栈) # 直接往网卡发送数据 # 通过对网络模型以及 tcp/ip 协议栈的了解,是可以不通过协议栈处理而使用系统调用直接往网卡上面发送数据的。示例如下:(在 linux 上面的实验,macosx 因为限制原因,修改不了 MAC source address,但是 Linux 完全没有问题。) 抓包命令sudo tcpdump -i eth0 arp -w nic.pcap, nic.pcap file download #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> …

2023年12月14日 20:17:39

BUILD

编译JDK # build # # 下载xcodeapp[(~7G), OS version [13.3.1 (22E261)] wget -c https://download.developer.apple.com/Developer_Tools/Xcode_14.3.1/Xcode_14.3.1.xip # 切换xcode 到xcodeapp sudo xcode-select -s /Applications/Xcode.app/Contents/Developer sudo xcodebuild -license # 配置 # disable-warnings-as-errors选 …

2023年12月14日 20:17:39

JDK

Intro(JDK) # 下载JDK # reference # special:macosx[Sonoma]安装特殊版本 1.6.0_65,oracle没有提供 。 上面的没有源码, 参考 改用 Java for OS X 2013-005 Developer Package,对应的JAVA版本为 1.6.0_65-b14-462.jdk 。 Please be aware that IntelliJ IDEA 2022.3 won’t support running and testing Java applications that use Java 6. Java 6 reached …

2023年12月12日 15:58:25

RENDER

render everything

2023年12月08日 19:56:05

DOWNLOAD

网页下载需要修改的部分 # 1. <body data-page="/Users/mac/Downloads/REPORT/README.md" class="sticky ready" style=""> ==> <body data-page="/Users/mac/Downloads/REPORT/README.md" class="sticky ready close" style=""> 2. body.close .content { left: 200px; } 3. body:not(.ready) { # overflow: hidden; } # vus.css # …

2023年12月08日 14:45:40

LIBRARY

Linux共享库,静态库,动态链接库 # 介绍 # 程序函数库可分为3种类型:静态函数库(static libraries)、共享函数库(shared libraries)、动态加载函数库(dynamically loaded libraries): 静态函数库,是在程序执行前就加入到目标程序中去了 ; 动态函数库同共享函数库是一个东西(在linux上叫共享对象库, 文件后缀是.so ,windows上叫动态加载函数库, 文件后缀是.dll) linux中明明系统的共享库的规则 代码实现 # libhello.c /* libhello.c - demonstrate library …

2023年12月08日 14:45:40

GCC

hello gcc

2023年12月07日 17:44:36

DESIGN-PATTERN

Intro # 设计模式,即Design Patterns,是指在软件设计中,被反复使用的一种代码设计经验。使用设计模式的目的是为了可重用代码,提高代码的可扩展性和可维护性。 设计模式这个术语是上个世纪90年代由Erich Gamma、Richard Helm、Raplh Johnson和Jonhn Vlissides四个人总结提炼出来的,并且写了一本Design Patterns的书。这四人也被称为四人帮(GoF)。 设计模式把一些常用的设计思想提炼出一个个模式,然后给每个模式命名,这样在使用的时候更方便交流。GoF把23个常用模式分为创建型模式、结构型模式和行为型模式三类。 为什么要使用 …

2023年12月07日 16:00:42

TUN-TAP

tun/tap # tun/tap 设备是操作系统内核中的虚拟网络设备,是用软件模拟的网络设备,提供与硬件网络设备完全相同的功能。主要用于用户空间和内核空间传递报文。 tun/tap 设备与物理网卡的区别,如图所示: # 对于硬件网络设备而言,一端连接的是物理网络,一端连接的是网络协议栈。 对于 tun/tap 设备而言,一端连接的是应用程序(通过 字符设备文件 /net/dev/tun),一端连接的是网络协议栈。 工作原理 # 从下图可以更直观的看出 tun/tap 设备和物理设备的区别:虽然它们的一端都是连着网络协议栈,但是物理网卡另一端连接的是物理网络,而 tun/tap 设备另一端连 …

2023年12月07日 16:00:42

VMWARE

Reference # https://blog.csdn.net/a745233700/article/details/90230490

2023年12月07日 14:15:50

DOCKER0

bridge网络 # 目前的理解是 1. 容器中的eth0接口通过veth pair 连接到docker0 网桥。 2. docker0网桥创建的时候会自动生成一个网络接口并附有172.17.0.1的ip,参考 3. docker0 与 eth0 之间没有直接的关联,而是通过 ip_forward/ docker-proxy 等技术进行转发的。参考 文档, 有以下片段。 Looking at the diagram, the interface docker0 has a connection to the eth0 interface, this gives the ability to …

2023年12月06日 11:54:39

BRIDGE

Intro(Bridge) # Reference #

2023年12月05日 16:30:49

NETWORK

hello network tcp,udp vpn tun,tap veth pair proxy 网络协议栈 https 网桥 TCPIP之UDP打洞 netfilter 网络适配器,接口,网卡。 vm桥接和docker桥接区别? vm tun/vpn Reference # https://www.cs.dartmouth.edu/~sergey/netreads/path-of-packet/Network_stack.pdf https://blog.csdn.net/dillanzhou/article/details/126219082 …

2023年12月05日 16:30:49

DNS

Intro(DNS) # Reference # make a DNS server https://en.wikipedia.org/wiki/Domain_Name_System#DNS_message_format https://datatracker.ietf.org/doc/html/rfc1035#section-4.1 https://github.com/EmilHernvall/dnsguide/blob/b52da3b32b27c81e5c6729ac14fe01fef8b1b593/chapter1.md …

2023年12月05日 16:30:49

TCP

tcp flag # 图例 # IP 报头(最小20Byte,最大 15[1111] * 32 / 8, 可填充 40Byte ): 首部长度的单位为 4Byte. TCP 报头(20Byte) 标志位解释 # SYN:同步序列编号(Synchronize Sequence Numbers) 是TCP/IP建立连接时使用的握手信号。在客户机和服务器之间建立正常的TCP网络连接时,客户机首先发出一个SYN消息,服务器使用SYN+ACK应答表示接收到了这个消息,最后客户机再以ACK消息响应。这样在客户机和服务器之间才能建立起可靠的TCP连接,数据才可以在客户机和服务器之间传递。 ACK …

2023年11月28日 11:40:03

03_CHARACTER_AND_COLLATION

字符集和比较规则简介 # 字符集简介 # 我们知道在计算机中只能存储二进制数据,那该怎么存储字符串呢?当然是建立字符与二进制数据的映射关系了,建立这个关系最起码要搞清楚两件事儿: 你要把哪些字符映射成二进制数据?(也就是界定清楚字符范围) 怎么映射? 将一个字符映射成二进制数据的过程叫编码,将一个二进制数据映射到一个字符的过程叫解码 人们抽象出一个字符集的概念来描述某个字符范围的编码规则。比方说我们来自定义一个名称为 xiaohaizi的字符集,它包括的字符范围和编码规则如下: 包含的字符’a’、‘b’、‘A’、‘B’ 编码的规则如下: 采用一个字节编码一个字符的形式,字符和字节的映射关系如 …

2023年11月27日 18:31:55

BOOK

Intro(MySQL是怎样运行的:从根儿上理解MySQL) # 目录结构 # 第01章 装作自己是个小白-重新认识MySQL 第02章 MySQL的调控按钮-启动选项和系统变量 第03章 乱码的前世今生-字符集和比较规则 第04章 从一条记录说起-InnoDB记录结构 第05章 盛放记录的大盒子-InnoDB数据页结构 第06章 快速查询的秘籍-B+树索引 第07章 好东西也得先学会怎么用-B+树索引的使用 第08章 数据的家-MySQL的数据目录 第09章 存放页面的大池子-InnoDB的表空间 第10章 条条大路通罗马-单表访问方法 第11章 两个表的亲密接触-连接的原理 书中数据库分 …

2023年11月27日 18:31:55

LESSON

Intro(Lesson) # 目录结构 # 数据库相关概念 帮助函数 DQL-数据查询语言 DML-数据操纵语言 DDL-数据定义语言 TCL-事务控制语言 视图 变量 存储过程和函数 流程控制 练习环境准备 # 1). 启动之前准备好的数据卷 docker run -dit --rm --name mysql-data registry.cn-hangzhou.aliyuncs.com/eli_w/busybox-with-mysql-datadir:1.2.0 2). 挂载数据卷并启动服务器 docker run -d -p 3336:3336 -e …

2023年11月23日 11:10:55

INSERTION-SORT

insertion # visualization # implement # JAVA import java.util.Arrays; public class InsertionSort{ public static void sort(int[] raw){ for (int i = 1; i < raw.length; i++) { int preIndex = i - 1; int currentValue = raw[i]; while(preIndex >= 0 && currentValue < raw[preIndex]){ // 覆盖循环 raw[preIndex + …

2023年11月22日 10:56:30

SELECTION-SORT

selection # visualization # implement # JAVA import java.util.Arrays; public class SelectionSort{ public static void sort(int[] raw){ for (int i = 0; i < raw.length - 1 ; i++) { int temp = i; for (int j = i + 1; j < raw.length ; j++) { if(raw[temp] > raw[j]) temp = j; } …

2023年11月21日 17:56:36

BUBBLE-SORT

bubble # visualization # implement # JAVA import java.util.Arrays; public class BubbleSort{ public static void sort(int[] raw){ for (int i = 1; i < raw.length ; i++) { for (int j = 0; j < raw.length - i ; j++) { if(raw[j] > raw[j+1]) switchNumberByTemp(raw,j,j+1); } } } public static void …

2023年11月21日 17:56:36

SORT

hello sort

2023年11月20日 12:56:12

NATIVE

native code

2023年11月20日 12:56:12

SPRING

spring Reference # Refresh # https://mp.weixin.qq.com/s?__biz=MzA5MTkxMDQ4MQ==&mid=2648934401&idx=1&sn=98e726ec9adda6d40663f624705ba2e4 https://blog.csdn.net/qq_33440246/article/details/121198031 https://blog.51cto.com/u_16213707/9647069 https://juejin.cn/post/7136725807598141448 …

2023年11月20日 12:56:12

SPRINGCLOUD

spring cloud Reference # Refresh # https://mp.weixin.qq.com/s?__biz=MzA5MTkxMDQ4MQ==&mid=2648934401&idx=1&sn=98e726ec9adda6d40663f624705ba2e4 https://blog.csdn.net/qq_33440246/article/details/121198031 https://blog.51cto.com/u_16213707/9647069 https://juejin.cn/post/7136725807598141448 …

2023年11月20日 12:50:56

JAVACPP

example # Accessing Native APIS 1. 编写NativeLibrary.h # #include <string> namespace NativeLibrary { class NativeClass { public: const std::string& get_property() { return property; } void set_property(const std::string& property) { this->property = property; } std::string property; }; } 2. 编 …

2023年11月19日 23:41:05

JNA

example # C library 1. 导入需要的依赖包 # <!-- https://mvnrepository.com/artifact/net.java.dev.jna/jna --> <dependency> <groupId>net.java.dev.jna</groupId> <artifactId>jna</artifactId> <version>5.13.0</version> </dependency> 2. 编写代码 # The following program loads the local C standard library implementation …

2023年11月17日 19:12:57

JNI

example # C 1. 写一段包含C方法实现的java代码 # // Save as HelloJNI.java public class HelloJNI{ static { // Load native library hello.dll (Windows) or libhello.so (Unixes) at runtime // This library contains a native method called sayHello() System.loadLibrary("hello"); } // Declare an instance native method …

2023年09月27日 17:09:15

EXAMPLE

multiple containers in single pod # apiVersion: apps/v1 kind: Deployment metadata: labels: spring-boot: "true" app: multiple-pod-test provider: jkube version: 1.0.5-SNAPSHOT group: com.metaleap.framework name: multiple-pod-test spec: replicas: 1 revisionHistoryLimit: 2 selector: matchLabels: app: …

2023年08月11日 11:38:12

AUTOMATOR

Automator # DEMO # close-viscosity # 在 macOS 上实现到某个时间点自动关闭某个软件,可以使用 AppleScript 脚本结合定时任务来实现。以下是一种可能的实现方式: # 1.打开 "Script Editor" 应用程序:在 Launchpad 或者应用程序文件夹中找到 "Script Editor" 应用程序并打开。 # 2.编写 AppleScript 脚本:在 "Script Editor" 中编写一个 AppleScript 脚本,用于关闭指定的软件。例如,假设要关闭 Safari 浏览器,脚本内容如下: tell application …

2023年07月31日 00:32:13

ADB

Intro(ADB) # PUSH # push moive to android: adb push /path/FILENAME.mp4 /sdcard/ SYSTEMPROP(getprop) # 通过 magisk设置系统属性,然后根据 文章操作:setprop service.adb.tcp.port 5555:可以让手机中的adbd开放指定的tcp端口,方便连接调试。 Caution 1). 一直开放tcp端口也有分险,需要注意。 2). 直接在/system/build.prop文件中编辑不生效(如果对/system分区没有写权限的话)。需要借助 magisk 模块中 …

2023年07月29日 12:51:03

CMAKE

CMAKE 💯 # 基础 # 简介 # gcc gcc是用来编译c文件的编译器。简单来说就是给他输入一个(或几个)c文件,它可以输出一个可执行文件。当你的程序只有一个源文件时,直接就可以用gcc命令编译它。但是当你的程序包含很多个源文件时,用gcc命令逐个去编译时,容易混乱而且工作量大。 make 因此出现了make工具。它本身没有编译和链接功能。但是它可以按照Makefile文件中的命令调用gcc来编译工程。有了make,我们就不用一个一个文件去编译,只要把他们的编译指令都写在Makefile中,然后make就可以一键完成。 cmake 为了进一步简化Makefile的书写,出现 …

2023年07月28日 23:31:57

VISCOSITY

viscosity # 多vpn链接软件,和 TunnelBlick属于同一类软件 下载 # https://www.digit77.com/macapps/viscosity/#download-explan https://pan.baidu.com/disk/main#/index?category=all&path=%2FMAC 激活 # # 激活步骤: 之前激活过的一般情况下只要激活没失效就无需再次激活! 1. Viscosity 运行后,提示安装帮助工具(Viscosity Helper Tool Installation),点击「Install」,输入电脑密码安装。(没有此步骤 …

2023年07月26日 11:23:49

SOFTWARES

hello software

2023年07月24日 23:21:26

JETBRAINS

Intro(Jetbrains) # Jetbrains系列禁用macOS触控栏 # 由于在 debug 的过程中需要用到 Fn 系列功能,所以不要让软件自定义 touch bar 相关内容。 解决办法(局部软件级别):Help -> Editor Custom VM Options -> -Dide.mac.touchbar.use=false, 参考 youtrack|Disable-touchbar-support。 当然还有另外一种方式,全局系统级别的禁用:系统设置 -> 键盘 -> 触控栏设置 -> 触控栏显示切换到其他即可。 上述局部方式好像啥也不显示了,要想显示 Show …

2023年07月24日 10:58:51

CLION-ENV

Clion 安装 GDB 工具 # brew安装 gdb@13.1 # 结合`brew安装 gdb@13.1`, clion 不支持13.2 # PermissionsDarwin相关操作导入证书,一般不用重启。 # 添加gbd启动初始化脚本 echo 'set startup-with-shell off' >> ~/.gdbinit # 重要的一点,使用GDB 得关闭 mac sip: 不然会一直hangs住 # 查看:csrutil status, 关闭:csrutil disable # 结合图片进行gdb debug make -v # GNU Make 3.81 # This …

2023年07月23日 19:54:51

BREW

brew # 切换版本 # Note brew unlink node@18 brew link --overwrite --force node@14 安装软件 # 1、官网旧版本Formula gdb example # ref from: https://stackoverflow.com/questions/62785290/installing-previous-versions-of-a-formula-with-brew-extract # TAP=... # <org>/<repo>, for example "my-org/homebrew-old" # …

2023年07月19日 14:02:32

AUTO-SSH

AUTO # 使用密码自动登录 /usr/local/bin/ssh # # 先安装 sshpass brew install hudochenkov/sshpass/sshpass #!/bin/zsh host=$1 #password=`awk "/#Password/ && inhost { print \\\$2 } /Host/ { inhost=0 } /Host $host/ { inhost=1 }" ~/.ssh/config` password=`awk "/#Password/ && inhost { print \\\$2 } /Host / { inhost = …

2023年07月02日 21:15:34

OPENSSL

Intro(OPENSSL) # 证书类型 # 暂时记录一个 x509 ( rfc, wiki)。这种格式一般广泛应用于Web浏览器和服务器之间的SSL/TLS加密通信。 对于这种证书的编码格式有 der, pem(privvaccy-enhanced mail) 等。且可以认为 pem 是 der 二进制的一种 base64编码。可以如下验证: 1. 下载网站证书并写入到文件:(不是直接下载,而是在 https 握手过程中会携带 证书数据,openssl 会在这个过程中打印出来,然后我们用工具提取即可) 1.1. openssl s_client -connect …

2023年07月02日 20:58:51

IDEA-ENV

插件 # column1 column2 column3 Lombok Maven Helper Mybaits Log Plugin Translation Find bugs RestfulToolkit .ignore Alibaba Java Coding Guidelines jclasslib bytecode viewer Codota Material Theme UI SequenceDiagram StickyScroll 配置 # 生成serialVersionUID # 参考: File -> Settings -> Editor -> Inspections -> …

2023年06月30日 22:53:08

AWK

awk (Alfred Aho 、Peter Weinberger 和 Brian Kernighan): 样式扫描和处理语言,它允许您创建简短的程序。读取输入文件,为数据排序,处理数据,对输入执行计算以及生成报表等。其中语法方面有借鉴C语言。 一.语法格式: # awk 'pattern{action[;action..]}' {filenames} 原理: 调用awk时,依次对文件中匹配的每一行做后面的action,每一对pattern+action用分号[;]隔开。 注意: 如果一个'' 中没有pattern,默认所有行。action 必须{}包起来 如果一个'' 中没有action,默 …

2023年06月19日 13:47:42

AUTO-UP

配置Linux开机自启动 # 方式一,(rc.local)启动说明 # 脚本位置 /etc/rc.local -> /etc/rc.d/rc.local 脚本内容 #!/bin/bash # THIS FILE IS ADDED FOR COMPATIBILITY PURPOSES # # It is highly advisable to create own systemd services or udev rules # to run scripts during boot instead of using this file. # # In contrast to previous …

2023年06月19日 13:47:42

NO-PASS-LOGIN

Intro(Linux免密登录) # 参考: SSH登录 Reference # SSH登录

2023年06月19日 13:35:38

GNUPG

Intro(GnuPG) # 基本概念 # Tip Key 管理是 GPG 的核心功能,GPG Key 不能简单的理解为非对称加密的 Private Key / Public Key / Key Pair。GPG Key 由如下信息组成: Key ID: 该 GPG Key 的唯一标识,值为主公钥的指纹,支持多种格式(Fingerprint, Long key ID, Short key ID),更多参见:What is a OpenPGP/GnuPG key ID?。 UID: 1 个或多个,每个 UID 由 name、email、comment 组成,email 和 comment 可以 …

2023年06月19日 13:30:18

HASHCAT

hashcat 简单使用 # https://github.com/hashcat/hashcat.git rar crack # # 提取hash值,注意裁剪文件名 rar2john 9.rar > example0.hash # output: # $rar5$16$8345875512857bc69f0a8059ffce0166$15$7880153df518399181c9e2df158b7249$8$f627000464e14963 # 使用hashcat撞库 hashcat -a 3 -m 13000 -O -1 '?d?l' -D 1,2 -d 3,5 …

2023年06月19日 11:17:40

XARGS

用于参数转换,与不支持管道输入的命令搭配使用,比如 ls. Options # options explain -a file 从文件中读入作为stdin -e flag 注意,有的时候可能为-E,flag必须是一个以空格分隔的标志,当分析到含有flag这个标志的时候就停止 -p 每当执行一个argument的时候会询问用户 -n num 表示命令在执行的时候一次用几个参数,默认是所有 -t 表示先打印命令,再执行 -i | -I 参数占位符,{},%,等都可以使用 -s -r no-run-if-empty -L num -d delim 默认的xargs的分隔符是回车,argument的分 …

2023年06月15日 14:35:34

NETSH

# 1、语法 netsh interface ip set|show interface|address|dnsservers netsh interface set|add|show interface # 2、实践 netsh interface ip show interface netsh interface ip set address name="本地连接" source=static|dhcp 192.168.0.192 255.255.255.0 192.168.0.1 netsh interface ip set dnsservers name="本地连接" …

2023年06月15日 13:48:12

NMAP

Intro(Nmap | 参考指南) # 拿来主义:Nmap (“Network Mapper(网络映射器)”) 是一款开放源代码的 网络探测和安全审核的工具。它的设计目标是快速地扫描大型网络,当然用它扫描单个主机也没有问题。Nmap以新颖的方式使用原始IP报文来发现网络上有哪些主机,那些 主机提供什么服务(应用程序名和版本),那些服务运行在什么操作系统(包括版本信息), 它们使用什么类型的报文过滤器/防火墙,以及一堆其它功能。虽然Nmap通常用于安全审核, 许多系统管理员和网络管理员也用它来做一些日常的工作,比如查看整个网络的信息, 管理服务升级计划,以及监视主机和服务的运行。 …

2023年06月15日 13:45:07

SED

sed (Stream Editor): # 文本流编辑,是一个"非交互式的"面向字符流的编辑器。能同时处理多个文件多行内容,可以不对源文件改动,把整个文件输入到屏幕,可以把只匹配到模式的内容输出到屏幕上。还可以对源文件改动,但是不会在屏幕上返回结果。 [root@12302 ~]# sed --version sed (GNU sed) 4.2.2 Copyright (C) 2012 Free Software Foundation, Inc. License GPLv3+: GNU GPL version 3 or later …

2023年05月22日 14:04:34

RECORD

HEAD # 表注释查询 # -- oracle select * from user_tab_comments where comments like '%危险%'; -- mysql SELECT COLUMN_NAME,column_comment FROM INFORMATION_SCHEMA.Columns WHERE table_name='表名' AND table_schema='数据库名' 父子路径 # -- 宁夏,银川,金凤,良田镇 SELECT T2.* FROM ( SELECT @r AS _code, (SELECT @r := sgd_father_url …

2023年05月16日 00:27:21

LAUNCHCTL

launchctl # 简单解释,launchd是一套统一的开源服务管理框架,它用于启动、停止以及管理后台程序、应用程序、进程和脚本。launchd是macOS第一个启动的进程,该进程的PID为1,整个系统的其他进程都是它创建的。 1). 当launchd启动后,它会扫描/System/Library/LaunchDaemons和/Library/LaunchDaemons中的plist文件并加载他们; 2). 当输入密码登录系统后,launchd会扫 …

2023年04月19日 22:59:11

GREP

简介 # grep(global regular expression print): grep 主要用来查找,过滤,grep家族总共有三个:grep,egrep,fgrep。egrep = grep -E 扩展的正则表达式。 1、基本的正则表达式(Basic Regular Expression 又叫 Basic RegEx 简称 BREs) 2、扩展的正则表达式(Extended Regular Expression 又叫 Extended RegEx 简称 EREs) 3、Perl 的正则表达式(Perl Regular Expression 又叫 Perl RegEx …

2023年04月19日 22:59:11

FIREWALLD

Linux 防火墙 # iptables-services # 服务操作 # index content 安装 yum install iptables-services 配置 vim /etc/sysconfig/iptables 永久保存 service iptables save 状态 systemctl status iptables 启动 systemctl status start 停止 systemctl status stop 重启 systemctl status restart 关闭自启服务 chkconfig iptables off 开启自启服务 chkconfig …

2023年04月18日 14:19:04

CURL

Intro(CURL| client url) # SYNTAX # # 1、直接访问默认是get curl http://www.example.com # 2、-i,--include 打印响应头 curl http://www.example.com -i # 3、-I,--head 大写的只会打印响应头信息 curl http://www.example.com -I # 3、-v,--verbose 详细信息 curl http://www.example.com -v # 4、-d,--date 请求数据 配合-X(请求方式) curl …

2023年04月18日 14:19:04

RECORD

命令记录 # #!/bin/bash # 首例打印数字权限 ls -l | awk 'NR>1{cmd="stat --printf \"%a\t\" "$9;system(cmd) ;print $0}' #!/bin/bash # 批量删除统一后缀文件 find . -name "*.txt" -type f -delete #!/bin/bash # 文件最好用""包起来,另外"使用\转义 # 批量文件重命名 ls -l | awk 'NR>1{origin=substr($0,57);now=substr($0,105);cmd="mv " "\"" origin "\"" " " …

2023年04月18日 14:19:04

FIND

Intro(find) # syntax # # 1,在home目录下查找txt 结尾或者 sh 结尾的文件 find /home -name "*.txt" -o -name "*.sh" # 2,查找路径,文件名中包含 lib 的文件 find /home -path "*lib*" # 3,表达式匹配 find /home -regex ".*(\.txt | \.sh)$" # 4,否定参数 find /home ! -name "*.txt" # 5,文件类型 find /home -type [f普通文件 | l符号连接 | d 目录 | c 字符设备| b块设备 | s …

2023年04月16日 23:15:13

KUBEADM

虚拟机准备 # # virtualbox 下载;https://download.virtualbox.org/virtualbox/7.0.6/VirtualBox-7.0.6-155176-OSX.dmg # centos min : http://mirrors.aliyun.com/centos/7.9.2009/isos/x86_64/CentOS-7-x86_64-Minimal-2009.iso?spm=a2c6h.25603864.0.0.60196aeaRSRcS0 # k8s-master (bridge)(192.168.1.20) # k8s-node01 …

2023年04月16日 22:28:31

MINIKUBE

minikube # # 1.Installation curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-darwin-amd64 sudo install minikube-darwin-amd64 /usr/local/bin/minikube # 2.Start your cluster minikube start # 3.Interact with your cluster kubectl get po -A # or: minikube kubectl -- get po -A # …

2023年03月14日 17:52:56

01_RECOGNIZE

BIN目录可执行文件 # 查看目录 # # tree -L 3 /usr/local/opt/mysql@5.7/bin/ /usr/local/opt/mysql@5.7/bin/ ├── innochecksum ├── mysql ├── mysql.server -> ../support-files/mysql.server ├── mysql_client_test ├── mysql_client_test_embedded ├── mysql_install_db ├── mysql_plugin ├── mysql_secure_installation ├── …

2023年03月13日 17:53:01

2023年03月09日 11:02:00

BUILD

hello builder

2023年03月09日 11:02:00

ADVANCE

类加载器 # 类加载器从 JDK 1.0 就出现了,最初只是为了满足 Java Applet(已经被淘汰) 的需要。后来,慢慢成为 Java 程序中的一个重要组成部分,赋予了 Java 类可以被动态加载到 JVM 中并执行的能力。 定义 # 1). 类加载器是一个负责加载类的对象。ClassLoader是一个抽象类。给定一个类的二进制名称,类加载器尝试定位或者生成构成类定义的数据。一个典型的策略是:转换一个名字到一个文件然后读取名字对应的类文件从文件系统。 2). 每个类对象都包含一个定义它的类加载器ClassLoader的引用。 3). 数组类的类对象不是通过类加载器创建的。但会根 …

2023年03月09日 11:02:00

K8S

hello k8s kubectl --context=xxms-aliyun-live -n ai-app-live logs --tail -1 --max-log-requests=20 -l app=ai-app-service-teaching-api # 查看 secret kubectl --kubeconfig=meta.config -n test-back get secret harbor-key -o jsonpath='{.data}' echo …

2023年03月09日 11:02:00

SYNTAX

Shell环境 # Shell 变成跟JavaScript,php编程一样,只要有一个能编写代码的文本编辑器和一个能解释执行的脚本解释器就可以了。Linux下面的shell很多,常见的又: 检查是否存在某个文件的命令: # test命令检测 test -e ./shizi.jpg && echo 'found' || echo "not" # [] 方括号检测 *括号内前后都有空格 [ -f ./shizi.jpg ] && echo 'found' || echo 'not' 名称 路径 Bourne Shell /usr/bin/sh 或者 /bin/sh Bourne Again …

2023年03月09日 11:02:00

RANGER

hello

2023年03月09日 11:02:00

2023年03月09日 11:02:00

KAFKA

hello

2023年03月09日 11:02:00

2023年03月09日 11:02:00

TEMPLATE

以下语法仅针对项目环境生效 Example # 01-嵌入html # 1).普通嵌入 # <font style="font-size:1.3em;font-weight:bold;"> 目录 </font> 目录 2).段落中的块元素展开折叠 # 截选自 tls-ssl: HP-ClientHello-实例分析,点击末尾的◐查看效果 TLS record: 16:Content type,(表示握手包); 03 01:Legacy version,(TLS 1.0); 00 fd:Length,(253); 01 00 00 f9 03 ...... 0b 00 02 01 …

2022

2022年11月12日 18:48:26

ADV

hello 1、主从复制 https://www.cnblogs.com/gl-developer/p/6170423.html 2、读写分离 https://blog.csdn.net/liu976180578/article/details/77684583 3,分库分表 https://blog.csdn.net/trigl/article/details/50968079 4,多数据源

2022年11月08日 18:37:40

INSTALL

压缩包安装 # Centos7 准备 # 下载MySQL5.6.49 $ wget -c https://cdn.mysql.com/archives/mysql-5.6/mysql-5.6.49-linux-glibc2.12-x86_64.tar.gz # 检查是否安装过mysql,如果有先卸载, # 用yum -y remove删除,如果有多个,一个一个执行,卸载不掉的用 rpm -ev $ rpm -qa|grep -i mysql # 删除所有mysql的文件夹 $ find / -name mysql|xargs rm -rf # 卸载系统自带的Mariadb $ rpm …

2022年11月08日 18:37:40

MYSQL

.frm # .frm 格式 # https://web.archive.org/web/20220520211318/https://dev.mysql.com/doc/internals/en/frm-file-format.html https://dbsake.readthedocs.io/en/latest/appendix/frm_format.html#frm-format https://sucs.swan.ac.uk/~grepwood/teamx/frm_2.html .frm 解析工具 # 解析工具参见 .frm 参考链接 # MySQL Forums Forum …

2022年10月24日 15:04:38

ACMQ

引入消息队列后 如何保证高可用性 # 持久化、事务、签收、 以及带复制的 Leavel DB + zookeeper 主从集群搭建 异步投递 Async send # 对于一个慢消费者,使用同步有可能造成堵塞,消息消费较慢时适合用异步发送消息 activemq 支持同步异步 发送的消息,默认异步。当你设定同步发送的方式和 未使用事务的情况下发持久化消息,这时是同步的。 如果没有使用事务,且发送的是持久化消息,每次发送都会阻塞一个生产者直到 broker 发回一个确认,这样做保证了消息的安全送达,但是会阻塞客户端,造成很大延时 。 在高性能要求下,可以使用异步提高producer 的性能。但会 …

2022年10月24日 15:04:38

KAFKA

hello kafka

2022年10月24日 15:04:38

MQ

hello mq hello mq

2022年10月24日 03:39:34

OS

hello os 操作系统 硬盘 # VDA和SDA是Linux系统中的磁盘驱动器名称。SDA 是默认的硬盘驱动器名称。SDA 通常指第一块硬盘,而SDB指第二块硬盘以此类推。VDA 是虚拟磁盘驱动器的默认名称。当使用虚拟化技术如VMware或Xen时,主机系统会将虚拟机磁盘挂载为VDA, VDB等。总之,SDA 通常是真实硬盘驱动器,而 VDA 通常是虚拟磁盘驱动器。 1.查看文件和文件夹大小 # du -h –max-depth=0 * (列出当前文件夹下所有文件包括文件夹的大小) du -sh (统计当前文件夹的总和) du -sh ./* 统计当前目录各文件夹大小 free -h 查看 …

2022年10月24日 03:39:34

COMMAND

hello command

2022年10月24日 03:39:34

BRPC

hello brpc

2022年10月24日 03:39:34

BRPC

rpc hello

2022年10月24日 03:39:34

DUBBO

hello dubbo

2022年10月24日 03:39:34

DUBBO

rpc hello

2022年10月24日 03:39:34

GRPC

hello gRpc

2022年10月24日 03:39:34

GRPC

rpc hello

2022年10月24日 03:39:34

RPC

rpc hello

2022年10月24日 03:39:34

AVRO

hello avro

2022年10月24日 03:39:34

FST

hello fst

2022年10月24日 03:39:34

HESSION

hello hession

2022年10月24日 03:39:34

JDK_BUILD_IN

hello jdk build in

2022年10月24日 03:39:34

JSONORXML

hello json or xml

2022年10月24日 03:39:34

KRYO

hello kryo

2022年10月24日 03:39:34

PROTOBUF

hello protobuf

2022年10月24日 03:39:34

SERIALIZED

hello serialized hello 文檔助手 https://segmentfault.com/a/1190000040187909?sort=votes

2022年10月24日 03:39:34

THRIFT

hello thrift

2022年10月24日 03:39:34

SPRINGMVC

springmvc 执行流程 # 过滤器 # 拦截器 # 数据绑定 # 消息转换器 # 异常处理 # 注解ExceptionHandler 注解ExceptionHandler作用对象为方法,最简单的使用方法就是放在controller文件中,详细的注解定义不再介绍。 如果项目中有多个controller文件,通常可以在baseController中实现ExceptionHandler的异常处理,而各个contoller继承basecontroller从而达到统一异常处理的目的。因为比较常见,简单代码如下: 单个controller …

2022年10月22日 17:32:46

MYBATIS

Intro(MyBatis | underlying) # 要点 # Attention 1. mapper 接口定义的语句怎么生成的? configuration解析后会生成一个 MappedStatement{id:""}. 并且将ID 和 ms 放入 configuration 中的 mappedStatements 中。 2. 执行顺序是什么样的? 3. 缓存是如何处理的? 4. 拦截器原理。 Mapper接口的实现 # 通过MapperRegistry里面的 map 类型的 knowMappers 根据 type 获取到 MapperProxyFactory ,进而调用return …

2022年10月22日 14:21:30

ARRAY

array

2022年10月22日 14:21:30

GRAPH

graph

2022年10月22日 14:21:30

STACK

Intro(Stack) # 1. 栈的英文(stack) 2. 栈是一个先入先出(FILO-First In Last Out)的有序列表 3. 栈是限制线性表中元素的插入和删除只能在线性表的同一端进行的一种特殊线性表。允许插入和删除的一端,为变化的一端,成为栈顶(top),另一端为固定的一端,称为栈底(bottom)。 4. 根据栈的定义可知,最先放入栈中的元素在栈底,最后放入的元素在栈顶,而删除元素刚好相反,最后放入的元素最先删除,最先放入的元素最后删除。 Reference # https://www.bilibili.com/video/BV1E4411H73v?p=30 …

2022年10月22日 14:21:30

CTO

线上项目碰到过什么问题 # 项目中复杂的业务逻辑 # 数据量,访问量多大 #

2022年10月22日 14:21:30

HR

自我介绍中的亮点 # 面试官你好,我叫xxx,2018毕业于xxx软件工程专业。 今天面试的岗位是Java软件开发。 在校时期领先突破单片机点灯实验。利用暑假自学汇编。参考JAVA学习课本独立完成学习管理系统开发,博客获得高赞。 参与工作后, 曾经, 在日常工作中,除了编写相应的模块代码和bug修复以外. 还能够优化系统结构或者处理逻辑等。 曾经将网关白名单鉴权部分利用多线程技术效率提高百分之45%左右。 自己除了日常工作中的Java编码外,还喜欢学习嵌入式,汇编,网络通信等知识。 以上就是我的自我介绍。 最大的优缺点(求职优势) # 自我评价 # 工作积极主动,工作效率高,责任心强,注重细 …

2022年10月19日 03:06:08

NETWORK

TCP # UDP # InetAddress # 流程解析 # 根据域名实例化一个InetAddress对象的流程解析。 比如:InetAddress byName = InetAddress.getByName("wtfu.site");。如果是域名的话,会涉及到系统调用getaddrinfo.里面包括DNS解析。 1. getAllByName(String host, InetAddress reqAddr) 2. 不属于ip地址的话,会继续进入到getAllByName0() 3. addresses = getAddressesFromNameService(host, …

2022年10月18日 21:25:00

THREAD

Intro(Thread) # 状态 # 源码 public enum State { /** * Thread state for a thread which has not yet started. */ NEW, /** * Thread state for a runnable thread. A thread in the runnable * state is executing in the Java virtual machine but it may * be waiting for other resources from the operating system * …

2022年10月14日 14:22:59

BASE

hello base

2022年10月14日 14:22:59

OBJECT ORIENTED

对象结构 # 对象头 # Mark Word # Mark Word(标记字),用于存储自身运行时的数据 例如GC标志位、哈希码、锁状态等信息。Mark Word 的位长度为 JVM 的一个 Word 大小,也就是说 32 位 JVM 的 Mark word 为 32 位,64 位 JVM 为 64 位。Mark Word 的位长度不会受到 Oop 对象指针压缩选项的影响。 结构信息: Java 内置锁的涉及到很多重要信息,并且是存放于对象头的 Mark Word 字段中。 Java 内置锁的状态总共有四种,级别由低到高依次为:无锁、偏向锁、轻量级锁、重量级锁。为了让 Mark word 字 …

2022年10月14日 14:22:59

GIT

凭据管理 # 1.基本操作 # Caution 用来取回和存储用户凭据。 git credential [fill|approve|reject] credential-helper系统的根命令是git credential,也可以说是credential最基本的命令。实际上调用的是git-credential 可执行文件。 # 查找可执行文件位置 find / -name "git-credential" 2> /dev/null /Library/Developer/CommandLineTools/usr/libexec/git-core/git-credential # 验证`git …

2022年10月14日 14:22:59

SKELETON

基础概念 # 各个组件 # name explain APISERVER 所有服务访问统一入口 CrontrollerManager 维持副本期望数目 Scheduler 负责介绍任务,选择合适的节点进行分配任务 ETCD 键值对数据库 储存K8S集群所有重要信息(持久化) Kubelet 直接跟容器引擎交互实现容器的生命周期管理 Kube-proxy 负责写入规则至 IPTABLES、IPVS 实现服务映射访问的 COREDNS 可以为集群中的SVC创建一个域名IP的对应关系解析 DASHBOARD 给 K8S 集群提供一个 B/S 结构访问体系 INGRESS CONTROLLER 官方 …

2022年10月14日 14:22:59

AQS

AQS 内部结构 # 内部类Node节点代码 代码示例 static final class Node { /** Marker to indicate a node is waiting in shared mode */ static final Node SHARED = new Node(); /** Marker to indicate a node is waiting in exclusive mode */ static final Node EXCLUSIVE = null; /** waitStatus value to indicate thread has …

2022年10月14日 14:22:59

IO

IO 简介 # IO指以内存为中心,外部到内存为input,内存到外部为output 按方向分为输入流和输出流.按传输单位分为字节流和字符流。按形态分为原始流及缓冲流。 IO流的本质是数据传输,并且流是单向的。 获取文件的几种方式 # @Test public void getFile(){ // 1,直接获取项目路径下的文件 File file = new File("pom.xml"); // 2,获取resources里面的文件 File file1 = new File("src/main/resources/log4j.properties"); // 3,类加载器加载文件方式1, …

2022年10月14日 14:22:59

LOCK

comming soon… redis_lock # zookeeper_lock #

2022年10月14日 14:22:59

DSTB

hello dstb

2022年10月14日 14:22:59

QUARTZ

comming soon… 1 # 2 #

2022年10月14日 14:22:59

SCHEDULE

hello schedule

2022年10月14日 14:22:59

XXL-JOB

comming soon… 1 # 2 # 3 #

2022年10月14日 14:22:59

TRANSCATION

2PC(两阶段提交方案/XA方案) # TCC(Try Confirm Cancel) # 本地消息表 # 可靠消息最终一致性方案 # 最大努力通知方案 # Reference # 这六种目前最常见分布式事务解决方案 2PC实现 Springboot+atomikos+jta实现分布式事务统一管理

2022年10月14日 14:22:59

ES

comming soon…

2022年10月14日 14:22:59

NETTY

Netty 是什么 # Netty 是一个 基于 NIO的client-server(客户端服务器)框架,使用它可以快速简单地开发网络应用程序。 它极大地简化并优化了 TCP 和 UDP套接字服务器等网络编程,并且性能以及安全性等很多方面甚至都要更好。 支持多种协议 如 FTP,SMTP,HTTP 以及各种二进制和基于文本的传统协议。 优点 # placeholder 统一的 API,支持多种传输类型,阻塞和非阻塞的。 简单而强大的线程模型。 自带编解码器解决 TCP 粘包/拆包问题。 自带各种协议栈。 真正的无连接数据包套接字支持。 比直接使用 Java 核心 API 有更高的吞吐量、更低 …

2022年10月14日 14:22:59

SPRINGBOOT

启动流程 # 流程图 # 伪代码 # main方法启动: SpringApplication.run(SpringbootApplication.class, args); new SpringApplication(sources).run(); SpringApplication#init构造器中的初始化过程 private void initialize(Object[] sources) { if (sources != null && sources.length > 0) { this.sources.addAll(Arrays.asList(sources)); } …

2022年10月14日 14:22:59

SPRINGCLOUD

comming soon…

2022年10月14日 14:22:59

SPRING-BAK

spring 是什么 # Spring是一个轻量级的IoC和AOP容器框架。是为Java应用程序提供基础性服务的一套框架,目的是用于简化企业应用程序的开发,它使得开发者只需要关心业务需求。 spring 优点 # 低入侵,减少代码耦合,支持一些通用任务(鉴权,日志,事务等)的集中管理,对其他一些框架提供集成支持 spring IOC 理解 # IOC IOC(Inversion of control. 控制反转),将bean对象的控制权交由spring去管理。 其中包括bean对象的创建与销毁,bean对象之间的依赖关系等。简单来讲,就是对象不用我们去new了,而是框架帮我们使用反射的方式去 …

2022年10月14日 14:22:59

TOMCAT-CORE

Intro(TOMCAT-CORE) # tomcat.version = 8.5.35 offical git repo | tag = 3.5.35 learning git repo tomcat-8.5-doc download 8.5.35 概念解释 # 整体架构 # Connector(【coyote】处理socket连接,负责网络字节流) Container(【Catalina】加载servlet处理具体请求) …

2022年08月19日 16:45:14

MAVEN

MAVEN分享 # 今天这次分享的主要就是maven构建工具使用的一些经验, 和大家起分享,交流一下。也是为了日后能够更加灵活的使用。内容中也包括我原来对maven存在的误解和疑问的一些答疑。以交流学习,整理归纳为主。 Tips # 运行mvn compile 会执行 clean 吗? 运行 package 会执行 compile吗? optional,provided 区别? 既然maven有自带的依赖仲裁机制,为什么还会出现依赖冲突? mvn 依赖可以定义的位置及加载顺序,远程仓库定义的位置及加载顺序。mirrorOf实际意义? 介绍(一笔带过) # maven 是继 ant 之 …

2022年08月08日 14:57:43

NGINX

简介 # 1.介绍 # Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务,支持FastCGI,SSL,Virtual Host,URL Rewrite,Gzip等功能。 2.功能 # 反向代理 负载均衡 静态服务器 邮箱服务器 3.负载均衡方式 # name explain feature 轮询 默认方式 weight 权重方式 根据权重分发请求,权重大的分配到请求的概率大 ip_hash ip 分配 根据客户端请求的IP地址计算hash值, 根据hash值来分发请求, 同一个IP发起的请求, 会发转发到同一个服务器 …

2022年08月06日 01:25:28

EXCEPTION

java 中异常返回时机 # example # 1 // finally语句在return语句执行之后return返回之前执行的 public int exp1(){ int b = 20; try { System.out.println("try block"); return b += 80; } catch (Exception e) { System.out.println("catch block"); } finally { System.out.println("finally block"); if (b > 25) { System.out.println("b>25, …

2022年08月04日 12:29:15

DOCKER

基本命令 # BASE # 提交镜像 docker commit -a "xhsgg12302@gmail.com" -m "with requirements.txt" 44f357ee68bc eli/anaconda3:v1.0 标签镜像 docker tag bad7184c3c60 gitlab.pixdaddy.com:5050/library/eclipse-temurin:17.0.2_8-jre-3.8.18-python-alpine3.17-with-pip-deps 加载镜像 docker build -t me/venvs:v1.0 -f DK-venv . …

2022年08月02日 16:24:59

ZK

ZK 简介 # zab协议 description ZK 实现原理 # ZK 常用命令 # command function help 显示所有命令操作 ls path [watch] 使用ls 命令来查看当前znode中所包含的内容 ls2 path [watch] 查看当前节点数据,并能看到更新次数等数据 create 普通创建 -s 含有序列,-e 临时(重启或者超时消失) get path [watch] 获得节点值 set 设置节点具体值 stat 查看节点状态 delete 删除节点 rmr 递归删除节点 ZK stat 结构 # show explain cZxid = …

2022年06月08日 23:21:08

REDIS

NoSql数据库的四大分类 # 表格视图 # 分类 Example举例 典型应用场景 数据模型 优点 缺点 键值(key-value) Tokyo,Cabinet/Tyrant,Redis,Voldemort,Oracle BDB 内容缓存,主要用于处理大量数据的高访问负载,也用于一些日志系统等 key指向value的键值对,通常用hashtable来实现 查找速度快 数据无结构化,通常只被当作字符串或者二进制数据 列存储数据库 Cassandra,HBase,Riak 分布式的文件系统 以列簇式存储,将同一列数据存放在一起 查找速度快,可扩展性强,更容易进行分布式扩展 功能相对局限 文档型 …

2022年05月24日 02:25:05

REVIEW

TODO # - [x] 垃圾回收器和算法 - [ ] spring,springmvc,springboot,springcloud - [x] 熔断,限流 - [ ] netty - [ ] 自己代码的一些实现【activemq】【线程网络监听】【nettydemo】 - [ ] beanfactory ,factorybean - [ ] spring bean 初始化,声明周期 - [ ] springmvc 流程 - [ ] mysql 索引【btree b+ tree 】 ,,索引存储结构 - [ ] redis 存储结构 - [ ] 线程池拒绝策略 - [ ] …

2022年05月23日 16:38:46


comments powered by Disqus