2024总结
2024 总结 总结一下 2024 年写码的一些经验和收获。 算法 没有什么突破性的创造,世上比我高明的人太多,catchup 都是很大的问题。记录一下遇到的高端操作好了。 Buffer Pool & Ring Buffer 低延时操作中不能在使用时 new 对象,因为这会导致底层 sbrk 申请内存空间,且得到的对象碎片化特别严重,从而延时飙升。习得的操作是初始化时申请一个内存池,自己的对象放在池中。 Ring Buffer 解决信息传递的生产者-消费者问题。只有一个读者和一个写者时,维护读位置和写位置可以在不加互斥锁的情况下实现消息队列。但是此过程依然需要保证 memory barrier,即进程在写入和读取的先后顺序上始终保证。此过程可以用 atomic 变量实现,也可以直接插入 rmb 或者 wmb 这样的汇编。在 x86 架构上原子变量本来就时保证全序的,不必纠结到底是什么屏障最终都一样。原子变量的延时高于单纯的...
无套利定价
无套利定价 本文主要复习无套利定价以及put-call parity,期权价格的上下界。 无套利定价 所谓的 arbitrage free 或者说 zero...
Dev八股
八股 数据结构 树 AVL树 123456789/* AVL 树节点类 */struct TreeNode { int val{}; // 节点值 int height = 0; // 节点高度 TreeNode *left{}; // 左子节点 TreeNode *right{}; // 右子节点 TreeNode() = default; explicit TreeNode(int x) : val(x){}}; 一棵 AVL 树的任意节点的平衡因子皆为...
期权公式
香草期权 (Vanilla Option) 香草期权是“最简单”的期权, 通常有欧式期权(到期日才能行权)和美式期权(到期日前任意交易日行权)之分. 在冰淇淋中, 国外认为香草味是最纯粹, 最原始的味道, 所以用它来命名期权的原因就是:这种期权的结构是最单一、最普通的, 没有内嵌任何特殊条款. 看涨期权 (Call(T,K)) 是在未来时刻 T 以价格 K 买入标的的权利, 看跌期权是(Put(T,K)) 是在未来时刻 T 以价格 K 卖出标的的权利. 期权的理论价格可以用蒙特卡洛模拟获得, 也可以用 BS 公式求得. 这些定价基于无套利, 且以波动率 sigma 作为参数. 中国市场的期权都是欧式期权 BS 公式 Black-Sholes 定价的起源是无套利, 即风险中性测度下, 期权的价格为期望收益的折现: C=e−rTE[max(S(T)−K),0]C = e^{-rT} E[\max(S(T) - K), 0] C=e−rTE[max(S(T)−K),0] 假设标的价格的 SDE 为 dStdt=rdt+σdBt\frac{dS_t}{dt} = rdt +...
排序问题
排序问题 讲讲排序问题. 常见的排序算法有冒泡排序, 归并排序, 快速排序, 桶排序等. 这里都不会讲因为到处都有. 大致掌握排序算法后, 只要定义元素的大小比较方式, 不管什么高级编程语言基本上都可以直接调用sort函数求解. 基数排序和桶排序 基数排序是对传统桶排序的扩展, 速度很快. 基数排序也是搞一堆的桶, 从低位开始每次根据这轮的比较位放到相应的桶里面然后按顺序拿出来, 这一位就排好了. 时间复杂度是 O(M+N) 空间复杂度 O(MN) m是保存桶的元素个数数组占的空间, n是保存桶的二维数组占的空间. 稳定排序 如果相同的元素排序之后顺序保证不变, 则排序算法是稳定的. 冒泡排序, 插入排序, 基数排序, 归并排序等都是稳定排序. 快速排序是稳定的吗?原始的快速排序算法是不稳定的. 因为如果选定的轴(pivot)有相同元素, 按照规则 把大于等于轴的元素放到右边小于轴的元素放到左边 那相同的其余元素都得到右边去了, 因此快速排序不是稳定的. 我们讨论快速排序, 往往就想到分治法且每一步把大于等于轴的元素放到右边小于轴的元素放到左边就完事了....
Socket编程基础
Socket编程基础 简单来说, socket 可以看作网络中通信的方式, 虽然它也可以作为本地通信的方式 (比如Unix Socket). 跳过网上随处可见的介绍, 这里只强调一下 socket 位于应用层和传输层之间, 也就是说, socket 封装的是 TCP/IP 的数据包 (所以 socket 需要手动处理例如 TCP 三次握手之类的请求), 接口直接面向用户 (也就是进程直接把配置好的 socket 当做 IO 使用). 网上的教程和实例代码随便找有一大堆, 所以我来讲讲 windows 下的 socket 编程. echo 客户端与服务器 在这部分我们试图实现一个最简单的 socket 通信 server 与 client. server 总是返回 client 发送的相同内容. Server 最简单的例子就是这个, 服务端建立一个套接字在端口上监听, 等待客户端连接后 echo 客户端发来的所有内容. 开始之前我们仍然复习一下这张流程图. 先来说一下头文件, 在 Linux 中, 网络编程的头文件一般需要引入 arpa/inet.h 和...
vPro与AMT
vPro与AMT 概述 vPro 是英特尔为企业用途打造的商用PC平台, 具体介绍在官网以及售卖PC的网站上都可以看到. 总体来说想要粗略理解 vPro, 只需要掌握一下概念即可: vPro 是一个完整的平台技术, 其实现需要芯片组, 处理器的共同支持, 很多功能还需要人为设置; vPro 包括众多功能, 在较新的 vPro 认证模式下, 不仅需要基础设施(CPU,芯片组)的支持, 还需要 PC 满足一些条件(例如笔记本的续航, 台式机的运行稳定性等). 我们常常听说 vPro 最重要的一个特性就是带外管理 (Out of Band Management), 也就是即使设备不在局域网内, 甚至不开机, 管理者依然可以对电脑进行控制. 简单理解就是管理者可以在电脑关机, 死机或者BIOS状态下进行管理, 实现普通远程控制做不到的事情. 这其实主要依赖 vPro 中的 AMT(Active Management Technology) 功能. 如果有过企业级服务器的管理经验, 应该会对这种功能比较熟悉, 例如惠普的 iLO, 戴尔的 IDRAC 都属于带外管理....
PHP Mysql与OpenSSL
前段时间开了没有SSL的FTP端口, 不到两天就中勒索病毒, 现在对于网络传输安全也开始重视起来. 这几天在折腾 PHP 的一些功能, 需要连接本地 MySQL 服务, 于是尝试使用 SSL 加密, 在这里记录一下踩到的坑. 生成自签名的证书 据说 Mysql 可以使用 mysql_ssl_rsa_setup 生成证书, 但是我已经切换到了 mariadb, 并没有看到这个功能, 所以只能自己用 openssl 生成. 网上有很多方法是先生成数字证书, 然后分别生成服务端和客户端的密钥和数字证书, 但是这个方法我用了提示证书错误. 下面这个方法生成的证书是可以使用的: 123456789$ openssl req -x509 -newkey rsa:1024 -days 3650 -keyout server-key-enc.pem -out server-cert.pem -subj '/DC=com/DC=example/CN=server' -passout pass:qwerty$ openssl rsa -in server-key-enc.pem...
Sublime_Text开启markdown预览
Sublime_Text开启markdown预览 目前 Sublime Text 原生支持 Markdown 语法高亮, 但是还是没法像 typora 一样直接把文字渲染成文档. 现在的解决方法是生成一个网页并打开. 安装 Markdown Preview 插件 如果没有安装 Package Control 则先安装 (Ctrl + Shift + P 输入 install package control, 过一会就会弹窗说安装完成), 然后Ctrl + Shift + P 输入 install package, 输入 Markdown Preview. 操作时其实不用完整输入因为会自动补全. 开启预览 打开一个 Markdown 文件, 按下 Ctrl + Shift + P 输入 preview, 可以看到第一个匹配的应该就是 Markdown Preview 的 Preview in Browser. 理论上回车之后就会在浏览器中打开渲染好的界面, 如果要实时刷新的话也可以网上参考下 LiveReload 相关的资料,...
故事一则 0713
记得我在小学的时候,有一次集体外出活动参观消防队,可以有部分幸运的同学登上救援用的登高车体验。在一片嘈杂中老师开始一个个点同学的名字,点到的人可以上车。那时的我满怀期待,希望老师可以注意到我,给我一个体验的机会。但是正如我平常的运气一样,我没能听到我的名字响起,然后老师就在一群学生的簇拥下登上了举升平台。平台升起后我逐渐看不到上面的同学,然后看不到老师的脸,只能听到上面传来的欢笑声。游玩结束回去的路上我正好和老师坐在一排,于是我问老师为什么没有选我,明明我那时一直睁大了眼睛看着她。”我点你的名字了呀,难道你没有上去吗?“老师显得十分惊讶,用十分夸张的语气回答我。那时的我感到十分遗憾,明明这个机会已经轮到我了,却因为我没仔细听而错过。这么多年过去我甚至记不起那位老师的名字,却一直记得这段故事。遗憾过后的我总会回想,真的是我粗心大意没有听到吗?还是老师对所有来问他的同学都说了这番相同的话?但是如果我是那时的老师,我可根本想不到这样的回应方式。