自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

原创 C语言文件操作

【代码】C语言文件操作。

2024-07-26 21:44:31 171

原创 vscode免密登陆ssh

注意:不要用ctrl+v粘贴,我试了几次都提示密码错误,应该是按下快捷键时被当作了密码输入。以管理员模式打开powershell,依次运行以下指令,可以缓存密码。如果私钥设置了密码,即使用密钥登陆依然要每次输出ssh密码。接着输入以下命令添加密钥,他会提示你输入密码。复制好密码好,只要鼠标右键点击一次就能粘贴。好了,现在可以免密登陆ssh了。

2024-07-26 09:02:08 58

原创 C语言系统调用linux文件系统

在C语言中,openwrite和read函数是系统调用(system calls),它们直接由操作系统提供,用于底层的文件操作。这些函数是UNIX和类UNIX系统(如Linux)中的标准接口,不同于C标准库中的文件操作函数(如fopenfwrite和fread。

2024-07-25 14:57:29 634

原创 C语言文件锁Linux

进程A1写入完成前,进程A2的写入被阻塞,进程A3的读取被阻塞。

2024-07-25 12:31:37 146

原创 pandas比较2个dataframe不同部分

翻译自:https://stackoverflow.com/questions/17095101/compare-two-dataframes-and-output-their-differences-side-by-side。*注意:重要的是df1和df2在这里共享相同的索引。为了克服这种模糊性,您可以确保只使用df1.index & df2.index查看共享标签,但我认为这将作为练习。

2024-07-24 13:09:36 112

原创 VSCode C/C++代码格式化

会自动格式化注释块,输入过程中按Enter,新的一行会自动添加。Auto Comment Blocks 插件可以在输入时就格式化。.clang-format 对注释块貌似无法格式化。

2024-07-24 09:46:03 163

原创 Linux定时执行程序和关闭程序

crontab是一个强大的工具,可以帮助你自动化定时任务。在编辑 crontab 文件时,确保格式正确并且任务路径和权限设置正确,以确保任务按预期运行。

2024-07-23 10:33:49 377

原创 std::thread传递引用

【代码】std::thread传递引用。

2024-07-22 20:31:44 76

原创 std::thread 参数为类成员函数

在 C++ 中,将成员函数传递给需要正确处理对象的实例以及成员函数指针。以下是一个简单的示例,展示了如何将成员函数传递给&obj。

2024-07-22 20:24:24 127

原创 C++ 范围for循环时对容器进行删除

在 C++ 中,在使用范围for循环时对容器进行修改(例如删除元素)可能会导致未定义行为。这是因为范围for循环的迭代器可能会在容器被修改后失效。会在循环过程中删除元素,这样会导致迭代器失效,进而引发潜在的崩溃或未定义行为。:在标准for循环中,可以显式控制迭代器的行为,并在删除元素后手动更新迭代器。:首先记录要删除的键,循环结束后再删除这些键。时直接修改它,从而避免未定义行为的发生。这两种方法都可以避免在遍历。

2024-07-21 20:47:20 189

原创 时间复杂度

O(\log n):表示性能更好,特别是在处理非常大的数据集时,算法运行时间增加得较少。O(n):表示性能相对较差,因为运行时间随输入规模线性增加。因此,在设计和选择算法时,优先考虑时间复杂度较低的算法(如O(\log n))可以获得更高效的性能,尤其是在处理大型数据集时。

2024-07-21 14:17:40 310

原创 C语言实现类似字典的功能(字符串索引的数组)

在C语言中,数组的索引只能是整数。数组索引用于访问数组中的元素,而数组本质上是一个线性结构,索引必须是整数类型(如。:定义一个结构体,其中一个成员是字符串,另一个成员是数组的值,然后在这个结构体数组中进行查找。:使用两个数组,一个存储键(字符串),一个存储值,通过查找键数组的索引来访问值数组中的对应值。上述方法在C语言中常用于实现类似于其他高级语言中的字典或映射结构。:使用字符串作为键,整数或指针作为值。库或者自己实现一个简单的哈希表。),以便指示数组中的具体位置。

2024-07-21 13:37:25 318

原创 tmux详解

【代码】tmux详解。

2024-07-20 10:14:43 94

原创 C++多线程测试 文件读取过程有新内容

【代码】C++多线程测试 文件读取过程有新内容。

2024-07-20 00:40:28 117

原创 C语言 灵活数组成员

在C99及C++标准中,引入了灵活数组成员(flexible array member)的概念。这个特性允许在结构体中定义一个数组,其大小在编译时未知,实际大小在运行时确定。通常,灵活数组成员的定义方式是int data[],这表明数组的大小是动态的。占位符用途对齐和布局:使用是一个常见的技巧,用于确保结构体在内存中的对齐和布局符合要求。这种方法让编译器在计算结构体的总大小时考虑到数组的开始位置,方便动态分配实际需要的内存。占位符:在结构体中使用。

2024-07-19 14:09:47 908

原创 Linux输出重定向详解

在 Linux 中,输出重定向是将命令的输出(标准输出或错误输出)重定向到文件或其他位置的过程。常见的重定向符号包括>>2>和&>。

2024-07-19 12:04:51 355

原创 Linux输出重定向到文件立即输出

程序中断时,文件为空的原因可能是由于缓冲机制。标准输出(stdout)和标准错误输出(stderr)默认是缓冲的,这意味着数据在写入文件之前会先存储在缓冲区中。如果程序在缓冲区的数据被写入文件之前中断,这些数据将不会出现在文件中。

2024-07-19 11:56:55 167

原创 C++多线程不用加锁的情况

同样 std::vector 的 push_back 方法在单个线程中是原子的,它会确保元素要么完全添加到向量中,要么不添加(在元素添加的过程中,其他线程不能读取到部分数据)。即使在多线程环境中,也不会出现其他线程读取到部分添加的元素的情况。比如写入一个字符串 “Hello, world!\n” 要么成功完全写入,要么失败没有写入,不存在只写入一半"Hello, wor" 所以在多线程读取时也不可能读取到一半。文件写入操作一般是原子性的,这意味着写入的数据要么是完整的,要么是未写入。

2024-07-19 11:33:32 191

原创 C++互斥锁测试

不加锁,还没写完就读取,容易出问题。

2024-07-18 17:02:29 229

原创 C++多线程和std::vector

C++ 标准没有定义在一个线程正在修改容器的同时,另一个线程可以安全地读取容器的内容。因此,这种情况下的行为是未定义的,可能导致程序出现不可预测的结果。

2024-07-18 03:49:41 281

原创 循环中获取最近N个最大值

【代码】循环中获取最近N个最大值。

2024-07-17 20:44:07 156

原创 Pandas输出表格对齐问题

【代码】Pandas输出表格对齐问题。

2024-07-17 15:43:11 143

原创 Value too large for defined data type

找到错误信息:“Value too large for defined data type”(数值超出定义的数据类型范围),表明在使用。于是把结构体字段都打印出来都没有超过范围,最后添加 tm.tm_isdst = -1;自动判断夏令时, 终于正常。使用自定义结构体时,timestamp 时而正常,时而返回-1,使用。结构体中的某些字段值超出了函数支持的范围,导致无法正确处理。

2024-07-16 21:28:00 111

原创 C++找到错误的具体信息

使用 fprintf(stderr, …),将错误消息输出到标准错误流 stderr。这种做法是为了将错误信息输出到一个专门用于记录错误的流中,而不是普通的输出。区分错误信息和普通输出:将错误信息输出到 stderr 可以帮助开发者在程序运行时更容易地区分错误信息和普通输出,便于调试和排查问题。错误信息的捕捉和记录:通过将错误信息输出到 stderr,可以方便地在日志系统中捕捉和记录这些信息,用于后续的分析和跟踪。为什么不用printf来打印输出?

2024-07-16 21:05:36 189

原创 C++读取CSV文件保存到二维数组

【代码】C++读取CSV文件保存到二维数组。

2024-07-15 21:45:10 108

原创 std::getline

是 C++ 标准库中的一个函数,用于从输入流中读取一行数据并存储到字符串中。它通常用于读取用户输入或从文件中读取文本数据。以下是。

2024-07-15 21:06:50 346

原创 Tick数据的清洗和1分钟K线合成

10:15推送的tick是有效数据,其价格和成交量都有变化,合并为10:14开始的1分钟K线。15:00推送的tick是有效数据,其价格和成交量都有变化,合并为14:59开始的1分钟K线。有的品种如rb2410:15点后依然会推送有效数据,不过价格和成交量都不再变化,合并到最后的K线。有的品种如rb2410:23点结束,所以23点推送的tick属于22:59开始的K线。有的品种如sc2408:2:30结束,那么23点推送的K线属于23点开始的K线。

2024-07-14 22:49:52 445

原创 pandas时区问题

原因是 pandas 返回的是格林威治标准时间,与北京时间差了 8 小时。解决方案,参数origin ,可以指定时间戳的起始时间。转换时间戳,输出时间差8小时。

2024-07-14 19:55:17 104

原创 Linux时间查看和设置

确保该服务已启用并运行。如果您希望使用更高级的NTP配置,可以安装。Ubuntu默认使用。

2024-07-14 19:25:46 292

原创 C语言定时执行任务

每天下午4点执行任务。

2024-07-09 22:46:54 93

转载 C/C++ Sleep()函数和wait()函数的区别

【代码】C/C++ Sleep()函数和wait()函数的区别。

2024-07-09 21:22:22 35

原创 C++休眠的方法

在这个示例中,主线程在调用 cv.wait(lock);之后会永久等待,直到其他线程通过 cv.notify_one() 或 cv.notify_all() 唤醒它。所以只要不唤醒它,就等同于windows的Sleep(INFINITE)Windows平台的API函数 Sleep(INFINITE);休眠时间为永久,Linux下没有类似的函数。C++可以用条件变量 std::condition_variable 实现类似的效果。

2024-07-09 21:11:46 198

原创 Linux常用命令

clearclear:清空屏幕内容,但保留缓冲区,可以向上滚动查看之前的输出。resetreset 命令不仅清空屏幕内容,还会重置终端的设置和状态,恢复到默认状态。它会重新初始化终端,包括终端的字符集、终端模式、输入/输出设置等。但不会终止或改变当前会话。当前会话中的所有进程和环境变量都会保持不变。

2024-07-09 15:12:14 192

原创 C++多线程和循环队列

为了演示这些问题,可以运行这个程序,并且在没有互斥锁的情况下,很有可能会看到不一致的输出,比如重复的输出或者未定义的行为。解决方法就是在关键部分添加互斥锁。: 多线程并发修改共享数据时,可能会导致程序行为不可预测甚至崩溃。假设我们不使用互斥锁,并且我们在两个线程中分别调用。操作可能会读取错误的数据或读取到无效的数据。在这个例子中,没有使用任何锁机制来保护。变量,导致它们的值不一致。操作可能会覆盖队列中的数据,而。: 两个线程可能同时访问和修改。

2024-07-09 14:59:20 345

原创 C++程序设计注意事项

【代码】C++程序设计注意事项。

2024-07-09 13:16:27 76

原创 C++多线程 条件等待和通知

主要用于多线程编程中的条件等待和通知机制。它允许一个或多个线程等待某个特定条件达成,一旦条件满足,它可以通知正在等待的线程继续执行。提供了一种高效且线程安全的方式,用于在多线程环境下等待和通知线程。:与轮询方式相比,使用条件变量可以有效避免忙等待,节省系统资源。方法等待条件变量,同时释放持有的。,使得其他线程可以访问共享资源。方法通知等待中的线程继续执行。:当条件满足时,可以调用。提供对互斥锁的自动管理。

2024-07-09 12:23:53 260

原创 C++线程锁std::mutex

mutex”是“mutual exclusion”的缩写,意思是互斥锁。互斥锁用于多线程编程中,以确保同一时间只有一个线程能够访问某一共享资源,从而避免数据竞争和不一致性。std::mutex是最基本的互斥锁,用于保护共享数据。它有两个主要操作:lock和unlock。

2024-07-09 11:44:44 220

原创 C++多线程std::thread

在C++标准库中,std::thread类本身并不提供设置线程名称的功能。然而,在许多操作系统中,可以使用特定的API为线程设置名称。

2024-07-09 11:35:42 132

原创 C++线程安全队列

并不是线程安全的,因此我们需要引入额外的机制来确保线程安全。常用的方法是使用互斥锁(mutex)和条件变量(condition variable)。在 C++ 中,多线程队列(queue)的实现通常需要考虑线程安全问题,特别是在多个线程需要同时对队列进行操作时。),它负责从队列中取出元素。通过互斥锁和条件变量,我们确保了这些操作的线程安全性。函数中,我们创建了两个线程:一个生产者线程(),它负责向队列中添加元素;在这个示例中,我们定义了一个模板类。作为基础容器,并通过。

2024-07-08 21:30:17 312

原创 nunjucks动态更新模版路径

每次请求都动态读取文件确实会有一定的性能影响,特别是在高并发的情况下。为了解决这个问题,可以在应用启动时读取模板配置,并在模板更改时更新配置,这样只需要在应用启动和模板更改时读取文件,而不是每次请求都读取文件。可以使用一个全局变量来缓存当前的模板路径,只有在更改模板时才更新该变量和文件。

2024-07-08 07:32:02 209

提示
确定要删除当前文章?
取消 删除