# haokiu > haokiu 的技术博客:后端 / 前端 / 区块链 / 大数据 / linux / 其他 ## 后端 - [java 到底要不要收费](https://haokiu.com/blog/AWAwA5/index.md): 随着JDK 11发布, Oracle同时调整了JDK的授权许可证,里面包含了好几个动作。 首先, Oracle从JDK 11起把以前的商业特性全部开源给OpenJDK,这样OpenJDK 11和Ora… - [Neovide](https://haokiu.com/blog/neovide/index.md): neovide 是一个简单的 neovim 用户图像工具,相对于 Neovim 会有一些界面的提升的,但它的功能类似于终端用户界面。 neovide 的官网:https://github.com/Ke… - [目录](https://haokiu.com/blog/1f4511a4eff2422184945a24e32887e2/index.md): 目录 第1章 语法变迁 1.1 Go1的诺言 1.2 Go1到Go1.10 1.3 Go1.10过渡到Go2 1.4 Go2诞生 第2章 模块化 2.1 Go1的包机制 2.2 基于vendor的版本… - [第3章 错误处理](https://haokiu.com/blog/615b0dd45d2e4323805039e0ffb41808/index.md): 第3章 错误处理 - [第2章 模块化](https://haokiu.com/blog/8ef2da522892434187a81439c5d1dc2d/index.md): 第2章 模块化 模块化也称为包依赖管理,是管理任何大型工程必备的工具。Go语言发布十年来一直缺乏官方的模块化工具。同样在2018年,作为Go语言团队的技术领导人Russ Cox终于出手,重新发明了称为… - [第1章 语法变迁](https://haokiu.com/blog/c3984397f8e5480f81aaaeaf1b82ac23/index.md): 第1章 语法变迁 Go语言语法变化非常少,主要发生在Go1.10之前。Go1.10主要的开发工作在2017年下半年完成,在2018年初正式发布。Go1.10版可以说是Go1和Go2的分水岭,虽然语言本… - [Go2编程指南](https://haokiu.com/blog/e2e79e399c5b464295e2703c5db5739b/index.md): Go2编程指南 Go语言QQ群: 102319854, 1055927514 光谷码农课堂: https://study.163.com/provider/480000001914454/index.… - [Go2编程指南](https://haokiu.com/blog/bk-3/index.md): 目录 1.1 Go1的诺言 1.2 Go1到Go1.10 1.3 Go1.10过渡到Go2 1.4 Go2诞生 第1章 语法变迁 2.1 Go1的包机制 2.2 基于vendor的版本管理 2.3 模… - [Go2编程指南](https://haokiu.com/blog/5c22f69800184d7a8705059ee3773333/index.md): Go2编程指南 本书重点讲解Go2新特性,以及Go1教程中较少涉及的特性。本书适合对Go语言有一定基础的用户学习。对于刚学习Go语言的读者,建议先从《Go语言圣经》开始系统学习Go语言的基础知识。如果… - [2.7 模块化实践中的一些问题](https://haokiu.com/blog/1fbab86b16734c59b0bff743e512dfb2/index.md): 2.7 模块化实践中的一些问题 2.7.1 和GOPATH不兼容 2.7.2 pkg目录复杂化 TODO - [2.6 镜像和私有仓库](https://haokiu.com/blog/3681abb2d5e34af2be2ea2f170c6226f/index.md): 2.6 镜像和私有仓库 2.6.1 Fork的仓库 2.6.2 私有仓库 TODO - [2.5 子模块和多版本共存](https://haokiu.com/blog/c868302e70ab472280a428d5583e15d2/index.md): 2.5 子模块和多版本共存 2.5.1 子模块 2.5.2 多版本共存 TODO - [2.4 模块快速⼊⻔](https://haokiu.com/blog/99154ed6163e4a40bcfdc5e7d5956c7d/index.md): 2.4 模块快速⼊⻔ 2.4.1 快速入门 2.4.2 go get重新⼊⻔ 2.4.3 go.mod⽂件 2.4.4 go.sum⽂件 2.4.5 版本切换 2.4.3 命令 TODO - [2.3 模块的设计⽬标](https://haokiu.com/blog/0ade9d480b954dbc96381d011208c5f1/index.md): 2.3 模块的设计⽬标 2.3.1 模块的概念 2.3.2 不同时间可重现构建 2.3.3 不同环境可重现构建 2.3.4 语义化版本号 2.3.5 最⼩化版本选择 TODO - [2.2 基于vendor的版本管理](https://haokiu.com/blog/ba3f4751a98a484f995283b9377b90d1/index.md): 2.2 基于vendor的版本管理 2.2.1 vendor的工作机制 2.2.1 vendor的优势 TODO 2.2.1 vendor的问题 - [2.1 Go1的包机制](https://haokiu.com/blog/e07062bd3a82483893b16c9a014f22dc/index.md): 2.1 Go1的包机制 同⽬录Go源⽂件的集合构成包,而同⽬录下⼦⽬录对应的包的集合构成模块(暂不考虑子模块)。因此,要了解模块之前需要先了解包。 2.1.1 包是最小链接单位 Go语言是一种编译型的… - [1.4 Go2诞生](https://haokiu.com/blog/4f9267cc85a647979aa3803c5c435407/index.md): 1.4 Go2诞生 在2018年官方已经发布了Go2的设计草案,其中包含了令人惊喜的泛型和错误等诸多改进,在后Go1时代过去之后将是新兴的Go2时代。需要说明的是,Go2的诞生并不表示Go1被抛弃!如… - [1.3 Go1.10过渡到Go2](https://haokiu.com/blog/2756df043ed74a91bd57f134270e6cbc/index.md): 1.3 Go1.10过渡到Go2 回顾前一节中Go1到Go1.10的语法变化可发现,在Go1之后除了Go1.2的切片语法完善和Go1.9的类型别名很少有重量级的语法特性加入。这是因为Go1.2之后Go… - [1.2 Go1到Go1.10](https://haokiu.com/blog/7ec2e79995ed4c9f8b883cc07c8d78f9/index.md): 1.2 Go1到Go1.10 因为Go1承诺,Go1后序的版本都保持了向前兼容的目标。不过在从Go1发展到Go1.10的过程中,语言依然是增加了一些新的特性。本节我们简单回顾Go1到Go1.10的变化… - [1.1 Go1的诺言](https://haokiu.com/blog/3edad2cabde0428f9098185e6d62c870/index.md): 1.1 Go1的诺言 Go语言从2007年开始设计,2009年底正式开源,而第一个正式的版本Go1则是在2012年上半年发布。Go1的语法变迁主要从Go第一个正式版本开始,Go1是Go语言官方对整个社… - [beego restful path variable](https://haokiu.com/blog/RNbgLz/index.md): beego的url路径有多个变量的设置和获取方法。 在 router.go 注册 url 获取变量 - [自我提升与开源代码](https://haokiu.com/blog/e50a72b7fb4e47a9904a05621e5b692f/index.md): 自我提升与开源代码 2020 年好好读一读开源代码吧 - [主线程与工作线程的分工](https://haokiu.com/blog/450c6c7995774bec88a383c0ce41cfdc/index.md): 主线程与工作线程的分工 服务器端为了能流畅处理多个客户端链接,一般在某个线程A里面accept新的客户端连接并生成新连接的socket fd,然后将这些新连接的socketfd给另外开的数个工作线程B… - [职业规划](https://haokiu.com/blog/01f6fc4ce7c54057a2379aab6b98843f/index.md): 职业规划 给工作 4 年迷茫的程序员们的一点建议 聊聊技术人员的常见的职业问题 写给那些傻傻想做服务器开发的朋友 - [业务数据处理一定要单独开线程吗](https://haokiu.com/blog/d7e436585f754029be5279a858049912/index.md): 业务数据处理一定要单独开线程吗 在 《one thread one loop 思想》一文我们介绍了一个 loop 的主要结构一般如下所示: 对于一些业务逻辑处理比较简单、不会太耗时的应用来说,hand… - [心跳包机制设计详解](https://haokiu.com/blog/82046162d4f74d3b9745ef1e8f8cdf57/index.md): 心跳包机制设计详解 存在下面两种情形: 情形一:一个客户端连接服务器以后,如果长期没有和服务器有数据来往,可能会被防火墙程序关闭连接,有时候我们并不想要被关闭连接。例如,对于一个即时通讯软件,如果服务… - [写给那些傻傻想做服务器开发的朋友](https://haokiu.com/blog/7f969a868ee54e84982aa97c89e7cdbd/index.md): 写给那些傻傻想做服务器开发的朋友 很久以前看过一篇标题为《写给那些傻傻的,想做服务器开发的应届生》文章,无意中看到知乎上也对这篇文章进行了激烈的讨论。下面谈谈我的看法。 写在前面的话 我在七八年前就看… - [实例:一个服务器程序的架构介绍](https://haokiu.com/blog/f6db032966024846bbd5dbc28868bb17/index.md): 实例:一个服务器程序的架构介绍 本文将介绍我曾经做过的一个项目的服务器架构和服务器编程的一些重要细节。 一、程序运行环境 操作系统:Centos 7.0 编译器:gcc/g++ 4.8.3、cmake… - [如何设计断线自动重连机制](https://haokiu.com/blog/1469709fbebd462cb012819cdfb07156/index.md): 如何设计断线自动重连机制 在有连接依赖关系的服务与服务之间,或客户端与服务器之间,无论是出于方便使用、降低运维成本、提高工作效率(服务与服务之间),还是优化用户体验(客户端与服务器之间)自动重连机制通… - [日志系统的设计](https://haokiu.com/blog/1549ab1669fe40dda14c41a84df83415/index.md): 日志系统的设计 为什么需要日志 实际的软件项目产出都有一个流程,即先开发、测试,再发布生产,由于人的因素,既然是软件产品就不可能百分百没有 bug 或者逻辑错误,对于已经发布到生产的项目,一旦某个时刻… - [聊聊技术人员的常见的职业问题](https://haokiu.com/blog/1908cdb9f5c747b996136e3b3e408b8d/index.md): 聊聊技术人员的常见的职业问题 由于时间有限,很多读者提出的问题,不能一一解答,因此这篇文章,来系统地就各类型的读者遇到的一些常见职业问题回答一下: Q1 应届生如何选择自己的第一份工作? Q2 作为一… - [给工作 4 年迷茫的程序员们的一点建议](https://haokiu.com/blog/049d41c798c54956b4c2b094aacec413/index.md): 给工作 4 年迷茫的程序员们的一点建议 有公众号读者在后台向我提问: JAVA 程序员,4 年了,迷茫了,希望由前辈可以给指出一个技术路线5年左右程序员必须要掌握的知识技能树? 工作了很久了,对于目前… - [高性能服务器框架设计](https://haokiu.com/blog/95e6ea6c39e345bf8177b77fb2d24548/index.md): 高性能服务器框架设计 主线程与工作线程的分工 Reactor模式 实例:一个服务器程序的架构介绍 错误码系统的设计 日志系统的设计 如何设计断线自动重连机制 心跳包机制设计详解 业务数据处理一定要单独… - [高性能服务器架构设计总结](https://haokiu.com/blog/67da065d5a2a4917804acd4875f0f0a8/index.md): 高性能服务器架构设计总结 系列目录 第01篇 主线程与工作线程的分工 第02篇 Reactor模式 第03篇 一个服务器程序的架构介绍 第04篇 如何将socket设置为非阻塞模式 第05篇 如何编写… - [非阻塞模式下 send 和 recv 函数的返回值](https://haokiu.com/blog/7050b3d426bf44b29c25c3d30ae77006/index.md): 非阻塞模式下 send 和 recv 函数的返回值 我们来总结一下 send 和 recv 函数的各种返回值意义: | 返回值 n | 返回值含义 | | :-----------: | :-----… - [错误码系统的设计](https://haokiu.com/blog/32ba3bce20124dd380cdde0bba6ef5b9/index.md): 错误码系统的设计 本文介绍服务器开发中一组服务中错误码系统的设计理念与实践,如果读者从来没想过或者没接触过这种设计理念,建议认真体会一下这种设计思路的优点。 错误码的作用 读者如果有使用过中国电信的宽… - [Reactor模式](https://haokiu.com/blog/23cb111095cb47f3b6115efccd11086d/index.md): Reactor模式 最近一直在看游双的《高性能Linux服务器编程》一书,下载链接: http://download.csdn.net/detail/analogouslove/9673008 书上是… - [CppGuide](https://haokiu.com/blog/bk-1/index.md): Part I C++ 17 结构化绑定 pimpl 惯用法 C++必知必会的知识点 不定参数函数实现vararg系列的宏 你一定要搞明白的C函数调用方式与栈原理 利用 cmake 工具生成 Visua… - [C++ 高性能服务器网络框架设计细节](https://haokiu.com/blog/10dc93cb0ce148d1906354635024bb25/index.md): C++ 高性能服务器网络框架设计细节 这篇文章我们将介绍服务器的开发,并从多个方面探究如何开发一款高性能高并发的服务器程序。需要注意的是一般大型服务器,其复杂程度在于其业务,而不是在于其代码工程的基本… - [2020 年好好读一读开源代码吧](https://haokiu.com/blog/ea1d963411184ea88648b092380ee687/index.md): 2020 年好好读一读开源代码吧 2019 年就这么结束了,2020 年也来临了,虽然我曾对过去 2019 年做了一份总结,但是认真的来说,其实我对自己的 2019 年的收获并不太满意,一个主要的原因… - [做 Java 或者 C++ 开发都应该知道的 lsof 命令](https://haokiu.com/blog/a21d8fb5077b4bdfacf0cd5f4583f1cc/index.md): 做 Java 或者 C++ 开发都应该知道的 lsof 命令 lsof 命令是 Linux 系统的扩展工具,它的含义是 list opened filedesciptor (列出已经打开的文件描述符)… - [作者的故事](https://haokiu.com/blog/745f468dc9234e4f95ac9d848e64fa0b/index.md): 作者的故事 我的 2019 我是如何年薪五十万的 - [整型变量赋值是原子操作吗?](https://haokiu.com/blog/c5ae7c2ab16046b2b12deffde01da947/index.md): 整型变量赋值是原子操作吗? 整型变量赋值操作不是原子操作 那么为什么整型变量的操作不是原子性的呢?常见的整型变量操作有如下几种情况: 给整型变量赋值一个确定的值,如 这条指令操作一般是原子的,因为对应… - [游戏开发专题](https://haokiu.com/blog/c1e71fdf335346f5aadad6e1d1dc3e55/index.md): 游戏开发专题 1 游戏服务器开发的基本体系与服务器端开发的一些建议 2 网络游戏服务器开发框架设计介绍 3 游戏后端开发需要掌握的知识 4 关于游戏服务端架构的整理 5 各类游戏对应的服务端架构 6… - [用Visual Studio调试Linux程序](https://haokiu.com/blog/f64c601f237d4cac97445aa4b0e07369/index.md): 用Visual Studio调试Linux程序 用Visual Studio调试Linux程序?你真的没看错,这个是真的,不是标题党。当然如果你说VS2015及以上版本自带的Linux调试插件,那就算… - [详解 C++ 11 中的智能指针](https://haokiu.com/blog/913fb3f31d024baf871726b2f22cdfde/index.md): 详解 C++ 11 中的智能指针 C/C++ 语言最为人所诟病的特性之一就是存在内存泄露问题,因此后来的大多数语言都提供了内置内存分配与释放功能,有的甚至干脆对语言的使用者屏蔽了内存指针这一概念。这里… - [我是一名程序员,结婚时女友要求我用两年的工资作为彩礼,我该不该答应?](https://haokiu.com/blog/5b6afa35b0644098b8b4d0c853f20358/index.md): 我是一名程序员,结婚时女友要求我用两年的工资作为彩礼,我该不该答应? 以下内容来自于一名群友的求助,经当事人同意首发于『高性能服务器开发』公众号,文字略有改动,未经许可,不得转载。 (以下文中的“我”… - [我是如何年薪五十万的](https://haokiu.com/blog/7a566da932f2481388ca678c2dc2c1ac/index.md): 我是如何年薪五十万的 以下经历希望对广大程序员同行有点启发。 1 我姓方,码农一枚,14 年硕士毕业于某 211 学校,哎,这里就不提母校了。人到中年,还没混出什么名堂,就不给学校丢脸了。经常很多人问… - [我面试后端开发经理的经历](https://haokiu.com/blog/b9e6c063ac4a43aca14c01cc45b2f8fa/index.md): 我面试后端开发经理的经历 我去年12月份从上一家公司离职,一直到今年3月份,基本上都在面试中度过来的。 先交代下背景:坐标上海,做技术开发,我本人面试的职位是linux服务器开发,最倾向的职位是服务器… - [我的 2019](https://haokiu.com/blog/fce122b624fd44a88df285c221d765b8/index.md): 我的 2019 2019 年就这么悄无声息的过去了,我并不是一个喜欢缅怀过去的人,很多人喜欢回忆过去经历的困难,但就我倒是认为如果过去的苦难不能对将来生活质量或者人生经验有帮助,那这些苦难其实相当于白… - [为什么你的简历没人看](https://haokiu.com/blog/15d5370937664a8d84891f5e983b87f4/index.md): 为什么你的简历没人看 程序员如何写简历 - [网络通信中收发数据的正确姿势](https://haokiu.com/blog/ec34cfea56f74c0d9a622ef5cbc4f812/index.md): 网络通信中收发数据的正确姿势 在网络通信中,我们可能既要通过 socket 去发送数据也要通过 socket 来收取数据。那么一般的网络通信框架是如何收发数据的呢?注意,这里讨论的范围是基于各种 IO… - [网络通信面试题集锦](https://haokiu.com/blog/eb4b0ccb7b2942b989b3655d832bb0e0/index.md): 网络通信面试题集锦 TCP/IP协议栈层次结构 TCP三次握手需要知道的细节点 TCP四次挥手需要知道的细节点(CLOSEWAIT、TIMEWAIT、MSL) TCP与UDP的区别与适用场景 linu… - [网络编程](https://haokiu.com/blog/6e60982d515240e4b34e2f0e22647f58/index.md): 网络编程 bind 函数重难点解析 connect 函数在阻塞和非阻塞模式下的行为 select 函数重难点解析 Linux epoll 模型(含LT 模式和 ET 模式详解) socket 的阻塞模… - [腾讯后台开发实习生技能要求](https://haokiu.com/blog/5f118ee0e1be49a8a754072ecb9b441a/index.md): 腾讯后台开发实习生技能要求 如题,应届生除了要良好地掌握算法和数据结构以外,以下一些技能点列表希望对大家有帮助,有兴趣的朋友可以参考这个针对性地补缺补差。文章列出的技能点有的要求熟悉,有的了解即可,注… - [谈一谈年终奖](https://haokiu.com/blog/0f72f7a83bbb4b4fb76a05dc63f5480c/index.md): 谈一谈年终奖 转眼 2019 年就快过完了,对于广大程序员读者来说,重要的事情除了关心能不能买到回老家的车票以外,剩下的事情应该就属年终奖了。 对于 IT 行业来说,所谓年终奖其实就是公司在当年的月底… - [深入理解C/C++中的指针](https://haokiu.com/blog/ec8d1fd1cfc24923bdb71accca3fc1e4/index.md): 深入理解C/C++中的指针 C和C++中最强大的功能莫过于指针了(pointer),但是对于大多数人尤其是新手来说,指针是一个最容易出错、也最难掌握的概念了。本文将从指针的方方面面来讲述指针的概念和用… - [如何使用 Visual Studio 管理和阅读开源项目代码](https://haokiu.com/blog/9a2768ae509d48689a05cf010b262b09/index.md): 如何使用 Visual Studio 管理和阅读开源项目代码 对于 Linux C/C++ 项目,虽然我们在 Linux 系统中使用 gdb 去调试,但是通常情况下对于 C/C++ 项目笔者一般习惯使… - [如何成为一名合格的 C/C++ 开发者?](https://haokiu.com/blog/79cb378b756e457cbcb3a3c669a8e4c0/index.md): 如何成为一名合格的 C/C++ 开发者? 写在前面的话 在大多数开发或者准开发人员的认识中,C/C++ 是一门非常难的编程语言,很多人知道它的强大,但因为认为“难”造成的恐惧让很多人放弃。 笔者从学生… - [你一定要搞明白的C函数调用方式与栈原理](https://haokiu.com/blog/2d2976c6ad824a1b9e2c44ffad106432/index.md): 你一定要搞明白的C函数调用方式与栈原理 写在前面的话 这绝对不是标题党。而是C/C++开发中你必须要掌握的基础知识,也是高级技术岗位面试中高频题。我真的真的真的希望无论是学生还是广大C/C++开发者,… - [聊一聊程序员如何增加收入](https://haokiu.com/blog/cbd700214d4e4bc691c5f33f6e905343/index.md): 聊一聊程序员如何增加收入 亲爱的读者朋友,你好。我是高性能服务器开发公众号的作者,范蠡。一些老的读者应该知道,我有个同名 QQ 群叫高性能服务器开发(研究)群,目前两个群加在一起,也快五千人了吧。很多… - [聊聊如何拿大厂的 offer](https://haokiu.com/blog/61401d1e68344e7b94c634f9b00cdbe4/index.md): 聊聊如何拿大厂的 offer 为什么要进大厂 许多读者,尤其是一些学生朋友在找我聊职业规划和职场困惑时,我给的建议就是,如果你是应届生或者工作年限较短(五年以下),那一定要找个机会去大厂工作几年。 无… - [利用 telnet 命令发电子邮件](https://haokiu.com/blog/966ed73cc54b4cf5bdae1e1e5adba616/index.md): 利用 telnet 命令发电子邮件 telnet 命令是我们最常用的网络调试命令之一。如果你的机器上还没有安装 telnet 命令,可以使用如下命令安装一下: 如果一个服务程序对外开启了侦听服务,我们… - [利用 cmake 工具生成 Visual Studio 工程文件](https://haokiu.com/blog/cf3a65cd7c2a40d1a4dbfd708c471c01/index.md): 利用 cmake 工具生成 Visual Studio 工程文件 对于习惯了 Visual Studio 强大的管理项目、编码和调试功能的读者来说,在 Linux 下使用 gcc/g++ 编译、使用… - [拒绝了一家公司的offer后,他们的副总和hr总监同时打电话来询问拒绝原因并极力要求加入,我该不该去?](https://haokiu.com/blog/40c71c6aa54540abb1c141d82ca0cd49/index.md): 拒绝了一家公司的offer后,他们的副总和hr总监同时打电话来询问拒绝原因并极力要求加入,我该不该去? 网友提问: 拒绝了一家公司的offer后,他们的副总和hr总监同时打电话来询问拒绝原因并极力要求… - [技术面试与HR谈薪资技巧](https://haokiu.com/blog/d949dd8f005d45c7b6c71ea9a87a0712/index.md): 技术面试与HR谈薪资技巧 作为“生在红旗下,长在春风里”的“四有新人”(现在90后00后还有知道这个词的吗?^^),张小方同志从毕业至今,与各路HR、HRD斗智斗勇,再加上自己的不懈努力,历尽千辛万苦… - [后台开发应该读的书](https://haokiu.com/blog/b46f16d0f9f8415e94eb76455deea0f0/index.md): 后台开发应该读的书 根据我的经验来谈一谈,先介绍一下我的情况,坐标上海,后台开发(也带团队了),某知名互联网公司。 目前主流的有C++和JAVA,C++我的经验稍微多一点。我就说说我关于C++方面的学… - [后台C++开发你一定要知道的条件变量](https://haokiu.com/blog/3418f291fe18455999e74a1f1dbad72a/index.md): 后台C++开发你一定要知道的条件变量 今天因为工作需要,需要帮同事用C语言(不是C++)写一个生产者消费者的任务队列工具库,考虑到不能使用任何第三库和C++的任何特性,所以我将任务队列做成一个链表,生… - [后端开发相关的书籍](https://haokiu.com/blog/624d2104f4a54c50940f5de425c06ab0/index.md): 后端开发相关的书籍 后台开发应该读的书 - [服务器开发中网络数据分析与故障排查经验漫谈](https://haokiu.com/blog/b7d459605e1d4d46adba41bdb0c66b78/index.md): 服务器开发中网络数据分析与故障排查经验漫谈 一、 操作系统提供的网络接口 为了能更好的排查网络通信问题,我们需要熟悉操作系统提供的以下网络接口函数,列表如下: | 接口函数名称 | 接口函数描述 |… - [服务器开发通信协议设计介绍](https://haokiu.com/blog/27166845330344e4bf4f9a385e69fc94/index.md): 服务器开发通信协议设计介绍 一、选择TCP还是UDP协议 由于我们的即时通讯软件的用户存在用户状态问题,即用户登录成功以后可以在他的好友列表中看到哪些好友在线,所以客户端和服务器需要保持长连接状态。另… - [服务器开发案例实战](https://haokiu.com/blog/5d978400ccba478eaaa6a166b4ffba8d/index.md): 服务器开发案例实战 从零实现一个http服务器 从零实现一款12306刷票软件 从零实现一个邮件收发客户端 从零开发一个WebSocket服务器 从零学习开源项目系列(一) 从一款多人联机实时对战游戏… - [服务器端发数据时,如果对端一直不收,怎么办?](https://haokiu.com/blog/bb7da7e0bc524808b2a072fb43da3a8e/index.md): 服务器端发数据时,如果对端一直不收,怎么办? 这类问题一般出现在跨部门尤其是与外部开发人员合作的时候。假设现在有这样一种情况,我们的服务器提供对外的服务,指定好了协议,然后对外提供服务,客户端由外部人… - [多线程](https://haokiu.com/blog/dd345ae60ca14a61866fcc2f232aed74/index.md): 多线程 后台C++开发你一定要知道的条件变量 整型变量赋值是原子操作吗? - [从抓包的角度分析connect()函数的连接过程](https://haokiu.com/blog/f3b5fbeb80e645c9b5bd3d1feea7b387/index.md): 从抓包的角度分析connect()函数的连接过程 这篇文章主要是从tcp连接建立的角度来分析客户端程序如何利用connect函数和服务端程序建立tcp连接的,了解connect函数在建立连接的过程中底… - [从零学习开源项目系列(一) 从一款多人联机实时对战游戏开始](https://haokiu.com/blog/416ada8e33704bdcadd3202dd2413740/index.md): 从零学习开源项目系列(一) 从一款多人联机实时对战游戏开始 写在前面的话 经常有学生或者初学者问我如何去阅读和学习一个开源软件的代码,也有不少朋友在工作岗位时面对前同事留下的项目,由于文档不完善、代码… - [从零学习开源项目系列(四)LogServer源码探究](https://haokiu.com/blog/fea618d6d104410cb5df6bc54d9529f2/index.md): 从零学习开源项目系列(四)LogServer源码探究 这是从零学习开源项目的第四篇,上一篇是《从零学习开源项目系列(三) CSBattleMgr服务源码研究》,这篇文章我们一起来学习LogServer… - [从零学习开源项目系列(三) CSBattleMgr服务源码研究](https://haokiu.com/blog/86a8b9de9c914f8ab93a3d36b455838b/index.md): 从零学习开源项目系列(三) CSBattleMgr服务源码研究 服务器项目工程如下图所示: 如上图所示,这篇文章我们将介绍CSBattleMgr的情况,但是我们不会去研究这个服务器的特别细节的东西(这… - [从零学习开源项目系列(二) 最后一战概况](https://haokiu.com/blog/92d9492b21aa444d81eb4f31c1bfabb1/index.md): 从零学习开源项目系列(二) 最后一战概况 这份代码我也是无意中来自一个朋友,据他说也是来源于互联网,服务器端代码原来是Linux版本的,但被厉害的大神修改成可以在Windows上运行。(如果不小心侵犯… - [从零实现一款12306刷票软件](https://haokiu.com/blog/42f423476e5d4262bcb032f3cf4c40d3/index.md): 从零实现一款12306刷票软件 写在前面的话 每年逢年过节,一票难求读者肯定不陌生。这篇文章,我们带领读者从零实现一款12306刷票软件,其核心原理是通过发送http请求模拟登录12306网站的购票的… - [从零实现一个邮件收发客户端](https://haokiu.com/blog/e1e38f7ff0e941c8ad6e51923070551d/index.md): 从零实现一个邮件收发客户端 与邮件收发有关的协议有 POP3、SMPT 和 IMAP 等。 POP3 POP3全称是 Post Office Protocol 3 ,即邮局协议的第 3 个版本,它规定… - [从零实现一个http服务器](https://haokiu.com/blog/2ec66b5605c8455e833f06d2a23fff09/index.md): 从零实现一个http服务器 我始终觉得,天生的出身很重要,但后天的努力更加重要,所以如今的很多“科班”往往不如后天努力的“非科班”。所以,我们需要重新给“专业”和“专家”下一个定义:所谓专业,就是别人… - [从零开发一个WebSocket服务器](https://haokiu.com/blog/f8c9189db8404c76867e71440f136a2c/index.md): 从零开发一个WebSocket服务器 WebSocket 协议是为了解决 http 协议的无状态、短连接(通常是)和服务端无法主动给客户端推送数据等问题而开发的新型协议,其通信基础也是基于 TCP。由… - [程序员如何写简历](https://haokiu.com/blog/9c853d8576774df7ad52d79d740d95f1/index.md): 程序员如何写简历 笔者工作多年后面试了很多公司,例如 2018 年年初横扫各大互联网公司,也作为面试官面试了很多人,看过不少的简历。现在疫情快过去了,很多小伙伴开始准备简历看新机会了,但是不少小伙伴遇… - [程序员面试题精讲](https://haokiu.com/blog/c092595334ac4b29914e418b3aae0648/index.md): 程序员面试题精讲 腾讯后台开发实习生技能要求 聊聊如何拿大厂的 offer 网络通信题目集锦 我面试后端开发经理的经历 Linux C/C++后端开发面试问哪些问题 - [程序员的薪资与年终奖那些事儿](https://haokiu.com/blog/18d3e73501ef4be092520d6f5991517f/index.md): 程序员的薪资与年终奖那些事儿 技术面试与HR谈薪资技巧 聊一聊程序员如何增加收入 谈一谈年终奖 - [程序员的烦心事](https://haokiu.com/blog/e11a027d307841d9b515ac4b1670037c/index.md): 程序员的烦心事 拒绝了一家公司的offer后,他们的副总和hr总监同时打电话来询问拒绝原因并极力要求加入,我该不该去? 我是一名程序员,结婚时女友要求我用两年的工资作为彩礼,我该不该答应? - [程序员必知必会的网络命令](https://haokiu.com/blog/2137687badbe411cac56094071bcc338/index.md): 程序员必知必会的网络命令 利用telnet命令发电子邮件 做Java或者C++开发都应该知道的lsof命令 Linux网络故障排查的瑞士军刀nc命令 Linux tcpdump使用详解 从抓包的角度分… - [不定参数函数实现var_arg系列的宏](https://haokiu.com/blog/e3f33300987a43d08044b27dbbc5e9ec/index.md): 不定参数函数实现vararg系列的宏 电驴的源码日志模块有一个叫 DebugLogError 函数,其签名如下: 电驴的源码可以在公众号【 高性能服务器开发 】后台回复“获取电驴源码”即可获取。 这个… - [TeamTalk源码解析](https://haokiu.com/blog/0da28a69a69242919c3333dc8e970a8f/index.md): TeamTalk源码解析 01 TeamTalk介绍 02 服务器端的程序的编译与部署 03 服务器端的程序架构介绍 04 服务器端dbproxyserver源码分析 05 服务器端msgserver… - [TCP 协议如何解决粘包、半包问题](https://haokiu.com/blog/7b86f55ffdcd4434a17beb9dbf7b9527/index.md): TCP 协议如何解决粘包、半包问题 一 TCP 协议是流式协议 很多读者从接触网络知识以来,应该听说过这句话:TCP 协议是流式协议。那么这句话到底是什么意思呢?所谓流式协议,即协议的内容是像流水一样… - [socket 的阻塞模式和非阻塞模式](https://haokiu.com/blog/7a9421787c4a4e7482e4f3ea6234c7ac/index.md): socket 的阻塞模式和非阻塞模式 对 socket 在阻塞和非阻塞模式下的各个函数的行为差别深入的理解是掌握网络编程的基本要求之一,是重点也是难点。 阻塞和非阻塞模式下,我们常讨论的具有不同行为表… - [select 函数重难点解析](https://haokiu.com/blog/2369cd70c2354e9c844815c14f31134c/index.md): select 函数重难点解析 select 函数是网络通信编程中非常常用的一个函数,因此应该熟练掌握它。虽然它是 BSD 标准之一的 Socket 函数之一,但在 Linux 和 Windows 平台… - [pimpl 惯用法](https://haokiu.com/blog/4a2f5d00bb404b68a468bd72dfe357f8/index.md): pimpl 惯用法 现在这里有一个名为 CSocketClient 的网络通信类,定义如下: 这段代码来源于笔者实际项目中开发的一个股票客户端的软件。 CSocketClient 类的 public… - [Part I](https://haokiu.com/blog/184a1ba071384d75b2da68fa7be54511/index.md): 此仓库是公众号【高性能服务器开发】文章汇总,如需下载全部文章,可以在公众号回复关键字“文章下载”即可得到下载链接。分享和转发文章时请保留作者信息,部分文章来源于网络,侵权请联系删除。 我也专门建立了读… - [Memcached阅读十五 Hash表扩容](https://haokiu.com/blog/3ba1e9453dcc49edb8ee1597bb133cdd/index.md): Memcached阅读十五 Hash表扩容 是 里面最重要的结构之一,其采用链接法来处理Hash冲突,当Hash表中的项太多时,也就是Hash冲突比较高的时候,Hash表的遍历就脱变成单链表,此时为了… - [Memcached源码阅读一 初始化参数解析](https://haokiu.com/blog/778cf564240e4d19ad39e0e271d66b3d/index.md): Memcached源码阅读一 初始化参数解析 启动时,有很多配置参数可以选择,这些配置参数严重影响着Memcached的使用,下面分析下这些参数的意义,开源软件版本之间差异比较大,我这次分析是基于 进… - [Memcached源码阅读序 服务器资源调整](https://haokiu.com/blog/8f65d01cc42d4c8782d95eed02dd4eb5/index.md): Memcached源码阅读序 服务器资源调整 本篇作为Memcached源码分析的开篇,这次阅读的源码版本为: ,开源软件各个版本之间差异比较大,同学们学习时,记得核对版本。 的 函数位于 文件中,从… - [Memcached源码阅读五 资源初始化](https://haokiu.com/blog/f56b1e30eede4a21b7fd293a33a1e47a/index.md): Memcached源码阅读五 资源初始化 内部有hash表,各种统计信息,工作线程,网络,连接,内存结构等,在memcached启动时(执行main函数),会对这些资源进行初始化的,网络和内存的初始化… - [Memcached源码阅读四 内存初始化](https://haokiu.com/blog/c82fe349df914fb8943e4aa3231c9cad/index.md): Memcached源码阅读四 内存初始化 作为内存 服务器,内存高效管理是其最重要的任务之一,Memcached使用 管理其内存,SLAB内存管理直观的解释就是分配一块大的内存,之后按不同的块(48b… - [Memcached源码阅读十一 LRU操作](https://haokiu.com/blog/1e01253c10f9435e84a4106aa149ab68/index.md): Memcached源码阅读十一 LRU操作 是最近最少使用的简称,该技术经常用来实现cache数据更新,Memcached使用LRU技术来淘汰老的数据,Memcached默认是启用LRU操作的,在这种… - [Memcached源码阅读十四 item结构](https://haokiu.com/blog/3fee4e4314af42ee9fa58cda4aa0b839/index.md): Memcached源码阅读十四 item结构 是 中抽象实际数据的结构,我们分析下item的一些特性,便于后续Memcached的其他特性分析。 其结构图如下所示: Item由两部分组成,item的属… - [Memcached源码阅读十三 do_item_alloc操作](https://haokiu.com/blog/50d829bedab44857aaf08cfd61e6c952/index.md): Memcached源码阅读十三 doitemalloc操作 前面我们分析了 的set操作,其set操作在经过所有的数据有效性检查之后,如果需要存储item,则会执行item的实际存储操作,我们下面分析… - [Memcached源码阅读十七 状态机](https://haokiu.com/blog/4547681a8a0d42759accab81b61267ab/index.md): Memcached源码阅读十七 状态机 按我们之前的描述,Master线程建立连接之后,分发给Worker线程,而Worker线程处理业务逻辑时,会进入状态机,状态机按不同的状态处理业务逻辑,我们在分… - [Memcached源码阅读十六 线程交互](https://haokiu.com/blog/314f7e41e35f43db9facbca467726a7a/index.md): Memcached源码阅读十六 线程交互 按之前的分析可以知道,其是典型的 线程模型,这种模型很典型,其工作模型是Master绑定端口,监听网络连接,接受网络连接之后,通过线程间通信来唤醒Worker… - [Memcached源码阅读十二 set操作](https://haokiu.com/blog/a795d0b698914f3898a0896633cd92ad/index.md): Memcached源码阅读十二 set操作 之前分析了 的get操作,下面分析set操作的流程。 有些item的操作已经在get操作中有分析,我们此处不做分析,我们下一篇分析下 内部如何选择合适的空间… - [Memcached源码阅读十 Hash表操作](https://haokiu.com/blog/857ca75e1a154abc91281759ea864d5c/index.md): Memcached源码阅读十 Hash表操作 的Hash表用来提高数据访问性能,通过链接法来解决Hash冲突,当Hash表中数据多余Hash表容量的1.5倍时,Hash表就会扩容,Memcached的… - [Memcached源码阅读七 cas属性](https://haokiu.com/blog/4d2fa7e9284a4e7fb742bdda30d20da6/index.md): Memcached源码阅读七 cas属性 cas即 或者 ,是实现乐观锁的一种技术,乐观锁是相对悲观锁来说的,所谓悲观锁是在数据处理过程中,完全锁定,这种能完全保证数据的一致性,但在多线程情况下,并发… - [Memcached源码阅读六 get过程](https://haokiu.com/blog/9dbcb2b8ef6b4cdbab38c3845d520ef0/index.md): Memcached源码阅读六 get过程 我们在前面分析过, 从网络读取完数据,解析数据,如果是get操作,则执行get操作,下面我们分析下get操作的流程。 的get操作在读取数据时,会判断数据的有… - [Memcached源码阅读九 连接队列](https://haokiu.com/blog/596315b99d2f40dba9c9ea13e975bd9d/index.md): Memcached源码阅读九 连接队列 中Master线程和Worker线程之间通信连接信息时,是通过连接队列来通信的,即Master线程投递一个消息到Worker线程的连接队列中,Worker线程从… - [Memcached源码阅读二 网络监听的建立](https://haokiu.com/blog/9a03435a987949d28e30905f7a0c839b/index.md): Memcached源码阅读二 网络监听的建立 是一个服务器程序,所以需要建立网络监听来接受其他客户端机器的连接,下面分析下其过程,这次分析是基于 版本分析的。 至此,网络相关的部分已经完成,后向连接的… - [Memcached源码阅读八 内存池](https://haokiu.com/blog/63c41390d91c4392a0d3cc433c49a4ac/index.md): Memcached源码阅读八 内存池 内部维护了一个内存池来减少频繁的 和 ,在该内存池的基础上面实现了slab内存管理,下面简单介绍下内存池的实现,大家在实现类似结构时,可以做个参考。 - [Memcached源码分析三 网络连接建立](https://haokiu.com/blog/2a422d9fa3fe4cddbcbef326866d8943/index.md): Memcached源码分析三 网络连接建立 接着上一篇继续分析,上一篇请参考 《Memcached源码阅读之网络监听的建立》,这篇主要分析TCP的连接建立(从前面的代码分析可以看出,这个过程是由主线程… - [Memcached源码分析](https://haokiu.com/blog/d10283bf526c437a9e64e40d5afa25c4/index.md): Memcached源码分析 00 服务器资源调整 01 初始化参数解析 02 网络监听的建立 03 网络连接建立 04 内存初始化 05 资源初始化 06 get过程 07 cas属性 08 内存池… - [Linux 网络故障排查的瑞士军刀](https://haokiu.com/blog/501d5d7dacf24f4098180740dba82434/index.md): Linux 网络故障排查的瑞士军刀 nc 即 netcat 命令,这个工具在排查网络故障时非常有用,功能非常强大,因而被业绩称为网络界的“瑞士军刀”,请读者务必掌握。默认系统是没有这个命令的,你需要安… - [Linux tcpdump 使用介绍](https://haokiu.com/blog/6eecf1781f7d4e1691c367ebf702d4d2/index.md): Linux tcpdump 使用介绍 tcpdump 是 Linux 系统提供一个非常强大的抓包工具,熟练使用它,对我们排查网络问题非常有用。如果你的机器上还没有安装,可以使用如下命令安装: 如果要使… - [Linux epoll 模型(含LT 模式和 ET 模式详解)](https://haokiu.com/blog/e4e0126749ad480399c46665753f03e4/index.md): Linux epoll 模型(含LT 模式和 ET 模式详解) 综合 select 和 poll 的一些优缺点,Linux 从内核 2.6 版本开始引入了更高效的 epoll 模型,本节我们来详细介绍… - [Linux C/C++后端开发面试问哪些问题](https://haokiu.com/blog/8570010b5d82422da83500ab481816be/index.md): Linux C/C++后端开发面试问哪些问题 今天我的技术群(想加技术群的可以加我微信 easycoder)里面一名叫“成都-go-戒炸鸡”的群友提出了他最近面试的一些面试题,面试题内容个人觉得非常典… - [libevent源码深度剖析一](https://haokiu.com/blog/8aa77e3ff7e54bdb8899e32f75300864/index.md): libevent源码深度剖析一 前言 libevent是一个轻量级的开源高性能网络库,使用者众多,研究者更甚,相关文章也不少。写这一系列文章的用意在于,一则分享心得;二则对libevent代码和设计思… - [libevent源码深度剖析13](https://haokiu.com/blog/b05b12b227ee4ce494fe99d9116d6a23/index.md): libevent源码深度剖析13 libevent信号处理注意点 前面讲到了 libevent 实现多线程的方法,然而在多线程的环境中注册信号事件,还是有一些情况需要小心处理,那就是不能在多个 lib… - [libevent源码深度剖析12](https://haokiu.com/blog/1f455bc4e89944fe8fb0ca8f3bbcdc1b/index.md): libevent源码深度剖析12 让libevent支持多线程 libevent本身不是多线程安全的,在多核的时代,如何能充分利用CPU的能力呢,这一节来说说如何在多线程环境中使用libevent,跟… - [libevent源码深度剖析11](https://haokiu.com/blog/136973dd819b459bac605bcb1a25571c/index.md): libevent源码深度剖析11 时间管理 为了支持定时器,libevent必须和系统时间打交道,这一部分的内容也比较简单,主要涉及到时间的加减辅助函数、时间缓存、时间校正和定时器堆的时间值调整等。下… - [libevent源码深度剖析10](https://haokiu.com/blog/f567712a9375435692b3217e444f19e5/index.md): libevent源码深度剖析10 支持I/O多路复用技术 libevent的核心是事件驱动、同步非阻塞,为了达到这一目标,必须采用系统提供的I/O多路复用技术,而这些在Windows、Linux、Un… - [libevent源码深度剖析09](https://haokiu.com/blog/e65e0c91ca7e45ad9ad3081edbd423f8/index.md): libevent源码深度剖析09 集成定时器事件 现在再来详细分析libevent中I/O事件和Timer事件的集成,与Signal相比,Timer事件的集成会直观和简单很多。Libevent对堆的调… - [libevent源码深度剖析08](https://haokiu.com/blog/4a5e0c5a568b4187b207ec0ada2dbdfb/index.md): libevent源码深度剖析08 集成信号处理 现在我们已经了解了libevent的基本框架:事件管理框架和事件主循环。上节提到了libevent中I/O事件和Signal以及Timer事件的集成,这… - [libevent源码深度剖析07](https://haokiu.com/blog/1fa932a07dd84e9fbdde728e110c098f/index.md): libevent源码深度剖析07 事件主循环 现在我们已经初步了解了libevent的Reactor组件——eventbase和事件管理框架,接下来就是libevent事件处理的中心部分——事件主循环… - [libevent源码深度剖析06](https://haokiu.com/blog/fc115cade0c049a8ab14e737a22b37fe/index.md): libevent源码深度剖析06 初见事件处理框架 前面已经对libevent的事件处理框架和event结构体做了描述,现在是时候剖析libevent对事件的详细处理流程了,本节将分析libevent… - [libevent源码深度剖析05](https://haokiu.com/blog/1f6a82cdb17742a49514907b604e44c1/index.md): libevent源码深度剖析05 libevent的核心:事件event 对事件处理流程有了高层的认识后,本节将详细介绍libevent的核心结构event,以及libevent对event的管理。… - [libevent源码深度剖析04](https://haokiu.com/blog/7fd5744edc6741c18b5cb6187e662e40/index.md): libevent源码深度剖析04 前言 详细分析源代码之前,如果能对其代码文件的基本结构有个大概的认识和分类,对于代码的分析将是大有裨益的。本节内容不多,我想并不是说它不重要! 源代码组织结构 Lib… - [libevent源码深度剖析03](https://haokiu.com/blog/88dcf812d9464727bdfa54410657cfaa/index.md): libevent源码深度剖析03 libevent基本使用场景和事件流程 前言 学习源代码该从哪里入手?我觉得从程序的基本使用场景和代码的整体处理流程入手是个不错的方法,至少从个人的经验上讲,用此方法… - [libevent源码深度剖析02](https://haokiu.com/blog/d62a9a215b334817945e5814d92a423a/index.md): libevent源码深度剖析02 Reactor模式 前面讲到,整个libevent本身就是一个Reactor,因此本节将专门对Reactor模式进行必要的介绍,并列出libevnet中的几个重要组件… - [libevent源码深度剖析](https://haokiu.com/blog/5d2f8fa20fdc4018a34afe19f8c23987/index.md): libevent源码深度剖析 libevent源码深度剖析01 libevent源码深度剖析02 libevent源码深度剖析03 libevent源码深度剖析04 libevent源码深度剖析05… - [leveldb源码分析9](https://haokiu.com/blog/899ada7f72f249e6938aef7f300eaf1a/index.md): leveldb源码分析9 本系列《leveldb源码分析》共有22篇文章,这是第九篇 6 SSTable之3 6.5 读取sstable文件 6.5.1 类层次 Sstable文件的读取逻辑在类Tab… - [leveldb源码分析8](https://haokiu.com/blog/8554dc1843294f5fa7955b748c61710f/index.md): leveldb源码分析8 本系列《leveldb源码分析》共有22篇文章,这是第八篇 6 SSTable之2 6.4 创建sstable文件 了解了sstable文件的存储格式,以及Data Bloc… - [leveldb源码分析7](https://haokiu.com/blog/b3a81cdfb8624332bd1f184097675b32/index.md): leveldb源码分析7 本系列《leveldb源码分析》共有22篇文章,这是第七篇。 SSTable之一 SSTable是Leveldb的核心之一,是表数据最终在磁盘上的物理存储。也是体量比较大的模… - [leveldb源码分析6](https://haokiu.com/blog/3e005b6becda44edaa67dc81f32d5499/index.md): leveldb源码分析6 本系列《leveldb源码分析》共有22篇文章,这是第六篇。 操作Log 2 5.3 读日志 日志读取显然比写入要复杂,要检查checksum,检查是否有损坏等等,处理各种错… - [leveldb源码分析5](https://haokiu.com/blog/81982087975a4f49913e723952169670/index.md): leveldb源码分析5 本系列《leveldb源码分析》共有22篇文章,这是第五篇。 5.操作Log 1 分析完KV在内存中的存储,接下来就是操作日志。所有的写操作都必须先成功的append到操作日… - [leveldb源码分析4](https://haokiu.com/blog/f4dfd0e7e33240c9807a11402d34ddb3/index.md): leveldb源码分析4 本系列《leveldb源码分析》共有22篇文章,这是第四篇 4.Memtable之2 4.6 Comparator 弄清楚了key,接下来就要看看key的使用了,先从Comp… - [leveldb源码分析3](https://haokiu.com/blog/34fc58749a224c92be698a0d9cd27b99/index.md): leveldb源码分析3 本系列《leveldb源码分析》共有22篇文章,这是第三篇。 Memtable之一 Memtable是leveldb很重要的一块,leveldb的核心之一。我们肯定关注KV数… - [leveldb源码分析22](https://haokiu.com/blog/08d56462861f4df7b247921ba14a88e2/index.md): leveldb源码分析22 本系列《leveldb源码分析》共有22篇文章,这是第二十二篇 14 DB的查询与遍历之2 14.4 DBIter Leveldb数据库的MemTable和sstable文… - [leveldb源码分析21](https://haokiu.com/blog/1d4ede18ded04a569baee5550226fa6f/index.md): leveldb源码分析21 本系列《leveldb源码分析》共有22篇文章,这是第二十一篇 14 DB的查询与遍历之1 分析完如何打开和关闭db,本章就继续分析如何从db中根据key查询value,以… - [leveldb源码分析20](https://haokiu.com/blog/0da12c5829764cdc8a508c0a05e99a3e/index.md): leveldb源码分析20 本系列《leveldb源码分析》共有22篇文章,这是第二十篇 12 DB的打开 先分析LevelDB是如何打开db的,万物始于创建。在打开流程中有几个辅助函数:DBImpl… - [leveldb源码分析2](https://haokiu.com/blog/c955baadcc824d20acb455e1078a257c/index.md): leveldb源码分析2 本系列《leveldb源码分析》共有22篇文章,这是第二篇。 3.Int Coding 轻松一刻,前面约定中讲过Leveldb使用了很多VarInt型编码,典型的如后面将涉及… - [leveldb源码分析19](https://haokiu.com/blog/2d765b7b763343038b1df047545b2017/index.md): leveldb源码分析19 本系列《leveldb源码分析》共有22篇文章,这是第十九篇 11.VersionSet分析之2 11.4 LogAndApply() 函数声明: 前面接口小节中讲过其功能… - [leveldb源码分析18](https://haokiu.com/blog/9276872cee384cebb6d1c912acedf0a2/index.md): leveldb源码分析18 本系列《leveldb源码分析》共有22篇文章,这是第十八篇 11 VersionSet分析之1 之后就是 ,它并不是Version的简单集合,还肩负了不少的处理逻辑。这里… - [leveldb源码分析17](https://haokiu.com/blog/0d1705067c1d403889b748a57e0b3af5/index.md): leveldb源码分析17 本系列《leveldb源码分析》共有22篇文章,这是第十七篇 10 Version分析之2 10.5 Version::UpdateStats() 当 操作直接搜寻 没有命… - [Leveldb源码分析16](https://haokiu.com/blog/383f27c1087943b39b255aa993d7b9ac/index.md): Leveldb源码分析16 本系列《leveldb源码分析》共有22篇文章,这是第十六篇 10.Version分析之一 先来分析leveldb对单版本的sstable文件管理,主要集中在Version… - [leveldb源码分析15](https://haokiu.com/blog/bd56540c7f464f2e8e9392c3903b27f5/index.md): leveldb源码分析15 本系列《leveldb源码分析》共有22篇文章,这是第十五篇 9 LevelDB框架之2 9.4 版本控制 当执行一次 后, 将在当前版本基础上创建一个新版本,当前版本就变… - [leveldb源码分析14](https://haokiu.com/blog/5a5f7db3f4fc4684a0c7ddb21dd6ea40/index.md): leveldb源码分析14 本系列《leveldb源码分析》共有22篇文章,这是第十四篇 9 LevelDB框架之1 到此为止,基本上 的主要功能组件都已经分析完了,下面就是把它们组合在一起,形成一个… - [leveldb源码分析13](https://haokiu.com/blog/f110bd8130344cbf801fc30d4d7a7ce9/index.md): leveldb源码分析13 本系列《leveldb源码分析》共有22篇文章,这是第十三篇 8.FilterPolicy&Bloom之二 8.5 构建FilterBlock 8.5.1 FilterBl… - [leveldb源码分析12](https://haokiu.com/blog/cd6a8ad07c9f4c479a1e88591f05cd70/index.md): leveldb源码分析12 本系列《leveldb源码分析》共有22篇文章,这是第十二篇 8.FilterPolicy&Bloom之1 8.1 FilterPolicy 因名知意,FilterPoli… - [leveldb源码分析11](https://haokiu.com/blog/0159e326ba0e4917878529ee1ae3af48/index.md): leveldb源码分析11 本系列《leveldb源码分析》共有22篇文章,这是第十一篇 7.TableCache 这章的内容比较简单,篇幅也不长。 7.1 TableCache简介 TableCac… - [leveldb源码分析10](https://haokiu.com/blog/603a94de7932474cbf7478a2d7b94ebf/index.md): leveldb源码分析10 本系列《leveldb源码分析》共有22篇文章,这是第十篇 6.SSTable之四 6.6 遍历Table 6.6.1 遍历接口 Table导出了一个返回Iterator的… - [leveldb源码分析1](https://haokiu.com/blog/1776ae3c50104b7ea0c90cf31322958a/index.md): leveldb源码分析1 本系列《leveldb源码分析》共有22篇文章,这是第一篇。 leveldb,除去测试部分,代码不超过1.5w行。这是一个单机k/v存储系统,决定看完它,并把源码分析完整的写… - [leveldb源码分析](https://haokiu.com/blog/c898014e5b304df0bade6b12d638467a/index.md): leveldb源码分析 leveldb源码分析1 leveldb源码分析2 leveldb源码分析3 leveldb源码分析4 leveldb源码分析5 leveldb源码分析6 leveldb源码分… - [connect 函数在阻塞和非阻塞模式下的行为](https://haokiu.com/blog/f82abb8bce8a4c85b9b8c665cb9fe48d/index.md): connect 函数在阻塞和非阻塞模式下的行为 在 socket 是阻塞模式下 connect 函数会一直到有明确的结果才会返回(或连接成功或连接失败),如果服务器地址“较远”,连接速度比较慢,con… - [C++必知必会的知识点](https://haokiu.com/blog/6176f55c32444820a0055fadcf89273c/index.md): C++必知必会的知识点 如何成为一名合格的C/C++开发者? 不定参数函数实现vararg系列的宏 你一定要搞明白的C函数调用方式与栈原理 深入理解C/C++中的指针 详解C++11中的智能指针 C+… - [C++ 17 结构化绑定](https://haokiu.com/blog/b08571a528324d72b376f4ccb2a6dad3/index.md): C++ 17 结构化绑定 stl 的 map 容器很多读者应该都很熟悉,map 容器提供了一个 insert 方法,我们用该方法向 map 中插入元素,但是应该很少有人记得 insert 方法的返回值… - [bind 函数重难点解析](https://haokiu.com/blog/48af9bced29e4786944b5661c4155665/index.md): bind 函数重难点解析 bind 函数如何选择绑定地址 bind 函数的基本用法如下: 其中 bind 的地址我们使用了一个宏叫 INADDRANY ,关于这个宏的解释如下: 意译一下: 也就是说… - [9 百万用户级游戏服务器架构设计](https://haokiu.com/blog/db5f58a948804f718159e858bf744da9/index.md): 9 百万用户级游戏服务器架构设计 服务器结构探讨 -- 最简单的结构 所谓服务器结构,也就是如何将服务器各部分合理地安排,以实现最初的功能需求。所以,结构本无所谓正确与错误;当然,优秀的结构更有助于系… - [8 大型多人在线游戏服务器架构设计](https://haokiu.com/blog/5b23fbec804b470cb12e3c20af54d1d0/index.md): 8 大型多人在线游戏服务器架构设计 由于大型多人在线游戏服务器理论上需要支持无限多的玩家,所以对服务器端是一个非常大的考验。服务器必须是安全的,可维护性高的,可伸缩性高的,可负载均衡的,支持高并发请求… - [7 QQ游戏百万人同时在线服务器架构实现](https://haokiu.com/blog/64368e0e78ea4a568fff21e1511c0f43/index.md): 7 QQ游戏百万人同时在线服务器架构实现 QQ游戏于前几日终于突破了百万人同时在线的关口,向着更为远大的目标迈进,这让其它众多传统的棋牌休闲游戏平台黯然失色,相比之下,联众似乎已经根本不是QQ的对手,… - [6 从腾讯QQgame高性能服务器集群架构看“分而治之”与“自治”等分布式架构设计原则](https://haokiu.com/blog/84414d52b22b4cdaa7a7cf4beb0e1585/index.md): 6 从腾讯QQgame高性能服务器集群架构看“分而治之”与“自治”等分布式架构设计原则 腾讯QQGame游戏同时在线的玩家数量极其庞大,为了方便组织玩家组队游戏,腾讯设置了大量游戏室(房间),玩家可以… - [5 各类游戏对应的服务端架构](https://haokiu.com/blog/47a72212e86d4b6a8fe0516f8ff1cf65/index.md): 5 各类游戏对应的服务端架构 类型一:卡牌、跑酷等弱交互服务端 卡牌跑酷类因为交互弱,玩家和玩家之间不需要实时面对面PK,打一下对方的离线数据,计算下排行榜,买卖下道具即可,所以实现往往使用简单的 H… - [4 关于游戏服务端架构的整理](https://haokiu.com/blog/a7ec43bdee96498694f118163763c921/index.md): 4 关于游戏服务端架构的整理 一个大型的网落游戏服务器应该包含几个模块:网络通讯,业务逻辑,数据存储,守护监控(不是必须)。其中业务逻辑可能根据具体需要,又划分为好几个子模块。 这里说的模块可以指一个… - [3 游戏后端开发需要掌握的知识](https://haokiu.com/blog/16d1fbc7aa204ddba0ef394895d2c2b6/index.md): 3 游戏后端开发需要掌握的知识 这篇是从网上找到牛人的博客总结下来的: 实战方面: (1)两种在知名IT公司使用的游戏服务器架构设计 点击图片可以放大 1 各个服务器的功能以及作用: CenterSe… - [2 网络游戏服务器开发框架设计介绍](https://haokiu.com/blog/288a2c3a9e374a3ebf898cfa184e2921/index.md): 2 网络游戏服务器开发框架设计介绍 在开发过程中,会先有一份开发大纲或是一份策划案,但是这些在我的开发中可能不会有,或者即使有,也很有可能是我随性写下来的,但是我会尽可能写好它。 网络通信层,我会放到… - [13 游戏跨服架构进化之路](https://haokiu.com/blog/3a513d0ec4fc47e2b3830ec79beb1572/index.md): 13 游戏跨服架构进化之路 江贵龙,游戏行业从业8年,历任多款游戏项目服务器主程,服务器负责人。 关注游戏服务器架构及优化,监控预警,智能运维,数据统计分析等。 1.背景 虽然游戏市场竞争激烈,产品… - [12 经典游戏服务器端架构概述](https://haokiu.com/blog/d7795d37211b43728424c7c4f7469b67/index.md): 12 经典游戏服务器端架构概述 架构的分析模型 一. 讨论的背景 现代电子游戏,基本上都会使用一定的网络功能。从验证正版,到多人交互等等,都需要架设一些专用的服务器,以及编写在服务器上的程序。因此,… - [11 一种高性能网络游戏服务器架构设计](https://haokiu.com/blog/8d180ec3ae3e409bac6e8a67811f54bc/index.md): 11 一种高性能网络游戏服务器架构设计 网络游戏的结构分为客户端与服务器端,客户端采用2D绘制引擎或者3D绘制引擎绘制游戏世界的实时画面,服务器端则负责响应所有客户端的连接请求和游戏逻辑处理,并控制… - [11 pc客户端源码分析](https://haokiu.com/blog/ee4c77c4daf64f5f821d76808ec0b8b3/index.md): 11 pc客户端源码分析 ——写在前面的话 在要不要写这篇文章的纠结中挣扎了好久,就我个人而已,我接触windows编程,已经六七个年头了,尤其是在我读研的三年内,基本心思都是花在学习和研究windo… - [10 十万在线的WebGame的数据库设计思路](https://haokiu.com/blog/ace809ec27124ecc987bcd4c7eec569f/index.md): 10 十万在线的WebGame的数据库设计思路 服务器数量预估 在线人数预估: 在项目设计之前,需要先对运营后的服务器人数做一下预估,预计激活人数300w,活跃人数40w,同时在线10w。而服务器的设… - [10 开放一个TeamTalk测试服务器地址和几个测试账号](https://haokiu.com/blog/601f5e2b4c0a4303a540259d9d394d0b/index.md): 10 开放一个TeamTalk测试服务器地址和几个测试账号 由于TeamTalk是用于企业内部的即时通讯软件,一般客户端并不提供账号注册功能。如果你仅对TeamTalk的客户端感兴趣,你可以仅仅研究p… - [1 游戏服务器开发的基本体系与服务器端开发的一些建议](https://haokiu.com/blog/867310d7f5a74f758c1745b3083cfcc8/index.md): 1 游戏服务器开发的基本体系与服务器端开发的一些建议 近年来,我身边的朋友有很多都从web转向了游戏开发。他们以前都没有做过游戏服务器开发,更谈不上什么经验,而从网上找的例子或游戏方面的知识,又是那么… - [09 服务器端route_server源码分析](https://haokiu.com/blog/d337b00514f346dcb055e1a411da83d8/index.md): 09 服务器端routeserver源码分析 routeserver的作用主要是用户不同msgserver之间消息路由,其框架部分和前面的服务类似,没有什么好说的。我们这里重点介绍下它的业务代码,也就… - [08 服务器端file_server源码分析](https://haokiu.com/blog/c5f5c9828a6f472d9768cffc2f548784/index.md): 08 服务器端fileserver源码分析 这篇文章我们来介绍fileserver服务的功能和源码实现。TeamTalk支持离线在线文件和离线文件两种传送文件的方式。单纯地研究fileserver的程… - [07 服务器端msfs源码分析](https://haokiu.com/blog/0055f7fa607b4b2180cd0eb3924eff5c/index.md): 07 服务器端msfs源码分析 这篇文章是对TeamTalk服务程序msfs的源码和架构设计分析。msfs作用是用来接受teamtalk聊天中产生的聊天图片的上传和下载。还是老规矩,把该服务在整个架构… - [06 服务器端login_server源码分析](https://haokiu.com/blog/1866caff3acc4baeb8666ea706d7ba7d/index.md): 06 服务器端loginserver源码分析 loginserver从严格意义上来说,是一个登录分流器,所以名字起的有点名不符实。该服务根据已知的msgserver上的在线用户数量来返回告诉一个即将登… - [05 服务器端msg_server源码分析](https://haokiu.com/blog/27deab1b64f24c839058b60bd3826f79/index.md): 05 服务器端msgserver源码分析 在分析msgserver的源码之前,我们先简单地回顾一下msgserver在整个服务器系统中的位置和作用: 各个服务程序的作用描述如下: LoginServe… - [04 服务器端db_proxy_server源码分析](https://haokiu.com/blog/5481b95ce7c64f8c99c98e3c59d74314/index.md): 04 服务器端dbproxyserver源码分析 从这篇文章开始,我将详细地分析TeamTalk服务器端每一个服务的源码和架构设计。 这篇从dbproxyserver开始。dbproxyserver是… - [03 服务器端的程序架构介绍](https://haokiu.com/blog/74f8790b79af42ab856a668b8927b38a/index.md): 03 服务器端的程序架构介绍 通过上一节的编译与部署,我们会得到TeamTalk服务器端以下部署程序: 这些服务构成的拓扑图如下: 各个服务程序的作用描述如下: LoginServer (C++):… - [02 服务器端的程序的编译与部署](https://haokiu.com/blog/23af895a60264bfe949c3636689d3f83/index.md): 02 服务器端的程序的编译与部署 这篇我们来介绍下TeamTalk服务器端的编译与部署,部署文档在autosetup下,这里我们只介绍下服务器程序的编译与部署,不包括管理后台的部署,其部署方法在aut… - [01 TeamTalk介绍](https://haokiu.com/blog/8c53924ed21041948dff215384cdb81d/index.md): 01 TeamTalk介绍 TeamTalk是蘑菇街开源的一款企业内部用的即时通讯软件(Enterprise IM),类似腾讯的RTX。网上也有很多的介绍,我这里也有写几遍关于这款产品的“流水账”,一… - [golang 数组与切片的区别](https://haokiu.com/blog/gnNp9N/index.md): golang 的数组与切片有两大区别: 初始化:数组需要明确指定大小,切片不需要 函数传递:数组是值传递,切片是地址传递 初始化 数组 切片 slice的数据结构: go源码slice的数据结构定义:… - [go 匿名结构体 数组 示例](https://haokiu.com/blog/XVVOUE/index.md): 在用 vscode 生成测试用例的时候,生成了测试的匿名数组,没怎么用过,这里展示了 go 匿名结构体数组示例 需要注意的是各个结构体后面有个逗号。 - [curl https 地址报异常](https://haokiu.com/blog/KsbUyb/index.md): 用 acme.sh 生产了 Let's Encrypt 的https 证书,在浏览器访问没有问题,但在服务器访问出现下面的异常: 网站用了beego,用 acme.sh 生成的证书。配置: 要将 ce… - [beego 让http请求跳转到 https](https://haokiu.com/blog/ZSf4yF/index.md): 如果beego配置了https,那么可以让 让http请求跳转到 https,怎样配置 beego 的https,可以参考beego 通过acms.sh 使用 https - [beego 通过acme.sh 使用 https](https://haokiu.com/blog/qP3u4V/index.md): beego 通过 acme.sh 使用 https 安装acms.sh 生成证书 如果使用的是 beego 框架,需添加可访问的静态文件目录: 设置pixiublog开机启动 编写开机启动脚本 设置开… - [acme.sh 方便管理 letsencrypt ](https://haokiu.com/blog/6D0DBH/index.md): acme.sh 实现了 协议, 可以从 letsencrypt 生成免费的证书。这个脚本可以非常方便的管理 letsencrypt 的证书,省去很多繁琐操作。有了这个脚本就可以方便地给网站使用 htt… - [go ... 作用](https://haokiu.com/blog/hiUuGO/index.md): 是go的一种语法糖。 作用 用于函数有多个不定参数的情况,可以接受多个不确定数量的参数 打散slice进行传递 例子 一、接受多个不确定数量的参数 结果: 二、打散slice进行传递 结果: 最后 如… - [golang 常用函数](https://haokiu.com/blog/XtwuYL/index.md): 获取当前时间 字符串与int转换 3.结构体json序列化 4.删除切片元素 url encode/decode base64编码 获取字符串长度 SubString 结构体类型断言 类型断言变量一定… - [mybatis 增加自定义拦截器](https://haokiu.com/blog/bGqNiH/index.md): MyBatis 提供的强大机制,使用插件是非常简单的,只需实现 Interceptor 接口,并指定想要拦截的方法签名即可。 拦截器 配置 在springboot中要给mybatis加上这个拦截器,有… - [搜索引擎 及 elastic search ](https://haokiu.com/blog/oaXyUa/index.md): 搜索引擎是对数据的检索,所以我们先从生活中的数据说起。我们生活中的数据总体分为两种: 结构化数据 非结构化数据 结构化数据:也称作行数据,是由二维表结构来逻辑表达和实现的数据,严格地遵循数据格式与长度… - [https 原理简介](https://haokiu.com/blog/3TSsuC/index.md): HTTPS 的整个通信过程可以分为两大阶段:证书验证和数据传输阶段,数据传输阶段又可以分为非对称加密和对称加密两个阶段。具体流程按图中的序号讲解。 客户端请求 HTTPS 网址,然后连接到 serve… - [golang 计算文件和字符串的 md5 值](https://haokiu.com/blog/dpoeTs/index.md): go MD5 所需要的包在”crypto/md5”包中,需要先实例化一个MD5对象,然后在此基础上调用sum方法即可 文件的MD5 上面的代码实现了计算了文件MD5,其中file是multipart.… - [S3协议](https://haokiu.com/blog/d0DCeH/index.md): S3是Simple Storage Service的缩写,即简单存储服务。亚马逊的名词缩写也都遵循这个习惯,例如Elastic Compute Cloud缩写为EC2等等。 S3说的玄乎一点可以叫云存… - [golang 判断目录或文件是否存在](https://haokiu.com/blog/Cd6WaZ/index.md): golang 判断目录或文件是否存在: - [beego bee 工具使用简介](https://haokiu.com/blog/xVaucl/index.md): bee 工具是一个为了协助快速开发 beego 项目而创建的项目,通过 bee 您可以很容易的进行 beego 项目的创建、热编译、开发、测试、和部署。 bee 工具的安装 您可以通过如下的方式安装… - [beego 日志配置](https://haokiu.com/blog/gq7FUH/index.md): beego logs 的设计思路来自于 ,目前支持的引擎有 file、console、net、smtp,可以通过如下方式进行安装: 如何使用 通用方式 首先引入包: 然后添加输出引擎(log 支持同时… - [beego 日志处理](https://haokiu.com/blog/YAotkP/index.md): beego 的日志处理是基于 logs 模块搭建的,内置了一个变量 ,默认已经是 类型,初始化了 console,也就是默认输出到 。 使用入门 一般在程序中我们使用如下的方式进行输出: 设置输出 我… - [计算机 数组](https://haokiu.com/blog/OOuDn6/index.md): 这篇博客对数组的理解很深入,特别转发,原文地址:https://jiang-hao.com/articles/2020/backend-data-struct-array.html 定义 数组(Arr… - [golang interface](https://haokiu.com/blog/BmxATZ/index.md): interface Go语言里面设计最精妙的应该算interface,它让面向对象,内容组织实现非常的方便,当你看完这一章,你就会被interface的巧妙设计所折服。 什么是interface 简单… - [beego 的日志级别](https://haokiu.com/blog/RAhBfF/index.md): 看 beego 的源码,beego 的日志分为7个级别: 转换为 - [23中设计模式简介](https://haokiu.com/blog/nG4mC7/index.md): 设计模式主要分为三大类: 创建型模式 创建型模式关注对象的创建过程 工厂模式(Factory Method) 抽象工厂模式 单例模式 建造者模式 原型模式 结构型模式 结构型模式关注对象和类的组织 适… ## 前端 - [es6 简介](https://haokiu.com/blog/Cqhoxc/index.md): ECMAScript 6.0(以下简称 ES6)是 JavaScript 语言的下一代标准,已经在 2015 年 6 月正式发布了。它的目标,是使得 JavaScript 语言可以用来编写复杂的大型应… ## 区块链 - [数字货币交易所-gateio](https://haokiu.com/blog/gateio/index.md): Gate.io芝麻开门创立于2013年,是全球真实交易量TOP10的数字资产交易平台。 作为全球首家提供100%保证金审计证明的交易所,Gate.io在全球多个国家进行合法注册,向全球数千万用户提供安… - [enkrypt invite code FC433A](https://haokiu.com/blog/wgJnpu/index.md): The enkrypt invite code is FC433A Mint tickets with Enkrypt every day, invite friends to earn more t… - [eth2 的优势](https://haokiu.com/blog/eth2/index.md): eth2 相对于 eth1的优势: 1、提高可扩展性 ETH1.0每秒仅支持15个左右的事务。而ETH2.0升级后最终将被划分为64(将来可能会更多)个分片,理论上可以使网络每秒完成达上千甚至上万笔交… - [购买比特币](https://haokiu.com/blog/0PyB8g/index.md): 数字货币的交易所有很多。 比特儿 邀请注册:https://www.gate.io/signup/633017 ,点击这个链接注册的用户可以获取90$的交易点卡哦。 gate.io 8年长期稳定运营,… - [okex](https://haokiu.com/blog/4Li9s1/index.md): okex 是一个老牌的数字货币交易所,我一直在用OKEx安全简便地交易数字货币。 用我的邀请链接注册OKEx可以免费获得比特币奖励!点击这里 或者 使用这个地址: https://www.ouyi.f… ## 大数据 - [阿里云开源离线同步工具DataX3.0介绍](https://haokiu.com/blog/408be8b90df543789f79c7b43375e5a3/index.md): 阿里云开源离线同步工具DataX3.0介绍 一. DataX3.0概览 DataX 是一个异构数据源离线同步工具,致力于实现包括关系型数据库(MySQL、Oracle等)、HDFS、Hive、ODP… - [TSDBWriter 插件文档](https://haokiu.com/blog/2a52431a701d4468a150a7986b3b4752/index.md): TSDBWriter 插件文档 1 快速介绍 TSDBWriter 插件实现了将数据点写入到阿里巴巴自研 TSDB 数据库中(后续简称 TSDB)。 时间序列数据库(Time Series Datab… - [TSDBReader 插件文档](https://haokiu.com/blog/66980d1599cc4aec9a2d6616d1f0c5e7/index.md): TSDBReader 插件文档 1 快速介绍 TSDBReader 插件实现了从阿里云 TSDB 读取数据。阿里云时间序列数据库 ( Time Series Database , 简称 TSDB) 是… - [TableStore增量数据导出通道:TableStoreStreamReader](https://haokiu.com/blog/6851df08c78c4eb1aab41d312b920bf9/index.md): TableStore增量数据导出通道:TableStoreStreamReader 快速介绍 TableStoreStreamReader插件主要用于TableStore的增量数据导出,增量数据可以看… - [SqlServerReader 插件文档](https://haokiu.com/blog/e30dc23cda1d465fa0872475e5c976a7/index.md): SqlServerReader 插件文档 1 快速介绍 SqlServerReader插件实现了从SqlServer读取数据。在底层实现上,SqlServerReader通过JDBC连接远程SqlSe… - [README.md](https://haokiu.com/blog/9dbd1273dcb848bbaa69f53c0105d5c4/index.md): 本插件仅在Elasticsearch 5.x上测试 - [Readme.md](https://haokiu.com/blog/b007b0bc6dca40458f17c7c1826e9da5/index.md): some script here. - [RDBMSWriter 插件文档](https://haokiu.com/blog/5d9d57b2e00d4d8ca994dc15ece38148/index.md): RDBMSWriter 插件文档 --- 1 快速介绍 RDBMSWriter 插件实现了写入数据到 RDBMS 主库的目的表的功能。在底层实现上, RDBMSWriter 通过 JDBC 连接远程… - [RDBMSReader 插件文档](https://haokiu.com/blog/34c79077064f4502a247f840e8b64c46/index.md): RDBMSReader 插件文档 1 快速介绍 RDBMSReader插件实现了从RDBMS读取数据。在底层实现上,RDBMSReader通过JDBC连接远程RDBMS数据库,并执行相应的sql语句将… - [PostgresqlReader 插件文档](https://haokiu.com/blog/0adf103bd70440a1978ecbcc7dd63787/index.md): PostgresqlReader 插件文档 1 快速介绍 PostgresqlReader插件实现了从PostgreSQL读取数据。在底层实现上,PostgresqlReader通过JDBC连接远程P… - [OTSWriter 插件文档](https://haokiu.com/blog/7d2496e6853044daa824d7a78226b07d/index.md): OTSWriter 插件文档 1 快速介绍 OTSWriter插件实现了向OTS写入数据,目前支持三种写入方式: PutRow,对应于OTS API PutRow,插入数据到指定的行,如果该行不存在,… - [OTSReader 插件文档](https://haokiu.com/blog/2dc5ba5f4d58498e8453bd2d8efde079/index.md): OTSReader 插件文档 1 快速介绍 OTSReader插件实现了从OTS读取数据,并可以通过用户指定抽取数据范围可方便的实现数据增量抽取的需求。目前支持三种抽取方式: 全表抽取 范围抽取 指定… - [OracleReader 插件文档](https://haokiu.com/blog/0ffdd59e828b4bb0a53cef538910db12/index.md): OracleReader 插件文档 1 快速介绍 OracleReader插件实现了从Oracle读取数据。在底层实现上,OracleReader通过JDBC连接远程Oracle数据库,并执行相应的s… - [OpenTSDBReader 插件文档](https://haokiu.com/blog/4e39a8595b6247fabfd6f625f053b0b6/index.md): OpenTSDBReader 插件文档 1 快速介绍 OpenTSDBReader 插件实现了从 OpenTSDB 读取数据。OpenTSDB 是主要由 Yahoo 维护的、可扩展的、分布式时序数据库… - [MysqlReader 插件文档](https://haokiu.com/blog/29875f5b780c46929670f9b8699ed462/index.md): MysqlReader 插件文档 1 快速介绍 MysqlReader插件实现了从Mysql读取数据。在底层实现上,MysqlReader通过JDBC连接远程Mysql数据库,并执行相应的sql语句将… - [KingbaseesReader 插件文档](https://haokiu.com/blog/cc7bd03f72154435ae9af2d67a214f6d/index.md): KingbaseesReader 插件文档 1 快速介绍 KingbaseesReader插件实现了从KingbaseES读取数据。在底层实现上,KingbaseesReader通过JDBC连接远程K… - [HBase20xsqlwriter插件文档](https://haokiu.com/blog/28250260969448579bc8cee8c2963319/index.md): HBase20xsqlwriter插件文档 快速介绍 HBase20xsqlwriter实现了向hbase中的SQL表(phoenix)批量导入数据的功能。Phoenix因为对rowkey做了数据编码… - [hbase20xsqlreader 插件文档](https://haokiu.com/blog/d74e56a13f78424182e14164c8b4e5e4/index.md): hbase20xsqlreader 插件文档 1 快速介绍 hbase20xsqlreader插件实现了从Phoenix(HBase SQL)读取数据,对应版本为HBase2.X和Phoenix5.X… - [HBase11xsqlwriter插件文档](https://haokiu.com/blog/1c329829c22c499d8e684735252966c1/index.md): HBase11xsqlwriter插件文档 快速介绍 HBase11xsqlwriter实现了向hbase中的SQL表(phoenix)批量导入数据的功能。Phoenix因为对rowkey做了数据编码… - [hbase11xsqlreader 插件文档](https://haokiu.com/blog/283a89fffad54e6f909c2936a1ff08ad/index.md): hbase11xsqlreader 插件文档 1 快速介绍 hbase11xsqlreader插件实现了从Phoenix(HBase SQL)读取数据。在底层实现上,hbase11xsqlreader… - [Hbase094XWriter & Hbase11XWriter 插件文档](https://haokiu.com/blog/745df21fdbd349ab9a9fc5c94551b336/index.md): Hbase094XWriter & Hbase11XWriter 插件文档 1 快速介绍 HbaseWriter 插件实现了从向Hbase中写取数据。在底层实现上,HbaseWriter 通过 HBa… - [Hbase094XWriter & Hbase11XWriter 插件文档](https://haokiu.com/blog/0172fbcbd4674f98a8782403fc6a7ca5/index.md): Hbase094XWriter & Hbase11XWriter 插件文档 1 快速介绍 HbaseWriter 插件实现了从向Hbase中写取数据。在底层实现上,HbaseWriter 通过 HBa… - [Hbase094XReader & Hbase11XReader 插件文档](https://haokiu.com/blog/7c5fc71d1a124a5396b1a17e8293be71/index.md): Hbase094XReader & Hbase11XReader 插件文档 1 快速介绍 HbaseReader 插件实现了从 Hbase中读取数据。在底层实现上,HbaseReader 通过 HBa… - [Hbase094XReader & Hbase11XReader 插件文档](https://haokiu.com/blog/34ec6d7caba24a86b7a5e9a2f37d8c46/index.md): Hbase094XReader & Hbase11XReader 插件文档 1 快速介绍 HbaseReader 插件实现了从 Hbase中读取数据。在底层实现上,HbaseReader 通过 HBa… - [DrdsReader 插件文档](https://haokiu.com/blog/20f3c6090e2448838d8be1baca3a5e1c/index.md): DrdsReader 插件文档 1 快速介绍 DrdsReader插件实现了从DRDS(分布式RDS)读取数据。在底层实现上,DrdsReader通过JDBC连接远程DRDS数据库,并执行相应的sql… - [DataX插件开发宝典](https://haokiu.com/blog/7c5af007072741d2a1b8a4578137e185/index.md): DataX插件开发宝典 本文面向DataX插件开发人员,尝试尽可能全面地阐述开发一个DataX插件所经过的历程,力求消除开发者的困惑,让插件开发变得简单。 一、开发之前 路走对了,就不怕远。✓ 路走远… - [datax-kudu-plugins](https://haokiu.com/blog/23a56c95c6c4402998fb8bf16e29fc05/index.md): datax-kudu-plugins datax kudu的writer插件 eg: 必须参数: 主键列请写到最前面 配置列表 | name | default | description | 是否必… - [datax-kudu-plugin](https://haokiu.com/blog/3909c1ec487c48198ae49ab46ba98dcb/index.md): datax-kudu-plugin datax kudu的writer插件 仅在kudu11进行过测试 - [DataX TxtFileWriter 说明](https://haokiu.com/blog/599f9ae387e54760ab26e177bd423e82/index.md): DataX TxtFileWriter 说明 ------------ 1 快速介绍 TxtFileWriter提供了向本地文件写入类CSV格式的一个或者多个表文件。TxtFileWriter服务的用… - [DataX TxtFileReader 说明](https://haokiu.com/blog/cbeab748638041dfa63c78ebe4fa91db/index.md): DataX TxtFileReader 说明 ------------ 1 快速介绍 TxtFileReader提供了读取本地文件系统数据存储的能力。在底层实现上,TxtFileReader获取本地文… - [DataX Transformer](https://haokiu.com/blog/760d0498cfcd435bafba3fe96793cd01/index.md): DataX Transformer Transformer定义 在数据同步、传输过程中,存在用户对于数据传输进行特殊定制化的需求场景,包括裁剪列、转换列等工作,可以借助ETL的T过程实现(Transf… - [DataX SqlServerWriter](https://haokiu.com/blog/f23fb4346cfa45459b6eaa8537ff5d17/index.md): DataX SqlServerWriter --- 1 快速介绍 SqlServerWriter 插件实现了写入数据到 SqlServer 库的目的表的功能。在底层实现上, SqlServerWrit… - [DataX PostgresqlWriter](https://haokiu.com/blog/1c01500e456b4ef6b6c14eb5a072696e/index.md): DataX PostgresqlWriter --- 1 快速介绍 PostgresqlWriter插件实现了写入数据到 PostgreSQL主库目的表的功能。在底层实现上,PostgresqlWri… - [DataX OSSWriter 说明](https://haokiu.com/blog/516202a7c10f4658ad32aa517c141a05/index.md): DataX OSSWriter 说明 ------------ 1 快速介绍 OSSWriter提供了向OSS写入类CSV格式的一个或者多个表文件。 写入OSS内容存放的是一张逻辑意义上的二维表,例如… - [DataX OSSReader 说明](https://haokiu.com/blog/bf15e9112ab546c9a6d8baab000d9601/index.md): DataX OSSReader 说明 ------------ 1 快速介绍 OSSReader提供了读取OSS数据存储的能力。在底层实现上,OSSReader使用OSS官方Java SDK获取OSS… - [DataX OracleWriter](https://haokiu.com/blog/1eb2fdd8968d4f6e8bbc0312c6647246/index.md): DataX OracleWriter --- 1 快速介绍 OracleWriter 插件实现了写入数据到 Oracle 主库的目的表的功能。在底层实现上, OracleWriter 通过 JDBC… - [DataX ODPS写入](https://haokiu.com/blog/ab33f89c494e47eaae02f9c21465b322/index.md): DataX ODPS写入 --- 1 快速介绍 ODPSWriter插件用于实现往ODPS插入或者更新数据,主要提供给etl开发同学将业务数据导入odps,适合于TB,GB数量级的数据传输,如果需要传… - [DataX ODPSReader](https://haokiu.com/blog/5b1b6009df684895ab2ef943e412ee8a/index.md): DataX ODPSReader --- 1 快速介绍 ODPSReader 实现了从 ODPS读取数据的功能,有关ODPS请参看(https://help.aliyun.com/documentde… - [DataX OCSWriter 适用memcached客户端写入ocs](https://haokiu.com/blog/d4b1e453f8274dda834a305a5e6a38bf/index.md): DataX OCSWriter 适用memcached客户端写入ocs --- 1 快速介绍 1.1 OCS简介 开放缓存服务( Open Cache Service,简称OCS)是基于内存的缓存服务… - [DataX MysqlWriter](https://haokiu.com/blog/ee3103b29d5b4fa696cb69e35fefb970/index.md): DataX MysqlWriter --- 1 快速介绍 MysqlWriter 插件实现了写入数据到 Mysql 主库的目的表的功能。在底层实现上, MysqlWriter 通过 JDBC 连接远程… - [Datax MongoDBWriter](https://haokiu.com/blog/1b755458e9fa4e6f89a7d44321cd92ec/index.md): Datax MongoDBWriter 1 快速介绍 MongoDBWriter 插件利用 MongoDB 的java客户端MongoClient进行MongoDB的写操作。最新版本的Mongo已经将… - [Datax MongoDBReader](https://haokiu.com/blog/41dfc822f8ca4bca812501f2801fc78e/index.md): Datax MongoDBReader 1 快速介绍 MongoDBReader 插件利用 MongoDB 的java客户端MongoClient进行MongoDB的读操作。最新版本的Mongo已经将… - [DataX KingbaseesWriter](https://haokiu.com/blog/a50c2cb341e14f7d995d470380e24d34/index.md): DataX KingbaseesWriter --- 1 快速介绍 KingbaseesWriter插件实现了写入数据到 KingbaseES主库目的表的功能。在底层实现上,KingbaseesWri… - [DataX HdfsWriter 插件文档](https://haokiu.com/blog/dd5ebd2f221f4913ae09f61f3877725e/index.md): DataX HdfsWriter 插件文档 ------------ 1 快速介绍 HdfsWriter提供向HDFS文件系统指定路径中写入TEXTFile文件和ORCFile文件,文件内容可与hiv… - [DataX HdfsReader 插件文档](https://haokiu.com/blog/e123c1afd572427f9fa4d27ba10b1e99/index.md): DataX HdfsReader 插件文档 ------------ 1 快速介绍 HdfsReader提供了读取分布式文件系统数据存储的能力。在底层实现上,HdfsReader获取分布式文件系统上文… - [DataX GDBWriter](https://haokiu.com/blog/3830a303d3e34cec88b98eab9934006d/index.md): DataX GDBWriter 1 快速介绍 GDBWriter插件实现了写入数据到GDB实例的功能。GDBWriter通过 连接远程GDB实例,获取Reader的数据,生成写入DSL语句,将数据写入… - [DataX GDBReader](https://haokiu.com/blog/ef41ae35929b479db90214d2ebe5ff8a/index.md): DataX GDBReader 快速介绍 GDBReader插件实现读取GDB实例数据的功能,通过 连接远程GDB实例,按配置提供的 生成查询DSL,遍历点或边数据,包括属性数据,并将数据写入到Rec… - [DataX FtpWriter 说明](https://haokiu.com/blog/8f4c3b36705842458a8550717b87b66c/index.md): DataX FtpWriter 说明 ------------ 1 快速介绍 FtpWriter提供了向远程FTP文件写入CSV格式的一个或者多个文件,在底层实现上,FtpWriter将DataX传输… - [DataX FtpReader 说明](https://haokiu.com/blog/0b6970ee252d4875841a98382b04f30b/index.md): DataX FtpReader 说明 ------------ 1 快速介绍 FtpReader提供了读取远程FTP文件系统数据存储的能力。在底层实现上,FtpReader获取远程FTP文件数据,并转… - [DataX ElasticSearchWriter](https://haokiu.com/blog/5e857fe9cf5743dc837f14fbc9f0a876/index.md): DataX ElasticSearchWriter --- 1 快速介绍 数据导入elasticsearch的插件 2 实现原理 使用elasticsearch的rest api接口, 批量把从rea… - [DataX DRDSWriter](https://haokiu.com/blog/d31c9e889b154a0f96e4eb4be5c50467/index.md): DataX DRDSWriter --- 1 快速介绍 DRDSWriter 插件实现了写入数据到 DRDS 的目的表的功能。在底层实现上, DRDSWriter 通过 JDBC 连接远程 DRDS… - [DataX ADS写入](https://haokiu.com/blog/5d26f13c5f3e4cda84adc613514cdd53/index.md): DataX ADS写入 --- 1 快速介绍 欢迎ADS加入DataX生态圈!ADSWriter插件实现了其他数据源向ADS写入功能,现有DataX所有的数据源均可以无缝接入ADS,实现数据快速导入A… - [DataX ADB PG Writer](https://haokiu.com/blog/1c4beb639bad47a79445e1bb8ccd68a5/index.md): DataX ADB PG Writer --- 1 快速介绍 AdbpgWriter 插件实现了写入数据到 ABD PG版数据库的功能。在底层实现上,AdbpgWriter 插件会先缓存需要写入的数据… - [datax 3.0 教程](https://haokiu.com/blog/bk-4/index.md): DataX DataX ADB PG Writer DataX ADS写入 CassandraReader 插件文档 CassandraWriter 插件文档 Readme.md DataX插件开发宝… - [DataX](https://haokiu.com/blog/f4223fe7c5a64b12ae87c43ed48cc971/index.md): DataX DataX 是阿里巴巴集团内被广泛使用的离线数据同步工具/平台,实现包括 MySQL、SQL Server、Oracle、PostgreSQL、HDFS、Hive、HBase、OTS、OD… - [DataX](https://haokiu.com/blog/dcdba0138c4f45f0a08968ab48edb900/index.md): DataX DataX 是阿里巴巴集团内被广泛使用的离线数据同步工具/平台,实现包括 MySQL、Oracle、SqlServer、Postgre、HDFS、Hive、ADS、HBase、TableS… - [CassandraWriter 插件文档](https://haokiu.com/blog/056d47f442c1471da1b62d7062dd00e2/index.md): CassandraWriter 插件文档 1 快速介绍 CassandraWriter插件实现了向Cassandra写入数据。在底层实现上,CassandraWriter通过datastax的java… - [CassandraReader 插件文档](https://haokiu.com/blog/b0b0444d45c74c8f8b1a9fc4d2af738a/index.md): CassandraReader 插件文档 1 快速介绍 CassandraReader插件实现了从Cassandra读取数据。在底层实现上,CassandraReader通过datastax的java… - [mysql replace ](https://haokiu.com/blog/nfvw4R/index.md): mysql replace 可以将字段的字符串内容替换,语法: 使用样例: - [OLAP](https://haokiu.com/blog/OLAP/index.md): OLAP 在数据仓库一章中我们讨论了数据仓库及其模型的概念,而数据库与数据仓库的区别实际讲的是 OLTP 与 OLAP 的区别。操作型处理,叫联机事务处理 OLTP(On-Line Transacti… - [数据中台](https://haokiu.com/blog/3OKmkr/index.md): 数据中台 阿里在 2018 年提出了所谓“数据中台”的概念:即数据被统一采集,规范数据语义和业务口径形成企业基础数据模型,提供统一的分析查询和新业务的数据对接能力。数据中台并不是新的颠覆式技术,而是一… - [presto 官网](https://haokiu.com/blog/FhpG3z/index.md): 现在 presto 有两个官网: 旧presto官网 新presto官网 - [presto 支持的数据源](https://haokiu.com/blog/7mlwkW/index.md): presto 有很多连接器以支持不同的数据源: Accumulo BigQuery Black Hole Cassandra Druid Elasticsearch Google Sheets Ice… - [sql 优化](https://haokiu.com/blog/XEhpYv/index.md): SQL 优化已经成为衡量程序猿优秀与否的硬性指标,甚至在各大厂招聘岗位职能上都有明码标注。 有朋友疑问到,SQL 优化真的有这么重要么?如下图所示,SQL 优化在提升系统性能中是:成本最低和优化效果最… - [elasticsearch](https://haokiu.com/blog/3XTrh1/index.md): 基本概念 Node 与 Cluster Elastic 本质上是一个分布式数据库,允许多台服务器协同工作,每台服务器可以运行多个 Elastic 实例。 单个 Elastic 实例称为一个节点(nod… ## linux - [linux 复制文件,并创建不存在的目录](https://haokiu.com/blog/a0lZoj/index.md): linux复制文件和目录用cp命令, 参数可以确保不存在目录的创建,比如文件 ,如果目录 doc不存在目录:java/doc则会创建。 高级操作: - [Vim 从入门到精通](https://haokiu.com/blog/fhRygg/index.md): 什么是 Vim? Vim 是一个历史悠久的文本编辑器,可以追溯到 qed>)。 Bram Moolenaar 于 1991 年发布初始版本。 Linux、Mac 用户,可以使用包管理器安装 Vim,对… - [docker apt-get](https://haokiu.com/blog/d5nhvK/index.md): 为了节省空间,docker 容器里面有很多命令是没有安装的,提示: Reading package lists... Done Building dependency tree Reading sta… - [git 查看远程地址](https://haokiu.com/blog/ss9sfI/index.md): 有时需要查看本地开发的git项目的远程仓库地址 可以方便的查看远程仓库的地址 -v : verbose,冗余的意思 - [简单脚本实现服务监控](https://haokiu.com/blog/5XKHkb/index.md): 服务经常会重启失败,写了个简单的shell叫脚本,可以发现服务端口是否起来,没有发现监听端口会重启服务 1.监控脚本 2.系统定时任务 - [haokiu网站启动脚本](https://haokiu.com/blog/v3yn45/index.md): haokiu 的启动脚本,配置 https 可以参考beego 通过acms.sh 使用 https - [网站部署脚本](https://haokiu.com/blog/1gTd1h/index.md): 网站的部署脚本 ## 其他 - [googo 邀请码 lbVOQjeS](https://haokiu.com/blog/googo/index.md): googo 可以让你更好的浏览外文网站,比如meta、youtube,google等。 它之前的网址是googo.in,现在已经不用访问。是一款非常好用的科学上网工具,使用简单。 使用这个链接可以获取… - [序](https://haokiu.com/blog/cffcc67d768246fd8624b3e5b98854f5/index.md): 序 大、快、多样性只是表象,大数据的真正价值在于生命性和生态性。(活数据) 第1 章 总述 如果不能对数据进行有序、有结构地分类组织和存储,如果不能有效利用并发掘它,继而产生价值,那么它同时也成为一场… - [三、Paxos的工程实践](https://haokiu.com/blog/3426588a7834499f8a9a1b7e46817c0c/index.md): 2.2.3 Paxos算法详解 假设有一组可以提出提案的进程集合,那么对于一个一致性算法来说需要保证以下几点: 在这些被提出的提案中,只有一个会被选定。 如果没有填被提出,那么就不会有被选定的提案。… - [第一章 并发编程的挑战](https://haokiu.com/blog/f6ad1487667e4880973e3b21505810be/index.md): 本书特色 结合JDK源码介绍了Java并发框架、线程池的实现原理。 不仅仅局限于Java层面,更深入JVM,CPU。 结合线上应用,给出了一些并发编程实战技巧。 第一章 并发编程的挑战 如果希望通过多… - [第8章 虚拟机字节码执行系统](https://haokiu.com/blog/499b1754f0844c299d9bf24652161845/index.md): 6.4字节码指令简介 Java虚拟机的指令由一个字节长度的、代表着某种特定操作含义的数字(称为操作码,Opcode)以及跟随其后的零至多个代表此操作所需参数(称为操作数,Operands)而构成。由于… - [第6章 深入分析ClassLoader工作机制](https://haokiu.com/blog/eec901917e884002a43f917c02f47dd9/index.md): 第6章 深入分析ClassLoader工作机制 三个作用: 将Class加载到JVM中; 审查每个类应该由谁加载(双亲委派); 将CLass字节码重新解析成JVM统一要求的格式。 6.1 ClassL… - [第2章 Tomcat总体架构](https://haokiu.com/blog/a9dcb2a7a21d49dea965eedc7e169c79/index.md): 第2章 Tomcat总体架构 系统设计及中间件设计时的参考:生命周期管理、可扩展的容器组件设计、类加载方式。 2.1 总体设计 如何设计一个应用服务器? 2.1.1 Server 最基本的功能:接收请… - [第2章 InnoDB存储引擎](https://haokiu.com/blog/232f08ac38d0478dab889420f809c20e/index.md): 第2章 InnoDB存储引擎 事务安全。 2.1 InnoDB存储引擎概述 Mysql5.5开始是默认的表存储引擎(之前尽在Window下是)。第一个完整支持ACID事务的MySQL存储引擎。其特点是… - [第1章 概述](https://haokiu.com/blog/b221a7f05b774f7ab4305cff0f244d52/index.md): 第1章 概述 互联网公司的分布式两个特点:规模大、成本低。 1.1 分布式存储概念 定义:分布式存储系统是大量普通PC服务器通过Internet互联,对外作为一个整体提供存储服务。 特性: 可扩展。集… - [第1章 Spring框架的由来](https://haokiu.com/blog/567c6d054f1d4d53a29e9d24f213165a/index.md): 第1章 Spring框架的由来 1.1 Spring之崛起 1.2 Spring框架概述 基于POJO(Plain Old Java Object,简单Java对象)的轻量级开发理念。 Spring总… - [第1章 Java的I/O演进之路](https://haokiu.com/blog/e15796699f1a419ba85731d159eba322/index.md): 第1章 Java的I/O演进之路 1.1 I/O基础入门 1.1.1 Linux网络I/O模型简介 UNIX提供了5种I/O模型: (1)阻塞I/O模型 (2)非阻塞I/O模型 (3)I/O复用模型… - [Hobert读书笔记](https://haokiu.com/blog/bk-5/index.md): 第一章 并发编程的挑战 第2章 InnoDB存储引擎 第1章 Java的I/O演进之路 第1章 Spring框架的由来 第2章 Tomcat总体架构 三、Paxos的工程实践 序 第1章 概述 第6章… - [lantern 邀请码](https://haokiu.com/blog/g6ADCM/index.md): lantern 是一款专业的代理软件,方便更好的使用互联网,输入我的邀请码 46KBX2 来获得三个月的蓝灯专业版!立即下载 https://github.com/getlantern/forum - [idea 付费版和免费版的区别](https://haokiu.com/blog/oqQib8/index.md): idea 付费版和免费版的区别 | | IntelliJ IDEA Ultimate | IntelliJ IDEA Community Edition | | -------------------… - [github 的 master 分支将更改为 main](https://haokiu.com/blog/LcW9jL/index.md): 从今年 10 月 1 日起,GitHub 在该平台上创建的所有新的源代码仓库将默认被命名为 "main",而不是原先的"master"。值得注意的是,现有的存储库不会受到此更改影响。 早在今年 6 月… - [免费的云存储](https://haokiu.com/blog/0K1gzu/index.md): 七牛云存储 提供了每月10G的免费存储,一般的网站已经够用,如果超额了,费用也很低,可以考虑将网站的图片存在七牛,安全可靠。 - [在线交互式学习k8s/docker/linux](https://haokiu.com/blog/baIB8x/index.md): katacoda is Interactive Learning and Training Platform for Software Engineers Helping Developers Lea… - [vscode 列选择 快捷键](https://haokiu.com/blog/QCpYff/index.md): vscode 列选择 快捷键: - [frp 使用](https://haokiu.com/blog/HYawYY/index.md): frp 是一个可用于内网穿透的高性能的反向代理应用,支持 tcp, udp, http, https 协议。本文简单的介绍frp的配置使用。 实现内网穿需要有一台公网服务器。本文将公网服务器称为服务端…