进程、线程与应用程序域(AppDomain) 浅析

12月 23rd, 2009

进程
进程是操作系统用于隔离众多正在运行的应用程序的机制。在.Net之前,每一个应用程序被加载到单独的进程中,并为该进程指定私有的虚拟内存。进程不能直接访问物理内存,操作系统通过其它的处理把这些虚拟内存映射到物理内存或IO设备的某个区域,而这些物理内存之间不会有重叠,这就决定了一个进程不可能访问分配给另一个进程的内存。相应地,运行在该进程中的应用程序也不可能写入另一个应用程序的内存,这确保了任何执行出错的代码不会损害其地址空间以外的应用程序。在这种机制下,进程作为应用程序之间一个独立而安全的边界在很大程度上提高了运行安全。

Read more »

反射,动态加载,晚期绑定间的关系。

12月 22nd, 2009

1 动态加载程序集

2 反射获取Type信息(类的信息,方法的信息)

3晚期绑定(1 创造对象实例  2 调用方法(有参,无参))

.net程序集格式

12月 20th, 2009

win32文件首部

CLR文件首部

CIL代码

类型元数据

程序集清单

可选的嵌入资源

求二进制数中1的个数

12月 19th, 2009

对于一个字节(8bit)的变量,求其二进制表示中“1”的个数,要求算法的执行效率尽可能地高。 Read more »

一摞烙饼引发的“血案”

12月 6th, 2009

看移山之道这个网站,看到了不错的问题,好多牛人在讨论,以后得常去,最近忙着考试,写到要少的多了。

有一次我烙了三个饼,一个两面都焦了,一个两面都是金黄色,一个一面是焦的,一面是金黄色,我把它们摞一起,只能看到最上一面,发现是焦的,问最上面这个饼的另一面是焦的概率是多少?

解法1:

1. 最上一面是焦的, 排除最上一张是两面金黄色

2. 剩下两张饼四个面, 三面是焦的, 一面金黄色, 现知道其中一面是焦的,

所以判断另一面是焦的概率就是求 二面焦 + 一面金黄 中焦的概率, = 2/2+1 = 2/3

解法2:

A=最上面的饼双面焦

B=最上面的饼双面金黄

C=最上面的饼一面金黄一面焦

J=最上面的一面焦

则P(J|A)=1,P(J|B)=0,P(J|C)=0.5

P(A|J)=P(AJ)/P(J)=(1/3)/(1/2)=2/3

SSH下的乱码问题

11月 29th, 2009

1.vi /etc/sysconfig/i18n

将内容改为

LANG=”zh_CN.GB18030″
LANGUAGE=”zh_CN.GB18030:zh_CN.GB2312:zh_CN”
SUPPORTED=”zh_CN.GB18030:zh_CN:zh:en_US.UTF-8:en_US:en”
SYSFONT=”lat0-sun16″

这样中文在SSH,telnet终端就可以正常显示了。

2.安安装Linux的时候选择的是中文字,但是使用的时候出现了乱码解决方法是在命令提示下输入export LANG=C

3.export LC_ALL=zh_CN.GBK
export LANG=zh_CN.GBK

c#中变量的初始化

11月 11th, 2009

在c#中变量在未明确赋值之前,变量拥有一个所属类型的等价于0的值。在正确理解c#中初始化的概念的时候,我们必须区分局部变量(local variable)——在一个方法内部声明的变量,它的作用范围被局限在此方法内;类的字段(fields of a class)的区别 Read more »

c#中“躲在幕后”的ToString方法

11月 11th, 2009

在c#中的object这个对象中,最常用的(也是最常被覆载)的方法,当属ToString()方法,在派生类继承object类中ToString()方法,如果派生类没有覆载ToString()方法,那么当调用ToString()方法时,只是输出类名,当覆载之后,才能输出用户自定义的内容。

在console.writeline方法中,一般认为该方法接受字符串参数,其实他已经被覆载的可以接受任意对象作为其参数,当一个对象引用被传入,writeline方法会自动调用该对象的tostring方法来得到该类的字符串表示,并输出到控制台。

c#常量知识点总结

11月 10th, 2009

做完一个小项目后,发现自己的c#的基础知识有点缺失了,现在补一补,总结一下c#中常量的知识:

常量的声明方式: public const  datatype  name = value   

  •  常量隐含式静态的,所以不能再在声明上加上static关键字,如果试图是这样做,编译无法进行。
  • 在声明一个常量的时候必须给定一个值,不能在声明常量后又在程序的其他位置修改它的值
  • 常量的命名符合Pascal命名风格
  • 常量的值必须是在编译的时候可以计算的表达式。例如 public const int   a = 123+456 可以通过编译,而public const int a = Math.Sqrt(2.0);就无法通过编译,因为Math.Sqrt是一个方法,只能在运行时被调用。
  • 常量的类型必须是预定义数值类型(char,int,double,float,byte等)或者是string类型

 

抽象的过程

11月 5th, 2009

在做OO软件项目中,要做到理解面向对象对像我这样的初学者而言是比较困难的,下面就总结一下再项目初期将信息 进行抽象的过程,通过抽象,我们可以将信息得以简化:

  1. 通过抽象,将信息的特征概括出来
  2. 将信息模型组织为层次结构
  3. 抽象的重用。