2015 4.15笔试

sql注入

什么是sql注入?如何防止sql注入?

就是把sql语句插入到查询字符串中,以达到欺骗服务器来执行恶意的命令

防止sql注入的方法:sql参数化查询

 

获取最新的sql插入:

 /*对于马上使用的刚才插入的新记录ID用SCOPE_IDENTITY()是最合适的*/
INSERT INTO table(field1,field2,) VALUES("field1Value","field2Value",) SELECT SCOPE_IDENTITY() as newIDValue
/* 对于想要得到一个表中的最后一个插入操作所产生的ID的最好用IDENT_CURRENT('TBName')*/
 INSERT INTO table(field1,field2,) VALUES("field1Value","field2Value",) SELECT IDENT_CURRENT('recordID') as newIDValue

编程题:

1 1 2 3 5 8。。

 

int [] array=new int[30];
for(int i=0;i<=array.length;i++)
{
if(i-2<0)
return 0;
else
array[i]=array[i-1]+array[i-2];
}

  将100个100以内的随机数插入到空的数组中

List<int> list = new List<int>();  
      Random ran = new Random();  
         
   
      while(true)  
      {  
        if (list.Count >= 100)  
        {  
          break;  
        }  
        int s = ran.Next(1, 101);  //生成100以内的随机整数
        if (!list.Contains(s))  
        {  
          list.Add(s);  
        }  //如果list<>里面不存在s,就把s加到list中去
      }  
   
      list.Sort();  //排序
   
      foreach (int i in list)  
      {  
        Console.Write(i + " ");  
      }  
      Console.ReadKey();  

C#冒泡排序

static List<int> list = new List<int>();
int temp=0;
for(int i=0;i<list.count;i++)
{
for(int j=0;j<i-1;j++)
{
temp=list[i];
list[i]=list[i+1];
list[i+1]=temp;
}
}

进程和线程

进程是包含某些一些资源的内存

线程是进程的一个实体,CPU调度的最小单位

一个线程可以撤销和创建另一个线程,多个线程可以并发执行

区别:一个进程可以有多个线程

线程不能单独执行,必须依赖应用程序来进行执行

 

TCP/IP

TCP/IP协议是一组完整的网络协议,TCP传输层IP网络层

TCP和UDP的区别

   TCP提供的是面向连接的、可靠的数据流传输,而UDP提供的是非面向连接的、不可靠的数据流传输。
   简单的说,TCP注重数据安全,而UDP数据传输快点,但安全性一般

 

 

数据库的一些面试题

什么是数据库事物

单个逻辑事物的操作

ACID(原子性,一致性,隔离性,持久性)

存储过程

存储过程是一组予编译的SQL语句

    它的优点:1.允许模块化程序设计,就是说只需要创建一次过程,以后在程序中就可以调用该过程任意次。

            2.允许更快执行,如果某操作需要执行大量SQL语句或重复执行,存储过程比SQL语句执行的要快。

             3.减少网络流量,例如一个需要数百行的SQL代码的操作有一条执行语句完成,不需要在网络中发送数百行代码。

 

列举ADO.NET中的五个主要对象

Connection连接对象

Command执行命令和存储过程

DataReader向前只读的数据流

DataAdapter适配器,支持增删查询

DataSet数据级对象,相当与内存里的一张或多张表。

 

三层架构:表现层,业务逻辑层,数据访问层

WebService服务可以描述为可以在web上部署并可以被任何应用程序或其他服务调用的功能

 

final :不能派生新的子类

finally:异常处理

finalize:GC处理

垃圾回收器跟踪并回收托管内存中分配的对象,定期执行垃圾回收以回收分配给没有有效引用的对象的内存。当使用可用内存不能满足内存请求时,GC会自动进行。

在进行垃圾回收时,垃圾回收器会首先搜索内存中的托管对象,然后从托管代码中搜索被引用的对象并标记为有效,接着释放没有被标记为有效的对象并收回内存,最后整理内存将有效对象挪动到一起

 

struct和class的区别

结构与类共享几乎所有相同的语法,但结构比类受到的限制更多:尽管结构的静态字段可以初始化,结构实例字段声明还是不能使用初始值设定项。

  结构不能声明默认构造函数(没有参数的构造函数)或析构函数。

  结构的副本由编译器自动创建和销毁,因此不需要使用默认构造函数和析构函数。实际上,编译器通过为所有字段赋予默认值(参见默认值表)来实现默认构造函数。

  结构不能从类或其他结构继承。

  结构是值类型 -- 如果从结构创建一个对象并将该对象赋给某个变量,变量则包含结构的全部值。复制包含结构的变量时,将复制所有数据,对新副本所做的任何修改都不会改变旧副本的数据。

  由于结构不使用引用,因此结构没有标识 -- 具有相同数据的两个值类型实例是无法区分的。C# 中的所有值类型本质上都继承自ValueType,后者继承自 Object。编译器可以在一个称为装箱的过程中将值类型转换为引用类型。

 

结构具有以下特点:

  结构是值类型,而类是引用类型。

  向方法传递结构时,结构是通过传值方式传递的,而不是作为引用传递的。

  与类不同,结构的实例化可以不使用 new 运算符。

  结构可以声明构造函数,但它们必须带参数。

  一个结构不能从另一个结构或类继承,而且不能作为一个类的基。所有结构都直接继承自 System.ValueType,后者继承自 System.Object。

  结构可以实现接口。

  在结构中初始化实例字段是错误的。

 

Override是重写的意思,它表示重写基类的方法,而且方法的名称,返回类型,参数类型,参数个数要与基类相同。

Overload是重载是意思,它也表示重写基类的方法,但是只要方法名相同,别的可以不同。

 

声明方法的存在而不去实现它的类被叫做抽像类(abstract class),它用于要创建一个体现某些基本行为的类,并为该类声明方法,但不能在该类中实现该类的情况。不能创建abstract 类的实例。然而可以创建一个变量,其类型是一个抽像类,并让它指向具体子类的一个实例。不能有抽像构造函数或抽像静态方法。Abstract 类的子类为它们父类中的所有抽像方法提供实现,否则它们也是抽像类为。取而代之,在子类中实现该方法。知道其行为的其它类可以在类中实现这些方法。

  接口(interface)是抽像类的变体。在接口中,所有方法都是抽像的。多继承性可通过实现这样的接口而获得。接口中的所有方法都是抽像的,没有一个有程序体。接口只可以定义static final成员变量。接口的实现与子类相似,除了该实现类不能从接口定义中继承行为。当类实现特殊接口时,它定义(即将程序体给予)所有这种接口的方法。然后,它可以在实现了该接口的类的任何对像上调用接口的方法。由于有抽像类,它允许使用接口名作为引用变量的类型。通常的动态联编将生效。引用可以转换到接口类型或从接口类型转换,instanceof 运算符可以用来决定某对象的类是否实现了接口。

 

ASP.net的页面传值

session简单,但易丢失

application 全局

cookie 简单,但可能不支持,可能被伪造

input type="hidden" 简单,可能被伪造

url参数简单,显示于地址栏,长度有限

  数据库稳定,安全,但性能相对弱

 

posted @ 2015-04-16 01:55  某只菜鸟  阅读(148)  评论(0编辑  收藏  举报