<commit_before>---
layout: post
title: 最近工作总结(33)
date:  2019-11-05 11:12:06
categories: Work
image: /assets/images/post.jpg
---

### Golang原始 IN SQL语句构造

```
fmt.Sprintf("SELECT user_id,user_email FROM user WHERE company_id = %d AND user_email IN (%s);", companyID, "'11','22','33'")
```

### 优秀的独立博客收集列表

`https://github.com/timqian/chinese-independent-blogs`

### Go项目中强烈建议使用数据库ORM库来进行SQL操作

- Go项目中强烈建议使用数据库ORM库来进行SQL操作
- 用Go原生SQL库纯写SQL的方式实在太低效且非常难维护
- 不要自己拼接SQL查询，低效，且会很多坑

### 滑动窗口方法进行接口rate limit
>滑动窗口方法，因为它可以灵活地缩放比例速率并具有良好的性能。速率窗口是她将速率限制数据呈现给API使用者的一种直观方法。它还避免了漏斗的饥饿问题和固定窗口实现的爆裂问题<commit_msg>优雅的重启http server服务<commit_after>---
layout: post
title: 最近工作总结(33)
date:  2019-11-05 11:12:06
categories: Work
image: /assets/images/post.jpg
---

### Golang原始 IN SQL语句构造

```
fmt.Sprintf("SELECT user_id,user_email FROM user WHERE company_id = %d AND user_email IN (%s);", companyID, "'11','22','33'")
```

### 优秀的独立博客收集列表

`https://github.com/timqian/chinese-independent-blogs`

### Go项目中强烈建议使用数据库ORM库来进行SQL操作

- Go项目中强烈建议使用数据库ORM库来进行SQL操作
- 用Go原生SQL库纯写SQL的方式实在太低效且非常难维护
- 不要自己拼接SQL查询，低效，且会很多坑

### 滑动窗口方法进行接口rate limit
>滑动窗口方法，因为它可以灵活地缩放比例速率并具有良好的性能。速率窗口是她将速率限制数据呈现给API使用者的一种直观方法。它还避免了漏斗的饥饿问题和固定窗口实现的爆裂问题

### 优雅的重启http server服务

目的:
不关闭现有连接（正在运行中的程序）
新的进程启动并替代旧进程
新的进程接管新的连接
连接要随时响应用户的请求，当用户仍在请求旧进程时要保持连接，新用户应请求新进程，不可以出现拒绝请求的情况
流程:
1、替换可执行文件或修改配置文件
2、发送信号量 SIGHUP
3、拒绝新连接请求旧进程，但要保证已有连接正常
4、启动新的子进程
5、新的子进程开始 Accet
6、系统将新的请求转交新的子进程
7、旧进程处理完所有旧连接后正常结束
{'fraction_non_alphanumeric': 0.1293874741913283, 'fraction_numerical': 0.03509979353062629, 'mean_word_length': 7.168539325842697, 'pattern_counts': {'":': 0, '<': 3, '<?xml version=': 0, '>': 5, 'https://': 2, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '2265199', 'n_tokens_mistral': 994, 'n_tokens_neox': 1119, 'n_words': 91}