• 阅读 Vixie cron

    [scode type="yellow”]都是猜测,没有经过验证,验证在咕咕咕,请自行辨别。[/scode] 来源 我选择阅读的源码来自 FreeBSD 源码树,其中的目录 usr.sbin/cron 中的 cron 实现。 主函数 main 其中 secres 的含义是每秒执行的任务,这个 cron 实现支持 @every_second 定义每秒执行的任务,除了我们熟知的 cron 表达式,这个实现还有 @ 开头的表达式支持,比如 @reboot 指的是开机以后执行一次的任务。

  • C++ 编写的多项式解析

    输入为描述多项式的字符串,使用自动机将其解析为结构化的数据 输入示例: 2 x^2 2x x 2x^2 代码: #include <cstdlib>#include <ctype.h>#include <stdio.h>#include <sstream>#include <vector> // 项 struct term { int mul; int exp; }; // 多项式 typedef std::vector<term> poly; enum poly_parse_state { ppoly_init, // 初始状态 ppoly_mul, // 系数 ppoly_var, // 变量 ppoly_exp, // 指数 ppoly_tem, // 产生一个项 ppoly_suc, // 产生一个多项式 ppoly_err // 错误 }; // 状态转移 #define transfer_state(s) {state = s; break;} // 读取 #define move() { \ do{ \ ch = is.

  • lldb 入门

    命令结构 lldb 的命令不像 gdb 那么自由,而是比较结构化。 命令结构的形式是: <名词> <动词> [-选项 [选项值]] [参数...] 让 lldb 启动进程后停在入口点(是程序镜像的入口点,不是 C 语言的入口点 main。linux 中,可执行文件格式 elf 中 elf 头有一个项目叫入口点,一般进入 C 语言运行时,再调用 C 语言的 main 函数),并且向程序传递参数 argv0 argv1

  • FreeBSD 时间片实现猜测

    [scode type="yellow”]都是猜测,没有经过验证,验证在咕咕咕,请自行辨别。[/scode] 0x1 - atpic interrupt entry - atpic_intr# sys/amd64/amd64/atpic_vector.S:45-53 - 宏定义 sys/amd64/amd64/atpic_vector.S:55-70 - 声明

  • 记录一次 Linux 启动盘备份 Windows 文件

    起因 昨晚(2月28日凌晨),我安装了 20H2 质量更新,于是和往常一样选择 更新并关机。只不过这次更新十分缓慢,我在一旁刷了至少 10 分钟的抖音,仍然不见电脑断电。于是,我做出了令我后悔的降智操作:长按电源键 5 秒,松开按键的那一刻就如同拔掉电源一样。保险起见我打算再开机看一下有没有问题。结果不负众望,系统挂了。 忘了 VIRTIO_忘了 Wal00000.sys (记错警告) 尝试修复 自带的诊断 根本不用动,就自己重启,自己诊断。然后无法解决。

  • Clang 使用 MinGW 环境

    安装 [MinGW64] ? 官网没了 llvm 找一个喜欢的版本(最新(笑)),在 Pre-Built Binaries:里找Windows (64-bit) MinGW 安装目录的 bin 文件夹加入 PATH 环境变量(推荐放到用户变量里)

  • RFC 索引

    HTTP/1.1 [RFC 8615] [RFC 7230] Message Syntax and Routing [RFC 7231] Semantics and Content [RFC 7232] Conditional Requests [RFC 7233] Range Requests [RFC 7234] Caching [RFC 7235] Authentication HTTP/2

  • Makefile 探索

    手动指定 语法 规则大致是这样: 目标文件: 源文件 构建目标的命令 ${变量名} 变量替换 ${CC} C 编译器 示例 prog: a.o b.o ${CC} a.

  • MySQL 容器与字符乱码

    引言 学校的课程需要 Mybatis 连接 MySQL 数据库,本人不才无法成功安装 MySQL for windows。所幸留了两三个虚拟机可以试试。 启动服务器 大致思路是容器映射出虚拟机,虚拟机映射出主机。 docker 使用 -p 选项让容器使用主机端口 我的 VirtualBox 修改虚拟机配置,将主机端口映射到虚拟机中(NAT 网络地址转换) docker 启动命令:

  • [转载] 非人性(反人类)方式提升性能办法总结(待更新)

    本文仅致以热衷于提升性能的开发者,总结几年内的经验与办法,阐述一些意识到或意识不到的性能提升办法。很多时候,某种编程写法仅仅只是出于习惯/可维护性/行业惯例,但不是性能。这里献丑一下,挖掘出来,以下某些观点可能让人感觉很痛苦,但值得反思。 谨慎使用正则表达式 对于正则表达式,很多开发者已经很熟悉了。当然正则表达式也确实带来了很多好处,对于复杂字符串规则的把握,代码可维护性,实乃字符处理的一大开发区。 然而今天这里不是为正则表达式歌功颂德的,我的观点是谨慎使用正则表达式。如果开发者自身有更好的更高性能的实现方式完成正则表达式功能的话,那么应该优先采用更好的方式实现,例子参考于: https://gitee.com/deng_dan_jun/function_finishing/blob/master/常见正则表达式C++实现函数 一个理想的正则表达式实现应该是编译器扫描用户的代码,解析其正则表达式语义,实现一段等同于顶尖高手实现的代码嵌入到工程里面调用。可惜这仅仅还是理想,当今的正则表达式库依然未能实现这点,因此在使用正则表达式的时候,需要谨慎对待。 谨慎使用格式化操作函数\库 这里说的格式化,形如sprintf,也是字符处理的一大利器,然而,复杂的格式化操作同样也会带来性能上的损耗。参考例子: https://user.qzone.qq.com/1075716088/infocenter 以及 https://blog.csdn.net/q229827701/article/details/41015483 读者可以自己使用直写方式实现,对比性能,会有数倍的差距,对于更为复杂的格式化操作,性能损耗会更大。此条原理本质上与第一条类似。 最好不要在循环里面反复创建变量 这点看似简单,但是大部分工程都存在这个问题。很多优秀的算法本身也因为使用者这点不太良好的习惯而影响到性能。如果反复创建的是创建开销大的对象,例如STL容器则问题影响会更大。 网上很多测试例子以一些简单的类型如int等进行测试,认为反复创建影响甚微,然而忽视了一点,对于一些复杂开销大的自定义类型,编译器根本无法做到很良好的优化。假如有这样一段代码: