标题一:C#基础
需要了解的C#基础有:
1,值类型和引用类型的区别?
答:1,一般情况下,值类型的数据是存储在线程栈上的,引用类型的数据是存储在托管堆上。
, 2.值类型的变量,变量本身存储的就是实际数据,引用类型的变量,变量本身存储的仅仅是实际数据的引用地址,而实际的数据存储在托管堆上
2,抽象类和接口的区别?
答:相同点: 1,不能被直接实例化,2可以包含任意个抽象成员
不同点: 1,抽象类也是类,具有类的共同特点:单基类继承,多接口实现
接口: 接口不是类只能继承多个接口
2:抽象类中可以包含已经实现的非抽象成员,而接口中所有的成员都是抽象的,没有实现的。
3,面向对象的三大特征?
封装,继承,多态
4,接口包含那些成员?
方法,属性,事件,索引器
5,C#中那些是值类型?那些是引用类型?
值类型:结构,枚举
引用类型: 类,接口,委托,数组,字符串
6,重写和重载的区别?
重写:子类对于基类中的虚成员,虚方法或者抽象成员抽象方法进行覆盖,重新实现
重载:同一个类中,同名的方法具有不用的参数签名的实现(重载的必要条件是,参数类型或者参数名不同都可以进行重载)
7,string s="" 和 string s=null的区别?
1,string s=" "; 字符串变量s指向空字符串,表示给变量s分配类内存空间,只不过s指向了一个长度为零的空字符串对象。
2 string s=null ;字符串变量s指向了空引用null,表示s没有引用任何对象,既没有给变量分配内存空间。
8,C#中参数传值有哪些?区别是什么?
1,ref 参数传值,在传入方法之前必须进行初始化,而 out 参数在传人方法之前可以不用初始化
2,ref 参数方法内部可以直接使用,而 out 参数在方法内部不能直接使用
3,ref 参数方法内部可以使用也不可不使用,而out参数在方法返回之前必须对其赋值
9,什么是委托?事件和委托是有什么关系?
1 委托:表示具有一类相同签名的方法的封装类性
2事件也一种委托
10,ADO.NET 中使用那些对象?链接数据苦的步骤是什么?
SqlConnection:链接对象,用于执行与数据库的链接。
SqlCommand:命令对象,用于对数据库执行sql语句。
SqlDataAdapter:适配器对象,用于填充数据和更新数据库
SqlParameter:参数对象,用于执行参数化sql语句
SqlDataReader:读取器对象,用于从数据库中快速逐行读取数据
SqlTransaction:事物对象,用于执行数据库事务
11,装箱和拆箱的区别
装箱:将值类型转换为 object 类型或由此值类型实现的任何接口类型
如: int a=123
object obj=(object)a;
拆箱:将 object 类型 或接口转换成实际的值类型
如: object obj=“231423”;
int a=(int)obj;
拆箱运行速度快,因为拆箱后变成值类型,值类型运行速度快
12 C#中的访问修饰符号有哪些?
public:公共的,任何位置都可以访问
private:私有的,只有类的自身可以访问
protected:受保护的,只有类的自身及其派生类才可以访问
internal:内部的,同一个程序集里面的任何位置都可以访问
protected internal:内部受保护的,同一个程序里面任何位置或者不同程序集中的派生类可以访问
13、String s = new String("xyz");创建了几个String Object?
两个对象,一个是“xyx”,一个是指向“xyx”的引用对象.
14、如何把一个Array复制到ArrayList里(*)
实现1: string[] s ={ "111", "22222" };
ArrayList list = new ArrayList(); list.AddRange(s);
实现2: string[] s ={ "111", "22222" };
ArrayList list = new ArrayList(s);
15、StringBuilder 和 String 的区别?
答:String 在进行运算时(如赋值、拼接等)会产生一个新的实例,而 StringBuilder 则不会.
所以在大量字符串拼接或频繁对某一字符串进行操作时最好使用 StringBuilder, 不要使用 String,
如果要操作一个不断增长的字符串,尽量不用String类,改用StringBuilder类.
两个类的工作原理不同:String类是一种传统的修改字符串的方式,
它确实可以完成把一个字符串添加到另一个字符串上的工作没错,但是在.NET框架下,
这个操作实在是划不来。因为系统先是把两个字符串写入内存,
接着删除原来的String对象,然后创建一个String对象,
并读取内存中的数据赋给该对象,这一来二去的,耗了不少时间.
而使用System.Text命名空间下面的StringBuilder类就不是这样了,
它提供的Append方法,能够在已有对象的原地进行字符串的修改,简单而且直接
当然,一般情况下觉察不到这二者效率的差异,
但如果你要对某个字符串进行大量的添加操作,
那么StringBuilder类所耗费的时间和String类简直不是一个数量级的.
16 try {}里有一个return语句,那么紧跟在这个try后的finally {}里的code会不会被执行,什么时候被执行?
答:会执行,在return前执行。
17 ==和Equals的区别
答:1. ==是一个运算符。Equals则是string对象的方法可以(点)出来。
2. 基本数据类型比较: ==和Equals都比较俩个值是否相等,相等为true,否则为false
3. 引用对象比较:==和Equals都是比较栈内存中的地址是否相等,相等为true否则为false
标题二sql面试基础
1,写一条sql语句:取出表A中的第31条到40条记录(sql server ,以自动增长的id作为主键,注意:ID可能不是连续的)
方法1:select top 10 * from where id not in ( select top 30 id from A order by id ) order by id
注:用子查询先取出前30条记录,再用 not in (不存在)该30条记录中的10条就是31-40条的记录
方法2:select top 10 * from A where id>(
select max(id) from (
select top 30 id from A order by id
) t
)
注:这是用了一个多子查询写法:子查询是有优先级的,越后面的括号()查询越先执行,先查询前30条的id,再查 询这30条中的最大的一个id,再查询10条比这30条中最大的一个id值还要大的10条数据
方法3:select * from (
select *,row_number() over (order by id ) Row_No from A
) t where Row_No between 31 and 40
注:先计算出id再赋值给 Row_No 在使用 between (介于俩者之间的数)获取那10条记录
2 请说出 sql server 中三种表达式方式 inner join,left join ,right join 的区别及时最终查询的结果的影响。
inner join:内联查询,查询出满足的on条件的俩个表达式公共交集
left join:左外联查询,以左边的表为基准与右边的表进行关联,链接查询满足on条件的结果,但左表的数据会完全保留,其 中右表无法满足on条件的数据在连接的结果中用null与表数据补齐
right join :右外联查询,以右边的表为基准与左边的表进行关联,链接查询出满足on条件的结果,但右表的数据会完全保 留,其中左表中无法满足on条件的数据会在链接的结果中用null与右表数据补齐
3 数据库索引是什么?有什么作用?
数据库索引:是数据库中一列或者多列的值进行排序的一种结构,
作用:索引类似于一本书的目录,主要用于加快从表中查询的速度
4 如何处理几十万条并发数据?
答:用存储过程或事务。取得最大标识的时候同时更新..注意主键不是自增量方式这种方法并发的时候是不会有重复主键的..取得最大标识要有一个存储过程来获取.
5使用存储过程来插入
创建存储过程:
Create proc InsertMyBBSProc(@Title char(160), @Author char(20), @Content ntext)
AS
Insert into myBBS(Title,Author,Content) Values(@Title, @Author, @Content)
标题三 前端面试基础
1 post、get的请求区别
get的参数会显示在浏览器地址栏中,而post的参数不会显示在浏览器地址栏中,
使用post提交的页面在点击【刷新】按钮的时候浏览器一般会提示“是否重新提交”,
而get则不会,用get的页面可以被搜索引擎抓取,而用post的则不可以,
用post可以提交的数据量非常大,而用get可以提交的数据量则非常小(2k),
受限于网页地址的长度,
用post可以进行文件的提交,而用get则不可以.
2 ajax同步异步的请求区别?
同步请求:如果有俩个ajax,第二个需要第一个ajax的值得话,那么再同步请求的时候这俩个ajax会同时发出请求,这样以 来第二个ajax需要的那个参数的值就是null了那就会报错(同步请求是页面中所有请求一同发起服务到浏览器中请求)
异步请求:页面中的所有请求都会一个一个来请求就像排队一样,一个一个执行所需要的那些方法,在用户注册页面验证的时候 就需要异步请求,比如第一个用户名验证错误他不会影响后面的输入,这样用户体验效果好。而用同步请求的话,第 一个验证失误后面的也不能再输入了,用户体验性差
3 asp.net中页面之间传递值得几种方式?
1.使用QueryString, 如....?id=1; response. Redirect()....
2.使用Session变量
3.使用Server.Transfer
4.Cookie传值
5.Application传值 需要注意些什么?
6.PreviosPage
4 asp.net中调用webserver的方法有哪些?
答: 通过HTTP—GET请求调用
通过HTTP—POST请求调用
通过SOAP请求调用
5 session与cookie的区别?
cookie是存在浏览器中,session是存在服务器中,session安全性更高只不过在客户量多的同时session占用的session的内存空间会很大影响浏览器访问速度
6 asp.net缓存有几种实现方式?
答: 页面输出缓存,页面局部缓存,数据缓存,客户端缓存
标题四 算法
1 一列数的规则如下: 1、1、2、3、5、8、13、21、34...... 求第30位数是多少, 用递归算法实现。
答:public class MainClass
{
public static void Main()
{
Console.WriteLine(Foo(30));
}
public static int Foo(int i)
{
if (i <= 0)
return 0;
else if(i > 0 && i <= 2)
return 1;
else return Foo(i -1) + Foo(i - 2);
}
}
2 .请编程实现一个冒泡排序算法?
答: int [] array = new int [*] ;
int temp = 0 ;
for (int i = 0 ; i < array.Length - 1 ; i++)
{
for (int j = i + 1 ; j < array.Length ; j++)
{
if (array[j] < array[i])
{
temp = array[i] ;
array[i] = array[j] ;
array[j] = temp ;
}
}
}
3.求以下表达式的值,写出您想到的一种或几种实现方法: 1-2+3-4+……+m
答:
int Num = this.TextBox1.Text.ToString() ;
int Sum = 0 ;
for (int i = 0 ; i < Num + 1 ; i++) {
if((i%2) == 1) {
Sum += i ;
}
else{
Sum = Sum - I ;
}
}
System.Console.WriteLine(Sum.ToString());
System.Console.ReadLine() ;
4 产生一个int数组,长度为100,并向其中随机插入1-100,并且不能重复。
int[] intArr=new int[100];
ArrayList myList=new ArrayList();
Random rnd=new Random();
while(myList.Count<100)
{
int num=rnd.Next(1,101);
if(!myList.Contains(num))
myList.Add(num);
}
for(int i=0;i<100;i++)
intArr[i]=(int)myList[i];
5 请编程遍历页面上所有TextBox控件并给他赋值给hello
protected void show(object sender,EventArgs e){
foreach( Control c in this.From.Controls){
if( c is TextBox) {
TextBox text=c as TextBox;
txt.Text="Hello"
}
}
}