- 博客(37)
- 资源 (5)
- 收藏
- 关注
原创 一次使用thrift遇到的客户端close_wait的问题
如上图,客户端close_wait,肯定是因为服务端发起了关闭操作。服务端close,但是客户端没有close,所以客户端进入了close_wait的状态。这种情况一般出现在:提前创建了连接池,如果池子中的某些(或者全部)连接一段时间没有active,就会出现这种情况。这个时候如果再有读写操作,thrift则抛异常。解决方案:1.服务端修改idle_timeout的时间,设置的长...
2020-01-19 17:10:49
1166
原创 泄漏崩溃问题调查(三):崩溃
heap-buffer-overflow(越界访问)uint32_t val[10] = {0};val[10] = 10;一版造成这种问题的原因是访问了没有申请的内存,栈上的,或者堆上的。 heap-use-after-free(使用被释放的资源)多线程:=======================================================...
2018-08-22 14:43:19
609
原创 Strict Weak Ordering(严格弱顺序)
一般重载比较运算符时会涉及到这个名词。常见的就是想用自定义结构题作为map或者multimap的key,map是个利用红黑树的结构实现自排序(插入完成即排序完成),排序就要有比较,所以如果map的key是自定义结构体S,那就要重载S的小于运算符。bool operator const S& s) const {......}这个时候Strict Weak Ordering的概念就出来了:对于你重载
2018-01-19 10:37:57
2014
转载 随便说说字符集和编码
快下班时,爱问问题的小朋友Nico又问了一个问题: "sqlserver里面有char和nchar,那个n据说是指unicode的数据,这个是什么意思。" 并不是所有简单的问题都很容易回答,就像这个问题一样。于是我答应专门写一篇BLOG来从头讲讲编码的故事。那么就让我们找个草堆坐下,先抽口烟,看看夜晚天空上的银河,然后想一想要从哪里开始讲起。嗯,也许这样开始比较好……
2017-11-14 12:07:47
352
原创 对比快速排序,理解归并排序
快速排序:先治后分归并排序:先分后治快排的治:将给定的元素调整到适当的位置,是的这个元素的左边都比它小,右边都比它大。归并的治:合并两个有序的数组。
2017-09-22 10:58:50
2169
原创 “挖坑填坑”理解快速排序
快速排序的基本思路:找一个基准元素,对数组进行调整,调整的标准是,这个基准元素的左边存放的都是比这个元素小的,右边都是比这个元素大的。然后分而治之,对左右两边的子数组利用同样的规则调整,调整到每一个子数组中都只有一个元素时结束。 基本思想很简单,主要是理解如何在确定基准元素之后,对数组(子数组)进行调整,下面举个例子,用“挖坑填坑”(拆了东墙补西墙)的比喻来理解一次调整的过程。一个无
2017-09-21 21:27:01
1829
原创 ssh免密码远程登录
A是主机,B是服务器(IP:192.168.10.11,user:zhangwq)1.在A上运行:ssh-keygen -t rsa 会在当前用户目录下的~/.ssh/目录下生成id_rsa和id_rsa.pub两个文件2.将id_ras.pub拷贝到服务器的~/.ssh/目录下,并重命名:scp ~/.ssh/id_rsa.pub zhangwq@192.168.10.11:~
2017-09-06 11:16:26
443
原创 动态链接时出现undefined symbol错误
有时候编译生成程序时,会出现undefined symbol:XXX 错误,比如编译python的sqlite模块时,出现这样的错误可以使用nm命令,查看依赖的库是否含有这个XXX,以上面的编译python的sqlite模块为例,python编译sqlite模块时依赖本地的sqlite,比如依赖/usr/local/lib/libsqlite3.so这个库,出现了undefined sym
2017-08-30 17:44:40
12383
原创 编译python时使用定制的sqlite动态库
Sqlite是很好的数据库,如果需要编译一个定制版的sqlite(修改sqlite源文件中的一些内容,加入生成的动态库的名称为libxsqlite.so,放在usr/local/lib目录下),然后再Python中使用,则需要在安装python时改动一下setup.py文件找到sqlite_inc_paths,加入修改后的sqlite头文件的目录:1.sqlite_inc_paths
2017-08-30 17:26:05
1440
原创 postgresql去掉字符串空白符以及首尾空格
--去除空白符select regexp_replace(' a s d ', E'\\s+', ' ', 'g')--去除首空格select regexp_replace(' a b d ',E'(^\\s*)','','g') --去除尾空格select regexp_replace(' a b d ',E'(\\s*$)','','g') --去除首尾
2017-05-25 18:11:30
20380
5
转载 switch...case和if...else效率比较
1.switch...case结构的汇编表示写入switch...case结构的代码:int fun(char c) { char res; switch(c) { case 'a': res='a'; break; case 'e': res='e'; break; case 'i':
2016-07-31 17:00:41
701
原创 用进制思想解决组合问题
先对我们要解决的问题进行一个描述:如上图所示,原来有个字符串”123”,现在有个对应关系,可以把1换成”A”,”a”,”甲”,可以把2换成”B”,”b”,可以把3换成”C”,那么,有多少种组合字符串的方式呢(注意顺序不变),我们可以计算得到4*3*2 = 24种组合方式(包括原字符串”123”在内)。我们用0~23这24个数字来给所有
2016-07-30 20:51:36
715
原创 B-Tree的介绍与数据库中应用分析
在一个有100万条记录的数据表中,利用二分查找定位一条记录,大概需要20次操作,理论上也就是20次磁盘读操作,需要花费大概0.2秒,有没有办法将磁盘操作次数降到3次呢?下面我们就介绍一下如何将20次的操作降到3次。
2016-05-12 12:21:24
2106
原创 python操作cfg配置文件
*.cfg文件一般是程序运行的配置文件,python为读写常见配置文件提供了一个ConfigParser模块,所以在python中解析配置文件相当简单,下面就举例说明一下具体的操作方法。 写文件代码:# -* - coding: UTF-8 -* -import osimport ConfigParser CONFIG_FILE = "Confi
2016-02-24 11:50:38
22124
转载 汉字编码:区位码、国标码、机内码
每个汉字有个二进制编码,叫汉字国标码。在我国汉字代码标准GB2312-80中有6763个常用汉字规定了二进制编码。每个汉字使用2个字节。区位码GB2312-80 GB2312将代码表分为94个区,对应第一字节;每个区94个位,对应第二字节,两个字节的值分别为区号值和位号值加32(20H),因此也称为区位码。01-09区为符号、数字区,16-87区为汉字区,10-15区、88
2016-02-23 15:44:06
5104
原创 Qt4.8.1学习笔记1—QTreeWidget控件的使用
Qt的介绍以及安装这里就记录了,先说一下QtGUI的基础“信号(SIGNAL)与槽(SLOT)”。其实信号与槽的概念很好理解,跟MFC的消息与响应机制类似,只不过MFC的消息响应机制的实现是利用回调函数,而Qt更加的简单。如下就可以将一个信号与一个槽绑定,槽其实就是个响应函数:connect(delButton, SIGNAL(clicked()), this, SLOT(
2015-11-04 18:07:21
2520
转载 Qt中的moc_文件
前面我们说过,Qt 不是使用的“标准的” C++ 语言,而是对其进行了一定程度的“扩展”。这里我们从Qt新增加的关键字就可以看出来:signals、slots 或者 emit。所以有人会觉得 Qt 的程序编译速度慢,这主要是因为在 Qt 将源代码交给标准 C++ 编译器,如 gcc 之前,需要事先将这些扩展的语法去除掉。完成这一操作的就是 moc。moc 全称是 Meta-Object
2015-10-27 16:47:36
1044
原创 python链接postgresql数据库
python链接数据库使用了psycopg2这个模块,这个模块的安装可以到其官网上下载安装:http://www.stickpeople.com/projects/python/win-psycopg/ 这里是windows下的下载安装链接,请选择跟你安装的python的版本一致的版本下载安装,cmd下输入:python -V,查看本地python版本号。 安装完毕以后就可以
2015-10-23 20:34:51
2637
原创 Python常用内建函数(string&&list)
String内建函数string.capitalize() 把字符串的第一个字符大写 string.center(width) 返回一个原字符串居中,并使用空格填充至长度 width 的新字符串 string.count(str, beg=0, end=len(string)) 返回 str在
2015-10-19 11:08:43
803
原创 非递归学习树结构(六)--RB-Tree(红黑树)
终于深入的理解并用代码一步一步实现了红黑树。Linux内核的进程调度和内存管理,STL库的map容器的实现都使用了红黑树,这是一种效率很高的二叉搜索树,效率基本上满足log(n),它与AVL树有什么区别呢?学习了AVL树之后,如果你觉得关于二叉搜索树的学习就结束了,那你就错了,因为,还有一个树,红黑树,红黑树学习完之后,二叉搜索树基本上就告一段落了,还有一些二叉搜索树的
2015-10-15 21:54:55
1478
转载 大整数乘法(高精度)
对于超过20位的数的乘法问题,我们无法使用普通的方法!!!即使是longlong也会超出范围的!像这样的数,我们只能使用高精度的知识利用数组的方法解决问题!对于高精度乘法的问题,其实思路和高精度加法的思路差不多,都需要使用字符数组来存放每次算完的结果! 1 2 3 * 4 5 6 _______________
2015-10-10 09:47:05
584
原创 非递归学习树结构(五)--AVL(自平衡二叉排序)树
BST树存在退化成线性链表的可能,查找的时间复杂度变成(O(n)),造成这种结果的原因就是BST树已经严重失衡,所以改善的方向就是如何在插入和删除的过程中不会让树失衡,这就需要插入和删除的过程中进行适当的旋转操作,旋转操作本身比较简单,但是何时何地进行什么样的旋转,才是难点。本文以非递归的方式来实现插入和删除的过程。
2015-10-09 17:50:24
1301
原创 非递归学习树结构(四)--BST(二叉排序)树
二叉查找树,排序二叉树(中序遍历结果是有序序列),二叉搜索树其实说的都是BST树,对于二叉查找树中的每一个非叶子节点,其左子节点的值比当前结点的值小,其右子节点的值比当前结点的值大。二叉查找树有个特点,那就是对BST树进行中根遍历,得到的结果一定是个有序序列,如果是:左值 根值 <右值,得到的就是从小到大的序列。其实原因很简单,中根遍历的书序是左中右,而BST树
2015-09-22 21:08:47
885
原创 非递归学习树结构(三)--深广优先搜
深度优先搜索和广度优先搜索是树形结构中常用的两种搜索遍历方式,其实更多的是用在图中的,深度优先搜索可以用来判断有向图中是否存在环,广度优先搜索就更有用了,常用的路径搜索算法一般都是建立在广度优先搜索的基础上,如dijkstra(迪杰斯特拉)算法,A*算法等,感觉两者的唯一区别就是A*算法中在计算路径权重时加入了一个估价函数,来改变广搜的方向,让搜索向目的地方伸展,减少无用搜索的数量,所
2015-09-18 18:18:25
764
原创 非递归学习树结构(一)--栈和队列的实现
在开始学习树结构之前,有必要先学习一下栈和队列的知识,我们知道,在树结构中最让人头疼的就是各种递归,据传言,所有的递归都可以用栈来实现,因为递归的过程其实就是进栈出栈的过程,因此,可以把递归改写成对栈的迭代操作,对于是递归好还是迭代好这样的讨论我们就不复述了,没有最好,只有最合适。栈和队列是学习树结构之前应该掌握的知识,我们知道树有前中后序遍历,深广优先搜索,如果树的遍历中使用递归方法,则涉及
2015-09-16 20:17:16
1212
原创 像VS/VC一样调试python调用的C++共享库
前面介绍了使用GDB调试python调用的c++共享库,但是对于习惯了IED调试的同学来说真的很不习惯,那么下面就介绍一种使用IED调试python调用的C++共享库的方法。代码还是前面的代码代码链接:测试用代码下面就话不多说,直接贴图假设你已经使用code::blocks创建好了一个动态库
2015-08-06 11:46:36
2251
原创 使用GDB调试python调用的C++共享库
最近在python框架下开发,一些性能要求高的处理用C++写,然后编成共享库在python程序中调用,于是问题来了,怎么对python的共享库进行调试呢?既然是在Linux下,那么首先想到的肯定是用GDB进行调试,那么下面先介绍一下如何使用GDB调试python调用的C++共享库,再介绍一下如何使用GDB+Code::Blocks对python调用的C++共享库进行可视化调试。
2015-08-05 16:35:55
5102
原创 Python读取Postgresql后将数据传递给C++共享库
本文介绍一下如何使用Python读取Postgresql数据库数据,并传递给调用的C++函数,由C++处理完毕后,再传递给python代码,写入Postgresql数据库
2015-07-22 10:21:08
1555
原创 使用GDAL/OGR操作Postgresql数据库
GDAL(Geospatial Data AbstractionLibrary)是一个在X/MIT许可协议下的开源栅格空间数据转换库。它利用抽象数据模型来表达所支持的各种文件格式。它还有一系列命令行工具来进行数据转换和处理。本文将使用GDAL/OGR库读写Postgresql数据库中的表,代码执行环境在ubuntu12.04,直接上代码#include "/us
2015-07-21 14:50:40
5356
7
原创 算法学习系列之二章---KMP算法图解
一、简介KMP算法,首选域BF算法做比较…….(此处略去简介200字,至于哪200字,网上随便找一篇讲KMP算法的基本上都会先讲朴素算法);二、题外话记得大二的时候,DS课程设计就是实现KMP算法,当时也没弄太清楚(或者弄清楚了也忘记了),就知道在网上搜到了代码,然后就好用!然而这几天抱着深入学习的态度,反而有点晕,可能年纪大了吧!在网上找到很多资料把我看的直接拔电源了都!我想说的是,
2014-02-20 22:43:06
1278
原创 写代码学习Windows程序编写---动态链接库编程
Windows API中所有的函数都包含在DLL中,其中最重要的三个DLL分别是HERNEL32.DLL User32.dll GDI32.dll 在使用动态链接库的时候,往往要提供两个文件:引入库(.lib)和DLL。引入库包含DLL导出的函数和变量的符号名,DLL中包含实际的函数和数据。编译链接可执行文件时,只需要链接引入库,DLL中的函数代码和数据并不复制到可执行文件中,
2014-02-18 00:23:29
1701
原创 算法学习系列之初章---R-Tree
工作也有一段时间了,在完成工作的同时,自己也学到了很多的知识,今天答辩,正好对以前所做的东西,所学习到的知识做了一个总结,突然发现自己有很多东西都要忘记了,而且有些东西本来都是一些现有的算法,由于项目需求就直接“拿来主义”,根本没有吃透,所以,今天开始写blog,对以往的知识做一个记录,毕竟,有些东西自己理解的比别人讲述的更深刻,如果不能及时记下来,时间长了一样会忘记。废话了那么多,进
2014-02-17 23:41:57
4244
3
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人