面试集萃
1.产生一个int数组,长度为10,并向其中随机插入1~10,并且不能重复
1 static void Main(string[] args) 2 { 3 // a是要生成结果的数组 4 int[] a = new int[10]; 5 int [] b=new int[10]; 6 Random r = new Random(); 7 for (int i = 1; i < 11; i++) 8 { 9 b[i - 1] = i; 10 } 11 int temp = -1; 12 for (int i = 10; i > 0; i--) 13 { 14 int n = r.Next(1, i); 15 a[i - 1] = b[n-1]; 16 temp = b[i-1]; 17 b[i-1] = b[n-1]; 18 b[n-1] = temp; 19 } 20 for (int i = 0; i < 100;i++ ) 21 { 22 if (i % 10 != 0) 23 { 24 Console.Write(a[i] + "\t"); 25 } 26 else 27 28 { 29 Console.WriteLine(); 30 } 31 Console.ReadKey(); 32 }
2.一列数的规则如下:1,1,2,3,5,8,13,21,34…,求第30位数是什么?,使用递归实现
1 public int GetNumberAtPos(int pos) 2 { 3 4 if(pos==0||pos==1) 5 6 { 7 8 return 1; 9 10 } 11 int res = GetNumberAtPos(pos - 1) + GetNumberAtPos(pos - 2); 12 return res; 13 }
3.说出一些常用的类,接口,请各列举5个
常用的类:StreamReader,WebClient,StringBuilder,SqlConnection,FileStream,File,Regex,List<T>,Dictionary<K,V>。
常用的接口:IDisposable,IList,IEnumerable,IDbConnection,IComparable,ICollection,IDictionary。
4.说出一些数据库优化方面的经验
索引内部的原理:想象成Dictionary,插入,删除,更新的速度慢了,加上索引也多占用了空间,查询的速度快了,加上索引以后速度提升非常明显。
(1)在经常检索的字段上(select * from Person Where Name=@Name)使用索引提高查询速度。
(2)select中只列出必要的字段,而不是*。
(3)避免隐式类型转换造成的全表扫描,在索引上使用函数也会造成全表扫描(因为索引只是为字段建立的,一旦使用表达式或者函数,那么索引就是失效了,当然也可以使用”函数索引”,”表达式索引”解决这个问题),使用索引不一定能提高查询速度
(4)避免在索引列上使用计算(where Name+’A’=@MyName)。
(5)不要进行没有意义的优化,根据性能查看器的报表,对最耗时的SQL进行优化。
5.什么是数据库事务
(1) 事务的三个特性:一致性,原子性,隔离性
(2) 几个SQL语句,要么全部执行成功,要么全部执行失败,事务的三个操作:Begin,Commit,RollBack。
(3) 取刚插入数据的ID值,就要用事务来隔离,
6.请简单的说明数据库建立索引的优缺点
(1)使用索引可以加快数据的查询速度,不过由于数据插入过程中会建索引,所以会降低数据的插入,更新速度,索引还会占用磁盘空间。
7.JavaScript面向对象
1 (1) 定义一个Person类,创建一个对象 2 3 function Person(name.,age){ 4 this.name=name; 5 6 this.age=age; 7 8 this.sayHi=function(){ 9 10 alert(this.name); 11 12 alert(this.age); 13 14 } 15 16 } 17 18 var p=new Person(“HYL”,18); 19 20 p.sayHi(); 21 22 (2)第二种,当new对象的时候方法只在内存中被创建了一次 23 24 function Person(name.,age){ 25 this.name=name; 26 27 this.age=age; 28 29 } 30 //原型对象里面存储的是所有的实例成员共享的成员,这个方法在内存中只存了一次 31 32 Person.prototype.sayHi=function(){ 33 34 alert(this.name); 35 36 } 37 38 var p=new Person(“HYL”,18); 39 40 p.sayHi()
8.Repeater控件和GirdView控件的优缺点
(1)GirdView控件的优点是:功能很强大,提供分页,编辑,删除,选择等等很多功能,使用最方便,直接拖拽到页面上,建立新的数据源,点几下鼠标就可以维护一个表的浏览,删除和修改了。缺点是:占用系统资源大,他的分页是把整个表的数据取出来,到GirdView上面进行分页的,因此如果数据量比较大的话,速度非常忙,效率极低,而且因为模版已经定制好,想自己灵活控制,不太可能。
(2)repeater控件的优点是:功能简单,效率高,容易灵活控制生成的HTML代码,分页需要自己实现,整体来说,适合前台使用。缺点是:功能简单,需要自己做很多的事情才能完成某个功能。
9.数据库实现分页的几种方法(总结)
1 (1)使用存储过程实现SQL语句的分页 2 3 create proc p_GetPageUsers 4 ( 5 6 @pageIndex int, --当前请求的页码 7 8 @pageSize int, --页的数量 9 10 @totalCount int output --输出多少条数据 11 12 ) 13 14 as 15 16 ----动态拼接SQL语句 17 18 declare @sql nvarchar(2000) 19 20 set @sql=’select top ’+CAST(@pageSize as nvarchar(16))+’* from 表名 where ID not in 21 ( 22 23 select top ‘+CAST((@pageIndex-1)*@pageSize as nvarchar(20))+’ ID from 表名 order by ID’ 24 ) order by ID’ 25 26 exec (@sql) 27 28 select @totalCount=count(0) from 表名 29 30 (2) 使用row_number函数实现SQL语句的分页 31 32 create proc p_GetPager 33 34 ( 35 36 @pageIndex int, 37 38 @pageSize int, 39 40 @totalCount int out 41 42 ) 43 44 as select @totalCount=count(1) from表名 45 46 select * from( select t.*,row_number() over(order by ID) as num from 表名 as t )as m 47 48 where m.num between @pageSize*(pageIndex-1)+1 and @pageIndex*@pageSize 49 50 (3)使用Linq实现分页 51 52 public IQueryable<T> LoadEntities<S>(int pageSize,int pageIndex,out int total,Func<T,bool> whereLambda,Func<T,S> orderByLambda) 53 54 { 55 56 var tempData=db.Set<T>.Where<T>(whereLambda).OrderBy<T,S>(orderByLambda).Skip<T>(pageSize*(pageIndex-1)).Take<T>(pageSize).Asquerable(); 57 }
10.使用JavaScript实现纯的异步Ajax请求
1 <script type=”text/javascript” language=”javascript”> 2 3 var request=false; 4 5 //实现判断是否支持XMLHttpRequest的判定,这是一个通用方法 6 7 function createXMLRequest(){ 8 9 try{ 10 11 request=new ActivexObject(“MSXML2.XMLHttP”); 12 } 13 14 catch(e1){ 15 16 try{ 17 18 request=new ActivexObject(“Microsoft.XMLHTTP”); 19 20 }catch(e2){ 21 22 Request =false; 23 24 } 25 26 } 27 if(!request&&typeof XMLHttpRequest!=’undefined’){ 28 29 Request=new XMLHttpRequest(); 30 31 } 32 33 //实现对后台的调用 34 35 function getServerTime(){ 36 37 createXMLRequest(); 38 39 //构造URL地址(通过get方式发送request请求,true表示异步请求) 40 41 request.open(“GET”,”Default.ashx”,true); 42 43 request.onreadystatechange=function(){ 44 45 if(request.readyState==4){ 46 47 document.getElementByID(“time”).innerHTML=request.responseText; 48 49 } 50 51 } 52 53 request.send(null); 54 55 } 56 57 </script>
11.C#中的委托是什么?事件是不是一种委托,事件和委托的关系
(1)委托可以把一个方法作为参数传递给另外一个方法,委托可以理解为指向一个函数的指针,委托和事件没有可比性,因为委托是类型,事件是对象
12.short s=1;s=s+1;有错吗?short s=1;s+=1;有错吗?
(1)第一种写法是有错误的,因为1是整形(int32),int+short的结果还是int,在这里是无法进行隐式类型转换的,改为short s=1; s=(short)s+1;就行了
(2)第二种写法没有错误,因为其在内部自动已经进行了隐式转换。
总结未完待续
初心商城:初心商城
作者:韩迎龙(Kencery) MVC/.NET群:159227188如果您认为这篇文章还不错或者有所收获,您可以通过右边的“打赏”功能 打赏一杯咖啡,本页版权归作者和博客园所有,欢迎转载,但未经作者同意必须保留此段声明, 且在文章页面明显位置给出原文链接,否则保留追究法律责任的权利