C#理论知识 笔试准备 Day1

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

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

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

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

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()了岂不是会报错?实际上并不会

七、

时间: 2024-10-10 02:50:38

C#理论知识 笔试准备 Day1的相关文章

.NET理论知识 笔试准备 Day3

一.Base64编码 在项目中常用到Base64编码,有些是传值到后端,有些是对接API要求,一直以为Base64是像MD5一样的加密方式(因为编码后像乱码一样)... 原来,Base64是把0~63用A~Z,a~z,0~9以及+./共64个个字符来表示 把字符长度除以3,不足的补0,注意这里的“0”不是Base64对应的“A”,而是“=”,所以经常我们看到ed2k之类的下载地址后面有一两个= 要求被编码字符是 8bit 的,所以须在 ASCII 编码范围内,\u0000-\u00ff,中文就不

.NET理论知识 笔试准备 Day2

随便看到什么就记录什么吧 一.MVC的路由规则 有URL如:http://www.cnblogs.com/leo/2014/5/20/how-mvc-ruotes.html,请写出路由规则.(对应的controller中的action定义如下) public ActionResult Details(string username, int year, int month, int date, string title) 答案: name: "1111111111", routeTem

TestNG学习-001-基础理论知识

此 文主要讲述用 TestNG 的基础理论知识,TestNG 的特定,编写测试过程三步骤,与 JUnit4+ 的差异,以此使亲对 TestNG 测试框架能够有一个简单的认知. 希望能对初学 TestNG 测试框架的亲们有所帮助.若有不足之处,敬请大神指正,不胜感激! TestNG是什么?TestNG是一个灵感来自于 JUnit 和 NUnit 的一个设计用来简化广泛的测试需求的开源自动化测试框架,其引入了一些新的功能,使其功能更强大,而且易于使用,但是 TestNG 不是 JUnit 的扩展.它

堆和栈的理论知识

一.预备知识-程序的内存分配       1. 一个由c/C++编译的程序占用的内存分为以下几个部分 1.栈区(stack)-由编译器自动分配释放,存放函数的参数值,局部变量的值等.其操作方式类似于数据结构中的栈.2.堆区(heap)-一般由程序员分配释放,若程序员不释放,程序结束时可能由OS回收.注意它与数据结构中的堆是两回事,分配方式倒是类似于链表,呵呵.3.全局区(静态区)(static)-全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域,未初始化的全局变量和未初

JDBC编程理论知识(1)

1.SUN公司为统一对数据库的操作,定义了一套Java操作数据库的规范,称之为JDBC 2.JDBC全称为:Java Data Base Connectivity(java数据库连接),它主要由接口组成. 组成JDBC的2个包: (1)java.sql.*; (2)javax.sql.*; 3.JDBC在程序中的位置: 4.JDBC的六个固定步骤 1,注册数据库驱动[利用反射] 2,取得数据库连接对象Connection 3,创建SQL对象 4,执行SQL命令,并返回结果集 5,处理结果集 6,

Android初级教程对大量数据的做分页处理理论知识

有时候要加载的数据上千条时,页面加载数据就会很慢(数据加载也属于耗时操作).因此就要考虑分页甚至分批显示.先介绍一些分页的理论知识.对于具体用在哪里,会在后续博客中更新. 分页信息 1,一共多少条数据 select count(*) from blacktb; 性能低下 原因: sql解析器先查询数据字典,把*转成所有的列名和列的类型 然后把每行数据提取出来 最后统计多少行数据 select count(常量) from blacktb; 高性能的查询 不需要每行的记录,只需要行数 2,指定每页

Winsock网络编程笔记(4)----基本的理论知识

前面的笔记记录了Winsock的入门编程,领略了Winsock编程的乐趣..但这并不能算是掌握了Winsock,加深理论知识的理解才会让后续学习更加得心应手..因此,这篇笔记将记录一些有关Winsock的基本理论知识,由于是一篇笔记,鉴于看书速度有限,主要内容会慢慢地填入..错误在所难免的,希望看客更正..(*^__^*) 嘻嘻…… Winsock网络编程笔记(4)----基本的理论知识,布布扣,bubuko.com

数据库入门理论知识介绍

数据库入门理论知识介绍 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 前言: 1.目前90%以上的公司面临的运维的瓶颈都在后端 最常见的2大瓶颈就是: 1>.数据库(极难扩展): 2>.存储: 所以说做互联网的运维工程师要是把以上两点问题解决就可以轻松的搞定整个架构 2.什么是数据库: 查百度上有长篇大论了一下数据库特点,我们可以简单的理解: 数据库就是一个存放数据的仓库,这个仓库按照一定的数据结构(数据结构是指数据的组织形式或数据之间的联系)来组织,存储的,我们可以通过数

ipv4理论知识2-分类编址、ip分类、网络标识、主机标识、地址类、地址块

分类编址 ipv4的体系结构中有分类编址和无分类编址(后续会介绍到),在分类编址时,ipv4地址分为A.B.C.D.E这5类.每类占用的IP比例和个数如下图: ipv4分类识别 计算机以二进制方式存储ipv4地址,在这种情况下可以和方便的写出一种算法,通过一个连续检查过程来查找出该ip地址的类别.流程图如下: 网络标识和主机标识 对于A.B.C类IP地址,都可以划分为网络标识和主机标识两部分.其中网络标识和主机标识的长度随地址类别的不同变化.网络标识和主机标识其实很好理解就相当于我们使用的电信的