
C/C++
文章平均质量分 72
hinyunsin
南京大学软件学院本科,北京大学软件学院硕士,2012年在上海大智慧股份有限公司任职至2014年4月,离职时担任新技术架构部高级技术开发经理,离职后加入上海多棱镜网络科技有限公司任职CTO。
展开
-
百度Intern面试题之二叉树的网络传输及恢复--二叉树的文件存储和读取
这不是我的面试题,是一个同学在百度的面试题。 要求将一颗二叉树通过网络传输到给另一个客户端,并且在该客户端恢复为原始二叉树。 这道题目可以理解为如何将一颗二叉树存储到文件中,并且读取后正确恢复。 我想到了三种解决方法: 1. 二叉树补全法,将这课二叉树补全,变成一颗完全二叉树,再使用数组进行存储,写入文件中。这样做需要在节点中增加一个属性,标记是否为补全的节点。 这种方法不太合理,因为使用了补全操作,对于一颗很不规则的二叉树,将会占用非常大的存储空间,并且修改了二叉树的属性。 2. 游标实现原创 2011-03-31 19:51:00 · 7290 阅读 · 2 评论 -
根据二叉树的前序和中序求后序
在面试的过程中,发现有几家公司都喜欢考这样的一道题,就是在一棵二叉树中,已知这棵二叉树的前序和中序遍历结果,要求写出后序遍历结果。 例如:在一棵二叉树总,前序遍历结果为:ABDGCEFH,中序遍历结果为:DGBAECHF,求后序遍历结果。 我们知道,前序遍历方式为:根节点->左子树->右子树中序遍历方式为:左子树->根节点->右子树后序遍历方式为:左子树->右子树->根节点 从这里可以看出,前序遍历的第一个值就是根节点,然后再中序遍历中找到这个值,那么这个值的左边部分即为原创 2011-04-11 14:31:00 · 37981 阅读 · 3 评论 -
说说Linux中的信号处理和僵尸进程的避免
什么僵尸进程 这里简单说一下,详细的到网上搜一下就知道了:僵尸进程就是指子进程退出了,而父进程尚未退出,并且没有对子进程进行wait,致使子进程的资源得不到释放,依然占据在内存中,从而变成了像"僵尸"一样的进程(僵尸不能动,却占据着身体;进程不能执行了,却占据着内存等资源)。这种进程因为不再活动了,不会对信号进行处理,使用kill向它发送信号是没有用的,也就是它变原创 2011-06-18 00:41:00 · 4746 阅读 · 1 评论 -
一个fopen函数中未使用二进制模式(b)引发的血案
最近写了一个网络文件传输模块,为了让这个模块具有更好的扩展性,我尽量使用C标准IO API来编写代码。模块是在Linux下面写的,一点问题都没有。但是昨天把客户端的代码移植到了windows上,结果就出现了一个很奇怪的问题,客户端从服务器端下载的数据保存在本地总是比服务器上的原始文件要大,下载的二进制文件(比如zip文件)总是被破坏,而下载的文本文件却看不出任何问题。看了半天代码,一直把注意力放在fread和fwrite函数上,怎么都看不出什么问题,Linux下测试也一点问题没有。于是我就又用fopen,f原创 2011-05-07 15:21:00 · 14538 阅读 · 3 评论 -
巧用可变参数宏、编译器内置宏和printf输出调试信息
前言:我们在写程序的时候,总是或多或少会加入一些printf之类的语句用于输出调试信息,但是printf语句有个很不方便的地方就是当我们需要发布程序的时候要一条一条的把这些语句删除,而一旦需要再次调试的时候,这些语句又不得不一条条的加上,这给我们带来了很大的不便,浪费了我们很多的时间,也造成了调试的效率低下。所以,很多人会选择使用宏定义的方式来输出调试语句。比如,定义一个宏开关:#define _原创 2011-06-15 17:18:00 · 19017 阅读 · 7 评论 -
谈谈如何判断一个Pop序列是否是一个Push序列的Pop顺序
有这样一道题目:输入两个整数序列。其中一个序列表示栈的push顺序,判断另一个序列有没有可能是对应的pop顺序。 我们来模拟入栈和出站的过程:这里有三个角色:Push序列:它的动作只有一个那就是不断地将自己的元素一个个Push到栈Stack中,直到结束;Stack栈:它的动作则有原创 2011-07-29 14:57:10 · 4082 阅读 · 0 评论 -
Linux下设计一个简单的线程池
定义 什么是线程池?简单点说,线程池就是有一堆已经创建好了的线程,初始它们都处于空闲等待状态,当有新的任务需要处理的时候,就从这个池子里面取一个空闲等待的线程来处理该任务,当处理完成了就再次把该线程放回池中,以供后面的任务使用。当池子里的线程全都处理忙碌状态时原创 2011-08-01 15:19:21 · 23133 阅读 · 31 评论 -
深入理解C语言中的指针与数组之指针篇
前言其实很早就想要写一篇关于指针和数组的文章,毕竟可以认为这是C语言的根本所在。相信,任意一家公司如果想要考察一个人对C语言的理解,指针和数组绝对是必考的一部分。但是之前一方面之前一直在忙各种事情,一直没有时间静下心来写这些东西,毕竟这确实是一件非常耗费时间和精力的事情;原创 2011-08-05 13:52:08 · 23707 阅读 · 9 评论 -
线程池已更新,测试已无bug,欢迎反馈
貌似距离上一篇博客的更新快一年了,中间遇到实习,找工作,过年,继续实习,等待毕业等等事情,还赶上csdn密码泄漏事件,一直没怎么更新过博客。后来几位网友反应了线程池的一些问题,中间没怎么有时间,也有点懒散了,到今天才把几个bug修复。修正后的源码已经在sourceforge上更新。该线程池支持动态增加线程,管理线程定时回收多余的空闲线程。 V1.02: 修正线程池死锁原创 2012-05-14 23:00:41 · 2348 阅读 · 2 评论