《修炼之道:.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)。我们在软件设计时追求的目标是:高内聚、低耦合。
《修炼之道:.NET开发要点精讲》读书笔记(三)的更多相关文章
- 《修炼之道:.NET开发要点精讲》读书笔记(四)
委托的作用:1)它允许把方法作为参数,传递给其它的模块:2)它允许我们同时调用多个具有相同签名的方法:3)它允许我们异步调用任何方法. “方法签名”指方法的参数个数.参数类型以及返回值等,具有相同签名 ...
- 《修炼之道:.NET开发要点精讲》读书笔记(二)
1.简述.NET中CTS.CLS以及CLR的含义与作用. A:CTS指公共类型系统,是.NET平台中各种语言必须遵守的类型规范:CLS指公共语言规范,是.NET平台中各种语言必须遵守的语言规范:CLR ...
- 《修炼之道:.NET开发要点精讲》读书笔记(一)
CLR 公共语言运行库 没有CLR的存在,就不能讲该中间件转换成对应操作系统中的机器指令. 程序集是非完全编译的产物,它兼备了源代码和本地代码的特性,是一种介于源代码和本地代码之间的独立存在的一种数据 ...
- 关于新书《修炼之道:.NET开发要点精讲》的各种说明
索引 新书介绍 新书封面 新书目录 试读章节 原稿试读 网购地址 规格参数 反馈方式 一些感谢 附加说明 1.新书介绍 从2013年年底到2014年9月,历时将近10个月,这本书终于看到了“出版发行” ...
- 《android开发艺术探索》读书笔记(二)--IPC机制
接上篇<android开发艺术探索>读书笔记(一) No1: 在android中使用多进程只有一种方法,那就是给四大组件在AndroidMenifest中指定android:process ...
- 《Android开发艺术探索》读书笔记 (13) 第13章 综合技术、第14章 JNI和NDK编程、第15章 Android性能优化
第13章 综合技术 13.1 使用CrashHandler来获取应用的Crash信息 (1)应用发生Crash在所难免,但是如何采集crash信息以供后续开发处理这类问题呢?利用Thread类的set ...
- delphi 精要-读书笔记(内存分配释放)
delphi 精要-读书笔记(内存分配释放) 1.内存分为三个区域:全局变量区,栈区,堆区 全局变量区:专门存放全局变量 栈区:分配在栈上的变量可被栈管理器自动释放 堆区:堆上的变量内存必须人 ...
- 《android开发艺术探索》读书笔记(十五)--Android性能优化
接上篇<android开发艺术探索>读书笔记(十四)--JNI和NDK编程 No1: 如果<include>制定了这个id属性,同时被包含的布局文件的根元素也制定了id属性,那 ...
- 《android开发艺术探索》读书笔记(十四)--JNI和NDK编程
接上篇<android开发艺术探索>读书笔记(十三)--综合技术 No1: Java JNI--Java Native Interface(java本地接口),它是为了方便java调用C. ...
随机推荐
- asp.net 微信开发(二)
本节我们主要讲解微信的调试: 前言:平时我们开发项目都是在本地就能进行项目的开发调试,但是在微信上就有难度了,因为微信的数据需要从微信服务器上面拿,所以就需要直接在网站上调试了,接下来就相关的一些个人 ...
- 用户未登录或Session超时时重定向到登录页,不那么简单
在网站开发中,我们经常有这样的场景出现: 情景1:对未登录的用户或没有权限的用户,当其想访问某个受限网页时,系统要能够自动转到登录页面. 情景2:对于用session保存用户状态的情况还有这样一种 ...
- shell脚本中获取当前所在目录地址
shell脚本中获取当前所在目录如下 #!/bin/bash work_path=$() cd ${work_path} work_path=$(pwd) cd ${work_path}/src
- 注解@Transactional(rollbackFor = Exception.class) 的用法
由于业务需求要求,在一个Service的一个方法A中有一个for循环,每次循环里面的业务逻辑有可能发生异常,这个时候就需要将这个循环内的所有数据库操作给回滚掉,但是又不能影响到之前循环里数据的更改,并 ...
- 浅谈 MongoDB
MongoDB 是一个基于分布式文件存储的数据库.由 C++ 语言编写.旨在为 WEB 应用提供可扩展的高性能数据存储解决方案.他支持的数据结构非常松散,是类似json的bson格式,因此可以存储比较 ...
- Java demo之时间
jdk原生 public class Start { public static void main(String[] args) { SimpleDateFormat simpleDateForma ...
- MySQL 权限相关
# ============================= mysql 权限相关 =====================================================gran ...
- Navicat Premium 12注册机使用教程
来看下软件具体的安装.激活图文教程: 1.首先下载后正常安装软件至结束: 这时候如果打开的话,是提示要注册的 2.以管理员身份运行注册机工具 Navicat_Keygen_Patch[vxia.net ...
- 基于WebGL架构的3D可视化平台—设备管理
---恢复内容开始--- 国内高层建筑不断兴建,它的特点是高度高.层数多.体量大.面积可达几万平方米到几十万平方米.这些建筑都是一个个庞然大物,高高的耸立在地面上,这是它的外观,而随之带来的内部的建筑 ...
- linux下的dhcp服务器实现
一.得到udhcpd(udhcp服务端): 1.解压busybox 2.配置busybox Networking Utilities——> [*] udhcp server(udhcpd) [* ...