<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[XiaoWhy的专栏]]></title><description><![CDATA[]]></description><link>https://blog.csdn.net/XiaoWhy</link><language>zh-cn</language><generator>https://blog.csdn.net/</generator><copyright><![CDATA[Copyright &copy; XiaoWhy]]></copyright><item><title><![CDATA[linux获取cpu使用率（sy%+us%）]]></title><link>https://blog.csdn.net/XiaoWhy/article/details/147334250</link><guid>https://blog.csdn.net/XiaoWhy/article/details/147334250</guid><author>XiaoWhy</author><pubDate>Fri, 18 Apr 2025 15:37:55 +0800</pubDate><description><![CDATA[/ 计算用户态和系统态时间（us% = user + nice, sy% = system + irq + softirq）// 解析所有字段（含 steal、guest、guest_nice）iss.ignore(3, ' ');// 跳过 "cpu"// 总时间包含所有字段 [11](@ref)// C++11兼容的元组解包。]]></description><category></category></item><item><title><![CDATA[go net.conn SetReadDeadline的困惑]]></title><link>https://blog.csdn.net/XiaoWhy/article/details/130320331</link><guid>https://blog.csdn.net/XiaoWhy/article/details/130320331</guid><author>XiaoWhy</author><pubDate>Sun, 23 Apr 2023 14:04:00 +0800</pubDate><description><![CDATA[最近在用go写个工具，在几百个协程并行拿多个服务器数据时，用SetReadDeadline设置超时60s时，经常read返回失败，错误信息是timeout，而不设置SetReadDeadline时，反而正常，而且正常数据返回也不可能会超时60s，这是为什么呢？]]></description><category></category></item><item><title><![CDATA[短时间大量连接时，服务对外端口不能访问的问题]]></title><link>https://blog.csdn.net/XiaoWhy/article/details/124988780</link><guid>https://blog.csdn.net/XiaoWhy/article/details/124988780</guid><author>XiaoWhy</author><pubDate>Thu, 26 May 2022 17:25:44 +0800</pubDate><description><![CDATA[最近一个服务在早上有大量连接，超过22w，连上时，会有对外服务不能访问问题，从而导致被云检查关闭重启的问题，经查出，是内核一参数设置过小导致，当有大量连接超过时，超出的连接会被丢弃。

net.nf_conntrack_max 和net.netfilter.nf_conntrack_max值

内核参数 net.nf_conntrack_max 系统默认值为”65536”，当nf_conntrack模块被装置且服务器上连接超过这个设定的值时，系统会主动丢掉新连接包，直到连接小于此设置值才会恢复。同时内核参数]]></description><category></category></item><item><title><![CDATA[concurrentqueue无锁队列多线程无序问题]]></title><link>https://blog.csdn.net/XiaoWhy/article/details/123112032</link><guid>https://blog.csdn.net/XiaoWhy/article/details/123112032</guid><author>XiaoWhy</author><pubDate>Thu, 24 Feb 2022 14:59:12 +0800</pubDate><description><![CDATA[最近接触了concurrentqueue的多线程无锁队列，测试了一下，发现单线程生产者和单线程消费者可以正常使用，多线程生产者的时候，即使加锁了，单线程取出来的时候好像还是无序的

#include &lt;iostream&gt;
#include "concurrentqueue.h"
#include &lt;functional&gt;
#include &lt;thread&gt;
#include &lt;mutex&gt;

using moodycamel::ConcurrentQueue;]]></description><category></category></item><item><title><![CDATA[定时器timer_create timerfd_create]]></title><link>https://blog.csdn.net/XiaoWhy/article/details/123110394</link><guid>https://blog.csdn.net/XiaoWhy/article/details/123110394</guid><author>XiaoWhy</author><pubDate>Thu, 24 Feb 2022 14:04:19 +0800</pubDate><description><![CDATA[一、timer_create
进程可以通过调用timer_create()创建特定的定时器，定时器是每个进程自己的，不是在fork时继承的，不会被传递给子进程。
编译时加编译选项 -lrt。
包含头文件&lt;time.h&gt;

1. timer_create
int timer_create(clockid_t clockid, struct sigevent *sevp, timer_t *timerid);

参数：
(1) clockid定义了定时器计时的方法，有如下几个值：
 CL...]]></description><category></category></item><item><title><![CDATA[数组中连续子数组最大和]]></title><link>https://blog.csdn.net/XiaoWhy/article/details/121252023</link><guid>https://blog.csdn.net/XiaoWhy/article/details/121252023</guid><author>XiaoWhy</author><pubDate>Wed, 10 Nov 2021 17:00:00 +0800</pubDate><description><![CDATA[使用动态规划解法：

#include &lt;stdio.h&gt;
#include &lt;stdlib.h&gt;

int MaxSum(int *nums, int len)
{
    int sum = nums[0];
    int n = nums[0];
    for(int i=1; i &lt; len; i++)
    {
        if(n &gt; 0) n+= nums[i];
        el...]]></description><category></category></item><item><title><![CDATA[gcc7.2 with-default-libstdcxx-abi属性]]></title><link>https://blog.csdn.net/XiaoWhy/article/details/121143324</link><guid>https://blog.csdn.net/XiaoWhy/article/details/121143324</guid><author>XiaoWhy</author><pubDate>Thu, 04 Nov 2021 15:20:12 +0800</pubDate><description><![CDATA[碰到一个在另个系统上用gcc7.2编译时，怎么也找不到一个日志库log4cxx函数定义的问题，在自己的编译机上一切都是正常的，请教另个同事才发现，另个gcc版本加了with-default-libstdcxx-abi属性

--with-default-libstdcxx-abi=gcc4-compatible

Configured with: ../configure --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --wi]]></description><category></category></item><item><title><![CDATA[全排列2，去重复]]></title><link>https://blog.csdn.net/XiaoWhy/article/details/120624004</link><guid>https://blog.csdn.net/XiaoWhy/article/details/120624004</guid><author>XiaoWhy</author><pubDate>Wed, 06 Oct 2021 13:46:00 +0800</pubDate><description><![CDATA[void dfs(vector&lt;int&gt;&amp; nums, int n, int i, list&lt;int&gt;&amp; cur, list&lt;list&lt;int&gt; &gt;&amp; ret, vector&lt;bool&gt; &amp;flag)
{
    if(i == n)
    {
        ret.push_back(cur);
        return;
    }

   ...]]></description><category></category></item><item><title><![CDATA[数组的全排列]]></title><link>https://blog.csdn.net/XiaoWhy/article/details/120622538</link><guid>https://blog.csdn.net/XiaoWhy/article/details/120622538</guid><author>XiaoWhy</author><pubDate>Wed, 06 Oct 2021 11:01:48 +0800</pubDate><description><![CDATA[void dfs(int* nums, int n, int i, list&lt;int&gt;&amp; cur, list&lt;list&lt;int&gt; &gt;&amp; ret, vector&lt;bool&gt; &amp;flag)
{
    if(i == n)
    {
        ret.push_back(cur);
        return;
    }

    for(int p = 0; p ...]]></description><category></category></item><item><title><![CDATA[两个数字字符串相乘]]></title><link>https://blog.csdn.net/XiaoWhy/article/details/120233054</link><guid>https://blog.csdn.net/XiaoWhy/article/details/120233054</guid><author>XiaoWhy</author><pubDate>Sat, 11 Sep 2021 09:05:32 +0800</pubDate><description><![CDATA[使用性质：

长为n的数和长为m的数相乘的结果最大长度为m+n;
	结果存在数组res中，num1[i]*num2[j]的结果为两位数tmp（0x或者xy），其中第一位位于
	
	
	res[i+j], 第二位位于res[i+j+1]。
	
	

	
	
	
	代码：
	
	
	string multiply(string&amp; num1, string&amp; num2)
	{
	    vector&lt;int&gt; arr1;
	    vector&lt;int&gt; a...]]></description><category></category></item><item><title><![CDATA[查找缺少的第一个正数]]></title><link>https://blog.csdn.net/XiaoWhy/article/details/120224423</link><guid>https://blog.csdn.net/XiaoWhy/article/details/120224423</guid><author>XiaoWhy</author><pubDate>Fri, 10 Sep 2021 16:09:11 +0800</pubDate><description><![CDATA[要求算法O(n),只能使用常数级别的额外空间

int firstMissNum(int *nums, int len)
{
    for(int i=0; i &lt; len; )
    {
        if(nums[i] &gt;0 &amp;&amp; nums[i] &lt; len &amp;&amp; nums[i] != nums[nums[i]-1])
        {
            int in...]]></description><category></category></item><item><title><![CDATA[数组中和等于指定值，不可重复使用]]></title><link>https://blog.csdn.net/XiaoWhy/article/details/120175774</link><guid>https://blog.csdn.net/XiaoWhy/article/details/120175774</guid><author>XiaoWhy</author><pubDate>Wed, 08 Sep 2021 11:12:33 +0800</pubDate><description><![CDATA[数组中可能会有重复值

在上个版本中做优化，去掉重复值，不重复利用


void backtrack(vector&lt;int&gt; &amp;candidates, int target, list&lt;vector&lt;int&gt; &gt;&amp;res, int i, vector&lt;int&gt; &amp;tmp_list);

void comSum(vector&lt;int&gt;&amp; candidates, int target)
{
    list&lt...]]></description><category></category></item><item><title><![CDATA[数组中元素组合等于某个值和，可重复使用]]></title><link>https://blog.csdn.net/XiaoWhy/article/details/120162557</link><guid>https://blog.csdn.net/XiaoWhy/article/details/120162557</guid><author>XiaoWhy</author><pubDate>Tue, 07 Sep 2021 17:12:09 +0800</pubDate><description><![CDATA[利用回朔法，递归，当某个值超出时，移除，再遍历下个值


void backtrack(vector&lt;int&gt; &amp;candidates, int target, list&lt;vector&lt;int&gt; &gt;&amp;res, int i, vector&lt;int&gt; &amp;tmp_list);

void comSum(vector&lt;int&gt;&amp; candidates, int target)
{
    list&lt;vector...]]></description><category></category></item><item><title><![CDATA[查找排序数组插入一个值的指定位置]]></title><link>https://blog.csdn.net/XiaoWhy/article/details/120065076</link><guid>https://blog.csdn.net/XiaoWhy/article/details/120065076</guid><author>XiaoWhy</author><pubDate>Thu, 02 Sep 2021 16:51:42 +0800</pubDate><description><![CDATA[void searchRange(int *arr, int len, int target)
{
    if(len == 0) return;

    int left = 0;
    int right = len -1;
    int ans = len;
    while(left &lt;= right)
    {
        int mid = ((right - left) &gt;&gt; 1) + left...]]></description><category></category></item><item><title><![CDATA[查找排序数组指定值范围]]></title><link>https://blog.csdn.net/XiaoWhy/article/details/120064347</link><guid>https://blog.csdn.net/XiaoWhy/article/details/120064347</guid><author>XiaoWhy</author><pubDate>Thu, 02 Sep 2021 16:27:54 +0800</pubDate><description><![CDATA[查找排序数组指定值，会有重复值，找出第一个和最后一个值的位置


void searchRange(int *arr, int len, int target)
{
    if(len == 0) return;

    int left = 0;
    int right = len -1;

    while(left &lt;= right)
    {
        int mid = (left + right) &gt;&gt; ...]]></description><category></category></item><item><title><![CDATA[搜索旋转排序数组]]></title><link>https://blog.csdn.net/XiaoWhy/article/details/120003756</link><guid>https://blog.csdn.net/XiaoWhy/article/details/120003756</guid><author>XiaoWhy</author><pubDate>Mon, 30 Aug 2021 19:23:13 +0800</pubDate><description><![CDATA[在一个旋转排序数组中查找指定值

比如4,5,6,7,0,1,2 中搜索0




int Search(int *arr, int len, int target)
{
    int l = 0;
    int r = len;

    if(r == 0) return -1;
    int m;
    while(r &gt; l)
    {
        m = (l+r) &gt;&gt; 1;
      ...]]></description><category></category></item><item><title><![CDATA[__attribute__作用]]></title><link>https://blog.csdn.net/XiaoWhy/article/details/119964869</link><guid>https://blog.csdn.net/XiaoWhy/article/details/119964869</guid><author>XiaoWhy</author><pubDate>Sat, 28 Aug 2021 10:37:32 +0800</pubDate><description><![CDATA[__attribute__用法
attribute((constructor))在main函数之前,执行一个函数,便于我们做一些准备工作
__attribute((constructor))void before()
{
printf(“before main\n”);
}

attribute((destructor))在main()函数退出或者调用了exit()之后调用
__attribute((destructor))void after()
{
printf(“before main\n”);
}
]]></description><category></category></item><item><title><![CDATA[linux -rpath作用，指定默认库查找路径]]></title><link>https://blog.csdn.net/XiaoWhy/article/details/119964450</link><guid>https://blog.csdn.net/XiaoWhy/article/details/119964450</guid><author>XiaoWhy</author><pubDate>Sat, 28 Aug 2021 10:09:41 +0800</pubDate><description><![CDATA[转载：https://blog.csdn.net/q1302182594/article/details/42102961/

结论：

-rpath和-rpath-link都可以在链接时指定库的路径；但是运行可执行文件时，-rpath-link指定的路径就不再有效（链接器没有将库的路径包含进可执行文件中），而-rpath指定的路径还有效（因为链接器已经将库的路径包含在可执行文件中了)。

  最后，不管使用了-rpath还是-rpath-link，LD_LIBRARY_PATH还是有效的。

可以在编..]]></description><category></category></item><item><title><![CDATA[最长有效括号长度]]></title><link>https://blog.csdn.net/XiaoWhy/article/details/119926943</link><guid>https://blog.csdn.net/XiaoWhy/article/details/119926943</guid><author>XiaoWhy</author><pubDate>Thu, 26 Aug 2021 11:02:56 +0800</pubDate><description><![CDATA[int FindMaxStr(const char* s, int len)
{
    int *f = new int[len];
    for(int i=0; i &lt; len; ++i)
    {
        f[i] = 0;
    }
    int i, t, ret = 0;
    for(i = 1; i &lt; len; ++i)
    {
        if(s[i] == ...]]></description><category></category></item><item><title><![CDATA[获取下一个较小数组]]></title><link>https://blog.csdn.net/XiaoWhy/article/details/119864490</link><guid>https://blog.csdn.net/XiaoWhy/article/details/119864490</guid><author>XiaoWhy</author><pubDate>Mon, 23 Aug 2021 10:45:40 +0800</pubDate><description><![CDATA[void swap(int i, int j, int *nums)
{
    int temp = nums[i];
    nums[i] = nums[j];
    nums[j] = temp;
}

void reverse(int *nums, int len , int index)
{
    int i = index;
    int j = len -1;
    while(i &lt; j)
    {
    ...]]></description><category></category></item></channel></rss>