一,什么是CLR:(Common Language Runtime)是一套完整的、高级的虚拟机,它被设计为用来支持不同的编程语言,并支持它们之间的互操作。
CLR 的主要目标:让编程变得简单。
CLR 的主要功能:1,基础功能——那些对其他的特性有广泛影响的功能。包括:垃圾回收,内存安全和类型安全,对编程语言的高级支持。
2,次要功能——那些由基础功能发展而来的、但不是必须的功能。AppDomains 程序隔离,程序安全与沙盒。
3,其他功能——那些运行时环境需要的、但并不依赖基础功能的特性。这些功能帮助我们建立了一个完整的编程环境。
比如:版本管理,调试、性能分析,互操作。
CLR加载器负责装载和初始化程序集、模块、资源和类型。CLR加载器加载尽可能少的这些资源。不像Win32加载器,CLR加载器不会解析和自动加载子模块或程序集。相反,子模块只有当它们真正需要的时候,才进行加载。这不仅缩短了程序初始化时间,而且减少了运行程序消耗的资源。
二,数据类型
值类型:整数,浮点数,高精度浮点数,布尔,字符,结构,枚举
引用类型:对象(Object),字符串,类,接口,委托,数组
除了值类型和引用类型,还有一种数据类型是空类型(null)gv
预定义的类型 :整数,浮点数,高精度浮点数,布尔,字符,对象(Object),字符串
复合类型 :结构,枚举,类,接口,委托,数组
三,判断数是倚数 (num % 2)==1 或 (num & 1) == 1
四,GC三种情况候触发:
1、第一代没足够内存。这是最常见的。
2、调用了GC.Collect()
3、系统内存资源不足。应该是其他进程占了过多内存所致。
五,C#设计模式
1,单列模式 --只实例化一次
2,简单工厂模式 --每个类只做一件事,直接new
3,工厂方法模式 --抽象类里的方法一定是抽象的
--1,抽象(abstract)一个具体实现方法的基类
--2,具体生产类继承重写自己的功能
--3,抽象(abstract)一个工厂基类,带具体方法的基类方法
--3,工厂类继承工厂基类重写方法,去new具体实现类。
--4,调用时先new工厂类,用工厂类去创建一个具体生产类,用具体类调具体实现方法
4,抽象工厂模式 --
六,位运算: 1.位逻辑非 ~ 例如:二进制: 1000 1101 进行位逻辑非运算为:0111 0010
2.位逻辑与& 例如: 二进制:1000 1101 & 0110 1100 等于00001100
3.位逻辑或 | 例如: 二进制:1000 1101 | 0110 1100 等于11101101
4.位逻辑异或^ 例如: 二进制:1000 1101 ^ 0110 1100 等于1110 0001
5.位左移运算<< 例如: 二进制:1000 1101<<3 等于0100 0110 1000
6.位右移运算>> 例如: 二进制:1000 1101>>3 等于0001 0001
七,栈和队列:队列先进先出,栈先进后出
栈是限定只能在表的一端进行插入和删除操作的线性表
队列是限定只能在表的一端进行插入,在另一端进行删除操作的线性表
八,在C#中数组,ArrayList,List区别:
数组 string[] str = new string[3];
优点:是一段连续的存储结构,查找速度快,可以多维。
缺点:声明时必须声明长度和类型。
ArrayList ArrayList arrayList = new ArrayList();
优点:声明时不需要声明长度和类型,自动扩充和收缩。
缺点:不是安全类型,会引发装箱和拆箱,耗性能,只有一维。
List List<int> list = new List<int>();
优点:类型安全,支持泛型的集合类型,容量可以自动扩充和收缩 。
缺点:需要声明类型。
九,Dictionary和HashTable的区别:Hashtable的键值都是object(DictionaryEntry)类型,数据排列是乱序的;
而Dictionary是泛型(KeyValuePair<T, T>),引用类型,按插入顺序排列数据。Hashtable相对于Dictionary,在使用Hashtable需要装箱拆箱操作进行格式转换,
用起来不够方便,不过在大批量数据的随机检索(无规律)时,Hashtable更有优势。
1.HashTable不支持泛型,而Dictionary支持泛型。
2.Hashtable 的元素属于 Object 类型,所以在存储或检索值类型时通常发生装箱和拆箱的操作, 所以你可能需要进行一些类型转换的操作,而且对于int,float 这些值类型 还需要进行装箱等操作,非常耗时。
3.单线程程序中推荐使用 Dictionary, 有泛型优势, 且读取速度较快, 容量利用更充分。多线程程序中推荐使用 Hashtable, 默认的 Hashtable 允许单线程写入, 多线程读取, 对 Hashtable 进一步调用 Synchronized() 方法可以获得完全线程安全的类型. 而 Dictionary 非线程安全, 必须人为使用 lock 语句进行保护, 效率大减。
4.代码测试的时候key是整数型Dictionary的效率比Hashtable快,如果key是字符串型,Dictionary的效率没有Hashtable快。
字典的遍历方式:Dictionary的四种遍历
KeyValuePair,Dictionary.Values,Dictionary.Keys,while
十,反射的实现原理:审查元数据并收集关于它的类型信息的能力。反射个人认为,就是得到程序集中的属性和方法。
十一,Tcp和Udp
udp tcp
是否连接 无连接 面向连接
是否可靠 不可靠传输,不使用流量控制和拥塞控制 可靠传输,使用流量控制和拥 塞控制
连接对象个数 支持一对一,一对多,多对一和多对多交互通信 只能是一对一通信
传输方式 面向报文 面向字节流
首部开销 首部开销小,仅8字节 首部最小20字节,最大60字节
适用场景 适用于实时应用(IP电话、视频会议、直播等) 适用于要求可靠传输的应用, 例如文件传输
优化网络层,UDP分片机制
十二,Tcp粘包和数据粘包发生的情况:
第一种:发送端需要等缓冲区满才发送出去,造成粘包(发送数据时间间隔很短,数据了很小,会合到一起,产生粘包)
第二种:接收方不及时接收缓冲区的包,造成多个包接收(客户端发送了一段数据,服务端只收了一小部分,服务端下次再收的时候还是从缓冲区拿上次遗留的数据,产生粘包)
数据粘包处理:包头存储这个条消息的大小。
发送数据时:多包一起发,不要不停new发送数据对象。
十三,一个网页浏览过程的细节:
1,先进行DNS解析,获取域名的IP地址,(重要细节:浏览器首先要查看DNS缓存和hosts文件,
如果这两个地方都没有域名的IP地址,再向网络发起DNS查询)
2,跟域名所在IP地址进行TCP链接,并发起HTTP请求。
3,服务器回应HTTP请求,将所请求资源发回浏览器。
4,重要细节:浏览器最初获得的是一个HTML文档资源,这个HTML文档里面还将引用很多其它资源,比如页面上的图片,引用的js,css外部文件等;浏览器获取这个HTML文档之后,进行解析,
让后继续向服务器发送请求其它资源的HTTP请求;浏览器要打开一个HTML页面,需要向服务器
请求很多不同的资源,有的时候这些资源还存放在不同的服务器上,比如一些公用js文件;
有的时候这些资源在本地有缓存,如果没有过期,浏览器直接读取换成,加快页面打开速度;