网络编程的面试题

news/2024/6/17 17:17:49 标签: 网络 面试

转载网址:http://blog.csdn.net/chencheng126/article/details/44344777

1:tcp和udp的区别

TCP:是面向连接的流传输控制协议,具有高可靠性,确保传输数据的正确性,有验证重发机制,因此不会出现丢失或乱序。

UDP:是无连接的数据报服务,不对数据报进行检查与修改,无须等待对方的应答,会出现分组丢失、重复、乱序,但具有较好的实时性,UDP段结构比TCP的段结构简单,因此网络开销也小。

2:流量控制和拥塞控制

拥塞控制
网络拥塞现象是指到达通信子网中某一部分的分组数量过多,使得该部分网络来不及处理,以致引起这部分乃至整个网络性能下降的现象,严重时甚至会导致网络通信业务陷入停顿,即出现死锁现象。拥塞控制是处理网络拥塞现象的一种机制。
流量控制
数据的传送与接收过程当中很可能出现收方来不及接收的情况,这时就需要对发方进行控制,以免数据丢失。

3:多线程如何同步

windows

线程同步有四种方式:临界区、内核对象、互斥量、信号量。

Linux

线程同步有最常用的是:互斥锁、条件变量和信号量。

4:进程间通讯的方式有哪些,各有什么优缺点

进程间通信

5:tcp连接建立的时候3次握手,断开连接的4次握手的具体过程

建立连接采用的3次握手协议,具体是指:
第一次握手是客户端connect连接到server,server accept client的请求之后,向client端发送一个消息,相当于说我都准备好了,你连接上我了,这是第二次握手,第3次握手就是client向server发送的,就是对第二次握手消息的确认。之后client和server就开始通讯了。
断开连接的4次握手,具体如下:
断开连接的一端发送close请求是第一次握手,另外一端接收到断开连接的请求之后需要对close进行确认,发送一个消息,这是第二次握手,发送了确认消息之后还要向对端发送close消息,要关闭对对端的连接,这是第3次握手,而在最初发送断开连接的一端接收到消息之后,进入到一个很重要的状态time_wait状态,这个状态也是面试官经常问道的问题,最后一次握手是最初发送断开连接的一端接收到消息之后。对消息的确认。

6:epoll与select的区别

select在一个进程中打开的最大fd是有限制的,由FD_SETSIZE设置,默认值是2048。不过 epoll则没有这个限制,它所支持的fd上限是最大可以打开文件的数目,这个数字一般远大于2048,一般来说内存越大,fd上限越大,1G内存都能达到大约10w左右。

select的轮询机制是系统会去查找每个fd是否数据已准备好,当fd很多的时候,效率当然就直线下降了,epoll采用基于事件的通知方式,一旦某个fd数据就绪时,内核会采用类似callback的回调机制,迅速激活这个文件描述符,而不需要不断的去轮询查找就绪的描述符,这就是epoll高效最本质的原因。

无论是select还是epoll都需要内核把FD消息通知给用户空间,如何避免不必要的内存拷贝就很重要,在这点上,epoll是通过内核于用户空间mmap同一块内存实现的,而select则做了不必要的拷贝

7:epoll中et和lt的区别与实现原理

LT:水平触发,效率会低于ET触发,尤其在大并发,大流量的情况下。但是LT对代码编写要求比较低,不容易出现问题。LT模式服务编写上的表现是:只要有数据没有被获取,内核就不断通知你,因此不用担心事件丢失的情况。
ET:边缘触发,效率非常高,在并发,大流量的情况下,会比LT少很多epoll的系统调用,因此效率高。但是对编程要求高,需要细致的处理每个请求,否则容易发生丢失事件的情况。


http://www.niftyadmin.cn/n/531490.html

相关文章

mysql c3p0 释放连接_c3p0+mysql session资源不释放

程序正常启动后获得正常的连接数,在设定的时间内也正常释放了,但是一旦用户登录后数据库的连接sleep就超过设置的时间不再释放,程序中opensession的地方也已经手动关闭了,请问各位是属于什么问题? hibernate.cfg.xml配…

2018年东北农业大学春季校赛解题报告

https://www.nowcoder.com/acm/contest/93#question 其中很水的题:B题矩阵 等差数列 D题迷宫 简单搜索dfs F题集合 就是求二次函数极值 M题巨水..不说了... E题阶乘 求末尾有几个0,也就是1~n这n个数共有多少个5,因为只有5和2能拼出10&am…

什么是进程

进程的概念:我们知道操作系统最核心的概念就是进程。其实进程简单来说就是在操作系统中运行的程序,它是操作系统资源管理的最小单位。但是进程是一个动态的实体,它是程序的一次执行过程。进程和程序的区别在于:进程是动态的&#…

php管理员登录页面代码_Magento钓鱼页面利用JavaScript进行渗透

点击上方蓝字关注我们概述近期,研究人员在被入侵的网站上找到了名为“wp-order.php”的Magento管理员登录网络钓鱼页面。尽管该文件名有些奇特,但它仍成功加载了看起来合法的Magento 1.x 登录页面。受害者无法轻易察觉到的是,该网站上的图形和…

WPF自学入门(十一)WPF MVVM模式Command命令

在WPF自学入门(十)WPF MVVM简单介绍中的示例似乎运行起来没有什么问题,也可以进行更新。但是这并不是我们使用MVVM的正确方式。正如上一篇文章中在开始说的,MVVM的目的是为了最大限度地降低了Xaml文件和CS文件的耦合度&#xff0c…

mysql修改所有字段_详解mysql数据库如何一键修改所有已经定义到的definer

概述我们在mysql创建view、trigger、function、procedure、event时都会定义一个Definer‘xxx’,类似如下:加红的部分SQL SECURITY 其实后面有两个选项,一个为DEFINER,一个为INVOKERSQL SECURITY { DEFINER | INVOKER } :指明谁有权…

c函数调用的堆栈变化

转载地址:http://blog.chinaunix.net/uid-20718384-id-3418279.html这篇blog试图讲明当一个c函数被调用时,一个栈帧(stack frame)是如何被建立,又如何被消除的。这些细节跟操作系统平台及编译器的实现有关,下面的描述是针对运行在…

如何给a标签绑定ajax事件

<a href"review?actiondelete&id${review.id}&articleId${review.articleId}"class"black" id"reviewDelete"> 【删除】 </a> 修改为&#xff1a;<a href"javascript:void(0)" action"review?actiondel…