zoukankan      html  css  js  c++  java
  • 《修炼之道:.NET开发要点精讲》读书笔记(三)

    后几章的习题

    1.异步调用开始后,什么时候才能使用异步执行的结果?

    A:最好在EndInvoke()方法返回之后才能使用异步执行的结果,其它时候不能保证异步调用已完成。

     

    2.委托的异步调用开始后(即调用BeginInvoke方法后),EndInvoke方法是否可以在同一线程中调用?

    A:可以。EndInvoke()方法既可以在同一线程中调用,也可以在其它线程中调用,EndInvoke()方法会阻塞调用线程,直到异步调用执行结束。

     

    3.异步调用时,AsyncCallback委托在什么线程中调用?

    A:会在系统线程池中的某一个线程中调用AsyncCallback委托。

     

    4.简述异步编程与多线程编程的区别与联系。

    A:异步编程与多线程编程的效果类似,都是为了能够并行执行代码,达到同时处理任务的目的。异步编程时,系统自己通过线程池来分配线程,不需要人工干预,异步编程逻辑复杂不易理解,而多线程编程时,完全需要人为去控制,相对较灵活。

    1..NET编程代码中组件的定义是?

    A:特指实现(直接或间接)了System.ComponentModel.IComponent接口的类型,只有组件才可以在窗体设计器中进行可视化设计。

     

    2.“容器-组件-服务”模型中容器的含义是?

    A:特指实现(直接或间接)了System.ComponentModel.IContainer接口的类型,不包括ArrayList、Queue、Stack以及Array等物理容器。

     

    3.组件有哪两种状态?怎样区分组件的当前状态?

    A:组件有“设计时(Design-Time)”与“运行时(Run-Time)”两种状态,可以通过组件的DesignMode属性去判断它的当前状态,一般情况下,如果该属性为true,说明当前组件处于设计时,否则处于运行时。在窗体设计器中创建的组件的状态即为设计时,程序运行后组件的状态即为运行时。

    1.一个Windows桌面应用程序主要包括哪几个部分?

    A:存放数据的消息队列、为程序提供动力的消息循环以及处理数据的窗口过程。

    2.GUI界面能够持续响应用户输入并能维持界面显示的根本原因是什么?

    A:消息泵的存在,它能够为程序持续运转提供动力。

    3.“嵌套消息循环”指的是什么?

    A:在一次消息循环过程中,再次开启一个消息循环,内部循环退出之前,外部循环一直处于等待状态,但是由于两个循环均负责处理同一个消息队列中的消息,因此不会出现Windows消息不能及时被处理的情况。

    1.如果两台主机之间需要通信,为何仅仅使用IP地址是不够的?

    A:因为IP只能确定主机,不能定位通信程序,通信过程表面上是发生在两台主机之间,实质上是发生在两个通信程序之间。

    2.举例说明有哪些应用层协议。

    A:常见应用层协议如下:

    (1)域名系统(Domain Name System,DNS):用于实现网络设备名字到IP地址映射的网络服务。

    (2)文件传输协议(File Transfer Protocol,FTP):用于实现交互式文件传输功能。

    (3)简单邮件传送协议(Simple Mail Transfer Protocol, SMTP):用于实现电子邮箱传送功能。

    (4)超文本传输协议(HyperText Transfer Protocol,HTTP):用于实现WWW服务。

    (5)简单网络管理协议(simple Network Management Protocol,SNMP):用于管理与监视网络设备。

    (6)远程登录协议(Telnet):用于实现远程登录功能。

    3.简述通信协议的本质。

    A:所有的通信协议本质上都是一种数据结构,通信双方都必须按照这种数据结构规定的形式去发送或接收(解析)数据。

    4.简述TCP通信与UDP通信的区别。

    A:基于TCP协议的通信在进行数据交互之前需要先建立连接,类似打电话,这种通信方式保证了数据传输的正确性、可靠性;基于UDP协议的通信在进行数据传输之前不需要建立连接,类似发短信,这种通信方式不能保证数据传输的正确性。

    5.“泵”结构对通信编程有哪些作用?

    A:“泵”结构保证了通信双方程序能够持续正常运转,如持续监听、持续接收数据等,它能为通信程序提供持续运行的动力。

    1..NET中循环结构有哪些?分别主要用于什么场合?

    A:.NET中的循环结构有for循环、foreach循环、while循环以及do-while循环。for循环主要用于重复执行指定次数的操作,foreach循环主要用于遍历容器元素,while循环和do-while循环主要用于重复执行某项操作直到某一条件满足或不满足为止。代码中的“泵”结构主要由while循环来实现。

    2.简述代码中“泵”结构的作用。

    A:代码中的“泵”结构具备“持续性”和“动力性”两大特点,它能够维持程序的持续运行状态,为程序运转提供动力支持。

    3.串行处理数据的泵与并行处理数据的泵之间有什么区别?

    A:串行处理数据的泵是按顺序处理数据的,本次数据处理结束之前,下一次处理不能开始;并行处理数据的泵不是按顺序处理数据,所有的数据处理均是同时进行的,没有先后顺序,不能确保先开始处理的数据一定先结束处理,也不能保证后开始处理的数据一定后结束处理。通过异步编程很容易实现两种泵结构。

    1.简述“软件设计模式”与“软件设计原则”的区别。

    A:虽然两者都是前人通过大量的实践总结出来、有利于软件系统开发的一些经验,但是“设计模式”更具体,每个设计模式的存在都是为了解决某一个(或某一类)问题,而“设计原则”相比起来更抽象,它只是一个理论思想,并不能应用到某个具体的场景之中,去解决某一个具体的问题。“设计模式”与“设计原则”在软件系统设计过程中均起到了重要作用。

    2.“Solid原则”包含哪五大软件设计原则?英文全称分别是?

    A:

    (1)单一职责原则(Singleton Responsibility Principle);

    (2)开闭原则(Open Closed Principle);

    (3)里氏替换原则(Liskov Substitution Principle);

    (4)接口隔离原则(Interface Segregation Principle);

    (5)依赖倒置原则(Dependency Inversion Principle)。

    3.哪些设计原则的主要目的是为了降低代码之间的依赖程度?

    A:单一职责原则和依赖倒置原则,前者建议每个类型只应该负责某一个(或某一类)任务,这样与外界发生关联关系的可能性较小;后者建议对象之间发生不可避免的依赖关系时,所有的依赖均应该建立在“抽象”之上,而不应该是“具体”,由于抽象的事物可变,对象之间不会产生绑定的不可变的依赖关系。

    1.简述“面向对象”的三大特征。

    A:从对象基础、对象扩展以及对象行为三个方面来讲,“面向对象(OO)”主要包含三大特征,分别是:封装、继承和多态。封装是前提,它强调代码模块化,将数据以及相关的操作组合成为一个整体,对外只公开必要的访问接口;继承是在封装的前提下,创建新类型的一种方式,它建议有族群关系的类型之间可以发生自上而下地衍生关系,处在族群底层的类型具备高层类型的所有特性;多态强调对象的多种表现行为,它是建立在继承的基础之上的,多态同时也是降低代码依赖程度的关键。

    2.简述“面向抽象编程”的具体含义。

    A:如果说“面向对象编程”教我们将代码世界中的所有事物均看成是一个整体——“对象”,那么“面向抽象编程”教我们将代码中所有的依赖关系都建立在“抽象”之上,一切依赖均是基于抽象的,对象跟对象之间不应该有直接具体类型的引用关系。“面向接口编程”是“面向抽象编程”的一种。

    3.“依赖倒置原则(DIP)”中的“倒置”二字作何解释?

    A:正常逻辑思维中,高层模块依赖底层模块是天经地义、理所当然的,而“依赖倒置原则”建议我们所有的高层模块不应该直接依赖于底层模块,而都应该依赖于一个抽象,注意这里的“倒置”二字并不是“反过来”的意思(即底层模块反过来依赖于高层模块),它只是说明正常逻辑思维中的依赖顺序发生了变化,把所有违背了正常思维的东西都称之为“倒置”。

    4.在软件设计过程中,为了降低代码之间的依赖程度,我们遵循的设计原则是什么?我们设计的目标是什么?

    A:有两大设计原则主要是为了降低代码依赖程度,即:单一职责原则(SRP)和依赖倒置原则(DIP)。我们在软件设计时追求的目标是:高内聚、低耦合。

  • 相关阅读:
    牛客练习赛64 D-宝石装箱(容斥定律,背包)
    CF-GYM-[2019 USP Try-outs] 部分题解
    [Codeforces Round #642 (Div. 3)] ABCDEF题解
    [NCD 2019] G. Ali and the Breakfast (解析几何)
    [AtCoder Beginner Contest 165] E
    [Educational Codeforces Round 86 (Rated for Div. 2)] E. Placing Rooks (组合数学,容斥定律)
    [AtCoder Beginner Contest 164] -E
    牛客算法周周练3 C -小雨坐地铁(分层最短路)
    HDU 5726 GCD (RMQ + 二分)
    Codeforces Round #362 (Div. 2) C. Lorenzo Von Matterhorn (类似LCA)
  • 原文地址:https://www.cnblogs.com/Lvkang/p/9993683.html
Copyright © 2011-2022 走看看