{"id":13814020,"url":"https://github.com/jiajunhuang/blog","last_synced_at":"2026-01-17T17:26:54.372Z","repository":{"id":20999889,"uuid":"24289510","full_name":"jiajunhuang/blog","owner":"jiajunhuang","description":"Jiajun的编程随想","archived":false,"fork":false,"pushed_at":"2025-10-08T01:47:17.000Z","size":25372,"stargazers_count":593,"open_issues_count":2,"forks_count":65,"subscribers_count":54,"default_branch":"master","last_synced_at":"2025-10-08T03:27:55.636Z","etag":null,"topics":["blog","golang","goroutine","haskell","mysql","nginx","programming","python","redis","vim"],"latest_commit_sha":null,"homepage":"https://jiajunhuang.com","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/jiajunhuang.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2014-09-21T11:42:20.000Z","updated_at":"2025-10-08T01:47:21.000Z","dependencies_parsed_at":"2023-02-18T06:31:32.892Z","dependency_job_id":"6e4b4459-b36c-4abd-b0fa-22af06e2415b","html_url":"https://github.com/jiajunhuang/blog","commit_stats":{"total_commits":1489,"total_committers":5,"mean_commits":297.8,"dds":0.007387508394895881,"last_synced_commit":"1ce153f3fc0ffc0bf6394b34d468708e28aa783b"},"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/jiajunhuang/blog","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jiajunhuang%2Fblog","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jiajunhuang%2Fblog/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jiajunhuang%2Fblog/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jiajunhuang%2Fblog/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/jiajunhuang","download_url":"https://codeload.github.com/jiajunhuang/blog/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jiajunhuang%2Fblog/sbom","scorecard":{"id":519434,"data":{"date":"2025-08-11","repo":{"name":"github.com/jiajunhuang/blog","commit":"54e60cdcee9cc1bd85f49b946207fb37bb47ce96"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":1.8,"checks":[{"name":"Code-Review","score":0,"reason":"Found 0/30 approved changesets -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Maintained","score":4,"reason":"5 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 4","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Token-Permissions","score":-1,"reason":"No tokens found","details":null,"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"Dangerous-Workflow","score":-1,"reason":"no workflows found","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"SAST","score":0,"reason":"no SAST tool detected","details":["Warn: no pull requests merged into dev branch"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"License","score":0,"reason":"license file not detected","details":["Warn: project does not have a license file"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Branch-Protection","score":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch 'master'"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"Pinned-Dependencies","score":-1,"reason":"no dependencies found","details":null,"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"Vulnerabilities","score":0,"reason":"26 existing vulnerabilities detected","details":["Warn: Project is vulnerable to: GO-2024-2959 / GHSA-98j2-3j3p-fw2v","Warn: Project is vulnerable to: GO-2025-3845 / GHSA-qx2q-88mx-vhg7","Warn: Project is vulnerable to: GO-2021-0053 / GHSA-c3h9-896r-86jm","Warn: Project is vulnerable to: GO-2025-3553 / GHSA-mh63-6h87-95cp","Warn: Project is vulnerable to: GO-2025-3372 / GHSA-6wxm-mpqj-6jpf","Warn: Project is vulnerable to: GO-2023-2133 / GHSA-fr2g-9hjm-wr23","Warn: Project is vulnerable to: GO-2025-3600 / GHSA-fhg8-qxh5-7q3w","Warn: Project is vulnerable to: GO-2024-3321 / GHSA-v778-237x-gjrc","Warn: Project is vulnerable to: GO-2025-3487 / GHSA-hcg3-q754-cr77","Warn: Project is vulnerable to: GO-2023-1572 / GHSA-qgc7-mgm3-q253","Warn: Project is vulnerable to: GO-2023-1990 / GHSA-j3p8-6mrq-6g7h","Warn: Project is vulnerable to: GO-2023-1989 / GHSA-x92r-3vfx-4cv3","Warn: Project is vulnerable to: GO-2024-2937 / GHSA-9phm-fm57-rhg8","Warn: Project is vulnerable to: GO-2024-3333","Warn: Project is vulnerable to: GO-2025-3503 / GHSA-qxp5-gwg8-xv66","Warn: Project is vulnerable to: GO-2025-3595 / GHSA-vvgc-356p-c3xw","Warn: Project is vulnerable to: GO-2025-3488 / GHSA-6v2p-p543-phr9","Warn: Project is vulnerable to: GO-2023-2153 / GHSA-m425-mq94-257g / GHSA-qppj-fm5r-hxr3","Warn: Project is vulnerable to: PYSEC-2023-177 / GHSA-x7m3-jprg-wc5g","Warn: Project is vulnerable to: GHSA-hc5x-x2vx-497g","Warn: Project is vulnerable to: GHSA-w3h3-4rj7-4ph4","Warn: Project is vulnerable to: PYSEC-2023-117 / GHSA-mrwq-x4v8-fh7p","Warn: Project is vulnerable to: GHSA-9hjg-9r4m-mvj7","Warn: Project is vulnerable to: GHSA-9wx4-h78v-vm56","Warn: Project is vulnerable to: GHSA-29pr-6jr8-q5jm","Warn: Project is vulnerable to: GHSA-g92j-qhmh-64v2"],"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}}]},"last_synced_at":"2025-08-20T02:36:34.517Z","repository_id":20999889,"created_at":"2025-08-20T02:36:34.517Z","updated_at":"2025-08-20T02:36:34.517Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28512903,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-17T13:38:16.342Z","status":"ssl_error","status_checked_at":"2026-01-17T13:37:44.060Z","response_time":85,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["blog","golang","goroutine","haskell","mysql","nginx","programming","python","redis","vim"],"created_at":"2024-08-04T04:01:40.397Z","updated_at":"2026-01-17T17:26:54.306Z","avatar_url":"https://github.com/jiajunhuang.png","language":"Go","funding_links":[],"categories":["Go"],"sub_categories":[],"readme":"# Jiajun's Blog\n\n会当凌绝顶，一览众山小。\n\n- [关于我](https://jiajunhuang.com/aboutme)\n\n## 目录\n\n- 2025/10/12 - [TiDB 源码阅读（六）：TiDB Coprocessor 源码解析](https://jiajunhuang.com/articles/2025_10_12-tidb_source_code_coprocessor.md.html)\n- 2025/10/06 - [性能优化的核心思想](https://jiajunhuang.com/articles/2025_10_06-performance.md.html)\n- 2025/10/05 - [TiDB 源码阅读（五）：索引](https://jiajunhuang.com/articles/2025_10_05-tidb_source_code_index.md.html)\n- 2025/10/04 - [TiDB 源码阅读（四）：AST、逻辑计划、物理计划](https://jiajunhuang.com/articles/2025_10_04-tidb_source_code_ast_and_plan.md.html)\n- 2025/10/03 - [TiDB 源码阅读（三）：插入数据](https://jiajunhuang.com/articles/2025_10_03-tidb_source_code_insert.md.html)\n- 2025/10/02 - [TiDB 源码阅读（二）：MySQL协议概览](https://jiajunhuang.com/articles/2025_10_02-tidb_source_code_mysql_protocol.md.html)\n- 2025/10/01 - [TiDB 源码阅读（一）：服务监听、请求处理流程概览](https://jiajunhuang.com/articles/2025_10_01-tidb_source_code.md.html)\n- 2025/09/21 - [用 Siri 来控制虚拟机开启和关闭](https://jiajunhuang.com/articles/2025_09_21-siri_ssh.md.html)\n- 2025/09/07 - [ToB SaaS 服务之殇](https://jiajunhuang.com/articles/2025_09_07-to_b_saas.md.html)\n- 2025/09/02 - [TiDB Lightning 源码阅读](https://jiajunhuang.com/articles/2025_09_02-lightning_source_code.md.html)\n- 2025/05/24 - [Wake on LAN 实现工作机的自动开关机](https://jiajunhuang.com/articles/2025_05_24-wake_on_lan.md.html)\n- 2025/05/05 - [KVM 穿透板载蓝牙和无线网卡](https://jiajunhuang.com/articles/2025_05_05-kvm_passthrough_bluetooth_wireless.md.html)\n- 2025/04/03 - [CockroachDB Serverless Architecture](https://jiajunhuang.com/articles/2025_04_03-cockroachdb_serverless_architecture.md.html)\n- 2025/04/02 - [podman 无故退出](https://jiajunhuang.com/articles/2025_04_02-podman_rootless_exited.md.html)\n- 2025/03/22 - [Cursor Control-L (CTRL-L) Keyboard Shortcuts in Terminal](https://jiajunhuang.com/articles/2025_03_22-cursor_ctrl_l.md.html)\n- 2025/03/21 - [Replace docker with podman](https://jiajunhuang.com/articles/2025_03_21-podman.md.html)\n- 2025/03/18 - [Using xmonad with xfce4](https://jiajunhuang.com/articles/2025_03_18-xmonad_xfce4.md.html)\n- 2025/03/16 - [A RC script for freebsd frpc](https://jiajunhuang.com/articles/2025_03_16-freebsd_frpc.md.html)\n- 2025/03/15 - [BottleRocket Linux check kubelet logs](https://jiajunhuang.com/articles/2025_03_15-bottlerocket_debug.md.html)\n- 2025/03/02 - [Cockpit Create VM Permission Denied](https://jiajunhuang.com/articles/2025_03_02-cockpit_vm_create_permission_denied.md.html)\n- 2025/02/16 - [自己动手写一个k8s controller](https://jiajunhuang.com/articles/2025_02_16-k8s_controller.md.html)\n- 2025/02/16 - [AWS IAM 信任链 和 EKS IRSA](https://jiajunhuang.com/articles/2025_02_16-aws_iam.md.html)\n- 2025/02/15 - [AI 会取代你的(编程)岗位吗？](https://jiajunhuang.com/articles/2025_02_15-ai.md.html)\n- 2024/12/29 - [2024年终总结](https://jiajunhuang.com/articles/2024_12_29-bye_2024.md.html)\n- 2024/11/20 - [自建DERP服务器提升Tailscale连接速度(使用Nginx转发)](https://jiajunhuang.com/articles/2024_11_20-tailscale_derp.md.html)\n- 2024/11/07 - [自动升级Docker容器](https://jiajunhuang.com/articles/2024_11_07-auto_upgrade_docker.md.html)\n- 2024/09/07 - [再读《程序员修炼之道-从小工到专家》](https://jiajunhuang.com/articles/2024_09_07-the_pragmatic_programmer.md.html)\n- 2024/09/06 - [再读《软件随想录》/《黑客与画家》/《软技能》](https://jiajunhuang.com/articles/2024_09_06-reread_3_books.md.html)\n- 2024/09/06 - [让浏览器下载文件](https://jiajunhuang.com/articles/2024_09_06-browser_download_file.md.html)\n- 2024/08/30 - [HTTP 压力测试中的 Coordinated Omission](https://jiajunhuang.com/articles/2024_08_30-http_load_testing.md.html)\n- 2024/07/24 - [2的补码](https://jiajunhuang.com/articles/2024_07_24-twos_complement.md.html)\n- 2024/07/21 - [编程语言中的 context 是什么？](https://jiajunhuang.com/articles/2024_07_21-context.md.html)\n- 2024/03/20 - [flutter macOS 构建出错](https://jiajunhuang.com/articles/2024_03_20-flutter_macos.md.html)\n- 2024/03/19 - [Flatpak 使用小记](https://jiajunhuang.com/articles/2024_03_19-flatpak.md.html)\n- 2024/03/10 - [Golang CAS 操作是怎么实现的](https://jiajunhuang.com/articles/2024_03_10-golang_cas.md.html)\n- 2024/03/09 - [PostgreSQL 当MQ来使用](https://jiajunhuang.com/articles/2024_03_09-postgresql_as_mq.md.html)\n- 2024/03/08 - [Clash 结合 工作VPN 的网络设计](https://jiajunhuang.com/articles/2024_03_08-clash_vpn.md.html)\n- 2024/03/07 - [使用 PostgreSQL 搭建 JuiceFS](https://jiajunhuang.com/articles/2024_03_07-juicefs_postgresql.md.html)\n- 2024/03/05 - [PostgreSQL 配置优化和日志分析](https://jiajunhuang.com/articles/2024_03_05-postgresql_conf.md.html)\n- 2024/03/03 - [有GitHub Copilot？那就可以搭建你的ChatGPT4服务](https://jiajunhuang.com/articles/2024_03_03-copilot_as_gpt4.md.html)\n- 2024/03/01 - [窗口函数的使用(以PG为例)](https://jiajunhuang.com/articles/2024_03_01-pg_window_function.md.html)\n- 2024/01/16 - [读《为什么学生不喜欢上学》](https://jiajunhuang.com/articles/2024_01_16-why_dont_students_like_school.md.html)\n- 2024/01/07 - [OpenAI Prompt Engineering 摘录和总结](https://jiajunhuang.com/articles/2024_01_07-openai_prompt_engineering.md.html)\n- 2023/12/30 - [读《打造真正的新产品》](https://jiajunhuang.com/articles/2023_12_30-something_really_new.md.html)\n- 2023/12/26 - [2023年终总结](https://jiajunhuang.com/articles/2023_12_26-good_bye_2023.md.html)\n- 2023/12/17 - [VueJS 总结](https://jiajunhuang.com/articles/2023_12_17-vue3.md.html)\n- 2023/11/29 - [Linux 自动挂载 alist 提供的webdav](https://jiajunhuang.com/articles/2023_11_29-alist_webdav.md.html)\n- 2023/11/17 - [FreeBSD 使用 vm-bhyve 安装Debian虚拟机](https://jiajunhuang.com/articles/2023_11_17-freebsd_vm_bhyve.md.html)\n- 2023/11/16 - [FreeBSD 和 Linux 网卡聚合实现提速](https://jiajunhuang.com/articles/2023_11_16-freebsd_linux_link_aggr.md.html)\n- 2023/11/15 - [GPT 帮我搞定了时区转换问题](https://jiajunhuang.com/articles/2023_11_15-python_datetime_with_timezone.md.html)\n- 2023/11/12 - [长任务系统如何处理？](https://jiajunhuang.com/articles/2023_11_12-long_running_task.md.html)\n- 2023/11/11 - [macOS/Linux 编译 InputLeap](https://jiajunhuang.com/articles/2023_11_11-input_leap.md.html)\n- 2023/11/10 - [使用开源软KVM - synergy-core](https://jiajunhuang.com/articles/2023_11_10-synergy_core.md.html)\n- 2023/11/06 - [解决 macOS 终端hostname一直变化问题](https://jiajunhuang.com/articles/2023_11_06-mac_keep_hostname.md.html)\n- 2023/11/05 - [KVM 共享 Intel 集成显卡](https://jiajunhuang.com/articles/2023_11_05-kvm_windows_intel_gpu.md.html)\n- 2023/10/17 - [PromQL 备忘](https://jiajunhuang.com/articles/2023_10_17-prometheus_promql.md.html)\n- 2023/07/09 - [读《格鲁夫给经理人的第一课》](https://jiajunhuang.com/articles/2023_07_09-high_output_management.md.html)\n- 2023/07/06 - [读《打开心智》](https://jiajunhuang.com/articles/2023_07_06-free_your_mind.md.html)\n- 2023/02/03 - [为什么要把复杂的联表操作拆成多个单表查询？](https://jiajunhuang.com/articles/2023_02_03-mysql.md.html)\n- 2023/01/31 - [红包系统的设计](https://jiajunhuang.com/articles/2023_01_31-red_envelope.md.html)\n- 2022/12/31 - [2022年终总结](https://jiajunhuang.com/articles/2022_12_31-hello_2023.md.html)\n- 2022/12/28 - [MySQL Index Condition Pushdown Optimization](https://jiajunhuang.com/articles/2022_12_28-index_condition_pushdown_optimization.md.html)\n- 2022/12/16 - [Go mod 简明教程](https://jiajunhuang.com/articles/2022_12_16-go_mod.md.html)\n- 2022/12/04 - [OpenWRT 使用 Android/iOS USB 网络](https://jiajunhuang.com/articles/2022_12_04-openwrt_usb.md.html)\n- 2022/11/20 - [搭建旁路由](https://jiajunhuang.com/articles/2022_11_20-router.md.html)\n- 2022/11/04 - [Golang gRPC 错误处理](https://jiajunhuang.com/articles/2022_11_04-grpc_error_handling.md.html)\n- 2022/10/31 - [编写可维护的单元测试代码](https://jiajunhuang.com/articles/2022_10_31-goconvey.md.html)\n- 2022/10/12 - [OAuth 2 详解（六）：Authorization Code Flow with PKCE](https://jiajunhuang.com/articles/2022_10_12-oauth2_explained_authorization_code_pkce.md.html)\n- 2022/10/11 - [OAuth 2 详解（五）：Device Authorization Flow](https://jiajunhuang.com/articles/2022_10_11-oauth2_explained_device_code.md.html)\n- 2022/10/10 - [OAuth 2 详解（三）：Resource Owner Password Credentials Grant](https://jiajunhuang.com/articles/2022_10_10-oauth2_explained_password.md.html)\n- 2022/10/10 - [OAuth 2 详解（四）：Client Credentials Flow](https://jiajunhuang.com/articles/2022_10_10-oauth2_explained_client_credentials.md.html)\n- 2022/10/09 - [OAuth 2 详解（二）：Implict Grant Flow](https://jiajunhuang.com/articles/2022_10_09-oauth2_explained_implict_grant.md.html)\n- 2022/10/08 - [OAuth 2 详解（一）：简介及 Authorization Code 模式](https://jiajunhuang.com/articles/2022_10_08-oauth2_explained.md.html)\n- 2022/10/06 - [ElasticSearch 学习笔记](https://jiajunhuang.com/articles/2022_10_06-elasticsearch.md.html)\n- 2022/07/28 - [三种git流程以及发版模型](https://jiajunhuang.com/articles/2022_07_28-git_flows.md.html)\n- 2022/07/27 - [错误处理实践](https://jiajunhuang.com/articles/2022_07_27-how_to_return_error.md.html)\n- 2022/07/15 - [权限模型(RBAC/ABAC)](https://jiajunhuang.com/articles/2022_07_15-access_control.md.html)\n- 2022/07/06 - [OIDC(OpenID Connect) 简介](https://jiajunhuang.com/articles/2022_07_06-openid_connect.md.html)\n- 2022/07/05 - [任务队列简介](https://jiajunhuang.com/articles/2022_07_05-task_queue.md.html)\n- 2022/04/29 - [PostgreSQL 操作笔记](https://jiajunhuang.com/articles/2022_04_29-postgres_notes.md.html)\n- 2022/04/29 - [使用Drone CI构建CI/CD系统](https://jiajunhuang.com/articles/2022_04_29-drone_ci.md.html)\n- 2022/04/28 - [Golang migrate 做数据库变更管理](https://jiajunhuang.com/articles/2022_04_28-golang_migrate_iofs.md.html)\n- 2022/04/12 - [使用PostgreSQL做搜索引擎](https://jiajunhuang.com/articles/2022_04_12-postgresql_fulltext_search.md.html)\n- 2022/03/23 - [Nginx 源码阅读（三）: 连接池、内存池](https://jiajunhuang.com/articles/2022_03_23-nginx_source_code_3.md.html)\n- 2022/03/22 - [Nginx 源码阅读（二）: 请求处理](https://jiajunhuang.com/articles/2022_03_22-nginx_source_code_2.md.html)\n- 2022/03/21 - [Nginx 源码阅读（一）: 启动流程](https://jiajunhuang.com/articles/2022_03_21-nginx_source_code_1.md.html)\n- 2022/03/17 - [Go 泛型简明教程](https://jiajunhuang.com/articles/2022_03_17-go_generics.md.html)\n- 2022/03/15 - [KVM 显卡穿透给 Windows](https://jiajunhuang.com/articles/2022_03_15-kvm_windows_gpu_passthrough.md.html)\n- 2022/03/12 - [使用 HTTP Router 处理 Telegram Bot 按钮回调](https://jiajunhuang.com/articles/2022_03_12-tgbot_httprouter.md.html)\n- 2022/01/10 - [使用反射(reflect)对结构体赋值](https://jiajunhuang.com/articles/2022_01_10-reflect_binding_args.md.html)\n- 2022/01/09 - [GIN 是如何绑定参数的](https://jiajunhuang.com/articles/2022_01_09-gin_binding_args.md.html)\n- 2021/12/30 - [你好 2022(2021 年终总结)](https://jiajunhuang.com/articles/2021_12_30-hello_2022.md.html)\n- 2021/12/11 - [用Go导入大型CSV到PostgreSQL](https://jiajunhuang.com/articles/2021_12_11-go_copy_large_file_to_pg.md.html)\n- 2021/12/01 - [使用 OpenWRT 搭建软路由](https://jiajunhuang.com/articles/2021_12_01-openwrt.md.html)\n- 2021/11/26 - [使用软KVM切换器 barrier 共享键鼠](https://jiajunhuang.com/articles/2021_11_26-use_barrier.md.html)\n- 2021/11/04 - [SQL 防注入及原理](https://jiajunhuang.com/articles/2021_11_04-sql_injection.md.html)\n- 2021/10/12 - [使用 gomock 测试 Go 代码](https://jiajunhuang.com/articles/2021_10_12-go_mock.md.html)\n- 2021/10/11 - [gevent不是黑魔法(二): gevent 实现](https://jiajunhuang.com/articles/2021_10_11-gevent_is_good_part2.md.html)\n- 2021/09/29 - [gevent不是黑魔法(一): greenlet 实现](https://jiajunhuang.com/articles/2021_09_29-gevent_is_good_part1.md.html)\n- 2021/09/06 - [用 entgo 替代 gorm](https://jiajunhuang.com/articles/2021_09_06-use_entgo.md.html)\n- 2021/09/01 - [应用内使用crontab不是那么方便](https://jiajunhuang.com/articles/2021_09_01-cron_is_not_convenient.md.html)\n- 2021/08/27 - [单测时要不要 mock 数据库？](https://jiajunhuang.com/articles/2021_08_27-mock_db_or_not.md.html)\n- 2021/08/25 - [Sentry 自建指南](https://jiajunhuang.com/articles/2021_08_25-use_sentry.md.html)\n- 2021/08/19 - [用selenium完成自动化任务](https://jiajunhuang.com/articles/2021_08_19-selenium.md.html)\n- 2021/07/09 - [用闲置的安卓手机做垃圾电话短信过滤](https://jiajunhuang.com/articles/2021_07_09-filter_your_call_and_sms.md.html)\n- 2021/07/06 - [推荐三个时间管理工具](https://jiajunhuang.com/articles/2021_07_06-manage_your_time.md.html)\n- 2021/07/02 - [一次事故反思](https://jiajunhuang.com/articles/2021_07_02-reflection_on_bug.md.html)\n- 2021/06/22 - [当JS遇到uint64：JS整数溢出问题](https://jiajunhuang.com/articles/2021_06_22-json_int_precision.md.html)\n- 2021/06/19 - [SQLite3 存储以及ACID原理](https://jiajunhuang.com/articles/2021_06_19-sqlite3.md.html)\n- 2021/06/07 - [Redis源码阅读：pub/sub实现](https://jiajunhuang.com/articles/2021_06_07-redis_source_code_12.md.html)\n- 2021/06/06 - [Redis源码阅读：zset实现](https://jiajunhuang.com/articles/2021_06_06-redis_source_code_11.md.html)\n- 2021/05/30 - [Redis源码阅读：bitmap 位图的运算](https://jiajunhuang.com/articles/2021_05_30-redis_source_code_10.md.html)\n- 2021/05/29 - [Redis源码阅读：set是怎么做交并集运算的？](https://jiajunhuang.com/articles/2021_05_29-redis_source_code_9.md.html)\n- 2021/05/28 - [Redis源码阅读：list实现(ziplist, quicklist)](https://jiajunhuang.com/articles/2021_05_28-redis_source_code_8.md.html)\n- 2021/05/27 - [Redis源码阅读：RDB是怎么实现的](https://jiajunhuang.com/articles/2021_05_27-redis_source_code_7.md.html)\n- 2021/05/26 - [Redis源码阅读：AOF重写](https://jiajunhuang.com/articles/2021_05_26-redis_source_code_6.md.html)\n- 2021/05/25 - [Redis源码阅读：AOF持久化](https://jiajunhuang.com/articles/2021_05_25-redis_source_code_5.md.html)\n- 2021/05/24 - [Redis源码阅读：key是怎么过期的](https://jiajunhuang.com/articles/2021_05_24-redis_source_code_4.md.html)\n- 2021/05/24 - [Redis源码阅读：字典是怎么实现的](https://jiajunhuang.com/articles/2021_05_24-redis_source_code_3.md.html)\n- 2021/05/23 - [Redis源码阅读：执行命令](https://jiajunhuang.com/articles/2021_05_23-redis_source_code_2.md.html)\n- 2021/05/22 - [Redis源码阅读：启动过程](https://jiajunhuang.com/articles/2021_05_22-redis_source_code_1.md.html)\n- 2021/05/15 - [WAL(Write-ahead logging)的套路](https://jiajunhuang.com/articles/2021_05_15-wal.md.html)\n- 2021/04/29 - [搞定CORS问题](https://jiajunhuang.com/articles/2021_04_29-cors.md.html)\n- 2021/04/15 - [如何定位程序问题所在](https://jiajunhuang.com/articles/2021_04_15-how_to_debug_program.md.html)\n- 2021/04/14 - [设计一个IM归档系统](https://jiajunhuang.com/articles/2021_04_14-system_design_archive.md.html)\n- 2021/04/11 - [logrotate read only filesystem问题](https://jiajunhuang.com/articles/2021_04_11-logrotate_read_only_filesystem.md.html)\n- 2021/03/23 - [Golang GIN写单测时，愉快的使用返回值](https://jiajunhuang.com/articles/2021_03_23-go_gin_unittest.md.html)\n- 2021/03/20 - [Python Queue源码分析](https://jiajunhuang.com/articles/2021_03_20-python_queue.md.html)\n- 2021/03/18 - [Go里优雅的使用全局配置](https://jiajunhuang.com/articles/2021_03_18-go_config.md.html)\n- 2021/03/15 - [Golang sync.Map源码分析](https://jiajunhuang.com/articles/2021_03_15-go_sync_map.md.html)\n- 2021/03/11 - [Android滑动时隐藏FAB](https://jiajunhuang.com/articles/2021_03_11-android_fab_hide.md.html)\n- 2021/02/25 - [Python中用tuple作为key](https://jiajunhuang.com/articles/2021_02_25-python_dict_tuple_as_key.md.html)\n- 2021/02/24 - [一些常用的算法思维](https://jiajunhuang.com/articles/2021_02_24-use_algorithms_in_life.md.html)\n- 2021/02/21 - [编写可维护的函数](https://jiajunhuang.com/articles/2021_02_21-maintainable_function.md.html)\n- 2021/02/04 - [为什么要把配置保存在仓库里？](https://jiajunhuang.com/articles/2021_02_04-why_save_config_to_repo.md.html)\n- 2021/01/27 - [Android自动展示和关闭进度条](https://jiajunhuang.com/articles/2021_01_27-android_progress_bar.md.html)\n- 2021/01/13 - [Kotlin/Java 列表Protobuf序列化](https://jiajunhuang.com/articles/2021_01_13-kotlin_protobuf_serialization.md.html)\n- 2021/01/03 - [怎么使用ViewModel 和 RecyclerView](https://jiajunhuang.com/articles/2021_01_03-recycler_list_view_model.md.html)\n- 2021/01/03 - [deeplink结合路由处理扩展App的能力](https://jiajunhuang.com/articles/2021_01_03-deeplink_server_route.md.html)\n- 2021/01/02 - [Android手动挡MVVM](https://jiajunhuang.com/articles/2021_01_02-android_mvvm.md.html)\n- 2020/12/23 - [来电拦截方案](https://jiajunhuang.com/articles/2020_12_23-call_screening.md.html)\n- 2020/12/22 - [你好，2021！](https://jiajunhuang.com/articles/2020_12_22-hello_2021.md.html)\n- 2020/12/19 - [gRPC鉴权方案](https://jiajunhuang.com/articles/2020_12_19-grpc_authentication.md.html)\n- 2020/12/16 - [Golang里数据库migration方案](https://jiajunhuang.com/articles/2020_12_16-golang_migration.md.html)\n- 2020/12/12 - [Android SwipeRefreshLayout左右滑动冲突的解决](https://jiajunhuang.com/articles/2020_12_12-android_swiperefresh_swipe_left_right.md.html)\n- 2020/12/07 - [Android调用gRPC的两个小工具函数](https://jiajunhuang.com/articles/2020_12_07-android_kotlin_grpc.md.html)\n- 2020/12/01 - [Android上结合kotlin使用coroutine](https://jiajunhuang.com/articles/2020_12_01-android_kotlin_coroutine.md.html)\n- 2020/11/26 - [gRPC错误处理](https://jiajunhuang.com/articles/2020_11_26-grpc_error_handle.md.html)\n- 2020/11/13 - [Java collection的结构](https://jiajunhuang.com/articles/2020_11_13-java_colletions.md.html)\n- 2020/11/02 - [为啥Redis使用pipelining会更快？](https://jiajunhuang.com/articles/2020_11_02-why_pipelining_fast.md.html)\n- 2020/10/24 - [通过阳台种菜实现蔬菜自由](https://jiajunhuang.com/articles/2020_10_24-vegetable.md.html)\n- 2020/10/19 - [从GORM里学习到的panic处理方式](https://jiajunhuang.com/articles/2020_10_19-gorm_paniced.md.html)\n- 2020/10/17 - [Go使用闭包简化数据库操作代码](https://jiajunhuang.com/articles/2020_10_17-golang_db_transaction.md.html)\n- 2020/10/10 - [TCMalloc设计文档学习](https://jiajunhuang.com/articles/2020_10_10-tcmalloc.md.html)\n- 2020/09/27 - [Flask和requests做一个简单的请求代理](https://jiajunhuang.com/articles/2020_09_27-flask_proxy.md.html)\n- 2020/09/21 - [Linux常用命令(四)：xargs](https://jiajunhuang.com/articles/2020_09_21-linux_cmd_xargs.md.html)\n- 2020/09/20 - [Linux常用命令(三)：watch](https://jiajunhuang.com/articles/2020_09_20-linux_cmd_watch.md.html)\n- 2020/09/20 - [Linux常用命令(二)：htop](https://jiajunhuang.com/articles/2020_09_20-linux_cmd_htop.md.html)\n- 2020/09/19 - [Linux常用命令(一)：netcat](https://jiajunhuang.com/articles/2020_09_19-linux_cmd_netcat.md.html)\n- 2020/09/16 - [结合Flask 与 marshmallow快速进行参数校验](https://jiajunhuang.com/articles/2020_09_16-flask_marshmallow.md.html)\n- 2020/09/10 - [规整数据的重要性](https://jiajunhuang.com/articles/2020_09_10-form_check.md.html)\n- 2020/09/05 - [apt安装特定包以及忽略升级某个包](https://jiajunhuang.com/articles/2020_09_05-apt.md.html)\n- 2020/08/26 - [StackGuard的作用](https://jiajunhuang.com/articles/2020_08_26-stackguard.md.html)\n- 2020/08/26 - [Goroutine是如何处理栈的？](https://jiajunhuang.com/articles/2020_08_26-goroutine_stack.md.html)\n- 2020/08/22 - [Go DiskQueue源码阅读](https://jiajunhuang.com/articles/2020_08_22-go_diskqueue.md.html)\n- 2020/08/16 - [NSQ源码分析](https://jiajunhuang.com/articles/2020_08_16-nsq_source_code.md.html)\n- 2020/08/15 - [NSQ简明教程](https://jiajunhuang.com/articles/2020_08_15-nsq.md.html)\n- 2020/08/11 - [结合Redis与MySQL实现又快又好的数据方案](https://jiajunhuang.com/articles/2020_08_11-redis_mysql.md.html)\n- 2020/07/28 - [程序员的MySQL手册(五)：索引优化](https://jiajunhuang.com/articles/2020_07_28-mysql_part5.md.html)\n- 2020/07/27 - [程序员的MySQL手册(四)：索引设计](https://jiajunhuang.com/articles/2020_07_27-mysql_part4.md.html)\n- 2020/07/26 - [程序员的MySQL手册(三)：数据库设计](https://jiajunhuang.com/articles/2020_07_26-mysql_part3.md.html)\n- 2020/07/25 - [Linux窗口管理器下的截图](https://jiajunhuang.com/articles/2020_07_25-linux_screenshot.md.html)\n- 2020/07/23 - [程序员的MySQL手册(二): 监控与benchmark](https://jiajunhuang.com/articles/2020_07_23-mysql_part2.md.html)\n- 2020/07/23 - [Go设计模式：facade模式和观察者模式](https://jiajunhuang.com/articles/2020_07_23-go_design_pattern_facade.md.html)\n- 2020/07/21 - [Go设计模式: 责任链模式](https://jiajunhuang.com/articles/2020_07_21-go_design_pattern_chain.md.html)\n- 2020/07/15 - [我们真的需要这么复杂的技术栈吗？](https://jiajunhuang.com/articles/2020_07_15-do_we_need_these.md.html)\n- 2020/07/14 - [Go设计模式：装饰器模式](https://jiajunhuang.com/articles/2020_07_14-go_design_pattern_decorator.md.html)\n- 2020/07/05 - [程序员的MySQL手册(一): 安装，基本配置](https://jiajunhuang.com/articles/2020_07_05-mysql_part1.md.html)\n- 2020/07/04 - [ElasticSearch学习笔记](https://jiajunhuang.com/articles/2020_07_04-elasticsearch.md.html)\n- 2020/07/02 - [Go设计模式：composite模式](https://jiajunhuang.com/articles/2020_07_02-go_design_pattern_composite.md.html)\n- 2020/06/25 - [拯救删除ZFS之后的分区表](https://jiajunhuang.com/articles/2020_06_25-save_partition_table_zfs.md.html)\n- 2020/06/23 - [Linux使用redshift自动调整屏幕色温](https://jiajunhuang.com/articles/2020_06_23-redshift.md.html)\n- 2020/06/21 - [Go设计模式：桥接模式和策略模式](https://jiajunhuang.com/articles/2020_06_21-go_design_pattern_bridge.md.html)\n- 2020/06/20 - [Go设计模式：单例模式、原型模式和Builder模式](https://jiajunhuang.com/articles/2020_06_20-go_design_pattern_singleton.md.html)\n- 2020/06/15 - [操作系统也是CRUD](https://jiajunhuang.com/articles/2020_06_15-unix_crud.md.html)\n- 2020/06/13 - [把USB设备穿透给虚拟机里的系统](https://jiajunhuang.com/articles/2020_06_13-macos_kvm_usb_pass.md.html)\n- 2020/06/13 - [Go设计模式：简单工厂模式](https://jiajunhuang.com/articles/2020_06_13-go_design_pattern_factory.md.html)\n- 2020/06/12 - [debug故事之：事务让生活更美好](https://jiajunhuang.com/articles/2020_06_12-transaction_life_easy.md.html)\n- 2020/06/11 - [Go设计模式：模板模式](https://jiajunhuang.com/articles/2020_06_11-go_design_pattern_template.md.html)\n- 2020/06/09 - [Go设计模式：适配器模式](https://jiajunhuang.com/articles/2020_06_09-go_design_pattern_adapter.md.html)\n- 2020/06/07 - [Go设计模式：Iterator](https://jiajunhuang.com/articles/2020_06_07-go_design_pattern_iter.md.html)\n- 2020/05/30 - [glusterfs 笔记](https://jiajunhuang.com/articles/2020_05_30-glusterfs.md.html)\n- 2020/05/29 - [用peewee代替SQLAlchemy](https://jiajunhuang.com/articles/2020_05_29-use_peewee.md.html)\n- 2020/05/23 - [Go的slice工作机制](https://jiajunhuang.com/articles/2020_05_23-go_slice.md.html)\n- 2020/05/22 - [Linux系统迁移记录(从HDD到SSD)](https://jiajunhuang.com/articles/2020_05_22-linux_clone_sys.md.html)\n- 2020/05/21 - [Redis是如何工作的？](https://jiajunhuang.com/articles/2020_05_21-how_does_redis_work.md.html)\n- 2020/05/18 - [virsh自动关闭windows虚拟机](https://jiajunhuang.com/articles/2020_05_18-virsh_shutdown_win.md.html)\n- 2020/05/16 - [Golang sort源码阅读](https://jiajunhuang.com/articles/2020_05_16-go_sort.md.html)\n- 2020/05/15 - [分治的思维方式](https://jiajunhuang.com/articles/2020_05_15-divide_and_conquer.md.html)\n- 2020/05/13 - [Debian 使用NetworkManager之后networking.service崩溃](https://jiajunhuang.com/articles/2020_05_13-debian_networking.md.html)\n- 2020/05/09 - [httprouter源码阅读与分析](https://jiajunhuang.com/articles/2020_05_09-httprouter.md.html)\n- 2020/05/08 - [《程序员的自我修养-装载、链接与库》笔记](https://jiajunhuang.com/articles/2020_05_08-linker_and_loader.md.html)\n- 2020/05/05 - [Golang sync.Pool源码阅读与分析](https://jiajunhuang.com/articles/2020_05_05-go_sync_pool.md.html)\n- 2020/05/01 - [MySQL操作笔记](https://jiajunhuang.com/articles/2020_05_01-mysql_notes.md.html)\n- 2020/04/30 - [Go语言解析GBK编码的xml](https://jiajunhuang.com/articles/2020_04_30-golang_gbk_xml.md.html)\n- 2020/04/28 - [Golang log 源码阅读](https://jiajunhuang.com/articles/2020_04_28-golang_log.md.html)\n- 2020/04/24 - [使用Go语言实现一个异步任务框架](https://jiajunhuang.com/articles/2020_04_24-gotasks.md.html)\n- 2020/04/23 - [Go使用gdb调试](https://jiajunhuang.com/articles/2020_04_23-go_gdb.md.html)\n- 2020/04/23 - [Golang flag源码阅读及自己实现](https://jiajunhuang.com/articles/2020_04_23-go_flag.md.html)\n- 2020/04/22 - [Golang context源码阅读与分析](https://jiajunhuang.com/articles/2020_04_22-golang_context.md.html)\n- 2020/04/22 - [Golang ASM简明教程](https://jiajunhuang.com/articles/2020_04_22-go_asm.md.html)\n- 2020/04/21 - [善用闭包(closure)让Go代码更优雅](https://jiajunhuang.com/articles/2020_04_21-use_closure.md.html)\n- 2020/04/21 - [Golang中的并发控制](https://jiajunhuang.com/articles/2020_04_21-golang_concurrency.md.html)\n- 2020/04/20 - [Golang的可选参数实践](https://jiajunhuang.com/articles/2020_04_20-golang_optional_parameters.md.html)\n- 2020/04/13 - [FreeBSD ipfw使用教程](https://jiajunhuang.com/articles/2020_04_13-freebsd_ipfw.md.html)\n- 2020/04/12 - [Golang expvar库源码阅读](https://jiajunhuang.com/articles/2020_04_12-expvar.md.html)\n- 2020/04/11 - [Golang SQL生成库 Squirrel 教程及源码阅读](https://jiajunhuang.com/articles/2020_04_11-squirrel.md.html)\n- 2020/04/10 - [Golang validator使用教程](https://jiajunhuang.com/articles/2020_04_10-golang_validator.md.html)\n- 2020/04/09 - [价值编程与职业发展](https://jiajunhuang.com/articles/2020_04_09-value_programming.md.html)\n- 2020/04/09 - [使用Redis的Stream模块实现群聊功能](https://jiajunhuang.com/articles/2020_04_09-redis_stream_as_im.md.html)\n- 2020/04/08 - [解决k8s cron无法读取环境变量的问题](https://jiajunhuang.com/articles/2020_04_08-k8s_cron_environment_variable.md.html)\n- 2020/03/27 - [应用内购的坑](https://jiajunhuang.com/articles/2020_03_27-iap.md.html)\n- 2020/03/26 - [两种常见的访问控制模型](https://jiajunhuang.com/articles/2020_03_26-access_control.md.html)\n- 2020/03/25 - [gunicorn max-requests 选项的作用](https://jiajunhuang.com/articles/2020_03_25-gunicorn_max_requests.md.html)\n- 2020/03/23 - [Redis使用中的几点注意事项](https://jiajunhuang.com/articles/2020_03_23-redis_practice.md.html)\n- 2020/03/12 - [给你的代码跑个分？pylint使用教程](https://jiajunhuang.com/articles/2020_03_12-pylint.md.html)\n- 2020/03/11 - [一个Gunicorn worker数量引发的血案](https://jiajunhuang.com/articles/2020_03_11-gunicorn_worker.md.html)\n- 2020/03/06 - [MySQL Boolean类型的坑](https://jiajunhuang.com/articles/2020_03_06-mysql_boolean_tinyint_index.md.html)\n- 2020/03/04 - [pip freeze是魔鬼](https://jiajunhuang.com/articles/2020_03_04-pip_list.md.html)\n- 2020/03/02 - [一个feed流系统的演进](https://jiajunhuang.com/articles/2020_03_02-feed_system_design.md.html)\n- 2020/03/01 - [Android 使用view binding](https://jiajunhuang.com/articles/2020_03_01-android_view_binding.md.html)\n- 2020/02/27 - [系统调用的过程](https://jiajunhuang.com/articles/2020_02_27-syscall.md.html)\n- 2020/02/26 - [MySQL charset不同导致无法使用索引的坑](https://jiajunhuang.com/articles/2020_02_26-mysql_charset_index.md.html)\n- 2020/02/19 - [微服务的缺点](https://jiajunhuang.com/articles/2020_02_19-should_i_use_microservice.md.html)\n- 2020/02/14 - [远程工作一周有感](https://jiajunhuang.com/articles/2020_02_14-remote_work.md.html)\n- 2020/02/12 - [Python中的并发控制](https://jiajunhuang.com/articles/2020_02_12-python_concurrency.md.html)\n- 2020/02/08 - [KVM spice协议在高分屏上的分辨率问题](https://jiajunhuang.com/articles/2020_02_08-kvm_spice_high_dpi.md.html)\n- 2020/01/11 - [计算机中的权衡(trade-off)](https://jiajunhuang.com/articles/2020_01_11-paradigm.md.html)\n- 2020/01/10 - [[声明]本站所有文章禁止转载](https://jiajunhuang.com/articles/2020_01_10-please_do_not_copy.md.html)\n- 2020/01/07 - [Golang不那么蛋疼的sort](https://jiajunhuang.com/articles/2020_01_07-golang_sort_slice.md.html)\n- 2020/01/06 - [Flutter给Android应用签名](https://jiajunhuang.com/articles/2020_01_06-flutter_sign_android_apk.md.html)\n- 2020/01/01 - [使用Gitea+Drone打造自己的CI/CD系统](https://jiajunhuang.com/articles/2020_01_01-use_gitea_with_drone.md.html)\n- 2019/12/31 - [2019年就要结束啦！](https://jiajunhuang.com/articles/2019_12_31-hello_2020.md.html)\n- 2019/12/27 - [为什么要使用gRPC？](https://jiajunhuang.com/articles/2019_12_27-why_grpc.md.html)\n- 2019/12/24 - [Matebook X Pro 2019安装Debian 10](https://jiajunhuang.com/articles/2019_12_24-matebook_x_pro_2019_debian_10.md.html)\n- 2019/12/22 - [ArchLinux忽略某个包的升级](https://jiajunhuang.com/articles/2019_12_22-archlinux_ignore_pkg.md.html)\n- 2019/12/21 - [SQLAlchemy使用主从与数据库autocommit](https://jiajunhuang.com/articles/2019_12_21-autocommit.md.html)\n- 2019/12/19 - [Blackbox禁用IPv6](https://jiajunhuang.com/articles/2019_12_19-blackbox_disable_ipv6.md.html)\n- 2019/12/18 - [Go 1.13的errors挺香](https://jiajunhuang.com/articles/2019_12_18-golang_133_errors.md.html)\n- 2019/12/18 - [预防缓存击穿](https://jiajunhuang.com/articles/2019_12_18-cache_miss.md.html)\n- 2019/12/16 - [flutter开发体验汇报](https://jiajunhuang.com/articles/2019_12_16-flutter_dev.md.html)\n- 2019/12/13 - [自己封装一个好用的Dart HTTP库](https://jiajunhuang.com/articles/2019_12_13-dart_requests.md.html)\n- 2019/12/11 - [Flutter应用启动后检查更新](https://jiajunhuang.com/articles/2019_12_11-flutter_do_sth_after_boot.md.html)\n- 2019/12/10 - [Grafana Gravatar头像显示bug修复](https://jiajunhuang.com/articles/2019_12_10-grafana_gravatar_http_hijack.md.html)\n- 2019/12/09 - [flutter中使用RESTful接口](https://jiajunhuang.com/articles/2019_12_09-dart_flutter_json.md.html)\n- 2019/12/04 - [Vim YouCompleteMe使用LSP(以dart为例)](https://jiajunhuang.com/articles/2019_12_04-ycm_lsp_dart.md.html)\n- 2019/12/03 - [flutter webview加载时显示进度](https://jiajunhuang.com/articles/2019_12_03-flutter_webview_indicator.md.html)\n- 2019/12/02 - [SQLAlchemy快速更新或插入对象](https://jiajunhuang.com/articles/2019_12_02-sqlalchemy_update_or_insert.md.html)\n- 2019/11/26 - [修复Linux下curl等无法使用letsencrypt证书](https://jiajunhuang.com/articles/2019_11_26-lets_encrypt_linux_shell.md.html)\n- 2019/11/24 - [欣赏一下K\u0026R两位大神的代码](https://jiajunhuang.com/articles/2019_11_24-code_from_k_and_r.md.html)\n- 2019/11/19 - [MySQL的ON DUPLICATE KEY UPDATE语句](https://jiajunhuang.com/articles/2019_11_19-mysql_duplicate_key_update.md.html)\n- 2019/11/17 - [使用microk8s快速搭建k8s](https://jiajunhuang.com/articles/2019_11_17-microk8s.md.html)\n- 2019/11/15 - [Python中优雅的处理文件路径](https://jiajunhuang.com/articles/2019_11_15-python_pathlib_path.md.html)\n- 2019/11/14 - [Go语言MySQL时区问题](https://jiajunhuang.com/articles/2019_11_14-golang_mysql_timezone.md.html)\n- 2019/11/13 - [我的技术栈选型](https://jiajunhuang.com/articles/2019_11_13-tech_stack.md.html)\n- 2019/11/11 - [为什么我要用Linux作为桌面？](https://jiajunhuang.com/articles/2019_11_11-why_linux_as_desktop.md.html)\n- 2019/11/08 - [disqus获取评论时忽略query string](https://jiajunhuang.com/articles/2019_11_08-disqus_thread_identifier.md.html)\n- 2019/11/06 - [MySQL性能优化指南](https://jiajunhuang.com/articles/2019_11_06-mysql.md.html)\n- 2019/11/01 - [网络编程所需要熟悉的那些函数](https://jiajunhuang.com/articles/2019_11_01-network_programming.md.html)\n- 2019/10/31 - [DNSCrypt简明教程](https://jiajunhuang.com/articles/2019_10_31-dnscrypt.md.html)\n- 2019/10/30 - [SQLAlchemy简明教程](https://jiajunhuang.com/articles/2019_10_30-sqlalchemy.md.html)\n- 2019/10/25 - [这些年，我们错过的n个亿](https://jiajunhuang.com/articles/2019_10_25-oh_my_money.md.html)\n- 2019/10/19 - [给Linux用户的FreeBSD快速指南](https://jiajunhuang.com/articles/2019_10_19-freebsd_for_linux_users.md.html)\n- 2019/10/18 - [旧电脑也不能闲着：家用备份方案](https://jiajunhuang.com/articles/2019_10_18-build_your_own_nas.md.html)\n- 2019/10/15 - [将SQLite的数据迁移到MySQL](https://jiajunhuang.com/articles/2019_10_15-grafana_moved_to_mysql.md.html)\n- 2019/10/08 - [Linux托管Windows虚拟机最佳实践](https://jiajunhuang.com/articles/2019_10_08-linux_windows.md.html)\n- 2019/09/29 - [为什么gRPC难以推广](https://jiajunhuang.com/articles/2019_09_29-why_grpc_is_not_popular.md.html)\n- 2019/09/26 - [关于ORM的思考](https://jiajunhuang.com/articles/2019_09_26-orm.md.html)\n- 2019/09/25 - [MySQL指定使用索引(使用索引提示)](https://jiajunhuang.com/articles/2019_09_25-mysql_use_index.md.html)\n- 2019/09/23 - [搭建samba服务器](https://jiajunhuang.com/articles/2019_09_23-samba.md.html)\n- 2019/09/23 - [QT5使用GTK主题](https://jiajunhuang.com/articles/2019_09_23-qt5_gtk_theme.md.html)\n- 2019/09/18 - [ssh时自动运行tmux](https://jiajunhuang.com/articles/2019_09_18-run_tmux_automatically.md.html)\n- 2019/09/14 - [ufw简明教程](https://jiajunhuang.com/articles/2019_09_14-ufw.md.html)\n- 2019/09/11 - [zerotier简明教程](https://jiajunhuang.com/articles/2019_09_11-zerotier.md.html)\n- 2019/09/04 - [提取kindle笔记](https://jiajunhuang.com/articles/2019_09_04-kindle_highlights.md.html)\n- 2019/09/02 - [一个Golang gRPC握手错误的坑](https://jiajunhuang.com/articles/2019_09_02-go_grpc_handshake.md.html)\n- 2019/08/31 - [Golang(Go语言)爬虫框架colly简明教程及源码阅读与分析](https://jiajunhuang.com/articles/2019_08_31-go_colly.md.html)\n- 2019/08/30 - [选择合适的技术栈](https://jiajunhuang.com/articles/2019_08_30-choose_properly_tech.md.html)\n- 2019/08/23 - [Golang的template(模板引擎)简明教程](https://jiajunhuang.com/articles/2019_08_23-golang_html_template.md.html)\n- 2019/08/21 - [毕业三年，一路走来](https://jiajunhuang.com/articles/2019_08_21-three_years_after_graduate.md.html)\n- 2019/08/18 - [代码的坏味道](https://jiajunhuang.com/articles/2019_08_18-code_with_bad_taste.md.html)\n- 2019/08/05 - [消息分帧(字符串设计或协议设计)的两种形式](https://jiajunhuang.com/articles/2019_08_05-message_framing.md.html)\n- 2019/08/01 - [C, Go, Python的错误处理和异常机制杂谈](https://jiajunhuang.com/articles/2019_08_01-error_handling.md.html)\n- 2019/07/29 - [好的命名是最好的文档](https://jiajunhuang.com/articles/2019_07_29-name_is_the_best_doc.md.html)\n- 2019/07/24 - [读《系统之美：决策者的系统思考》](https://jiajunhuang.com/articles/2019_07_24-thinking_in_systems_a_primer.md.html)\n- 2019/07/20 - [Linux高分屏支持](https://jiajunhuang.com/articles/2019_07_20-linux_hidpi.md.html)\n- 2019/07/16 - [GCC默认的头文件搜索路径](https://jiajunhuang.com/articles/2019_07_16-gcc_header_path.md.html)\n- 2019/07/15 - [读《远见-如何规划职业生涯3大阶段》](https://jiajunhuang.com/articles/2019_07_15-the_long_view.md.html)\n- 2019/07/13 - [后端工程师学前端(五): SASS](https://jiajunhuang.com/articles/2019_07_13-learn_front_end_5.md.html)\n- 2019/07/10 - [后端工程师学前端(四): CSS进阶(盒子模型)](https://jiajunhuang.com/articles/2019_07_10-learn_front_end_4.md.html)\n- 2019/07/06 - [读《投资中最简单的事》](https://jiajunhuang.com/articles/2019_07_06-the_simple_things_in_investment.md.html)\n- 2019/07/04 - [后端工程师学前端(三): CSS进阶(特指度、单位和字体族)](https://jiajunhuang.com/articles/2019_07_04-learn_front_end_3.md.html)\n- 2019/07/02 - [后端工程师学前端(二): CSS基础知识(规则与选择器)](https://jiajunhuang.com/articles/2019_07_02-learn_front_end_2.md.html)\n- 2019/06/25 - [Swift语法笔记](https://jiajunhuang.com/articles/2019_06_25-swift.md.html)\n- 2019/06/23 - [读《管理的实践》](https://jiajunhuang.com/articles/2019_06_23-the_practice_of_management.md.html)\n- 2019/06/23 - [后端工程师学前端(一): HTML](https://jiajunhuang.com/articles/2019_06_23-learn_front_end.md.html)\n- 2019/06/19 - [frp 源码阅读与分析(二)：TCP内网穿透的实现](https://jiajunhuang.com/articles/2019_06_19-frp_source_code_part2.md.html)\n- 2019/06/15 - [五天不用微信 - 爽得很](https://jiajunhuang.com/articles/2019_06_15-leave_wechat_for_5_days.md.html)\n- 2019/06/11 - [frp 源码阅读与分析(一)：流程和概念](https://jiajunhuang.com/articles/2019_06_11-frpc_source_code_part1.md.html)\n- 2019/06/10 - [学习frp源码之简洁的在两个connection之间转发流量](https://jiajunhuang.com/articles/2019_06_10-learn_from_frp_source_code.md.html)\n- 2019/06/09 - [自己动手写一个反向代理](https://jiajunhuang.com/articles/2019_06_09-write_you_a_simple_reverse_proxy.md.html)\n- 2019/06/08 - [从XMonad迁移到i3](https://jiajunhuang.com/articles/2019_06_08-migrate_from_xmonad_to_i3wm.md.html)\n- 2019/06/08 - [读《债务危机》](https://jiajunhuang.com/articles/2019_06_08-big_debt_crises.md.html)\n- 2019/06/06 - [socks5 协议详解](https://jiajunhuang.com/articles/2019_06_06-socks5.md.html)\n- 2019/06/06 - [服务器IP被ban学到的经验](https://jiajunhuang.com/articles/2019_06_06-ip_ban.md.html)\n- 2019/06/04 - [开启HSTS(HTTP Strict Transport Security)](https://jiajunhuang.com/articles/2019_06_04-hsts.md.html)\n- 2019/06/01 - [从Chrome切换到Firefox](https://jiajunhuang.com/articles/2019_06_01-from_chrome_to_firefox.md.html)\n- 2019/06/01 - [网络乞讨之合并支付宝和微信的收款二维码](https://jiajunhuang.com/articles/2019_06_01-combine_wechat_alipay.md.html)\n- 2019/05/31 - [Linux下当笔记本合上盖子之后只使用扩展显示器](https://jiajunhuang.com/articles/2019_05_31-turnoff_screen_when_lid_is_closed.md.html)\n- 2019/05/31 - [nomad简明教程](https://jiajunhuang.com/articles/2019_05_31-nomad.md.html)\n- 2019/05/30 - [Ubuntu 18.04 dhcp更换新IP](https://jiajunhuang.com/articles/2019_05_30-ubuntu_1804_dhcp_new_ip.md.html)\n- 2019/05/29 - [Python中的新式类(new style class)和老式类(old style class)](https://jiajunhuang.com/articles/2019_05_29-python_old_new_style_class.md.html)\n- 2019/05/18 - [Python Requests 简明教程](https://jiajunhuang.com/articles/2019_05_18-requests.md.html)\n- 2019/05/15 - [密码技术简明教程(三)：证书和TLS](https://jiajunhuang.com/articles/2019_05_15-crypto_part3.md.html)\n- 2019/05/14 - [SEO学习笔记](https://jiajunhuang.com/articles/2019_05_14-seo.md.html)\n- 2019/05/14 - [密码技术简明教程(二)：散列、消息认证码和数字签名](https://jiajunhuang.com/articles/2019_05_14-crypto_part2.md.html)\n- 2019/05/12 - [密码技术简明教程(一)：对称加密和非对称加密](https://jiajunhuang.com/articles/2019_05_12-crypto.md.html)\n- 2019/05/10 - [Kubernetes 笔记](https://jiajunhuang.com/articles/2019_05_10-kubernetes_tutorial.md.html)\n- 2019/05/09 - [go mod 和 logrus 路径大小写的问题](https://jiajunhuang.com/articles/2019_05_09-go_mod_logrus.md.html)\n- 2019/05/08 - [Flask自动加载Blueprint](https://jiajunhuang.com/articles/2019_05_08-flask_load_bp_automaticly.md.html)\n- 2019/05/07 - [在KVM里安装Minikube](https://jiajunhuang.com/articles/2019_05_07-minikube_kvm.md.html)\n- 2019/04/29 - [搞定面试中的系统设计题](https://jiajunhuang.com/articles/2019_04_29-system_design.md.html)\n- 2019/04/25 - [Crontab + Sendmail实现定时任务并且通知](https://jiajunhuang.com/articles/2019_04_25-crontab_sendmail.md.html)\n- 2019/04/23 - [Nginx设置Referer来防止盗图](https://jiajunhuang.com/articles/2019_04_23-nginx_referer.md.html)\n- 2019/04/20 - [Graphviz dot简明教程](https://jiajunhuang.com/articles/2019_04_20-graphviz_dot.md.html)\n- 2019/04/19 - [jQuery简明教程](https://jiajunhuang.com/articles/2019_04_19-jquery.md.html)\n- 2019/04/18 - [Python RQ(Redis Queue)添加gevent支持](https://jiajunhuang.com/articles/2019_04_18-python_rq_gevent.md.html)\n- 2019/04/17 - [技术人，光有技术是不行的](https://jiajunhuang.com/articles/2019_04_17-tech_only_is_bad.md.html)\n- 2019/04/17 - [读《超级运营术》- 如何做社区？](https://jiajunhuang.com/articles/2019_04_17-chaojiyunyingshu.md.html)\n- 2019/04/06 - [使用shairport-sync搭建airplay音频服务器](https://jiajunhuang.com/articles/2019_04_06-shairport_sync.md.html)\n- 2019/04/06 - [搭建aria2服务器](https://jiajunhuang.com/articles/2019_04_06-aria2.md.html)\n- 2019/04/05 - [VirtManager Windows自适应屏幕](https://jiajunhuang.com/articles/2019_04_05-virt_manager_win.md.html)\n- 2019/04/03 - [使用btrfs组建RAID1](https://jiajunhuang.com/articles/2019_04_03-btrfs_raid1.md.html)\n- 2019/04/01 - [Swagger? 不好用](https://jiajunhuang.com/articles/2019_04_01-swagger_i_dislike.md.html)\n- 2019/03/29 - [Golang/Python最佳实践](https://jiajunhuang.com/articles/2019_03_29-python_golang_best_practice.md.html)\n- 2019/03/24 - [读《毛泽东选集》](https://jiajunhuang.com/articles/2019_03_24-mao.md.html)\n- 2019/03/19 - [GORM源码阅读与分析](https://jiajunhuang.com/articles/2019_03_19-gorm.md.html)\n- 2019/03/16 - [随想](https://jiajunhuang.com/articles/2019_03_16-tittle_tattle.md.html)\n- 2019/03/15 - [Golang中的错误处理](https://jiajunhuang.com/articles/2019_03_15-golang_errors.md.html)\n- 2019/03/14 - [Golang 的槽点](https://jiajunhuang.com/articles/2019_03_14-golang_bad_side.md.html)\n- 2019/03/12 - [一个想当然的bug](https://jiajunhuang.com/articles/2019_03_12-golang_strings_split.md.html)\n- 2019/03/06 - [读《稀缺》](https://jiajunhuang.com/articles/2019_03_06-scarcity.md.html)\n- 2019/03/03 - [读《影响力》](https://jiajunhuang.com/articles/2019_03_03-influence.md.html)\n- 2019/03/01 - [读《自控力》](https://jiajunhuang.com/articles/2019_03_01-self_control.md.html)\n- 2019/02/27 - [Containerd简明教程](https://jiajunhuang.com/articles/2019_02_27-containerd_tutorial.md.html)\n- 2019/02/26 - [软件设计套路之推拉模式](https://jiajunhuang.com/articles/2019_02_26-push_pull_system.md.html)\n- 2019/01/30 - [记一次Golang TLS编程踩坑](https://jiajunhuang.com/articles/2019_01_30-golang_tls.md.html)\n- 2019/01/13 - [杂谈](https://jiajunhuang.com/articles/2019_01_13-goroutine.md.html)\n- 2019/01/12 - [使用autossh实现内网穿透](https://jiajunhuang.com/articles/2019_01_12-autossh.md.html)\n- 2019/01/07 - [Linux线程内存模型](https://jiajunhuang.com/articles/2019_01_07-linux_thread_mem_layout.md.html)\n- 2019/01/03 - [关闭手机通知，修复碎片化的生活](https://jiajunhuang.com/articles/2019_01_03-drop_notifications.md.html)\n- 2019/01/01 - [Linux下系统调用的过程](https://jiajunhuang.com/articles/2019_01_01-system_call.md.html)\n- 2018/12/27 - [Redis 5.0 Stream简明教程](https://jiajunhuang.com/articles/2018_12_27-redis_stream.md.html)\n- 2018/12/27 - [耍耍OverlayFS](https://jiajunhuang.com/articles/2018_12_27-overlayfs.md.html)\n- 2018/12/26 - [删除分区表](https://jiajunhuang.com/articles/2018_12_26-delete_disk_partition_table.md.html)\n- 2018/12/24 - [YouCompleteMe ycmd server SHUTDOWN 和 pyenv的问题](https://jiajunhuang.com/articles/2018_12_24-ycm_pyenv.md.html)\n- 2018/12/24 - [Docker组件介绍（二）：shim, docker-init和docker-proxy](https://jiajunhuang.com/articles/2018_12_24-docker_components_part2.md.html)\n- 2018/12/22 - [Docker组件介绍（一）：runc和containerd](https://jiajunhuang.com/articles/2018_12_22-docker_components.md.html)\n- 2018/12/16 - [Prometheus MySQL Exporter源码阅读与分析](https://jiajunhuang.com/articles/2018_12_16-prometheus_mysqld_exporter.md.html)\n- 2018/12/13 - [MySQL性能指标](https://jiajunhuang.com/articles/2018_12_13-db_metrics.md.html)\n- 2018/12/12 - [使用Dropbox来备份服务器文件](https://jiajunhuang.com/articles/2018_12_12-use_dropbox_to_backup_server.md.html)\n- 2018/12/10 - [《计算机网络-系统方法》读书笔记](https://jiajunhuang.com/articles/2018_12_10-computer_network_systems_approach.md.html)\n- 2018/12/08 - [Y Combinator《如何创业》笔记](https://jiajunhuang.com/articles/2018_12_08-yc_startup.md.html)\n- 2018/12/01 - [Go类型嵌套](https://jiajunhuang.com/articles/2018_12_01-go_embedding.md.html)\n- 2018/11/28 - [etcd源码阅读与分析（五）：mvcc](https://jiajunhuang.com/articles/2018_11_28-etcd_source_code_analysis_mvvc.md.html)\n- 2018/11/27 - [etcd源码阅读与分析（四）：lease](https://jiajunhuang.com/articles/2018_11_27-etcd_source_code_analysis_lease.md.html)\n- 2018/11/26 - [干了这碗叔本华牌毒鸡汤 --- 《人生的智慧》](https://jiajunhuang.com/articles/2018_11_26-the_wisdom_of_life_on_human_nature.md.html)\n- 2018/11/24 - [Memory leak in net/http](https://jiajunhuang.com/articles/2018_11_24-memory_leak_in_net_http.md.html)\n- 2018/11/24 - [etcd源码阅读与分析（三）：wal](https://jiajunhuang.com/articles/2018_11_24-etcd_source_code_analysis_wal.md.html)\n- 2018/11/22 - [etcd源码阅读与分析（二）：raft](https://jiajunhuang.com/articles/2018_11_22-etcd_source_code_analysis_raft.md.html)\n- 2018/11/20 - [etcd源码阅读与分析（一）：raftexample](https://jiajunhuang.com/articles/2018_11_20-etcd_source_code_analysis_raftexample.md.html)\n- 2018/11/18 - [虚拟机里的Ubuntu sudo时卡住](https://jiajunhuang.com/articles/2018_11_18-ubuntu_sudo_hang.md.html)\n- 2018/11/16 - [Raft论文阅读笔记](https://jiajunhuang.com/articles/2018_11_16-raft.md.html)\n- 2018/11/16 - [Go访问私有变量](https://jiajunhuang.com/articles/2018_11_16-go_private_variable.md.html)\n- 2018/11/15 - [避免全局变量](https://jiajunhuang.com/articles/2018_11_15-avoid_global_states.md.html)\n- 2018/11/13 - [Go的unsafe包](https://jiajunhuang.com/articles/2018_11_13-golang_package_unsafe.md.html)\n- 2018/11/12 - [Golang中实现禁止拷贝](https://jiajunhuang.com/articles/2018_11_12-golang_nocopy.md.html)\n- 2018/11/11 - [人生如戏，全靠演技 -- 《日常生活中的自我呈现》读后感](https://jiajunhuang.com/articles/2018_11_11-the_presentation_of_self_in_everyday_life.md.html)\n- 2018/11/10 - [数据库事务](https://jiajunhuang.com/articles/2018_11_10-transaction.md.html)\n- 2018/11/10 - [Golang的反射](https://jiajunhuang.com/articles/2018_11_10-golang_reflection.md.html)\n- 2018/11/09 - [把网站去掉CSS之后](https://jiajunhuang.com/articles/2018_11_09-drop_css.md.html)\n- 2018/11/07 - [处理并发的方式](https://jiajunhuang.com/articles/2018_11_07-concurrency.md.html)\n- 2018/11/02 - [常见的索引方式](https://jiajunhuang.com/articles/2018_11_02-index.md.html)\n- 2018/11/01 - [Golang 实践经验](https://jiajunhuang.com/articles/2018_11_01-golang_practice.md.html)\n- 2018/10/23 - [高性能MySQL笔记第一章](https://jiajunhuang.com/articles/2018_10_23-high_performance_mysql_chap1.md.html)\n- 2018/10/21 - [面试的一些技巧](https://jiajunhuang.com/articles/2018_10_21-interview_techniques.md.html)\n- 2018/10/13 - [HTTP/2 简介](https://jiajunhuang.com/articles/2018_10_13-http2.md.html)\n- 2018/09/24 - [独立运营博客一年的一些数据分享](https://jiajunhuang.com/articles/2018_09_24-blogging_one_year.md.html)\n- 2018/09/22 - [To B(usiness) 和 To C(ustomer)](https://jiajunhuang.com/articles/2018_09_22-to_b_to_c.md.html)\n- 2018/09/16 - [Cookie 中的secure和httponly属性](https://jiajunhuang.com/articles/2018_09_16-cookie_secure_httponly.md.html)\n- 2018/09/16 - [常见的软件架构套路](https://jiajunhuang.com/articles/2018_09_16-common_software_archtecture_pattern.md.html)\n- 2018/09/10 - [Google Ads使用体验](https://jiajunhuang.com/articles/2018_09_10-google_ads.md.html)\n- 2018/09/07 - [Go的custom import path](https://jiajunhuang.com/articles/2018_09_07-go_custom_import_path.md.html)\n- 2018/09/06 - [如何挖掘二级子域名？](https://jiajunhuang.com/articles/2018_09_06-how_to_dig_subdomain.md.html)\n- 2018/09/03 - [Go Module 简明教程](https://jiajunhuang.com/articles/2018_09_03-go_module.md.html)\n- 2018/09/02 - [写了一个Telegram Bot：自动化分享高质量内容](https://jiajunhuang.com/articles/2018_09_02-write_a_tgbot.md.html)\n- 2018/09/01 - [Vim打开很慢，怎么找出最慢的插件？怎么解决？](https://jiajunhuang.com/articles/2018_09_01-vim_speed_up.md.html)\n- 2018/09/01 - [ArchLinux 怎么降级 package ？](https://jiajunhuang.com/articles/2018_09_01-archlinux_downgrade_package.md.html)\n- 2018/08/29 - [Web后端工程师进阶指南(2018)](https://jiajunhuang.com/articles/2018_08_29-become_a_better_programmer.md.html)\n- 2018/08/28 - [macOS ansible 遇到 rsync: --chown=www-data: unknown option](https://jiajunhuang.com/articles/2018_08_28-mac_rsync_unknow_option.md.html)\n- 2018/08/28 - [How to implement fork syscall in Golang?](https://jiajunhuang.com/articles/2018_08_28-how_does_golang_implement_fork_syscall.md.html)\n- 2018/08/26 - [关于运营的思考-运营要怎么做？](https://jiajunhuang.com/articles/2018_08_26-about_traffic.md.html)\n- 2018/08/24 - [Python中实现单例模式的n种方式和原理](https://jiajunhuang.com/articles/2018_08_24-python_singleton.md.html)\n- 2018/08/23 - [Golang defer中修改返回值](https://jiajunhuang.com/articles/2018_08_23-go_defer_named_return_values.md.html)\n- 2018/08/12 - [Python dataclass 源码阅读与分析](https://jiajunhuang.com/articles/2018_08_12-python_dataclasses.md.html)\n- 2018/08/08 - [gRPC-gateway 源码阅读与分析](https://jiajunhuang.com/articles/2018_08_08-grpc_gateway_source_code.md.html)\n- 2018/08/04 - [如何阅读源代码](https://jiajunhuang.com/articles/2018_08_04-how_to_read_source_code.md.html)\n- 2018/07/22 - [我心目中的配置中心应该怎么做？](https://jiajunhuang.com/articles/2018_07_22-config_center.md.html)\n- 2018/07/18 - [设计一个HTTP网关](https://jiajunhuang.com/articles/2018_07_18-design_a_gateway.md.html)\n- 2018/07/08 - [设计一个分布式块存储](https://jiajunhuang.com/articles/2018_07_08-design_a_chunked_distributed_file_system.md.html)\n- 2018/06/24 - [Linux低电量自动关机](https://jiajunhuang.com/articles/2018_06_24-linux_shutdown_when_bat_is_low.md.html)\n- 2018/06/15 - [CGO简明教程](https://jiajunhuang.com/articles/2018_06_15-cgo.md.html)\n- 2018/05/22 - [求值策略：Applicative Order vs Normal Order](https://jiajunhuang.com/articles/2018_05_22-evaluation_strategy.md.html)\n- 2018/05/17 - [High Performance MySQL阅读笔记](https://jiajunhuang.com/articles/2018_05_17-high_performance_mysql.md.html)\n- 2018/05/15 - [MySQL EXPLAIN中的filesort是什么？](https://jiajunhuang.com/articles/2018_05_15-mysql_filesort.md.html)\n- 2018/05/13 - [数据库索引设计与优化](https://jiajunhuang.com/articles/2018_05_13-mysql_index.md.html)\n- 2018/05/08 - [如何调试？](https://jiajunhuang.com/articles/2018_05_08-how_to_debug.md.html)\n- 2018/04/14 - [Docker CE 18.03源码阅读与分析](https://jiajunhuang.com/articles/2018_04_14-docker_ce_18_analysis.md.html)\n- 2018/04/12 - [容器时代的日志处理](https://jiajunhuang.com/articles/2018_04_12-docker_logging.md.html)\n- 2018/04/10 - [Golang和Thrift](https://jiajunhuang.com/articles/2018_04_10-golang_thrift.md.html)\n- 2018/04/05 - [折腾Kubernetes](https://jiajunhuang.com/articles/2018_04_05-kubernetes.md.html)\n- 2018/04/03 - [协程(coroutine)简介 - 什么是协程？](https://jiajunhuang.com/articles/2018_04_03-coroutine.md.html)\n- 2018/03/29 - [goroutine 切换的时候发生了什么？](https://jiajunhuang.com/articles/2018_03_29-goroutine_schedule.md.html)\n- 2018/03/19 - [Prometheus 数据类型](https://jiajunhuang.com/articles/2018_03_19-prometheus.md.html)\n- 2018/03/16 - [Gin源码阅读与分析](https://jiajunhuang.com/articles/2018_03_16-gin_source_code.md.html)\n- 2018/03/10 - [如何面试-作为面试官得到的经验](https://jiajunhuang.com/articles/2018_03_10-interview.md.html)\n- 2018/03/09 - [自己写一个容器](https://jiajunhuang.com/articles/2018_03_09-write_you_a_container.md.html)\n- 2018/03/08 - [Golang(Go语言)中实现典型的fork调用](https://jiajunhuang.com/articles/2018_03_08-golang_fork.md.html)\n- 2018/02/26 - [软件开发之禅---大事化小，各个击破](https://jiajunhuang.com/articles/2018_02_26-zen_of_dev.md.html)\n- 2018/02/25 - [程序员的自我修养：链接，装载与库 阅读笔记](https://jiajunhuang.com/articles/2018_02_25-linker_loader.md.html)\n- 2018/02/24 - [Redis源码阅读与分析一：sds](https://jiajunhuang.com/articles/2018_02_24-redis_source_code_sds.md.html)\n- 2018/02/24 - [Redis源码阅读与分析三：哈希表](https://jiajunhuang.com/articles/2018_02_24-redis_source_code_hash_table.md.html)\n- 2018/02/24 - [Redis源码阅读与分析二：双链表](https://jiajunhuang.com/articles/2018_02_24-redis_source_code_doubly_linked_list.md.html)\n- 2018/02/02 - [Golang runtime 源码阅读与分析](https://jiajunhuang.com/articles/2018_02_02-golang_runtime.md.html)\n- 2018/01/31 - [Golang的一些坑](https://jiajunhuang.com/articles/2018_01_31-golang_traps.md.html)\n- 2018/01/30 - [GC 垃圾回收](https://jiajunhuang.com/articles/2018_01_30-gc.md.html)\n- 2018/01/28 - [设计一个路由](https://jiajunhuang.com/articles/2018_01_28-router_design.md.html)\n- 2018/01/22 - [Go语言性能优化实战](https://jiajunhuang.com/articles/2018_01_22-golang_optimization.md.html)\n- 2018/01/14 - [那些年开发的时候踩过的坑](https://jiajunhuang.com/articles/2018_01_14-pitfalls.md.html)\n- 2018/01/08 - [(关系型)数据库优化总结](https://jiajunhuang.com/articles/2018_01_08-db_optimizations.md.html)\n- 2018/01/04 - [动态规划民科教程](https://jiajunhuang.com/articles/2018_01_04-dynamic_programming.md.html)\n- 2017/12/30 - [Golang 分布式异步任务队列 Machinery 教程](https://jiajunhuang.com/articles/2017_12_30-golang_task_queue.md.html)\n- 2017/12/27 - [使用geohash完成地理距离计算](https://jiajunhuang.com/articles/2017_12_27-geohash.md.html)\n- 2017/12/20 - [2018年就要到了，这一年都做了什么呢？](https://jiajunhuang.com/articles/2017_12_20-2017_is_over_and_2018_is_coming.md.html)\n- 2017/12/02 - [算法导论阅读笔记 --- 排序算法](https://jiajunhuang.com/articles/2017_12_02-algorithms_sorting.md.html)\n- 2017/11/29 - [短链系统的实现](https://jiajunhuang.com/articles/2017_11_29-short_url.md.html)\n- 2017/11/29 - [Git HTTPS 如何保存密码](https://jiajunhuang.com/articles/2017_11_29-git_credential_store.md.html)\n- 2017/11/13 - [程序员修炼之道 阅读笔记](https://jiajunhuang.com/articles/2017_11_13-the_programmatic_programmer.md.html)\n- 2017/11/04 - [Python开发实践经验](https://jiajunhuang.com/articles/2017_11_04-python_develop_practice.md.html)\n- 2017/10/25 - [Golang实现平滑重启(优雅重启)](https://jiajunhuang.com/articles/2017_10_25-golang_graceful_restart.md.html)\n- 2017/10/24 - [traefik 教程](https://jiajunhuang.com/articles/2017_10_24-traefik.md.html)\n- 2017/10/19 - [Web开发简介系列](https://jiajunhuang.com/articles/2017_10_19-web_dev_series.md.html)\n- 2017/10/19 - [Web开发系列(九)：消息队列，异步任务](https://jiajunhuang.com/articles/2017_10_19-web_dev_part9.md.html)\n- 2017/10/19 - [Web开发系列(十一）：数据库扩展](https://jiajunhuang.com/articles/2017_10_19-web_dev_part11.md.html)\n- 2017/10/19 - [Web开发系列(十)：事务和锁](https://jiajunhuang.com/articles/2017_10_19-web_dev_part10.md.html)\n- 2017/10/19 - [Nginx作为TCP/UDP的负载均衡](https://jiajunhuang.com/articles/2017_10_19-nginx_as_tcp_load_balancing.md.html)\n- 2017/10/18 - [Web开发系列(八)：单点故障，负载均衡](https://jiajunhuang.com/articles/2017_10_18-web_dev_part8.md.html)\n- 2017/10/18 - [Web开发系列(七)：缓存，CDN](https://jiajunhuang.com/articles/2017_10_18-web_dev_part7.md.html)\n- 2017/10/18 - [Web开发系列(六)：关系型数据库，ORM](https://jiajunhuang.com/articles/2017_10_18-web_dev_part6.md.html)\n- 2017/10/18 - [Nginx 请求匹配规则](https://jiajunhuang.com/articles/2017_10_18-nginx_request_handle.md.html)\n- 2017/10/17 - [Web开发系列(五)：form, json, xml](https://jiajunhuang.com/articles/2017_10_17-web_dev_part5.md.html)\n- 2017/10/16 - [Web开发系列(四)：Flask, Tornado和WSGI](https://jiajunhuang.com/articles/2017_10_16-web_dev_part4.md.html)\n- 2017/10/15 - [Web开发系列(三)：什么是HTML,CSS,JS？](https://jiajunhuang.com/articles/2017_10_15-web_dev_part3.md.html)\n- 2017/10/14 - [Web开发系列(二)：HTTP协议](https://jiajunhuang.com/articles/2017_10_14-web_dev_part2.md.html)\n- 2017/10/13 - [Web开发系列(一)：从输入网址到最后，这个过程经历了什么？](https://jiajunhuang.com/articles/2017_10_13-web_dev_part1.md.html)\n- 2017/10/11 - [SNI: 让Nginx在一个IP上使用多个证书](https://jiajunhuang.com/articles/2017_10_11-sni.md.html)\n- 2017/09/27 - [Haskell: infixl, infixr, infix](https://jiajunhuang.com/articles/2017_09_27-haskell_infix.md.html)\n- 2017/09/26 - [Haskell简明教程（五）：处理JSON](https://jiajunhuang.com/articles/2017_09_26-learn_you_a_haskell_part_5.md.html)\n- 2017/09/25 - [Haskell简明教程（四）：Monoid, Applicative, Monad](https://jiajunhuang.com/articles/2017_09_25-learn_you_a_haskell_part_4.md.html)\n- 2017/09/22 - [HTTPS 的详细流程](https://jiajunhuang.com/articles/2017_09_22-https_processes.md.html)\n- 2017/09/21 - [OAuth2 为什么需要 Authorization Code?](https://jiajunhuang.com/articles/2017_09_21-oauth2.md.html)\n- 2017/09/20 - [任务队列怎么写？python rq源码阅读与分析](https://jiajunhuang.com/articles/2017_09_20-task_queue_python_rq.md.html)\n- 2017/09/19 - [XMonad 配置教程](https://jiajunhuang.com/articles/2017_09_19-xmonad.md.html)\n- 2017/09/18 - [Haskell简明教程（三）：Haskell语法](https://jiajunhuang.com/articles/2017_09_18-learn_you_a_haskell_part_3.md.html)\n- 2017/09/17 - [Haskell简明教程（二）：从命令式语言进行抽象](https://jiajunhuang.com/articles/2017_09_17-learn_you_a_haskell_part_2.md.html)\n- 2017/09/11 - [Haskell简明教程（一）：从递归说起](https://jiajunhuang.com/articles/2017_09_11-learn_you_a_haskell_part_1.md.html)\n- 2017/09/03 - [2017年必装的VIM插件推荐](https://jiajunhuang.com/articles/2017_09_03-2017_vim_plugins.md.html)\n- 2017/09/02 - [TCP/IP简明教程 - 从零构建TCP/IP协议（二）连接，断开与拥塞控制](https://jiajunhuang.com/articles/2017_09_02-tcp_ip_part2.md.html)\n- 2017/08/12 - [TCP/IP简明教程 - 从零构建TCP/IP协议（这次叫PCT协议）](https://jiajunhuang.com/articles/2017_08_12-tcp_ip.md.html)\n- 2017/08/09 - [Lua Manual 阅读笔记](https://jiajunhuang.com/articles/2017_08_09-lua_manual.md.html)\n- 2017/07/27 - [Golang Map 源码阅读与分析](https://jiajunhuang.com/articles/2017_07_27-golang_map.md.html)\n- 2017/07/26 - [MySQL 零碎知识 - MySQL必知必会](https://jiajunhuang.com/articles/2017_07_26-mysql.md.html)\n- 2017/07/18 - [Golang slice 源码阅读与分析](https://jiajunhuang.com/articles/2017_07_18-golang_slice.md.html)\n- 2017/07/15 - [经典好书推荐(2017)](https://jiajunhuang.com/articles/2017_07_15-books.md.html)\n- 2017/07/11 - [Golang log库 源码阅读与分析](https://jiajunhuang.com/articles/2017_07_11-golang_log.md.html)\n- 2017/07/02 - [毕业后一年](https://jiajunhuang.com/articles/2017_07_02-one_year_after_graduate.md.html)\n- 2017/06/22 - [ansible 简明教程](https://jiajunhuang.com/articles/2017_06_22-ansible.md.html)\n- 2017/06/02 - [自己写个搜索引擎](https://jiajunhuang.com/articles/2017_06_02-write_yourself_a_simple_search_engine.md.html)\n- 2017/05/24 - [HTTP 路由的两种常见设计形式](https://jiajunhuang.com/articles/2017_05_24-http_router_design.md.html)\n- 2017/05/12 - [Golang的short variable declaration](https://jiajunhuang.com/articles/2017_05_12-golang_short_variable_declaration.md.html)\n- 2017/04/26 - [Greenlet和Stackless Python](https://jiajunhuang.com/articles/2017_04_26-greenlet.md.html)\n- 2017/04/25 - [写一个简单的ORM](https://jiajunhuang.com/articles/2017_04_25-write_your_own_orm.md.html)\n- 2017/04/19 - [从源码看Python的descriptor](https://jiajunhuang.com/articles/2017_04_19-python_descriptor_from_source_code.md.html)\n- 2017/04/16 - [Python字符串格式化](https://jiajunhuang.com/articles/2017_04_16-python_string_format.md.html)\n- 2017/04/08 - [Gunicorn 简明教程](https://jiajunhuang.com/articles/2017_04_08-gunicorn.md.html)\n- 2017/03/29 - [Raft 论文阅读笔记](https://jiajunhuang.com/articles/2017_03_29-raft.md.html)\n- 2017/03/06 - [什么是 Golang Comparable Types](https://jiajunhuang.com/articles/2017_03_06-golang_comparable_types.md.html)\n- 2017/03/02 - [MapReduce 论文阅读](https://jiajunhuang.com/articles/2017_03_02-map_reduce.md.html)\n- 2017/03/02 - [GFS 论文阅读](https://jiajunhuang.com/articles/2017_03_02-gfs.md.html)\n- 2017/02/24 - [一起来做贼：Goroutine原理和Work stealing](https://jiajunhuang.com/articles/2017_02_24-goroutine_and_work_stealing.md.html)\n- 2017/02/15 - [Go语言的defer, panic和recover](https://jiajunhuang.com/articles/2017_02_15-go_defer_panic_and_recover.md.html)\n- 2017/01/24 - [再读vim help：vim小技巧](https://jiajunhuang.com/articles/2017_01_24-vim_manual.md.html)\n- 2017/01/24 - [再读 Python Language Reference](https://jiajunhuang.com/articles/2017_01_24-python_language_reference.md.html)\n- 2017/01/22 - [设计模式（2）- 深入浅出设计模式 阅读笔记](https://jiajunhuang.com/articles/2017_01_22-head_first_design_patterns_2.md.html)\n- 2017/01/21 - [设计模式（1）- 深入浅出设计模式 阅读笔记](https://jiajunhuang.com/articles/2017_01_21-head_first_design_patterns.md.html)\n- 2017/01/15 - [Cython! Python和C两个世界的交叉点](https://jiajunhuang.com/articles/2017_01_15-cython_rocks.md.html)\n- 2017/01/09 - [socketserver 源码阅读与分析](https://jiajunhuang.com/articles/2017_01_09-socketserver_source_code.md.html)\n- 2017/01/08 - [functools 源码阅读与分析](https://jiajunhuang.com/articles/2017_01_08-functools_source_code.md.html)\n- 2017/01/07 - [contextlib代码阅读](https://jiajunhuang.com/articles/2017_01_07-contextlib_source_code.md.html)\n- 2017/01/06 - [Redis通信协议阅读](https://jiajunhuang.com/articles/2017_01_06-redis_protocol_specification.md.html)\n- 2017/01/06 - [Collections 源码阅读与分析](https://jiajunhuang.com/articles/2017_01_06-collections_source_code.md.html)\n- 2016/12/31 - [2016年就要结束了，2017年就要开始啦！](https://jiajunhuang.com/articles/2016_12_31-2016_is_over_and_2017_is_coming.md.html)\n- 2016/12/29 - [unittest 源代码阅读](https://jiajunhuang.com/articles/2016_12_29-unittest_source_code.md.html)\n- 2016/12/26 - [APUEv3 - 重读笔记](https://jiajunhuang.com/articles/2016_12_26-apue_v3.md.html)\n- 2016/12/22 - [Mock源码阅读与分析](https://jiajunhuang.com/articles/2016_12_22-mock_source_code.md.html)\n- 2016/12/16 - [Thinking in Python](https://jiajunhuang.com/articles/2016_12_16-thinking_in_python.md.html)\n- 2016/12/15 - [我的代码进CPython标准库啦](https://jiajunhuang.com/articles/2016_12_15-my_code_in_python_stdlib.md.html)\n- 2016/12/09 - [Python零碎小知识](https://jiajunhuang.com/articles/2016_12_09-python_fragments.md.html)\n- 2016/12/07 - [工作一年的总结](https://jiajunhuang.com/articles/2016_12_07-work.md.html)\n- 2016/12/07 - [Python和单元测试](https://jiajunhuang.com/articles/2016_12_07-python_unittest.md.html)\n- 2016/12/06 - [Python 的继承](https://jiajunhuang.com/articles/2016_12_06-python_c3_mro.md.html)\n- 2016/12/06 - [MongoDB 的一些坑](https://jiajunhuang.com/articles/2016_12_06-mongodb.md.html)\n- 2016/11/29 - [Python的yield关键字有什么作用？](https://jiajunhuang.com/articles/2016_11_29-python_yield.md.html)\n- 2016/11/27 - [借助coroutine用同步的语法写异步](https://jiajunhuang.com/articles/2016_11_27-python_coroutine.md.html)\n- 2016/11/21 - [Python3函数参数中的星号](https://jiajunhuang.com/articles/2016_11_21-py3k_asterisk.rst.html)\n- 2016/11/08 - [使用Git Hooks](https://jiajunhuang.com/articles/2016_11_08-use_git_hooks.rst.html)\n- 2016/11/05 - [Token Bucket 算法](https://jiajunhuang.com/articles/2016_11_05-token_bucket.rst.html)\n- 2016/11/03 - [nginx配置笔记](https://jiajunhuang.com/articles/2016_11_03-nginx_conf.rst.html)\n- 2016/09/15 - [阅读Flask源码](https://jiajunhuang.com/articles/2016_09_15-flask_source_code.rst.html)\n- 2016/08/25 - [尤克里里](https://jiajunhuang.com/articles/2016_08_25-ukulele.rst.html)\n- 2016/06/20 - [学习使用Bootstrap4的栅格系统](https://jiajunhuang.com/articles/2016_06_20-bootstrap_v4_grid_system.rst.html)\n- 2016/06/19 - [利用Github的WebHook完成自动部署](https://jiajunhuang.com/articles/2016_06_19-use_github_webhooks.rst.html)\n- 2016/06/18 - [使用Tornado和rst来写博客](https://jiajunhuang.com/articles/2016_06_18-write_blog_with_tornado_and_rst.rst.html)\n- 2016/06/05 - [Haskell do notation](https://jiajunhuang.com/articles/2016_06_05-haskell_do_notation.rst.html)\n- 2016/05/22 - [foldl 和 foldr 的变换](https://jiajunhuang.com/articles/2016_05_22-foldl_and_foldr.rst.html)\n- 2016/05/05 - [Haskell TypeClass 笔记](https://jiajunhuang.com/articles/2016_05_05-typeclassopedia.rst.html)\n- 2016/04/03 - [重新捡起你那吃灰的树莓派](https://jiajunhuang.com/articles/2016_04_03-raspberrypi.rst.html)\n- 2016/03/14 - [Tornado 源码阅读](https://jiajunhuang.com/articles/2016_03_14-tornado.rst.html)\n- 2016/03/06 - [JavaScript权威指南笔记](https://jiajunhuang.com/articles/2016_03_06-notes_on_js_the_definitive_guide.rst.html)\n- 2016/03/05 - [Python零碎知识汇总](https://jiajunhuang.com/articles/2016_03_05-python_fragmentary_knowledge.rst.html)\n- 2016/02/06 - [C语言的位操作](https://jiajunhuang.com/articles/2016_02_06-bitwise_operation.rst.html)\n- 2016/01/25 - [分治](https://jiajunhuang.com/articles/2016_01_25-divide_and_conqure.rst.html)\n- 2015/12/05 - [关于python的decorator和descriptor](https://jiajunhuang.com/articles/2015_12_05-python_descriptor_and_decorator.rst.html)\n- 2015/10/09 - [程序设计实践笔记](https://jiajunhuang.com/articles/2015_10_09-notes_on_the_practice_of_programming.rst.html)\n- 2015/09/05 - [Thinking Recursively](https://jiajunhuang.com/articles/2015_09_05-thinking_recursively.rst.html)\n- 2015/06/22 - [Block I/O](https://jiajunhuang.com/articles/2015_06_22-notes_on_linux_kernel_development_chap14.rst.html)\n- 2015/03/17 - [如何解读c的声明](https://jiajunhuang.com/articles/2015_03_17-declaration_of_c_pointers.rst.html)\n- 2015/01/11 - [关于输入法的猜想](https://jiajunhuang.com/articles/2015_01_11-my_guess_about_input_method.rst.html)\n- 2014/12/12 - [C语言与抽象思维](https://jiajunhuang.com/articles/2014_12_12-abstractions_in_c.rst.html)\n- 2014/11/04 - [C注意事项](https://jiajunhuang.com/articles/2014_11_04-traps_in_c.rst.html)\n- 2014/09/09 - [C语言中点操作符(.)和箭头操作符(-\u003e)的不同之处](https://jiajunhuang.com/articles/2014_09_09-dot_and_arrow_in_c_pointers.rst.html)\n- 2014/09/07 - [征服C指针笔记 - 数组和指针的微妙关系](https://jiajunhuang.com/articles/2014_09_07-pointer_and_array_in_c.rst.html)\n- 2014/08/22 - [关于文件权限的摘记](https://jiajunhuang.com/articles/2014_08_22-unix_file_permissions.rst.html)\n- 2014/06/17 - [用crontab完成自动化](https://jiajunhuang.com/articles/2014_06_17-use_cron.rst.html)\n\n\n\n--------------------------------------------\n\n禁止转载\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjiajunhuang%2Fblog","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjiajunhuang%2Fblog","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjiajunhuang%2Fblog/lists"}