注:标明*的问题属于选择性掌握的内容,能掌握更好,没掌握也不要紧。html
下面的参考解答只是帮助你们理解,不用背,变幻无穷,不要梦想着把题覆盖了,下面的题是供你们查漏补缺用的,真正的把这些题搞懂了,才能“以不变应万变”。回答问题的时候能联系作过项目的例子是最好的,有的问题后面我已经补充联系到项目中的对应的案例了。程序员
1、简述 private、 protected、 public、 internal 修饰符的访问权限。web
private : 私有成员, 在类的内部才能够访问。面试
protected : 保护成员,该类内部和继承类中能够访问。ajax
public : 公共成员,彻底公开,没有访问限制。算法
internal: 当前程序集内能够访问。sql
2、ADO.NET中的五个主要对象数据库
SQLConnection:主要是开启程序和数据库之间的链接。Close和Dispose的区别,Close之后还能够Open,Dispose之后则不能再用编程
SQLCommand:主要能够用来对数据库发出一些指令,例如查询、新增、修改、删除指令json
DataAdapter:主要是在数据源以及DataSet 之间执行数据传输的工做。
DataSet:这个对象能够视为一个暂存区(Cache),能够把从数据库中所查询到的数据保留起来,DataSet是放在内存中的。
DataSet包含若干DataTable、DataTableTable包含若干DataRow。
DataReader:当咱们只须要循序的读取数据而不须要其它操做时,可使用DataReader 对象。DataReader对象只是一次一笔向下循序的读取数据源中的数据,这些数据是存在数据库服务器中的,而不是一次性加载到程序的内存中的,只能(经过游标)读取当前行的数据。
ADO.NET 使用Connection 对象来链接数据库,使用Command 或DataAdapter对象来执行SQL语句,并将执行的结果返回给DataReader 或 DataAdapter ,而后再使用取得的DataReader 或DataAdapter 对象操做数据结果。
3、列举ASP.NET 页面之间传递值的几种方式。
1.使用QueryString, 如....?id=1; response. Redirect()....
2.使用Session变量
3.使用Server.Transfer
4.Cookie传值
4、C#中的委托是什么?事件是否是一种委托?事件和委托的关系。
委托能够把一个方法做为参数代入另外一个方法。
委托能够理解为指向一个函数的指针。
委托和事件没有可比性,由于委托是类型,事件是对象,下面说的是委托的对象(用委托方式实现的事件)和(标准的event方式实现)事件的区别。事件的内部是用委托实现的。由于对于事件来说,外部只能“注册本身+=、注销本身-=”,外界不能够注销其余的注册者,外界不能够主动触发事件,所以若是用Delegate就无法进行上面的控制,所以诞生了事件这种语法。事件是用来阉割委托实例的,类比用一个自定义类阉割List。事件只能add、remove本身,不能赋值。事件只能+=、-=,不能= 。加分的补充回答:事件内部就是一个private的委托和add、remove两个方法
面试聊:用Reflector查看.Net的类的内部实现,解决问题。
5、override与重载(overload)的区别
重载是方法的名称相同。参数或参数类型不一样,进行屡次重载以适应不一样的须要。重载(overload)是面向过程的概念。
Override 是进行基类中函数的重写。Override是面向对象的概念
6、C#中索引器是否只能根据数字进行索引?是否容许多个索引器参数?
参数的个数和类型都是任意的。加分的补充回答:用reflector反编译能够看出,索引器的内部本质上就是set_item、get_item方法。
7、属性和public字段的区别是什么?调用set方法为一个属性设值,而后用get方法读取出来的值必定是set进去的值吗?
属性能够对设值、取值的过程进行非法值控制,好比年龄禁止设值负数,属性内部本质上就是set_***、get_***方法,
必须手写掌握的代码(既包含拿电脑写,拿笔写):
一、 手写三层架构
二、 手写冒泡排序
三、 手写AJAX:XMLHttpRequest
四、 手写增删改查、SQLHelper
冒泡排序
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace maopao1 { class Program { static void Main(string[] args) { int[] mao = { 2, 8, 4, 6, 9 }; for (int i = 0; i < mao.Length-1; i++) { for (int j = 0; j < mao.Length-1-i; j++) { if (mao[j]>mao[j+1]) { int temp = mao[j]; mao[j] = mao[j + 1]; mao[j + 1] = temp; } } } for (int i = 0; i < mao.Length; i++) { Console.Write(mao[i]); } Console.ReadKey(); } } }
8、三层架构
一般意义上的三层架构就是将整个业务应用划分为:表现层(UI)、业务逻辑层(BLL)、数据访问层(DAL)。
区分层次的目的即为了“高内聚,低耦合”的思想。
表现层(UI):通俗讲就是展示给用户的界面,即用户在使用一个系统的时候的所见所得。
业务逻辑层(BLL):针对具体问题的操做,也能够说是对数据层的操做,对数据业务逻辑处理。
数据访问层(DAL):该层所作事务直接操做数据库,针对数据的增添、删除、修改、更新、查找等每层之间是一种垂直的关系。
三层结构是N层结构的一种,通常来讲,层次之间是向下依赖的,下层代码未肯定其接口(契约)前,上层代码是没法开发的,下层代码接口(契约)的变化将使上层的代码一块儿变化。
优势: 分工明确,条理清晰,易于调试,并且具备可扩展性。
缺点: 增长成本。
9、关于拆箱装箱:
1)什么是装箱(boxing)和拆箱(unboxing)? (*)
装箱:从值类型接口转换到引用类型。
拆箱:从引用类型转换到值类型。
2)下面三句代码有没有错,以inboxing或者unboxing为例,解释一下内存是怎么变化的
int i=10;
object obj = i; //boxing
int j = (int)obj;//unboxing
10、在dotnet中类(class)与结构(struct)的异同?
Class能够被实例化,属于引用类型,是分配在内存的堆上的。类是引用传递的。
Struct属于值类型,是分配在内存的栈上的。结构体是复制传递的。加分的回答:Int32、Boolean等都属于结构体。
11、堆和栈的区别?
栈是编译期间就分配好的内存空间,所以你的代码中必须就栈的大小有明确的定义;局部值类型变量、值类型参数等都在栈内存中。
堆是程序运行期间动态分配的内存空间,你能够根据程序的运行状况肯定要分配的堆内存的大小。
12、能用foreach遍历访问的对象的要求
须要实现IEnumerable接口或声明GetEnumerator方法的类型。
13、GC是什么? 为何要有GC?
C/C++中由程序员进行对象的回收像学校食堂中由学生收盘子,.Net中由GC进行垃圾回收像餐馆中店员去回收。
GC是垃圾收集器(Garbage Collection)。程序员不用担忧内存管理,由于垃圾收集器会自动进行管理。GC只能处理托管内存资源的释放,对于非托管资源则不能使用GC进行回收,必须由程序员手工回收,一个例子就是FileStream或者SqlConnection须要程序员调用Dispose进行资源的回收。
要请求垃圾收集,能够调用下面的方法:GC.Collect()通常不须要手动调用GC.Collect()。当一个对象没有任何变量指向(再也不能使用)的时候就能够被回收了。
基础知识:当没有任何变量指向一个对象的时候对象就能够被回收掉了,但不必定会当即被回收。
1四、值类型和引用类型的区别?
C#的值类型包括:结构体(数值类型,bool型,用户定义的结构体),枚举,可空类型。
C#的引用类型包括:数组,用户定义的类、接口、委托,object,字符串。
数组的元素,无论是引用类型仍是值类型,都存储在托管堆上。
1.将一个值类型变量赋给另外一个值类型变量时,将复制包含的值。引用类型变量的赋值只复制对对象的引用,而不复制对象自己。
2.值类型不可能派生出新的类型:全部的值类型均隐式派生自 System.ValueType。但与引用类型相同的是,结构也能够实现接口。
3.值类型不可能包含 null 值:然而,可空类型功能容许将 null 赋给值类型。
4.每种值类型均有一个隐式的默认构造函数来初始化该类型的默认值。
15、C#中的接口和类有什么异同。
不一样点:
不能直接实例化接口。
接口不包含方法的实现。
接口能够多继承,类只能单继承。
类定义可在不一样的源文件之间进行拆分。
相同点:
接口、类和结构均可以从多个接口继承。
接口相似于抽象基类:继承接口的任何非抽象类型都必须实现接口的全部成员。
接口和类均可以包含事件、索引器、方法和属性。
基础知识:接口只能定义方法(只能定义行为,不能定义实现也就是字段),由于事件、索引器、属性本质上都是方法,因此接口中也能够定义事件、索引器、属性。
1六、abstract class和interface有什么区别?
相同点:
都不能被直接实例化,均可以经过继承实现其抽象方法。
不一样点:
接口支持多继承;抽象类不能实现多继承。
接口只能定义行为;抽象类既能够定义行为,还可能提供实现。
接口只包含方法(Method)、属性(Property)、索引器(Index)、事件(Event)的签名,但不能定义字段和包含实现的方法;
抽象类能够定义字段、属性、包含有实现的方法。
接口能够做用于值类型(Struct)和引用类型(Class);抽象类只能做用于引用类型。例如,Struct就能够继承接口,而不能继承类。
加分的补充回答:讲设计模式的时候SettingsProvider的例子。
1七、是否能够继承String类?
String类是sealed类故不能够继承。
sealed是不容许被继承的,单列的时候能够这样约束
1八、
static void Main(string[] args) { Console.WriteLine(GetIt()); Console.ReadKey(); } static int GetIt() { int i = 8; try { i++; Console.WriteLine("a"); return i;//把返回值设定为i,而后“尽快”返回(没啥事就回去吧) } finally { Console.WriteLine("b"); i++; } }
上面程序的执行结果是ab9
1九、int、DateTime、string是否能够为null?
int、DateTime不能,由于其为Struct类型,而结构属于值类型,值类型不能为null,只有引用类型才能被赋值null。string能够为null。
C#中int等值类型不能够为null、而数据库中的int能够为null,这就是纠结的地方。int?就变成了可空的int类型。bool?、DateTime?
int?翻译生成.Net的Nullable<int>,CTS。
29、using关键字有什么用?什么是IDisposable?
using能够声明namespace的引入,还能够实现非托管资源的释放,实现了IDisposiable的类在using中建立,using结束后会自动调用该对象的Dispose方法,释放资源。加分的补充回答:using其实等价于try……finally,用起来更方便。
30、XML 与 HTML 的主要区别
1. XML是区分大小写字母的,HTML不区分。
2. 在HTML中,若是上下文清楚地显示出段落或者列表键在何处结尾,那么你能够省略</p>或者</li>之类的结束标记。在XML中,绝对不能省略掉结束标记。
HTML:<img src="1.jpg"><br><br>
XML:<img src="1.jpg"></img><br/><br/>
3. 在XML中,拥有单个标记而没有匹配的结束标记的元素必须用一个 / 字符做为结尾。这样分析器就知道不用 查找结束标记了。
4. 在XML中,属性值必须分装在引号中。在HTML中,引号是可用可不用的。
5. 在HTML中,能够拥有不带值的属性名。在XML中,全部的属性都必须带有相应的值。
XML是用来存储和传输数据的
HTML是用来显示数据的
若是使用了彻底符合XML语法要求的HTML,那么就叫作符合XHTML标准。符合XHTML标准的页面有利于SEO。
31、string str = null 与 string str =””说明其中的区别。
答:string str = null 是不给他分配内存空间,而string str = \"\" 给它分配长度为空字符串的内存空间。 string str = null没有string对象,string str = “”有一个字符串对象。
string s3 = string.Empty;//反编译发现,string.Empty就是在类构造函数中 Empty = "";
32.写出一条Sql语句:取出表A中第31到第40记录(SQLServer,以自动增加的ID做为主键,注意:ID可能不是连续的。 (这就是SQL的分页 oracle和sqlserver 和MS的不同)
答:解1: select top 10 * from A where id not in (select top 30 id from A)
解2: select top 10 * from A where id > (select max(id) from (select top 30 id from A )as A)
解答3:用ROW_NUMBER实现
解3:select a.* from (select rownum rn,t.* from A t) where rn<30 and rn>41
解4:select t.* from(select rownum rn t.* from A a where rownum<41) t where t. rn>30
解5:SELECT * FROM( select row_number() over(order by id DESC) as rowid,* from [MtPerInfo_tbl] ) t WHERE t.rowid BETWEEN 21 AND 30
my sql:
offset fetch next方式(SQL2012以上的版本才支持:推荐使用 )
select * from ArtistModels order by ArtistId offset 4 rows fetch next 5 rows only
--order by ArtistId offset 页数 rows fetch next 条数 rows only ----
SELECT* FROM T_News order by Id OFFSET 2*5 ROW fetch next 5 rows only
33.面向对象的语言具备________性、_________性、________性
答:封装、继承、多态。
不要背,脑子中要有联想。
35、什么是code-Behind技术。
就是代码隐藏,在ASP.NET中经过ASPX页面指向CS文件的方法实现显示逻辑和处理逻辑的分离,这样有助于web应用程序的建立。好比分工,美工和编程的能够个干各的,不用再像之前asp那样都代码和html代码混在一块儿,难以维护。code-Behind是基于部分类技术实现的,在个人项目的三层代码生成器中用到了部分类。
36、接口是一种引用类型,在接口中能够声明( a),但不能够声明公有的域或私有的成员变量。
a) 方法、属性、索引器和事件;
b) 索引器和字段;
c) 事件和字段;
解读:接口中不能声明字段只能声明方法,属性、索引器和事件最终都编译生成方法。由于字段属于实现层面的东西,只有存取值的时候才会用到字段,因此中接口中不能定义字段。
37. 在ADO.NET中,对于Command对象的ExecuteNonQuery()方法和ExecuteReader()方法,下面叙述错误的是(c)。
a) insert、update、delete等操做的Sql语句主要用ExecuteNonQuery()方法来执行;
b) ExecuteNonQuery()方法返回执行Sql语句所影响的行数。
c) Select操做的Sql语句只能由ExecuteReader()方法来执行;
d) ExecuteReader()方法返回一个DataReader对象; //SqlDataReader
拿SQLHelper实现一下。
38. 下列关于C#中索引器理解正确的是(c )
a) 索引器的参数必须是两个或两个以上
b) 索引器的参数类型必须是整数型
c) 索引器没有名字
d) 以上皆非
39. 下面关于XML的描述错误的是(d)。
a) XML提供一种描述结构化数据的方法;
b) XML 是一种简单、与平台无关并被普遍采用的标准;
c) XML文档可承载各类信息;
d) XML只是为了生成结构化文档;
40、如下的C#代码,试图用来定义一个接口:
public interface IFile
{
int A;
int delFile()
{
A = 3;
}
void disFile();
}
关于以上的代码,如下描述错误的是(d )。
a) 以上的代码中存在的错误包括:不能在接口中定义变量,因此int A代码行将出现错误;
b) 以上的代码中存在的错误包括:接口方法delFile是不容许实现的,因此不能编写具体的实现函数;
c) 代码void disFile();声明无错误,接口能够没有返回值;
d) 代码void disFile();应该编写为void disFile(){};
41、在ASP.NET中有Button控件myButton,要是单击控件时,导航到其余页面http://www.abc.com, 正确的代码为( c)。
a) private void myButton_Click(object sender, System.EventArgs e){Redirect(“http://www.abc.com”);}
b) private void myButton_Click(object sender, System.EventArgs e){Request.Redirect(“http://www.abc.com”);}
c) private void myButton_Click(object sender, System.EventArgs e){Reponse.Redirect(“http://www.abc.com”);}
d) private void myButton_Click(object sender, System.EventArgs e){Request.Redirect(“http://www.abc.com”);return true;}
42. 声明一个委托public delegate int myCallBack(int x); 则用该委托产生的回调方法的原型应该是(b )。
a) void myCallBack(int x) ;
b) int receive(int num) ;
c) string receive(int x) ;
d) 不肯定的;
43.StringBuilder 和 String 的区别?
答:String 在进行运算时(如赋值、拼接等)会产生一个新的实例,而 StringBuilder 则不会。因此在大量字符串拼接或频繁对某一字符串进行操做时最好使用 StringBuilder,不要使用 String
44、.请叙述属性与索引器的区别。 (*)
属性 索引器
经过名称标识。 经过签名标识。
经过简单名称或成员访问来访问。 经过元素访问来访问。
能够为静态成员或实例成员。 必须为实例成员。
属性的 get 访问器没有参数。 索引器的 get 访问器具备与索引器相同的形参表。
属性的 set 访问器包含隐式 value 参数。 除了 value 参数外,索引器的 set 访问器还具备与索引器相同的形参表。
46. 请解释ASP。NET中的web页面与其隐藏类之间的关系?
一个ASP.NET页面通常都对应一个隐藏类,通常都在ASP.NET页面的声明中指定了隐藏类例如一个页面Tst1.aspx的页面声明以下
<%@ Page language="c#" Codebehind="Tst1.aspx.cs" AutoEventWireup="false" Inherits="T1.Tst1" %>
Codebehind="Tst1.aspx.cs" 代表经编译此页面时使用哪个代码文件
Inherits="T1.Tst1" 表用运行时使用哪个隐藏类
aspx页面会编译生成一个类,这个类从隐藏类继承。
49、您在什么状况下会用到虚方法?它与接口有什么不一样?
答案:子类从新定义父类的某一个方法时,必须把父类的方法定义为virtual
在定义接口中不能有方法体,虚方法能够。
实现时,子类能够不从新定义虚方法,但若是一个类继承接口,那必须实现这个接口。
50. 不定项选择:
(1) 如下叙述正确的是: B C
A. 接口中能够有虚方法。B. 一个类能够实现多个接口。 C. 接口不能被实例化。 D. 接口中能够包含已实现的方法。
(2) 从数据库读取记录,你可能用到的方法有:B C D
A. ExecuteNonQuery B. ExecuteScalar C. Fill D. ExecuteReader
(3).对于一个实现了IDisposable接口的类,如下哪些项能够执行与释放或重置非托管资源相关的应用程序定义的任务?(多选) ( ABCD )
A.Close B.Dispose C.Finalize
D.using E.Quit
(4)如下关于ref和out的描述哪些项是正确的?(多选) ( ACD )
A.使用ref参数,传递到ref参数的参数必须最早初始化。
B.使用out参数,传递到out参数的参数必须最早初始化。
C.使用ref参数,必须将参数做为ref参数显式传递到方法。
D.使用out参数,必须将参数做为out参数显式传递到方法。
51. 单项选择:
(1)下列选项中,(C)是引用类型。
a)enum类型 b)struct类型 c)string类型 d)int类型
(2).关于ASP.NET中的代码隐藏文件的描述正确的是(C)
a)Web窗体页的程序的逻辑由代码组成,这些代码的建立用于与窗体交互。编程逻辑惟一与用户界面不一样的文件中。该文件称做为“代码隐藏”文件,若是用C#建立,该文件将具备“.ascx.cs”扩展名。
b)项目中全部Web窗体页的代码隐藏文件都被编译成.EXE文件。
c)项目中全部的Web窗体页的代码隐藏文件都被编译成项目动态连接库(.dll)文件。
d)以上都不正确。
(3).下列描述错误的是(D)
a)类不能够多重继承而接口能够;
b)抽象类自身能够定义成员而接口不能够;
c)抽象类和接口都不能被实例化;
d)一个类能够有多个基类和多个基接口;
52、DataReader和DataSet的异同?
DataReader使用时始终占用SqlConnection,在线操做数据库
每次只在内存中加载一条数据,因此占用的内存是很小的
是只进的、 只读的
DataSet则是将数据一次性加载在内存中.抛弃数据库链接..读取完毕即放弃数据库链接(非链接模式)
DataSet将数据所有加载在内存中.因此比较消耗内存...可是确比DataReader要灵活..能够动态的添加行,列,数据.对数据库进行 回传更新操做(动态操做读入到内存的数据)
53、public static const int A = 1;这段代码有错误么?
错误:const不能被修饰为static ;由于定义为常量 (const )后就是静态的(static )。
54、传入某个属性的set方法的隐含参数的名称是什么?
value,它的类型和属性所声名的类型相同。
55、C#支持多重继承么?
类之间不支持,接口之间支持。类对接口叫作实现,不叫继承。 类是爹、接口是能力,能有多个能力,但不能有多个爹。
56、C#中全部对象共同的基类是什么?
System.Object
57、经过超连接怎样传递中文参数?
答:用URL编码,经过QueryString传递,用urlencode编码 用urldecode解码
58、string、String;int、Int32;Boolean、bool的区别
String、Int32、Boolean等都属于.Net中定义的类,而string、int、bool至关于C#中对这些类定义的别名。CTS。
59、Server.Transfer和Response.Redirect的区别是什么?(常考)
答:Server.Transfer仅是服务器中控制权的转向,在客户端浏览器地址栏中不会显示出转向后的地址;Response.Redirect则是彻底的跳转,浏览器将会获得跳转的地址,并从新发送请求连接。这样,从浏览器的地址栏中能够看到跳转后的连接地址。
Server.Transfer不能够转向外部网站,而Response.Redirect能够。
Server.Execute效果和Server.Transfer相似,可是是把执行的结果嵌入当前页面。
60、不是说字符串是不可变的吗?string s="abc";s="123"不就是变了吗?(传智播客.Net培训班原创模拟题)
String是不可变的在这段代码中,s原先指向一个String对象,内容是 "abc",而后咱们将s指向"123",那么s所指向的那个对象是否发生了改变呢?答案是没有。这时,s不指向原来那个对象了,而指向了另外一个 String对象,内容为"123",原来那个对象还存在于内存之中,只是s这个引用变量再也不指向它了。
61、是否能够从一个static方法内部发出对非static方法的调用?
不能够。由于非static方法是要与对象关联在一块儿的,必须建立一个对象后,才能够在该对象上进行方法调用,而static方法调用时不须要建立对象,能够直接调用。也就是说,当一个static方法被调用时,可能尚未建立任何实例对象,若是从一个static方法中发出对非static方法的调用,那个非static方法是关联到哪一个对象上的呢?这个逻辑没法成立,因此,一个static方法内部不能发出对非static方法的调用。
63、说出一些经常使用的类、接口,请各举5个
要让人家感受你对.Net开发很熟,因此,不能仅仅只列谁都能想到的那些东西,要多列你在作项目中涉及的那些东西。就写你最近写的那些程序中涉及的那些类。
经常使用的类:StreamReader、WebClient、Dictionary<K,V>、StringBuilder、SqlConnection、FileStream、File、Regex、List<T>
经常使用的接口:IDisposable、IEnumerable、IDbConnection、IComparable、ICollection、IList、IDictionary
要出乎意料!不要仅仅完成任务!笔试不是高考!到处要显出牛!
说出几个开源软件?MySQL、Linux、 Discuz、Apache、Paint.Net、Android、Chrome、Notepad++……
开源项目有一些是开发包。开源软件指的是能够直接用的。Jquery、NPOI、ASP.Net MVC、Silverlight Toolkit、AJAX toolkit、json.net
得瑟!
65、编写一个单例(Singleton)类。
参考复习ppt。
把构造函数设置为private,设置一个public、static的对象实例
public FileManager
{
private FileManager(){}
public readonly static FileManager Instance = new FileManager();
}
扩展:搜“C# Singleton”,有线程安全的更牛B的实现
66、什么是sql注入?如何避免sql注入?
用户根据系统的程序构造非法的参数从而致使程序执行不是程序员指望的恶意SQL语句。使用参数化的SQL就能够避免SQL注入。
详细参考复习ppt。举例子,摆事实!
1' or 1=1
67、数据库三范式是什么?
用本身的话解释,而不是背概念。
传智播客风格的非严谨却一会儿明了的解答方式:
第一范式:字段不能有冗余信息,全部字段都是必不可少的。
第二范式:知足第一范式而且表必须有主键。
第三范式:知足第二范式而且表引用其余的表必须经过主键引用。
员工内部→本身的老大→外部的老大
记忆顺序:本身内部不重复→别人引用本身→本身引用别人。
72、post、get的区别
get的参数会显示在浏览器地址栏中,而post的参数不会显示在浏览器地址栏中;
使用post提交的页面在点击【刷新】按钮的时候浏览器通常会提示“是否从新提交”,而get则不会;
用get的页面能够被搜索引擎抓取,而用post的则不能够;
用post能够提交的数据量很是大,而用get能够提交的数据量则很是小(2k),受限于网页地址的长度。
用post能够进行文件的提交,而用get则不能够。
参考阅读:http://www.cnblogs.com/skynet/archive/2010/05/18/1738301.html
解释:引用类型和值类型的区别。
7八、下列哪一个名词和WebService不直接相关?(B)(传智播客.Net培训班原创模拟题)
A、UDDI
B、GUID
C、WSDL
D、SOAP
WebService解决的三个问题:接口的自我描述;采用Http协议等常规协议,不用写原始的Socket;基于Web服务器,不占用80端口以外的端口。
UDDI用来自动发现WebService的协议(*)
SOAP和HTTP的关系:SOAP基于Http协议的,和普通网页不一样的是网页返回HTML,SOAP则是符合SOAP协议的XML数据。
WSDL(WebService Defination Language)是对WebService上的方法名、参数进行描述的协议。对接口的自描述。
SOAP(Simple Object Access Protocol)是对参数、返回值以什么样的格式进行传递进行描述的协议。对报文的格式规范。
实际工做中应该是本身调用别人的WebService或者别人调用本身的WebService,沟通语言就是WSDL,拿到WSDL什么都不用操心。
WebService是跨平台、跨语言调用,能够跨防火墙;缺点:效率低。因此适用于两个非内部系统的通信(好比炒股软件和证券交易所之间的通信)
WCF是对WebService、Socket、MQ等通信方式的一个统一,底层仍是采用这些通讯协议,能够简化这些程序的开发,不用再换不一样通讯协议的时候重写代码而且学一堆新的技术。因此WCF和WebService不是一个竞争取代关系。
WCF是对.Net Remoting、WebService、MQ等通信方式的一个高级封装,让咱们开发不一样通信协议的程序的时候很简单,不用学更多的东西。并非替代.Net Remoting、WebService、MQ这些东西。
8一、.Net、ASP.Net、C#、VisualStudio之间的关系是什么?(传智播客.Net培训班原创模拟题)
答:.Net通常指的是.Net Framework,提供了基础的.Net类,这些类能够被任何一种.Net编程语言调用,.Net Framework还提供了CLR、JIT、GC等基础功能。
ASP.Net是.Net中用来进行Web开发的一种技术,ASP.Net的页面部分写在aspx 文件中,逻辑代码一般经过Code-behind的方式用C#、VB.Net等支持.Net的语言编写。
C#是使用最普遍的支持.Net的编程语言。除了C#还有VB.Net、IronPython等。
VisualStudio是微软提供的用来进行.Net开发的集成开发环境(IDE),使用VisualStudio能够简化不少工做,不用程序员直接调用csc.exe等命令行进行程序的编译,并且VisualStudio提供了代码自动完成、代码高亮等功能方便开发。除了VisualStudio,还有SharpDevelop、MonoDevelop等免费、开源的IDE,VisualStudio Express版这个免费版本。
8二、AJAX解决什么问题?如何使用AJAX?AJAX有什么问题须要注意?项目中哪里用到了AJAX?(传智播客.Net培训班原创模拟题)
答:AJAX解决的问题就是“无刷新更新页面”,用传统的HTML表单方式进行页面的更新时,每次都要将请求提交到服务器,服务器返回后再重绘界面,这样界面就会经历:提交→变白→从新显示这样一个过程,用户体验很是差,使用AJAX则不会致使页面从新提交、刷新。
AJAX最本质的实现是在Javascript中使用XMLHttpRequest进行Http的请求,开发中一般使用UpdatePanel、JQuery等方式简化AJAX的开发,UpdatePanel的方式实现AJAX最简单,可是数据通信量比较大,由于要来回传整个ViewState,并且不灵活,对于复杂的需求则可使用JQuery提供的ajax功能。
UpdatePanel的内部原理。
AJAX最重要的问题是没法跨域请求(www.rupeng.com →so.rupeng.com),也就是没法在页面中向和当前域名不一样的页面发送请求,可使用在当前页面所在的域的服务端作代理页面的方式解决。
在如鹏网项目中发帖的时候显示相关帖的功能、站内搜索项目中显示搜索Suggestion、数据采集项目中都用到了AJAX。
常考:不用任何框架编写一个AJAX程序。XHR:XmlHttpRequest。背也要背下来!
若是面试的时候谈AJAX谈到UpdatePanel的时候,就是NB的时候!!!先侃UpdatePanel的原理!引出为何Dom操做的动态效果在用UpdatePanel提交刷新之后没有了,以及CKEditor被套在UpdatePanel中提交之后也变成了textarea,为何把Fileupload放到Updatepanel中没法实现无刷新上传。说成是公司内部的一个菜鸟用UpdatePanel遇到这样问题,因为我懂XHR、UpdatePanel的原理,因此轻松解决!UpdatePanel生成的上万行JS脚本,不适合于互联网项目。“WebForm怎么可能把开发人员编程傻子呢!不明白原理苦命呀!仍是MVC好呀,MVC。。。。。。。”
多准备几把斧子!上来找一切机会甩斧子!
8四、Application 、Cookie和 Session 两种会话有什么不一样?
答:Application是用来存取整个网站全局的信息,而Session是用来存取与具体某个访问者关联的信息。Cookie是保存在客户端的,机密信息不能保存在Cookie中,只能放小数据;Session是保存在服务器端的,比较安全,能够放大数据。
谈到Session的时候就侃Session和Cookie的关系:Cookie中的SessionId。和别人对比说本身懂这个原理而给工做带来的方便之处。
8五、开放式问题:你常常访问的技术类的网站是什么?
博客园(www.cnblogs.com)、csdn、codeplex、codeproject、msdn文档、msdn论坛(遇到问题先到网上搜解决方案,还不行就问同事,同事也解决不了就去MSDN论坛提问,必定能获得解决)。Cnbeta.com。
8六、你对.net的GC的理解
GC是.Net的垃圾收集器,能够进行内存资源的回收,程序员无需关心资源的回收,当一个对象没有任何引用的时候就能够被回收了。一个对象能够被回收并不意味着必定会被当即回收,GC会选择时机进行回收。能够调用GC.Collect()让GC当即回收。GC不能回收非托管资源,对于非托管资源通常都实现了IDisposable接口,而后使用using关键字进行资源的回收。
8七、请写一个SQL语句:从user表中取出name列中的起始字符是“北京”的所有记录
select * from [user] wherer name like '北京%'
8八、请你简单的说明数据库创建索引的优缺点
使用索引能够加快数据的查询速度,不过因为数据插入过程当中会建索引,因此会下降数据的插入、更新速度,索引还会占磁盘空间。
10六、不用JQuery等框架实现AJAX无刷新登陆。(常考)
提示:用纯XMLHttpRequest实现。
10七、Http状态码各是什么意思。
301(永久重定向)、302 :重定向
404 :页面不存在
500:服务器内部错误
10八、 对html文本框进行赋值的JQuery语句,对html文本框进行取值的JQuery语句,对TextBox服务端控件进行取值的语句JQuery。
1十、Session有什么重大BUG,微软提出了什么方法加以解决?(常考)
iis中因为有进程回收机制,系统繁忙的话Session会丢失,IIS重启也会形成Session丢失。这样用户就要从新登陆或者从新添加购物车、验证码等放到Session中的信息。能够用State server或SQL Server数据库的方式存储Session不过这种方式比较慢,并且没法捕获Session的END事件。可是(必定要写上,这样才够拽)我认为这不是Bug,只能说是In-Proc方式存储Session的缺陷,缺陷是和Bug不同的,In-Proc方式存储Session会由服务器来决定何时释放Session,这是By Design,In-Proc方式不知足要求的话彻底能够用StateServer和数据库的方式。
StateServer还能够解决集群Session共享的问题。
配置StateServer的方法:
http://support.microsoft.com/kb/317604
http://blog.csdn.net/zj1103/archive/2008/09/14/2926773.aspx
111、asp.net中<%%>、<%=%>、<%#%>的区别是什么
<%%>是执行<%%>中的C#代码,<%=%>是将=后表达式的值输出到Response中,<%#%>是数据绑定,通常用在ListView、GridView、Repeater等控件的绑定中。数据绑定分为:Eval:单向绑定和Bind:双向绑定。
11三、说说在软件设计中你遇到的以空间换时间的例子?
参考回答:谈Cache(缓存)、索引这些例子。用额外的磁盘、内存空间的消耗来提升执行速度。Lucene.Net也是一个例子。
11四、asp.net中的错误机制。(常考)
参考:
定制错误页来将显示一个友好的报错页面。
页面中未捕获同样会触发Page_Error(不经常使用),应用程序中的未捕获异常会触发Application_Error。经过HttpContext.Current.Server.GetLastError()、HttpContext.Current.Error;拿到未捕捉异常,记录到Log4Net日志中。
11五、不用中间变量交换两个变量(常考)
i = i + j;//i=30
j = i - j;//j=10;
i = i - j;//i=20;
Console.WriteLine("i={0},j={1}",i,j);
另一个解决方案:位运算。
int a=5;
int b=6;
a=a^b;
b=b^a; //b^a至关于 b^a^b 也就是 b^a^b的值就是a了, 下边相同
a=a^b;
下面的SQL题是常考题中的常考题,必须重视!!!!!!!!
11六、横表、纵表转换(常考!!!)
1)纵表结构 TableA
Name |
Course |
Grade |
张三 |
语文 |
75 |
张三 |
数学 |
80 |
张三 |
英语 |
90 |
李四 |
语文 |
95 |
李四 |
数学 |
55 |
横表结构 TableB
Name |
语文 |
数学 |
英语 |
张三 |
75 |
80 |
90 |
李四 |
95 |
55 |
0 |
先理解:
select Name,
(case Course when ‘语文‘ then Grade else 0 end) as 语文,
(case Course when ‘数学‘ then Grade else 0 end) as 数学,
(case Course when ‘英语‘ then Grade else 0 end) as 英语
from TableA
而后理解标准答案:
select Name, sum(case Course when ‘语文‘ then Grade else 0 end) as 语文, sum(case Course when ‘数学‘ then Grade else 0 end) as 数学, sum(case Course when ‘英语‘ then Grade else 0 end) as 英语 from TableA group by Name
2)、横表转纵表的"SQL"示例
横表结构: TEST_H2Z
ID 姓名 语文 数学 英语
1 张三 80 90 70
2 李四 90 85 95
3 王五 88 75 90
转换后的表结构:
ID 姓名 科目 成绩
1 张三 语文 80
2 张三 数学 90
3 张三 英语 70
4 李四 语文 90
5 李四 数学 80
6 李四 英语 99
7 王五 语文 85
8 王五 数学 96
9 王五 英语 88
横表转纵表SQL示例:
SELECT 姓名,'语文' AS 科目,语文 AS 成绩 FROM TEST_H2Z UNION ALL
SELECT 姓名,'数学' AS 科目,数学 AS 成绩 FROM TEST_H2Z UNION ALL
SELECT 姓名,'英语' AS 科目,英语 AS 成绩 FROM TEST_H2Z
ORDER BY 姓名,科目 DESC;
11七、删除姓名、年龄重复的记录(只保留Id最大的一条)(常考!!!)
Id name age salary
1 yzk 80 1000
2 yzk 80 2000
3 tom 20 20000
4 tom 20 20000
5 im 20 20000
//取得不重复的数据
select * from Persons where Id in ( SELECT MAX(Id) AS Expr1 FROM Persons GROUP BY Name, Age )
根据姓名、年龄分组,取出每组的Id最大值,而后将Id最大值以外的排除。
删除重复的数据:
delete from Persons where Id not in ( SELECT MAX(Id) AS Expr1 FROM Persons GROUP BY Name, Age ) Select from Persons Where Id not in ( Select MAX(Id) AS Expr1 From PERSONS Group by name ,age )
尽量的得瑟!
11八、介绍几个使用过的开源的项目
Lucene.net、NPOI、JQuery、ASP.Net AJAX toolkit、Quartz.Net、JqueryUI、ASP.Net MVC。在CodePlex、SourceForge等网站上有更多的开源项目。
11九、说出五个集合类
List、Dictionary、Set、Stack(先入后出)、Queue(先入先出)、Tree等。
解答:HashSet用于盛放不一样的数据,相同的数据只保留一份
120有一个10个数的数组,计算其中不重复数字的个数。{3,5,9,8,10,5,3}
工程化的非最优解答:用HashSet或者List
int[] values = { 3, 5, 9, 8, 10, 5, 3 };
HashSet<int> set = new HashSet<int>();
foreach (int i in values)
{
set.Add(i);
}
Console.WriteLine(set.Count);
12二、下面是一个由*号组成的4行倒三角形图案。要求:1、输入倒三角形的行数,行数的取值3-21之间,对于非法的行数,要求抛出提示“非法行数!”;2、在屏幕上打印这个指定了行数的倒三角形。
*******
*****
***
*
123、一个文本文件含有以下内容:
4580616022644994|3000|赵涛
4580616022645017|6000|张屹
4580616022645090|3200|郑欣夏
上述文件每行为一个转帐记录,第一列表示账号,第二列表示金额,第三列表示开户人姓名。
建立一张数据库表(MS SQLServer数据库,表名和字段名自拟),请将上述文件逐条插入此表中。
127、说一下SQLServer中索引的两种类型(常考!!!)
参考:聚簇(或者叫作汇集,cluster)索引和非聚簇索引。
字典的拼音目录就是聚簇(cluster)索引,笔画目录就是非聚簇索引。这样查询“G到M的汉字”就很是快,而查询“6划到8划的字”则慢。
聚簇索引是一种特殊索引,它使数据按照索引的排序顺序存放表中。聚簇索引相似于字典,即全部词条在字典中都以字母顺序排列。聚簇索引实际上重组了表中的数据,因此你只能在表中创建一个聚簇索引。
当数据按值的范围查询时,聚簇索引就显得特别有用。由于全部SQLServer都必需先找到所查询范围的第一行,而后依次下去,直到该范围的最后一个值找到为止,而且保证了全部其余值也落在这个范围内。举一个例子,一个应用程序要查找首字母位于G和P之间的姓名列表,SQLServer首先找到以字母G开头的名字,取出全部记录,直到找到以字母P开头的名字为止,这种方法使得查询过程很是高效。
进行大量数据改动的表不适宜用聚簇索引,由于SQLServer将不得不在表中维护行的次序。若是要索引的值极少,例如一个列包含的全都是1和0,建立聚簇索引就不是个好主意。若是表常常由一个指定的列来排序,该列将是簇索引的最佳候选列。这是由于表中的数据已经为你排好序了。若是访问一个表并使用BETWEEN、<、>、>=或<=操做符来返回一个范围的值时,应该考虑使用聚簇索引。
128、沪江网网申题:
1)可否脱离VS用相似editplus的工具手写代码?你以为如何才能提升代码的效率和性能?
能够,使用CSC.exe 来编译.cs文件!
能够根据业务流程、业务数据的特色进行优化,好比能够采用缓存、索引、表驱动等来提高代码的效率和性能,同时不要进行无心义的代码优化,重点优化系统的性能瓶颈。
2).如何提升页面的显示速度?假如一个页面的加载时间是10.89s,你会用什么样的方式进行优化?
回答要大气!显得很牛!
提示:分而治之的思想。
首先要找出问题所在,是服务器端运行的速度慢仍是服务器端到客户端的下载慢仍是页面在浏览器的加载速度慢。
若是是服务器端运行速度慢,则找是数据库的缘由仍是算法的问题,若是是数据库的问题则尝试添加索引、优化SQL语句,若是是算法的问题,则优化算法。若是对于一些不常常改动的页面可使用静态页技术!对于一些数据不须要及时更新的并且取数据的过程很是耗时可使用缓存。页面中的内容能够按需加载(好比说能够像verycd网站的评论那样当用户须要看的时候再加载其内容),能够在图片须要显示的时候再进行加载。
若是是服务器端到客户端的下载慢则看是页面体积过于臃肿仍是网络问题,若是是页面体积过于臃肿,则优化HTML代码,去掉无用的标签,压缩JS、CSS,能够用CSS Spirit技术将多个图片放到一个图片中,减小向服务器的请求。若是是网络问题,则尝试在不一样的网络、地区部署服务器,而后使用CDN技术加速访问。
若是是页面中的JavaScript运行复杂致使运行速度慢,则优化JavaScript。
webkaka:测网速。
如何处理百万条数据的优化?
对于常常进行检索的字段建立索引,对于常常进行范围查询的一个字段建立汇集索引;
当有大量数据进行插入的时候进行批量插入;
一些代码用存储过程进行重写(当一个逻辑有多行SQL要执行的时候用存储过程能够优化速度,能够避免客户端和SQLServer之间屡次交互);
(*)集群、读写分离;
(*)分区、分表;
3).在程序编码的时候,你会对Sql注入漏洞的防范采起什么样的措施?
尽可能不要拼SQL语句!使用参数化查询或存储过程能够防止SQL注入攻击!在必须用SQL拼接的地方对用户输入的内容进行检查、过滤。
4).你会采用什么样的策略和方法来实现系统缓存?
在ASP.NET中缓存有页面缓存,数据源缓存,和一些本身定义的缓存!
对于那些整个页面不常常变化的咱们可使用页面缓存,而对于那些执行很是耗时的SQL语句而且数据的及时性要求不高的咱们可使用数据源缓存。
对于页面缓存、数据源缓存等都不知足要求的状况下采用直接操做HttpRuntime.Cache来自定义缓存策略。若是须要用多台Web服务器做为一个集群来承载网站的状况,则能够部署专门的分布式缓存服务器,好比Memcached。
5)网站想要实现文件防盗链的功能,说说你的解决方案。
读取HTTP报文头中的UrlReferrer在Application_BeginRequest中咱们能够判断用户的请求是否来源于本网站。若是不是咱们能够终止用户的请求(Response.End();)!
6).有这样一个功能需求,用户新注册的时候须要给他推荐3个好友,说说你的推荐算法
好比说相似豆瓣网咱们能够根据用户兴趣来匹配,相似于人人网那些地区性比较比较强的网站咱们能够根据用户的地区来匹配。
7).若是给学英语的用户设计一个在线应用,你会选择什么做为切入点,简述你的想法和理由。
英语学习资料的下载、在线答疑、用户交流、在线英语角做为切入点。
8).你眼中的沪江是怎样的?谈谈你对沪江的理解
我眼中的沪江是为那些爱好外语,须要学习外语人提供一个学校交流的平台!
9).是否有如下相关开发经验?若有请简要说明开发状况(有可看项目网址也请提供)。
a、lucene相关开发经验
b、分布式文件处理经验
c、流媒体相关开发经验
d、语音技术
e、高负载网站开发
f、手机相关开发
129、请编程遍历WinForm页面上全部TextBox控件并给它赋值为string.Empty?
答:
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 ;
}
}
132、
int i=2000;
object o=i;
i=2001;
int j=(int)o;
Console.WriteLine("i={0},o={1},j={2}",i,o,j);
输出的结果是:
134.一个数组:1,1,2,3,5,8,13,21...+m,求第30位数是多少?用递归实现;(常考!!!)
写递归要肯定两个:递归的终止条件;递归表达式。
解答:总结递归规律:F(n)=F(n-2)+F(n-1) Fibonacci数列
static int F(int n) { if (n == 1) { return 1; } if (n == 2) { return 1; } return F(n - 2) + F(n - 1); }
非递归(有bug吗?),递归算法的缺点:测试大数据
int n = Convert.ToInt32(Console.ReadLine()); if(n<=0) {Console.WRiteLine("必须大于0");return;} if(n==1) //时刻注意边界值!!! { Console.WriteLine("1"); return; } int[] data =new int[n]; data[0] = 1; data[1] = 1; for(int i=2;i<n;i++) { data[i] = data[i-1]+data[i-2]; } Console.WriteLine(data[n-1]);
上面程序的时间复杂度为O(n),空间复杂度为O(n)
用BigInteger解决溢出的问题。
若是回答斐波那契数列:提到用非递归实现、注意边界条件以及用BigInteger解决溢出问题!
题目:计算两个很是大的整数的加法、乘法。用程序实现乘法、加法运算。最起码把思路说出来,说本身写不出来,可是工做中用BigInteger解决。
参考:
算法复杂度:时间复杂度:算法运行须要消耗的时间的数量级、空间复杂度:算法运行须要消耗的内存的数量级。
消耗的时间或者内存随着问题规模的扩大而成正比增长,就是O(n)。
消耗的时间或者内存随着问题规模的扩大而不变,就是O(1)。
消耗的时间或者内存随着问题规模的扩大而n*n增长,就是O(n*n)
算法复杂度只考虑最差状况(从一个数组中找出第一个大于10的数,时间复杂度为O(n)),而且算法复杂度忽略常量和低阶。把数组数一遍和数两遍的时间复杂度都是O(n)。把长度为n的数组数n/2遍的时间复杂度仍是O(n*n)。
上课时把数组先后颠倒的算法的时间复杂度为O(n),空间复杂度为O(1)。
136.ref与out的区别?
137.表A字段Id为numberic(18,0),哪一个SQL语句是错误的:
select * from A where id='';
select * from A where id='13';
select * from A where id=null;
select * from A where id=' 13';
138.在SQLServer中求当前时间与2012-01-01 0:0:0相差的秒数?