面试攻略(.NET相关)

数据结构和算法

数据结构

数据结构之线性表和单链表
数据结构之循环链表
数据结构之双向链表
数据结构之栈和队列
数据结构之树和二叉树
数据结构之图
堆和栈的区别

算法

排序算法
回溯算法
贪心算法
动态规划算法
分支限界算法
分治算法

设计模式

设计模式

HTTP部分

POST、GET的区别
HTTP协议

加密部分

通俗理解数字签名,数字证书和https
C#开发中常用加密解密方法解析

WebApi部分

async await
WebApi 接口参数不再困惑:传参详解
WebApi 接口返回值不困惑:返回值类型详解

MVC部分

1.你知道的控制器和视图之间数据传递的方式有那些?(怎么返回数据到View)
①使用ViewData和TempData
②使用表单
③使用Model
2.mvc的生命周期?

.NET MVC页面生命周期及传统ASP.NET页面周期
3.注册路由的代码写网站的在global文件中的哪个方法中?
Application_Start()方法中

4.mvc和webapi区别?
MVC的主要使用场景在于Web站点的开发,他在后端实现了一套完整的MVC开发框架,能提供方便的页面开发,默认使用Razor视图引擎,提供了后端html构造,用户可以方便地开发出带页面的站点。
而WebAPI主演提供了一套RestfulAPI的开发框架,提供了较为完整的http语义支持,主要用来做开放API,更抽象,更不注重View的生成。
5.EF框架的工作方式
EF框架的三种工作方式
6.MVC路由
MVC路由机制


Js&jQuery部分

1.jQuery中的选择器大致分为:基本选择器,层次选择器,过滤选择器,表单选择器
2.如何来设置和获取HTML 和文本的值?
html()方法 类似于innerHTML属性 可以用来读取或者设置某个元素中的HTML内容
注意:html() 可以用于xhtml文档 不能用于xml文档text() 类似于innerText属性 可以用来读取或设置某个元素中文本内容。val() 可以用来设置和获取元素的值
3.你使用过哪些数据格式,它们各有什么特点?
HTML格式 ,JSON格式,javascript格式,XML格式
a.HTML片段提供外部数据一般来说是最简单的。
b. 如果数据需要重用,而且其他应用程序也可能一次受到影响,那么在性能和文件大小方面具有优势的JSON通常是不错的选择。
c.而当远程应用程序未知时,XML则能够为良好的互操作性提供最可靠的保证。
4.在ajax中data主要有几种方式?
三种,html拼接的,json数组,form表单经serialize()序列化的。
5.AJAX
AJAX是“Asynchronous JavaScript and XML”的缩写。是指一种创建交互式网页应用的网页开发技术。
Ajax应用程序的优势在于:
① 通过异步模式,提升了用户体验。
② 优化了浏览器和服务器之间的传输,减少不必要的数据往返,减少了带宽占用。
③ Ajax引擎在客户端运行,承担了一部分本来由服务器承担的工作,从而减少了大量用户下的服务器负载。
AJAX最大的特点: Ajax可以实现动态不刷新(局部刷新)
Ajax的核心是JavaScript对象XmlHttpRequest。
在ajax中data主要有几种方式?
三种,html拼接的,json数组,form表单经serialize()序列化的。
6.XML
XML是扩展标记语言,能够用一系列简单的标记描述数据 。
XML的解析方式:常用的用dom解析和sax解析。dom解析是一次性读取xml文件并将其构造为DOM对象供程序使用,优点是操作方便,但是比较耗内存。Sax是按事件驱动的方式解析的,占用内存少,但是编程复杂。
XML 与 HTML 的主要区别
① XML是区分大小写字母的,HTML不区分。
② 在HTML中,如果上下文清楚地显示出段落或者列表键在何处结尾,那么你可以省略或者之类的结束标记。在XML中,绝对不能省略掉结束标记。
③ 在XML中,拥有单个标记而没有匹配的结束标记的元素必须用一个 / 字符作为结尾。这样分析器就知道不用 查找结束标记了。
④ 在XML中,属性值必须分装在引号中。在HTML中,引号是可用可不用的。
⑤ 在HTML中,可以拥有不带值的属性名。在XML中,所有的属性都必须带有相应的值。
列举一下你所了解的XML技术及其应用
xml用于配置,用于保存静态数据类型.接触XML最多的是web Services..和config,存储经常使用但是不经常修改的数据。

ASP.Net部分

1.抽象:是从特定的实例中抽取共同性质形成一般化概念的过程。
2.接口与抽象类?
① 接口和抽象类都用于抽象,接口是抽象类的抽象。
② 接口中只有方法声明,没有实现(无方法体);在接口中声明的方法具有public abstract属性,一个类可以实现多个接口(即多继承),接口以‘,’分隔;接口中的方法必须全部实现。
③ 抽象类可以有部分方法实现,抽象类必须通过继承才能使用。
3.面向对象的特征?
1)继承:通过子类可以实现继承,子类继承父类的所有状态和行为,同时添加自身的状态和行为。
2)封装:将代码及处理数据绑定在一起的一种编程机制,该机制保证程序和数据不受外部干扰。
3)多态:包括重载和重写。重载为编译时多态,重写是运行时多态。重载必须是同类中名称相同参数不同(包括个数不同和类型不同),但返回类型不同不构成重载;重写发生于子类对父类的覆盖,子类继承父类方法名相同、参数列表相同、返回类型相同才构成重写。
4.简述 private、 protected、 public、 internal 修饰符的访问权限。
1)private:私有访问,它只能在声明自身的类中进行访问。
2)protected:表示受保护的访问,该类内部和继承类中可以访问。
3)public :表示公共访问,在代码任何位置都可对其进行访问。
4)internal表示内部成员,在同一命名空间内可以访问。
5.ASP.NET 页面之间传递值的几种方式
① 使用QueryString, 如....?id=1; response. Redirect().... (url)
② 使用Session变量
③ 使用Server.Transfer
④ 使用Application
⑤ 使用Cache
⑥ 使用HttpContext的Item属性
⑦ 使用文件
⑧ 使用数据库
⑨ 使用Cookie
6..net中读写数据库需要用到那些类?他们的作用?
DataSet:数据集。
DataCommand:执行语句命令。
DataAdapter:数据的集合,用于填充。
DataReader:数据只读器。
7.请详述在dotnet中类(class)与结构(struct)的异同?
Class可以被实例化,属于引用类型,是分配在内存的堆上的,Struct属于值类型,是分配在内存的栈上的.
8.sleep() 和 wait() 有什么区别?
sleep()方法是使线程停止一段时间的方法。在sleep 时间间隔期满后,线程不一定立即恢复执行。这是因为在那个时刻,其它线程可能正在运行而且没有被调度为放弃执行,除非(a)“醒来”的线程具有更高的优先级(b)正在运行的线程因为其它原因而阻塞。wait()是线程交互时,如果线程对一个同步对象x 发出一个wait()调用,该线程会暂停执行,被调对象进入等待状态,直到被唤醒或等待时间到。
9.GC是什么? 为什么要有GC?
GC是垃圾收集器。程序员不用担心内存管理,因为垃圾收集器会自动进行管理。要请求垃圾收集,可以调用下面的方法之一:
System.gc()
Runtime.getRuntime().gc()
10.如何处理几十万条并发数据?
用存储过程或事务。取得最大标识的时候同时更新..注意主键不是自增量方式这种方法并发的时候是不会有重复主键的..取得最大标识要有一个存储过程来获取.
11.Session有什么重大BUG,微软提出了什么方法加以解决?
是iis中由于有进程回收机制,系统繁忙的话Session会丢失,可以用Sate server或SQL Server数据库的方式存储Session不过这种方式比较慢,而且无法捕获Session的END事件。
12.进程和线程的区别?
① 单位:进程是系统进行资源分配和调度的单位;线程是CPU调度和分派的单位。
② 一个进程可以有多个线程,这些线程共享这个进程的资源。
进程是比线程大的程序运行单元,都是由操作系统所体会的系统运行单元,一个程序中至少要有一个进程,有一个进程中,至少要有一个线程,线程的划分尺度要比进程要小。
③ 进程拥有独立的内存单元,线程是共享内存,从而极大的提高了程序的运行效率同一个进程中的多个线程可以并发执行。
④ 边界:二者都定义了某种边界,进程是应用程序与应用程序之间的边界,不同的进程之间不能共享代码和数据空间,而线程是代码执行堆栈和执行上下文的边界。
13.SQL注入,如何防止?
利用sql关键字对网站进行攻击(例如login password输入where 1=1 and)。过滤关键字
14.装箱和拆箱的含义
装箱:将值类型转换为引用类型。拆箱:将引用类型转换为值类型。
15.什么是虚函数?什么是抽象函数?
虚函数:没有实现的,可由子类继承并重写的函数。
抽象函数:规定其非虚子类必须实现的函数,必须被重写。
16.HashMap和Hashtable的区别。
都是一个字典结构,用来存储键值对,区别在于HashiMap非线程安全,Hashtable是线程安全。HashMap是Hashtable的轻量级实现(非线程安全的实现),他们都完成了Map接口,主要区别在于HashMap允许空(null)键值(key),由于非线程安全,效率上可能高于Hashtable.
17.什么是面向对象
面向对象OO(object oriented) = 面向对象的分析OOA(Object Oriented Analysis) + 面向对象的设计OOD(Design) +......OOP;
通俗的解释就是万物皆对象,把所有的事物都看作一个个可以独立的对象(单元),它们可以自己完成自己的功能,而不是像C那样分成一个个函数;
现在纯正的OO语言主要是java和C#,C++也支持OO,C是面向过程的。
18.阐述面向接口、面向对象、面向方面编程的区别
面向对象不好解释,可以理解为以一切元素都是对象,在设计时以对象为单位,考虑它的属性及方法。设计中采用了封装、继承、抽象的手法 面向接口本身就是面向对象的,无所谓区别,只不过面向接口的好处是耦合性低 面向方面Aspect-Oriented Programming (AOP)就是大名鼎鼎的AOP。其实有点象struts里的拦截。
举例:假设有在一个应用系统中,有一个共享的数据必须被并发同时访问,首先,将这个数据封装在数据对象中,称为Data Class,同时,将有多个访问类,专门用于在同一时刻访问这同一个数据对象。
为了完成上述并发访问同一资源的功能,需要引入锁Lock的概念,也就是说,某个时刻,当有一个访问类访问这个数据对象时,这个数据对象必须上锁Locked,用完后就立即解锁unLocked,再供其它访问类访问。
19.程序集与命名空间有什么不同?
命名空间是用于避免命名冲突,专用于组织代码,当代码要在其他某个应用程序中重用时,可以降低复杂性。
程序集是重用代码的一种方式验证控件
不同: 可以将相同命名空间中的类部署到不同的程序集中,也可以命名空间中的类部署到一个程序集中

命名空间 程序集
有逻辑编译时机制 有物理编译时机制
不是运行时实体 是运行时实体
为源代码元素的名称提供逻辑结构 为可执行文件的运行时提供物理结构

20.怎样理解静态变量?静态成员和非静态成员的区别?
静态变量属于类,而不属于对象;并对所有对象所享;静态成员在加类的时候就被加载。
21.静态成员和非静态成员的区别?
静态变量使用 static 修饰符进行声明,静态成员在加类的时候就被加载(在类被实例化时创建,哪个对),通过类进行访问
不带有static 修饰符声明的变量称做非静态变量,在对象被实例化时创建,通过对象进行访问
一个类的所有实例的同一静态变量都是同一个值,同一个类的不同实例的同一非静态变量可以是不同的值
静态函数的实现里不能使用非静态成员,如非静态变量、非静态函数等
22.在项目中为什么使用接口?接口的好处是什么?什么是面向接口开发?
接口只是一种约束。使用 interface 去定义某些特定的功能,为的是不要将代码写死在自定义类里,以便在系统开发、事后维护、功能扩充 上更有扩展性。
接口用于描述一组类的公共方法/公共属性. 它不实现任何的方法或属性,只是告诉继承它的类至少要实现哪些功能,继承它的类可以增加自己的方法. 使用接口可以使继承它的类: 命名统一/规范,易于维护。提供永远的接口。 当类增加时,现有接口方法能够满足继承类中的大多数方法,没必要重新给新类设计一组方法,也节省了代码,提高了开发效率。
面向接口开发的好处有结构清晰,类间通信简单易懂,扩展性好,提高复用性等等。
面向接口开发就是指面向抽象协议编程,实现者在实现时要严格按协议来办。
23.接口和类有什么异同?
不同点:
① 不能直接实例化接口。
② 接口只包含方法或属性的声明,不包含方法的实现。
③ 接口可以多继承,类只能单继承。
④ 类有分部类的概念,定义可在不同的源文件之间进行拆分。
⑤ 表达的含义不同,接口主要定义一种规范,统一调用方法,也就是规范类,约束类,类是方法功能的实现和集合
相同点:
① 接口、类和结构都可以从多个接口继承。
② 接口类似于抽象基类:继承接口的任何非抽象类型都必须实现接口的所有成员。
③ 接口和类都可以包含事件、索引器、方法和属性。
24.<%# %> 和<% %> 有什么区别?
<%# %>表示绑定的数据源
<% %>是服务器端代码块
25.string与stringbuilder区别

string与stringbuilder区别
26.值类型和引用类型的区别?
值类型包括简单类型、结构体类型和枚举类型,引用类型包括自定义类、数组、接口、委托等
① 赋值方式:将一个值类型变量赋给另一个值类型变量时,将复制包含的值。这与引用类型变量的赋值不同,引用类型变量的赋值只复制对象的引用,而不复制对象本身。
② 派生:值类型不可能派生出新的类型,所有的值类型均隐式派生自 System.ValueType。但与引用类型相同的是,结构也可以实现接口。
③ null:与引用类型不同,值类型不可能包含 null 值。然而,可空类型功能允许将 null 赋给值类型。
④ 每种值类型均有一个隐式的默认构造函数来初始化该类型的默认值。
值类型主要由两类组成:结构、枚举
结构分为以下几类:Numeric(数值)类型、整型、浮点型、decimal、bool、用户定义的结构。
引用类型的变量又称为对象,可存储对实际数据的引用。声明引用类型的关键字:class、interface、delegate、内置引用类型: object、string
⑤ 值类型存贮在栈中,而引用类型存贮在动态的堆中,栈是先进先出的有系统管理的空间,而堆是由应用程序控制的可随时申请和释放该空间,在Donnet中一般情况下有垃圾收集器处理,他们的不同导致在编程上的不同。
27.ASP.Net的身份验证方式有哪些?分别是什么原理?
Asp.net的身份验证有有三种,分别是"Windows | Forms | Passport",
window验证: ASP.NET会结合信息服务 (IIS),为每个用户开启window帐号,验证其身份,安全性较高。
forms验证:为每个登陆用户写入一个身份验证票据,在web使用最广的验证方式,灵活方便。
passport验证:由 Microsoft 提供的集中身份验证服务,该服务为成员站点提供单一登录和核心配置
28.概述反射和序列化
反射:程序集包含模块,而模块包含类型,类型又包含成员。反射则提供了封装程序集、模块和类型的对象。您可以使用反射在运行时动态地创建类型的实例,将类型绑定到现有对象,或从现有对象中获取类型。然后,可以调用类型的方法或访问其字段和属性
通过反射命名空间中的类以及 System.Type,可以使用反射在运行时动态地创建类型的实例,然后调用和访问这些实例。也可以获取有关已加载的程序集和在其中定义的类型(如类、接口和值类型)的信息。
序列化:序列化是将对象转换为容易传输的格式的过程。例如,可以序列化一个对象,然后使用 HTTP 通过 Internet 在客户端和服务器之间传输该对象。在另一端,反序列化将从该流重新构造对象。
29.依赖注入控制反转好处
依赖注入控制反转好处
30.CS(Client/Server):客户端----服务器结构
是从客户端到服务器,对客户端要求较高
优点:客户端响应快,安全性能高
缺点:需要专门的客户端安装程序,开发维护成本
BS(Browser/Server):浏览器----服务器结构
主要事务逻辑在服务器端(Server)实现,形成三层(3-tier)结构。这样使得客户端电脑负荷大大简化(因此被称为瘦客户端),减轻了系统维护、升级的支出成本,降低了用户的总体成本
优点:
布性强,客户端零维护。只要有网络、浏览器,可以随时随地进行查询、浏览等业务处理。
维护简单方便,只需要改变网页,即可实现所有用户的同步更新。
开发简单,共享性强。
缺点:
个性化特点明显降低,无法实现具有个性化的功能要求。
在速度和安全性上需要花费巨大的设计成本。
功能弱化,难以实现传统模式下的特殊功能要求。
CS响应速度快,安全性强,一般应用于局域网中,但是开发维护成本高;BS可以实现跨平台,客户端零维护,但是个性化能力低,响应速度较慢。

展开阅读全文

没有更多推荐了,返回首页