Today-I-Learned
Today-I-Learned copied to clipboard
博观而约取,厚积而薄发。
今天我学了什么 (Today I Learned)
博观而约取,厚积而薄发。
ADoyle 的碎片化知识笔记。
内容约定
所有文件一旦创建就不会改变路径,以保证永久链接。 文章内容可能随时会改动。
部分外部链接会引用 archive.today 链接,以保证永久链接。 由于 archive.today 可能被国内屏蔽,因此建议挂代理浏览。
部分外部链接使用原链接的考虑因素是,
- 原文内容会更新,比如 wiki 类型的文章。
- 原链接很稳定,即使变动也会有重定向到最新的内容链接。
反馈问题或建议
本项目不接受 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 转义
⬆ 返回目录