C#开发笔记
02、入门
03、进阶
04、架构
01、知识概念
01、基础语法
02、面向对象
03、集合、异常、泛型、LINQ、委托、EF
04、多线程
05、WPF
06、ASP.NET MVC
07、ASP.NET Core
08、ADO.NET、XML、HTTP、AJAX、WebService
09、常见的算法
10、数据库概念知识
11、数据库SQL查询(附建表语句)
00、高阶
05、U3D
01、基础
001、问的比较多的问题
06、前端开发
001、CSS基础
本文档使用 MrDoc 发布
-
+
首页
08、ADO.NET、XML、HTTP、AJAX、WebService
#### 1. .NET 和 C#有什么区别? **.NET 一般指 .NET FrameWork 框架,它是一种平台,一种技术。** **C#是一种编程语言,可以基于.NET 平台的应用。** #### 2.请编程遍历页面上所有 TextBox 控件并给它赋值为 string.Empty? ```plain foreach (System.Windows.Forms.Control control in this.Controls) { if (control is System.Windows.Forms.TextBox) { System.Windows.Forms.TextBox tb = (System.Windows.Forms.TextBox)control ; tb.Text = String.Empty ; } } ``` #### 3.CTS、CLS、CLR 分别作何解释? **CTS:通用语言系统。CLS:通用语言规范。CLR:公共语言运行库。** #### 4.什么是受管制的代码? **unsafe:非托管代码。不经过 CLR 运行。** #### 5.什么是强类型系统? **RTTI:类型识别系统。** #### 6.列举 ASP.NET 页面之间传递值的几种方式。 **1).使用 QueryString, 如....?id=1; response. Redirect()....** **2).使用 Session 变量** **3).使用 Server.Transfer** #### 7. 什么是 Code-Behind 技术? **代码后植。** #### 8.在.net 中,配件的意思是? **程序集。(中间语言,源数据,资源,装配清单)** #### 9. .netRemoting 的工作原理是什么? **服务器端向客户端发送一个进程编号,一个程序域编号,以确定对象的位置** #### 10.分析以下代码,i=? j=? ```plain stringstrTmp = "abcdefg某某某"; inti= System.Text.Encoding.Default.GetBytes(strTmp).Length; intj= strTmp.Length; ``` **答:i=13,j=10** #### 11.是否可以继承 String 类? **String 类是 final 类故不可以继承。** #### 12.Session 有什么重大 BUG,微软提出了什么方法加以解决? **是 iis 中由于有进程回收机制,系统繁忙的话 Session 会丢失,可以用 Sate server 或 SQL Server 数据库的方式存储 Session 不过这种方式比较慢,而且无法** 捕获 Session 的 END 事件。 #### 13.DataReader 与 Dataset 有什么区别? **一个是只能向前的只读游标,一个是内存中虚拟的数据库。** #### 14.什么是 XML? **XML 即可扩展标记语言。eXtensible Markup Language.标记是指计算机所能 理解的信息符号,通过此种标记,计算机之间可以处理包含各种信息的文章等。如何定义这些标记,即可以选择国际通用的标记语言,比如 HTML,也可以使用象 XML 这样由相关人士自由决定的标记语言,这就是语言的可扩展性。XML 是从 SGML 中简化修改出来的。它主要用到的有 XML、XSL 和 XPath 等。** #### 15.什么是 WebService?UDDI? **Web Service 便是基于网络的、分布式的模块化组件,它执行特定的任务,遵守具体的技术规范,这些规范使得 Web Service 能与其他兼容的组件进行互操作。UDDI 的目的是为电子商务建立标准;UDDI 是一套基于 Web 的、分布式的、为 WebService 提供的、信息注册中心的实现标准规范,同时也包含一组使企业能将自身提供的 Web Service 注册,以使别的企业能够发现的访问协议的实现标准。** #### 16.什么是 ASP.net 中的用户控件? **用户控件一般用在内容多为静态,或者少许会改变的情况下..用的比较大..类似 ASP 中的 include..但是功能要强大的多。** #### 17.列举一下你所了解的 XML 技术及其应用 **xml 用于配置,用于保存静态数据类型.接触 XML 最多的是 web Services..和 config** #### 18. 什么是 code-Behind 技术? **ASPX,RESX 和 CS 三个后缀的文件,这个就是代码分离.实现了 HTML 代码和服务器代码分离.方便代码编写和整理。** #### 19.什么是 SOAP,有哪些应用? **simple object access protocal,简单对象接受协议.以 xml 为基本编码结构,建立在已有通信协议上(如 http,不过据说 ms 在搞最底层的架构在 tcp/ip 上的 soap)的一种规范 WebService 使用的协议。** #### 20.C#中 property 与 attribute 的区别,他们各有什么用处,这种机制的好处在哪里? **一个是属性,用于存取类的字段,一个是特性,用来标识类,方法等的附加性质。** #### 21.XML 与 HTML 的主要区别? 1. **XML 是区分大小写字母的,HTML 不区分。** **2.在 HTML 中,如果上下文清楚地显示出段落或者列表键在何处结尾,那么你可以** **省略** **3.在 XML 中,拥有单个标记而没有匹配的结束标记的元素必须用一个 / 字符作为** **结尾。这样分析器就知道不用查找结束标记了。** **4.在 XML 中,属性值必须分装在引号中。在 HTML 中,引号是可用可不用的。** **5.在 HTML 中,可以拥有不带值的属性名。在 XML 中,所有的属性都必须带有相应的值。** #### 21.在.Net 中,类 System.Web.UI.Page 可以被继承么? **可以。** #### 22.在.net(C# or vb.net)中,Appplication.Exit 还是 Form.Close 有什么不同? **一个是退出整个应用程序,一个是关闭其中一个 form。** #### 23.<%# %> 和 <% %> 有什么区别? **<%# %> 表示绑定的数据源** **<%%> 是服务器端代码块** #### 24.ADO.NET 中读写数据库需要使用哪些对象?作用是什么? **Connection 连接对象,Command 执行命令和存储过程,DataReader 向前只读的数据流,DataAdapter 适配器,支持增删查询,DataSet 数据级对象,相当与内存里的一张或多张表。** #### 25.什么是 SQL 注入,应该如何防止? **利用 sql 关键字对网站进行攻击,用参数化的 SQL 就可以避免 SQL 注入!** #### 26.详细描述三层架构开发模式以及三层架构的好处? **数据访问层,业务层,表示层。** **数据访问层(DAL),主要是存放对数据类的访问,即对数据库的添加、删除、修改、更新等基本操作** **业务逻辑层(BLL)对传送数据进行逻辑判断分折,并进行传送正确的值。 ** 表示层为了与用户交互例如用户添加表单。 **优点: 分工明确,条理清晰,易于调试,而且具有可扩展性。** #### 27.说出一些常用的类、接口,请各举 5 个? **要让人家感觉你对.Net 开发很熟,所以,不能仅仅只列谁都能想到的那些东西,要多列你在做项目中涉及的那些东西。就写你最近写的那些程序中涉及的那些类。** **常用的类:StreamReader、WebClient、Dictionary<K,V>、StringBuilder、SqlConnection、FileStream、File、Regex、List** **常用的接口:IDisposable、IEnumerable、IDbConnection、IComparable、ICollection、IList、IDictionary** #### 28.不是说字符串是不可变的吗?string s="abc";s="123"不就是变了吗? **String 是不可变的在这段代码中,s 原先指向一个 String 对象,内容是 "abc",然后我们将 s 指向"123",那么 s 所指向的那个对象是否发生了改变呢?答案是没有。这时,s 不指向原来那个对象了,而指向了另一个 String 对象,内容为"123",原来那个对象还存在于内存之中,只是 s 这个引用变量不再指向它了。** #### 29.post、get 的区别? **get 的参数会显示在浏览器地址栏中,而 post 的参数不会显示在浏览器地址栏中;** **使用 post 提交的页面在点击【刷新】按钮的时候浏览器一般会提示“是否重新提交”,而 get 则不会;** **用 get 的页面可以被搜索引擎抓取,而用 post 的则不可以;** **用 post 可以提交的数据量非常大,而用 get 可以提交的数据量则非常小(2k),受限于网页地址的长度。** **用 post 可以进行文件的提交,而用 get 则不可以。** #### 30.http 响应码 301 和 302 代表的是什么?有什么区别? **301:永久重定向;302:暂时重定向。** **它们的区别是,301 对搜索引擎优化(SEO)更加有利;302 有被提示为网络拦截的风险。** #### 31.Server.Transfer 和 Response.Redirect 的区别是什么? **Server.Transfer 仅是服务器中控制权的转向,在客户端浏览器地址栏中不会显示出转向后的地址;Response.Redirect 则是完全的跳转,浏览器将会得到跳转的地址,并重新发送请求链接。这样,从浏览器的地址栏中可以看到跳转后的链接地址。** **Server.Transfer 是服务器请求资源,服务器直接访问目标地址的 URL,把那个 URL 的响应内容读取过来,然后把这些内容再发给浏览器,浏览器根本不知道服务器发送的内容是从哪儿来的,所以它的地址栏中还是原来的地址。 这个过程中浏览器和 Web 服务器之间经过了一次交互。** **Response.Redirect 就是服务端根据逻辑,发送一个状态码,告诉浏览器重新去请求那个地址,一般来说浏览器会用刚才请求的所有参数重新请求。这个过程中浏览器和 Web 服务器之间经过了两次交互。** **Server.Transfer 不可以转向外部网站,而 Response.Redirect 可以。** **Server.Execute 效果和 Server.Transfer 类似,但是是把执行的结果嵌入当前页面。** #### 32.什么是 XSS 攻击,如何避免? **XSS 攻击:即跨站脚本攻击,它是 Web 程序中常见的漏洞。原理是攻击者往 Web 页面里插入恶意的脚本代码(css 代码、Javascript 代码等),当用户浏览该页面时,嵌入其中的脚本代码会被执行,从而达到恶意攻击用户的目的,如盗取用户 cookie、破坏页面结构、重定向到其他网站等。 预防 XSS 的核心是必须对输入的数据做过滤处理。** #### 33.HTTP fetch 发送 2 次请求的原因? **fetch 发送 post 请求的时候,总是发送 2 次,第一次状态码是 204,第二次才成功?** **原因很简单,因为你用 fetch 的 post 请求的时候,导致 fetch 第一次发送了一个 Options 请求,询问服务器是否支持修改的请求头,如果服务器支持,则在第二次中发送真正的请求。** #### 34.HTTP 常见的的头部有哪些? **可以将 http 首部分为通用首部,请求首部,响应首部,实体首部** **通用首部表示一些通用信息,比如 date 表示报文创建时间,** **请求首部就是请求报文中独有的,如 cookie,和缓存相关的如 if-Modified-Since** **响应首部就是响应报文中独有的,如 set-cookie,和重定向相关的 location,** **实体首部用来描述实体部分,如 allow 用来描述可执行的请求方法,content-type 描述主题类型,content-Encoding 描述主体的编码方式** #### 35.什么是 CSRF 攻击,如何避免? **CSRF:Cross-Site Request Forgery(中文:跨站请求伪造),可以理解为攻击者盗用了你的身份,以你的名义发送恶意请求,比如:以你名义发送邮件、发消息、购买商品,虚拟货币转账等。 防御手段:** **验证请求来源地址; 关键操作添加验证码; 在请求地址添加 token 并验证。** #### 36.HTTP 状态码 304 的含义?什么时候用 304? **304:如果客户端发送了一个带条件的 GET 请求且该请求已被允许,而文档的内容(自上次访问以来或者根据请求的条件)并没有改变,则服务器应当返回这个 304 状态码。** #### 37.ASP.NET 和 ASP 有什么区别? **ASP.NET 的脚本是雨 HTML 分离的,代码被编译成了 DLL, DLL 可以在 server 端执行。** ASP 的脚本是与 HTML 在一起的,每次都会进行解释执行。 #### 38.简述 Application,session,cookie,cache,viewState 的概念,以及相互之间的区别? **Application 任意大小 整个应用程序的生命期 所有用户 服务器端** **Seccion 小量,简单的数据 用户活动时间 + 单个用户 服务器端一段延迟时间(一般为 20 分钟)** **Cookie 小量,简单的数据 可以根据需要设定 单个用户 客户端** **ViewState 小量,简单的数据 一个 Web 页面的生命期 单个用户 客户端** **Cache 任意大小 可以根据需要设定 所有用户 服务器端** #### 39.ASP.NET 中的六大对象有哪些? **1.Response** 2.Request 3.Server 4.Application 5.Session 6.Cookie #### 40. 在 c#中,反射是什么?处理反射相关的 namespace 是什么? **反射(Reflection)是.NET 中的重要机制,通过放射,可以在运行时获 得.NET 中每一个类型(包括类、结构、委托、接口和枚举等)的成员,包括方法、属性、事件,以及构造函数等。还可以获得每个成员的名称、限定符和参数等。** #### 41.ExecuteScalar 和 ExecuteNonQuery 的区别? **ExecuteNonQuery:返回受影响的行数。** ExecuteScalar:返回结果集的第一行第一列,忽略其他行。 #### 42.说明 C#中的方法声明参数关键字 params,ref,out 的意义及用法? **1) params 关键字,官方给出的解释为用于方法参数长度不定的情况。有时候不能确定一个方法的方法参数到底有多少个,可以使用 params 关键字来解决问题** **2) ref 关键字:使用引用类型参数,在方法中对参数所做的任何更改都将反应在该变量中** 3. **out 关键字:out 与 ref 相似但是 out 无需进行初始化。** #### 43.简单描述 Ihtttphandler 和 Ihttpmodule 的区别和各自的作用? **1.先后次序.先 IHttpModule,后 IHttpHandler. 注:Module 要看你响应了哪个事件,一些事件是在 Handler 之前运行的,一些是在 Handler 之后运行的** **2.对请求的处理上:** IHttpModule 是属于大小通吃类型,无论客户端请求的是什么文件,都会调用到它;例如 aspx,rar,html 的请求. IHttpHandler 则属于挑食类型,只有 ASP.net 注册过的文件类型(例如 aspx,asmx 等等) 才会轮到调用它. **3.IHttpHandler 按照你的请求 生成响应的内容,IHttpModule 对请求进行预处理,如验证、修改、过滤等等,同时也可以对响应进行处理** #### 44. 什么是托管代码、非托管代码托管代码 (managed code) **由公共语言运行库环境(而不是直接由操作系统)执行的代码。托管代码应用程序可以获得公共语言运行库服务,例如自动垃圾回收、运行库类型检查和安全支持等。这些服务帮助提供独立于平台和语言的、统一的托管代码应用程序行为。** 非托管代码 (unmanaged code) **在公共语言运行库环境的外部,由操作系统直接执行的代码。非托管代码必须提供自己的垃圾回收、类型检查、安全支持等服务;它与托管代码不同,后者从公共语言运行库中获得这些服务。** #### 45.GC 是什么? 为什么要有 GC? **1.GC 是垃圾收集器。程序员不用担心内存管理,因为垃圾收集器会自动进行管理.** **2 .NET 的 GC 机制有这样两个问题:首先,GC 并不是能释放所有的资源。它不能自动释放非托管资源。** **GC 并不是实时性的,这将会造成系统性能上的瓶颈和不确定性。** GC 就是对“不可达“的对象进行回收,释放内存。 #### 46.数组、链表、哈希、队列、栈数据结构特点,各自优点和缺点? **数组(Array):** 优点:查询快,通过索引直接查找;有序添加,添加速度快,允许重复; 缺点:在中间部位添加、删除比较复杂,大小固定,只能存储一种类型的数据; 如果应用需要快速访问数据,很少插入和删除元素,就应该用数组。 **链表(LinkedList):** 优点:有序添加、增删改速度快,对于链表数据结构,增加和删除只要修改元素中的指针就可以了; 缺点:查询慢,如果要访问链表中一个元素,就需要从第一个元素开始查找; 如果应用需要经常插入和删除元素,就应该用链表。 **栈(Stack):** 优点:提供后进先出的存储方式,添加速度快,允许重复; 缺点:只能在一头操作数据,存取其他项很慢; **队列(Queue):** 优点:提供先进先出的存储方式,添加速度快,允许重复; 缺点:只能在一头添加,另一头获取,存取其他项很慢; **哈希(Hash):** 特点:散列表,不允许重复; 优点:如果关键字已知则存取速度极快; 缺点:如果不知道关键字则存取很慢,对存储空间使用不充分; #### 47.应用程序池集成模式和经典模式的区别? **如果托管应用程序在采用集成模式的应用程序池中知运行,服务器将使用 IIS 和 ASP.NET 的集成请求处理管道来处理请求。** **如果托管应用程序在采用经典模式的应用程序池中运行,服务器会继续通过 Aspnet\_isapi.dll** 路由托管代码请求,其处理请求的方式就像应用程序在 IIS 6.0 中运行一样。 #### 48.AJAX 的底层实现原理? **Ajax 核心—-----XMLHttpRequest** 上面我们大概感受了一下 Ajax 的过程,我们发现发送异步请求才是核心,事实上它就是 XMLHttpRequest,整个 Ajax 之所以能完成异步请求完全是因为这个对应可以发送异步请求的缘故。 **而且我们又发现上面那个事件就是整个处理过程的核心,可以根据不同状态执行不同操作,其实它就是 XMLHttpRequest 的方法 onreadystatechange,它在每次状态发生改变时都会触发。那么是谁取得的返回信息呢?它就是 XMLHttpRequest 的另一个方法 responseText(当然还有 responseXML)。** **我们还没有说发送给谁以及执行发送操作,这两个就是 XMLHttpRequest 的 open 和 send 方法。Y(o)Y,其他的当然还有了,我们直接列出来吧:** **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 相应头的值** #### 49.能够将非静态的方法覆写成静态方法吗? **答:不能,覆写方法的签名必须与被覆写方法的签名保持一致,除了将 virtual 改为 override。** #### 50.DateTime.Parse(myString); 这行代码有什么问题? **有问题,当 myString 不能满足时间格式要求的时候,会引发异常,建议使用 DateTime.TryParse()** #### 51.Server.UrlEncode、HttpUtility.UrlDecode 的区别 **Server.UrlEncode 的编码方式是按照本地程序设置的编码方式进行编码的,而 HttpUtility.UrlEncode 是默认的按照.net 的 utf-8 格式进行编码的。** #### 52.何时创建连接池? **当第一个连接请求到来时创建连接池;连接池的建立由数据库连接的连接字符创来决定。每一个连接池都与一个不同的连接字符串相关。当一个新的连接请求到来时如果连接字符串和连接池使用的字符串相同,就从连接池取出一个连接;如果不相同,就新建一个连接池。** #### 53.何时关闭连接池? **当连接池中的所有连接都已经关闭时关闭连接池。** #### 54. 当连接池中的连接都已经用完,而有新的连接请求到来时会发生什么? **当连接池已经达到它的最大连接数目时,有新的连接请求到来时,新的连接请求将放置到连接队列中。当有连接释放给连接池时,连接池将新释放的连接分配给在队列中排队的连接请求。你可以调用 close 和 dispose 将连接归还给连接池。** #### 55.如何允许连接池? **对于.NET 应用程序而言,默认为允许连接池。(这意味着你可以不必为这件事情做任何的事情)当然,如果你可以在 SQLConnection 对象的连接字符串中加进 Pooling=true;确保你的应用程序允许连接池的使用。** #### 56.应该如何禁止连接池? **ADO.NET 默认为允许数据库连接池,如果你希望禁止连接池,可以使用如下的方式:** 1. ** 使用 SQLConnection 对象时,往连接字符串加入如下内容:Pooling=False; ** 2. ** 使用 OLEDBConnection 对象时,往连接字符串加入如下内容:OLE DB Services=-4; ** #### 57. 私有程序集与共享程序集有什么区别? **一个私有程序集通常为单个应用程序所使用,并且存储于这个应用程序所在的目录之中,或此目录下面的一个子** **目录中。共享程序集通常存储在全局程序集缓存(Global Assembly Cache)之中,这是一个由.NET 运行时所维** **护的程序集仓库。共享程序集通常是对许多应用程序都有用的代码库,比如.NET Framework 类。** #### 58.请解释 web.config 文件中的重要节点? **appSettings 包含自定义应用程序设置。** system.web 系统配置; compilation 动态调试编译设置; customErrors 自定义错误信息设置; authentication 身份验证,此节设置应用程序的身份验证策略。 authorization 授权, 此节设置应用程序的授权策略。 #### 59.什么是 viewstate,能否禁用?是否所用控件都可以禁用? **Viewstate 是保存状态的一种机制,EnableViewState 属性设置为 false 即可禁用** #### 60.什么是 Windows 服务,它的生命周期与标准的 EXE 程序有什么不同? **Windows 服务是运行在 windows 后台指定用户下(默认 System)的应用程序,它没有标准的 UI 界面,想比标准** **的 EXE 程序,Windows 服务是在服务开始的时候创建,而在服务结束的时候销毁,而且可以设置服务是否与操作** **系统一起启动,一起关闭。它支持三种方式:1)自动方式 2)手动方式 3)禁用 。自动方式的时** **候,windows 服务将在 OS 启动后自动启动运行,而手动方式则必须手工启动服务,禁用的情况下服务将不能被** **启动。另外标准的 EXE 默认使用的当前登录的用户,而 windows 服务则默认使用 System 用户,这在对系统资源访** **问的时候特别需要注意。** #### 61.什么是 GAC?它解决了什么问题? **Gloal Assembly Cache,全局应用程序集缓存。它解决了几个程序共享某一个程序集的问题。不必再将那个被共** **享的程序集拷贝到应用程序目录了,其实这道理很简单,.net 应用程序在加载的时候,会首先查看全局应用程序** **集缓存,如果有就可以直接使用,没有再到应用程序目录进行查找。** #### 62.数据访问通过 aspx 页面和 DB 层会很慢,有什么解决方法? **(1)浏览器使用缓存;(2)使用压缩的 JS 和 CSS(3)减少发送 HTTP 请求的次数;(4)后台,对于一些不经常变化的数据进行 Cache;(5)对可能的低效率的 SQL 语句进行优化;(6)进行服务器负载均衡**
个人天使
2025年2月12日 17:30
转发文档
收藏文档
上一篇
下一篇
手机扫码
复制链接
手机扫一扫转发分享
复制链接
Markdown文件
PDF文档(打印)
分享
链接
类型
密码
更新密码