自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Ian Zhang的专栏

只谈技术

  • 博客(16)
  • 资源 (6)
  • 收藏
  • 关注

原创 无锁,线程安全,延迟加载的单例实现(C#)

单例(singleton)是非常常见,也非常有用的设计模式,当然了, 面试中也是经常会被问到的:)在几乎所有的项目中都能看到它的身影。简而言之,单例保证了一个自定义类型在整个程序的生命周期只被创建一次。要实现一个简单的单例是也很容易的:public class Example{ private static Example instance; private Examp

2013-10-07 21:39:06 4695

原创 大文本文件阅读器设计

我们项目中需要实现一个日志查看控件,这本是一个很简单的需求:写一个通用的控件,将字符串绑定到RichTextBox, 如果要查看日志,将日志赋值给字符串即可。这个控件很简单,在绝大多数情况下工作的都很好。但是最近经常有客户报告说日志打不开,或者打开后就无法响应了。检查后发现这些无法打开的日志都很巨大,文件长度大多都超过几千万行。显然不带任何优化的文本阅读器都撑不住这个级别的文本。通过观察及与客户的

2013-09-19 12:20:04 2700

原创 聊聊Windows程序中的"\r"和"\n"

从学编程的第一天起,我们就接触到了"\r"和"\n"。 "\n" 表示换行(LF, Line Feed),ASCII是0xA。 "\r"表示回车(CR, Carriage Return), ASCII是0xD。 换行是很容易理解的,无需过多的解释。回车是打字机时代的产物,表示回到当前行的最开始。概念本身很简单,如果各个操作系统,框架都严格遵守这个规则,事情就简单多了。   Unix系列, Ap

2013-09-08 14:46:27 4884 1

原创 再谈关注分离, 基于版本控制的设计

前段时间写了一篇关于关注分离的博客。很巧的是这段时间我们需要在项目里增加一个新特性,又提到了关注分离。背景是这样的:我们有一个ConfigManager类,这个类的职责是读取和写入配置文件。当业务逻辑有配置文件读写要求时,直接调用ConfigManager即可,使得配置文件对业务逻辑完全透明。当时在设计ConfigManager类的时候考虑到了配置文件的格式有可能在将来会改变,实现可能会有bug,

2013-09-01 15:36:43 1340

原创 关注分离

这两天在工作中经常会提到spearation of concern这个概念。我想在这篇博客里讲一下我对这个概念的理解。实际上关注分离并不是一个专属于IT领域的概念。在各个领域我们都在不自觉的考虑如何将任务切割,分配。记得在我读书的时候,看一些开源代码,就是不理解为什么这些所谓的牛逼代码写得那么绕:明明一个简单的new就能创建一个实例,偏要用一个工厂类来生成;明明一个new就能解决的问题,偏偏要拆成

2013-08-11 13:45:29 1219

原创 接口与抽象类

接口(interface)与抽象类(abstract class)的区别是我在面试的时候几乎必问的一个问题,可惜很少有面试者能回答得很好。大多数能说出它们的特性,比如不能实例化,是定义接口的用途等等。但是在实际工作环境中能把这两个运用得很好的并不多。在实际工作中很多.NET程序员会有意识的使用接口,但是很少使用抽象类。C++程序员,由于受到语言的限制(语言本身并没有定义接口这个概念),只会将抽象类

2013-07-28 13:14:17 1144

原创 Linux内核spin_lock与spin_lock_irq分析

在Linux内核中何时使用spin_lock,何时使用spin_lock_irqsave很容易混淆。首先看一下代码是如何实现的。spin_lock的调用关系     spin_lock             |           + ----->  raw

2011-09-30 15:45:54 31545 3

原创 linux内核hlist分析

在Linux内核中,hlist(哈希链表)使用非常广泛。本文将对其数据结构和核心函数进行分析。和hlist相关的数据结构有两个(1)hlist_head (2)hlist_node struct hlist_head { struct hlist_n

2011-09-11 13:23:16 13868 5

原创 linux内核PID管理

PID即进程描述符在linux kernel中的分配和管理比较复杂。 本文分析了其相关数据结构以及函数。 (代码基于v3.0.3)和PID相关的数据结构有struct pid{atomic_t count;unsigned int level;struct h

2011-09-10 14:53:07 15786 4

原创 利用mmap /dev/mem 读写Linux内存

使用 hexedit /dev/mem 可以显示所有物理内存中的信息。 运用mmap将/dev/mem map出来,然后直接对其读写可以实现用户空间的内核操作。以下是我写的一个sample#include#include#include#include#inclu

2011-08-02 14:00:50 37070 6

原创 利用iptables&Putty进行端口转发

iptables -Fiptables -P INPUT ACCEPTiptables -P FORWARD ACCEPTiptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth2 -j MASQUERADEiptables -A PREROUTING -t nat -p tcp -d 10.32.100.58 --dp

2011-06-21 15:25:00 2491

原创 git 小技巧

(1)合并两个commit并重新编辑commit description(a) git rebase -i HEAD~3说明: 你想修改最近三次的提交说明,或者其中任意一次,你必须给git rebase -i提供一个参数,指明你想要修改的提交的父提交,例如HEAD~2或者HEAD~3。可能记住~3更加容易,因为你想修改最近三次提交;但是请记住

2011-06-03 15:41:00 1252

原创 VIM中如何输入^M

<br />Ctrl + V<br />Ctrl + M<br /> 

2011-01-06 15:40:00 3057

原创 Net::Telnet库使用

<br />今天写了一个通过telnet远程控制APC电源远程控制的脚本。调试Net::telnet库费了点时间, 所以打算将其记录下来。<br />sub operate_apc_server{ my $param_ref = shift; my $port = $param_ref->{port}; my $action = $param_ref->{action}; my $list = $param_ref->{list}; my $telnet

2010-11-17 15:17:00 4438

原创 libxml++库 (2) Node, contentNode and Element 比较

libxml库中Node, contentNode还有Element的概念很容易混淆。 做了好几个sample test我才算是区分清楚。xmlpp::Node是base class. xmlpp::contentNode和xmlpp::Element都继承于它。xmlpp::Element的概念很容易理解。就是我们平时理解的xml的element,它可以有attribute,也可以有自己的子节点。 libxml++库里面xmlpp::contentNode这个名字我觉得取得非常不好, 非常让我产生误解。其

2010-09-14 23:52:00 2907

原创 libxml++库 (1) 安装及编译

这几天在学习libxml。 今天尝试安装并编译了一下。 安装      安装很简单。 两条命令:                  (1)  sudo apt-get install libxml++2.6-dev                  (2)  sudo apt-get install libxml++2.6-doc编译安装成功后写了一个hello world程序做了下测试【源代码】#include #include #include "libxml++/libxml++.h"us

2010-09-08 15:19:00 4744 2

visual C# 2010 step by step

详细介绍Visual C# 2010 的书 有不少新特性的介绍

2011-03-10

codeigniter

CodeIngiter 开发手册 本书详细讲解了 CI 的一些主要特性。本书并不包含 CI 的所有内容和全部细节。CI 有一本出色的在线《用户指南》,它详细讲解了大多数的内容。它可以与 CI 一起下载。 本书系统地讲解了 CodeIgniter 的主要特性,并配合相应的代码范例进行了详尽的解释,使你能够由浅入深地掌握 CodeIgniter

2010-08-13

《人月神话》 (pdf) 软件工程经典教材

软件工程经典教材。 非常值得收藏。 pdf版本

2009-07-31

Learn_the_vi_Editor

英文版的学习vi的教材。 对于初学者是本很好的书

2009-07-31

a course in game theory

classic game theory book

2009-07-29

convex optimization by Stephen Boyd

classic optimization book

2009-07-29

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除