CRC是通信领域中用于校验数据传输正确性的最常用机制,也是Hash算法的一个典型应用,Hash一般翻译为“散列”,也可直接音译为“哈希”,就是把任意长度的输入(又叫做预映射,pre-image)通过散列算法变换成固定长度的输出,该输出就是散列值。这种转换是一种压缩映射,也就是散列值的空间通常远小于输入空间,不同的输入可能会散列成相同的输出,而不可能从散列值唯一的确定输入值。
关于RPC的网络模块其实还有很多地方可以挖掘,还有很多细节可以去深究,还有很多配置去优化,写代码,对待人生,玩游戏都是这样
写代码,人家的代码,总是人家的代码,跟别人家的孩子一样,性能是那么的卓越,bug总是那么少,你跟别人总是差一点,就差一点,这一点点就成了鸿沟了
一、什么是信号
用过Windows的我们都知道,当我们无法正常结束一个程序时,可以用任务管理器强制结束这个进程,但这其实是怎么实现的呢?同样的功能在Linux上是通过生成信号和捕获信号来实现的,运行中的进程捕获到这个信号然后作出一定的操作并最终被终止。
信号是UNIX和Linux系统响应某些条件而产生的一个事件,接收到该信号的进程会相应地采取一些行动。通常信号是由一个错误产生的。但它们还可以作为进程间通信或修改行为的一种方式,明确地由一个进程发送给另一个进程。一个信号的产生叫生成,接收到一个信号叫捕获。
命名
YAML 的意思其实是:"Yet Another Markup Language"(仍是一种置标语言)的缩写。
功能
YAML的语法和其他高阶语言类似,并且可以简单表达清单、散列表,标量等资料形态、。
它使用 空白符号缩排 和 大量依赖外观的特色,特别适合用来表达或编辑数据结构、各种设定档、倾印除错内容、文件大纲(例如:许多电子邮件标题格式和YAML非常接近)。
项目当中的应用:
Golang 的 Cookie
web 开发免不了要和 cookie 打交道。Go 的 http 库也提供了 cookie 的相关操作。
type Cookie struct { Name string Value string Path string Domain string Expires time.Time RawExpires string MaxAge int Secure bool HttpOnly bool Raw string Unparsed []string }
Name 字段为 cookie 的名字,Value 是其值,剩下的 Path 和 Domain 则是 cookie 的存储的范围。Expires 是 cookie 的过期时间,如果不设置,那么这是一个 session 型的 cookie,即浏览器会话有用,一旦关闭浏览器,cookie 随即会被删除。
我们先来看看最简单的本地静态文件服务配置示例:
server { listen 80; server_name www.test.com; charset utf-8; root /data/www.test.com; index index.html index.htm; }
package main import ( "fmt" ) type A struct { Text string Name string } func (a *A) Say() { fmt.Printf("A::Say():%s\n", a.Text) } type B struct { A Name string } func (b *B) Say() { b.A.Say() fmt.Printf("B::Say():%s\n", b.Text) } func main() { b := B{A{"hello, world", "张三"}, "李四"} b.Say() fmt.Println("b的名字为:", b.Name) // 如果要显示 B 的 Name 值 fmt.Println("b的名字为:", b.A.Name) }
输出:
A::Say():hello, world B::Say():hello, world b的名字为: 李四 b的名字为: 张三
本小节主要描述了如何在工程中使用多目录、各种安装指令以及CMAKE_INSTALL_PREFIX变量(你真够牛的,这么点东西居然罗唆了这么多文字)在下一小节,我们将探讨如何在cmake中构建动态库和静态库,以及如何使用外部头文件和外部共享库,毕竟,这是程序编写中最长使用的(对了,你知道用怎样的gcc参数可以直接构建静态库和动态库吗?)