Shenghe's Blog

我的照片
姓名:

I worked in Aspen Iechnology Inc. My work focus on InfoPlus.21

2009年5月21日星期四

CLS rules

Let me distill the CLS rules to something very simple. In the CLR, every member of a type is

either a field (data) or a method (behavior). This means that every programming language

must be able to access fields and call methods. Certain fields and certain methods are used in

special and common ways. To ease programming, languages typically offer additional abstractions

to make coding these common programming patterns easier. For example, languages

expose concepts such as enums, arrays, properties, indexers, delegates, events, constructors,

finalizers, operator overloads, conversion operators, and so on. When a compiler comes

across any of these things in your source code, it must translate these constructs into fields

and methods so that the CLR and any other programming language can access the construct.


2009年5月20日星期三

checklist for being active

Checklist for being active

1, be active to work with QE to fix defects and verify defects.

2, be active to ask other developers to help and discuss when you meet some difficult technology problems

3, be active to report your status and plan to your boss. Be active to do preparation before your vocation.

4, be active to improve the test case against your product

5, be active to study product knowledge from QE and other ways

6, be active to share your experience with others

7, be active to be a mentor if a new partner come into your group. Help them to study the coding style, product knowledge, the architecture, company policy

.........................


2009年5月15日星期五

The dangers of large object heap

There are two kinds of segments in CLR managed heap.

Small object heap is used for storing small object whose size is less than 8500 kb. When the GC collects dead object, it will compact the SOH by moving the objects.

Large object heap is used  for string large object whose size is more than 8500 kb. After GC collects dead objects, it will not compact the LOH, because moving large object cost a lot.

So if you don’t take carefully to use large objects. It will cause a lot of memory fragments. This might cause the exception of OutOfMemoryException.

 

If you are interested in this topics, please read these post:

http://msdn.microsoft.com/en-us/magazine/cc534993.aspx

http://www.simple-talk.com/dotnet/.net-framework/the-dangers-of-the-large-object-heap/

 


This e-mail and any attachments are intended only for use by the addressee(s) named herein and may contain legally privileged and/or confidential information. If you are not the intended recipient of this e-mail, you are hereby notified any dissemination, distribution or copying of this email, and any attachments thereto, is strictly prohibited. If you receive this email in error please immediately notify the sender and permanently delete the original copy and any copy of any e-mail, and any printout thereof.

慎用Reflection

慎用Reflection, 因为会失去类型安全性,毕竟你用Reflection 创建的实例返回的都是object

可以考虑在很必要使用Reflection的时候使用Custom Attribute,这样更加安全,NUnit在实

现的时候就是用了这样的技术

2009年5月6日星期三

What is metadata in .NET?

In brief, metadata is a set of data tables that describe what is

defined in the module, such as types and their members. In addition, metadata also has tables

indicating what the managed module references, such as imported types and their members.

Metadata is a superset of older technologies such as Type Libraries and Interface Definition Language (IDL) files.

 

2009年5月5日星期二

关于掌控会议

关于掌控会议

 

一提开会,很多人就头大,觉得既费时间,又解决不了问题。令人讨厌的会议,多半目的不明、效率不高,缺乏主题控制和会议规则,造成东拉西扯,时间拖得很长,到最后,还没有个相关结论,等会开完了,人也散了,才发现问题并没有解决。

 

  ——做任何事情都要有一个目的,所以开会的时候,开场白就要把会议的目的说清楚,让大家围绕这个主题展开讨论,以免跑题,这是游戏规则。打算花多长时间,解决哪些问题,这都是要预先讲明白的。

 

  ——然后,主持人需要提出流程建议,来推动会议的进程。比如昨天我提议用头脑风暴的方式,让每个人都写出三条自己认为最主要的问题,然后圈定其中重叠最多的三条以便集中讨论,不然大家你一言我一语,会就开不完了。这方面的设计,主持人最好在会前就先想好。

 

  ——在讨论过程中,主持人需要不断地去澄清并确认各方的观点,比如昨天的会上,当我们收集完大家的纸条,列出最重要的三个问题后,我就问大家是否同意这是最重要的三条?

 

  ——当大家意见僵持不下,或者众说纷纭的时候,主持人要推动各方达成协议,比如昨天会上讲到费用,你希望由你来决定最低额度,而苏浅唱则希望通过小组讨论来决定,最后陈丰做了个主,不需要到小组会上讨论了,就由小区经理决定。

 

  ——最后,主持人要做出总结,主要是一个SMART的解决方案,我们今天的会议做了什么决定,在这个决定中,每个人的任务是什么,其中要有下一次的跟进计划。

 

  像你这样到了经理级别的,开会要有明确目的、最终要落实一个解决问题的方案,这都不需要提醒了,估计主要需要注意的地方就是怎么控制好会议过程,特别是当对方和你意见不一致的时候,怎么去说服人家接受你的观点、跟你合作。

 

  这中间,沟通技巧比较重要,因为很多时候,当对方接受了你这个人,你的观点就更容易被接受。假如因为你的方式和态度使得他讨厌你,你的观点再正确,他也可能就是不理你。

 

  在沟通中,首先,尊重对方是基本的,得维护对方的自信。

 

  你看那些老鸟,要说人‘不是’的时候,通常喜欢先说几句对方的好处,然后才开始说‘不是’。用词也有个讲究,比如‘你怎么总听不进不同意见,这话肯定刺激人,‘我们是不是可以参考一下不同意见’就和缓一些,一样能把意思表达出来,不说‘你’,说‘我们’,意思咱俩是一个TEAM的。

 

  有的经理在沟通中和下属发生争吵,通常是因为他把下属一下就打击得太厉害,或者干脆不够尊重下属。比如经理一上来,就给下属列了一二三四五六七条不对的地方,也许你说的全是事实,可下属就会问你了,‘老板,我怎么觉得我都一无是处了,那我还有没有一条做得对的地方呀?’再比如,经理开口就说‘你怎么老是拖我们组的后腿’,这时候下属顶牛就不奇怪了,‘我怎么拖后腿了?去年我还是南区的TOP SALES!’;

 

  ——聆听很重要,听比说更高级。聆听是一个动作,更是一种态度,你用心地听,能让对方觉得你重视他的意见,至少给了他讲的机会;

 

  ——不要被动地听,要去理解、澄清,并给予回应。不仅听明白对方的语言,而且要听明白语言背后深层的观点和动机。这个时候,可以使用这样的词儿,‘我明白你的意思了’,‘真的不容易’,‘那么大的挫折确实令人沮丧’,‘这套方案很复杂,这么短时间要赶出来,压力一定很大’,‘我可不可以这样理解……’,‘你的意思是……’这样做的好处是让说的人感受更好,平复他不痛快的情绪,也为你表达自己的不同观点做好铺垫;

 

  ——但是,要注意,你理解他不代表你同意他的观点,比如昨天的会上,当销售们不愿意两周对一次完成进度的时候,陈丰就表达了这样一个意思:我理解两周对一次进度有点麻烦,但是该做还是得做;

 

  ——表述观点的时候,要陈述事实,基于事实沟通。比如应该说‘按计划,我的任务是联系会议场地和酒店住宿,但负责确认客户名单和安排机票的两位同事因为有别的事情,把他们的活也给了我,我忙不过来’。而不该说‘什么都要我一个人做,我做不了’。这样能避免人与人之间的对立冲突,对事不对人的意思,尤其碰到对方个性强不好讲话的时候,更要注意。

 

  假如是想表扬人,具体地陈述事实,会显得你的表扬很诚恳,而且你真的注意到了人家的贡献意味着什么。我们来比较一下,‘你们干得不错’,‘通常需要三周才能完成的标书,你们仅用了一周就完成了,而且质量很高,这个客户本来是出了名的难对付,这回却特意打电话给我们表示满意。’前者是笼统的表扬,有时候当头的言不由衷地胡乱表扬,一边和人家握手,一边眼睛都不知道看到哪个方向去了,下属能看穿他的敷衍,这样的表扬只能打击士气,没有也罢。而后者,很具体地说出了任务有多难、结果有多么出色,让对方感到说话的人是真的知道我们吃了多少苦头,我们的成功来之不易,因而觉得所有的付出都是开心值当的;

 

  ——分享感受是沟通的好办法,比如昨天会前我看到你压力比较大,我就说,‘别担心,新经理头六个月都这样’,这就是我和你分享我自己刚升经理时的感受,这能让对方感到一种关怀和理解,拉近双方的心理距离,从而使沟通更容易;

 

  ——在讨论过程中,要注重互动,通过促进参与,来谋求协助和承担,别什么主意都你一个人拿了,多问问大家有什么建议。一般人有这样的特点,当他参与了某事,他会更加热心,特别是对于那些由他贡献的点子,他会愿意主动承担更多的责任。咱们看看那些FANS就知道了,FANS不拿工资,可他会主动上街为自己的偶像拉票,偶像获胜FANS比经纪人还兴奋,因为他参与了;

 

  ——最后是提供支持,比如陈丰昨天在会上就对你说需要支持可以找他,他这么说,至少你心里多少会感到踏实一点温暖一点,对吧?你注意观察一下,级别高的老板往往在谈话中会主动问你,‘我能为你做什么?’‘我怎样做才能帮到你?’”

 


关于授权

授权有哪些依据呢?

 

  ——员工的能力:包括他的技巧、判断力、经验等。能力强的可以更多地授权;

 

  ——员工的人品:包括他是否值得信赖、他的责任心如何,比如我们有时候会说这个难题可以交给某某,他肯定能搞定,而且他嘴严靠得住,这个‘嘴严靠得住’,就是关于人品的评价。又比如你提到你怀疑有的人根本没把钱用到客户身上,这样的人你自然不愿意授权,而想盯得紧一点;

 

  ——风险的大小:对经理而言,这件事情有多重要?成本有多大?比如我们会听到做经理的说,这事儿还是我自己来跟吧,这个季度我们组就指望这张单子救命了。经理为什么要自己跟呢,因为这个单子对他来说分量很重,他把宝都押在这张单子上了,输不起。又比如200元的请客费用就可以授权,因为成本不高,就算完全花错地方了,不过是区区200元。

 

授权的程度

——最被动最没有经验的员工是坐在那里,等主管吩咐他干什么他才去干什么,有点像我们说的算盘珠子拨一拨动一动,有的甚至还想着往外推活,这是主动性等级最低的级别;

 

     ——好一点的员工,看到主管很忙,或者组里别的员工碰到困难了,会主动问主管,我能干些什么?我怎样做能帮到别的同事?这是高级一点的主动性级别,当低级别的员工比如一个小助理能做到这一点,算得上态度较好,观念尚可;

 

   ——再有点想法的员工,会在请示怎么办的时候,提出自己的建议和看法,老板我想到了两个办法您看哪一个更好,这样老板能更省心,因为员工是让他做选择题而不是问答题了,员工也因而更容易以最快的速度得到老板的指示,这个主动性级别就更高了;

 

     ——继续往上走,员工看到问题,会采取行动去解决,并及时主动汇报,让主管知道发生了什么、怎么处理的、结果如何;

 

     ——最高级别的授权是通过最高级别的主动性表现的,员工遇到问题,他可以自己直接采取行动无需报告。当老板觉得某某特别信得过,就会对他说这类事情你自己看着办,不用请示报告了,老板甚至会对别的员工说,以后这类事情,你们不用来找我,让某某决定就行了。


2009年5月4日星期一

高潜力人才

高潜力人才的头一条就是判断力好:

1, 先于别人识别风险和机会,并采取行动和预防措施

2, 面临复杂的环境和问题,能迅速抓住问题关键

3, 正确解读他人的动机和欲望,对方要的是什么,他在乎的是什么,你都得有个正确的判断

第二就是用不满足现状

Initialization in .NET

初始化问题
例如
class SomeType
{
          private int a = 3;
          private string name = "cao";
          private double b = 9.9;
         
          public SomeType(){}
         
          public SomeType( int a ){}
         
          public SomeType( string name ){}
}

这种初始化成员变量的方式是在构造函数中初始化的简单写法
这样的初始化最终会在三个构造函数中产生相同的初始化代码

Inside enum

enum Color {

   Red,       // Assigned a value of 0

   Green,     // Assigned a value of 1

   Blue,      // Assigned a value of 2

   Orange     // Assigned a value of 3

}

     

When an enumerated type is compiled, the compiler automatically turns each symbol into a constant field of the type. For example, the compiler treats the Color enumeration shown previously as if you had written code similar to this:

struct Color : System.Enum {

   public const Color Red    = (Color) 0;

   public const Color Green  = (Color) 1;

   public const Color Blue   = (Color) 2;

   public const Color Orange = (Color) 3;

}