当前位置:
文档之家› C#网络编程复习资料汇编(学生)
C#网络编程复习资料汇编(学生)
where i < 4 select i;
6、简述几种常见的异步编程模型。 答:
(1)传统的异步编程模型(APM) 这种模式也称之为 IAsyncResult 模式。在这种设计模式中,异步操作要求通过以 Begin 和 End 为前缀的方法对实现异步。调用以 Begin 为前缀的方法后,应用程序可以继续执行其 后面的代码,同时异步方法在另外一个线程上执行。当异步操作完成后,系统会自动调用以 End 为前缀的方法处理异步操作的结果。 (2)基于事件的异步编程模式(EAP) 在这种设计模式中,异步操作至少需要一个以 Async 为后缀和一个以 Completed 为后缀 的事件配对共同表示。当以 Async 为后缀的异步方法完成工作后,它会自动触发以 Completed 为后缀的事件。 (3)基于任务的异步模式(TAP) 这种模式基于任务(Task 和 Task(TResult))驱动来实现。该模式只使用一个方法就可以 表示异步操作的执行和完成,而且可以表示任意的异步操作任务。 (4)改进的基于任务的异步模式 使用 async、await 关键字以及 Task.Run 方法提升 TAP 的易用性和性能。
无论是普通方法,还是使用 async 和 Task 联合签名的没有返回值的异步方法或者使用 async 和 Task(TResult)联合签名的有返回值的异步方法,都可以将其作为任务来执行。不 论是普通方法还是异步方法,当方法内的语句较少时,都可以直接使用匿名方法通过 Lambda 表达式来实现。 (2)利用 Task.Run 隐式创建和执行异步任务 Task 类的静态方法 Run 可以使用的默认的任务调度程序在线程池中通过后台执行指定 的任务。 (3)利用 async 和 await 关键字隐式创建异步任务 用 async 和 await 关键字隐式调用 Task 或 Task(TResult)类的构造函数创建异步任务, 可以避免交互时的界面停顿的情况,但它们修饰的异步方法不会创建新的线程,它只表示在 当前线程中异步执行指定的任务。 (4)利用 WPF 控件的调度器隐式创建和执行任务 每个 WPF 控件都有一个调度器(UI 线程),可以通过调度器的 InvokeAsync 方法在当前 UI 线程中通过委托异步执行指定的任务。 (5)显式调用 Task 或 Task(TResult)类的构造函数创建任务 当需要使用单独的线程执行任务时,可以显式调用 Task 或 Task(TResult)类的构造函 数创建任务对象,再调用其 Start 方法启动该对象。
线程中断。被锁定的代码块称为临界区。lock 语句的实现原理是进入临界区之前先锁定某 个私有对象(声明为 private 的对象),然后再执行临界区中的代码,当代码块中的语句执行 完毕后,再自动解除该锁。
3、简述进程、应用程序域与线程之间的区别与联系。 答:
(1)进程是操作系统的基本管理单元。执行某个程序时,操作系统将程序加载到内存中, 为其分配运行时所需要的资源,并对这些资源进行基本的内存边界管理。多进程的资源消耗 大、控制细节复杂。
2、简述 C#实现多线程资源同步的几种机制。 答:
C#多线程中实现资源同步主要是通过加锁或者原子操作来实现。 (1)用 volatile 修饰符锁定公共或私有字段。 利用该修饰符可直接访问内存中的字段,而不是将字段缓存在某个处理器的寄存器中。 这样做的好处是所有处理器都可以访问该字段最新的值。 (2)用 Interlocked 类提供的静态方法锁定局部变量。 Interlocked 类通过加锁和解锁提供了原子级别的静态操作方法,对并行执行过程中的 某个局部变量进行操作时,可采用这种办法实现同步。 (3)用 lock 语句锁定代码块 C#提供了一个 lock 语句,该语句能确保当一个线程完成执行代码块之前,不会被其他
不对称加密特点:使用一个需要保密的私钥和一个可以对任何人公开的公钥。用公钥加密的 数据只能用私钥解密,反之,用私钥加密的数据只能用公钥解密;私钥加密算法使用长度可 变的缓冲区,因此无法使用流。 不对称加密的优点:更不容易被攻击。 不对称加密的缺点:由于无法使用流,因此不适合加密大量数据。
5、下面的代码使用 Lambda 表达式查询泛型列表 List<T>,请写出与之等价的非 Lambda 代 码形式: List<int> numberList = new List<int> { 5, 4, 1, 3, 9, 8, 6, 7, 2, 0 }; var q1 = numberList.Where(i => i < 4); 答: List<int> numberList = new List<int> { 5, 4, 1, 3, 9, 8, 6, 7, 2, 0 }; var q2 = from i in numberList
(2)一方面,应用程序域是在应用程序级别使用的功能,是一个轻量级的进程管理。可 将进程中的每个应用程序域都可以看做一个子进程。一个进程可以包含一个应用程序域,也 可以同时包含多个相互隔离的应用程序域。使用应用程序域比直接使用多进程实现进程管理 时速度更快、资源消耗更少、安全性更高。
另一方面,应用程序域为版本控制、安全性、可靠性和托管代码的卸载形成边界隔离。 执行应用程序时,所有的托管代码都加载到一个应用程序域中,由一个或多个托管线程执行。 应用程序域与线程之间不具有一一对应的相关性。在任意时刻,一个应用程序域中可以通知 执行多个线程。同时,一个线程还可以自由跨越应用程序域的边界。另外,应用程序域是相 互隔离的,一个应用程序域无法直接访问另一个应用程序域的资源。
36、从业务实现的角度看,并行编程模型分为数据并行和任务并行。 37、任务并行库是基于任务的并行编程模型。 38、数据并行和任务并行都是利用 System.Threading.Tasks.Parallel 类来实现。该类的 For 和 ForEach 方法用于数据并行,Invoke 方法用于任务并行。 39、任务调度是通过 System.Threading.Tasks 命名空间下的 TaskScheduler 类实现的。它 的用途是确保安排的所有任务都能按照计划执行。 40、XML/可扩展的标记语言是一套用文本来定义语义标记的元标记语言。 41、Web Service 体系结构基于服务提供者、服务请求者、服务注册中心 3 个角色,利用发 布、发现、绑定 3 个操作来构建。 42、SOAP/Simple Object Access Protocol/简单对象访问协议是一种基于 XML、以 HTTP 作为基础传输协议的消息交换协议。 43、WSDL/Web Service Description Language/Web 服务描述语言用于描述 Web 服务提供的 方法以及调用这些方法的各种方式。 44、MQ/Message Queue/消息队列是在多个不同的应用程序之间实现相互通信的一种基于队 列和事物处理的异步传输模式。 45、在 WCF 中,EndPoint/终结点用于确定网络通信的目标。 46、对于 WCF,终结点由地址、协定和绑定组成。 47、WCF 通过绑定来定义 WCF 客户端和 WCF 服务端之间通信的方式。 48、服务协定是通过 ServiceContract 和 OperationContract 特性声明的。 49、数据协定是通过 DataContract 和 DataMember 特性声明的。 50、在 TCP/IP 体系结构中,HTTP 属于应用层传输协议。 51、WCF 双工通信由服务和回调两个接口组成。
一、基本概念 1、分布式系统的运行基础是一个由多台独立的、分散于不同位置的计算机构成的网络环境。 2、C/S 是一种胖客户端应用程序编程架构。 3、C/S 将一个网络事务处理分为客户端和服务端两个部分。 4、B/S 编程模型采用 HTTP/超文本传输协议进行通信。 5、套接字是支持 TCP/IP 网络通信的基本操作单元。 6、套接字有流式套接字、数据报套接字和原始套接字三种类型。 7、一个 IP 地址主要由网络号和主机号两部分组成。 8、网络上的两台计算机要进行通信,必须要知道双方的 IP 地址、端口号以及采用的网络 通信协议。 9、进程是操作系统的基本管理单元。 10、从程序实现的角度将一个进程划分为若干个独立的执行流。每个独立的执行流称之为线 程。 11、假设某台服务器有 2 颗 CPU,每颗 CPU 包含 4 颗内核,每个内核又包含 2 个硬件线程, 则该台服务器的所有可用逻辑内核的数目是 16。 12、有两种停止进程实例的方法:Kill 和 CloseMainWindow。 13、将一个线程设置为后台线程的方法是将其 IsBackground 属性设置为 true。 14、线程池是在后台执行任务的线程集合。 15、CPU 执行某语句时,在该语句完成之前不会执行其后面的代码。这种执行方式称为同步 执行。 16、在某个线程中启动另外一个或者多个线程同时执行多个子任务的执行方式称之为并行执 行。 17、应用程序域是一个轻量级的进程管理。 18、反射提供了封装程序集、模块和类型信息的对象。 19、将字符序列转换成字节序列的过程称为编码;将字节序列转换成字符序列的过程称为 解码。 20、数据流是对串行传输数据的一种抽象表示。 21、当需要通过网络组个字节串行传输数据或者对文字逐个字节进行操作时就需要将数据转 换成数据流。 22、加密算法主要分为对称加密和非对称加密两类。 23、数字签名是利用私钥加密必须用公钥解密这个原理来实现的。 24、密钥容器最直接的用途是保存非对称加密的密钥。 25、从技术实现的角度来说,并行是利用多线程来实现的,并发数据是利用专门的并发集合 来实现的。 26、Lambda 表达式的主要用于简化委托的代码编写。 27、Lambda 表达式是一个可用于创建委托或表达式树类型的匿名函数。 28、Action 委托封装了不带返回值的方法,有 0~16 个输入参数,返回类型为 void。 29、Func 委托封装了带返回值的方法,有 0~16 个输入参数,返回类型为 TResult。 30、异步模式的最大优势是不会阻止对用户界面操作的响应。 31、async 关键字是一个修饰符,只能用在异步方法或者事件处理程序的签名中。 32、await 关键字是一个运算符,可将其用在表达式中,表示等待异步执行的结果。 33、await 运算符是对方法的返回值进行操作,而不是对方法本身进行操作。 34、await 运算符的代码必须放在异步方法的内部。 35、并行是指同时执行多个工作任务。