同步:线程同步,类Java 2
讲讲你对.NET Framework 的理解 | .NET Framework 是一种新的计算平台,它简化了在高度分布式 Internet 环境中的应用程序开发。.NET Framework 旨在实现下列目标: | | 提供一个一致的面向对象的编程环境,而无论对象代码是在本地存储和执行,还是在本地执行但在 Internet 上分布,或者是在远程执行的。 | ·提供一个将软件部署和版本控制冲突最小化的代码执行环境。 | ·提供一个保证代码(包括由未知的或不完全受信任的第三方创建的代码)安全执行的代码执行环境。 | ·提供一个可消除脚本环境或解释环境的性能问题的代码执行环境。 | ·使开发人员的经验在面对类型大不相同的应用程序(如基于 Windows 的应用程序和基于 Web 的应用程序)时保持一致。 | ·按照工业标准生成所有通信,以确保基于 .NET Framework 的代码可与任何其他代码集成。 | =============== | 上面来自于.NET Framework文档 3
· Const/read-only | | 1. const 字段只能在该字段的声明中初始化。 readonly 字段可以在声明或构造函数中初始化。因此,根据所使用的构造函数,readonly 字段可能具有不同的值。 | 2. const 字段是编译时常数,而 readonly 字段可用于运行时常数。 | 3. const 默认就是静态的,而 readonly 如果设置成静态的就必须显示声明。 | 4.const 对于引用类型的常数,可能的值只能是 string、值类型和 null 。 readonly可以是任何类型 | 需要注意的一个问题是: | 对于一个 readonly 的 Reference 类型,只是被限定不能进行赋值(写)操作而已。而对其成员的读写仍然是不受限制的。 | | 4
.NET Generic的理解. | 泛型是 2.0 版 C# 语言和公共语言运行库 (CLR) 中的一个新功能。泛型将类型参数的概念引入 .NET Framework , | 类型参数使得设计如下类和方法成为可能:这些类和方法将一个或多个类型的指定推迟到客户端代码声明并实例化 | 例如,通过使用泛型类型参数 T,您可以编写其他客户端代码能够使用的单个类, | 而不致引入运行时强制转换 装箱操作的成本或风险 . 泛型类最常用于集合,如链接、堆栈、队列、树等, | 其中,像从集合中添加和移除项这样的操作都以大体上相同的方式执行 存储数据的类型无关 5
· 抽象类和接口的区别. | 一、抽象类: | 抽 象类是特殊的类,只是不能被实例化;除此以外,具有类的其他特性;重要的是抽象类可以包括抽象方法,这是普通类所不能的。抽象方法只能声明于抽象类中,且 不包含任何实现,派生类必须覆盖它们。另外,抽象类可以派生自一个抽象类,可以覆盖基类的抽象方法也可以不覆盖,如果不覆盖,则其派生类必须覆盖它们。 | | | 二、接口: | 接口是引用类型的,类似于类,和抽象类的相似之处有三点: | 1、不能实例化; | 2、包含未实现的方法声明; | 3、派生类必须实现未实现的方法,抽象类是抽象方法,接口则是所有成员(不仅是方法包括其他成员); | | 另外,接口有如下特性: | 接口除了可以包含方法之外,还可以包含属性、索引器、事件,而且这些成员都被定义为公有的。除此之外,不能包含任何其他的成员,例如:常量、域、构造函数、析构函数、静态成员。一个类可以直接继承多个接口,但只能直接继承一个类(包括抽象类)。 | 小结: | 类是对对象的抽象,可以把抽象类理解为把类当作对象,抽象成的类叫做抽象类 | 而接口只是一个行为的规范或规定, | 抽象类更多的是定义在一系列紧密相关的类间, | 而接口大多数是关系疏松但都实现某一功能的类中 | |
6
· How to add a cookie/application? | this.Page.Application.Add(string names,object ValueType); | 如何建立Cookie:ASP.NET建立Cookie的标准代码写法是 | HttpCookie myCookie = new HttpCookie("someCookie"); | 这句代码建立了一个名为myCookie的Cookie对象 | | 2. 接收Cookie对象:接收ASP.NETCookie对象的标准代码写法是 | HttpCookie getCookie = Request.Cookies["someCookie"]; | 设置getCookie为一个Cookie对象,它是请求页面中Cookie对象数组中someCookie的子集。如果名为someCookie的Cookie数组不存在,则getCookie的null属性为true。 | | 3. 给Cookie增加键值:ASP.NET增加键值的标准代码写法是 | myCookie.Values.Add("auth", "admin"); | 给名为myCookie的Cookie对象(必须实现建好)增加一个auth键名,其值为admin。 | | 4. 附加键值,使Cookie生效:标准代码格式为 | Response.Cookies.Add(myCookie); | 上句代码把名为myCookie的对象附加到Cookie数组内。注意,在设定Cookie完毕之后一定要加上这句代码才能生效, | | 4. 设定生存期:设置生存期的标准代码形式如下 | myCookie.Expires = DateTime.Now.AddDays(3); | 设定名为myCookie的Cookie对象生存期为当前时间加上3天。需要注意的是,设定Cookie之后如果页面不刷新,是不会显示任何效果的。 | | 5. 获取Cookie的值:获取Cookie值的标准代码格式为 | myCookie.Values["auth"]; | 上句代码可以获取名为myCookie的Cookie对象键名为auth的键值。如果不存在,则返回null | | 7
· Equality,interface与virtual functions, reflectiion | Equality:如果两个对象是相同的类型,并且它们各自带有相同和等值的属性。 | Interface:接口定义了一组方法,没有方法体,可以实现多继承。 | Virtual functions:虚函数,通过基类访问派生类定义的函数.派生类重写基类的函数定义 | reflectiion:反射,提供了封装程序集、模块和类型的对象。 | 8
重载类的重写 | 基类里把重载的每个函数都声明成virtual虚方法,并用public访问修饰符 | 继承类里用同样的签名,加入override,原重载的方法都全部重写一遍,就是重载类的重写. | 9
ASP.NET的页面传值过程./ 界面传值的几种方式 | 页面传值可通过表单提交、<a>链接地址传送、 | Response.Redirect()方式、Server.Transfer()方式。 | Session共享、Application共享、Cookie、 | 10
C++ public/private的定义 | public 公共,加上这个修饰的类或属性,可以在同一个包或者别的包 | private 私有的,加上这个修饰的类或属性,只能在同类里访问 | 11 property 和attribute 的区别 什么是Atrribute 首先,我们肯定Attribute是一个类,下面是msdn文档对它的描述: 公共语言运行时允许你添加类似关键字的描述声明,叫做attributes, 它对程序中的元素进行标注,如类型、字段、方法和属性等。Attributes和Microsoft .NET Framework文件的元数据保存在一起,可以用来向运行时描述你的代码,或者在程序运行的时候影响应用程序的行为。 在.NET中,Attribute被用来处理多种问题,比如序列化、程序的安全特征、防止即时编译器对程序代码进行优化从而代码容易调试等等。下 面,我们先来看几个在.NET中标准的属性的使用,稍后我们再回过头来讨论Attribute这个类本身。(文中的代码使用C#编写,但同样适用所有基 于.NET的所有语言) Attribute作为编译器的指令 在C#中存在着一定数量的编译器指令,如:#define DEBUG, #undefine DEBUG, #if等。这些指令专属于C#,而且在数量上是固定的。而Attribute用作编译器指令则不受数量限制。比如下面的三个Attribute: Conditional:起条件编译的作用,只有满足条件,才允许编译器对它的代码进行编译。一般在程序调试的时候使用。 DllImport:用来标记非.NET的函数,表明该方法在一个外部的DLL中定义。 Obsolete:这个属性用来标记当前的方法已经被废弃,不再使用了。 下面的代码演示了上述三个属性的使用: #define DEBUG //这里定义条件 using System; using System.Runtime.InteropServices; using System.Diagnostics; namespace AttributeDemo { class MainProgramClass { [DllImport("User32.dll")] public static extern int MessageBox(int hParent, string Message, string Caption, int Type); static void Main(string[] args) { DisplayRunningMessage(); DisplayDebugMessage(); MessageBox(0,"Hello","Message",0); Console.ReadLine(); } [Conditional("DEBUG")] private static void DisplayRunningMessage() { Console.WriteLine("开始运行Main子程序。当前时间是"+DateTime.Now); } [Conditional("DEBUG")] [Obsolete] private static void DisplayDebugMessage() { Console.WriteLine("开始Main子程序"); } } } 如果在一个程序元素前面声明一个Attribute,那么就表示这个Attribute被施加到该元素上,前面的代码,[DllImport]施加到 MessageBox函数上, [Conditional]施加到DisplayRuntimeMessage方法和DisplayDebugMessage方法,[Obsolete] 施加到DisplayDebugMessage方法上。 根据上面涉及到的三个Attribute的说明,我们可以猜到程序运行的时候产生的输出:DllImport Attribute表明了MessageBox是User32.DLL中的函数,这样我们就可以像内部方法一样调用这个函数。 重要的一点就是Attribute就是一个类,所以DllImport也是一个类,Attribute类是在编译的时候被实例化的,而不是像通常的 类那样在运行时候才实例化。Attribute实例化的时候根据该Attribute类的设计可以带参数,也可以不带参数,比如DllImport就带 有"User32.dll"的参数。Conditional对满足参数的定义条件的代码进行编译,如果没有定义DEBUG,那么该方法将不被编译,读者可 以把#define DEBUG一行注释掉看看输出的结果(release版本,在Debug版本中Conditional的debug总是成立的)。Obsolete表明了 DispalyDebugMessage方法已经过时了,它有一个更好的方法来代替它,当我们的程序调用一个声明了Obsolete的方法时,那么编译器 会给出信息,Obsolete还有其他两个重载的版本。大家可以参考msdn中关于的ObsoleteAttribute 类的描述。 12
控件和组件的区别 | 控件一般是为了完成特定的展示或特定页面 / 窗体的技术功能,而组件一般指对一些小功能点的封装,封装后的集合(组件)一般具有较独立的功能,可以完成某一项任务 | | 所以控件是为了页面 / 窗体级复用 项目级复用 | | | | 组件更抽象,更通用。我们可以把软件划分为一个个组件,但很少有人说把软件划分为一个个控件。 | 也可以理解为控件是一种特殊的组件。继承于Controls | |
13
Timer属性 | Enabled 用于表示是否 tick 事件 | Interval 用于指定间隔时间 | Tick 指定间隔到期后执行 | 14
MFC消息机制 | 1.标准消息 | 除WM_COMMAND之外,所有以WM_开头的消息。 从CWnd派生的类,都可以接收到这类消息。 | 2.命令消息 | 来自菜单、加速键或工具栏按钮的消息。这类消息都以WM_COMMAND呈现。在MFC中,通过菜单项的标识(ID)来区分不同的命令消息;在SDK中,通过消息的wParam参数识别。 CCmdTarget派生的类,都可以接收到这类消息。 | 3.通告消息 | 由控件产生的消息,例如,按钮的单击,列表框的选择等均产生此类消息,为的是向其父窗口(通常是对话框)通知事件的发生。这类消息也是以WM_COMMAND形式呈现。 从CCmdTarget派生的类,都可以接收到这类消息。 | 15
三层体系结构 | 1:数据数据访问层:主要是对原始数据(数据库或者文本文件等存放数据的形式)的操作层,而不是指原始数据,也就是说,是对数据的操作,而不是数据库,具体为业务逻辑层或表示层提供数据服务. | | 2:业务逻辑层:主要是针对具体的问题的操作,也可以理解成对数据层的操作,对数据业务逻辑处理,如果说数据层是积木,那逻辑层就是对这些积木的搭建。 | | 3:表示层:主要表示WEB方式,也可以表示成WINFORM方式,WEB方式也可以表现成:aspx, 如果逻辑层相当强大和完善,无论表现层如何定义和更改,逻辑层都能完善地提供服务。 | 16 17 18 19 20 21 |