C# 面试手册

网路与通信

什么是序列化,什么时候会用到序列化

序列化 (Serialization)是将对象的状态信息转换为可以存储或传输的形式的过程。在序列化期间,对象将其当前状态写入到临时或持久性存储区。以后,可以通过从存储区中读取或反序列化对象的状态,重新创建该对象。

可以用到序列化的地方:

  • 数据持久化:比如一个电商平台,有数万个用户并发访问的时候会产生数万个session 对象,这个时候内存的压力是很大的。我们可以把session对象序列化到硬盘中,需要时在反序列化,减少内存压力。
  • 网络传输:我们将系统拆分成多个服务之后,服务之间传输对象,不管是何种类型的数据,都必须要转成二进制流来传输,接受方收到后再转为数据对象。

Serializable特性有什么作用?

通过上面的流类型可以方便地操作各种字节流,但是如何把现有的实例对象转换为方便传输的字节流,就需要使用序列化技术。对象实例的序列化,是指将实例对象转换为可方便存储、传输和交互的流。

在.NET中,通过Serializable特性提供了序列化对象实例的机制,当一个类型被申明为Serializable后,它就能被诸如BinaryFormatter等实现了IFormatter接口的类型进行序列化和反序列化。

.netRemoting 的工作原理是什么?

服务器端向客户端发送一个进程编号,一个程序域编号,以确定对象的位置

什么是XML?

XML即可扩展标记语言。eXtensible Markup Language.标记是指计算机所能 理解的信息符号,通过此种标记,计算机之间可以处理包含各种信息的文章等。如何定义这些标记,即可以选择国际通用的标记语言,比如HTML,也可以使用象XML这样由相关人士自由决定的标记语言,这就是语言的可扩展性。XML是从SGML中简化修改出来的。它主要用到的有XML、XSL和XPath等。

什么是WebService?UDDI?

Web Service便是基于网络的、分布式的模块化组件,它执行特定的任务,遵守具体的技术规范,这些规范使得Web Service能与其他兼容的组件进行互操作。UDDI的目的是为电子商务建立标准;UDDI是一套基于Web的、分布式的、为WebService提供的、信息注册中心的实现标准规范,同时也包含一组使企业能将自身提供的Web Service注册,以使别的企业能够发现的访问协议的实现标准。

列举一下你所了解的XML技术及其应用

xml用于配置,用于保存静态数据类型.接触XML最多的是web Services..和config

什么是SOAP,有哪些应用?

simple object access protocal,简单对象接受协议.以xml为基本编码结构,建立在已有通信协议上(如http,不过据说ms在搞最底层的架构在tcp/ip上的soap)的一种规范WebService使用的协议。

XML与 HTML 的主要区别?

  1. XML是区分大小写字母的,HTML不区分。
  2. 在HTML中,如果上下文清楚地显示出段落或者列表键在何处结尾
  3. 在XML中,拥有单个标记而没有匹配的结束标记的元素必须用一个 / 字符作为结尾。这样分析器就知道不用查找结束标记了。
  4. 在XML中,属性值必须分装在引号中。在HTML中,引号是可用可不用的。
  5. 在HTML中,可以拥有不带值的属性名。在XML中,所有的属性都必须带有相应的值。

post、get的区别?

  • get的参数会显示在浏览器地址栏中,而post的参数不会显示在浏览器地址栏中;
  • 使用post提交的页面在点击【刷新】按钮的时候浏览器一般会提示“是否重新提交”,而get则不会;
  • 使用get的页面可以被搜索引擎抓取,而用post的则不可以;
  • 使用post可以提交的数据量非常大,而用get可以提交的数据量则非常小(2k),受限于网页地址的长度。
  • 使用post可以进行文件的提交,而用get则不可以。

http 响应码 301 和 302 代表的是什么?有什么区别?

301:永久重定向;302:暂时重定向。

它们的区别是,301 对搜索引擎优化(SEO)更加有利;302 有被提示为网络拦截的风险。

什么是 XSS 攻击,如何避免?

XSS 攻击:即跨站脚本攻击,它是 Web 程序中常见的漏洞。原理是攻击者往 Web 页面里插入恶意的脚本代码(css 代码、Javascript 代码等),当用户浏览该页面时,嵌入其中的脚本代码会被执行,从而达到恶意攻击用户的目的,如盗取用户 cookie、破坏页面结构、重定向到其他网站等。 预防 XSS 的核心是必须对输入的数据做过滤处理。

HTTP fetch发送2次请求的原因?

fetch发送post请求的时候,总是发送2次,第一次状态码是204,第二次才成功?

原因很简单,因为你用fetch的post请求的时候,导致fetch 第一次发送了一个Options请求,询问服务器是否支持修改的请求头,如果服务器支持,则在第二次中发送真正的请求。

HTTP常见的的头部有哪些?

可以将http首部分为通用首部,请求首部,响应首部,实体首部

通用首部表示一些通用信息,比如date表示报文创建时间,

请求首部就是请求报文中独有的,如cookie,和缓存相关的如if-Modified-Since

响应首部就是响应报文中独有的,如set-cookie,和重定向相关的location,

实体首部用来描述实体部分,如allow用来描述可执行的请求方法,content-type描述主题类型,content-Encoding描述主体的编码方式

什么是 CSRF 攻击,如何避免?

CSRF:Cross-Site Request Forgery(中文:跨站请求伪造),可以理解为攻击者盗用了你的身份,以你的名义发送恶意请求,比如:以你名义发送邮件、发消息、购买商品,虚拟货币转账等。 防御手段:

验证请求来源地址; 关键操作添加验证码; 在请求地址添加 token 并验证。

HTTP 状态码 304 的含义?什么时候用304?

304:如果客户端发送了一个带条件的GET 请求且该请求已被允许,而文档的内容(自上次访问以来或者根据请求的条件)并没有改变,则服务器应当返回这个304状态码。

AJAX的底层实现原理?

Ajax核心—-----XMLHttpRequest 上面我们大概感受了一下Ajax的过程,我们发现发送异步请求才是核心,事实上它就是XMLHttpRequest,整个Ajax之所以能完成异步请求完全是因为这个对应可以发送异步请求的缘故。

而且我们又发现上面那个事件就是整个处理过程的核心,可以根据不同状态执行不同操作,其实它就是XMLHttpRequest的方法onreadystatechange,它在每次状态发生改变时都会触发。那么是谁取得的返回信息呢?它就是XMLHttpRequest的另一个方法responseText(当然还有responseXML)。

我们还没有说发送给谁以及执行发送操作,这两个就是XMLHttpRequest的open和send方法。其他的当然还有了,我们直接列出来吧:

XMLHttpRequest对象属性

  • readyState:请求状态,开始请求时值为0直到请求完成这个值增长到4
  • responseText:目前为止接收到的响应体,readyState<3此属性为空字符串,=3为当前响应体,=4则为完整响应体
  • responseXML:服务器端相应,解析为xml并作为Document对象返回
  • status:服务器端返回的状态码,=200成功,=404表示“Not Found”
  • statusText:用名称表示的服务器端返回状态,对于“OK”为200,“Not Found”为400

方法

  • setRequestHeader():向一个打开但是未发生的请求设置头信息
  • open():初始化请求参数但是不发送
  • send():发送Http请求
  • abort():取消当前相应
  • getAllResponseHeaders():把http相应头作为未解析的字符串返回
  • getResponseHeader():返回http相应头的值