分类: programming
cmake 基本设置
处理一个 socket: too many open files 问题
大概情况是这样的, 前几天做完离职交接, 今天看到前公司的微信群里消息爆炸了, 用户 无法在微信小程序中下单. 接手后端项目的小胖已经重启了数据库(不晓得他为啥一进服务器 就先把数据库重启了), 说还是不行.
后来另一位同事重启了 consumer
服务, 然后服务就恢复了.
查看了 docker log, 发现了一个 ``dial tcp 127.0.0.1:8202: socket: too many open files 的问题, 但是请求的 http server 也是布署在同一台服务器上, 它们也共享了同一个 docker network, 通常是 不会出现这个问题的, 之后就猜到可能是因为本地的 TCP 端口号被占完了, 或者分配给该进程 的文件句柄数被用光了, http client 无法再发起新的 socket 连接导致的.
C++ 中的 string slice
最近在读 LLVM 的代码, 发现了它里面也实现了 string slice 字符串引用的功能.
在之前, 已经在 leveldb 以及 re2 中见过类似的实现, 当然, 类似的 功能在 chromium 的代码中有更复制的实现.
之所以这些开源软件中要独立实现一套 string slice, 我觉得有这几个原因:
- cpp 中要支持
std::string
以及const char*
这两种字符串类型, 而这两种类型实现的 某些操作方法, 并不一致 - 标准库中的 字符串类型缺少一些功能
- 作为值传递时, 尽可能减少内存复制
REST API 实践
REST API 用于表示服务器端的资源模型(resource model).
可以使用 WRML (Web Resource Modeling Language) 来设计及实现统一的 REST API.
Python VS Code 开发环境目前的一些小问题
为 VS Code 配置了 python 开发环境, 如果再加上这些功能, 对用户就会更方便.
安装 python 解析器
pyenv 这个工具可以完成一部分工作, 但是在 windows 平台, 需要依赖 Windows SDK, 这些可以集成到安装脚本里面.
Qt 进程没有被设置语言环境变量时导致文件路径乱码的问题
问题
前几天帮同事调试一个问题, 其表现是这样的:
前端 UI 进程里有个菜单项, 激活之后, 会调用后端的一个 dbus 服务, 这个服务使用 Qt
写的. 菜单会把当前选中的文件的绝对路径传递给后端的这个 dbus 服务, 当路径里有中文
字符时, 路径就不被识别了, 后来经过打印发现, QFileInfo::exists(filepath);
返回
false
.
禁用 chromium 浏览器的安全策略
调试前端应用时, 有时需要向另一个域名的发出 XHR 请求, 如果目标服务器没有设定 跨域请求, 浏览器就会阻止这个请求, 基于安全考虑. 此时, 可以临时先禁用一下浏览器 安全策略来实现.
可重入的函数
可重入的函数有这样的特性: 当该函数被调用时, 不会影响之前的 状态. 它们是线程安全的, 而且也可以在信号处理函数(signal handler) 里面使用. 它们没有副作用.
举例来说, read(), write() 都是可重入的, 因为它们的状态, 比如 缓存, 文件偏移量都是在内核中维护的. 而 fread(), fwrite(), printf(), 这些都不是可重入的. 它们的缓存是由 libc 维护的, 极端的 情况下, libc 在处理缓存时被内核中断了, 触发了信号处理函数, 在信号 处理函数内部, 调用 printf() 时, libc 之前的缓存状态就被修改了.