1. 比较两个集合是否相等
方法:a、如果两个集合的items 是相同引用的对象,则直接使用sequenceEqual 方法。
b、如果两个集合的items不是相同引用的对象,则对象的类型需要实现
IEquatable<T> 接口,后使用sequenceEqual方法
2. 控制翻转(inversion of control)是一种模式,依赖注入是实现了这种模式的方式
如果一个组件是以接口的形式写成的,他对外暴露的是接口,至于使用这个组件的其他组件怎么实现这个接口就是自己决定了,这是发生了控制权从此组件向其他组件翻转的情况。依赖不再是基于此组件的,而是基于后面的注入了。
3. 异步与多线程
异步用于IO密集的场景,由于存在直接读取内存的存在(DMA)
多线程用于CUP密集的场景
4. 方法重入
指多线程调用时,同一个方法被多个线程同时调用的情况
5. 委托绑定实例方法和静态方法的区别
_target,_methondPtr 是委托类型的两个成员变量
当实例方法时:_target 绑定为方法所在类型的某个实例
当静态方法时:_target 绑定为null
_methondPtr 两者都绑定为方法的地址
6. 当一个类中有很多事件的时候,使用stem.ComponentModel.EventHandlerList
可以有效减小对象的大小
7. 纤程
完全有程序员控制,操作系统不知道其的存在, 一个线程可以包含0个或者多个纤程。 在CRL 中创建的一个线程不一定对应这操作系统的一个线程,也可能对应着一个纤程
8. 线程本地存储(Thread Local Storage)
存储在线程块中的一个结构,用来存放该线程内共享的数据,进程内的其他线程不能访问
9. 线程同步
每个分配在堆上的对象都有两个额外字段,一个是类型指针,一个是同步索引。类型指针用于找到给对象,同步索引用于索引同步块数组中的同步块。
当一个对象用于同步锁时,其同步索引被指向一个可用的同步块,如果一个线程试图进入同步时,会通过同步索引找到其同步块,然后检查同步对象的同步块是否在被其他线程使用,如果在使用,就等待。
10.为什么值类型不能用于同步锁
由于.net中的同步机制使用的是同步块,而值类型是分派在堆栈上的,其没有同步索引,也没有同步块。使用lock关键字,将会直接导致编译错误。
使用Moniter的话,其实是使用了装箱,但是会导致运行时错误,因为每次装箱都会在堆上产生不同的对象。
11. 数据访问接口
OLEDB(Object Linking and Embedding,Database,又称为OLE DB或OLE-DB)
ODBC(Open DatabaseConnectivity,ODBC)开放数据库互连
11.Property(属性) 与Attribute(特征)的关系
Property:是面向对象编程层面上的概念, 比如抽象一个Car 类, 那么车的
速度, 颜色 等就是Property。
Attribute:是编程语言文法层面上的概念, 例如标示A类和B类有一下区别,就可以给他们加上特征。
12. WPF中zaml文件中x:Class=” ”的内容是告诉编译器将zaml文件编译成C#类的名称,这个名称用于和behind cold 的类合并的。
13.如何在System.Timers.Timer的回调函数中传递参数?
思路: 采用匿名方法传递参数
Timer timer=new Timer();
timer.Elapsed += new ElapsedEventHandler((s, e) => { Callbcke(s, e, param); });
其中param为要传递的参数。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/14830.html