Today-I-Learned icon indicating copy to clipboard operation
Today-I-Learned copied to clipboard

博观而约取,厚积而薄发。

今天我学了什么 (Today I Learned)

博观而约取,厚积而薄发。

ADoyle 的碎片化知识笔记。

内容约定

所有文件一旦创建就不会改变路径,以保证永久链接。 文章内容可能随时会改动。

部分外部链接会引用 archive.today 链接,以保证永久链接。 由于 archive.today 可能被国内屏蔽,因此建议挂代理浏览。

部分外部链接使用原链接的考虑因素是,

  1. 原文内容会更新,比如 wiki 类型的文章。
  2. 原链接很稳定,即使变动也会有重定向到最新的内容链接。

反馈问题或建议

本项目不接受 Pull Request,如果你有什么好的想法,或者改进的建议,请使用 Issue 与我探讨。

建议 Watch 或 Star 本项目。但不要 Fork,这没有意义。

版权声明

Copyright (c) 2016-2022 ADoyle ([email protected]). The project is licensed under the BSD 3-clause License.

See the LICENSE file for the specific language governing permissions and limitations under the License.

TOC

目录
  • 算法
  • Android
  • 计算机
  • 设计
  • Docker
  • Elixir
  • 函数式编程
  • 前端
    • React
  • Git
  • Go
  • 硬件
  • Javascript
  • K8S
  • 语言设计
  • Linux
  • Language Server Protocol (LSP)
  • Mac
  • 数学
  • 网络
  • Nodejs
  • 运维
  • 其他
  • 哲学
  • 箴言录
  • Python
  • Racket
  • Redis
  • Ruby
  • 安全攻防
  • Startup
  • 存储
    • Etcd
    • Mongo
    • Mysql
  • 思考
  • Typescript
  • Vim
  • 虚拟机
  • Web

算法

  • Raft 算法

Android

  • Android Root
  • Termux

计算机

记录与计算机硬件相关的知识。

  • RDMA
  • 单指令流多数据流 (SIMD)
  • TLB
  • CPU 伪共享 (CPU Cache Line False Sharing)
  • CPU 缓存
  • CPU
  • 风扇
  • 内存屏障
  • 我的硬盘分区规划
  • 随机存取存储器 (RAM)

设计

记录平面设计的相关知识

  • 8 点栅格
  • 色彩空间
  • UI 的加载状态
  • OpenType
  • 使用 sketchtool 操作 sketch 文档:diff 以及其他功能
  • Sketch 的文本样式与颜色
  • 排版

Docker

  • Alpine 镜像
  • ContainerD OverlayFS
  • Containerd
  • 容器里的 Core Dump
  • device or resource busy
  • docker-compose 启动容器顺序
  • Docker 容器与 Cgroup
  • 进入 docker for mac 的虚拟机
  • 学习 Docker
  • Docker OverlayFS
  • Docker Run With Namespace
  • Docker Tag/Id/Digest
  • docker 小技巧
  • Dockerfile
  • 查找 Overlay ID 与哪个容器相关
  • 修正 alpine 镜像的时区问题
  • 修正 Docker for mac 时区问题
  • Docker for Mac 中磁盘文件占用过大
  • nerdctl 容器
  • nerdctl 网络
  • nerdctl
  • ping: Operation not permitted
  • Podman
  • 在后台运行 docker 容器且不会自动退出
  • docker security_opt
  • Docker 安全
  • volume

Elixir

  • tuple 与 list 的选择
  • 尾递归优化

函数式编程

  • Cache-Control
  • chrome 开发者工具观察响应 Failed to load response data
  • 重定向 window.location 是异步的
  • 什么是 Monad

前端

  • SSR (Server Side Render)
  • 关于 webpack 2
  • <script async><script defer>
  • 圆角的玩法
  • Safari 浏览器的类继承 Bug
  • 代码分离
  • 颜色对比度
  • 编译前端 JS 库
  • contentEditable
  • CORS
  • css-modules vs css-in-js
  • CSS Selector list invalidation
  • 开发一个油猴 (Tampermonkey) 脚本
  • 前端类库打包的注意点
  • XMLHttpRequest 的继承者:Fetch
  • 浮动侧边栏
  • Functional CSS
  • 307 Internal Redirect 与浏览器的 HSTS 功能
  • HTTP 缓存机制
  • Input Method Editor (IME)
  • 学习 Chrome DevTools
  • 前端工程的模块控制反转
  • redux 入门
  • Rollup Dynamic Import
  • script 和 link 标签的事件属性
  • 弹性滚动
  • Mac 浏览器中显示滚动条
  • 状态机与状态图
  • 媒体查询的断点设置
  • 使用 browserify 和 uglifyjs
  • wasm
  • Webkit 浏览器渲染效率
  • webpack 配置为数组
  • webpack 配置
  • Webpack Dynamic Import
  • 奇怪的 parse html
  • 富文本编辑器选型
  • z-index

React

  • 使用 jquery 改变 React 的 input DOM
  • 组件生命周期
  • Compound Components
  • 不要在 render 里直接定义 ref callback
  • ref callback 何时触发?

Git

  • 用 shell 脚本查询 git commit hash
  • Git Diff
  • Git 学习资料
  • git ssh 代理
  • git 小技巧
  • git credentials
  • gitignore 与 gitkeep
  • 忽略 Git submodule
  • --ours vs --theirs

Go

  • go build
  • go doc
  • go generate
  • Go Module
  • Golang 学习
  • Gorutine
  • 在 MacOS 上使用 gvm install
  • interface 与 nil

硬件

  • 固件 (Firmware)
  • 网件 R6900 刷梅林固件
  • USB

Javascript

  • babel 小技巧
  • JavaScript 中的相等性判断
  • 为什么 eval('{}') 返回 undefined ?
  • JS 的 fiber 技术
  • lodash 陷阱
  • Javascript Proxy
  • JS 保留字
  • 尾递归优化
  • Promise 的坑
  • 使用 Promise 的技巧
  • JS 编程技巧

K8S

  • Cilium
  • 调试 CrashLoopBackOff 状态的 Pod
  • Helm
  • Pod containerStatuses 的镜像版本与 Pod 指定版本不同
  • 容器里装 K3S
  • K8S CSI 开发
  • K8S Dashboard
  • K8S 部署踩坑记
  • K8S 垃圾回收 (GC)
  • K8S 学习
  • K8S 资源规划
  • K8S Resource Spec
  • kubectl 学习
  • Kubespray
  • kustomize
  • 重启 Pod 中的容器
  • configmap 和 secret 的滚动更新
  • 多个 Pod 不重复部署在同一个节点上

语言设计

记录编程语言的内部设计与思想

  • Actor 并发模型
  • 协程 (Coroutine)
  • CSP 并发模型

Linux

记录 Linux 系统设计、系统命令,UNIX/Linux 命令和软件等相关知识

  • XDG 基础目录标准
  • ab 与 wrk 比较
  • ABI
  • 用户线程,内核线程,CPU 超线程技术
  • Alfred 找不到文件
  • anon_inode
  • ansible 部署到 centos7 时,不能找到 service
  • apt
  • bash error exit
  • bash history
  • bash 开启 vi 模式
  • 学习 Bash
  • Bash 的坑
  • Bash 小技巧
  • BIOS
  • Block Layer
  • BootLoader
  • BPF 与 XDP
  • btrfs
  • 内存的 buffer 和 cache
  • 在容器中构建 Package
  • CFS (Completely Fair Scheduler)
  • 更改默认 shell
  • clamav
  • 命令格式标准
  • linux 命令被 hash 缓存
  • compgen
  • 连接 tty
  • conntrack
  • 上下文切换
  • CPU
  • 判断文件编码
  • Device Mapper
  • diff 与 patch
  • shutdown, poweroff, halt 的不同
  • 硬盘分区
  • dnsmasq
  • du
  • eBPF 与 XDP
  • 编辑二进制文件
  • ELF 文件
  • 终端开启真彩色 (true color)
  • 用环境变量替换文本内容 envsubst
  • ExtFS (Extended File System)
  • 快速删除文件
  • 快速创建大文件
  • 快速删文件
  • 文件描述符,open file table 与 inode
  • file 命令
  • CentOS 与 Debian 文件上的差异
  • Linux 文件系统
  • 文件路径
  • find -print0 的坑
  • ftrace
  • GPG 与 Keybase
  • gpg 与 gpg-agent
  • grep
  • GNU GRUB
  • hash 命令
  • Here Strings 与 Here Documents
  • 隐藏进程
  • Hostname in Linux
  • 查看进程的环境变量
  • 安装 Linux 系统
  • 网络接口名称的 @
  • 中断
  • 调用原生 shell 命令
  • IO、select、epoll
  • iproute2 与 ifconfig 命令
  • iptables 与 nftables
  • Linux 内核模块
  • kswapd0
  • Linux 日志文件
  • lsof 与 fuser
  • LVM (Logical Volume Manager)
  • 制作 deb 包
  • mdadm
  • 命令行中的乱码
  • 创建临时文件的命令
  • mount
  • Netfilter
  • netns
  • netstat 与 ss
  • 网络接口配置 (ifcfg)
  • 硬盘空间占满问题
  • nsenter
  • NTP 时间同步
  • OverlayFS
  • PAM
  • perf 命令
  • 不需要 root 权限执行 ping
  • 管道重定向
  • /proc/interrupts
  • 进程内存
  • 慎用双引号与单引号
  • 命令行中提示用户 Yes/No
  • rsync 与 scp
  • runit
  • SATA 热拔插
  • 程序的退出码 (Exit Code)
  • 在 alpine 中找不到 setup-apkcache 等 setup-* 命令
  • shebang
  • 共享内存
  • 拆分与合并文件
  • SSH
  • sshd -R 参数
  • strace
  • sudo and su
  • syslinux
  • Linux 系统调用
  • systemd-resolved
  • systemd
  • tailf
  • tar
  • 基于内存的虚拟文件系统 tmpfs/ramfs/RamDisk
  • Linux Thermal 框架
  • 线程与进程
  • time 命令
  • UFW
  • UNIX Domain Socket
  • unlink 是删除任何文件
  • /usr/bin/env
  • 虚拟文件系统 (VFS, Virtual File System)
  • 虚拟内存
  • 奇怪的 ESC
  • Welcome Message Banner
  • 监听 0.0.0.0 与 127.0.0.1 的区别
  • 为什么创建 Daemon 进程要 Fork 两次?
  • ZFS
  • Zsh 的坑

Language Server Protocol (LSP)

  • https://microsoft.github.io/language-server-protocol/

  • https://langserver.org/

  • YAML Language Server

Mac

  • Mac 的 DNS 问题
  • 多网卡在 Mac 系统的问题
  • Mac 下按住键盘不能输出重复的字符
  • Homebrew
  • Mac 快捷键
  • 用命令触发系统通知
  • Mac 自启动配置 plist
  • Finder 显示隐藏文件
  • Tab 键不能切换弹出框的选中焦点
  • xcode 重新安装

数学

数学,不仅仅是算法

  • 豪斯多夫维数
  • 空间填充曲线 (Space-Filling Curve)

网络

记录网络相关知识

  • ARP
  • 组播地址
  • 网桥 (Bridge)
  • DHCP
  • DNS SRV
  • DoH 与 DoT
  • 网关 gateway
  • HTTP Request/Response 网络包
  • NAT
  • pfctl
  • Samba
  • TCP Buffer 大小
  • vxlan

Nodejs

  • MaxListenersExceededWarning
  • 命令行的工具和类库
  • 不要对函数参数重新赋值
  • EJS 渲染引擎的空白问题
  • Error.captureStackTrace 的 stack 缺少 message 问题
  • fs 函数抛出的异常没有堆栈信息
  • node 中发 ICMP 包
  • Jest
  • npm publish 不会包含 .gitignore 文件
  • 配置 node 开发环境
  • npm 命令
  • npm run scripts
  • nvm 不是一个可执行文件,而是一个函数
  • npm 发包
  • 调整 rejectUnauthorized 选项来容许 https 证书无效
  • report 文件
  • require 路径名大小写问题
  • 流 (stream)
  • EventEmitter 需要注意的三个地方
  • Warning 缺少堆栈信息
  • winston 日志库
  • Yarn 用法

运维

  • Ansible Role
  • Ansible 技巧
  • Ansible 变量
  • Ansible
  • DNF
  • 以太网
  • IPMI 与 BMC
  • 运维小技巧 - 硬件
  • 运维小技巧 - 网络
  • 运维小技巧
  • RPM 创建仓库
  • RPM 制作和安装离线包
  • YUM

其他

记录各种奇奇怪怪的小知识

  • 0.30000000000000004
  • Today I learned (TIL) 资源列表
  • Alfred Workflow debug 技巧
  • Github Markdown 中的锚点引用
  • 永久链接
  • Chrome 小技巧
  • Mac 文件系统的剪切快捷键
  • YAML 中的 Date 类型陷阱
  • 文件命名,下划线还是中划线?
  • github 中 markdown 折叠文本
  • 从微信公众号提取原图
  • Github Template (模板)
  • gRPC
  • 通过 Hash 密码到 url 来验证密码
  • 如何阅读标准
  • 如何审核代码
  • 如何在 github 项目里搜索代码
  • Hyper.js 中文问题
  • 无法在 Tmux 显示图片
  • Jinja2
  • Language Server Protocol
  • 箴言
  • 元语法 (Metasyntax)
  • 乱码问题
  • 终端邮件客户端 Mutt
  • nextcloud
  • NFS
  • 堆外内存
  • 原码, 反码, 补码
  • 如何打开超大文件
  • Protocol Buffers
  • 正则表达式的小技巧
  • 在中国注册 Google 账号
  • 在 Github Markdown 中如何填写图片的链接
  • Markdown 里写反引号
  • Semver
  • SSL 证书
  • mac 里的 tmux 内无法用 sublime 打开文件
  • vim textwidth=78 的约定
  • KB 与 KiB 的不同
  • UTF-8 vs UTF-16
  • Vagrant DNS
  • vagrant-vbguest
  • 查看 Chrome 通知历史列表
  • Virtualbox VBoxManage
  • 水快速加热
  • 为何 Protobuf 3 移除了 required 和 optional
  • 为什么 Unicode U+F8FF 是苹果 Logo?
  • zookeeper 健康检查

哲学

  • Toulmin Model

箴言录

  • 箴言录 - 人生
  • 箴言录 - 哲学
  • 箴言录 - 编程
  • 箴言录 - 学习

Python

  • python 环境配置
  • pycache
  • Python Dockerfile
  • Python Virtualenv

Racket

  • 学习 Racket

Redis

  • Redis Cluster
  • 拷贝一个 Sorted Set 到新的 key

Ruby

  • 使用 scientist 科学重构代码

安全攻防

  • 不要在生产环境绑定 0.0.0.0
  • Kali Linux
  • Reverse Shell

Startup

  • 商标注册

存储

  • flyway 用法
  • RAID
  • 物理删除与逻辑删除
  • 存储

Etcd

  • etcdctl
  • ETCD 报错 request ignored (cluster ID mismatch)

Mongo

  • MongoDB 的丢数据问题

Mysql

  • 连接 MYSQL 显示中文
  • mysqldump
  • Date/Datetime/Timestamp 比较
  • Transaction 与 autocommit

思考

记录我的碎片式思考

  • CLD 图
  • 项目代码如何组织
  • 如何编程
  • 不完整的函数
  • 提问的智慧
  • 讲故事

Typescript

  • export default 的类型注明
  • Typescript 与 Rollup
  • typescript 的缺点

Vim

  • 学习 Neovim
  • 在 vim 中执行 shell 命令,同时将结果输出到 buffer
  • vim 插件教程
  • 在 vim 中运行终端,以及如何退出终端模式
  • sudo :write
  • VIM filetype
  • vim-go 出现问题
  • 学习 Vim
  • VIM 搜索和替换技巧

虚拟机

  • KVM (Kernel-based Virtual Machine)
  • Libvirt 网络
  • Libvirt
  • virsh shutdown 命令无效
  • virt-install Couldn't find kernel for install tree
  • Virtualbox

Web

记录 Web 服务开发涉及的相关知识。

  • URL QueryString 传数组参数
  • DNS
  • 国际化 SEO
  • 看懂 V8 项目代码
  • socket
  • 下划线在 HTTP Header 里是非法字符串
  • URI 转义

⬆ 返回目录