[置顶] 从epoll源码分析它的使用

首先来看看epoll_create的真身SYSCALL_DEFINE1(epoll_create, int, size) { if (size <= 0) return -EINVAL; //也就是说参数size根本用不上 return sys_epoll_create1(0); }再来看看epoll_create1的真身SYSCALL_DEFINE1(epoll_c...
阅读(422) 评论(0)

[置顶] 不定参数函数牵扯出来的栈的生长方向和大端小端模式

主题:CPU的架构决定了大端小端模式和栈的生长方向。 前天参加深信服的专场招聘,问到不定参数函数的实现,当时只记得参数入参是从右到左,但是在栈中的存放地址大小当时就想不起来了,现在专门好好整理一下。 首先参数从右到左压栈的方式,这是C语言决定的,比如说Pascal就是从左到右压栈,所以Pascal不支持不定参数函数。比如:printf("%s%d%d\n", s, a, b);格式字符串是确定存...
阅读(196) 评论(0)

[置顶] 线程池的最优大小

计算密集型应用(CPU密集) 顾名思义就是应用需要非常多的CPU计算资源,I/O在很短的时间就可以完成,而 CPU 还有许多运算要处理。 在计算密集型应用中,线程池的大小应该等同于主机中 CPU 的数量。再添加更多线程将会打断请求的处理,因为线程的上下文切换也会延迟响应时间。非阻塞型 IO 应用将会是 CPU 密集型的,因为在请求得到处理的时候没有线程等待时间。...
阅读(531) 评论(0)

[置顶] libevent多线程使用bufferevent的那些事

void do_accept(struct evconnlistener *listener, evutil_socket_t fd, struct sockaddr *sa, int socklen, void *ctx) { //不使用Nagle算法,选择立即发送数据而不是等待产生更多的数据然后再一次发送 int optval = 1; setsockopt(fd, SO...
阅读(1143) 评论(2)

[置顶] recv和send的完整写法

struct evbuffer* input = evbuffer_new();//数据缓冲 void read_data() { char buffer[1024] = { '\0' }; int ret = recv(fd, buffer, 1024, 0); //从接收缓冲取数据成功 if (ret > 0) { evbuffer_add...
阅读(389) 评论(0)

[置顶] MySQL C API预处理函数call存储过程

drop procedure if exists SelectAll; delimiter $ create procedure SelectAll(in TableName char(64)) begin set @sql = 'select * from ?'; prepare stmt from @sql; set @p = TableName; execute...
阅读(370) 评论(0)

[置顶] Linux下高并发socket,单机提供五十万连接

引用《Linux网络编程》 一个完整的Socket描述,五元组,{协议,本地地址,本地端口,远程地址,远程端口} 当我们自己写客户端测试程序来测试我们的服务端程序性能的时候,经常会遇到连接量上不去的问题,大多都是停留在2万左右。如果我们的测试机器有限,要想达到百万连接量的测试,那我们哪里去找50台测试机器了?实际的测试也不可能给50台测试机器。那么根据这个五元组,我们可以做一下文章。首先协议已...
阅读(1035) 评论(0)

Docker背后的内核知识Linux namespace

Docker引擎的基础是Linux容器技术(Linux Containers,LXC)容器有效地将由单个操作系统管理的资源划分到孤立的组中,以便更好地在孤立的组之间平衡有冲突的资源使用需求。具体体现在6个方面: namespaces Mount CLONE_NEWNS 挂载点(文件系统) UTS CLONE_NEWUTS 主机名与域名 IPC CLONE...
阅读(29) 评论(0)

atoi实现

atoi()函数会扫描参数str字符串,跳过前面的空白字符(例如空格,tab缩进等,可以通过isspace()函数来检测),直到遇上数字或正负符号才开始做转换,后续再遇到非数字或字符串结束时(‘\0’)才结束转换,并将前面部分的转换结果返回。#define INT_MAX 0x7fffffff //2147483647 #define INT_MIN 0x80000000 //-214...
阅读(393) 评论(9)

TCP连接的建立与终止

先附上正常连接和正常关闭情况下TCP状态变迁图 两个应用程序同时彼此执行主动打开的情况是可能的,尽管发生的可能性极小。TCP特意设计了可以处理同时打开,对于同时打开它仅建立一条连接而不是两条连接。 两个应用程序同时都执行主动关闭也是可能的,TCP协议也允许这样的同时关闭(simultaneous close) TIME_WAIT 1. TIME_WAIT状态也称为2MSL等待状态...
阅读(93) 评论(0)

CentOS 7安装MySQL 5.7.18

1. MySQL下载地址,因为我用的CentOS 7,所以 我这里下载的是mysql-5.7.18-1.el7.x86_64.rpm-bundle.tar 2. 解压 3. 安装顺序rpm -ivh mysql-community-common-5.7.18-1.el7.x86_64.rpm mysql-community-libs-5.7.18-1.el7.x86_64.rpm(...
阅读(2413) 评论(2)

memcmp比较两个struct是否相等

还是深信服的题目,连续两轮技术面试,都反复问到这个问题。虽然说是考察内存对齐的点,但是被我自己聪明反被聪明误了。比如:struct MyStruct { char a; int b; }; MyStruct A, B; memcmp(&A, &B, sizeof(MyStruct));A和B是否可以通过memcmp来判断是否相等。我当时脱口而出,虽然要内存对齐,但是a后面会补三个’\...
阅读(192) 评论(0)

linux下strncasecmp的实现

看来strcpy的实现确实是太low了,腾讯的笔试字符串知识点考察就变了。 linux下不区分大小写的字符串比较函数原型: int strncasecmp(const char *s1, const char *s2, register size_t n); 返回值:如果相等返回0     如果s1>s2,返回正整数     如果s1<s2,返回负整数static const unsign...
阅读(140) 评论(1)

#define MAX(a, b, ……)

前天去腾讯的专场招聘会霸面,在会场招聘宣传影片很温馨,一副海纳百川的招聘态度。可惜了就算是腾讯的HR也避免不了不专业,IT类的招聘专员还是最好有计算机专业背景的来筛选简历比较靠谱。也对,毕竟这个HR不专业,所以她的态度也是差得可怜。说正题,笔试题目。 用宏定义MAX(a,b)求两个数最大值:#define MAX(a,b) a>b?a:b用宏定义MAX(a,b,c)求三个数最大值:#define...
阅读(69) 评论(0)

my.cnf参数配置:InnoDB引擎性能优化

在网上看了无数的my.cnf的配置,大多数提到的配置无外乎这几个: 1. innodb_buffer_pool_size 2. innodb_log_file_size 3. innodb_log_buffer_size 4. innodb_flush_log_at_trx_commit 然后自己写了两个例子,一个单线程的,一个多线程的来通过改变配置参数来测试是否提高了性能。结果是只有in...
阅读(58) 评论(0)

MySQL prepare statement速度的测试思考

最近一直纠结于MySQL预处理API和普通API的速度问题,网上的一致说法都是主张使用预处理API,因为它的SQL语句会提前预编译,后续只要传送参数到MySQL,减少多次调用时编译需要的时间和多次调用需要再次传输SQL的数据量。但是基于这个原理,其实应用场景就是同一条SQL语句需要多次执行的情况下。假如现在的应用场景,每次来了数据,你要通过自己的机制重新计算分表的表名的话,那就必须每次重新初始化st...
阅读(80) 评论(0)

MySQL存全角字符和半角字符的区别

很不巧公司内测IM的时候又遇到MYSQL_DATA_TRUNCATED错误,日志记录还是在mysql_stmt_fetch调用的时候出现的。鉴于之前的经验,应该是给定的结果集绑定区域长度不够造成的,反复检查了好多遍没发现问题。我在代码中都是对应的关系,比如char(20),我代码中就会定义char buffer[20]数组来存储。看起来如此的正确完美。后面没办法只好打印每一行的数据,找到报错的那一行...
阅读(435) 评论(0)

count(), group by, order by

最近做IM的时候遇到一个问题,同时用到了这三个关键字。就是查询一个人的离线消息详情,我们服务端返回给客户端显示的这个详情包括了三个内容,第一个要求列出离线这段时间哪些人或者群给你发了消息,第二个这其中的某个人或者群发了多少条离线消息,第三个拿出最新的一条显示出来。很明显,group by分组哪些人或者群给你发了离线消息,count()得到离线消息数量,order by时间来排序拿出最新的消息。sel...
阅读(653) 评论(6)

C++还是Java

最近一直在思考这个问题,在Java大行其道的季节,我怎么还能有自信坚信着我们C/C++走Linux后台服务器开发必定是日不落的道路。然后自己找了很多大牛的回答: https://www.zhihu.com/question/30918223 https://www.zhihu.com/question/51284083 https://www.zhihu.com/question/205410...
阅读(119) 评论(0)

MySQL连接池的实现

class connect_pool { public: connect_pool(); ~connect_pool();public: MYSQL *get_connection(); int free_connection(MYSQL *mysql);private: int init(string db_server_ip, string user, s...
阅读(54) 评论(0)

MYSQL_DATA_TRUNCATED

按照MySQL手册的说法,除非用mysql_options()启用了截短通报功能,mysql_stmt_fetch()才会返回MYSQL_DATA_TRUNCATED这个错误。于是我调用mysql_stmt_fetch()的方法:int ret = mysql_stmt_fetch(m_stmt); if (ret == 0) { return 0; } else if (ret == MY...
阅读(185) 评论(0)

MySQL不重复插入,记录不存在则插入,存在则更新

SQL UNIQUE 约束 UNIQUE 约束唯一标识数据库表中的每条记录。 UNIQUE 和 PRIMARY KEY 约束均为列或列集合提供了唯一性的保证。 PRIMARY KEY 拥有自动定义的 UNIQUE 约束。 请注意,每个表可以有多个 UNIQUE 约束,但是每个表只能有一个 PRIMARY KEY 约束。 下面的 SQL 在 “Persons” 表创建时在 “Id_P” 列创...
阅读(1482) 评论(0)

linux环境变量LD_LIBRARY_PATH

在登录Linux时要执行文件的过程如下: 在刚登录Linux时,首先启动 /etc/profile 文件,然后再依次启动用户目录下的 ~/.bash_profile、 ~/.bash_login、~/.profile文件。如果 ~/.bash_profile文件存在的话,一般还会执行 ~/.bashrc文件。因为在 ~/.bash_profile文件中一般会有下面的代码:if [ -f ~/.ba...
阅读(85) 评论(0)

windows条件变量

在我的印象中,一直以为windows的多线程同步机制,也就是同步对象只有四个,临界区,互斥,事件,信号量。而linux的同步对象也是四个,互斥,条件变量,读写锁,信号量。打开windows的同步对象头文件synchapi.h才发现,windows其实也有条件变量和读写锁。而这里我要重点说的是条件变量。在我之前的文章《Linux互斥锁和条件变量》说过了linux下通过互斥锁和条件变量实现生产者消费者模...
阅读(91) 评论(0)
37条 共2页1 2 下一页 尾页
    个人资料
    • 访问:15737次
    • 积分:531
    • 等级:
    • 排名:千里之外
    • 原创:37篇
    • 转载:0篇
    • 译文:0篇
    • 评论:21条
    联系方式

    公司:深信服科技股份有限公司


    所在地:中国-广东省-深圳市


    QQ交流群:165650716


    文章分类
    最新评论