目录

最新文章

redis-cli 昨天

文章无缩略内容。

概述 昨天

微服务设计 昨天

领域驱动设计

持续交付理论

每次提交均可发布

六边形架构理论

按需虚拟化

基础设施自动化

小型自治团队

大型集群系统

SOA (Service Oriented Architecture) :面向服务架构。微服务可以看成是SOA的一种特定方法。

微服务:一些协同工作的小而自治的服务。好处:

  • 技术异构

  • 弹性

  • 拓展性

  • 简化部署,可以灵活发布

  • 与公司组织结构相匹配

  • 可组合性,易于重用服务,构建新业务

  • 可替代性

可以重用的共享库在微服务中会是一个问题:

  • 如果两个微服务共享一个重用库,那么两个微服务都需要重新发布

  • 如果各自维护,又会带来,代码不一致的维护负担

架构师 类比 城市规划师

ThinkPHP 2021年3月31日

文章无缩略内容。

netwox 2021年3月31日

https://sourceforge.net/projects/ntwox/

$ sudo apt-get install netwox

ssh 2021年3月31日

SSH 是一个安全的客户端/网络端协议,是关于如何在网络上构建安全通信的规范。实现该规范,可以为一些不安全的网络应用程序 Telnet / FTP / 基于TCP/IP程序增加安全性。

它的内容包括以下三点:

  • 认证:可信地判断出用户的身份,通过SSH登录,需要提供数字身份证明,通过测试后才允许登录

  • 加密:对数据进行加密,除接受者,其他人都无法理解数据

  • 完整性:确保网络上传输的数据到达目的地时,没有被改变

认证是双向的,包含了server 对 client 的验证,也包含了 client 对 server 的验证。

SSH 提供的端到端的加密,基础是随机密钥,每次通过验证后,都会产生一个会话,client 与 server 协商产生随机密钥,发送的数据全部使用该密钥加密。在会话结束后,该密钥被丢弃。对数据加密的算法有: Blowfish / DES / IDEA (对称加密) 等。

授权是认证之后进行的,可以对通过ssh登录的用户权限进行一些限制。

https 2021年3月31日

安全背后: 浏览器是如何校验证书的

https://cjting.me/2021/03/02/how-to-validate-tls-certificate/

css面试 2021年3月31日

如何理解 CSS 的盒子模型?

每个 HTML 元素都是长方形盒子。
(1)盒子模型有两种:IE 盒子模型、标准 W3C 盒子模型;IE 的 content 部分包含了 border 和 pading。
(2)标准 W3C 盒模型包含:内容(content)、填充(padding)、边界(margin)、边框(border)。

link 和@import 的区别?

(1)link 属于 XHTML 标签,而@import 是 CSS 提供的。
(2)页面被加载时,link 会同时被加载,而@import 引用的 CSS 会等到页面被加载完再加载。
(3)import 只在 IE 5 以上才能识别,而 link 是 XHTML 标签,无兼容问题。
(4)link 方式的样式权重高于@import 的权重。
(5)使用 dom 控制样式时的差别。当使用 javascript 控制 dom 去改变样式的时候,只能使用 link 标签,因为@import 不是 dom 可以控制的。

CSS 选择符有哪些?哪些属性可以继承?优先级算法如何计算?CSS 3 新增伪类有哪些?

id 选择器(# myid)
类选择器(.myclassname)
标签选择器(div、h1、p)
相邻选择器(h1 + p)
子选择器(ul < li)
后代选择器(li a)
通配符选择器( * )
属性选择器(a[rel = "external"])
伪类选择器(a: hover, li: nth - child)
可继承: font-size font-family color, UL LI DL DD DT;
不可继承 :border padding margin width height ;
优先级就近原则,样式定义最近者为准,载入样式以最后载入的定位为准。
优先级为:
!important > id > class > tag
important 比 内联优先级高
CSS3 新增伪类举例:
p:first-of-type 选择属于其父元素的首个<p>元素的每个<p>元素。
p:last-of-type 选择属于其父元素的最后<p>元素的每个<p>元素。
p:only-of-type 选择属于其父元素唯一的<p>元素的每个<p>元素。
p:only-child 选择属于其父元素的唯一子元素的每个<p>元素。
p:nth-child(2) 选择属于其父元素的第二个子元素的每个<p>元素。
:enabled、:disabled 控制表单控件的禁用状态。
:checked 单选框或复选框被选中。

用纯 CSS 创建一个三角形的原理是什么?

api接口设计 2021年3月31日

最好的方法是限定几个可以访问 api 的域名,其他域名全部拒绝。
但是Access-Control-Allow-Origin只能设置一个值,所以要多端共用,只有header("Access-Control-Allow-Origin:*");

web 优化 2021年3月31日

动静分离

所谓的动静分离,就是将 Web 应用程序中静态和动态的内容分别放在不同的 Web 服务器上,有针对性的处理动态和静态内容,从而达到性能的提升。我们知道如果一个 HTML 有多个域名请求数据文件会提高
Tomcat 服务器在处理静态和并发问题上比较弱,所以事先动静分离的方式一般会用 Apache+Tomcat、Nginx+Tomcat 等。

以 Apache+Tomcat 为例,其运行机理是:页面请求首先给 Apache,然后 Apache 分析请求信息是静态还是动态,静态则本机处理,动态则交给 Tomcat 做处理这其实是负载均衡的雏形,这样的实现不用让开发人员做任何特殊开发,一个<img src="demo.jpg">交给服务器即可,至于这个文件是从 Apache 还是从 Tomcat 取得,开发人员完全无需关注。

HTTP 持久连接

持久连接(Keep-Alive)也叫做长连接,它是一种 TCP 的连接方式,连接会被浏览器和服务器所缓存,在下次连接同一服务器时,缓存的连接被重新使用。HTTP 无状态性表示了它不属于长连接,但 HTTP/1.1 提供了对长连接的支持(不过这必须依赖浏览器和服务器双方均支持长连接功能才行),最常见的 HTTP 长连接例子是“断点下载”。
浏览器在请求的头部添加 Connection:Keep-Alive,以此告诉服务器“我支持长连接,你支持的话就和我建立长连接吧”,而倘若服务器的确支持长连接,那么就在响应头部添加“Connection:Keep-Alive”,从而告诉浏览器“我的确也支持,那我们建立长连接吧”。服务器还可以通过 Keep-Alive:timeout=..., max=...的头部告诉浏览器长连接失效时间。
配置长连接通常是要服务器支持设置,有测试数据显示,使用长连接和不使用长连接的性能对比,对于 Tomcat 配置的 maxKeepAliveRequests 为 50 来说,效率竟然提升了将近 5 倍。

GZIP 压缩技术

Unixlinux编程实践 2021年3月31日

文章无缩略内容。

linux系统编程 2021年3月31日

文章无缩略内容。

网络层 2021年3月31日

文章无缩略内容。

CDN 2021年3月31日

image-20210318135436554

负载均衡系统是一个CDN系统的神经中枢,主要功能是负责对所有发起服务请求的用户进行访问调度,确定提供给用户的最终实际访问地址。

image-20210318135830572

  • GAC(Global Access Controller)模块对应于图2-1中的负载均衡系统,主要采用了智能DNS解析方案,负责通过域名解析应答实现将用户请求调度到最优服务节点的目的。

  • CCN(ChinaCache Nod)模块对应于图2-1中的分发服务系统,是CDN的基本服务模块,由分布于各个城市、各个运营商网络中的Cache设备和辅助设备组成。

  • NOC(Network Operating Center)模块对应图2-1中的网络管理系统,负责对全网进行7×24小时的监控和管理。NOC可以监控ChinaCache CDN中的链路状况、节点响应速度、设备运行状态,也可以监控到客户的源站点运行状况等信息,一旦发现异常马上采取相应措施予以解决,是保障CDN服务安全可靠性的重要系统。值得一提的是,蓝汛的NOC中设置了源站点监控功能,对客户源站进行可达性监控,从而减轻或者避免由于源站故障造成的服务中断。

  • OSS(Operating Support System)模块对应图2-1中的运营管理子系统,负责采集和汇总各个CCN的日志记录信息,然后由中央处理软件加以整理和分析,最后通过客户服务门户进行发布。蓝汛的客户可以通过OSS提供的查询界面来查询加速页面或频道的实时流量、流量分布、点击数量、访问日志等信息。

image-20210318144834690

首先由用户代理(IP地址10.9.55.68,端口4719)向服务器主机(IP地址202.102.86.141,端口80,这里的服务器不是源服务器)发起TCP连接建立请求[SYN],服务器同意用户请求并向用户代理响应[SYN, ACK],用户代理再返回[ACK],这样双方就通过三次握手过程建立起了一个TCP连接。

image-20210318151200423

高可用 2021年3月31日

需求驱动驱动;而高可用与高性能,是架构设计中两个非常重要的决策因素。因此,面对不同业务系统的不同需求,对高可用与高性能也会有不同的决策结论,其实现的复杂度也各不相同。支付宝业务,对于可用性和性能就会有很高的要求,在可用性方面希望能提供7*24不间断服务,在高性能方面则希望能实时收付款;而对于一个学生管理系统,在可用性与性能方面就不一定要有多高的要求,比如晚上可关机,几秒内能查询到信息也可接受。为此,高可用性与高性能的复杂度讨论需要结合业务需求。

1 WHAT - 什么是可用性?
定义可用性,可以先定义什么是不可用。需要经历若干环节,网站的页面才能呈现在最终的用户面前;而其中的任何一个环节出现了故障,都可能会导致网站的页面不可访问,也就是出现了网站不可用的情况。昨夜iOS版本QQ出现大面积闪退就是一个系统不可用的典型案例。

我们可以利用百分比来对网站可用性进行度量:
网站不可用时间=完成故障修复的时间点 - 故障发现的时间点
网站年度可用时间=年度总时间 - 网站不可用时间
网站年度可用性=(网站年度可用时间/年度总时间) x 100%

举例:一些知名大型网站的可用性可达到99.99%(俗称4个9),我们可以算一下一年下来留给处理故障的时间有多少?
年度总时间=3652460=525600分钟
网站不可用时间=525600*(1-99.99%)=52.56分钟
也就是,如果网站要达到4个9的可用性,一年下来网站不可用时间最多53分钟(也就是不足1个小时)。

可见,高可用性就是技术实力的象征,高可用性就是竞争力。

2 WHY - 为什么会出现不可用?
硬件故障。网站多运行在普通的商用服务器,而这些服务器本身就不具备高可用性,再加之网站系统背后有数量众多服务器,那么一定时间内服务器宕机是大概率事件,直接导致部署在该服务器上的服务受影响。

软件BUG或网站更新升级发布。BUG不能消灭,只能减少;上线后的系统在运行过程中,难免会出现故障,而这些故障同样直接导致某些网站服务不可用;此外,网站更新升级发布也会引起相对较频繁的服务器宕机。

不可抗拒力。如地震、水灾、战争等。

3 HOW - 如何做到高可用
核心思想:网站高可用的主要技术手段是服务与数据的冗余备份与失效转移。同一服务组件部署在多台服务器上;数据存储在多台服务器上互相备份。通过上述技术手段,当任何一台服务器宕机或出现各种不可预期的问题时,就将相应的服务切换到其他可用的服务器上,不影响系统的整体可用性,也不会导致数据丢失。

从架构角度看可用性:当前网站系统多采用经典的分层模型,从上到下为:应用层、服务层与数据层。应用层主要实现业务逻辑处理;服务层提供可复用的服务;数据层负责数据读写;在部署架构上常采用应用和数据分离部署,应用会部署到不同服务器上,这些服务器被称为应用层的服务器;这些可复用的服务也会各自部署在不同服务器上,称为服务层的服务器;而各类数据库系统、文件柜等数据则部署在数据层的服务器。

硬件故障方面引起不可用的技术解决措施:(1)应用服务器。可通过负载均衡设备将多个应用服务器构建为集群对外提供服务(前提是这些服务需要设计为无状态,即应用服务器不保存业务的上下文信息,而仅根据每次请求提交的数据进行业务逻辑的操作响应),当均衡设备通过心跳检测手段检测到应用服务器不可用时,则将其从集群中移除,并将请求切换到其他可用的应用服务上。(2)服务层服务器。这些服务器被应用层通过分布式服务框架(如Dubbo)访问,分布式服务框架可在应用层客户端程序中实现软件负载均衡,并通过服务注册中心提供服务的服务器进行心跳检测,当发现有服务器不可用时,立即通知客户端程序修改服务列表,同时移除响应的服务器。(3)数据服务器。需要在数据写入时进行数据同步复制,将数据写入多台服务器上,实现数据冗余备份;当数据服务器宕机时,应用程序将访问切换到有备份数据的服务器上。

软件方面引起不可用的技术解决措施:通过软件开发过程进行质量保证。通过预发布验证、严格测试、灰度发布等手段,尽量减少上线服务的故障。

计算机硬件 2021年3月31日

系统硬件

CMOS是一块芯片,记录计算机硬件信息。BIOS 是可以修改 CMOS 的程序,该程序为写死在硬件上,不可修改。硬件开机,第一个执行的程序便是 BIOS ,然后再是操作系统的引导程序(MBR:主引导记录,GRUB:统一引导加载器),然后是操作系统内核,再是内核上的操作系统。

进程 2021年3月31日

进程是一个正在执行的程序实例,各进程拥有自己独立的地址空间:

  • 只能访问系统分配给它们的内存地址

  • 进程也不能直接访问内核功能,必须通过 system call 来完成

  • 0号进程为调度进程,是内核的一部分

  • 1号进程(init进程)由内核启动,读取 /etc/rc* /etc/inittab /etc/init.d 配置,是系统后来所有进程的祖先,是所有孤儿进程的父进程

内核活动:

  • 进程 process

  • 系统调用 system call

  • 内核线程 kernel thread

  • 硬件中断 Hardware IRQ

  • 软件中断 Software IRQ

  • tasklet

  • bottom half

硬件中断

外部设备用硬件中断来通知操作系统有重要的事件发生,中断发生后,CPU会暂时停止当前程序的执行,转去执行中断处理程序,中断处理程序结束后再恢复原来被停止程序的执行。

硬件中断是一种系统资源,当我们为设备编写中断处理程序来处理外部事件时,要向系统申请中断资源(即硬件中断信号线,通常称为中断号),并将中断处理程序与中断源相关联。

链路层 2021年3月31日

在两个网络实体之间提供数据链路通路的建立,维持和释放,提供物理地址寻址,数据成帧,流量控制,数据检错,重发等功能

目前主要有两种链路

  • 点对点链路:链路一端只有一个发送方,另一端只有一个接收方

  • 广播链路/广播信道:能够让多个发送和接收节点,都连接到相同的 统一的 共享的广播信道上

三个基本问题: 封装成帧,透明传输,差错检测

  • 封装成帧 : 在一段数据的前后分别添加首部SOH 帧开始符和尾部EOT 帧结束符,这样就构成了一个帧。

  • 透明传输 : 在传输二进制文件时,数据有EOT帧结束符一样的编码,如何在接收端不解释为尾部呢?答案是在前面插入ESC字符,在接收端接收完数据后,再将ESC去除掉,这叫字节填充

  • 差错检测 : 比特在传输过程中,1可能变成0, 0也可能变成1,使用循环冗余检验CRC或者帧检验序列方法可以检测出来

在通信质量比较差的无线传输链路,数据连接层协议使用了帧编号,确认和重传机制,向上层提供可靠传输的服务,而在通信质量好的有线链路,则没有这些机制,而是交给上层 TCP 完成确认和重传

wireshark 2021年3月31日

Wireshark会捕获指定接口上的所有数据,并全部显示。这样会导致在分析这些数据包时,很难找到想要分析的那部分数据包。这时可以借助显示过滤器快速查找数据包。

image-20210322013645195

select和poll及epoll 2021年3月31日

文章无缩略内容。

高性能服务器编程 2021年3月31日

文章无缩略内容。

CSAPP 2021年3月31日

第一部分: 1 ~ 6 , 帮助我理解了程序和硬件之间的交互关系。

第二部分: 7 ~ 9 , 帮助我理解了程序和操作系统之间的交互关系。

第三部分: 10 ~12 , 帮助我理解了与I/O设备以及其他程序通信,理解了网络服务程序和并发程序。

进程

系统保持跟踪进程运行所需的所有状态信息,这种状态称为“上下文”,它包括了程序计数器PC、各个寄存器、使用到的内存。在任一时刻,一个处理器只能执行一个进程的指令。

当系统决定将控制权从当前进程转移到另一个进程时,就会进行“上下文切换”,即保存当前进程的“上下文”,然后加载别的进程的“上下文”。

进程切换

虚拟内存

  • 虚拟内存为进程提供了一个假象,即每个进程都在独占内存,每个进程看到的都是一样的存储器,称为虚拟地址空间

  • 每个进程看到的虚拟地址空间由准确定义的区组成,每个区都有专门的功能

  • 程序代码区:对所有进程来说,代码是从同一固定地址开始

  • C全局变量区:紧邻着程序代码区,存储的的是初始化的数据

  • 堆:紧邻着全局变量区,可以动态扩展使用的内存,使用malloc申请,free释放

  • 共享库:存在虚拟地址空间中间,存放的是c标准库

  • 栈:位于用户虚拟地址空间顶层(它的上面是内核虚拟地址空间,是不允许用户操作的),编译器使用它来实现函数调用,函数调用,栈增长,函数返回,栈消退

  • 内核虚拟存储器:位于整个虚拟存储器顶部,是为内核保留的,不允许应用程序读写和直接调用内核代码定义的函数

文件

文件就是字节序列,仅此而已。每个IO设备,磁盘、键盘、显示器、网络,都可以看成是文件。

文件向应用程序提供了一个统一的视角,来看待系统中各式各样的设备,例如,处理磁盘文件内容,无需了解具体的磁盘文件,同一个程序就可以在使用不同磁盘技术的不同系统上运行。

Linux系统原理 2021年3月31日

单内核设计:内核从整体上作为一个单独的大过程来实现,运行在一个单独的地址空间上,内核以单个二进制文件的形式存放于磁盘中.因为所有内核服务都在这样一个大内核地址空间上运行,所以通信可以直接调用函数来实现。linux 就是一个单内核设计。

本文记录的是我学习到的Linux本身的一些原理性的知识,它的构成与实现。

image-20210320185347876

进程管理

负责创建、结束进程,管理内核的活动,如软件中断、tasklet等,管理进程间通信,如消息(message)、管道(pipe)等,实现进程调度(schedule)。进程调度是进程管理的重要任务,它处理所有活动的、等待被执行的和被阻塞(blocking)的进程调度,使所有应用和进程合理地共享处理器的运行时间。

内存管理

内存是系统最主要的资源之一,计算机的性能在很大程度上与其所配备的内存有关。Linux内核内存管理的主要功能就是给进程分配地址空间,该地址空间只允许本进程自己访问。

文件系统

在Linux操作系统中,文件系统是整个系统的中枢。Linux与其他操作系统不同,几乎所有的操作都基于文件系统接口的处理,如设备驱动程序可以按文件方式访问设备,通过/proc文件系统可以访问Linux内核的数据和参数,这两个功能在调试时非常有效。

设备驱动程序

在所有的操作系统中,设备驱动程序都是硬件的抽象,通过它可以访问硬件。Linux可以用模块(模块)的方式实现设备驱动程序,提供了在系统运行时动态加载和卸载设备驱动程序的途径。

网络子系统

在Linux中所有的网络操作是由操作系统管理的。这是因为网络操作不能分配给某个进程完成。在处理收到的网络数据包时,数据包的接收是异步事件。接收数据包任务必须在进程处理这些数据包前先收集齐所有的网络包、标识数据,然后向上层传送,这就是为什么由内核的网络子系统负责处理数据包,而不是由某个进程和网络接口来处理。

现代操作系统 2021年3月31日

本文是《现代操作系统》第 4 版的笔记。

16位CPU汇编语言 2021年3月31日

16 位 8086 CPU 的相关知识。

项目下载地址

32位CPU汇编语言 2021年3月31日

x86x86-64PowerPCARM CPU 的 32 位指令集是不同的,而目前的汇编语言有两种 intelAT&TGcc编译器都是默认使用AT&T汇编语言的。汇编器 nasmmasmasyasm 可以将汇编语言编译成对应平台的目标文件。

ibm Nasm 文章
Linux 汇编语言程序设计 (使用 NASM)

64位CPU汇编语言 2021年3月31日

Linux下 64 位汇编语言学习记录。时至今日,汇编语言的重点已经不是编写汇编语言代码,而是看懂 GCC 编译器生成的汇编语言,本文正是以此为目标进行学习。

CPU 2021年3月31日

CPU两种工作模式:

  • 内核态:能访问所有硬件、能使用所有机器指令

  • 用户态:受限制的硬件访问、只能使用部分机器指令

编码 2021年3月31日

《编码 隐匿在计算机软硬件背后的语言》笔记

补码 2021年3月31日

现实生活中,我们有加法、减法、乘法和除法,但在计算机中只有一个加法器。换句话说,加法运算在计算机中可以直接完成,减法、乘法和除法运算最终也得转换为加法才能实现。

一个数减去另外一个数,与一个数加上 "另外一个数的补码" 结果是一样的。这就是补码对于计算机的意义:将减法运算变成了加法运算。

传输层 2021年3月31日

  • 负责将上层数据分段并提供端到端的、可靠的或不可靠的传输以及端到端的差错控制和流量控制问题

  • 协议: TCP 传输控制协议、UDP 用户数据报协议

  • 重要设备:网关

TCP :双方必须先建立链接(三次握手)才可收发数据,内核维护了连接状态、读写缓冲区、定时器等结构。数据传送是基于字节流,一端不断的写入,另一端不断的接收。但通信结束时,必须断开链接(四次挥手),释放内核相关结构数据

UDP:无连接,每次发送数据都要指明接收端地址,基于数据报传输数据,每次发送的数据包的长度固定,接收时也必须一次性读取整个数据包(否则数据就被截断)

应用层 2021年3月31日

协议分层设计要完成的功能

  • 差错控制 相应层次对等方的通信要可靠

  • 流量控制 发送端的发送速率必须使接收端来得及接收,不要太快

  • 分段和重装 发送端将要发送的数据划分成更小的单位,在接收端将其还原

  • 复用和分用 发送端几个高层会话复用一条低层的链接,在接收端再进行分用

  • 链接的建立和释放 交换数据前先建立一条逻辑链接,数据传送结束后释放链接

TCP/IP 体系结构

    • 应用层 TELNET FTP SMTP HTTP 定义的是应用进程间通信和交互的规则

    • 运输层 TCP UDP 不针对某个进程和应用,而是多种应用使用同一个运输层服务,有复用和分用的功能

    • 网络层 IP 把运输层产生的报文封装成分组进行转发

    • 链路层 两个相邻节点传送数据时,该层将网络层交下来的 IP 数据报 封装成 帧 frame,每一帧包括数据和必要的控制信息(同步信息,地址信息,差错控制等),控制信息使接收端能够知道一个帧是从哪个比特开始,到哪个比特结束。收到一个帧后,可以从中提取出数据部分,上交给网络层.控制信息还能检测收到的帧中有无差错。如果发现有差错,数据链路层直接丢弃这个出了差错的帧(上层会重传的)

    • 物理层

    应用层

    • 数据传输基本单位为报文

    • 协议:FTP 文件传送协议、Telnet 远程登录协议、DNS 域名解析协议、SMTP 邮件传送协议,POP3 协议邮局协议,HTTP 协议

    物理层 2021年3月31日

    • 物理层的主要任务:确定与传输媒体的接口有关的一些特性,比如机械特性,电气特性,功能特性和过程特性

    • 数据通信系统: 源系统-传输系统-目的系统

    • 通信的目的是传送消息,语言图像视频都是消息,数据是运送消息的实体,信号是数据的电气或者电磁的表示。

    • 根据信号中代表消息的取值方式不同,信号分为模拟信号和数字信号

    • 根据双方信息交互的方式,通信分为 单向通信 双向交替通信 双向同时通信 ,也被称为单工通信 半双工通信 全双工通信

    • 常用的信道复用技术有 频分复用 时分复用 统计时分复用 码分复用 波分复用 光的频分复用

    • 用户宽带接入到互联网的方法有:ADSL 非对称数字用户线,光纤同轴混合网HFC FTTx

    物理层(Physical Layer)

    • 激活、维持、关闭通信端点之间的机械特性,电气特性、功能特性以及过程特性

    • 为上层协议提供了一个传输数据的可靠的物理媒体

    • 设备: 中继器(Repeater,也叫放大器)和集线器

    • Ethernet 以太网

    • 令牌环网

    • 点对点链接

    • FDDI 光钎分布式数据接口

    • 这些物理网络内部是数据链路层的网桥或者集线器链接在一起的,使用的是 MAC 地址,而物理网络之间的链接使用的是路由器,用的地址为 IP 地址

    分组:数据被切成了一小块一小块,每一小块就叫做分组

    封装

    • 分组被一层一层加上各种首部的过程

    • 以太网首部 + IP 首部 + TCP 首部 + 应用数据 + 以太网尾部

    分用:接收端将封装后的数据,一层一层拆开,分发给上层协议使用,继续拆封装或者处理的过程

    自顶向下 2021年3月31日

    image-20210318004313901

    image-20210318004346429

    高效的命令行 2021年3月31日

    使用命令行工作的一个总结。

    CentOS 2021年3月31日

    文章无缩略内容。

    Ubuntu 2021年3月31日

    Ubuntu 18.04 作为示范机,U 盘装机软件 LinuxLive USB Creator

    link 2021年3月31日

    Go语言圣经 中译资料

    GoWeb编程:Go语言Web编程基础

    Go并发编程实战:非常好的go并发原理解读书籍,但语言组织欠佳

    Go语言学习笔记:言简意赅,深入浅出,力荐

    Go语言高级编程:深入理解Go必备

    开源文档

    https://github.com/overnote OverNote地址:
    https://github.com/ruyuejun 笔者的地址:

    详尽的Go领域笔记:Go语法、Go并发编程、GoWeb编程、Go微服务等
    大前端:包含JavaScript、Node.js、vue/react、微信开发、Flutter等大前端技术
    数据结构与算法:以C/Go实现为主记录数据结构与算法的笔记
    服务端架构:分布式与微服务笔记,附Nginx、Mysql、Redis等常用服务端技术
    Linux:计算机组成原理、操作系统、计算机网络、编译原理基础学科笔记

    大数据:大数据笔记
    Python与机器学习:Python相关笔记

    PHP 网站

    小不点网盘搜索

    配色工具

    电影网站

    Server 酱

    • 一款从服务器推报警和日志到手机的工具,使用方法如下:

    1. 登入:用 GitHub 账号登入网站,就能获得一个 SCKEY(在「发送消息」页面)

    2. 绑定:点击「微信推送」,扫码关注同时即可完成绑定

    3. 发消息:往 http://sc.ftqq.com/SCKEY.send 发 GET 请求,就可以在微信里收到消息啦

    网络工具 2021年3月31日

    net-tools 与 iproute2

    net-tools 起源于BSD,自2001年起,Linux社区已经对其停止维护,net-tools通过 procfs(/proc) 和 ioctl 系统调用去访问和改变内核网络配置。

    而iproute2旨在取代net-tools,并提供了一些新功能。一些Linux发行版已经停止支持net-tools,只支持iproute2。而iproute2则通过netlink套接字接口与内核通讯。

    net-tools中工具的名字比较杂乱,而iproute2则相对整齐和直观,基本是ip命令加后面的子命令。

    虽然取代意图很明显,但是这么多年过去了,net-tool依然还在被广泛使用,最好还是两套命令都掌握吧。

    Struct 2021年3月31日

    文章无缩略内容。

    gpg 2021年3月31日

    参考资料:

    官方英文文档

    GPG配置、命令、实例与apt-key密钥测试

    GnuPG2使用指北

    GPG 入门

    GPG 的正确使用姿势

    2021年,用更现代的方法使用PGP(上)

    清晰图解https如何防范中间人攻击

    Docker技术栈 2021年3月31日

    流程:

    1. 构建并保存镜像快照

    2. 上传镜像到仓库

    3. 下载镜像到生产Host

    4. 以容器方式运行镜像

    5. 将容器连接到其他服务上

    6. 路由流量到容器中

    7. 将容器日志发生到指定位置

    8. 监控容器

    PHP7.2操作MongoDB 2021年3月31日

    文章无缩略内容。

    PHP函数 2021年3月31日

    文章无缩略内容。

    文本处理 2021年3月31日

    1. find 查找出需要处理的所有文件

    2. cat 将所有文件拼接,成为起始的stdin

    3. grepstdin流里过滤出,自己想要的行

    4. sedstdin流进行 字符串替换,tr 对流进行单个字符式的替换、去重、删除

    5. cutstdin中每一行,切出指定列,awk 也是切出指定多个列,还是可编程命令

    6. sort对所有行排序,排序好后,可以用uniq -c去除相同的行,再sort -nr到序输出

    7. wc -l统计下行数,或者sed '100,$d' 只取前 100 行

    运维命令 2021年3月31日

    文章无缩略内容。

    VirtualBox 2021年3月31日

    文章无缩略内容。

    Linux的C 2021年3月31日

    本文记录我在 Linux 下开发 C 程序用到的知识。

    线程 2021年3月31日

    记录自己所学的所有有关于线程的知识。

    KMS 2021年2月28日

    文章无缩略内容。

    MySQL节点 2021年2月28日

    Linux的使用 2021年2月28日

    Ansible 2021年2月28日

    Rsync 2021年2月28日

    安全 2021年2月28日

    待学习 2021年2月28日

    MySQL或MariaDB管理 2021年2月28日

    Docker 2021年2月28日

    Lua脚本 2021年2月28日

    Go类型系统 2021年2月28日

    Zap日志库 2021年2月28日

    PHP参考 2021年2月28日

    设计模式 2021年2月28日

    事务 2021年2月28日

    RabbitMQ 2021年2月28日

    分布式网站 2021年2月28日

    cmake 2021年2月28日

    K8s实战 2021年2月28日

    PHP语言 2021年2月28日

    SHELL 2021年2月28日

    正则表达式 2021年2月28日

    K8s和jenkins 2021年2月28日

    k8s书籍 2021年2月28日

    nginx 2021年2月28日

    SRE 2021年1月31日

    syncMap 2021年1月31日

    ab并发测试工具 2021年1月31日

    Prometheus 2021年1月31日

    PHP节点 2021年1月31日

    事件处理 2021年1月31日

    内置对象 2021年1月31日

    js对象类型检测 2021年1月31日

    PHP会话 2021年1月31日

    启动外部程序和命令 2021年1月31日

    curl 2021年1月31日

    大象Thingking_in_UML 2021年1月31日

    语言导学 2021年1月31日

    Runtime 2021年1月31日

    Xdebug 2021年1月31日

    生产环境部署redis 2021年1月31日

    Apache 2021年1月31日

    git 2021年1月31日

    OS 2021年1月31日

    单词 2021年1月31日

    Docker原理 2020年12月31日

    生产环境 2020年12月31日

    C可变参数函数原理 2020年12月31日

    Effective 2020年12月31日

    任务队列和发布订阅 2020年12月31日

    编程学习路径 2020年12月31日

    codekissyoung 2020年12月31日

    镜像队列 2020年12月31日

    Xhprof 2020年12月31日

    从汇编看C语言 2020年12月31日

    Go函数 2020年12月31日

    PHP异常 2020年12月31日

    PHP规范 2020年12月31日

    闭包 2020年12月31日

    AutoTools 2020年12月31日

    PostgreSQL 2020年12月31日

    SQL 2020年12月31日

    TiDB 2020年12月31日

    Code-review 2020年12月31日

    程序员的思维修炼 2020年12月31日

    给产品经理讲技术 2020年12月31日

    Erlang中文教程 2020年12月31日

    架构文章 2020年12月31日

    面向容错性架构 2020年12月31日

    大话数据结构 2020年12月31日

    红黑树 2020年12月31日

    erlang 2020年12月31日

    C 2020年12月31日

    Fcitx输入法 2020年11月30日

    Elixir语言教程 2020年11月30日

    Goroutine 2020年11月30日

    设计模式 2020年11月30日

    Channel 2020年11月30日

    Go语言 2020年11月30日

    ArraySliceMap 2020年11月30日

    Go标准库 2020年11月30日

    Interface 2020年11月30日

    Reflect 2020年11月30日

    RegExp 2020年11月30日

    参考 2020年11月30日

    读取用户输入 2020年11月30日

    调试 2020年11月30日

    mongo客户端命令 2020年11月30日

    PHP反射 2020年11月30日

    BeyondCompare 2020年11月30日

    Go 2020年11月30日

    PHP部署 2020年11月30日

    语言比较 2020年11月30日

    语言设计 2020年11月30日

    有品位的C代码 2020年11月30日

    GoGC 2020年11月30日

    深入理解构建系统 2020年11月30日

    Go汇编 2020年10月31日

    测试与文档 2020年10月31日

    Go安装部署 2020年10月31日

    html面试 2020年10月31日

    http 2020年10月31日

    OOP 2020年10月31日

    Context 2020年10月31日

    类型系统 2020年9月30日

    PHP对象 2020年9月30日

    概述 2020年8月31日

    Nginx节点 2020年8月31日

    JS 2020年8月31日

    xss 2020年8月31日

    PHP字符 2020年7月31日

    概念基础 2020年7月31日

    优化 2020年7月31日

    如何实现一个数据库 2020年7月31日

    数据库设计 2020年7月31日

    排序 2020年7月31日

    Accelerated 2020年7月31日

    Primer 2020年7月31日

    概述 2020年7月31日

    Mutex 2020年7月31日

    单链表 2020年6月30日

    PHP数组 2020年6月30日

    Schemer语言 2020年5月31日

    常见样式 2020年5月31日

    网页布局 2020年5月31日

    CPP_PrimerPlus 2020年3月31日

    STL 2020年3月31日

    语言的设计与演化 2020年3月31日

    C开发环境 2020年3月31日

    C速记卡片 2020年3月31日

    GDB调试器 2020年3月31日

    Make构建工具 2020年3月31日

    字符编码 2020年3月31日

    微软c编程 2020年3月31日

    运行环境 2020年3月31日

    预处理器 2020年3月31日

    MongoDB安全 2020年3月31日

    Redis-Sentinel 2020年3月31日

    数据类型 2020年3月31日

    配置 2020年3月31日

    GoMicro 2020年3月31日

    scss 2020年3月31日

    网页加载顺序 2020年3月31日

    网页文字 2020年3月31日

    规范书写 2020年3月31日

    配色表 2020年3月31日

    JSON 2020年3月31日

    cookie-js 2020年3月31日

    jquery 2020年3月31日

    js模块化 2020年3月31日

    上传文件 2020年3月31日

    函数 2020年3月31日

    基础 2020年3月31日

    对象 2020年3月31日

    正则 2020年3月31日

    RUSTful 2020年3月31日

    数字签名算法RSA 2020年3月31日

    MySQL使用军规 2020年3月31日

    MySQL技术内幕 2020年3月31日

    SQLite 2020年3月31日

    SQL注入攻击与防御 2020年3月31日

    mysqlserver 2020年3月31日

    phpmyadmin 2020年3月31日

    事务 2020年3月31日

    深入理解SQL 2020年3月31日

    索引 2020年3月31日

    书籍推荐 2020年3月31日

    Game Server 2020年3月31日

    服务端架构整理 2020年3月31日

    概述 2020年3月31日

    游戏服务端开发面试 2020年3月31日

    网络游戏服务器开发框架 2020年3月31日

    AVL树 2020年3月31日

    B+树 2020年3月31日

    B树 2020年3月31日

    字符串 2020年3月31日

    散列 2020年3月31日

    数列 2020年3月31日

    算法 2020年3月31日

    算法竞赛入门经典 2020年3月31日

    跳表 2020年3月31日