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) {
// 滚动数组优化
...
共计 455 篇文章,57 页。
您是Zorch的第 个小伙伴
Hits