- 博客(48)
- 收藏
- 关注
原创 Janus: P2P打洞失败
Janus: P2P打洞失败日志错误如下[7018515412292631] Creating ICE state check timer with ID 6[WARN] [7018515412292631] ICE failed for component 1 in stream 1, but we're still waiting for some info so we don't care... (trickle pending, answer received, alert not set
2021-03-05 17:18:39
1388
2
原创 【protobuf】关于数字alloc边界的小技巧
先看一段小代码::std::string* errmsg_;::google::protobuf::int32 errcode_;mutable int _cached_size_;::google::protobuf::uint32 _has_bits_[(2 + 31) / 32];其中(2+31) / 32是比较有意思的,我们经常会写如下代码:s = (N / S) + (N % S...
2018-03-01 15:11:16
332
原创 【brpc】C++关于private的一则hack
brpc是百度开源的RPC框架,github:https://github.com/brpc/brpc,初步看了下描述:performance据其官方测试数据(本人未亲测),基本上比其他内外部RPC框架都要优秀,但我个人比较感兴趣的还是对各种protocol的自适应支持,提供灵活扩展接口,这个不错,源码只是大概翻了下,还没细看!关于pb协议头文件有个hack小技巧,代码如下:// Since kD...
2018-02-28 20:44:08
612
原创 Paxos异常情况总结
本文列举了Paxos算法在各阶段的异常,以及处理流程,异常主要限制在Paxos算法的层面,较少涉及具体工程上的实现(除了个别点提一下),因为实际工程实现需要处理的异常点太多了,部分已经超出了Paxos算法的范畴,本文不做讨论,不足之处欢迎批评指正。
2017-12-19 19:32:09
1133
原创 Paxos算法学习问题汇总
Paxos算法学习过程中,困扰我的问题汇总,你们也可能遇到过,总结下,希望能给后来的学习者提供帮助,我的理解也未必全部正确,欢迎批评指正,共同探讨!
2017-12-06 10:46:40
1375
原创 Jenkins插件升级后丢失权限,版本1.646
升级了SVN插件,重启后登录,发现admin没有权限了,重试了几次都是相同的问题,查看config.xml发现用户权限已经没有了,手动加上,重启,恢复,应该是Jenkin是bug
2016-01-30 19:05:34
1650
原创 php安装mysql扩展,版本不一致的解决办法
php安装mysql扩展时出现如下错误:NOTICE: PHP message: PHP Warning: PHP Startup: mysql: Unable to initialize moduleModule compiled with module API=20121212PHP compiled with module API=20131226These options
2015-08-09 08:46:45
5177
原创 排序应该在数据库中还是应用程序中?
看了一篇文章,谈到排序的问题,在平时的项目中,排序非常常见,经常需要用到,排序可以在不同的地方处理,比如程序内部,也可以是数据库中,现简单写下:在MySQL数据库中排序的条件及优势:条件首先得是,你的数据源是数据库形式的1.MySQL可以创建索引,排序速度快2.数据量较大,但是排序结果仅需要其中某个小子集,比如top n,这样数据库会更快3.复杂排序条件,比如按照几个字段进行排
2015-02-20 11:34:28
4169
1
转载 在线数据迁移经验:如何为正在飞行的飞机更换引擎
在线数据迁移,是指将正在提供线上服务的数据,从一个地方迁移到另一个地方,整个迁移过程中要求不停机,服务不受影响。根据数据所处层次,可以分为cache迁移和存储迁移;根据数据迁移前后的变化,又可以分为平移和转移。平移是指迁移前后数据组织形式不变,比如Mysql从1个实例扩展为4个实例,Redis从4个端口扩展到16个端口,HBase从20台机器扩展到 30台机器等等。如果在最初的
2015-02-17 16:52:32
718
原创 STL学习之heap & priority queue
heap,又称堆,在数据结构中,我们接触过最大堆max-heap,最小堆min-heap,这也都是heap,优先队列(priority queue)实际上也是heap来实现的。Binary Heap是一种complete binary tree(完全二叉树),除了最底层叶子节点外,其他点都是满的,最底层叶子节点之间也不能有间隙,如下图就是一棵完全二叉树
2014-04-18 15:58:38
1778
原创 STL学习之stack & queue
stack是一种先进后出(FILO,First In Last Out)的数据结构,它只有一个出口,只允许在最顶端操作,不允许遍历。
2014-04-18 15:56:03
572
原创 STL学习之slist
前面有学习STL list(double linked list),slist是一个单项链表(single linked list)。slist和list的主要差别是slist是单向的Forward Iterator,list是双向迭代器。slist和list一样,插入不会导致原有的迭代器失效。节点的数据结构
2014-04-18 09:59:39
885
原创 STL学习之list
list是STL的链表,list的优势:1.每次插入或删除一个元素,就配置或释放一个元素空间,精准无浪费2.对于任何一个位置的插入或删除,时间复杂度都是常数时间。list实际上是一个双向链表(SGI STL还有一个slist,单向链表),链表节点如下:
2014-04-18 09:50:54
556
原创 STL学习之vector
常见的数据结构主要有:array(数组),list(链表),tree(树),stack(栈),queue(队列,发音[kju:]),hash_table(散列表),set(集合),map(映射表)等。这些数据结构通常分为序列式(sequence)和关联式(associative)。具体分类见下图:
2014-04-18 09:46:05
519
原创 C++编译器越界检查机制
前天帮同事看了一个程序,现象是这样的,程序在执行完所有代码之后,莫名其妙的core(段错误),当时很忙,就简单的看了下,没有直接使用指针之类的代码,扫了一下关键的地方,也没有看到明显的问题。 当时代码的重点在管道通信上,就重点看了管道的问题,没有仔细阅读每个地方,找了大概有15分钟竟然没找到,这大大激发了我的好奇心,于是我决定仔细看看所有的代码,结果一下子就发现了问题,原来在程序的开始的
2014-04-02 14:59:53
7405
原创 C++各种智能指针的用法及区别
在C++编程中,智能指针绝对是很强大的用法,boost库里把这些指针用的出神入化,它可以简化程序员写代码的复杂度,不用去考虑代码分支路径导致的遗漏delete语法,也无须担心冗余delete导致的double free问题。但是,便利性也要求程序猿熟悉各种指针的用法,避免误用,反而带来其他问题。下面简要列下常用的智能指针,及其用法:1.scoped_ptr:这是最常用的智能指针,当你new一块
2014-03-30 17:40:47
4257
转载 linux gcc 编译时头文件和库文件搜索路径
一、头文件 gcc 在编译时寻找所需要的头文件 : ※搜寻会从-I开始 ※然后找gcc的环境变量 C_INCLUDE_PATH,CPLUS_INCLUDE_PATH,OBJC_INCLUDE_PATH ※再找内定目录/usr/include /usr/local/include/usr/lib/gcc-lib/i386-linux/
2013-10-13 16:07:46
671
原创 解决找不到动态库libpthread.so的问题
在新SUSE开发机上编译时出现下面的错误/usr/lib64/gcc/x86_64-suse-linux/4.7/../../../../x86_64-suse-linux/bin/ld: note:'sem_close@@GLIBC_2.2.5' is defined in DSO /lib64/libpthread.so.0 so try adding it to the linker
2013-10-13 15:52:41
29649
转载 TCP与UDP的不同接包处理方式
1.UDP发包的问题问:udp 发送两次数据,第一次 100字节 ,第二次200字节, 接包方一次recvfrom( 1000 ), 收到是 100,还是200,还是300?答:UDP是数据报文协议,是以数据包方式,所以每次可以接收100,200,在理想情况下,第一次是无论recvfrom多少都是接收到100。当然,可能由于网络原因,第二个包先到的话,有可能是200了。对可能会由于网络原因
2013-10-13 15:10:39
956
转载 关闭word 2010时每次都提示:所做更改会影响共用模板Normal.dotm
最近安装了Office 2010版本,但是发现个问题,每次在关闭word 2010时,都会提示所做更改会影响共用模板Normal.dotm ……确实是烦恼,每次都需要点击是否保存,于是我在仔细研究了下Office 2010的使用之后,终于发现问题所在,其实只要把3个加载项去掉就可以了。操作步骤如下:1.、打开Word选项(I) / 加载项 / 转到(G).../2、
2013-09-16 13:04:30
21599
原创 Linux内核参数的优化
默认的Linux的内核参数是比较通用的,可以根据业务的场景,进行优化内核参数配置文件 /etc/sysctl.conf# 进程可以同时打卡的最大句柄数,限制最大并发连接数fs.file-max = 999999# 允许TIME_WAIT状态的socket重新用于新的tcp连接net.ipv4.tcp_tw_reuse = 1# 当keepalive启用时,tcp发送keep
2013-09-15 19:59:58
1636
原创 关于C++中的函数返回局部string的问题
函数返回局部变量string的时候能不能被引用?前两天被同事突然问道这个问题,见到string一时糊涂了,最初学习C++的时候,就说不能引用局部变量,现在怎么糊涂了呢?呵呵 今天想了下,原来是被函数外表蒙蔽了,看个例子std::string TestStringReference(){ std::string strTest = "This is a test.";
2013-09-08 22:58:31
10062
1
原创 SUSE linux下应用安装
在SUSE环境下(非Desktop,TextMode模式server)安装各种应用的方法。一、去下面的网址下载suse对应的rpm包,下载之后rpm -ivh XXX.rpm 安装就可以了 http://www.rpmfind.net/linux/rpm2html/search.php?query=&submit=Search+...&system=&arch=二、
2013-09-08 20:43:35
1278
原创 C++校验日期串合法性
在做项目接口时,需要校验日期串的合法性,就写了这个,仅够初步使用代码根据业务做了些限制,可去掉#include #include #include #include #include std::string trim(const std::string& str){ std::string::size_type pos = str.find_first_not_of(
2013-08-24 11:54:01
5554
原创 pthread中的stack size的设置
在使用pthread的函数时,若要设置线程栈空间大小,需要调用pthread_attr_setstacksize(&attr,stack_size);关于stack_size变量的取值,是有限制的,ulimit -a会看到栈默认空间为8192K,若程序不设置则采用此值作为默认值,最小空间大小定义在limits.h头文件中PTHREAD_STACK_MIN,一般为16384字节
2013-07-19 09:23:55
2901
转载 注意 c++ vector中的erase()
今天帮同事解决了一个程序异常挂掉的问题,最后定位到是在vector删除元素之后,再把该对象传递给下一个app时下一个app莫名其妙的挂了。认真检查了代码发现是这里的问题。网上有个帖子,讲的挺细致的,特转载写。#include #include using namespace std; int main(){ vector arr; arr.push_back(6);
2013-05-29 19:16:10
5509
5
原创 MySQL批量生成复制表SQL语句
目标为每个表生成0-X个后缀,便于在做一些分表存储时表创建,python脚本如下:#!/usr/bin/python# Author: pecywang# 2013-05-21import MySQLdbTABLES = ("t_a_", "t_b_");conn = MySQLdb.connect(host='10.152.23.179', user='r
2013-05-21 21:00:23
2567
转载 Visual Studio 2010的Productivity Power Tool扩展
一、功能列表 进入Tools——Options乐意看到Productivity Power Tools选项,在此列出了插件所拥有的14个功能,包括:Align Assignments Automatic Brace Completion Colorized Parameter Help Column Guides Ctrl + Click Go To Definition Docum
2013-03-25 11:12:28
752
原创 VS2010 字体
最近由于项目需求,不得不从vs2005升级到了2010(现在都有2012了,呵呵),2010的整体界面比05好看些,功能上看起来还是一致的奇怪是竟然找不到我最喜欢的System字体了,在控制面板里-字体里,System确实是显示的,不明原因,在网上找了下,发现有另外一种字体和System是差不多的Fixedsys Excelsior,就下载安装了地址:http://www.fixeds
2013-03-18 10:19:19
883
原创 谈单进程(单线程)与单进程(多线程)程序设计
本文单进程指单进程(单线程)模式;单线程也指单进程单线程;多线程指单进程(多线程模式),下同。 最近在B部门做项目,用到的平台框架都是基于单进程模式的,在以前的A部门做过的项目都是多线程模式的,在使用的过程中,也思考了一些问题,引发了对这两种类型的线程的对比和自己的一些看法(仅是个人观点)。先讲下单进程模式和多线程模式的优劣:1.单进程开发简单;多线程开发复杂2.单进程在处理高
2013-03-17 11:20:54
6938
原创 Google Protobuf的字段
1.基本字段类型protobuf字段也可以是一个enum或另一个message2.字段的限定标志 required 必须的字段(尽量少使用required) optional 可有可无 repeated 可出现任意次3.message定义格式 message MyType { 标志 类型 key, } key在1和229-1之间, 1 -
2013-03-07 16:45:04
7896
1
原创 常用Linux Shell命令集锦
下面是我平时在使用是总结的几个比较有用的shell命令,总结如下1.find命令 find命令比较强大,不仅可以快速定位到查找的文件,还可以对匹配的文件做处理,例如: 删除3天前的匹配文件:find ./ -name "pettern" -type f -mtime +3 -exec rm {} \; 找出文件行里包含某指定串:find ./ -name "*.py"
2013-03-04 12:39:18
522
原创 C#获取跳转页面的状态码
最近在使用google的rietveld CodeReview服务,使用upload.py上传,感觉使用起来挺麻烦的,就开发了一个C#的助手,其中的一个步骤是要登录rietveld,客户端发送一个POST请求,成功登录服务端返回302 FOUND,在实现的过程中却怎么也得不到,最后定位到问题是存在于request.AllowAutoRedirect = false;这里,因为默认是true
2013-03-01 17:33:59
1555
原创 C++的语义类型和弱引用
C++中存在两种语义:值语义(value sematics)和对象语义(object sematic),对象语义也可以叫做引用语义(reference sematics)。值语义,指的是对象的拷贝与原对象无关,就像拷贝int一样,C++的常用类型数据等都是值语义。对象语义,指的是面向对象意义下的对象,是禁止拷贝的。在设计一个类的时候该类是否可以被拷贝(即具备拷贝
2013-02-05 11:18:29
1824
翻译 Nginx and Memcached,性能提升400%
如果架构,性能,可扩展性是你在设计网站时考虑最多的,那么Ngix("engine x")就可以派上用场了。它是由俄罗斯的rambler.ru网站开发的,一个高性能的HTTP和反向代理服务器,以高稳定性,高性能和易用性而著称。它有很牛X的记录,大量的模块和非常活跃的开发群,都使他赢得了越来越多的使用者。Memcached模块 - 4倍速加速器Memcached是每个web开发者的宠儿
2013-02-04 15:33:28
3250
原创 C++ STL bitset的使用
bitset是STL转为存储二进制位0|1设计的模版类头文件:#include 构造函数:bitsetn> b;b有n位,每位都为0bitsetn>b(u);b是unsigned long型u的一个副本bitsetn>b(s);b是string对象s中含有的位串的副本
2013-02-04 10:48:35
1000
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人