概况

  • 本文为基督教圣经(the Holy Bible)笔记;
  • 圣经由多部古希伯来语、亚拉姆语,通用希腊语所写书卷汇编选集而成;
  • 犹太教圣经《塔纳赫》,基督教称为《旧约》,卷数认定不一致,主流认为共 39 卷(天主教和东正教版本则有 46 卷,包含了一些被称为“次经”的书卷);塔纳赫(TaNaKh)源自三个希伯来字母 T/N/K,反映了犹太教圣经的三个部分,其中 T 代表妥拉,N 代表先知书,K 代表经录;
  • 《新约》共 27 卷,记载耶稣基督及其宗徒言行;
阅读全文 »

参考:

CUDA C++ Programming Guide

《CUDA 编程:基础与实践》

《GPGPU 异构高性能计算》

GPU 介绍

  • 一个典型的 GPU 参数,以 NVIDIA H100 GPU 为例:
    • 16896 FP32 CUDA cores;
    • 66.9 TFLOPS (FP64 Tensor core);
    • 33.5 TFLOPS (FP64);
    • 3352 GB/s memory bandwidth;
    • 700W TDP;
    • TSMC’s 4N customized for NVIDIA;
阅读全文 »

参考

《Rust Primer》

《Rust 编程之道》

《Rust Course》(Rust 语言圣经)

THU《程序设计训练(Rust)》课件

  • 裸指针(不安全): *const T*mut T
  • 单字节字符 b'H' ,单字节字符串 b'Hello' ,仅限 ASCII 字符; r#"..."# 表示不转义字符串;
  • String&str 很廉价,而反之涉及分配内存,代价相对更高;
  • 即使结构体是公有的,成员仍然默认私有;枚举如果是公有的则其成员均为公有;
  • 可以在 match 中通过 refref mut 获取对应变量的引用;
  • try! 宏在 Ok 时提取内部值,否则直接 return 期望返回的 Error 类型;现在可以直接使用 ?
  • 使用 io::stdin.read_line(&mut String) 读入;
  • Rust 项目结构:
阅读全文 »

Pine 是一个使用 C++17 编写的高并发框架,支持 Linux / MacOS 跨平台;它也是 30 天自制 C++ 服务器(目前更至第十六天)的配套代码。

本文为 Github 源码 阅读笔记。

前置技能:

  • Modern C++ (包括并行库);
  • 网络编程基础
    • 《Linux 高性能服务器编程》—— 游双:服务器编程必读;
    • 《Linux 多线程服务端编程:使用 muduo C++ 网络库》—— 陈硕:经典网络库 muduo 作者,本框架采用类 muduo 架构;
    • 《C++ 服务器开发精髓》—— 张远龙:类似以上两本书的组合,编写年份较新,对部分技术做了相应更新;
    • 《UNIX网络编程卷1:套接字联网API》、《UNIX网络编程卷2:进程间通信》:可以作为字典书;
阅读全文 »

堆、栈、RAII、容器

  • delete 一个空指针是合法的,但不能多次 delete
  • 手写智能指针:先实现一个 auto_ptr(赋值为移动语义),再定义引用计数类;每个智能指针类包含两个类的指针:引用技术类和对象类;
  • 异常安全的赋值函数:复制并交换;
1
2
3
4
T& operator= (T rhs) {
rhs.swap(*this);
return *this;
}
  • vector 保证强异常安全性,如果没有 noexcept 的移动构造函数,会调用拷贝构造函数;
  • queuestack 依赖现有容器,因此称为容器适配器,默认均为 deque 实现;
  • lessgreater 均为通过重载同名结构体的 bool operator() (const T& x, const T& y) 得到的函数对象;它们继承的 binary_functionunary_function 已在 C++11 被废弃;
阅读全文 »

  • Go 是静态、强类型语言;
1
2
3
4
5
6
7
8
9
10
11
12
package main // 定义包名

import "fmt" // 引入包

// 没有 init() 时的程序入口,可执行程序必须包含
func main() { // 注意大括号不能换行
/*
当标识符以一个大写字母开头,就可以被外部包的代码所使用(public),
否则对包外不可见(protected)
*/
fmt.Println("Hello, World!") // 不需要分号,除非一行多条语句
}
阅读全文 »

本文为此书中文译本前四章的读书笔记。

https://github.com/xiaoweiChen/CPP-Concurrency-In-Action-2ed-2019

<pthread.h>

<pthread.h>是贴近底层的 POSIX 线程接口:

1
2
3
4
5
6
7
8
pthread_create():创建一个新的线程。
pthread_join():等待指定的线程退出,并回收其资源。
pthread_detach():将指定的线程设置为分离状态,使其资源在退出时自动回收。
pthread_exit():使当前线程退出,并返回指定的状态值。
pthread_mutex_init():初始化互斥锁。
pthread_mutex_destroy():销毁互斥锁。
pthread_mutex_lock():尝试获取互斥锁,如果已经被其他线程占用,则阻塞等待。
pthread_mutex_unlock():释放互斥锁。
阅读全文 »

项目目标:完成远程真机调试插件,实现对端侧 3D/XR 场景的 Unity 实时场景部署与调试;

具体内容

  1. 在端侧构建调试 SDK,用于接收 Unity 发送的命令,和向 Unity 同步状态;
  2. 在 Unity 中基于插件实现Debug Server,用于和端侧进行实时通信(Unity 场景快速导出并推送到端侧)和同步状态(Unity 场景双向状态同步调试);
  3. PC端:MacOS,移动端:iOS;
阅读全文 »

代码书写

  • 代码书写规范基本遵循 谷歌代码书写规范中文版
  • 不使用using namespace std,不使用goto,不使用vector<bool>,使用using代替typedef
  • 谨慎使用宏定义(尽可能使用const代替宏),#代表将宏参数内容转换成字符串,##代表将两个参数内容连接成为一个字符串;
  • 一个可参考的 C++ 工程目录结构:https://github.com/hattonl/cpp-project-structure
  • 一些常见的注释约定:// TODO(待办),// FIXME(待修复),// HACK(临时解决方案),// NOTE(备注),// OPTIMIZE(待优化),// REVIEW(待审查),// DEPRECATED(已过时);
阅读全文 »

https://www.bilibili.com/video/BV164411S78V

线性回归(Linear Regression)与梯度下降(Gradient Descent)

记号

\(m\) = 训练样本数,\(n\) = 特征数,\(x\) = 输入变量/特征,\(y\) = 输出变量/目标变量

\((x, y)\) = 训练样本。第i个: \((x^{(i)},y^{(i)})\)

\(h_\theta(x)=\theta_0+\theta_1x_1+\theta_2x_2+...+\theta_nx_n\)

\(x_0\)\(1\),则\(h_\theta(x) = \sum_{i=0}^{n}\theta_ix_i=\theta^T x\)

\(Minimize_{\theta}\ \ J(\theta) = \frac{1}{2m} \sum_{i=1}^m(h_\theta(x^{(i)})-y^{(i)})^2\)

(最小二乘线性回归)

阅读全文 »