0%

make: 更有效的运行和编译你的程序

基础示例

创建如下Makefile文件:

1
2
say_hello:
echo "Hello World"

执行make,会有如下输出:

1
2
3
$ make
echo "Hello World"
Hello World

当 make 被执行时,整条指令 echo “Hello World” 都被显示出来,之后才是真正的执行结果。如果不希望指令本身被打印处理,需要在 echo 前添加 @。

1
2
say_hello:
@echo "Hello World"
Read more »

在MySQL的使用过程中遇到的“乱码”问题,很有可能就是因为对字符集与字符序的理解不到位、设置错误造成的。

  1. 字符集和字符序概念
  2. Mysql中的字符集配置
  3. 一个特殊的🌰

字符集和字符序

Charset

字符集就是字符编码,常见编码有utf8 gbk gb2312 gb18030 ascii等。就是一个字符和二进制码的一个对应表。

Collation

字符序就是字符的比较,很多情况下我们不光数字会有大小比较,程序里可以直接对字符进行比较操作,字符序就定义了这个比较规则,通常使用二进制的编码比较,当然也可以定义A==a。

Read more »

Welcome to Hexo! This is your very first post. Check documentation for more info. If you get any problems when using Hexo, you can find the answer in troubleshooting or you can ask me on GitHub.

Quick Start

Create a new post

1
$ hexo new "My New Post"

More info: Writing

Run server

1
$ hexo server

More info: Server

Generate static files

1
$ hexo generate

More info: Generating

Deploy to remote sites

1
$ hexo deploy

More info: Deployment

相机成像原理

照相机产出一个照片的主要使用了两项技术,透镜成像和感光显像。

透镜成像原理

小孔成像

Read more »

互联网发展的二十多年里,后端的架构也经过了多轮改变来适应不同的场景需求。

  • 单体架构
  • 分布式架构
  • 微服务架构
  • 服务网格

单体架构

早期的Web 系统,刚开始的业务简单、用户量不大,业务数据量增长也缓慢,加上并发不大,通常用单一一台性能好的物理服务器,作为Web应用服务器、数据库服务器、文档服务器等,集中部署在一起,就可以解决系统的可用性、数据一致性、实时性等。

Read more »

WAL(Write Ahead Log)预写日志,是数据库系统中常见的一种手段,用于保证数据操作的原子性和持久性。

Mysql数据页

mysql的page与文件系统的block类似,是mysql自己定义的读取和写入磁盘的最小单位,其目的是为了充分的利用磁盘的顺序访问速度快的优势。一般是磁盘扇区的4~16倍。通常Mysql的page大小为16kb。

当内存数据页跟磁盘数据页内容不一致的时候,我们成这个内存页为“脏页”。内存数据写入磁盘后,内存和磁盘上的数据页内容就一致了,称为“干净页”。MySQL从内存更新到磁盘的过程,称为刷脏页的过程(flush)。

Read more »

数据库随着越来越多的请求,我们将数据库的写操作和读操作进行分离, 使用多个从库副本(Slaver Replication)负责读,使用主库(Master)负责写, 从库从主库同步更新数据,保持数据一致。架构上就是数据库主从同步。 从库可以水平扩展,所以更多的读请求不成问题。

Read more »

服务限流

服务限流指的是设置服务能支持得最大并发访问量,超过阈值则拒绝;限流阈值得设置通常分两种类型一种是Qps,一种是Concurrency。限流通常使用令牌桶来实现。

令牌桶算法是网络流量整形(Traffic Shaping)和速率限制(Rate Limiting)中最常使用的一种算法。大小固定的令牌桶可自行以恒定的速率源源不断地产生令牌。当有新的请求的到来时需要先申请令牌桶取一定数量的令牌。取不到时返回错误,以此来实现限流。

Golang中的限流包time/rate

构造一个限流器

1
limiter := NewLimiter(10, 1);
1
2
1.第一个参数是 r Limit。代表每秒可以向 Token 桶中产生多少 token。Limit 实际上是 float64 的别名。
2.第二个参数是 b int。b 代表 Token 桶的容量大小。
Read more »

web服务在重启时,正在处理的请求可能会被强制的关闭。这样会影响服务的可用性。所以需要服务优雅退出。

原理就是先停止端口监听,等没有新的请求过来。然后等一两秒然后再停服务。Golang中signal包里的Notify函数支持订阅信号,程序收到信号后自己来控制shutdown的过程。代码如下:

Read more »

Secure Sockets Layer 安全套接字层

Transport Layer Security 传输层安全

TLS是基于SSL3.0之后升级设计的协议,相当于SSL的后续版本。

信息安全概述中介绍了信息安全中要保证信息的3大特性:保密性(防窃听)、完整性(防篡改)、不可抵赖性(防抵赖)。SSL的设计中对以上特性都进行了考虑,可谓信息安全的集大成者。

Read more »