快乐冲浪与生活

多体验、多体会、多体悟

0%

在 Web 开发中,常常需要对请求信息进行记录,形成日志以便于后期评估应用的性能。请求信息通常包含客户端地址、请求的 URL、请求时间及请求执行时间。在程序中,可以以同步或异步的方式完成这一需求。同步方式是指请求信息写入日志文件后才返回数据给客户端,异步方式则是在返回数据之前以新线程或进程完成对请求信息的记录。开源的日志包有:

  1. Zap :出自 Uber 团队,以高性能著称;
  2. Zerolog :以易用性著称,支持 7 种日志级别;
  3. Logrus :兼容标准日志包格式,也是本人常用的日志包;
  4. apex/log :受 Logrus 启发,简化操作后的 Logrus;
  5. Log15 :日志可读性强;

5 个日志包的详细介绍可以看 《5 种结构化 Go 日志包对比分析》 这篇文章。

首先贴上 Go 开发团队对 reflect 包的描述:

Package reflect implements run-time reflection, allowing a program to manipulate objects with arbitrary types. The typical use is to take a value with static type interface{} and extract its dynamic type information by calling TypeOf, which returns a Type.

A call to ValueOf returns a Value representing the run-time data. Zero takes a Type and returns a Value representing a zero value for that type.

从描述中,我们得到以下几点:

  1. reflect 包实现了运行时的反射机制,允许程序操作任意类型的对象;
  2. TypeOf 可以得到一个 interface{} 的具体类型,ValueOf 可以得到一个 interface{} 的具体值;

存储过程是存储在数据库中并且已经提前编译好的 SQL 语句集合,它是应用中数据操作的部分逻辑实现。MySQL 5 版本引入了这一设计,存储过程包含 3 个部分:

  1. 名称;
  2. 参数列表;
  3. SQL 语句;

有幸搞了个 CSIG 的线上面试,感觉是“没什么感觉”,一般般吧,没过。

前面介绍什么就不说了,我这边没突出什么工作亮点,然后就直接共享桌面写代码了。题目是编程实现一个由字符串数组表示的大数的除以 9 的计算,后面又追问了小数点后值如何保存,所以索性在线下实现也写了写。

数据库是应用的数据存储中心,请求增多和数据量增大都会对数据库造成严重的影响,导致数据库服务性能偏低。所以归纳了个别优化点,后续有看到新的内容也会追加。

在本文开头,贴一段百科对卡方检验基本原理的介绍:

卡方检验就是统计样本的实际观测值与理论推断值之间的偏离程度,实际观测值与理论推断值之间的偏离程度就决定卡方值的大小,如果卡方值越大,二者偏差程度越大;反之,二者偏差越小;若两个值完全相等时,卡方值就为 0,表明理论值完全符合。

在网络或 I/O 连接中,可以使用 net/rpc 包实现对一个对象的导出方法的调用,即远程过程调用(Remote Procedure Call,RPC)。通过向 RPC 服务注册一个对象,使其可被远程调用,进而实现一些复杂的业务逻辑。