posts - 22, comments - 13, trackbacks - 0, articles - 1
  博客园 :: 首页 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理

公告

2011年12月28日

很多软件公司抱怨招不到合适的程序员,就这里我说几句心里话,(你可以抨击我的观点,但是不可以打我的脸

1. HR 说这个人没经验,不要

    摆脱,诸葛亮出山之前也没带过兵啊,说这个话得HR,不一定是草包,但一定是个没作为的HR

2.笔试

    工作几年的人去笔试,基本上挂的概率在80%,无其他,人家掌握的知识全部在实际经验中了,靠笔试只能说是筛选刚毕业的学生。

3.面试问的问题

    这个很有意思,很多公司的面试官问的问题很随意,想到什么问什么,没重点,鄙人就遇过两次, 如果这样的话,反过来我问他,我保证我能够百分之百的把他问倒,

我应聘软件开发的岗位,结果你一直在问我DBA的知识,这面试官对我不是有仇嘛,我要是对DBA精通,我应该去应聘DBA的岗位啊。 就像你突然跑过去问乔布斯.NET的GC原理,你这不是脑子进水嘛,当然现在是找不到乔大了,

 

 个人建议:

搞软件技术的分两类人:【开发人员】 和【研发人员】,千万别搞混淆的了,这两个的区别很大。

     1.如果你是开发人员,那么面试官应该着重你的解决能力,业务能力,团队精神以及技术,但是技术不应该问的太细太深,比如问你是否会用数据库,然后问你数据库原理什么的,什么优化技术,集群,热备份,冷备份,差异备份什么的,B-tree的原理什么的,这样能找到人才怪,就算找到你也用不了。

     2.研发人员,这个应该是我们理解的科研人员,你脾气可以不好,但是你的技术一定要好,这个侧重点是技术,这类人是我们最为敬佩的人,他们提供了我们所需要的基础服务。

就这样了,面试是挖掘人,不是问倒面试者

 

posted @ 2011-12-28 11:34 木漂流 阅读(1134) 评论(8) 编辑

2011年9月30日

今天,要离开公司了,天下着小雨,一如我现在的心情,说不出道不明的滋味,我想我是舍不得离开这家公司,毕竟有感情了。可是现实不允许我留下,我带着遗憾的心情离开,走在雨中,感到茫然。我想我要重新思考我的出路。

posted @ 2011-09-30 09:33 木漂流 阅读(12) 评论(0) 编辑

2011年7月27日

     最近把工作辞掉了,有个人原因也有对公司的失望,不过已经是过去式了。在新的工作即将来临之前,我必须要做好以下几件事:

     1.好好反省自己的原来公司的经历。

     2.计划好好沉淀以下自己所学的技术,逐渐往有深度的层次靠拢

     3.准备报一个英语培训班,加强自己的英语能力

     4.计划以下自己下一步的路要怎么走

posted @ 2011-07-27 09:36 木漂流 阅读(35) 评论(0) 编辑

2011年7月25日

Windows Server AppFabric 缓存(微软分布式缓存解决方案)

主要介绍一下Windows Server AppFabric特点,详细的介绍及代码参照MSDN,这里就不多此一举了。(同类产品Memcahed)
      Windows Server AppFabric 扩展了 Windows Server 以为 Web 应用程序和中间层服务提供增强的托管、管理和缓存功能。 AppFabric 托管功能向 Internet 信息服务 (IIS)、Windows Process Activation Service (WAS) 和 .NET Framework 4 添加了服务管理扩展。其中包括托管服务和托管管理工具,这些工具使部署、配置和管理基于 Windows Communication Foundation (WCF) 和 Windows Workflow Foundation (WF) 的服务变得更加容易。 AppFabric 缓存功能向 Windows Server 添加了一个分布式的内存中对象缓存,它使扩展高性能 .NET 应用程序(特别是 ASP.NET 应用程序)变得更加容易。使用 AppFabric 缓存功能,您可以将多台计算机的内存容量合并到一个统一的缓存群集,从而可以帮助您轻松且低廉地扩展 .NET 应用程序。 这些功能包括缓存服务、缓存客户端和缓存管理工具。

Windows Server AppFabric 缓存物理体系结构示意图

Windows Server AppFabric 缓存功能使用彼此通信的服务器群集来形成单个统一的应用程序缓存系统。作为分配式缓存系统,所有缓存操作都抽象为单个参考点,称作缓存群集。换句话说,无 论构成缓存群集的计算机有多少台,您的客户端应用程序都可以与群集中单个逻辑单元的缓存配合使用。
物理体系结构的主要组件包含缓存服务器、缓存主机 Windows 服务、缓存群集、基于 Windows PowerShell 的缓存管理工具、群集配置存储位置和缓存客户端。下图显示所有这些元素的关联情况。
“Velocity”物理模型
 
AppFabric 缓存服务->缓存主机->缓存群集s
AppFabric 缓存服务 是运行在一个或多个服务器上的 Windows 服务
缓存服务器  运行缓存服务的每个服务器均
缓存群集    是以环状方式共同存储和分发数据的缓存服务的一个或多个实例的集合。

Windows Server AppFabric 缓存逻辑体系结构示意图

Windows Server AppFabric 中缓存群集的逻辑体系结构由命名缓存、区域和缓存对象组成。在下图中,命名缓存跨群集中的所有缓存主机,但区域仅限于群集中的一个缓存主机。
“Velocity”逻辑模型
首先是命名缓存,其次命名缓存又可划分区域,区域是具体存数据的容器,缓存对象可增加标签帮助索引查找。
命名缓存 也称为缓存,是一个可配置的内存中存储单元,所有应用程序都使用该单元将数据存储在分布式缓存中。
区域 是可以放置在缓存中的附加数据容器。区域是一种缓存结构:它们不在群集配置设置中定义。区域是可选的;如果您想使用它们,必须借助应用程序代码通过使用 CreateRegion 方法在运行时明确创建它们。
缓存对象 采用其 System.Object 基类的形式,因此需要进行类型转换以将它们还原为其原始类型。
标签 在往缓存中添加对象时,可额外的为对象创建标签,以方便检索
总体比较:比Memcahed强大多了,但是配置复杂多了,依赖MS的东西也比较多。

基于 Windows PowerShell 的缓存管理工具

Windows PowerShell 是缓存服务的专用管理工具。Windows PowerShell 缓存管理 cmdlet 可以安装在任何域计算机上或缓存服务器上。通过安装 AppFabric 的缓存管理功能可以完成此操作。您必须具有对所有缓存服务器的管理员权限,才能使工具正常运行。
使用 Windows PowerShell 可启动和停止群集、添加和删除命名的缓存、更改配置设置,以及查看主机和群集的统计信息。

本地缓存

      服务器采用序列化形式将对象存储在缓存中。当缓存客户端请求缓存中的某个对象时,服务器通过网络将该对象发送到客户端。然后,缓存客户端反序列化该对象以供客户端应用程序使用。若 要加快检索某个对象的过程,请启用本地缓存。当启用本地缓存时,缓存客户端在本地存储对对象的引用。这将使对象在客户端应用程序的内存中保持活动状态。当 应用程序请求对象时,缓存客户端首先检查对象是否位于本地缓存中。如果位于本地缓存中,则立即返回对该对象的引用,而不联系服务器。如果不在本地缓存中, 则从服务器检索该对象。然后,缓存客户端反序列化该对象并将对此新检索到的对象的引用存储在本地缓存中。客户端应用程序也使用该对象。对象在本地缓存中的生存期取决于多个因素,如本地缓存中对象的最大数量以及失效策略。对于本地缓存,有两种类型的失效:基于超时的失效以及基于通知的失效。
    本地缓存的对象存储在缓存客户端进程所在的同一进程空间中。当缓存客户端请求本地缓存的对象时,客户端将收到对本地缓存对象的引用,而非副本。对于可能从多个线程修改相同本地缓存对象的多线程应用程序而言,这是非常重要的注意事项。这些应用程序可以利用标准的 .NET Framework 编码技术从多个线程同步对象的更改。也可以为每个线程创建单独的 DataCacheFactory 对象。但是,应谨慎执行该操作,因为创建很多缓存工厂的开销可能会减少优势。

过期和逐出(Windows Server AppFabric 缓存)

缓存对象不会永久保留在 Windows Server AppFabric 的内存中。除了通过使用 Remove 方法从缓存中被显式删除之外,缓存对象也可能过期或被缓存群集逐出。

过期

缓存过期允许缓存群集自动将缓存对象从缓存中删除。当使用 PutAdd 方法时,可以为特定的缓存对象设置一个可选的对象超时值,该值将确定该对象在缓存中驻留的时间。如果在缓存对象时未提供对象超时值,则使用在命名缓存的群集配置设置中指定的值来确定该对象在缓存中的生存期。

当出于并发的目的锁定缓存对象时,即使这些对象过了其过期时间,也不会从缓存中被删除。一旦解锁这些对象,会立即将其从缓存中删除(如果过了其过期时间)。 为了防止在解锁过期对象时立即删除这些对象,Unlock 方法还支持延长缓存对象的过期时间。

本地缓存失效

对于本地缓存,有两个互补类型的失效:基于超时的失效以及基于通知的失效。
基于超时的失效
将对象下载到本地缓存之后,这些对象将驻留在本地缓存中,直到其达到缓存客户端配置设置中指定的对象超时值。达到此超时值之后,对象将失效,以便下次请求时可以从缓存群集刷新。
基于通知的失效
如果缓存客户端启用了本地缓存,则还可以使用缓存通知使本地缓存的对象自动失效。根据需要缩短这些对象的生存期,这样可以降低应用程序使用过时数据的可能性。

逐出

为了保持每个缓存主机上可用于缓存的内存容量,AppFabric 支持最近最少使用 (LRU) 逐出。阈值称为水印,用于确保内存在群集中的所有缓存主机之间均匀地分布。

配置化(结构类似MemCachedProvider,支持SessionState

View Code
<?xml version="1.0" encoding="utf-8" ?>
<configuration>

<!--configSections must be the FIRST element -->
<configSections>
<!-- required to read the <dataCacheClient> element -->
<section name="dataCacheClient"
type
="Microsoft.ApplicationServer.Caching.DataCacheClientSection,
Microsoft.ApplicationServer.Caching.Core, Version=1.0.0.0,
Culture
=neutral, PublicKeyToken=31bf3856ad364e35"
allowLocation="true"
allowDefinition
="Everywhere"/>
</configSections>

<!-- cache client -->
<dataCacheClient>
<!-- cache host(s) -->
<hosts>
<host
name
="CacheServer1"
cachePort
="22233"/>
</hosts>
</dataCacheClient>

<system.web>
<sessionState mode="Custom" customProvider="AppFabricCacheSessionStoreProvider">
<providers>
<!-- specify the named cache for session data -->
<add
name
="AppFabricCacheSessionStoreProvider"
type
="Microsoft.ApplicationServer.Caching.DataCacheSessionStoreProvider"
cacheName
="NamedCache1"
sharedId
="SharedApp"/>
</providers>
</sessionState>
</system.web>
</configuration>

示例代码

View Code
// Declare array for cache host(s).
DataCacheServerEndpoint[] servers = new DataCacheServerEndpoint[1];
servers[
0] = new DataCacheServerEndpoint("CacheServer2", 22233);

// Setup the DataCacheFactory configuration.
DataCacheFactoryConfiguration factoryConfig = new DataCacheFactoryConfiguration();
factoryConfig.Servers
= servers;

// Create a configured DataCacheFactory object.
DataCacheFactory mycacheFactory = new DataCacheFactory(factoryConfig);

// Get a cache client for the cache "NamedCache1".
DataCache myDefaultCache = mycacheFactory.GetCache("NamedCache1");

//myDefaultCache.CreateRegion("Area1"); //create region
总体来看,默认支持asp.net sesseion配置,实现代码及配置文件都很简单,并且扩展了缓存区域及缓存标签功能,帮助划分区域及区分数据。尤其是本地缓存功能大大提高了检索效率 (针对不变化数据),同时针对本地缓存过期也提供了过期和逐出机制。不过安装比较麻烦,建议使用Web PlatForm Instraller安装,里面会将指定的更新补丁及PowerShell一并下载更新了。相比Memcached功能强大,但没有Memcached配 置和扩展简单,各有所长。
另外.NET 4.0支持缓存扩展,你可以继承ObjectCache实现自己的缓存机制。

posted @ 2011-07-25 14:17 木漂流 阅读(209) 评论(0) 编辑

在配置web服务器的时候,我们经常遇到这样的问题,由于某些原因,该服务器只能拥有一个公网IP,但是可能需要提供其他机器或者本机上其他webserver的服务器给访问者,同时又不希望使用其他端口,如果在linux,常见的解决方案是使用nginx作为前端server,通过反向代理间接访问其他webserver.IIS7之前,windows上要实现该功能却不是一件容易的事情,但是在IIS7,通过Application Request Routing模块,我们可以轻松实现反向代理.

    本次测试配置的情况,简单起见,只在iis中测试,配置3个网站,第一个”LevenWeb”,使用80端口提供服务,第二个”levenblog”,下面运行着levenblog2.0.9,使用8080端口,第三个”phpweb”,下面有一个”test.php”phpinfo页面(iis7 php配置本文不再详述),本机ip:192.168.1.8,为了测试,我们先进行域名绑定,也就是在leven.com.cn下新增3个子域名,域名绑定如下图所示:

    我们的目标如下:

    http://phpweb.leven.com.cn/ 访问phpweb站点,也就是http://localhost:8081/

    http://levenblog.leven.com.cn/ 访问levenblog站点,也就是http://localhost:8080/

    http://realblog.leven.com.cn/ 访问公网上的levenblog站点,也就是http://leven.com.cn/

    http://localhost/leven 访问levenblog站点,也就是http://leven.com.cn/

    首先前往http://www.iis.net/extensions/ApplicationRequestRouting下载Application Request Routing,然后安装,本次实践使用的是V2.

    安装完毕之后,新建3个站点:

然后找到ARR配置菜单:

开启Proxy:

    然后在levenweb站点下配置反向代理路由,配置可以使用UI界面或者直接修改web.config的模式,本次配置给出uiconfig文件两种方式,个人更喜欢config配置文件模式.


    进入该项,先配置第一项, http://phpweb.leven.com.cn/ 访问phpweb站点,也就是http://localhost:8081/,选择”Add Rules...”:

    然后选择”Blank Rule”

    然后填写如下:

    该参数设置表面ARR将拦截所有请求

    继续在”Conditions”中选择”Add”:

    该设置表面只有HTTP_HOSTphpweb.leven.com.cnURL才能通过该规则,如果您绑定了多个域名,可以根据多次增加或者通过正则表达式的|来间隔

    最后在下面的Action中配置代理路径:

    在这儿,{R:1}代表了MatchUrl中的第一个匹配括号

    同样配置的web.config文件如下:

      <rewrite>
        
<rules>
          
<rule name="phpweb">
            
<match url="^(.*)" />
            
<conditions>
              
<add input="{HTTP_HOST}" pattern="^phpweb.leven.com.cn$" />
            
</conditions>
            
<action type="Rewrite" url="http://localhost:8081/{R:1}" />
          
</rule>
        
</rules>
      
</rewrite>

 

    测试访问http://phpweb.leven.com.cn/test.php,结果如下:

    下面同样可以配置levenblog.leven.com.cnrealblog.leven.com.cn

    Ui界面配置不再说明,配置完成的web.config如下:

 

      <rewrite>
        
<rules>
          
<rule name="levenblog">
            
<match url="^(.*)" />
            
<conditions>
              
<add input="{HTTP_HOST}" pattern="^levenblog.leven.com.cn$" />
            
</conditions>
            
<action type="Rewrite" url="http://localhost:8080/{R:1}" />
          
</rule>
          
<rule name="realblog">
            
<match url="^(.*)" />
            
<conditions>
              
<add input="{HTTP_HOST}" pattern="^realblog.leven.com.cn$" />
            
</conditions>
            
<action type="Rewrite" url="http://leven.com.cn/{R:1}" />
          
</rule>
          
<rule name="phpweb">
            
<match url="^(.*)" />
            
<conditions>
              
<add input="{HTTP_HOST}" pattern="^phpweb.leven.com.cn$" />
            
</conditions>
            
<action type="Rewrite" url="http://localhost:8081/{R:1}" />
          
</rule>
        
</rules>
      
</rewrite>

 

    访问结果分别为:


    我们再添加最后一项,http://localhost/leven 代理到 http://leven.com.cn/

 

          <rule name="leven.com.cn">
            
<match url="^leven/(.*)" />
            
<conditions>
              
<add input="{HTTP_HOST}" pattern="^localhost$" />
            
</conditions>
            
<action type="Rewrite" url="http://leven.com.cn/{R:1}" />
          
</rule>

 

    但是此时访问会出现问题,如下图:

    显然,出现了css丢失等情况,通过查看源码:

    可以看到css的路径有误,不仅如此,所有的img,a标签路径全部出现了错误,代理之后的地址是/leven/xxx,但是源地址仍然是/xxx,因此我们还需要增加一个Outbound Rule

    配置好的config文件如下:

 

        <outboundRules>
          
<rule name="Add application prefix">
            
<match filterByTags="A,Img,Script,Link" pattern="^/(.*)" />
            
<conditions>
              
<add input="{URL}" pattern="^/leven/.*" />
            
</conditions>
            
<action type="Rewrite" value="/leven/{R:1}" />
          
</rule>
        
</outboundRules>

 

    然后刷新:

 


 

    可见路径正确.

    在使用了反向代理之后,编程上也有些地方需要注意了,在取客户端IP的时候,由于多了一层代理,直接是无法获取的,因此,我们需要开启


    然后通过获取Header中的X-Forworded-For字段来取得客户端IP

    从测试来看,ARR是个非常有用的代理模块,能完全满足我们反向代理的需求,不仅如此,ARR还提供了UrlRewrite,ServerFarms,Cache等很多功能,很是值得我们挖掘.

posted @ 2011-07-25 14:15 木漂流 阅读(104) 评论(0) 编辑

2010年9月18日

1. function func() {
            this.name = "huhao";//此变量时私有的,只能在new一个新的对象的时候能够访问,比如var obj= new func(); obj.name是可以访问的,并且也是可以修改的,但是只能在新对象中修改,

   } 

func.age=“11”;    //此变量不能够被继承,只能用func.age来访问

func.prototype.address="安徽省";//此变量不可以直接给 func.address访问,只能给var obj= new func(); obj.address访问,同时在obj.address可以修改的

 

 

结论:

        1.name和address本对象是私有的,不可见的。但是对新构建的对象又是开发的,

        2.age属性是私有的,可见的,不能够被继承

 

posted @ 2010-09-18 15:48 木漂流 阅读(25) 评论(0) 编辑

1. function func() {
            this.name = "huhao";//此变量时私有的,只能在new一个新的对象的时候能够访问,比如var obj= new func(); obj.name是可以访问的,并且也是可以修改的,但是只能在新对象中修改,

   } 

func.age=“11”;    //此变量不能够被继承,只能用func.age来访问

func.prototype.address="安徽省";//此变量不可以直接给 func.address访问,只能给var obj= new func(); obj.address访问,同时在obj.address可以修改的

 

 

结论:

        1.name和address本对象是私有的,不可见的。但是对新构建的对象又是开发的,

        2.age属性是私有的,可见的,不能够被继承

 

posted @ 2010-09-18 15:47 木漂流 阅读(89) 评论(2) 编辑

注:读完本文后请务必接着看完所有回复!  文章是转载的!有些观点是不正确的

JavaScript 是面向对象的。但是不少人对这一点理解得并不全面。

在 JavaScript 中,对象分为两种。一种可以称为“普通对象”,就是我们所普遍理解的那些:数字、日期、用户自定义的对象(如:{})等等。

还有一种,称 为“方法对象”,就是我们通常定义的 function。你可能觉得奇怪:方法就是方法,怎么成了对象了?但是在 JavaScript 中,方法的确是被当成对象来处理的。下面是一个简单的例子:

Js代码
  1. function func() {alert('Hello!');}  
  2. alert(func.toString());  
function func() {alert('Hello!');} alert(func.toString());

在这个例子中,func 虽然是作为一个方法定义的,但它自身却包含一个 toString 方法,说明 func 在这里是被当成一个对象来处理的。更准确的说,func 是一个“方法对象”。下面是例子的继续:

Js代码
  1. func.name = “I am func.”;  
  2. alert(func.name);  
func.name = “I am func.”; alert(func.name);

我们可以任意的为 func 设置属性,这更加证明了 func 就是一个对象。那么方法对象和普通对象的区别在哪里呢?首先方法对象当然是可以执行的,在它后面加上一对括号,就是执行这个方法对象了。

Js代码
  1. func();  

所以,方法对象具有二重性。一方面它可以被执行,另一方面它完全可以被当成一个普通对象来使用。这意味着什么呢?这意味着方法对象是可以完全独 立于其他对象存在的。这一点我们可以同 Java 比较一下。在 Java 中,方法必须在某一个类中定义,而不能单独存在。而 JavaScript 中就不需要。

方法对象独立于其他方法,就意味着它能够被任意的引用和传递。下面是一个例子:

Js代码
  1. function invoke(f) {  
  2.     f();  
  3. }  
  4. invoke(func);  
function invoke(f) {     f(); } invoke(func);

将一个方法对象 func 传递给另一个方法对象 invoke,让后者在适当的时候执行 func。这就是所谓的“回调”了。另外,方法对象的这种特殊性,也使得 this 关键字不容易把握。这方面相关文章不少,这里不赘述了。

除 了可以被执行以外,方法对象还有一个特殊的功用,就是它可以通过 new 关键字来创建普通对象。

话说每一个方法对象被创建时,都会自动 的拥有一个叫 prototype 的属性。这个属性并无什么特别之处,它和其他的属性一样可以访问,可以赋值。不过当我们用 new 关键字来创建一个对象的时候,prototype 就起作用了:它的值(也是一个对象)所包含的所有属性,都会被复制到新创建的那个对象上去。下面是一个例子:

Js代码
  1. func.prototype.name=”prototype of func”;  
  2. var f = new func();  
  3. alert(f.name);  
func.prototype.name=”prototype of func”; var f = new func(); alert(f.name);

执行的过程中会弹出两个对话框,后一个对话框表示 f 这个新建的对象从 func.prototype 那里拷贝了 name 属性。而前一个对话框则表示 func 被作为方法执行了一遍。你可能会问了,为什么这个时候要还把 func 执行一遍呢?其实这个时候执行 func,就是起“构造函数”的作用。为了形象的说明,我们重新来一遍:

Js代码
  1. function func() {  
  2.     this.name=”name has been changed.”  
  3. }  
  4. func.prototype.name=”prototype of func”;  
  5. var f = new func();  
  6. alert(f.name);  
function func() {     this.name=”name has been changed.” } func.prototype.name=”prototype of func”; var f = new func(); alert(f.name);

你就会发现 f 的 name 属性不再是"prototype of func",而是被替换成了"name has been changed"。这就是 func 这个对象方法所起到的“构造函数”的作用。所以,在 JavaScript 中,用 new 关键字创建对象是执行了下面三个步骤的:
  1. 创建一个新的普通对象;
  2. 将方 法对象的 prototype 属性的所有属性复制到新的普通对象中去。
  3. 以新的普通对象作为上下文来执行方法对象。

对 于“new func()”这样的语句,可以描述为“从 func 创建一个新对象”。总之,prototype 这个属性的唯一特殊之处,就是在创建新对象的时候了。


那么我们就可以利用这一点。比如有两个方法对象 A 和 B,既然从 A 创建的新对象包含了所有 A.prototype 的属性,那么我将它赋给 B.prototype,那么从 B 创建的新对象不也有同样的属性了?写成代码就是这样:

 

Js代码
  1. A.prototype.hello = function(){alert('Hello!');}  
  2. B.prototype = new A();  
  3. new B().hello();  
A.prototype.hello = function(){alert('Hello!');} B.prototype = new A(); new B().hello();

这就是 JavaScript 的所谓“继承”了,其实质就是属性的拷贝,这里利用了 prototype 来实现。如果不用 prototype,那就用循环了,效果是一样的。所谓“多重继承”,自然就是到处拷贝了。

JavaScript 中面向对象的原理,就是上面这些了。自始至终我都没提到“类”的概念,因为 JavaScript 本来就没有“类”这个东西。面向对象可以没有类吗?当然可以。先有类,然后再有对象,这本来就不合理,因为类本来是从对象中归纳出来的,先有对象再有类, 这才合理。像下面这样的:

Js代码
  1. var o = {}; // 我 发现了一个东西。  
  2. o.eat = function(){return "I am eating."}  // 我发现它会吃;  
  3. o.sleep = function(){return "ZZZzzz..."}  // 我 发现它会睡;  
  4. o.talk = function(){return "Hi!"} // 我发现它 会说话;  
  5. o.think = function(){return "Hmmm..."} // 我 发现它还会思考。  
  6.   
  7. var Human = new Function(); // 我决定给它起名叫“人”。  
  8. Human.prototype = o; // 这个东西就代表了所有“人”的概念。  
  9.   
  10. var h = new Human(); // 当我发现其他同它一样的东西,  
  11. alert(h.talk()) // 我就知道它也是“人”了! 

posted @ 2010-09-18 15:21 木漂流 阅读(49) 评论(0) 编辑

2010年5月4日

摘要: readonly关键字表示只读域,声明的时候可以不赋值,如:private readonly int i;这个变量可以在构造函数中初始化,也可以默认初始化,但是不能在方法中赋值。而private readonly static int i;这个变量只可以在初始设定或者在静态构造函数中初始化,同样也不可以在方法中赋值。const 静态的不变的常量,只能在声明变量的时候赋值,而且必须赋值阅读全文

posted @ 2010-05-04 17:09 木漂流 阅读(56) 评论(0) 编辑

摘要: class A { private static int i = 10; static A() { Console.WriteLine("Init A"); } public A() { i = 100; Console.WriteLine(i.ToString()); } public static void F() { Console.WriteLine("A.F"); } public vo...阅读全文

posted @ 2010-05-04 16:38 木漂流 阅读(105) 评论(0) 编辑