开课中国  |  [Investor Relations]   |  官方微博

广州.NET培训中心

美国上市公司 · 亿元级外企.NET培训企业

  • 广州达内.Net培训面试中常见问题

    发布:广州达内.Net培训      来源:广州达内.Net培训      时间:2017-11-02        

  • 今天广州达内.Net培训小编为大家带来一篇.Net在面试中容易被问到的10个问题,希望对各位小伙伴有所帮助。

  • 今天广州达内.Net培训小编为大家带来一篇.Net在面试中容易被问到的10个问题,希望对各位小伙伴有所帮助。

    1、描述线程与进程的区别?(*)

    a.线程(Thread)与进程(Process)二者都定义了某种边界,不同的是进程定义的是应用程序与应用程序之间的边界,不同的进程之间不能共享代码和数据空间,而线程定义的是代码执行堆栈和执行上下文的边界。

    b.一个进程可以包括若干个线程,同时创建多个线程来完成某项任务,便是多线程。而同一进程中的不同线程共享代码和数据空间。

    2、什么叫应用程序域(AppDomain)

    一种边界,它由公共语言运行库围绕同一应用程序范围内创建的对象建立(即,从应用程序入口点开始,沿着对象激活的序列的任何位置)。

    应用程序域有助于将在一个应用程序中创建的对象与在其他应用程序中创建的对象隔离,以使运行时行为可以预知。

    在一个单独的进程中可以存在多个应用程序域。应用程序域可以理解为一种轻量级进程。起到安全的作用。占用资源小。

    广州达内.Net培训

    3、Ajax本质

    AJAX 是一种用于“无刷新页面更新数据”的技术。Ajax 的核心是 JavaScript 对象 XmlHttpRequest。XmlHttpRequest 使您可以使用 JavaScript 向服务器提出请求并处理响应,而不阻塞用户。从而实现与服务器进行少量数据交换,使网页实现异步更新。

    4、HTTP、cookie、session

    DNS(Domain Name System,域名系统),因特网上作为域名和IP地址相互映射的一个分布式数据库,能够使用户更方便的访问互联网,而不用去记住能够被机器直接读取的IP数串。

    “开放系统互联参考模型”,即著名的OSI/RM模型(Open System Interconnection/Reference Model)。它将计算机网络体系结构的通信协议划分为七层,自下而上依次为:物理层(Physics Layer)、数据链路层(Data Link Layer)、网络层(Network Layer)、传输层(Transport Layer)、会话层(Session Layer)、表示层(Presentation Layer)、应用层(Application Layer)。

    其中第四层完成数据传送服务,上面三层面向用户。对于每一层,至少制定两项标准:服务定义和协议规范。前者给出了该层所提供的服务的准确定义,后者详细描述了该协议的动作和各种有关规程,以保证服务的提供。

    HTTP协议(HyperText Transfer Protocol,超文本传输协议)是用于从WWW服务器传输超文本到本地浏览器的传输协议。HTTP是无状态的,无状态是指协议对于事务处理没有记忆能力。服务器和客服端使用socket通信,当服务器处理响应结果给客户端后,会关闭当前socket通信,而且服务器在处理页面完毕后会销毁页面对象的。

    HTTP本身是一个无状态的连接协议,为了支持客户端与服务器之间的交互,我们就需要通过不同的技术为交互存储状态,而这些不同的技术就是Cookie和Session了。

    Cookie就是由服务器发给客户端的特殊信息,而这些信息以文本文件的方式存放在客户端,然后客户端每次向服务器发送请求的时候都会带上这些特殊的信息。Cookie信息则存放在HTTP请求头(Request Header)。

    要使用Session,第一步当然是创建Session了。在创建了Session的同时,服务器会为该Session生成唯一的Session id,而这个Session id在随后的请求中会被用来重新获得已经创建的Session;在Session被创建之后,就可以调用Session相关的方法往Session中增加内容了,而这些内容只会保存在服务器中,以cookie形式发到客户端的只有Session id;当客户端再次发送请求的时候,会将这个Session id带上,服务器接受到请求之后就会依据Session id找到相应的Session,从而再次使用之。

    5、面向对象编程oop技术

    面向对象编程(object-oriented programming,oop)技术:就是使用对象;

    对象的生命周期:构造阶段(对象最初进行实例化的时期,用于初始化数据的函数)和析构阶段(在删除一个对象是,执行一些清理工作);

    面向对象的基本特征: 抽象、接口、继承、多态性、封装;

    面向对象的重点在于谁发出了什么命令,而面向过程只关心一个命令.

    面向对象以对象为基础,以事件或消息驱动对象执行处理.它不像面向过程设计一样以函数为单元

    面向对象分析(OOA)、面向对象设计(OOD)、面向对象实现(OOP):

    OOD设计准则:模块化、抽象、高内聚低耦合、可重用;

    oop的3个核心:封装(隐藏一个对象内部实现并保护数据完整性)、继承(促进代码重用)、多态();

    类型之间有种“is-a”关系,称为经典继承关系;

    6、 高速缓冲存储器(Cache)

    高速缓冲存储器(Cache)其原始意义是指存取速度比内存(RAM)来得快的一种RAM(内存),解决CPU和内存之间的速度不匹配问题。

    高速缓冲存储器最重要的技术指标是它的命中率。

    Asp.net 支持三种类型的缓存:

    a、 局部页面输出缓存【输出缓存】;

    b、 数据缓存:绝对过期时间、相对过期时间数据缓存;

    为了解决cache中的脏数据问题(过期失效的数据),可以使用文件缓存依赖和数据库缓存依赖。

    c、第三方缓存:redis/mencached(键值对);

    7、优化站点思路

    增加带宽;

    减少网页中HTTP请求,将多个图片合并为一个文件,利用css背景图片的偏移技术呈现,避免多个图片的下载;合并JS脚本或者CSS样式表;

    充分利用HTTP中的浏览器cache策略,减少重复下载;

    使用动态内容缓存;

    是将数据和表现整体打包;

    使用数据缓存;

    将动态内容静态化:

    广州达内.Net培训小编认为在动态内容缓存技术的机制中,虽然避免了可观的重复计算,但是每次还需要调用动态脚本解释器来判断缓存是否过期以及读取缓存,这还是消耗不少时间。

    优点:一有利于SEO优化;

    二提高程序性能,静态页面无需连接数据库打开速度较动态页面有明显提高;

    优化数据库;

    减少视觉等待;

    8、数据库优化

    (1)在经常检索的字段上(select * from Person where Name=@Name)使用索引提高查询速度。

    (2)select中只列出必要的字段,而不是*。

    (3)避免隐式类型转换造成的全表扫描,在索引上使用函数也会造成全表扫描(因为索引只是为字段建立的,一旦使用表达式或者函数,那么索引就是失效了,当然也可以使用“函数索引”、“表达式索引”解决这个问题),使用索引不一定能提高查询速度。

    (5)避免在索引列上使用计算(where Name+'A'=@MyName)

    (6)数据库优化:

    a. 建立恰当的索引

    b. 分库/分表/分区。

    c. 读写分离,主库写,从库读。

    两台数据库做读写分离,主库负责写入类的操作,从库负责读的操作。

    d.分表:

    将一个表拆分成很多表,并且每个表的数据以 次要数据文件.ndf形式存放在不同的磁盘上;

    e.分库:

    建立同义词访问;

    读写分离操作步骤:

    1、开启代理服务;

    2、找到sqlserver安装目录:Microsoft SQL ;Server\MSSQL10_50.MSSQLSERVER\MSSQL\repldata 目录给其设定好可读写的权限;

    3、在写db上建立本地发布

    4、在读db上建立本地订阅

    9、负载均衡

    高并发:多个进程或线程同时访问同一资源会产生并发问题;

    初级解决方案:

    a、 增加服务器性能,增加CUP/内存/硬盘性能;

    应用级解决方案:

    A、 网页HTML静态化;

    B、 图片服务器分离;

    最好决解方案:负载均衡技术

    实现负载均衡的策略:

    1)HTTP重定向

    当用户发来请求的时候,Web服务器通过修改HTTP响应头中的Location标记来返回一个新的url,

    然后浏览器再继续请求这个新url,实际上就是页面重定向。通过重定向,来达到“负载均衡”的目标。

    2) 反向代理负载均衡

    反向代理服务的核心工作主要是转发HTTP请求,扮演了浏览器端和后台Web服务器中转的角色。

    因为它工作在HTTP层(应用层),也就是网络七层结构中的第七层,因此也被称为“七层负载均衡”。可以做反向代理的软件很多,比较常见的一种是Nginx,Nginx ("engine x") 是一个高性能的 HTTP 和 反向代理 服务器。

    Nginx是一种非常灵活的反向代理软件并占内存小(10mb),可以自由定制化转发策略,分配服务器流量的权重等。

    负载均衡有点/作用/功能:(1)转发请求;(2)故障移除,如果一台服务器故障,不会把请求发送到该台故障的服务器中。(3)恢复添加(已经修改故障的服务器);

    支持服务器检测。NGINX能够根据应用服务器处理页面返回的状态码、超时信息等检测服务器是否出现故障,并及时返回错误的请求重新提交到其它节点上

    缺点:它有“单点故障”的问题,如果挂了,会带来很多的麻烦。而且,到了后期Web服务器继续增加,它本身可能成为系统的瓶颈。

    反向代理中,常见的一个问题,就是Web服务器存储的session数据,因为一般负载均衡的策略都是随机分配请求的。同一个登录用户的请求,无法保证一定分配到相同的Web机器上,会导致无法找到session的问题。

    解决方案一:

    将session这类的信息,专门用某个独立服务来存储,例如redis/memchache,这个方案是比较推荐的。

    解决方案二:

    可以把用户的Session放在数据库中;

    缺点:大量用户信息保存在数据库,会造成数据库压力太大。而且数据需要序列化和反序列化,会影响应用程序的性能;

    3)DNS负载均衡

    DNS(Domain Name System)负责域名解析的服务,域名url实际上是服务器的别名,实际映射是一个IP地址,解析过程,就是DNS完成域名到IP的映射。而一个域名是可以配置成对应多个IP的。因此,DNS也就可以作为负载均衡服务。

    缺点:如果一条服务器故障,循环复用DNS继续把请求发送到该台故障的服务器中。

    4)IP负载均衡

    IP负载均衡服务是工作在网络层(修改IP)和传输层(修改端口,第四层),比起工作在应用层(第七层)性能要高出非常多。原理是,他是对IP层的数据包的IP地址和端口信息进行修改,达到负载均衡的目的。这种方式,也被称为“四层负载均衡”。常见的负载均衡方式,

    是LVS(Linux Virtual Server,Linux虚拟服务),通过IPVS(IP Virtual Server,IP虚拟服务)来实现。

    IP负载均衡的性能要高出Nginx的反向代理很多,它只处理到传输层为止的数据包,

    并不做进一步的组包,然后直接转发给实际服务器。不过,它的配置和搭建比较复杂。

    补充:

    Nginx Plus的商业授权版开始具有TCP负载均衡的功能。从Nginx 1.7.7版本开始加入的,现在变成了一个商业收费版本,想要试用,需要在官网申请。也就是说,Nginx除了以前常用的HTTP负载均衡外,Nginx增加基于TCP协议实现的负载均衡方法。

    HTTP负载均衡,也就是我们通常所有“七层负载均衡”,工作在第七层“应用层”。而TCP负载均衡,就是我们通常所说的“四层负载均衡”,工作在“网络层”和“传输层”。例如,LVS(Linux Virtual Server,Linux虚拟服务)和F5(一种硬件负载均衡设备),也是属于“四层负载均衡”。

    衡量一个Web系统的吞吐率的指标是QPS(Query Per Second,每秒处理请求数),解决每秒数万次的高并发场景,这个指标非常关键。举个例子,我们假设处理一个业务请求平均响应时间为100ms,同时, 系统内有20台Apache的Web服务器,配置MaxClients为500个(表示Apache的最大连接数目)。

    吞吐率特指web服务器单位时间内处理的请求数;

    那么,我们的Web系统的理论峰值QPS为(理想化的计算方式):

    20*500/0.1 = 100000 (10万QPS)

    0.1代表响应时间100ms转换称1s;

    咦?我们的系统似乎很强大,1秒钟可以处理完10万的请求,5w/s的秒杀似乎是“纸老虎”哈。实际情况,当然没有这么理想。在高并发的实际场景下,机器都处于高负载的状态,在这个时候平均响应时间会被大大增加。

    就Web服务器而言,Apache打开了越多的连接进程,CPU需要处理的上下文切换也越多,额外增加了CPU的消耗,然后就直接导致平均响应时间 增加。因此上述的MaxClient数目,要根据CPU、内存等硬件因素综合考虑,绝对不是越多越好。

    因为作为反向代理服务器,每个并发会建立与客户端的连接和与后端服务的连接,会占用两个连接。

    10、正向代理与反向代理

    正向代理 是一个位于客户端和原始服务器(origin server)之间的服务器,为了从原始服务器取得内容,客户端向代理发送一个请求并指定目标(原始服务器),然后代理向原始服务器转交请求并将获得的内容返回给客户端。客户端必须要进行一些特别的设置才能使用正向代理。

    反向代理服务器:在服务器端接受客户端的请求,然后把请求分发给具体的服务器进行处理,然后再将服务器的响应结果反馈给客户端。

    以上就是我们在.net中面试可能遇到的一些常见问题。

    想要获取更多好的内容,请关注广州达内.Net培训网站!

    广州达内.Net培训

  • 上一篇:广州达内.Net培训教你认识.Net

    下一篇:这些.net工具你都认识吗

2001-2016 达内时代科技集团有限公司 版权所有 京ICP证8000853号-56