零拷贝

传统文件传输过程

分享数据过程

avatar

read 从磁盘读取文件数据 write 通过网络协议发送给客户端,但在操作系统中过程就不像图中表现的这么简单。

Linux传统文件传输过程

在linux系统文件传输的过程中,发生了4次用户态与内核态的上下文切换,和4次数据拷贝。
avatar

操作系统为了隔离系统程序和应用程序把系统分为了用户空间和内核空间,而用户空间和内核空间的权限也不同。

1.排序算法

经典的排序算法

insertion sort 插入排序

avatar

排序实现原理

将元素不断地插入已经排序好的 array 中

  • 起始只有一个元素5,其本身是一个有序序列
  • 后续元素插入序列中,不断交换,直到找到第一个比其小的元素
1. 网络模型剖析

OSI 网络模型

1. 什么是OSI网络模型

为了使得多种设备能通过网络相互通信,和为了解决各种不同设备在网络互联中的兼容性问题,国际标准化组织制定了开放式系统互联通信参考模型(Open System Interconnection Reference Model),也就是 OSI 网络模型

Go学习笔记1.5 接口剖析

interface

Go语言中提供了一种类型叫做接口类型。接口是一种抽象类型,它并没有暴露所含数据的布局或内部结构,当然也没有哪些数据的基本操作,它所提供的仅仅是一些方法而已。如果你拿到一个接口类型的值,你无从知道它是什么,你能知道的仅仅是它能做什么,也就是说,仅仅能知道它提供了哪些方法。

一个接口类型定义了一套方法,如果一个具体的类型要实现该接口,那么必须实现该接口类型定义中的所有方法。

Go学习笔记1.6 函数剖析

函数定义

Go语言支持:函数、匿名函数和闭包 定义函数使用func关键字

//函数名:由字母、数字、下划线组成。但函数名的第一个字母不能是数字。在同一个包内,函数名也不能重名
func 函数名(参数)(返回值) {
    函数体
}
Go依赖注入wire

Wire

wire 是由 google 开源的一个供 Go 语言使用的依赖注入代码生成工具。它能够根据你的代码,生成相应的依赖注入 go 代码。
与其他依赖注入工具不同,比如 Uber 的 Dig 和 Facebook 的 Inject,这 2 个工具都是使用反射实现的依赖注入,而且是运行时注入(runtime dependency injection)。
wire 是编译代码时生成代码的依赖注入,是编译期间注入依赖代码(compile-time dependency injection)。而且代码生成期间,如果依赖注入有问题,生成依赖代码时就会出错,就可以报出问题来,而不必等到代码运行时才暴露出问题。