- 博客(95)
- 资源 (1)
- 收藏
- 关注
原创 Fiddler抓去HTTP/HTTPS数据包
默认情况下,Fiddler是抓不到Java程序的HTTP/HTTPS的通信的。1. 配置抓取HTTP/HTTPS通信。 只要为Java程序设置HTTP代理,指向localhost:8888即可。 方法一,使用如下方式启动Java程序:java -DproxySet=true -DproxyHost=127.0.0.1 -DproxyPort=8888 <...
2016-01-12 22:03:02 553
原创 C++中的new与delete总结
1. operator new、operator delete与new、delete操作符的区别:operator new的作用类似于malloc,负责分配内存;operator delete的作用类似于free,负责释放内存new操作符包括两个步骤;调用适当的operator new版本分配内存;在分配的内存上调用构造函数delete操作符包括两个步骤:在内存上调用析构函数;调用适当的o
2013-10-12 21:14:15 1352
原创 java finalize方法总结、GC执行finalize的过程
注:本文的目的并不是鼓励使用finalize方法,而是大致理清其作用、问题及其与GC交互的过程1. finalize的作用finalize()是Object的方法,类可以覆盖该方法以实现资源清理工作,GC在回收对象之前调用该方法。finalize()与C++中的析构函数不是对应的。C++中的析构函数调用的时机是确定的(对象离开作用域或delete掉),但Java中的fina
2013-10-06 16:42:31 7279
原创 C++11智能指针之shared_ptr、weak_ptr
1. shared_ptr、weak_ptr概念shared_ptr与weak_ptr智能指针均是C++ RAII的一种应用,可用于动态资源管理shared_ptr基于“引用计数”模型实现,多个shared_ptr可指向同一个动态对象,并维护了一个共享的引用计数器,记录了引用同一对象的shared_ptr实例。当最后一个指向动态对象的shared_ptr销毁时,会自动销毁其所指对象(通过d
2013-10-02 21:13:29 4293
原创 C++11智能指针之unique_ptr
1. 智能指针概念智能指针是基于RAII机制实现的类(模板),具有指针的行为(重载了operator*与operator->操作符),可以“智能”地销毁其所指对象。C++11中有unique_ptr、shared_ptr与weak_ptr等智能指针,可以对动态资源进行管理2. unique_ptr概念unique_ptr“唯一”拥有其所指对象,同一时刻只能有一个unique_ptr指向
2013-10-01 21:08:40 6039 2
原创 IPython使用技巧总结
一、配置1. 配置自动加载模块(reload)调试代码是经常需要修改模块源码,默认ipython并不会自动重新加载已经import过的修改模块。可以使用两种方式设置autoreload模式。① 在交互式命令下输入以下命令(临时设置,下次进入交互界面则会恢复原设置):%load_ext autoreload%autoreload 2② 持久化配置,修改配置文件。首先
2013-09-27 10:52:46 297
原创 Linux epoll模型实现初步探讨
Linux epoll模型实现初步探讨一、epoll模型概念与比较select、poll、epoll一样都是I/O多路复用技术。网络编程还有其他常用模型,如每连接一进程(PPC, 在Apache服务器中采用)、每连接一线程(TPC)。还有Windows中的IOCPselect/pselect, poll/ppoll与epoll的比较:1. 历史上,select最先出现,pselec
2013-09-26 23:13:03 1306
原创 Linux内核空间-用户空间通信之debugfs
一、debugfs文件系统简介debugfs虚拟文件系统是一种内核空间与用户空间的接口,基于libfs库实现,专用于开发人员调试,便于向用户空间导出内核空间数据(当然,反方向也可以)。debugfs在linux内核版本2.6.10引入,作者是Greg Kroah-Hartman。与procfs和sysfs不同,前者主要提供进程信息(当然后来又加入设备、内存、网络等信息,比较杂乱),后者主要
2013-08-25 21:12:01 1643
原创 Linux netlink之添加一个简单协议
一、netlink简介netlink协议是一种基于socket的IPC机制,可用于内核与用户空间进程、用户空间进程与用户空间进程通信。netlink协议基于BSD socket和AF_NETLINK地址簇(address family),使用32位的端口号寻址(以前称作PID),每个netlink协议(或称作总线,man手册中则称之为netlink family),通常与一个或一组内核服务
2013-08-23 21:07:47 3508 1
原创 添加一个系统调用到Linux内核
一、添加一个简单的系统调用的过程:Linux 3.x版本的内核与2.x的内核添加系统调用的方式不一样,在此将操作流程记下。基于版本:ArchLinux, kernel version: 3.10,64位1. 首先,定义系统调用服务例程。可在多处添加系统调用服务例程的定义,只要最终配置并编译进内核镜像即可(不能作为模块)。为简便起见,在kernel/sys.c文件末尾添加服务例程sys_
2013-08-21 20:41:50 2811
原创 剑指Offer算法实现之二十六:复杂链表的复制
题目:请实现一个函数ComplexListNode *Clone(ComplexListNode *pHead),复制一个复杂链表。在复杂链表中,每一个节点除了有一个m_pNext指针指向下一个节点外,还有一个m_pSibling指向链表中的任意接待你或者NULL。节点的C++定义如下:struct ComplexListNode { int m_nValue; ComplexLi
2013-08-04 21:40:40 867
原创 剑指Offer算法实现之二十五:二叉树中和为某一值的路径
题目:输入二叉树和一个整数,打印出二叉树中节点值的和为输入整数的所有路径。从数的根节点开始往下一直到叶节点所经过的节点形成一条路径。二叉树的接待你定义如下:struct BinaryTreeNode { int m_nValue; BinaryTreeNode *m_pLeft; BinaryTreeNode *m_pRight;};思路:递归,函数参数中维护”路
2013-08-04 21:28:10 766
原创 剑指Offer算法实现之二十四:二叉搜索树的后续遍历序列
题目:输入一个整数数组,判断该数组是不是某个二叉搜索数的后续遍历的结果。如果是则返回true,否则返回false。假如输入的数组的任意两个数组都互不相同思路:后续遍历,最后一个元素为root。BST的特点是左子树所有节点小于等于root,右子树所有子节点均大于等于root。递归,找到可能是左子树的序列,余下的为右子树的序列。判定候选的右子树序列是否满足大于等于root的条件。若满足,递
2013-08-04 21:22:46 755
原创 剑指Offer算法实现之二十三:从上往下打印二叉树
题目:从上往下打印二叉树的每个节点,同一层的节点按照从左到右的顺序打印。二叉树节点定义如下:struct BinaryTreeNode { int m_nValue; BinaryTreeNode *m_pLeft; BinaryTreeNode *m_pRight;};思路:基本的广度优先遍历算法BFS,使用队列。对于每个待遍历的元素,先入队。对于队列的每个元素
2013-08-04 21:16:19 909
原创 剑指Offer算法实现之二十二:栈的压入、弹出序列
题目:输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1、2、3、4、5是某栈的压栈序列,序列4、5、3、2、1就是该栈对应的一个弹出序列,但4、3、5、1、2就不可能是该压栈序列的弹出序列。思路:使用辅助站,根据模拟弹出序列和压入序列编译环境:ArchLinux+Clang3.3,C++11实现一:#i
2013-08-04 21:11:40 902
原创 剑指Offer算法实现之二十一:包含min函数的栈
题目:定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的min函数。在该栈中,调用min、push和pop的时间复杂度都是O(1)。思路:min值是变化的,并且当前min弹出后新的min是是什么?直接的想法:用一个min栈专门跟踪每个push操作后对应的最小值。因此min栈与数据栈占用空间相同能否优化空间?仅当push元素x编译环境:ArchLinux+Clang3.
2013-08-04 21:06:07 999
原创 剑指Offer算法实现之二十:顺时打印矩阵
题目:输入一个矩阵,按照从外向里以顺时针顺序依次打印出每一个数字。例如:如果输入如下矩阵:1 2 3 45 6 7 89 10 11 1213 14 15 16则依次打印:1、2、3、4、8、12、16、15、14、13、9、5、6、7、11、10思路:① 递归打印,每次打印一圈② 递归终止条件:设待打
2013-08-04 20:58:53 1759
原创 剑指Offer算法实现之十九:二叉树的镜像
题目:请完成一个函数,输入一个二叉树,该函数输出它的镜像。二叉树节点定义如下:struct BinaryTreeNode { int m_nValue; BinaryTreeNode *m_pLeft; BinaryTreeNode *m_pRight;};思路:遍历二叉树,交换每个节点的左右子树编译环境:ArchLinux+Clang3.3, C++
2013-08-04 20:44:36 823
原创 剑指Offer算法实现之十八:树的子结构
题目:输入两颗二叉树A和B,判断B是不是A的子结构。二叉树节点定义如下:struct BinaryTreeNode{ int m_nValue; BinaryTreeNode *m_pLeft; BinaryTreeNode *m_pRight;};思路:① 二叉树的每个节点往下均是一个二叉树。使用两个函数,一个函数递归遍历二叉树节点,对于每一个节点,调用另一个判
2013-08-04 20:39:11 817
原创 剑指Offer算法实现之十七:合并两个排序的链表
题目:输入两个递增排序的链表,合并这两个链表并使新链表中的节点仍然是按照顺序递增排序的。链表的节点定义如下:struct ListNode{ int m_nValue; ListNode *m_pNext;};思路:① 递归:对于链表PHead1、pHead2。取其小者作当前节点,剩余部分作两个链表递归构造新链表的剩余部分。② 迭代:同时遍历两个链表,取小者做当前节点
2013-08-04 20:26:46 726
原创 剑指Offer算法实现之十六:翻转链表
题目;定义一个函数,输入一个链表的头结点,翻转该链表并输出翻转后链表的头结点。链表结点定义如下:struct ListNode { int m_nKey; ListNode *m_pNext;};思路:链表的基本操作。遍历链表的每个节点,同时维护指向新链表head的指针即可编译环境:ArchLinux+Clang3.3, C++11实现一:#include
2013-08-04 20:13:27 754
原创 剑指Offer算法实现之十五:链表中倒数第k个结点
题目:输入一个链表,输出该链表中倒数第k个节点。为了符合大多数人的习惯,本题从1开始计数,即链表的尾节点是倒数第一个节点。例如一个链表有6个节点,从头开始他们的值依次是1、2、3、4、5、6。这个链表的倒数第三个节点是值为4的节点。链表的数据结构如下:struct ListNode { int m_nValue; ListNode *m_pNext;};思路:双指针“追赶
2013-08-04 08:47:15 906
原创 剑指Offer算法实现之十四:调整数组顺序使奇数在偶数前面
题目:输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分。思路:类似于快速排序的分区函数。可在线性时间内完成编译环境:ArchLinux+Clang3.3,C++11实现一:双指针两端扫描交换法#include using namespace std;void reorder_oddeven(int *a,
2013-08-03 20:26:46 852
原创 剑指Offer算法实现之十三:在O(1)时间删除链表节点
题目:给定单向链表的头指针和一个节点指针,定义一个函数在O(1)时间删除该节点。链表节点与函数定义如下:struct ListNode{ int m_nValue; ListNode *m_pNext;};void DeleteNode(ListNode **pListHead, ListNode *pToBeDeleted);思路:①单向链表,若按照常规思路,即使待删
2013-08-03 20:19:40 1023
原创 剑指Offer算法实现之十二:打印1到最大的n位数
题目:输入数字n,按顺序打印出从1到最大的n位十进制数。比如输入3,则打印1、2、3一直到最大的3位数字即999.思路:① 考虑大数字,采用数组模拟自增运算② 也可考虑使用基于数组的全排列,使用递归实现编译环境:ArchLinux+Clang3.3,C++实现一:数组自增模拟#include #include using namespace std;void pri
2013-08-02 22:06:08 1123 1
原创 剑指Offer算法实现之十一:数值的整数次方
题目:实现函数double Power(double base, int exponent),求base的exponent次方。不得使用库函数,同时不需考虑大数问题。思路:① double判零技巧② 输入参数合法性③ 避免重复计算,迭代公式:编译环境:ArchLinux+Clang3.3,C++11实现一:迭代公式+位运算#include #include #i
2013-08-02 22:00:12 933
原创 剑指Offer算法实现之十:二进制中1的个数
题目:请实现一个函数,输入一个整数,输出该数二进制表示法中1的个数。例如把9表示成二进制1001,有2位是1。因此如果输入9,该函数输出2.思路:① 是否处理负数?是。若是负数,符号位算计数吗?计数② 最小负数与最大整数不对称性。若输入是INT_MIN,如何解决?绝大多数计算机均使用二进制补码表示负数③ 在C/C++中,有符号数的有移位结果是未定义的。可能是算数右移、也可能是逻辑右
2013-08-02 21:52:39 767
原创 剑指Offer算法实现之九:斐波那契数列
题目:写一个函数,输入n,求斐波那契数列的第n项。斐波那契数列的定义如下:思路:① 可用直接将上述公式翻译成递归函数版本。但算法复杂度是指数级的,且不能写成尾递归的形式② 可用循环迭代解决编译环境:ArchLinux+Clang3.3,C++11实现一:迭代版本。时间复杂度O(n)#include #include using namespace std;lon
2013-08-02 21:32:07 1184
原创 剑指Offer算法实现之八:旋转数组的最小数字
题目:把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素。例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1.思路:① 题目并为说数组元素无重复② “有序”数组的查找,考虑使用二分查找。找到“中位”元素,不满足条件,则“二分”缩小收缩范围③二分查找的“变体”,注意特例编译环
2013-08-02 21:17:10 1798
原创 剑指Offer算法实现之七:用两个栈实现队列
题目:用两个栈实现一个队列。队列的声明如下,请实现它的两个函数appendTail和deleteHead,分别完成在队尾插入节点和在队首删除节点的功能。template class CQueue{public: CQueue(); ~CQueue(); void appendTail(const T& node); T deleteHead();private
2013-08-02 21:05:36 804
原创 剑指Offer算法实现之六:重建二叉树
题目:输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数组。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},重建出图所示的二叉树并输出 它的头结点。二叉树节点的定义如下:struct BinaryTreeNode{ int m_nValue; BinaryTre
2013-08-02 20:47:09 831
原创 剑指Offer算法实现之五:从尾到头打印链表
题目:输入一个链表的头结点,从尾到头返货来打印每个节点的值。链表定义如下:struct ListNode{ int m_nKey; ListNode *m_pNext;};思路:无论是否可以修改源链表的结构,从逻辑上将,是完整“遍历”在先,打印输出在后。先进后出,这是stack机制与函数调用机制,因此有两种实现办法编译环境:ArchLinux+Clang3.3, C++11实
2013-08-02 11:24:18 669
原创 剑指Offer算法实现之四:替换空格
题目:请实现一个函数,把字符串中的每个空格替换成"%20"。例如输入“We are Happy”,则输出“We%20are%20Happy”。思路:一个空格的替换需要两个额外的字符空间。这是一种需要扩展空间的“替换”。① 若不可修改源字符串,即“复制式”的替换,则可先申请足够的额外空间,再从前往后拷贝源字符串,拷贝过程中作替换。② 若可修改源字符串,并确保源字符串尾部后有足够的空间以供
2013-08-02 11:13:40 723
原创 剑指Offer算法实现之三:二维数组中的查找
题目:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否有该整数。 例如,下面的二维数组。如果在其中查找7则返回true,查找5则返回false: 1 2 8 9 2 4 9 12 4 7 10 13 6 8 11 15思路:
2013-08-02 08:45:37 781
原创 剑指Offer算法实现之二:实现Singleton模式
题目:实现Singleton模式说明:以下考虑主要基于Java思路: 单例模式一般是多线程环境下static字段的初始化问题。并且需要提供private构造器。 额外可能需要考虑的: 1. 即使仅提供private构造器,仍然可以通过反射机制创建多个实例。若需要,可以提供计数机制,防止这种情况发生。 2. 单例对象的序列化与反序列化问题(使用
2013-08-01 19:27:34 1208
原创 剑指Offer算法实现之一:赋值运算符函数
题目:如下为类型CMyString的声明,请为该类型添加运算符函数class CMyString{public: CMyString(char *pData = NULL); CMyString(const CMyString& str); ~CMyString();private: char *m_pData;};思路:考虑下列问题:
2013-08-01 10:00:57 916
Ubuntu 64位 zhcon0.2.6 更新版
一、本文目的: 本文解决64位系统zhcon的问题,32位系统的请绕过~ 之前发表《 Ubuntu Server 12.04 64位系统编译安装zhcon 0.2.6》一文,用于解决解决官方64位zhcon包的以下BUG: 1. 普通用户执行zhcon后屏幕中不断输出闪动的行 2. 安装官方提供的zhcon包后,切换至中文输入法然后按键,程序发生段错误 但由于该文中并...
2012-09-03 19:26:54 233
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人