自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

不积跬步无以至千里

不积跬步无以至千里

  • 博客(727)
  • 收藏
  • 关注

转载 如何定位死循环或高CPU使用率(linux)

确定是CPU过高使用top观察是否存在CPU使用率过高现象找出线程对CPU使用率过高的进程的所有线程进行排序ps H -e -o pid,tid,pcpu,cmd --sort=pcpu |grep xxx得到如下结果,其中线程2909使用了7.8%的CPU. 2907 2913 0.0 ./xxx 2907 2909 7.8 ./xxx也可以通过查看/

2017-09-21 13:02:18 655

转载 快速定位死循环位置

[cpp] view plain copy#ifdef(DEBUG)    #define WHILE(x) writes(__FILE__,__LINE__);while(x)  #else    #define WHILE(x) while(x)  #endif  替换代码中的while

2017-09-21 12:53:18 2854 2

转载 用prctl给线程命名

prctlTest name:  prctlSyscall number:  172Syscall name:  prctl  (man)File name:  prctl.txt  (1225 bytes)* * 说 明 * *int prctl(int option,unsigned long arg2,unsigned long arg3,unsigned long

2017-09-18 16:31:47 959

转载 Linux中常用的时间结构struct timespec 和struct timeval

在Linux中常用的时间结构有struct timespec 和struct timeval 。下面是两个结构的定义struct timespec{    __time_t tv_sec;        /* Seconds. */    long   tv_nsec;       /* Nanoseconds. */};struct timeval {      

2017-09-15 13:26:20 13291

转载 boost :: scoped_ptr的和std ::的unique_ptr的区别 是之间的唯一不同boost::scoped_ptr<T>和std::unique_ptr<T>的事实std::uni

boost :: scoped_ptr的和std ::的unique_ptr的区别是之间的唯一不同boost::scoped_ptr和std::unique_ptr的事实std::unique_ptr有移动的语义,而boost::scoped_ptr只是一个GET /重置智能指针?--------------解决方案-------------没有,但是这是最重要

2017-09-14 17:34:03 2637

转载 epoll 事件的检测

epoll 事件的检测1epoll 事件中发现就EPOLLIN , EPOLLOUT , EPOLLPRI可以用.EPOLLERR 和 EPOLLHUP什么情况下才能监测出这种问题啊.我的内核是2.6.20可是用EPOLLRDHUP的时候编译包错.RecvMessThread.cpp:48: error: ‘EPOLLRDHUP’ was not declare

2017-09-14 13:39:47 2008 1

转载 epoll读到一半又有新事件来了怎么办?

有哥们在腾讯面试被问到了。我也很好奇就做了下实验。有些朋友急性子想看过程只想知道结果,我就先给出结果吧。1.阻塞读数据(不用epoll),你说读到一半有新消息又来了怎么办? 2.非阻塞读数据(不用epoll),你说读到一半有新消息又来了怎么办? 3.epoll的ET模式时,如果数据只读了一半,也就是缓冲区的数据只读了一点,然后又来新事件了怎么办?答

2017-09-14 13:39:24 737

转载 EPOLLONESHOT

epoll的总结之四LT和ET使用EPOLLONESHOT在前面说过,epoll有两种触发的方式即LT(水平触发)和ET(边缘触发)两种,在前者,只要存在着事件就会不断的触发,直到处理完成,而后者只触发一次相同事件或者说只在从非触发到触发两个状态转换的时候儿才触发。这会出现下面一种情况,如果是多线程在处理,一个SOCKET事件到来,数据开始解析,这时候这个SOCKET又来了同样一个

2017-09-14 13:35:30 720

转载 enable_shared_from_this解析

enable_shared_from_this解析       enable_shared_from_this,是一个以其派生类为模板类型实参的基础模板,继承它,this指针就能变成shared_ptr。什么时候该使用enable_shared_from_this模板类       在看下面的例子之前,简单说下使用背景,单有一个类,某个函数需要返回当前对象的指针,我

2017-09-10 15:30:21 257

转载 多线程编程--- __thread关键字

__thread是GCC内置的线程局部存储设施,存取效率可以和全局变量相比。__thread变量每一个线程有一份独立实体,各个线程的值互不干扰。可以用来修饰那些带有全局性且值可能变,但是又不值得用全局变量保护的变量。       __thread使用规则:只能修饰POD类型(类似整型指针的标量,不带自定义的构造、拷贝、赋值、析构的类型,二进制内容可以任意复制memset,memcpy,且内

2017-09-09 15:34:20 293

转载 __builtin_expect 解惑

转自:http://my.oschina.net/moooofly/blog/175019最近看 GLib 的代码遇到这个东东,网上搜索一圈,发现很多人都写过这个,自己今天才研究到,汗颜一下,扫盲一个点,留此记录为证! 首先看一篇最官方的讲解: ====== likely() and unlikely() What are they ?       In

2017-09-09 15:12:50 247

转载 linux常用命令

这篇文章翻译自http://www.thegeekstuff.com/2010/11/50-linux-commands/这些都是一些很常用的命令,这篇文章中每个命令都有一些简单的示例说明它的用法,对于想学习Unix/Linux的人,这些命令基本上都是需要掌握的:同时我也做了一张简易版的图例:这张图片的原图地址在这里1. tar创建一个新的tar文件$

2017-09-08 21:54:05 327

转载 从《王者荣耀》谈游戏的帧同步

转自http://www.sohu.com/?strategyid=00005农药自从上线以来,依靠着强大的产品力以及腾讯的运营能力,在游戏市场上表现可谓是风生水起,根据第三方的调研数据显示,《王者荣耀》渗透率达到22.3%,用户规模达到2.01亿人,每日的日活跃用户(DAU)均值为5412.8万人。 如此可观的数据,令人十分钦佩。当然,作为技术人,更愿意从技术上了解去一些王者

2017-09-08 12:49:50 1586

转载 Linux tcpdump命令详解

简介用简单的话来定义tcpdump,就是:dump the traffic on a network,根据使用者的定义对网络上的数据包进行截获的包分析工具。 tcpdump可以将网络中传送的数据包的“头”完全截获下来提供分析。它支持针对网络层、协议、主机、网络或端口的过滤,并提供and、or、not等逻辑语句来帮助你去掉无用的信息。 实用命令实例默认启动tc

2017-09-07 22:35:02 476

转载 Linux环境下段错误的产生原因及调试方法小结

最近在Linux环境下做C语言项目,由于是在一个原有项目基础之上进行二次开发,而且项目工程庞大复杂,出现了不少问题,其中遇到最多、花费时间最长的问题就是著名的“段错误”(Segmentation Fault)。借此机会系统学习了一下,这里对Linux环境下的段错误做个小结,方便以后同类问题的排查与解决。 1. 段错误是什么 一句话来说,段错误是指访问的内存超出了系统给这个程序所设定

2017-09-07 21:02:18 405

转载 100层楼2个鸡蛋,如何得知鸡蛋能承受几层的撞击

有一栋楼共100层,一个鸡蛋从第N层及以上的楼层落下来会摔破, 在第N层以下的楼层落下不会摔破。给你2个鸡蛋,设计方案找出N,并且保证在最坏情况下, 最小化鸡蛋下落的次数。 我们先假设最坏情况下,鸡蛋下落次数为x,即我们为了找出N,一共用鸡蛋做了x次的实验。 那么,我们第一次应该在哪层楼往下扔鸡蛋呢?先让我们假设第一次是在第y层楼扔的鸡蛋, 如果第一个鸡蛋在第一次扔就碎了,我们就只剩下

2017-09-06 13:32:56 444

转载 Linux 系统错误码及其说明

#define EPERM   1 /* Operation not permitted */#define ENOENT   2 /* No such file or directory */#define ESRCH   3 /* No such process */#define EINTR   4 /* Interrupted system call */#defi

2017-09-05 14:45:28 377

转载 TCP之种种连接异常

TCP之种种连接异常1. connect出错:(1) 若TCP客户端没有收到syn分节的响应,则返回ETIMEOUT错误;调用connect函数时,内核发送一个syn,若无响应则等待6s后再发送一个,若仍然无响应则等待24s后在发送一个,若总共等待75s后仍未收到响应则返回本错误;(2) 若对客户的syn响应是rst,则表明该服务器在我们指定的端口上没有进程在等待与之连接,这是

2017-09-05 13:42:43 673

转载 setsockopt :SO_LINGER 选项设置

setsockopt 设置 SO_LINGER 选项    此选项指定函数close对面向连接的协议如何操作(如TCP)。内核缺省close操作是立即返回,如果有数据残留在套接口缓冲区中则系统将试着将这些数据发送给对方。 SO_LINGER选项用来改变此缺省设置。使用如下结构:struct linger {     int l_onoff; /* 0 = off, noze

2017-09-03 14:02:06 523

转载 当面试官问我们vector扩容机制时,他想问什么?

作者:叶小哈链接:https://www.nowcoder.com/discuss/37140来源:牛客网【常规】 push_back的话,一般来说,都是按两倍来扩容,因为push_back每次都是只插入一个数据 insert的话,因为可以一次插入多个数据,所以要复杂一些。 触发扩容时,如果要插入的数据量比旧容量小,则按两倍扩容;如果要插入的数据量比原来的旧容量还要

2017-09-02 21:48:07 7429 3

转载 简单易懂的秒杀服务

作者:赵翔链接:https://www.nowcoder.com/discuss/37119?type=0&order=0&pos=19&page=1来源:牛客网【题目来自牛客】 代码较多,有注释 [编程|25分] 简单易懂的秒杀服务 实现一个简易的秒杀服务,有3个接口: 1. 添加一个秒杀活动 addActivity(int startTime, int endT

2017-09-02 21:40:00 515

转载 你遇到过哪些高质量的C++面试?

为什么C++的member function template不能是virtual的Templates are all about the compiler generating code at compile-time. Virtual functions are all about the run-time system figuring out which functio

2017-09-02 20:31:44 287

转载 linux中内核的一个不错的参数somaxconn

在linux中,/proc/sys/net/core/somaxconn这个参数,linux中内核的一个不错的参数somaxconn  看下其解析:  对于一个TCP连接,Server与Client需要通过三次握手来建立网络连接.当三次握手成功后,  我们可以看到端口的状态由LISTEN转变为ESTABLISHED,接着这条链路上就可以开始传送数据了.  每一个处于监听(Liste

2017-09-02 14:20:22 317

转载 Linux协议栈accept和syn队列问题

环境:       Client 通过tcp 连接server,server端只是listen,但是不调用accept。通过netstat –ant查看两端的连接情况。server端listen,不调用accept。client一直去connect server。问题:运行一段时间后,为什么server端的ESTABLISHED连接的个数基本是固定的12

2017-09-02 14:20:01 585

转载 listen的参数backlog的意义

listen的参数backlog的意义http://www.cnblogs.com/lit10050528/p/6568357.html实验环境:Ubuntu16.04,内核版本:4.4.0-59-generic 根据man listen得到的解释如下: backlog参数定义了存放pending状态(挂起、护着搁置)的连接的队列的最大长度;如果

2017-09-02 13:55:01 887

转载 UDP中使用connect

UDP协议中是否可以使用connect,.整理一下.1:UDP中可以使用connect系统调用2:UDP中connect操作与TCP中connect操作有着本质区别.TCP中调用connect会引起三次握手,client与server建立连结.UDP中调用connect内核仅仅把对端ip&port记录下来.3:UDP中可以多次调用connect,TCP只能调用一次connect.U

2017-09-01 22:11:57 448

转载 用于并行计算的多线程数据结构,第 2 部分: 设计不使用互斥锁的并发数据结构

https://www.ibm.com/developerworks/cn/aix/library/au-multithreaded_structures2/index.html简介本文是本系列的最后一篇,讨论两个主题:关于实现基于互斥锁的并发链表的设计方法和设计不使用互斥锁的并发数据结构。对于后一个主题,我选择实现一个并发堆栈并解释设计这种数据结构涉及的一些问题。用 C++ 

2017-09-01 14:01:15 284

转载 用于并行计算的多线程数据结构,第 1 部分: 设计并发数据结构

https://www.ibm.com/developerworks/cn/aix/library/au-multithreaded_structures1/index.html简介现在,您的计算机有四个 CPU 核;并行计算 是最时髦的主题,您急于掌握这种技术。但是,并行编程不只是在随便什么函数和方法中使用互斥锁和条件变量。C++ 开发人员必须掌握的关键技能之一是设计并发数据

2017-09-01 14:00:15 275

转载 TCP、UDP绑定同一端口通信的解释

昨日突然讨论起TCP与UDP是否可以在同一端口进行绑定,通信。在印象当中我记得是可以的,今日google了相关资料,确定以及肯定的:TCP、UDP可以绑定同一端口来进行通信:       网络中可以被命名和寻址的通信端口,是操作系统可分配的一种资源。       按照OSI七层协议的描述,传输层与网络层在功能上的最大区别是传输层提供进程通信能力。从这

2017-08-31 20:48:57 562

转载 SO_REUSEADDR和SO_REUSEPORT异同

文章内容来源于stackoverflow上的回答,写的很详细http://stackoverflow.com/questions/14388706/socket-options-so-reuseaddr-and-so-reuseport-how-do-they-differ-do-they-mean-t      虽然不同的系统上socket的实现方式有一些差异,但都来源于对BSD socke

2017-08-31 20:46:20 187

转载 Real-world Concurrency

Concurrency   PDFOctober 24, 2008Volume 6, issue 5Real-world ConcurrencyChances are you won’t actually have to write multithreaded code. But if you do, some key principles will help yo

2017-08-31 15:14:57 518

转载 std::move:强制转化为右值

在C++11中,标准库在中提供了一个有用的函数std::move,这个函数的名字具有迷惑性,因为实际上std::move并不能移动任何东西,它唯一的功能是将一个左值强制转化为右值引用,继而我们可以通过右值引用使用该值,以用于移动语义。从实现上讲,std::move基本等同于一个类型转换:static_cast(lvalue);值得一提的是,被转化的左值,其生命期并没有随着左右值的转化而

2017-08-31 14:44:20 861

转载 GCC __builtin_expect的作用

将流水线引入cpu,可以提高cpu的效率。更简单的说,让cpu可以预先取出下一条指令,可以提供cpu的效率。如下图所示:+--------------------------------|取指令 | 执行指令 | 输出结果+--------------------------------|             | 取指令     | 执行+-----------------

2017-08-21 23:14:48 176

转载 pthread_cond_timewait

linux多线程编程,你还在用sleep么?用pthread_cond_timedwait吧摘要:多线程编程中,线程A循环计算,然后sleep一会接着计算(目的是减少CPU利用率);存在的问题是,如果要关闭程序,通常选择join线程A等待线程A退出,可是我们必须等到sleep函数返回,该线程A才能正常退出,这无疑减慢了程序退出的速度。当然,你可以terminate线程A,但这样

2017-08-21 22:35:21 1973

原创 linux系统调用

2017-08-21 15:05:59 187

转载 在一个int数组里查找出所有这样的数,它大于等于左侧所有数,小于等于右侧所有数。

http://www.chongchonggou.com/g_469012414.html这题很直观的一个算法是,挨个的查找各个元素是否满足条件,算法的复杂度是O(n^2),太过复杂。 但如果我们在从左到右扫描数组的时候,能够维护一个candidate的数组, 该数组的元素满足: 到目前为止,这些元素都大于等于它前面的元素,而小于等于到目前为止扫描到的它右边的所有元素。 容易证明, c

2017-08-21 10:53:52 1341

转载 TCP之非阻塞connect和accept

套接字的默认状态是阻塞的,这就意味着当发出一个不能立即完成的套接字调用时,其进程将被投入睡眠,等待响应操作完成,可能阻塞的套接字调用可分为以下四类:(1) 输入操作,包括read,readv,recv,recvfrom,recvmsg;(2) 输出操作,包括write,writev,send,sendto,sendmsg;(3) 接受外来连接,即accept函数。(

2017-08-20 19:08:00 370

转载 linux accept与epoll惊群问题

1. 结论对于惊群的资料,网上特别多,良莠不齐,也不全面。看的时候,有的资料说,惊群已经解决了,有的资料说,惊群还没解决。。 哪个才是对的?!  一怒之下,在研究各种公开资料的基础上,特意查对了Linux源码,总结了此文。希望对有需要的人略有帮助,希望各位大神轻拍,如有错漏,不吝指教,感激不尽。([email protected])先说结论吧:1. linux多进程accept系统调

2017-08-20 18:00:02 1699 1

转载 TCP面试题(一)之TCP的三次握手和accept()的顺序

经过腾讯的六次技术面的考验,每次基本必问TCP的一些知识。因此,笔者一直都想总结一下,但由于太忙(懒),一直没有去做,趁这会儿有时间,特在此处总结下,希望对大家有帮助。     众所周知,TCP是面向连接的协议,此处的“连接”,只是抽象的连接,即,服务端和客户端进行指定端口的数据传输,由于TCP协议是对端传送数据的,所以,两端在通讯时,就相当于通过抽象的信道,将两个端口进行连接,从而形成抽

2017-08-20 17:57:33 1083

原创 Largest Rectangle in Histogram&&Maximal Rectangle

Given n non-negative integers representing the histogram's bar height where the width of each bar is 1, find the area of largest rectangle in the histogram.Above is a histogram where width o

2017-08-16 22:11:13 237

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

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