摘要:
C++ 核心指南(C++ Core Guidelines)是由 Bjarne Stroustrup、Herb Sutter 等顶尖 C++ 专家创建的一份 C++ 指南、规则及最佳实践。旨在帮助大家正确、高效地使用“现代 C++”。 这份指南侧重于接口、资源管理、内存管理、并发等 High-leve 阅读全文
摘要:
C++ 里面有一些惯用法(idioms),如 RAII,PIMPL,copy-swap、CRTP、SFINAE 等。今天要说的是 PIMPL,即 Pointer To Implementation,指向实现的指针。 ## 问题描述 在实际的项目中,经常需要定义和第三方/供应商的 C++ 接口。假如有 阅读全文
摘要:
单例模式是设计模式中最简单、常见的一种。其主要目的是确保整个进程中,只有一个类的实例,并且提供一个统一的访问接口。常用于 Logger 类、通信接口类、线程池等。 # 基本原理 限制用户直接访问类的构造函数,提供一个统一的 public 接口获取单例对象。 这里有一个“先有鸡还是先有蛋”的问题: - 阅读全文
摘要:
上次折腾 LFS 已经是好几年前了,只记得最后用 VMware 引导成功了,好多技术细节已经不记得了。趁着最近有空,再来折腾一次。这一次用的一台新的 Win10 PC,目标是在一个 U 盘上构建 LFS,然后用 U 盘引导物理机,顺便记录一下整个过程。 # 准备阶段 ## 下载虚拟机、Ubuntu 阅读全文
摘要:
`Ctrl` + `,` 打开设置 搜索 copyOnSelection,勾选即可 对应的 settings.json 如下 ``` "terminal.integrated.copyOnSelection": true ``` 相关阅读:[修改 VSCode 底部终端配色](https://www 阅读全文
摘要:
一些结论 如果 shared_ptr 管理的资源不是 new 分配的内存,才考虑自定义删除器,这也是为什么 make_shared 不支持自定义删除器的原因,因为 make_shared 就是通过 new 分配内存资源 make_shared 不支持自定义删除器 shared_ptr<Bar> sp 阅读全文
摘要:
《C++ Primer 5th》 P406 const 方法,不能修改指针本身,但是可以修改指针指向的对象! class Foo { public: Foo() : c(new int()) {} void inc() const { *c += 1; cout << *c << endl; } p 阅读全文
摘要:
void foo() { auto d = new D(); E e1; {E e2;} E e3; static F f; delete d; } A a; namespace bar { B b; } int main() { G g; foo(); } static C c; 执行结果 构造顺 阅读全文
摘要:
lambda 能做到的,手写也能做到,但是 lambda 实在是太方便了,以至于对 C++ 开发产生了颠覆性的影响: 常用场景 STL _if 算法族的谓词 智能指针的自定义析构器 线程 API 的条件变量(对谓词进行特化处理) 临时制作回调函数、接口适配函数 条款 31:避免默认捕获 lambda 阅读全文
摘要:
DRAFT 梳理下我的技能树,要学的太多,学无止境 阅读全文
摘要:
最近需要开发一个 Java 的代码生成器,周末看了 2 天廖雪峰的 Java 教程,就能直接上手写 Java。说下自己最明显的感受,用的不多,理解不一定对: 【编译/解释】Java 编译+解释,运行在 JVM,跨平台移植方便,但执行速度/效率比 C++ 低 【编程范式】Java 纯面向对象,除了几个 阅读全文
摘要:
单例模式有很多种实现: 懒汉/饿汉 非线程安全 线程安全 每次判空加锁(效率不高) DCL:Double-check lock(繁琐,C++11 之前的最佳实现) Meyers’ singleton:静态变量(简洁,C++11 之后的最佳实践) C++11 规范保证了局部 static 对象的线程安 阅读全文
摘要:
考察点 返回值类型 MyClass&,可以连续赋值 参数类型:(const MyClass& rhs) 或者 (MyClass rhs) 值传递(copy-swap) 自赋值安全 无内存泄漏,旧值需要析构 异常安全 参考实现 copy-swap 惯用法 BennyHuo class MyString 阅读全文
摘要:
验证局部静态变量 static int cnt 在无锁情况下的 data race: 测试 C 源码: #include <stdio.h> #include <pthread.h> #include <stdlib.h> void* foo(void* args) { static int cnt 阅读全文
摘要:
问题描述 交叉编译的可执行文件,无法在 host 上使用 ldd 命令查看其依赖的动态库,可以用交叉编译工具链中的 readelf 来实现类似的功能。 解决方案 假设交叉编译用的 readelf 位于 /usr/bin/aarch64-linux-gnu-readelf(可以换成你所用的交叉编译工具 阅读全文
摘要:
编译、交叉编译 gRPC 心得体会:优先看官方教程,不要随便百度一篇 CSDN/博客园教程照着做! 如果你搜到这篇文章,而且还没看过 Google 官方的编译教程,建议先看看文章底部的参考链接 1 下载代码 git clone -b v1.48.x https://github.com/grpc/g 阅读全文
摘要:
# 小工具 - 代码行数统计:cloc - 查看内存占用:ps_mem(pip3 install ps_mem) - [Compiler Explorer](https://godbolt.org/) - [Crontab.guru](https://crontab.guru/#5_4_*_*_su 阅读全文
摘要:
原帖地址:https://stackoverflow.com/questions/10195343/copy-a-file-in-a-sane-safe-and-efficient-way 这是我在 StackOverflow 上见过的非常高质量的提问了:作者自己提出了很多种解法,并且做了性能测试。 阅读全文
摘要:
问题描述 Linux 终端在某些目录下执行 ls 命令直接段错误 segement fault core dump 可能的原因 环境变量 LD_LIBRARY_PATH 设置不当(如包含当前目录 .),而当前目录又恰好包含 libc 等系统库,则可能导致该问题。 解决方案 unset LD_LIBR 阅读全文
摘要:
写给自己的笔记,不具有通用性。 setupNewUbuntu.sh sudo apt install ssh -y # C++ 开发 # error trying to exec 'cc1plus': execvp: No such file or directory sudo apt instal 阅读全文
摘要:
《C++高级编程》第4版 18.2节 可以指向任何可调用对象:函数、函数对象、或 lambda 表达式;被称为多态函数包装器,可以当成函数指针使用,还用作实现回调函数的参数。function 真正有用的场合是将回调函数作为类的成员变量。 必须用 std::function<> 而不能用指针 如果 p 阅读全文
摘要:
原因 repo 就是这么设计的 repo start <branch_name> --all 解决方案 repo sync repo forall -pc 'git checkout --track $REPO_REMOTE/$REPO_RREV' 参考链接 https://groups.googl 阅读全文
摘要:
创建一个新仓库 git clone <git-url> cd git_folder touch README.md git add README.md git commit -m "add README" git push -u origin master 推送现有文件夹 cd existing_f 阅读全文
摘要:
建议先阅读 C++ 之父的 A tour of C++ 中相关章节 现代 C++ 对多线程/并发的支持 A Tour of C++(上) 现代 C++ 对多线程/并发的支持 A Tour of C++(下) 35 优先选用基于任务而非基于线程的程序设计 以异步方式运行函数 int doWork(), 阅读全文
摘要:
总结自《Effective Modern C++》条款 11 常见场景 单例模式删除复制构造、复制赋值运算符重载 理由 未定义的调用在连接阶段才暴露 =delete 可以支持任何函数的生成,包括非成员函数 =delete 可以阻止模版针对特定类型的实例化 ⚠️ 习惯上,=delete 都是 publ 阅读全文
摘要:
更多《计算机网络 自顶向下》读书笔记 6.6 数据中心网络 数据中心的主机称为刀片(blade),负责提供内容、共同执行大规模分布式计算。主机堆叠在机架上,每个机架一般20-40台刀片。每个机架顶部有一个机架顶部交换机 TOR(Top of Rack),与机架上的主机互联,并与数据中心其他交换机互联 阅读全文
摘要:
总结自《Effective Modern C++》第 4 章 裸指针七宗罪 裸指针无法说明指向的是单个对象还是一个数组 裸指针无法说明使用完指针是否需要析构,即从声明中看不出来指针是否拥有所指向的对象 即使知道需要析构,也不知道应该用 delete 还是调用某个类似 deinit(p) 的函数 即使 阅读全文
摘要:
本文承接上文,总结自《Effective Modern C++》条款 17:理解特种成员函数的生成机制 特种成员函数 C++98 四种:默认构造、析构、复制构造、复制赋值运算符 C++11增加两种:移动构造、移动赋值运算符 合成机制 只有用到了才合成 没有显式声明任何构造的时候才会合成默认构造 合成 阅读全文
摘要:
一小段代码足以说明问题 核心测试代码 int main() { cout << "1."; Foo a1; // 默认构造 cout << "2."; Foo a2(a1); // 拷贝构造(直接初始化) cout << "3."; Foo a3 = a1; // 拷贝构造(拷贝初始化) cout 阅读全文
摘要:
更多《计算机网络 自顶向下》读书笔记 6.5 链路虚拟化:网络作为链路层 为IP设备提供互联服务的链路层技术: 电话网(电路交换 P21) 交换以太网 MPLS(分组交换,虚电路网络) 过时技术:ATM、帧中继 ... 多协议标签交换(MPLS) MPLS:Multiprotocol Label S 阅读全文
摘要:
更多《计算机网络 自顶向下》读书笔记 6.4.4 虚拟局域网 如果多个局域网交换机之间互联,有以下问题: 缺乏流量隔离:广播流量将跨越整个机构网络。导致性能、安全、隐私问题。通过使用路由器连接不同部门的交换机可以解决该问题,或者通过交换机VLAN隔离。 交换机的无效使用:如果10个组,则需要10个第 阅读全文
摘要:
更多《计算机网络 自顶向下》读书笔记 6.4.3 链路层交换机 交换机自身对主机和路由器是透明的:主机/路由器向另一个主机/路由器寻址,而不是向交换机寻址。 帧到达交换机的输出接口的速率可能暂时超过接口的链路容量,因此交换机输出接口设有缓存。 1.交换机转发和过滤 过滤:决定转发还是丢弃;转发:决定 阅读全文
摘要:
更多《计算机网络 自顶向下》读书笔记 6.4 交换局域网 交换机运行在链路层,不识别网络层地址,使用链路层地址而不是IP地址来转发链路层帧。 6.4.1 链路层寻址和 ARP 🆀 为什么有网络层IP地址还需要链路层MAC地址? 局域网为任意网络层设计,不只是IP和因特网;如果适配器用IP地址寻址, 阅读全文
摘要:
最近在二刷《计算机网络——自顶向下》做点笔记,加深印象,书不在手边时也能有个参考。之前的章节会陆续补充。 更多《计算机网络 自顶向下》读书笔记 两种链路层信道: 广播信道:如有线局域网、卫星网、混合光纤同轴电缆(HFC)。需要媒体访问协议来协调帧传输。 点对点通信链路:如长距离链路连接的两台路由器、 阅读全文
摘要:
对的,我这里要讲的不是如何掌握一种程序语言,而是所有的…… 很多编程初学者至今还在给我写信请教,问我该学习什么程序语言,怎么学习。由于我知道如何掌握“所有”的程序语言,总是感觉这种该学“一种”什么语言的问题比较低级,所以一直没来得及回复他们 😛 可是逐渐的,我发现原来不只是小白们有这个问题,就连美 阅读全文
摘要:
Windows Terminal 支持 PowerShell、cmd、Azure Could、WSL、ssh,界面美观流畅,配置选项丰富,一经推出广受好评。美中不足的是无法支持 COM 串口通信。 经过一番摸索,似乎可以借助 PuTTY 的 PLINK.EXE 曲线救国,只要载入 PuTTY 之前保 阅读全文
摘要:
问题描述 不想改变 VSCode 现有主题色,只修改 VSCode 终端(快捷键 Ctrl+`)的配色。 解决方案 Ctrl + , 打开设置,搜索 workbench.colorCustomizations,点击 Edit in settings.json 添加如下内容: "workbench.c 阅读全文
摘要:
tmux 的前缀绑定快捷键是一个高频使用的快捷键,两个键距离较远,使用不便。 可以将其修改为终端里不常用的 Ctrl + S 在 ~/.tmux.conf 中写入 # Setting the prefix from C-b to C-s set -g prefix C-s # Free the or 阅读全文
摘要:
CSAPP 并发编程笔记 并发和并行 并发:Concurrency,只要时间上重叠就算并发,可以是单处理器交替处理 并行:Parallel,属于并发的一种特殊情况(真子集),多核/多 CPU 同时处理 构造并发程序的方法 现代操作系统提供了 3 种基本的构造并发程序的方法: 进程:每个逻辑控制流都是 阅读全文
摘要:
问题描述 IT 部门自作聪明地去掉了快捷方式的小箭头,让我傻傻分不清到底是文件还是快捷方式。 解决方式 打开注册表中 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Shell Icons 删除键为 29 的 阅读全文