2013年10月6日
摘要: 问题描述这是从微博上看到的一个面试问题,描述如下:给一个链表,如下定义:1 struct Node2 {3 struct Node* next;4 struct Node* random;5 void*data;6 };其中random 指向链表中的任意一个节点或为空。现在要求对一个这种链表进行深度复制(即复制得到的链表中节点的next, random指向新链表中的相对应位置)。如下图, 第一个是原链表,第二个是复制后的链表,现在要求尽可能快、省地完成这个复制过程。简单分析这个问题的难点显然就在于怎么设置新链表节点的random指针。一种比较直观的解法是类似于深度优先进行复制... 阅读全文
posted @ 2013-10-06 13:08 twoon 阅读(9823) 评论(0) 推荐(0) 编辑
  2013年8月11日
摘要: C++ 中的临时变量指的是那些由编译器根据需要在栈上产生的,没有名字的变量。主要的用途主要有两类:1) 函数的返回值, 如: 1 string proc() 2 { 3 return string("abc"); 4 } 5 6 int main() 7 { 8 proc()... 阅读全文
posted @ 2013-08-11 21:29 twoon 阅读(15268) 评论(5) 推荐(3) 编辑
  2013年8月8日
摘要: 现在我们来尝试解决前一篇文章提到的问题。(一)首先是内存释放的问题。这个问题乍看起来很棘手:我们现在要访问一段内存,但却不知道这段内存是否还合法,是否已被释放。怎么办呢?很直接的一个想法是,看看有没别的方式可以检查该内存是否还合法,这个想法很单纯,但从前面几篇文章的讨论我们得知,任何时候直接去碰队列... 阅读全文
posted @ 2013-08-08 22:26 twoon 阅读(5831) 评论(6) 推荐(5) 编辑
  2013年7月7日
摘要: 怎样实现一个无锁队列,网络上有很多的介绍,其中流传最广,影响最大的恐怕就属于以下两篇论文:a) "Implementing lock free queue" by John.D.Valoisb)"Simple, Fast, and Practical Non-Blocking and Blockin... 阅读全文
posted @ 2013-07-07 19:15 twoon 阅读(9311) 评论(6) 推荐(1) 编辑
  2013年7月1日
摘要: 书续上回:实现无锁栈与队列(1)对于下面这个看起来很美好的无锁栈: 1 //无锁的栈。 2 3 typedef ELEM int; 4 #define MAX (2048) 5 6 static ELEM Stack[MAX]; 7 static int top = 0;... 阅读全文
posted @ 2013-07-01 13:20 twoon 阅读(4071) 评论(4) 推荐(0) 编辑
  2013年6月30日
摘要: 为了实现一个快速无锁的 logging 模块, 这几天花了不少时间去了解怎样实现一些无锁的操作及与之相对应的数据结构。对多线程场景下的无锁操作的研究一直是个热点,理想中的无锁操作,它应能天然地避开有锁操作的一些缺陷,比如: 1)减少线程切换,能够相对快速高效地读写(不使用 mutex, semap... 阅读全文
posted @ 2013-06-30 23:59 twoon 阅读(5004) 评论(8) 推荐(0) 编辑
  2013年6月10日
摘要: 最近在准备实现一个简单的server后端,这是一个比较陌生的领域,所以也不准备要写得多好,就纯粹尝试一下新东西,顺便完成以前在学校时就有了的夙愿。 现在初步的计划,实现上有以下几个原则: 首先,项目用c++来写,因为语言上比较熟悉,另外就是,结构化,面向对象编程的优点是无法拒绝的,但是我个人十分不喜欢面向对象上太高级的东西,比如设计模式什么的,我这里要做的事情,逻辑上要求比较简单,所以,我的第一条原则是,凡事尽可能简单,只使用面向对象上的封装以及多态就够了。 其次,可以尝试适当造点轮子,少用第三库,这个想法可能有些难以理解,就我而言,我的出发点却只是想亲自多写些东西,不需要太复杂,但... 阅读全文
posted @ 2013-06-10 17:04 twoon 阅读(695) 评论(0) 推荐(0) 编辑
  2013年5月26日
摘要: 前面一节介绍了Perl中的基本数据类型及其使用方式,本节介绍一下分支循环控制及IO。Perl中的分支循环在语法上和C家庭语言的语法很相似,关键字包括: If / else, for ,while 。前面已经讲过,Perl中代码块用大括号{}围起来,表达式以分号结尾,这些都和C相似,但在Perl中,使用if for while时,大括号是强制要求的,这点与c不一样。细心的人可能会发现前一节讲数据类型的时候,并没有涉及到整形,浮点,bool什么的,只说到了一个标量,事实上在Perl里,这些基本数据类型并不严格区分,都可以归到Scalar里头去,这也大概算是脚本语言的一个通用做法,弱化了基本类型。其 阅读全文
posted @ 2013-05-26 18:27 twoon 阅读(3369) 评论(0) 推荐(5) 编辑
  2013年5月25日
摘要: Perl 是一门开源的脚本语言,由 Larry Wall 所创造,该语言以实用,快速开发为主要目标,与当前流行的面向对象结构化编程有些格格不入,但这并不妨碍 Perl 被广泛流传和使用,世界范围内围绕 Perl 建立起了非常活跃的社区,很多人在其中不断帮助完善文档,创建示例代码,提供一些第三库等等。 阅读全文
posted @ 2013-05-25 18:15 twoon 阅读(8019) 评论(7) 推荐(5) 编辑
摘要: Perl 有很多其它语言所没有的特性,这其中对正则表达式(regular expression)的强大支持是它最为突出的一个亮点。正则表达式使得 perl 在处理文本时具有非常强大的优势:快速,灵活而且很可靠,甚至可以说,强大文本处理能力,是 perl 在众多语言中最为闪耀的一个特点。 因此学习 p... 阅读全文
posted @ 2013-05-25 17:00 twoon 阅读(30058) 评论(0) 推荐(0) 编辑