主页

Gdb调试方法总结

写在前面 Ubuntu 20.04 x86_64 gdb: 9.2 总结一下 C/C++ 代码调试的艺术, 这本书讲了 gdb 和 vc 的调试方法, 虽然有一些小错误, 但是不影响看, 突击面试确实是很方便的. 啃文档的话可以, 不过时间来不及了, 虽然技术是要慢慢沉淀的… 当然我还看了 软件调试的艺术 这本书, 中外作者的文笔还是有所不同的.. gdb 主要功能 总览: 支持的功能 描述 命令 断点管理 设置断点, 查看断点, 条件断点 b(break), condition 调试执行 逐语句...

阅读更多

C++在main函数之前或之后执行的函数

写在前面 总结一波面试题 测试环境 Ubuntu+clang 之前执行 #include <iostream> using namespace std; __attribute((constructor)) void before() { // C cout << "before main 1\n"; } int a = []() { // C++ 11 cout << "before main 2\n"; return 0; }(); int t1() { cout << "before main 3\n"; return 1; } static int p1 = t1()...

阅读更多

Jekyll博客配置mermaid支持以及暗黑主题适配

写在前面 最近忙里偷闲, 搞一下博客, 由于写一些笔记需要做时序图和类图, markdown 有现成的支持: mermaid-js, 网站, 这里就直接拿来主义了, 我的博客是基于 jekyll-TeXt-theme 的, 里面内置了 mermaid 开关, 但是版本已经比较老旧了, 下面来看看如何更新配置以及适配暗黑主题(如果用默认主题会导致线条显示对比度不明显). 方法 开启支持 先改_config.yml文件: ## => Markdown Enhancements ############################## ## Mathjax mathjax: true # false (default), true mathjax_autoNumber: ...

阅读更多

操作系统导论笔记 并发

写在前面 全部代码: ostep_cases;在 Linux+MacOS 下运行通过. 下面的代码都是基于 C 的, 当然为了不分文件测试我用了 C++ 的命名空间, 实际使用的话可以用类封装一下 API, 使用 RAII 惯用法, 避免忘记释放锁, 这部分内容在之后的文章中给出. 线程(thread) 基本概念与术语 临界区: 访问共享资源的一段代码, 资源通常是一个变量或者数据结构 竞态条件(race condition): 出现在多个执行线程大致同时进入临界区时, 都试图更新共享的数据结构, 会导致异常的结果. 不确定性: 程序由一个或多个竞态条件组成, 程序的输出因运行而异, 具体取决于哪些线程在何时运行. 这就导致了不确定的结果 互斥原语:...

阅读更多

多路归并的一些题目总结

写在前面 参考了: 【多路归并】从朴素优先队列到多路归并; 基本问题 88. 合并两个有序数组; 双指针归并: class Solution { public: void merge(vector<int>& nums1, int m, vector<int>& nums2, int n) { // 反着遍历插入数组 for (int i{m + n - 1}, j{m - 1}, k{n - 1}; i >= 0; --i) { if (j < 0) nums1[i] = nums2[k--]; ...

阅读更多

操作系统导论笔记 虚拟化

写在前面 这部分内容可以成为资源虚拟化, 主要包括 CPU 虚拟化(CPU 调度策略) 和 内存虚拟化(虚拟内存, 分段分页技术, 缓存策略等), 从一些很容易思考的点引入, 一点一点来分析不同策略的优劣和权衡, 十分引人入胜. 引入 正在运行的程序 执行指令: 处理器从内存中获取一条指令, 对其进行解码(decode), 然后执行(execute), 完成这条指令之后, 处理器继续执行下一条指令, 直到程序完成. 操作系统 一类让程序在计算机上运行变得容易的程序, 例如允许程序共享内存, 让程序与设备交互等. 虚拟化资源 操作系统通过虚拟化的方法使得计算机更加易用. 操作系统将物理资源(处理器, 内存, 磁盘等) 转换为更加通用, 强大, 易用的虚拟化形式. 为用户...

阅读更多

C++容器存放引用的小坑与分析

问题 最近做图论题发现一个bug, 在这里记录一下: vector<pair<int, int>> vp{ {1, 2}, {2, 3} }; for (size_t i{}; i < 4; ++i) { if (i < vp.size()) { auto& [a, b] = vp[i]; vp.emplace_back(a, b); cout << a << " : " << b << endl; } } 在 address-sanitizer 直接报: ==1705==ERROR: AddressSanitize...

阅读更多

背包问题力扣题目总结

写在前面 背包问题, 采用动态规划的思想. 0-1背包 物品只能用一次 有N件物品和一个最多能被重量为W 的背包。第i件物品的重量是weight[i],得到的价值是value[i] 。每 件物品只能用一次,求解将哪些物品装入背包里物品价值总和最大。 定义状态数组 dp[i][j] 表示从下标为[0-i]的物品里任意取,放进容量 为j的背包,价值总和最大是多少。 原始问题 class Solution { public: int BagMaxValue(vector<int>& value, vector<int>& weight, int maxWeight) { // 滚动数组优化 ...

阅读更多

Total views.
您是Zorch的第 个小伙伴
Hits