博客园 - schaepher
uuid:24b78886-0ed1-41c2-8670-e3f31dcf42c4;id=63405
2023-12-07T16:13:39Z
schaepher
https://www.cnblogs.com/schaepher/
feed.cnblogs.com
https://www.cnblogs.com/schaepher/p/16424963.html
在个人微信上与自搭服务端交互 - schaepher
背景 我有时候想捣鼓个工具用。起初是为了让我及时掌握一些信息,想做一个消息推送功能。但是由于功能简单,不想单独开发个手机 APP。于是就想着能否直接把消息推送到个人微信上。 面临的问题 以前有 web 版的个人微信,有些人就基于 web 版的个人微信接口做了一个开发套件。但是现在 web 版只有少数
2022-06-29T13:17:00Z
2022-06-29T13:17:00Z
schaepher
https://www.cnblogs.com/schaepher/
【摘要】背景 我有时候想捣鼓个工具用。起初是为了让我及时掌握一些信息,想做一个消息推送功能。但是由于功能简单,不想单独开发个手机 APP。于是就想着能否直接把消息推送到个人微信上。 面临的问题 以前有 web 版的个人微信,有些人就基于 web 版的个人微信接口做了一个开发套件。但是现在 web 版只有少数 <a href="https://www.cnblogs.com/schaepher/p/16424963.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/schaepher/p/16423891.html
【数据结构】Map (映射)的各种实现 - schaepher
In computer science, an associative array, map, symbol table, or dictionary is an abstract data type composed of a collection of (key, value) pairs, s
2022-06-29T08:13:00Z
2022-06-29T08:13:00Z
schaepher
https://www.cnblogs.com/schaepher/
【摘要】In computer science, an associative array, map, symbol table, or dictionary is an abstract data type composed of a collection of (key, value) pairs, s <a href="https://www.cnblogs.com/schaepher/p/16423891.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/schaepher/p/16405394.html
工作的第二和第三年(201807~202005) - schaepher
原先计划按毕业日期算起,每个周年写一篇生活篇和工作篇,但后来工作篇由于各种原因没有按时写完发布,只有生活篇一直保持着。 工作部分的第一篇是 2018 年 7 月写的《入职一年啦》。 本篇第二篇,是在 2020 年 7 月写的,内容是 2018 年下半年到 2020 上半年的部分。由于当时没写完整,就
2022-06-23T09:36:00Z
2022-06-23T09:36:00Z
schaepher
https://www.cnblogs.com/schaepher/
【摘要】原先计划按毕业日期算起,每个周年写一篇生活篇和工作篇,但后来工作篇由于各种原因没有按时写完发布,只有生活篇一直保持着。 工作部分的第一篇是 2018 年 7 月写的《入职一年啦》。 本篇第二篇,是在 2020 年 7 月写的,内容是 2018 年下半年到 2020 上半年的部分。由于当时没写完整,就 <a href="https://www.cnblogs.com/schaepher/p/16405394.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/schaepher/p/16393891.html
红黑树代码实现及注释 - schaepher
代码参考了以下两个链接: https://www.programiz.com/dsa/deletion-from-a-red-black-tree https://github.com/openjdk/jdk/blob/master/src/java.base/share/classes/java/
2022-06-20T09:02:00Z
2022-06-20T09:02:00Z
schaepher
https://www.cnblogs.com/schaepher/
【摘要】代码参考了以下两个链接: https://www.programiz.com/dsa/deletion-from-a-red-black-tree https://github.com/openjdk/jdk/blob/master/src/java.base/share/classes/java/ <a href="https://www.cnblogs.com/schaepher/p/16393891.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/schaepher/p/16359268.html
2-3 树——学习红黑树的捷径 - schaepher
如果从先易后难的顺序介绍各种树,那么红黑树必然放在 AVL 树后面。但在红黑树之前,还有一种名为 2-3 树的平衡树(Balanced-Tree,B-树)。2-3 树理解起来比红黑树容易很多,并且在理解它的基础上增加一个变更,就成了红黑树(尽管不是通常使用的那种红黑树)。因此学习红黑树的时候,最好先
2022-06-14T04:17:00Z
2022-06-14T04:17:00Z
schaepher
https://www.cnblogs.com/schaepher/
【摘要】如果从先易后难的顺序介绍各种树,那么红黑树必然放在 AVL 树后面。但在红黑树之前,还有一种名为 2-3 树的平衡树(Balanced-Tree,B-树)。2-3 树理解起来比红黑树容易很多,并且在理解它的基础上增加一个变更,就成了红黑树(尽管不是通常使用的那种红黑树)。因此学习红黑树的时候,最好先 <a href="https://www.cnblogs.com/schaepher/p/16359268.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/schaepher/p/16335440.html
平衡二叉树的 AVL 实现 - schaepher
上一篇【因为一句话,秒懂二叉树旋转】把树旋转了解清楚,是为这一篇平衡二叉树准备的。 平衡二叉树,就是在二叉树的基础上加上一个条件:对于任意节点,左子树和右子树的树高之差不超过 1。 从实现的角度看,就是在已具备旋转功能的 Node 上增加一个 height 字段,并且在原先的代码上增加对 heigh
2022-06-01T11:45:00Z
2022-06-01T11:45:00Z
schaepher
https://www.cnblogs.com/schaepher/
【摘要】上一篇【因为一句话,秒懂二叉树旋转】把树旋转了解清楚,是为这一篇平衡二叉树准备的。 平衡二叉树,就是在二叉树的基础上加上一个条件:对于任意节点,左子树和右子树的树高之差不超过 1。 从实现的角度看,就是在已具备旋转功能的 Node 上增加一个 height 字段,并且在原先的代码上增加对 heigh <a href="https://www.cnblogs.com/schaepher/p/16335440.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/schaepher/p/16284830.html
【硬件】机械键盘转蓝牙键盘 - schaepher
背景 我的常用电脑是 surface go 1,基本上随身携带。问题是每次回到房间,都需要通过扩展坞将平板和显示器以及机械键盘连接起来。我嫌这些线太多,就想着能否在不改动机械键盘本身的条件下,将其改成蓝牙键盘。于是就有了 2021 年的 6 篇文章。但是我在尝试最后一步的时候,发现买的两块 ESP3
2022-05-18T07:23:00Z
2022-05-18T07:23:00Z
schaepher
https://www.cnblogs.com/schaepher/
【摘要】背景 我的常用电脑是 surface go 1,基本上随身携带。问题是每次回到房间,都需要通过扩展坞将平板和显示器以及机械键盘连接起来。我嫌这些线太多,就想着能否在不改动机械键盘本身的条件下,将其改成蓝牙键盘。于是就有了 2021 年的 6 篇文章。但是我在尝试最后一步的时候,发现买的两块 ESP3 <a href="https://www.cnblogs.com/schaepher/p/16284830.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/schaepher/p/16284662.html
因为一句话,秒懂二叉树旋转 - schaepher
事情要从某天晚上买夜宵说起。买了香肠拿着吃,想着多年来一直没搞懂的树旋转是不是应该看看,就点进某百科。 树旋转是在二叉树中的一种子树调整操作, 每一次旋转并不影响对该二叉树进行中序遍历的结果。 中序遍历!灵光一闪,好像很多东西都联系起来了! 为什么是中序遍历 中序遍历是指按【左节点->父节点->右节
2022-05-18T06:49:00Z
2022-05-18T06:49:00Z
schaepher
https://www.cnblogs.com/schaepher/
【摘要】事情要从某天晚上买夜宵说起。买了香肠拿着吃,想着多年来一直没搞懂的树旋转是不是应该看看,就点进某百科。 树旋转是在二叉树中的一种子树调整操作, 每一次旋转并不影响对该二叉树进行中序遍历的结果。 中序遍历!灵光一闪,好像很多东西都联系起来了! 为什么是中序遍历 中序遍历是指按【左节点->父节点->右节 <a href="https://www.cnblogs.com/schaepher/p/16284662.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/schaepher/p/16254840.html
手动验证 TLS 证书 - schaepher
证书结构 我们现在使用的 TLS 证书的标准是 X.509,版本号为 V3。版本号可从证书的 Version 字段看到。 根据 RFC 3280 定义的证书结构,证书由三个部分组成: 证书主体(TBSCertificate,To Be Signed Certificate,待签名证书) 签名算法 签
2022-05-10T10:51:00Z
2022-05-10T10:51:00Z
schaepher
https://www.cnblogs.com/schaepher/
【摘要】证书结构 我们现在使用的 TLS 证书的标准是 X.509,版本号为 V3。版本号可从证书的 Version 字段看到。 根据 RFC 3280 定义的证书结构,证书由三个部分组成: 证书主体(TBSCertificate,To Be Signed Certificate,待签名证书) 签名算法 签 <a href="https://www.cnblogs.com/schaepher/p/16254840.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/schaepher/p/15085720.html
InfluxDB 存储结构、读、写 - schaepher
这篇最早是 2021 年 3 月写的,最近又拿出来复习一遍,也补充了一些新的内容。上一篇博客发表过后已经 3 个月没有发表新的博客,就把这篇拿出来了。内容没有完全梳理完毕,算是笔记。先发出来,后续再逐渐完善。 InfluxDB 是开源的时序数据库,采用列式存储。原先有开源集群版本,但在 0.11 版
2021-07-31T15:50:00Z
2021-07-31T15:50:00Z
schaepher
https://www.cnblogs.com/schaepher/
【摘要】这篇最早是 2021 年 3 月写的,最近又拿出来复习一遍,也补充了一些新的内容。上一篇博客发表过后已经 3 个月没有发表新的博客,就把这篇拿出来了。内容没有完全梳理完毕,算是笔记。先发出来,后续再逐渐完善。 InfluxDB 是开源的时序数据库,采用列式存储。原先有开源集群版本,但在 0.11 版 <a href="https://www.cnblogs.com/schaepher/p/15085720.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/schaepher/p/14698272.html
工程思想方法及其在软件工程分支的教学上的体现 - schaepher
前几天写了一篇跟软工课程相关的博客《软件工程与“足够好”》[1],有一位能够促成具有建设性对话的同学问了我一个问题: 能展开讲讲你说的工程思想和方法么,以及从软工的哪些环节可以获得? 这位同学问了一个很好的问题。好在哪里呢?好在他试图详细地了解和分析一个抽象的表面上看起来高大上而且美好的概念,从而提
2021-04-24T14:17:00Z
2021-04-24T14:17:00Z
schaepher
https://www.cnblogs.com/schaepher/
【摘要】前几天写了一篇跟软工课程相关的博客《软件工程与“足够好”》[1],有一位能够促成具有建设性对话的同学问了我一个问题: 能展开讲讲你说的工程思想和方法么,以及从软工的哪些环节可以获得? 这位同学问了一个很好的问题。好在哪里呢?好在他试图详细地了解和分析一个抽象的表面上看起来高大上而且美好的概念,从而提 <a href="https://www.cnblogs.com/schaepher/p/14698272.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/schaepher/p/14687730.html
软件工程与“足够好” - schaepher
今天看了北航软工课程学生写的一篇博客[1],刚好可以借此机会把我这几年关于软工的思考整理出来。 我在 2016 年做过福大OO课的助教,以及在 2017 年做过集大的软工助教。当时我有很多地方都没有做好,并且这几年没怎么关注软工课程,与教学一线脱离较久,说的东西不一定对,大家随意看看就好。 为了确保
2021-04-21T19:58:00Z
2021-04-21T19:58:00Z
schaepher
https://www.cnblogs.com/schaepher/
【摘要】今天看了北航软工课程学生写的一篇博客[1],刚好可以借此机会把我这几年关于软工的思考整理出来。 我在 2016 年做过福大OO课的助教,以及在 2017 年做过集大的软工助教。当时我有很多地方都没有做好,并且这几年没怎么关注软工课程,与教学一线脱离较久,说的东西不一定对,大家随意看看就好。 为了确保 <a href="https://www.cnblogs.com/schaepher/p/14687730.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/schaepher/p/14461553.html
终端发展过程及 tty、pty、pts 的区别 - schaepher
终端是一种输入输出设备。把终端连接到计算机上,就可以跟计算机进行交互。当今个人电脑最常用的两种终端设备分别是作为输入终端的键盘以及作为输出终端的显示器。 各种概念的关系 在 Windows 上的 CMD、 Powershell、 XShell 或者 PuTTY 被称为终端模拟器(Terminal E
2021-02-28T18:39:00Z
2021-02-28T18:39:00Z
schaepher
https://www.cnblogs.com/schaepher/
【摘要】终端是一种输入输出设备。把终端连接到计算机上,就可以跟计算机进行交互。当今个人电脑最常用的两种终端设备分别是作为输入终端的键盘以及作为输出终端的显示器。 各种概念的关系 在 Windows 上的 CMD、 Powershell、 XShell 或者 PuTTY 被称为终端模拟器(Terminal E <a href="https://www.cnblogs.com/schaepher/p/14461553.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/schaepher/p/14342808.html
时间类型和时间戳 - schaepher
Unix 时间戳以及日期表示方法 Unix 时间戳表示的是从世界标准时间(UTC,Coordinated Universal Time)的 1970 年 1 月 1 日 0 时 0 分 0 秒开始的偏移量。 全球共有 24 个时区,分为东西各 12 时区。所有地区在使用同一个时间戳的基础上,根据当地
2021-01-28T18:21:00Z
2021-01-28T18:21:00Z
schaepher
https://www.cnblogs.com/schaepher/
【摘要】Unix 时间戳以及日期表示方法 Unix 时间戳表示的是从世界标准时间(UTC,Coordinated Universal Time)的 1970 年 1 月 1 日 0 时 0 分 0 秒开始的偏移量。 全球共有 24 个时区,分为东西各 12 时区。所有地区在使用同一个时间戳的基础上,根据当地 <a href="https://www.cnblogs.com/schaepher/p/14342808.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/schaepher/p/12846028.html
后端的优化 - schaepher
后端优化分为四个方向 组件配置调优,偏运维 架构调优,偏架构 代码层面的调优,偏开发 CDN 加速 配置调优 以 Nginx、PHP、MySQL 为例。 LNMP中web高并发优化配置以及配置详解 https://phpartisan.cn/news/55.html Nginx 从简单粗暴的角度,就
2020-05-07T14:06:00Z
2020-05-07T14:06:00Z
schaepher
https://www.cnblogs.com/schaepher/
【摘要】后端优化分为四个方向 组件配置调优,偏运维 架构调优,偏架构 代码层面的调优,偏开发 CDN 加速 配置调优 以 Nginx、PHP、MySQL 为例。 LNMP中web高并发优化配置以及配置详解 https://phpartisan.cn/news/55.html Nginx 从简单粗暴的角度,就 <a href="https://www.cnblogs.com/schaepher/p/12846028.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/schaepher/p/12842624.html
高可用的实现(Keepalived + 虚 IP) - schaepher
为了避免服务单点,也为了负载均衡,我们会加一层 Nginx 层。这个 Nginx 层要有多于一台机器,不然它自身也成为一个单点。 最初加 Nginx 层会变成这样: schaepher.com + | + + | v + + + + + | | | | | Nginx | | Nginx | | |
2020-05-07T05:59:00Z
2020-05-07T05:59:00Z
schaepher
https://www.cnblogs.com/schaepher/
【摘要】为了避免服务单点,也为了负载均衡,我们会加一层 Nginx 层。这个 Nginx 层要有多于一台机器,不然它自身也成为一个单点。 最初加 Nginx 层会变成这样: schaepher.com + | + + | v + + + + + | | | | | Nginx | | Nginx | | | <a href="https://www.cnblogs.com/schaepher/p/12842624.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/schaepher/p/12831623.html
【RFC】HTTP/1.1 系列(7230 - 7235) - schaepher
未完全完成,先发出来再说。 HTTP(Hypertext Transfer Protocol,超文本传输协议)是应用层的无状态的请求和响应协议。它使得基于网络的超文本信息系统彼此可以灵活地进行交互。它包含了可拓展的语义(extensible semantics)和自描述的有效报文载荷(self-de
2020-05-05T09:50:00Z
2020-05-05T09:50:00Z
schaepher
https://www.cnblogs.com/schaepher/
【摘要】未完全完成,先发出来再说。 HTTP(Hypertext Transfer Protocol,超文本传输协议)是应用层的无状态的请求和响应协议。它使得基于网络的超文本信息系统彼此可以灵活地进行交互。它包含了可拓展的语义(extensible semantics)和自描述的有效报文载荷(self-de <a href="https://www.cnblogs.com/schaepher/p/12831623.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/schaepher/p/12827634.html
HTTP 两次 DELETE 同一个资源应该返回什么 - schaepher
在实践 RESTful API 设计的时候,会碰到很多需要选择的地方。而这些在 RFC 7230 - 7235 里面没有说明。例如这次要说的 DELETE 方法。 根据 RFC 7231 的说法, DELETE 是幂等的。 幂等(idempotent)是什么?在 RFC 7231 定义幂等方法的时候
2020-05-04T10:35:00Z
2020-05-04T10:35:00Z
schaepher
https://www.cnblogs.com/schaepher/
【摘要】在实践 RESTful API 设计的时候,会碰到很多需要选择的地方。而这些在 RFC 7230 - 7235 里面没有说明。例如这次要说的 DELETE 方法。 根据 RFC 7231 的说法, DELETE 是幂等的。 幂等(idempotent)是什么?在 RFC 7231 定义幂等方法的时候 <a href="https://www.cnblogs.com/schaepher/p/12827634.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/schaepher/p/12798577.html
事务隔离级别 - schaepher
原文: 事务隔离级别 https://schaepher.github.io/2020/04/24/acid-isolation/ 事务隔离级别有四种。它们的区别在于一个修改数据的事务在提交前和提交后,另一个进行中的事务读取到的数据是修改前还是修改后的数据。 READ-UNCOMMITED = 读-
2020-04-28T15:29:00Z
2020-04-28T15:29:00Z
schaepher
https://www.cnblogs.com/schaepher/
【摘要】原文: 事务隔离级别 https://schaepher.github.io/2020/04/24/acid-isolation/ 事务隔离级别有四种。它们的区别在于一个修改数据的事务在提交前和提交后,另一个进行中的事务读取到的数据是修改前还是修改后的数据。 READ-UNCOMMITED = 读- <a href="https://www.cnblogs.com/schaepher/p/12798577.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/schaepher/p/12798203.html
MySQL 自增主键 - schaepher
以下仅考虑 InnoDB 存储引擎。 自增主键有两个性质需要考虑: 单调性 每次插入一条数据,其 ID 都是比上一条插入的数据的 ID 大,就算上一条数据被删除。 连续性 插入成功时,其数据的 ID 和前一次插入成功时数据的 ID 相邻。 自增主键的单调性 为何会有单调性的问题? 这主要跟自增主键最
2020-04-28T15:22:00Z
2020-04-28T15:22:00Z
schaepher
https://www.cnblogs.com/schaepher/
【摘要】以下仅考虑 InnoDB 存储引擎。 自增主键有两个性质需要考虑: 单调性 每次插入一条数据,其 ID 都是比上一条插入的数据的 ID 大,就算上一条数据被删除。 连续性 插入成功时,其数据的 ID 和前一次插入成功时数据的 ID 相邻。 自增主键的单调性 为何会有单调性的问题? 这主要跟自增主键最 <a href="https://www.cnblogs.com/schaepher/p/12798203.html" target="_blank">阅读全文</a>