1.面向对象和面向过程有什么区别?
面向过程将程序分为两部分:数据和操作。这种思想的核心是数据结构和算法的开发和优化,面向过程需要分析解决问题所需要的步骤,然后用函数将这些步骤一步步实现,使用的时候一个个调用。
面向对象是把构成问题事务分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描叙某个事物在整个解决问题的步骤中的行为。
面向对象一个很大的好处就是数据 和方法的封装,由此面向对象的三大特性得到发挥
例如五子棋,面向过程的设计思路就是首先分析问题的步骤:
1、开始游戏,
2、黑子先走,
3、绘制画面,
4、判断输赢,
5、轮到白子,
6、绘制画面,
7、判断输赢,
8、返回步骤2,
9、输出最后结果。
把上面每个步骤用分别的函数来实现,问题就解决了。
而面向对象的设计则是从另外的思路来解决问题。整个五子棋可以分为 1、黑白双方,这两方的行为是一模一样的,2、棋盘系统,负责绘制画面,3、规则系统,负责判定诸如犯规、输赢等。第一类对象(玩家对象)负责接受用户输入,并告知第二类对象(棋盘对象)棋子布局的变化,棋盘对象接收到了棋子的i变化就要负责在屏幕上面显示出这种变化,同时利用第三类对象(规则系统)来对棋局进行判定。
功能上的统一保证了面向对象设计的可移植性和可扩展性
。
比如我要把这个五子棋游戏改为围棋游戏,如果你是面向过程设计,那么五子棋的规则就分布在了你的程序的每一个角落,要改动还不如重写。但是如果你当初就是面向对象的设计,那么你只用改动规则对象就可以了,五子棋和围棋的区别不就是规则吗?(当然棋盘大小好像也不一样,但是你会觉得这是一个难题吗?直接在棋盘对象中进行一番小改动就可以了。)而下棋的大致步骤从面向对象的角度来看没有任何变化。
2.DNS到底是用TCP还是UDP?
DNS报文格式:
16bit的标志字段 如下:

QR:0表示查询报文,1表示响应报文
Opcode:通常值为0(标准查询),其他值为1(反向查询)和2(服务器状态请求)。
AA:表示授权回答(authoritative answer).
TC:表示可截断的(truncated)
RD:表示期望递归
RA:表示可用递归
当客户端发出DNS查询请求,从服务器收到的响应报文中的TC(删减标志)比特被置为1时,表示应答总长度超过512字节,只返回前512个字节,这时DNS就需要使用TCP重发原来的查询请求。因为在UDP的应用程序中,其应用程序被限制在512个字节或更小,因此DNS报文穿数据流只能有512字节,而TCP能将用户的数据流分为一些报文段,因此TCP就能用多个报文段去传超过512字节的数据流或是任意长度的数据流。
二、应用角度来看
DNS的主辅名字服务器在同步时使用TCP协议。辅名字服务器一般每3小时向主名字服务器发起查询,看主服务器是否有新的记录变动,如有变动,将执行一次区域传送,区域传送使用TCP协议。区域传输用TCP,其他用UDP。
什么是区域传输?
dns的规范规定了2种类型的dns服务器,一个叫主dns服务器,一个叫辅助dns服务器。在一个区中主dns服务器从自己本机的数据文件中读取该区的dns数据信息,而辅助dns服务器则从区的权威dns服务器中读取该区的dns数据信息。当一个辅助dns服务器启动时,它需要与主dns服务器通信,并加载数据信息,这就叫做区传送(zone transfer).
通俗地讲,就是DNS服务器之间传输时使用TCP,而客户端与DNS服务器之间传输时用的是UDP。
3.UDP特点:UDP协议有如下的特点:
1.UDP是无连接.即发送数居前不需要建立连接.减少了开销和发送前的时延.
2.UDP使用尽最大努力交付.因此主机不需要维持复杂的连接状态表.
3.UDP是面向报文的,UDP一次交付一个完整的报文.不会分片.因此应用层必须选择合适大小的报文.若分组太大,交给ip层,IP会进行分片,降低效率.
4.UDP没有拥塞控制.因此,即使网络出现拥塞,不会使源主机的发送速度降低.这对某些实时应用如ip电话,实时视频会议要求源主机以恒定速度发送数据,并且允许网络发生拥塞时,丢失一些数据,但却不允许有太大时延.
5.首部开销小.
4.TCP和UDP各有哪些应用?
UDP: DNS,TFTP,DHCP,NFS
TCP:telnet,http,ftp

4483

被折叠的 条评论
为什么被折叠?



