.NET常见的面试题(都是易错点)

简述 private、 protected、 public、 internal 修饰符的访问权限。

答:private : 私有成员, 在类的内部才可以访问。

  protected : 保护成员,该类内部和继承类中可以访问。

  public : 公共成员,完全公开,没有访问限制。

  internal: 在同一命名空间内可以访问。

 

C#中的委托是什么?事件是不是一种委托?

答 :委托可以把一个方法作为参数代入另一个方法。

委托可以理解为指向一个函数的引用。

事件是一种特殊的委托

委托声明的关键字是_delegate.

 

override与重载的区别

重载是方法的名称相同,参数或参数类型不同,方法重载的目的: 进行多次方法重载以适应不同的需要。

override是对父类中函数的重写,用于实现多态。

 

用.net做B/S结构的系统,您是用几层结构来开发,每一层之间的关系以及为什么要这样分层?

答:使用MVC模式进行分层,一般为3层:数据访问层,业务层,表示层

数据访问层对数据库进行增删查改,用于操作数据库。

业务层一般分为二层,业务层为表示层提供数据,业务规则层实现用户密码的安全等。

表示层:为了与用户交互例,如用户添加表单。

优点:分工明确,层次清晰,易于调试,具有可扩展性。

缺点:增加成本。

 

CTS、CLS、CLR分别作何解释?

答:CTS:通用语言系统。CLS:通用语言规范(.Net依赖以下哪项技术实现跨语言互用性)。CLR:公共语言运行库。

 

什么是装箱和拆箱?

答:从值类型接口转换到引用类型装箱。从引用类型转换到值类型拆箱。

当整数a赋值给一个object对象时,整数a将会被?答:装箱。

在程序中尽量避免拆装箱,因为会影响程序性能。(内存的变化,触发GC,影响程序性能的两点)

 

序列化:将对象转换为另一种媒介传输的格式过程,(将对象转化成二进制的过程,便于在网络中进行传输数据)。如,序列化一个对象,用Http通过internet在客户端和服务器之间传递该对象,在另一端用反序列化从该流中重新得到对象。

 

UDP和TCP连接有和异同? (ISO五层模型,数据传输层,网络层研究的是IP地址、端口号等问题)

答:TCP协议是面向连接的,需要经过三次握手才能连接上,是传输控制协议,是可靠的,字节流服务,当用户和服务器彼此进行数据交互的时候,必须在他们数据交互前要进行TCP连接之后才能传输数据(客户端与服务器通过三次握手进行连接,然后才能传输数据)。

TCP提供超时重拨,检验数据功能。

UDP是用户数据报协议,是一个简单的面向数据报的传输协议,是不可靠的连接。

 

如何理解.net中的垃圾回收机制?

答:.NET中的垃圾回收机制是引用程序对内存的回收和释放。当每次用new关键字创建一个对象时,运行库都要从托管堆中为其分配内存,因为空间是有限的,最终垃圾回收机制是要回收不用的内存的。已释放内存,重新使用。

GC是什么? 为什么要有GC?

答:GC是垃圾收集器。程序员不用担心内存管理,因为垃圾收集器会自动进行管理。要请求垃圾收集,可以调用下面的方法之一:

System.gc()    Runtime.getRuntime().gc()


面向对象的三大基本原则?答:封装,继承,多态。

在.NET中所有类的基类是?  答:object (小写)。

 

Heap与stack的差别? (堆栈的区别)

答:Heap是堆,空间是由手动操作分配和释放的,它的存储区很大的自由存储区。

Stack是栈,是由是操作系统自动分配和释放的,栈上的空间是有限的。程序在编译期间变量和函数分配内存都是在栈上进行的,且在运行时函数调用时的参数的传递也是在栈上进行的。

堆和栈的区别?

答:栈:由编译器自动分配、释放。在函数体中定义的变量通常在栈上。堆:一般由程序员分配释放。用new、malloc等分配内存函数分配得到的就是在堆上。


进程和线程分别该怎么理解

答:进程是比线程大的程序运行单元,都是由操作系统所体会的系统运行单元,一个程序中至少要有一个进程,有一个进程中,至少要有一个线程,线程的划分尺度要比进程要小,进程拥有独立的内存单元线程是共享内存,从而极大的提高了程序的运行效率同一个进程中的多个线程可以并发执行。进程和线程的区别?

答:进程是操作系统进行资源分配和调度的单位线程是CPU调度和分派的单位一个进程可以有多个线程,这些线程共享这个进程的资源


在C#中,string str = null 与 string str = “” 请尽量使用文字或图象说明其中的区别。

答:string str = null是不给他分配内存空间,而string str = ""给它分配长度为空字符串的内存空间

 

请详述在.net中类(class)与结构(struct)的异同

答:class可以被实例化, 属于引用类型, class可以实现接口和单继承其他类,还可以作为基类型,是分配在内存的堆上的 ,struct属于值类型,不能作为基类型,但是可以实现接口,是分配在内存的栈上的.

 

简要谈一下您对微软.NET 构架下remoting和webservice两项技术的理解以及实际中的应用。

答:webservice主要是可利用HTTP,穿透防火墙。而Remoting可以利用TCP/IP,二进制传送提高效率。


能用foreach遍历访问的对象需要实现 ___IEnumerable____接口(比如List泛型集合)或声明_GetEnumerator_方法的类型。

 

String s = new String("xyz");创建了几个String Object?

答:两个对象,一个是“xyx”,一个是指向“xyx”的引用对象s。

 

启动一个线程是用run()还是start()?

答:启动一个线程是调用start()方法,使线程所代表的虚拟处理机处于可运行状态,这意味着它可以由JVM调度并执行。这并不意味着线程就会立即运行。

 

构造器(构造函数)Constructor是否可被override?

答:构造器Constructor不能被继承,因此不能重写Overriding,但可以被重载Overloading。

 

数组有没有length()这个方法? String有没有length()这个方法?

答:数组没有length()这个方法,有length的属性。String没有length()这个方法,有length属性。集合的Count属性

 

如何处理几十万条并发数据?

存储过程或事务,取得最大标识的时候同时更新.注意主键不是自增量方式这种方法并发的时候是不会有重复主键的..取得最大标识要有一个存储过程来获取。

 

向服务器发送请求有几种方式?

答:get,post。get一般为链接方式,post一般为按钮方式。

 

软件开发过程一般有几个阶段?每个阶段的作用?

答:可行性分析(风险控制),需求分析架构设计代码编写测试部署维护

 

在c#中using和new这两个关键字有什么意义,请写出你所知道的意义?

1)using指令和语句;2)new创建实例new隐藏基类中方法。

答:using 引入名称空间或者使用非托管资源,使用完对象后自动执行实现了IDisposable接口的类的Dispose方法

new 新建实例或者隐藏父类方法

 

需要实现对一个字符串的处理,首先将该字符串首尾的空格去掉,如果字符串中间还有连续空格的话,仅保留一个空格,即允许字符串中间有多个空格,但连续的空格数不可超过一个.

答:string inputStr=" xx   xx  ";

//使用了正则表达式

inputStr=Regex.Replace(inputStr.Trim()," *"," ");

 

什么叫做SQL注入,如何防止?请举例说明。

答:利用sql关键字对网站进行攻击。过滤关键字'等

 

什么是反射?答:动态获取程序集信息

 

什么是Application Pool?应用程序池

答:Web应用,类似Thread Pool,提高并发性能

 

什么是虚函数,虚方法?什么是抽象函数?

答:虚函数:没有实现的,可由子类继承并重写的函数。抽象函数:规定其非虚子类必须实现的函数,必须被重写。

 

什么是Web Service?

答:Web Service便是基于网络的、分布式的模块化组件,它执行特定的任务,遵守具体的技术规范,这些规范使得Web Service能与其他兼容的组件进行互操作。

 

ADO.net中常用的对象有哪些?分别描述一下。

SqlConnection 数据库连接对象

SqlCommand 数据库命令

DataReader 数据读取器

DataSet 数据集

DataAdaprer数据适配器

 

c#中的三元运算符是 ?:。

 

用sealed修饰的类有什么特点?是否可以继承String类?

密封,不能继承。 String类是密封类故不可以继承。

 

在Asp.net中所有的自定义用户控件都必须继承自Control。

 

在.Net中所有可序列化的类都被标记为[serializable]

 

.net的错误处理机制(异常处理机制)是什么?

答:.net错误处理机制采用try->catch->finally结构,发生错误时,层层上抛,直到找到匹配的Catch为止

 

&和&&的区别。

&是位运算符,表示按位与运算,&&是逻辑运算符,表示逻辑与(and).

 

对数据的并发采用什么办法进行处理较好(网络请求的并发,数据库操作的并发)。

可以控制连接池的连接数量,条件好的话可以用负载平衡。

 

B/S与C/S结构的主要特征:

首先,在系统的性能方面。只要拥有可上网的浏览器,就可以使用B/S系统。不过,B/S结构的客户端只能完成浏览、查询、数据输入等简单功能,绝大部分工作要由服务器承担,这就对服务器提出了很高的要求,无形中增加了用户在这一方面的投入。采用C/S结构时,客户端和服务器都承担部分工作,有效利用了客户端和服务器端的资源,使用户不必在硬件上有更多的投入。另外,浏览器页面不便于修改,这为用户定制自己的文件时带来了不便,比如用户想自定义一个报表,用B/S结构的系统就比较难完成。

其次,在系统的开发方面,C/S结构的开发对开发者提出了较高的要求,整个开发过程比较复杂。与B/S结构相比,C/S技术的历史更为“悠久”,从技术成熟度和开发人员普遍掌握的水平来看更为成熟。

第三,系统升级方面。C/S结构中若有某一模块发生改变,可能要关联到其它模块的变动,使系统升级的成本较大;而B/S结构在开发、维护阶段几乎所有的工作都集中在服务器端,只需更新服务器端的软件就可以了。如果系统升级比较频繁,那么B/S架构的产品就具有维护工作量少的优势。

第四,安全性方面。在安全性上,B/S结构则略显不足,毕竟现在网络安全系数不高,只要拥有密码,任何人都可以进入到用户的系统中;而C/S结构由于需要特定的客户端软件,并且一般来说都要对客户端加密,甚至可以限定只有某一台计算机可以使用这个客户端,因而对安全性有更多的保障

 

触发器的作用?

触发器是一种特殊的存储过程,主要是通过事件来触发而被执行的它可以强化约束,来维护数据的完整性和一致性,可以跟踪数据库内的操作从而不允许未经许可的更新和变化。可以联级运算。如,某表上的触发器上包含对另一个表的数据操作,而该操作又会导致该表触发器被触发

 

什么是存储过程?用什么来调用?

存储过程是一个预编译的SQL语句,优点是允许模块化的设计,就是说只需创建一次,以后在该程序中就可以调用多次。如果某次操作需要执行多次SQL,使用存储过程比单纯SQL语句执行要快。可以用一个命令对象来调用存储过程

 

什么是内存泄漏?

一般我们所说的内存泄漏指的是堆内存的泄漏。堆内存是程序从堆中为其分配的,大小任意的,使用完后要显示释放内存。当应用程序用关键字new等创建对象时,就从堆中为它分配一块内存,使用完后程序调用free或者delete释放该内存,否则就说该内存就不能被使用,我们就说该内存被泄漏了将查询封装进存储过程中,通过调用存储过程实现动态调用;表结构发生变化后修改相应的存储过程即可再不修改程序的情况下实现查询

 

请问: String类与StringBuilder类有什么区别?为什么在.Net类库中要同时存在这2个类?

————————————面试技巧—————————————>

面试是很奇妙的一件事情,在短短的一段时间内,要让一个完全陌生的人认可自己的专业能力,认可自己的人品,认可自己的职业习惯等(认可自己的专业能力,认可自己的人品,认可自己的职业习惯)。

而同样,被面试者需要判断这是否是一家靠谱的公司,是不是有钱,是不是适合自己工作,是不是和自己发展方向一致等(自己的职业规划和公司的发展方向是否一致,薪水怎么样)。

基本仪容和礼仪(基本仪容和礼仪)在日常生活也是非常重要的,判断一个人是否有教养,是否有素质的基本要求。干净整洁。

礼仪:多说“请”,“您”,“谢谢”,记得进门后关门,前台给你倒的水走的时候记得拿出去扔掉。坐下来面对面试官要有坐像,不要跟在家里一样太随便,说话口齿清楚,慢一点说,不要跟打机关枪一样。

谦虚:任何时候,把自己放在一个相对低的姿态,自己是来面试,不是来教育面试官的,抱着一种接受检阅和学习的态度面对面试,千万千万不要觉得自己主角光环加身。

对于程序猿来说,专业基础知识绝对是重中之重,是面试成功的最基础要素。

面试的过程本质上就是一次沟通的过程,候选人在短短的时间内要尽量的向对方展现自己的长处,隐藏自己的短处,尽量让对方问题得到圆满答复并且留下较好印象

过往项目经验:自己都会想办法搞清楚整个项目的业务流程,研发背景,内部模块功能,和外部如何实现集成,底层数据库的设计整体系统架构设计等等。

热门技术点的掌握:其实这是个增分项目,这一点就会成为你绝对的亮点。

所谓技多不压身,就是这个道理。

如果想求职的话,无论如何都弄一个项目来,现在开始做一个,或者找一个自己知道细节的项目都行,然后详细些写在简历上,包括用到的技术,设计思路,有些什么功能以及是怎样实现的,用来展示技术,乱七八糟的功能没有也没关系,但是核心功能一定要做好,你可以说这是快速原型。

你要想尽一切办法把考官带到你所熟悉的领域中,这样你才能很好的发挥!


C#----->windows----->1)窗体应用程序,2)控制台应用程序。
项目名称----->解决方案名称
program.cs 类文件
视图菜单----->解决方案资源管理器
namespace 命名空间(其实是项目的名字)
引用命名空间:标识某个类在哪个项目下?你想使用另外一个项目下的类,就要导入此项目的名称。

1).net中的文件分类:
.sln(sollution):解决方案名称,里面包含整个解决方法的信息,可以双击运行。
.csproj:项目文件,里面包含这个项目的信息,可以双击运行。

2)快捷键F5与Ctrl+Shift+B的区别
Ctrl+Shift+B:生成解决方案,可以用于检查语法错误;错误列表面板,双击错误,可以定位到错误出现的代码行。
运行程序之前,先生成解决方案,帮助我们语法错误。
生成解决方案----->运行解决方案
F5:生成解决方案,并运行解决方案(调试与发布)。
Shift+F5:停止调试。

3)VS的常用设置:
行号:工具菜单---->选项---->文本编辑器---->所有语言
字体:工具菜单---->选项---->环境---->字体和颜色
启动项目:当前选定项目,你在哪个项目中进行编辑,就启动哪个项目
项目移除与项目重新加载,项目卸载了就不能使用 

4)VS中常用的快捷键:
格式化代码(对齐代码):Ctrl+K+D
撤销:Ctrl+Z
保存:Ctrl+S
弹出智能提示:Ctrl+J (可以查看参数类型,特别有用)
注释选中代码:Ctrl+K+C
取消注释代码:Ctrl+K+U
查看类的源码:F12
添加与取消断点:F9
逐过程:F11
逐语句:F10
停止调试:Shift+F5
自动生成try-catch{}代码块,按下tab键
自动生成if/else{}代码块,按下tab键
自动生成构造方法,按下ctor+tab键
向下复制一行,没有直接实现的快捷键,不用移动光标直接复制:Ctrl+C,Ctrl+V
Ctrl+. 这是vs中的辅助键(万能键)
自动生成字段的属性:Ctrl+R, Ctrl+E
Ctrl+L:删除一行代码
Ctrl+Alt+L:打开解决方案管理器面板
for循环结构能够自动生成 tab键
Shift+Alt+F10:导包快捷键

5).net平台是什么?
是微软设计的一个用于发开各类应用的框架和程序运行库。
.net平台组成:.net Framework+vs
vs提供的开发语言,.net Framework类库,公共语言运行库(CLR),微软的操作系统
CLR有两部分组成:CTS,通用类型系统,它消除了不同开发语言之间的数据类型的差别;CLS公共语言规范:用于消除不同开发语言之间的语法规范。
CLR/CTS/CLS
生成解决方法:其实是将源代码代码编译成微软的中间语言IL.
ADO.NET:是一组用于和数据源进行交互的面向对象类库,通常情况下,数据源是数据库,但它同样也能够是文本文件、Excel表格或者XML文件

6)vs断点调试(调试菜单里都有)
调试就是发现设备中的问题,并解决问题。
当程序越来越复杂时,需要专门的技术来发现和定位错误,这就是程序调试。
程序调试一般用于调试逻辑错误,语法错误一般编译器都直接给我提示了。(逻辑错误、语法错误)

如何打断点,如何查看变量的值,逐语句F10与逐过程F11的区别
断点:程序执行到这里,就会被拦截。
逐语句:进入方法内部
逐过程:跳过方法的执行
局部变量面板:查看变量的值

设置断点---->调试运行---->观察变量---->分析问题---->修改代码

设置断点分析可能出现错误的位置并设置断点
调试运行:启动调试,单步运行
观察变量:不断观察特定变量的值
分析问题
修改代码:重新运行。
一般需要调试的现象:逻辑错误,程序出现异常无法找到原因。

7)IIS服务器发布步骤:
怎么发布自己的应用程序到IIS上?
如何在IIS服务器上建立网站?
如何创建asp.net网站?如何添加新的页面?

a、如何安装IIS(Internet Information Service管理器)
控制面板---->程序---->程序和功能---->启用或关闭windows功能
主要选择三项
Internet信息服务:WEB管理工具和万维网服务(安全性、常见HTTP功能、性能功能、应用程序开发功能、运行状况和诊断)
.NET fRAMEWORK 3.5.1
MSMQ服务器

b、修改控制面板的查看方式为“小图标”
管理工具---->Internet信息服务(IIS)管理器---->单击即可
右键单击主机名---->添加网站---->网站名称---->物理路径(网站所在地址)

c、设置端口不被防火墙拦截:
控制面板---->系统和安全---->windows防火墙---->高级设置
新建访问规则


你可能感兴趣的:(.net开发)