码迷,mamicode.com
首页 > Windows程序 > 详细

C#理论知识 笔试准备 Day1

时间:2015-12-22 21:23:46      阅读:281      评论:0      收藏:0      [点我收藏+]

标签:

剩下十天左右时间,准备一下笔记题,也巩固一下基础知识。本想万一找不到合适的就在家脱产学到过年算了,后来想想确实没必要,就算年前不好找工作,无非是钱多钱少、路远路近的问题。实在找不到满意的,可以先凑合着工作两三个月,到转正时如果薪资什么的还达不到要求,到时年初比较好找工作。

对着书也看不出什么来,就在网上找找笔试面试题,简单的看看就算了,有些经典的有代表性的,随手记录下来。

主要是看园内”汉城节度使“去年四月的长文,边看边记一些感想,有一些复制和删改。其余查的资料就不一一标明出处了。

 

一、喜闻乐见的四大访问方式

private : 私有成员, 在类的内部才可以访问。
protected : 保护成员,该类内部和继承类中可以访问。
public : 公共成员,完全公开,没有访问限制。
internal: 当前程序集内可以访问。

其它都好理解,但这个程序集经常看到,具体说不上来。。。找到几篇资料,汇总一下,大概了解了。

protected限定的是只有在继承的子类中才可以访问,可以跨程序集   
internal限定的是只有在同一个程序集中才可以访问,可以跨类  
对于一些大型的项目,通常由很多个DLL文件组成,引用了这些DLL,就能访问DLL里面的类和类里面的方法。
比如,你写了一个记录日志的DLL,任何项目只要引用此DLL就能实现记录日志的功能,这个DLL文件的程序就是一个程序集。
情形一:比如MyCompany.MyProject.DAL里的若干个.cs文件,编译得到DAL程序集,而MyCompany.MyProject.BLL里的若干.cs文件,编译得到BLL程序集。
情形二:同样是MyCompany.MyProject.DAL空间里的,我可能有一个用于支持SQL Server的程序集DAL_SQLServer.dll,可能还有一个支持Oracle的程序集DAL_Oracle.dll。
命名空间与程序集没有一一对应的关系,关键还是看你的项目组织和输出

 

二、页面传值

1、可以通过url(增加&name=123&mail=abc.com之类)

2、可以通过cookie(先在这边存好cookie,到了新页面再取相应的cookie)

3、可以通过Session(和cookie类似,区别在于cookie是浏览器端的,用js就能实现。而Session是服务器端的,如果是静态页面,要用ajax去服务端取。另外,高并发时Session可能会丢失)

4、通过Cache(用的比较少,和Session类似,但Sesseion是会话级别的,Cache的应用程序级的。一般重复的、公共的用Cache, 单独的、私有的用Session)

 

三、堆/栈、值/引用、结构/类、装箱/拆箱

这几种东西翻来翻去都是玩一个概念,就是两种基本存取类型,应该也是比较爱考的。

1、堆/栈、值/引用:

栈是编译期间就分配好的内存空间,因此你的代码中必须就栈的大小有明确的定义;局部值类型变量、值类型参数等都在栈内存中。
堆是程序运行期间动态分配的内存空间,你可以根据程序的运行情况确定要分配的堆内存的大小。
1.将一个值类型变量赋给另一个值类型变量时,将复制包含的值。引用类型变量的赋值只复制对对象的引用,而不复制对象本身。
2.值类型不可能派生出新的类型:所有的值类型均隐式派生自 System.ValueType。但与引用类型相同的是,结构也可以实现接口。
3.值类型不可能包含 null 值:然而,可空类型功能允许将 null 赋给值类型。
4.每种值类型均有一个隐式的默认构造函数来初始化该类型的默认值。 

按我理解,引用类型放在动态分配的内存(堆)中,只存取地址的取用。值类型是实实在在的值,放在规划好的内存空间(栈)中,存取的是具体的值。

奇葩点1:所有的值类型都继承自System.ValueType。而System.ValueType却是一个引用类型。

奇葩点2:String类型直接继承自Object,这使得它成为一个引用类型。一个字符串一旦被创建,我们就不能再将其变长、变短、或者改变其中的任何字符。

给字符串赋值其实相当于是重新生成一个新字符串,所以在大循环中,要用StringBuilder来代替String。

 

2、结构/类

Class可以被实例化,属于引用类型,是分配在内存的堆上的。类是引用传递的。
Struct属于值类型,是分配在内存的栈上的。结构体是复制传递的。Int32、Boolean等都属于结构体。

平时常用的都是类,结构比较少用。类肯定是引用的,记住了类,知道结构是和它反过来的就容易记了。

 

3、装箱/拆箱

装箱:从值类型接口转换到引用类型。
拆箱:从引用类型转换到值类型

装箱就是把一个值类型直接赋给object类型。

拆箱反过来,但要加个显式的强制转换,像(int) obj,转换失败还会报错

 

四、.NET/C#

这也是老生常谈了。

.NET是一个平台/框架,号称是支持所有语言,全都可以拿到CLR来编译。但实际上除了自家的C++、VB、C#、F#之外,没见到其它公司什么语言整合进来,占大半江山的PHP和JAVA就更不可能放在.NET里面了(就算技术上行的通,人家也要百般阻挠啊,不然全都在你这玩了,其它人全喝西北风啊),所以还是个自娱自乐的货。

C#就是一些if、while、加减乘除、定义变量之类非常基本的语法,稍高级一些的各种方法,都是.NET框架的

 

五、GC垃圾回收

1、一个对象没有被任何对象引用时,就会被回收,但不是马上回收,而是由GC垃圾回收机制根据一定规则来处理,可手动运行GC.Collect()强制处理一下。

2、非托管资源GC不会回收,必须手工回收。如FileStream就要调用Dispose()回收,可使用using(){}来自动回收。

 

六、try/catch/finally

一个经典的坑就是try里面的return和finally

static void Main(string[] args){
    Console.Write(GetIt());
}

static int GetIt(){
    int i = 1;
    try{
        i++;
        Console.Write("a");
        return i;
    }
    finally{
        Console.Write("b");
        i++;
    }
}

输出的是ab2,因为finally会在try执行完后仍然执行,即使try有return,也会“卡”在那里等finally执行完,并且不影响return的值。

所以,通常在finally中执行Dispose(),这样,即可以保证不管报不报错都会释放资源,而且不影响return要用的值(会暂存起来),否则在return前就Dispose()了岂不是会报错?实际上并不会

 

七、

 

C#理论知识 笔试准备 Day1

标签:

原文地址:http://www.cnblogs.com/liuyouying/p/5067962.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!