- 博客(43)
- 资源 (19)
- 收藏
- 关注
原创 tars源码漫谈第5篇------tc_epoller.h/tc_epoller.cpp(epoll基本操作的封装)
马上就是4月1日了, 愚人节。 但2018年已经过了1/4, 好快, 这不是愚人的。 在tars代码中, 目前还没有看到select/poll的痕迹, 光芒被epoll遮挡了。 我们知道, epoll也就三个常用的api, epoll_create, epoll_ctl, epoll_wait, 且默认是LT模式。 可以思考一下, 为什么比起select...
2018-03-31 23:59:46 6876 2
原创 tars源码漫谈第4篇------tc_socket.h/tc_socket.cpp(socket基本操作的封装)
看优秀的源代码来学socket编程, 这是很好的方式, 来看下tc_socket.h/tc_socket.cpp . TC_Socket_Exception继承了TC_Exception, 没啥好说的。TC_SocketConnect_Exception也不需要说。 创建socket很容易, 这里考虑了tcp和udp:void TC_Socket::createSoc...
2018-03-31 23:55:21 7020 2
原创 tars源码漫谈第3篇------tc_ex.h/tc_ex.cpp(bt不是变态)
tc_ex中有异常类TC_Exception, 类中没有什么太多的功能, 对理解整个tars的作用不大。 尽管如此, 还是来看看如下函数:void TC_Exception::getBacktrace(){ void * array[64]; int nSize = backtrace(array, 64); char ** symbols = backtrac...
2018-03-31 23:42:16 5267 2
原创 tars源码漫谈第2篇------tc_common.h/tc_common.cpp(模板特化实现字符串的相关操作)
tc_common是很common的, 里面就是一些很common的功能。 很多软件开发, 可以直接用这些common代码, 省事,放心。 里面的代码很简单, 来看一个模板特化的代码实例:template <>string TC_Common::tostr<char>(const char &t){ char buf[2]; ...
2018-03-31 23:37:19 6458 1
原创 tars源码漫谈第1篇------tc_loki.h (牛逼哄哄的loki库)
loki库是C++模板大牛Andrei写的, 里面大量运用模板的特性, 而tc_loki.h借用了loki库的部分代码, 形成了一个基本的文件tc_loki.h, 来看看:#ifndef __TC_TYPETRAITS_H#define __TC_TYPETRAITS_H#include <memory>namespace tars{///////////...
2018-03-31 23:25:38 6465 1
原创 tars源码漫谈第0篇------getting to know tars(初识tars)
一个偶然的机会, 遇到了tars开源框架, 感觉很强大,花了1天的时候,把tars跑起来了, 运行良好,遂打算来研究下这个开源框架。 其实, 称不上高大上研究, 说是自我唠嗑更为合适。 据tars官方介绍: Tars这个名字取自于电影"星际穿越"中的机器人,它是基于名字服务使用Tars协议的高性能RPC开发框架,配套一体化的运营管理平台,并通过伸缩调度,实现...
2018-03-31 23:22:17 6987 4
原创 linux上进程打开句柄最大值是1024,但为什么epoll号称能管理上百万句柄呢?
linux上进程打开句柄最大值是1024, 这只是默认情况而已:ubuntu@VM-0-15-ubuntu:~$ ulimit -acore file size (blocks, -c) 0data seg size (kbytes, -d) unlimitedscheduling priority (-e) 0...
2018-03-31 21:34:36 6668 2
原创 C++模板特化之初见
模板具有通用功能,怎么定制呢? 特化即可, 来看个例子:#include <iostream>using namespace std;template<typename T> void square(T a) { cout<< a * a << endl; } template<> v...
2018-03-31 21:30:42 4806 1
原创 吃饭前写个linux select/poll/epoll代码示例玩玩
等朋友吃饭,还有1个小时, 写个select, poll, epoll程序玩玩:include <stdio.h>#include <unistd.h>#include <sys/time.h>int play_select(){ fd_set rfds; FD_ZERO(&rfds); FD_SET(STDIN_FILENO...
2018-03-31 16:14:21 7010 4
原创 秒破gettimeofday使用时出现的溢出问题
最近遇到这样一段有bug的代码:#include<stdio.h>#include<unistd.h>#include <stdint.h>#include <sys/time.h>//微秒uint64_t get_usec(){ struct timeval now; gettimeofday(&now, NU...
2018-03-29 23:05:00 6229 1
原创 sql inner join的本质并非是取交集, 而是(可带条件地)膨胀/扩张
先看看两张表:mysql> select * from black1;+----------+| id |+----------+| zhangsan || lisi || wangwu |+----------+3 rows in set (0.00 sec)mysql> select * from black2;+------...
2018-03-29 23:01:47 11650 3
原创 再来说说为什么stl sort会概率造成core dump
stl sort的不当使用会概率造成core dump, 这个问题已经说过好几次, 如果不防范, 一旦遇到, 比较难查出原因。 来看看有问题的代码:#include <iostream>#include <vector>#include <algorithm>using namespace std;bool compare(i...
2018-03-24 22:42:46 6517 1
原创 sql注入攻击初探与实例分析
来看看表的结构:mysql> show create table zzz;+-------+------------------------------------------------------------------------------------------------------------------------------------------------...
2018-03-24 12:39:36 7131 5
原创 linux和Windows在执行svn checkout(co)时的不同表现
假设svn地址是: https://xxx/yyy/busi 如果在linux上执行svn co https://xxx/yyy/busi, 那么download下来的是busi这个目录整体, 符合心理预期。 然后, 如果在Windows上去checkout, 那么得到的是busi中的内容, 而不包含busi这个文件夹, 颇为让人不悦, 很容易形成一堆散乱的文件, 真是...
2018-03-24 11:53:30 6862 2
原创 linux命令行无故换行的恼人问题
在敲linux命令时, 明明本行远远没有满, 就自动换行了, 而且还覆盖, 颇为恼人。 在网上找了很多地方, 也没有比较好的解决方法, 勉强忍受了一段时间。 最近, 偶然看到一同事也遇到了这个问题, 操作是在SecureCrt界面那里先缩小界面, 然后放大界面, 搞定。 这种东西,还是应该多沟通, 吃饭的时候, 随便聊聊, 就可能解决一个自己无论怎么努力都解决不了的...
2018-03-24 11:39:20 14181 7
原创 C盘满--->保存文件失败--->尝试强制关机--->系统无法重启
C盘满--->保存文件失败--->尝试强制关机--->系统无法重启。 每一步都是教训啊, 幸亏IT维护的同学帮我修好了, 感激。
2018-03-24 11:30:02 5153 2
原创 udp和tcp切换之坑
某服务既支持udp访问, 也支持tcp访问。 某客户端一直是tcp访问, 切换程udp访问后, 一切work正常, 但到高峰时候,就出现故障, 经查, 是buf找过了udp的65507的限制。 某服务原来只支持udp访问, 后来又切成tcp访问, 但没有包完整性判断, 导致业务层收包不完整, 坑。...
2018-03-24 11:17:33 10121 1
原创 常见I/O的访问时间scale
了解I/O的访问时间很有好处。 我们都会把基本的字符串处理做成库或者函数, 供程序调用。你见过把字符串处理单独做成一个网络server吗? 我见过, 也用过。根据实际测试结果, 同城IDC之间, 往返网络迟延一般在10ms以内, 很快了。根据对这个字符串server进行监控,发现往返网络迟延+字符串server的处理时间, 总共才3-5ms. 某次,我把深圳对深圳的...
2018-03-24 11:03:51 5209
原创 动态配置的缓存方案
假设有这样一个问题: 微信有10亿用户,不可能对所有用户的所有操作都打印log(最多只能打印错误log), 现在,微信内部领导经常反馈问题,没有log就不能查问题, 该怎么办? 如果普通用户反馈问题呢, 怎么查? 提示: 1. 白名单 2. 动态配置, 利用缓存 ...
2018-03-21 22:21:56 5024 1
原创 mysql中group by的使用示例------聚合分组
来看这样一个表:mysql> show create table tb_student;+------------+-----------------------------------------------------------------------------------------------------------------------------------...
2018-03-21 22:14:33 5679 1
原创 ctrl+shift+r / ctrl+f5 强制(不使用缓存)刷新google chrome网页
我改了csdn图片后, 一直看到的是旧图片, n天之后, 还是旧图片。猜测应该是用了缓存(且缓存更新逻辑失败, 定是csdn的bug), 用ctrl+shift+r, 或者ctrl+f5, 强制刷新页面后, 图片就更新了, 靠谱。...
2018-03-19 23:34:49 20634 2
原创 看开源代码遇到dup2
看开源代码遇到dup2:#include<stdio.h> #include<signal.h> #include<unistd.h> #include<stdlib.h> #include<fcntl.h> #include<sys/stat.h> int main() { pri...
2018-03-18 15:24:05 4969
转载 socket编程中对sigpipe信号的处理------Good
转载地址:http://blog.csdn.net/myd620/article/details/47806205我写了一个服务器程序,在Linux下测试,然后用C++写了客户端用千万级别数量的短链接进行压力测试. 但是服务器总是莫名退出,没有core文件.最后问题确定为, 对一个对端已经关闭的socket调用两次write, 第二次将会生成SIGPIPE信号, 该信号默认结束进程...
2018-03-17 22:32:37 5691
原创 线程堆栈过小引起内存溢出, 进而导致core dump
之前在某微线程服务中遇到过一次, 线程堆栈设置过小, 导致程序崩溃(core dump), 通过加大线程堆栈的大小的设置解决了问题。 最近又碰到, 简单来看下: #include <stdio.h>#include <stdlib.h>#include <pthread.h>void* threadFunc(void* p) ...
2018-03-15 23:44:48 6985
转载 Linux线程的分离(detached)与结合(joinable)
转载地址:http://www.cnblogs.com/mydomain/archive/2011/08/14/2138454.htm线程的分离与结合 在任何一个时间点上,线程是可结合的(joinable),或者是分离的(detached)。一个可结合的线程能够被其他线程收回其资源和杀死;在被其他线程回收之前,它的存储器资源(如栈)是不释放的。相反,一个分离的线程是不能被其他线程回...
2018-03-15 23:29:39 6361 1
原创 用valgrind调试pthread_create引起的内存泄漏------顺便熟悉下线程的joinable和detached属性
valgrind的安装和调试很简单, 之前博文多次介绍(如果是ubuntu, 直接apt安装更简单, 一条命令搞定)。 最近遇到一个让人颇为难解的内存泄漏问题, 下面我们来抽取核心逻辑, 简单来说下: 先看看这段程序:#include <stdio.h>#include <stdlib.h>#include <unistd.h>#...
2018-03-15 23:19:40 7208 3
原创 mysql的unique key
最近需要用mysql做一个配置, 类似于配置文件, mysql表的列有key,value值, 此时, 可以考虑unique key, 来看看:mysql> show create table yyy;+-------+--------------------------------------------------------------------------------...
2018-03-15 22:59:51 9887 1
原创 mysql: ERROR 1292 (22007): Truncated incorrect DOUBLE value
头晕了, 一个简单的insert操作出现了如下错误:ERROR 1292 (22007): Truncated incorrect DOUBLE value, 怎么回事?mysql> CREATE TABLE `tb_good` ( -> `xid` INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, -&...
2018-03-15 22:51:30 12642
原创 【SVN Working copy is too old (format 10, created by Subversion 1.6)】的原因和解决
下载了一个文件包demo, 准备提交到svn, 结果在svn add的时候, 报错:SVN Working copy is too old (format 10, created by Subversion 1.6 思考了一下, 估计是demo中有.svn文件。 查了一下, 在我的Windows上居然没看到(其实有), 在linux上find了一下, 果然有。 去掉后, s...
2018-03-15 22:41:48 5602
原创 json, xml, probuf, jce, bon与core dump高发区
上次, 解析json的时候, 判断不完整, core了。 上次, 解析xml的时候, 判断不完整, core了。 probuf的core暂时没遇到过。 上次, 解析jce的时候, 参数填错, core了。 最近, 解析bon的时候 , 判断不完整(代码拷贝引起), core了, 耽误至少1小时。 都是什么鸟玩意儿! ...
2018-03-09 22:14:52 5189
原创 log夹逼法定位core, 可能存在问题
以前经常用log夹逼法定位问题, 比如core dump, 但是, 最近在某情况下发现, 如果出现core, 那么core前的log不一定会打印, 这可能是log的缓存问题(没有core的话, log会打印): API_LOG("xxx"); // 假设此处core API_LOG("yyy"); 呵呵哒, 最后是用return的方法, 二分查找查出...
2018-03-09 22:13:07 4958 3
原创 最近实际用了一下recvfrom和sendto,感觉不错
有个需要快速搞起的需求, 选用udp, 实际用了一下recvfrom和sendto, 不用担心粘包, 感觉不错, 顺便看看原型:ssize_t sendto(int sockfd, const void *buf, size_t len, int flags, const struct sockaddr *dest_addr, sockl...
2018-03-09 20:55:47 5823 1
原创 测试udp的丢包和乱序
udp服务端代码:#include <stdio.h>#include <stdlib.h>#include <string.h>#include <sys/socket.h>#include <netinet/in.h>#include <arpa/inet.h>#include <unistd...
2018-03-09 20:54:46 12247 4
原创 udp服务雪崩测试与分析
我们知道, udp socket的接收缓冲区大小是有限的, 可以查到最大值。 以server端为例, 如果server端socket接收缓冲区满了, 那么client端新进的请求不会得到及时处理, 出现丢包。 即使server端的socket的接收缓冲区没有满, 但仍有一些请求在其中排队, 那么从client端发过来的新请求, 也自然会排队, 很可能没有等到server端来得及去re...
2018-03-09 20:51:39 5723 2
原创 带超时时间的sendto和recvfrom(用SO_SNDTIMEO和SO_RCVTIMEO搞起)
在udp中, 可以用SO_SNDTIMEO和SO_RCVTIMEO来实现发送、接收的超时设置, 下面以SO_RCVTIMEO为例来看看:#include <stdio.h>#include <stdlib.h>#include <string.h>#include <sys/socket.h>#include <netin...
2018-03-07 22:24:50 12273 1
原创 两个按钮一个必中100W,一个50%获得1亿,你会选择哪一个?
两个按钮一个必中100W,一个50%获得1亿,你会选择哪一个? 有点意思, 我已经有了自己的答案
2018-03-03 19:32:19 6121 1
原创 用ssh免密登录,但ssh无法登录, 怎么办?
之前登录服务器时,都是采用账号密码方式登录的。最近玩免密登录,看了一下原理,于是就玩起来了。其实也简单,网上到处都是相关操作,但我搞了好几次, ssh免密一直失败,还是提醒ubuntu@localhost's password:, 最后发现是权限的问题, 来看看:ubuntu@VM-0-15-ubuntu:~$ ssh localhostWarning: Permanentl...
2018-03-03 09:05:58 6370 1
原创 The authenticity of host 'localhost (127.0.0.1)' can't be established的处理方法
ssh localhost的时候遇到:ubuntu@VM-0-15-ubuntu:~/taoge/hadoop_begin/hadoop-2.7.5$ ssh localhostThe authenticity of host 'localhost (127.0.0.1)' can't be established. 怎么办?ubuntu@VM-0-15-ubuntu:~/....
2018-03-02 23:21:50 38710 15
原创 为什么执行ping命令时不需要root权限? 怎样让进程具有root权限?
最近遇到一个问题, 需要让普通用户执行程序时具有root权限, 怎么办呢? 我们来看看ping, 它采用了raw socket, 需要root权限, 但是, 我们平常执行root命令的时候, 没有加sudo啊, 来探个究竟:ubuntu@VM-0-15-ubuntu:~/taoge/raw_soc$ ll `which ping`-rwsr-xr-x 1 root root 4...
2018-03-02 23:09:33 8438 2
原创 用raw socket接收udp数据的C/C++代码实战
最近要用到raw socket, 来看下。server.cpp:#include <stdio.h>#include <string.h>#include <unistd.h>#include <sys/socket.h>#include <sys/types.h>#include <linux/if_eth...
2018-03-02 23:05:59 8043 1
linux protobuf安装文件
2016-11-04
linux tree命令的源码
2015-11-01
编译好的openssl库和头文件
2014-12-14
入门数据库sqlite3的最佳实践资料
2014-08-12
在Windows下学习Linux命令
2013-08-08
音频处理软件Gold Wave
2013-07-17
H.264visa软件
2013-07-13
YUVviewer :原始的YUV视频的播放器
2013-06-24
经典的C语言编译器:TC2.0
2013-06-23
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人