<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[Hello，My Friends~]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/Frederick_Fung</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; Frederick_Fung]]></copyright><item><title><![CDATA[【Linux】crontab不生效的处理]]></title><link>https://blog.youkuaiyun.com/Frederick_Fung/article/details/141645638</link><guid>https://blog.youkuaiyun.com/Frederick_Fung/article/details/141645638</guid><author>Frederick_Fung</author><pubDate>Wed, 28 Aug 2024 17:25:51 +0800</pubDate><description><![CDATA[linux开机自启动：https://blog.youkuaiyun.com/daidaineteasy/article/details/54864776。原文链接：https://www.cnblogs.com/oneforyou/p/15293483.html。定时任务在命令行直接执行可以正确执行，但是加入定时任务之后没有执行结果。原文作者：oneforall97。]]></description><category></category></item><item><title><![CDATA[【Linux】配置libzmq时，执行 autogen.sh 报错 possibly undefined macro: AC_SUBST]]></title><link>https://blog.youkuaiyun.com/Frederick_Fung/article/details/135486117</link><guid>https://blog.youkuaiyun.com/Frederick_Fung/article/details/135486117</guid><author>Frederick_Fung</author><pubDate>Tue, 09 Jan 2024 17:33:48 +0800</pubDate><description><![CDATA[原文链接：https://www.cnblogs.com/vancasola/p/9378456.html。对应下表，将以下安装并升级到相应或者更高的版本。]]></description><category></category></item><item><title><![CDATA[【嵌入式】通过shell脚本调用minicom向USB串口发送指令]]></title><link>https://blog.youkuaiyun.com/Frederick_Fung/article/details/127286343</link><guid>https://blog.youkuaiyun.com/Frederick_Fung/article/details/127286343</guid><author>Frederick_Fung</author><pubDate>Wed, 12 Oct 2022 17:17:00 +0800</pubDate><description><![CDATA[若为空，点击virtualBox上方命令栏 “设备” -> “USB” ，勾选 “FTDI FT232R USB UART [0600]”然后输入Ctrl + A + Z，来进入配置界面，若不能成功唤醒，则多半是因为Ctrl + A 被占用。参考链接：https://blog.youkuaiyun.com/hannibaychty/article/details/126959861。参考链接：https://blog.youkuaiyun.com/regnarts00/article/details/121592115。]]></description><category></category></item><item><title><![CDATA[【Linux】进程切换]]></title><link>https://blog.youkuaiyun.com/Frederick_Fung/article/details/123690854</link><guid>https://blog.youkuaiyun.com/Frederick_Fung/article/details/123690854</guid><author>Frederick_Fung</author><pubDate>Tue, 24 May 2022 22:41:13 +0800</pubDate><description><![CDATA[操作系统为了控制进程的执行，必须有能力挂起正在CPU上运行的进程，并恢复以前挂起的某个进程的执行，这种行为被称为进程切换，任务切换或上下文切换
或者说，进行进程切换就是从正在运行的进程中收回处理器，然后再使待运行进程来占用处理器。 这里所说的从某个进程收回处理器，实质上就是把进程存放在处理器的寄存器中的中间数据找个地方存起来，从而把处理器的寄存器腾出来让其他进程使用。那么被中止运行进程的中间数据存在何处好呢？当然这个地方应该是进程的私有堆栈。
让进程来占用处理器，实质上是把某个进程存放在私有堆栈中寄存器的数]]></description><category></category></item><item><title><![CDATA[【Linux】延迟相关数据]]></title><link>https://blog.youkuaiyun.com/Frederick_Fung/article/details/124257963</link><guid>https://blog.youkuaiyun.com/Frederick_Fung/article/details/124257963</guid><author>Frederick_Fung</author><pubDate>Mon, 18 Apr 2022 20:06:01 +0800</pubDate><description><![CDATA[执行一个指令 1 ns
L1缓存查询 0.5 ns
分支预测错误 (Branch mispredict) 3 ns
L2缓存查询 4 ns
互斥锁/解锁 17 ns
在1Gbps 的网络上发送2KB 44 ns
主存访问 100 ns
Zippy 压缩 1KB 2,000 ns
从内存顺序读取 1MB 3,000 ns
SSD 随机读 16,000 ns
从SSD 顺序读取 1MB 49,000ns
同一个数据中心往返 500,000 ns
从磁盘顺序读取 1MB 825,000 ns
磁盘寻址 2,00.]]></description><category></category></item><item><title><![CDATA[【C/C++】第一次在此定义，多重定义 multiple definition of]]></title><link>https://blog.youkuaiyun.com/Frederick_Fung/article/details/122346438</link><guid>https://blog.youkuaiyun.com/Frederick_Fung/article/details/122346438</guid><author>Frederick_Fung</author><pubDate>Thu, 06 Jan 2022 16:06:05 +0800</pubDate><description><![CDATA[报错
screenshot.o：在函数‘OnvifClientDevice::GetDNS(_tds__GetDNSResponse&amp;)’中：
screenshot.cpp:(.text+0x390): multiple definition of `OnvifClientDevice::GetDNS(_tds__GetDNSResponse&amp;)’
ptzcontrol.o:ptzcontrol.cpp:(.text+0xa0)：第一次在此定义
问题调查
一个头文件 a.h 中函数声明且定义]]></description><category></category></item><item><title><![CDATA[【C/C++】监控系统内存代码]]></title><link>https://blog.youkuaiyun.com/Frederick_Fung/article/details/122200517</link><guid>https://blog.youkuaiyun.com/Frederick_Fung/article/details/122200517</guid><author>Frederick_Fung</author><pubDate>Tue, 28 Dec 2021 19:35:26 +0800</pubDate><description><![CDATA[项目代码用的，为了方便以后回顾，记录一下
#include &lt;stdio.h&gt; 
#include &lt;stdint.h&gt;
#include &lt;stdlib.h&gt;
#include &lt;pthread.h&gt;
#include &lt;unistd.h&gt; 
#include &lt;string.h&gt;
#include &lt;sys/mman.h&gt;
#include &lt;fcntl.h&gt;
#define MRYRATIO 100
#de]]></description><category></category></item><item><title><![CDATA[【Linux】GDB底层调试原理]]></title><link>https://blog.youkuaiyun.com/Frederick_Fung/article/details/122027360</link><guid>https://blog.youkuaiyun.com/Frederick_Fung/article/details/122027360</guid><author>Frederick_Fung</author><pubDate>Sun, 19 Dec 2021 22:41:28 +0800</pubDate><description><![CDATA[文章目录一、GDB调试模型二、GDB调试的系统调用三、GDB调试已经执行的服务进程四、断点的原理五、next的原理
一、GDB调试模型
GDB调试包括2个程序：gdb程序和被调试程序。根据这2个程序是否运行在同一台电脑中，可以把GDB的调试模型分为2种: 1. 本地调试 2. 远程调试
本地调试：调试程序和被调试程序运行在同一台电脑中。
远程调试：调试程序运行在一台电脑中，被调试程序运行在另一台电脑中。
与本地调试相比，远程调试中多了一个GdbServer程序，它和目标程序都是运行在目标机中，可能是一台x8]]></description><category></category></item><item><title><![CDATA[【SQL】left join 、right join 、inner join之间的区别]]></title><link>https://blog.youkuaiyun.com/Frederick_Fung/article/details/121261730</link><guid>https://blog.youkuaiyun.com/Frederick_Fung/article/details/121261730</guid><author>Frederick_Fung</author><pubDate>Thu, 11 Nov 2021 09:55:10 +0800</pubDate><description><![CDATA[left join(左联接) 返回包括左表中的所有记录和右表中联结字段相等的记录
right join(右联接) 返回包括右表中的所有记录和左表中联结字段相等的记录
inner join(等值连接) 只返回两个表中联结字段相等的行

举例，表A记录如下




aID
aNum




1
a20050111


2
a20050112


3
a20050113


4
a20050114


5
a20050115



表B记录如下




bID
bName




1
2006032401


.]]></description><category></category></item><item><title><![CDATA[【Linux】申请巨页内存]]></title><link>https://blog.youkuaiyun.com/Frederick_Fung/article/details/120873535</link><guid>https://blog.youkuaiyun.com/Frederick_Fung/article/details/120873535</guid><author>Frederick_Fung</author><pubDate>Wed, 20 Oct 2021 20:04:45 +0800</pubDate><description><![CDATA[一、原理概述
操作系统对内存采用多级页表和分页进行管理，而操作系统每个页默认大小为4KB。如果进程使用的内存过大，比如1GB，这样会在页表中占用 1GB / 4KB = 262144个页表项，而系统TLB可以容纳的页表项远小于这个数量。当多个内存密集型应用访问内存时，会造成过多的TLB未命中。
　　因此在特定情况下会需要减少未命中次数，一个可行的办法就是增大每个页的尺寸。操作系统默认支持的大页是2MB，当使用1GB内存时，在页表中将占用 1GB / 2MB = 512个页表项，可以大大提升TLB命中率，进而]]></description><category></category></item><item><title><![CDATA[【C/C++】gettimeofday()函数：获取当前时间]]></title><link>https://blog.youkuaiyun.com/Frederick_Fung/article/details/119855963</link><guid>https://blog.youkuaiyun.com/Frederick_Fung/article/details/119855963</guid><author>Frederick_Fung</author><pubDate>Sun, 22 Aug 2021 18:29:10 +0800</pubDate><description><![CDATA[头文件：
#include &lt;sys/time.h&gt;    
#include &lt;unistd.h&gt;

定义函数：
int gettimeofday (struct timeval * tv, struct timezone * tz);

函数说明：gettimeofday()会把目前的时间有tv 所指的结构返回，当地时区的信息则放到tz 所指的结构中。
timeval 结构定义为：
struct timeval{
    long tv_sec;  //秒
    long tv]]></description><category></category></item><item><title><![CDATA[【Linux】Valgrind工具集详解]]></title><link>https://blog.youkuaiyun.com/Frederick_Fung/article/details/117529699</link><guid>https://blog.youkuaiyun.com/Frederick_Fung/article/details/117529699</guid><author>Frederick_Fung</author><pubDate>Sun, 22 Aug 2021 18:24:58 +0800</pubDate><description><![CDATA[文章目录一、简介二、入门三、打印信息说明四、抑制错误五、命令行详解六、使用Valgrind gdbserver和GDB调试程序七、Memcheck（内存错误检测器）
一、简介
一、Valgrind概述
Valgrind是用于构建动态分析工具的仪器框架。它附带了一组工具，每个工具都执行某种调试，分析或类似任务，可帮助您改进程序。Valgrind的架构采用模块化设计，因此可以轻松创建新工具，而不会干扰现有结构。
二、工具集列表
1、Memcheck是一个内存错误检测器。它可以帮助您使程序，尤其是那些用C和C +]]></description><category></category></item><item><title><![CDATA[【Linux】VIM使用技巧]]></title><link>https://blog.youkuaiyun.com/Frederick_Fung/article/details/117448532</link><guid>https://blog.youkuaiyun.com/Frederick_Fung/article/details/117448532</guid><author>Frederick_Fung</author><pubDate>Wed, 02 Jun 2021 11:38:58 +0800</pubDate><description><![CDATA[1、. ：重复上次修改
2、x：删除光标下的字符
3、u：撤销上次修改
4、dd：删除一整行
5、&gt;G：增加当前行的缩进
6、j：光标移动到下一行
7、$：移动到行尾
8、a：在当前光标后添加内容
9、A：在当前行尾添加内容
10、s：先删除光标下的字符，再进入插入模式
11、f+：查找下一处字符“+”出现的位置，并移动光标
12、；：重复查找上次 f 命令所查找的字符
13、，：反向查找上次 f 命令所查找的字符




复合命令
等效的长命令




C
c$


s
cl


S
^C


I
]]></description><category></category></item><item><title><![CDATA[【C/C++】程序性能优化]]></title><link>https://blog.youkuaiyun.com/Frederick_Fung/article/details/117262290</link><guid>https://blog.youkuaiyun.com/Frederick_Fung/article/details/117262290</guid><author>Frederick_Fung</author><pubDate>Tue, 25 May 2021 19:06:18 +0800</pubDate><description><![CDATA[码个坑，后面来填……]]></description><category></category></item><item><title><![CDATA[【C/C++】C语言volatile关键字详解]]></title><link>https://blog.youkuaiyun.com/Frederick_Fung/article/details/117261927</link><guid>https://blog.youkuaiyun.com/Frederick_Fung/article/details/117261927</guid><author>Frederick_Fung</author><pubDate>Tue, 25 May 2021 18:33:14 +0800</pubDate><description><![CDATA[volatile 是易变的、不稳定的意思。很多人根本就没见过这个关键字，不知道它的存在。也有很多程序员知道它的存在，但从来没用过它。我对它有种“杨家有女初长成,养在深闺人未识” 的感觉。
volatile 关键字和const 一样是一种类型修饰符，用它修饰的变量表示可以被某些编译器未知的因素更改，比如操作系统、硬件或者其它线程等。遇到这个关键字声明的变量，编译器对访问该变量的代码就不再进行优化，从而可以提供对特殊地址的稳定访问。
先看看下面的例子：
int i=10;
int j = i；//(1)语句
i]]></description><category></category></item><item><title><![CDATA[【C/C++】性能优化之打点计时（纳秒级）]]></title><link>https://blog.youkuaiyun.com/Frederick_Fung/article/details/116795270</link><guid>https://blog.youkuaiyun.com/Frederick_Fung/article/details/116795270</guid><author>Frederick_Fung</author><pubDate>Tue, 18 May 2021 13:57:50 +0800</pubDate><description><![CDATA[目的：加时间戳打印是为了方便快速对性能耗时进行测试
比如想要测试printf这个函数调用的耗时
bind_core(4);
for(int i=0;i&lt;MAX_SAMPLES;I++){
	timing_now(now_tsc0);
	printf("11111111");
	timing_now(now_tsc1);
	GATHERING_NS(series0,now_tsc0,now_tsc1,NULL);
}

操作步骤：

隔核
绑核
加一个循环
在printf前加开始时间戳
在printf后]]></description><category></category></item><item><title><![CDATA[【Linux】隔核绑核]]></title><link>https://blog.youkuaiyun.com/Frederick_Fung/article/details/116698835</link><guid>https://blog.youkuaiyun.com/Frederick_Fung/article/details/116698835</guid><author>Frederick_Fung</author><pubDate>Thu, 13 May 2021 17:53:18 +0800</pubDate><description><![CDATA[隔核：指定的cpu核心只参与最低限度的OS内核计算
绑核：运行程序时只使用指定的CPU核心
隔核方法1：修改grub
环境：CentOS7
具体步骤：
vim /etc/default/grub 修改 GRUB_CMDLINE_LINUX="... ioslcpus=1-2,7-8" 隔离1，2，7，8核心
grub2-mkconfig -o /boot/grub2/grub.cfg 更新配置
reboot 重启
cat /proc/cmdline 查看结果

绑核方法1：taskset命令或设置线程属性
]]></description><category></category></item><item><title><![CDATA[【C/C++】extern、static、const]]></title><link>https://blog.youkuaiyun.com/Frederick_Fung/article/details/115750370</link><guid>https://blog.youkuaiyun.com/Frederick_Fung/article/details/115750370</guid><author>Frederick_Fung</author><pubDate>Fri, 16 Apr 2021 11:11:11 +0800</pubDate><description><![CDATA[文章目录一、extern三、extern 和 const
一、extern
如果函数的声明中带有关键字extern，仅仅是暗示这个函数可能在别的源文件里定义，没有其它作用。即下述两个函数声明没有明显的区别：
extern int f(); 
int f();

当然，这样的用处还是有的，就是在程序中取代include “*.h”来声明函数，在一些复杂的项目中，我比较习惯在所有的函数声明前添加extern修饰。关于这样做的原因和利弊可见下面的这个例子：“用extern修饰的全局变量”
(1) 在test1.h]]></description><category></category></item><item><title><![CDATA[【C/C++】C++输出迭代器的地址]]></title><link>https://blog.youkuaiyun.com/Frederick_Fung/article/details/115405075</link><guid>https://blog.youkuaiyun.com/Frederick_Fung/article/details/115405075</guid><author>Frederick_Fung</author><pubDate>Fri, 02 Apr 2021 17:55:12 +0800</pubDate><description><![CDATA[&amp;*iterator 或  std::addressof(*iterator)

]]></description><category></category></item><item><title><![CDATA[【Linux】iptables详解]]></title><link>https://blog.youkuaiyun.com/Frederick_Fung/article/details/115404870</link><guid>https://blog.youkuaiyun.com/Frederick_Fung/article/details/115404870</guid><author>Frederick_Fung</author><pubDate>Fri, 02 Apr 2021 17:53:32 +0800</pubDate><description><![CDATA[文章目录iptables简介iptables基础iptables和netfilter的关系iptables传输数据包的过程iptables的规则表和链表（tables）链（chains）规则表规则链规则表之间的优先顺序规则链之间的优先顺序（分三种情况）第一种情况：入站数据流向第二冲情况：转发数据流向第三种情况：出站数据流向管理和设置iptables规则iptables的基本语法格式防火墙处理数据包的四种方式iptables防火墙规则的保存与恢复iptables防火墙常用的策略1.拒绝进入防火墙的所有ICMP]]></description><category></category></item></channel></rss>