Asp.net(C#)面试100+题陆续添加中……

我收集的面试题以及自己对一些面试题的理解:

1、C#不支持多重继承,可以通过接口实现。
2、public 全部公开
    private 类内部
    protected 自己和自己的子类
    internal 在同一个程序集在一个DLL中
3、私有成员继承,但不能访问
4、自己提供了一个有参数的构造函数后,如果要保留无参数的,就必须自己写一个
5、C#所有的基类是System.Object
重载是不同参数的调用
覆写子类是改变父类的方法
多态是定义父类来调用子类的方法
6、要覆写的方法是虚方法,virtual
7、覆写签名必须一致,除了将virtual改为override
8、不可以覆写私有的虚方法,因为已经私有了。
9、可以局部继承,类为Public,方法为sealed(封条)
10、抽象类是不可以被实例化的类
11、interface是只含有public abstract method仅有共有抽象方法的类
12、interface都是公有的
13、interface接口的所有方法是抽象的,抽象类abstract可以有方法的实现和修饰符
14、const编译是常量,readonly运行是常量。
15、str=null不分配,str=""分配长度为空字符串的空间string.Empty常量
16、class是引用类型,struct是值类型
17、取得最新时间where date=(select MAX(LastUpdateDate) FROM t1)
18、remoting是用Tcp/Ip,webservice是用http,穿防火墙remoting是TCPIp,是给客户端发一个进程和应用程序域编号,确定对象
19、页面传递值QueryString,Session,Server.Transfer,input type="hidden",数据库,cookie
20、1、1、2、3、5、8
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);
    }
}
21、委托可以说是将方法作为参数传入,指向一个方法的引用,事件是一种特殊的委托。
22、遍历页面TextBox,并赋值string.Empty
foreach(System.Windows.Forms.Control control in this.Controls)
{
    if(control is Sytem.Windows.Forms.TextBox)
{
    System.Windows.Froms.Textbox tb=(System.Windows.Forms.TextBox)control;
    tb.Text=String.Empty;
}
}
23、冒泡
int [] list={1,3,5,6,4,2};
bool isOK=false;
while(!isOk)
{
    isOk=true;
    for(int i=0;i     {
        if(list[i]>list[i+1])
        {
        swap(ref list[i],ref list[i+1]);
        isOk=false;
        }
    }
}

private void   swap(ref int a,ref int b)
{
    int temp;
    temp=a;
    a=b;
    b=temp;
}无必要,调用方法有开销
24、索引器可以索引任意类型
25、//1-2+3-4+……+m自己写的递归和公式
using System;
using System.Collections.Generic;
using System.Text;

//1-2+3-4+...?m
namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            int num = 18;
            print(num);
            System.Console.WriteLine(clac1(num));
            System.Console.Write("result2="+clac2(num));
            System.Console.ReadLine();
        }

        private static int clac2(int num)
        {
            if (num % 2 == 0)
                return num / 2 * -1;
            else
                return (num-1) / 2 * -1+num;
        }

        private static int clac1(int num)
        {
            if (num == 1)
            {
                return 1;
            }
            else
            {
                if (num % 2 == 1)
                {
                    return clac1(num - 1) + num;
                }
                else
                {
                    return clac1(num - 1) - num;
                }
            }
        }

        private static void print(int num)
        {
            StringBuilder sb = new StringBuilder();
            for (int i = 1; i <= num; i++)
            {
                sb.Append(i);

                if (i % 2 == 1 && i != num)
                {
                    sb.Append("-");
                }

                if (i % 2 == 0 && i != num)
                {
                    sb.Append("+");
                }
          
            }
            System.Console.Write(sb+"=");
          
           

        }
   
    }
}
26、应用程序域是轻量级进程,安全作用。
27、CTS通用语言系统,CLS通用语言规范,CLR公共语言运行时(库)
28、值到引用类型装箱,引用到值拆箱
29、unsafe非托管代码
30、调用WS方法:①WSDL.exe②Add Web Reference
31、使用foreach遍历的对象要有IEnumerable接口和GetEnumerator方法
32、GC是收集器,System.gc();
33、启动一个线程是start()
34、String类是final类不可继承
35、List和Set是继承自Collection接口
36、==是引用相等,equals是值相等
37、Session的Bug是系统繁忙会丢失
38、一个进程(系统资源分配)可以有多个线程(Cpu分配)
39、ASPX是编译形,可以与美术分开
40、GAC是全局程序集缓存
41、发送请求get,post
42、DataReader是提供一个只读游标,DataSet是表
43、软件开发过程:需求分析、架构设计、代码编写、QA(质量分析)、部署
44、using引入命名空间和使用非托管资源new新建实例或隐藏父类方法
45、删多的空格
str=Regex.Replace(str.Trim()," +"," ");
46、反射是动态获取程序集信息(成员、方法)
47、虚函数,可由子类继承差重写的函数,抽象函数规定必须实现,必须重写。
48、XML可扩展标记语言
49、ADO.net的常用对象:Connection Command DataReader DataSet DataAdapter
        (2C3D)
50、XML区分大小写,必须结束,属性必须要引号
51、错误处理try->catch->finally
52、<%#%>绑定<%=%>变量<%%>代码
53、 重载是水平关系,参数不同
       覆盖是垂直关系,参数相同
54、取31到40条记录
      select top 10 * from A where id not in (select top 30 id from A)
55、面向对象:封装、继承、多态
56、finally的语句在return之前运行。
57、BS开发,数据访问层、业务层、表示层
58、读数据的方法:ExecuteScalar、Fill、ExecuteReader
59、HttpModule是HttpApplication对象初始化一并载入,在http请求中,很多事件比如sessionStart,可以在每个事件上挂事件,比如检测错误写日志,HttpHandler触发时开始拦截触发事件,抓住的意思,对扩展名如何处理,就是httphandle来处理,例如处理image,调用哪一类,比如处理jpg用什么处理,防盗链
60、存储过程与Sql语句比较:
    ①存储过程创建时已经编译,不用再编译
    ②可以将复杂操作与事务处理结合。
    ③存储过程可以重复使用。
    ④安全性高
61、常用的设计模式工厂模式、建造者模式、观察者模式、策略模式、原型模式、代理模式。
62、接口可以继承接口、抽象类可以实现接口,抽象类可以继承实体类,但实体类必须有明确的构造函数。
63、最有效的*8,2<<3
64、final申明不可变
      finally是异常处理必须执行
      finallize是类的一个方法,垃圾回收时执行
65、HashMap是HashTable的轻量级实现,(小地图),实现了Map接口,HashMap可以键值为Null,效率更高
66、Collections是针对集合类的一个帮助类,有许多方法,Collection是集合类的上级接口。
67、委托是将方法作为一个参数传递,比函数指针更安全,不带方法体。
68、Override是重写基类的方法,参数等全相同,Overload是重载
69、response,redictor,Server.Transfer QueryString,cookie,session,input type="hidden"
70、反射是动态获得对象的类型、方法、属性
      序列化是将对象转换为另一种传输的格式。
71、Const编译时常量,ReadOnly运行时常量
72、TCP是传输控制协议,可靠的连接,UDP是用户数据报协议,不可靠的连接
73、进程是系统分配资源,线程是Cpu分配,一个可以有多个线程
74、应用程序域:为安全性、版本控制、卸载程序提供的隔离边界
      代管代码:CLR公共语言运行时(库)开发的代码是托管代码。
75、身份验证:windows(比窗口认证可靠性更高更小攻击面,但帐户泄露,后果严重).forms(用户群大的开放环境,论坛等,但受到的攻击多).passport,
76、UDDI是集成协议,基于WEB、分布式的实现标准规范
      WSDL是基于XmL描述的WEB服务的接口。
77、SOAP是简单访问,基于Xml,用于分布式环境。
78、ADO以RecorderSet存储,单表,ADO.net用DataSet,多表
79、接口与抽象类的区别
      接口不能实例化,所有的方法都是公有的,抽象的,抽象类只要一个抽象方法,实现一个接口,必须实现所有的方法
80、值类型数据存在堆栈中,不可共用,引用类型存在堆中,可以共同使用,改引用地址
81、三层DataAccess,Business,Web
82、JS验证是否数字
function check()
{
    var t1=document.getElementById("tt");
    var reg=/^"d+$/;
    alert(reg.test(t1.value));
   
}
83、remoting工作原理是服务端向客户端发送一个进程编号、一个程序域编号,确定对象的位置
84、WEB控件是可以在服务器端执行的控件,可以回送数据,有事件驱动
85、页面代码,OnInit(),Page_Load(),事件
86、上下文对象HttpContext,在类中调用
87、Transfer是转发,Redirect是跳转
88、JS中的类
function User(name,age)
{
    this.name=name;
    this.age=age;
    this.getInfo=getInfo;
}
function getInfo()
{
    document.write(this.name);
    document.write(this.age);
}
var user1=new User("Lisng",33);
user1.getInfo();
89、C#中读Xml
            XmlDocument doc = new XmlDocument();


            doc.Load(Server.MapPath("test.xml"));


            foreach (XmlNode node in doc.ChildNodes)
            {
                DisplayNode(node);
            }



        private void DisplayNode(XmlNode node)
        {
            Response.Write(node.Name + ":" + node.Value+"
");
            if (node.HasChildNodes)
                foreach (XmlNode _node in node.ChildNodes)
                    DisplayNode(_node);
        }
90、FrameSet无body,from
  
       
       
   
91、FireFox不支持VBscript
92、XML作用①做网页Xslt②数据库③保存对象的序列化
93、手写连接
            // 在此处放置用户代码以初始化页面
            //string strConn="server=(local);database=MyBlog;User Id=sa;pwd=sa";
            //string strConn="Provider=Microsoft.Jet.OLEDB.4.0;DataSource=C:"Customer.mdb

            string strConn=@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:"test.mdb";
            string strSql="select * from [User]";
            DataTable dt=new DataTable();
           
            //using(SqlConnection conn=new SqlConnection(strConn))
           
            using(OleDbConnection conn=new OleDbConnection(strConn))
            {
                conn.Open();
                using(OleDbCommand comm=new OleDbCommand(strSql,conn))
                {
                    OleDbDataAdapter da=new OleDbDataAdapter(comm);    
                    da.Fill(dt);
                }
            }
            DataGrid1.DataSource=dt;
            DataGrid1.DataBind();
        }
94、ASP六大内建对象:
         Application Request Response Session  Server ObjectContext
         ARRSSO
95、VSS作用:团队开发的代码管理,签出后,能保证代码不冲突,可以加注释
96、Code-behind将html和程序代码分离
97、类是 引用、可继承、默认构造、new实例化
        结构 值类型、不可继承、不可有默认构造、不可new实例化
98、操作符重载可以对操作符赋予不同的功能,自定义的操作符
99、遍历TextBox并赋“”
private   void   textnull(Control   a) 

    for (int i=0;i     {
        if(a.Controls[i].GetType().ToString()=="System.Web.UI.WebControls.TextBox")
        {
            ((TextBox)a.Controls[i])Text="";
        }
        else
        {
            textnull(a.Controls[i]);
        }
    }
}
100、单体模式类
public class Wife
{
    private string name;
    private static Wife wife=null;
    private Wife()
    {
        //不允许私自构造
    }
    public static Wife getWife()
    {
        if(wife==null) wife=new Wife();//只有为空时才创建
        return wife;
    }
};
101、写出一个存储过程, 取出表A中第@m条到第@n条记录(@m和@n是输入参数,@m < @n)(SQL Server, 以自动增长的ID作为主键, 注意:ID可能不是连续的。)
CREATE PROCEDURE [dbo].[Proc_ReadMToN]
(@m [int],
@n [int])
AS
SELECT * FROM TABLE
WHERE
ID > @m and ID<@n

102、插入随机数
            int[] Arr = 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];
            }
103、页面过程Init ->Load->PreRender->Render->Dispose->Unload
104、1000以内素数
      static private Boolean IsZhiShu(int x)
        {
            Boolean Yes = true;
            for (int i = 2; i <= Math.Sqrt(x); i++)
            {
                if((x % i)==0)
                {
                    Yes = false;
                 }
            }
            return Yes;
          
        }
        static void Main(string[] args)
        {
            for (int i = 2; i < 1000; i++)
            {
                if (IsZhiShu(i) == true)
                {
                    Console.Write(i.ToString());
                    Console.Write("  ");
                }
            }
            Console.ReadKey();
        }
105、跳转页面方式
如果用户决定:超级链接
如果要控制目标:HyperLink 动态设定NavigateUrl
Response.Redirect
如果要转流程,避免不必要的网络通信
Server.Transfer
如果要捕获一个页面的输出,将结果插入另一个aspx

Server.Execute

106、面试的一道SQL
今天没做起的一道SQL面试题

选出每科的最高分

 Lisng    语文    80  
Nonly    语文    78  
Jiang    数学    88  
Lxy    数学    80  
Jacky    外语    99 

Andy    数学    66  

  select b.stu_id,stu_name,a.course,a.score
from
(select course,max(score) as score from stu_info group by course) as a,
stu_info as b

where b.course=a.course and b.score=a.score

 分组后,只会出现

语文

数学

外语

score应该是一组,所以用max取最大值

 更强的

 select * from stu_info as a

where score=(select max(score) from stu_info where course=a.course)

107、ORM关系数据库与对象的映射
108、Ado以Recordset存储, Ado.net以DataSet,提供了数据集和数据适配器,有利于分布式处理。
109、asp.net2.0与1.1相比的优势
语法增加了泛型、无名方法、可空类型、partial类
.net层面母版页、模板、主题
110、可以看做操作数据集的新语法,LinqToXml,LinqToSql
111、WebService服务可以描述为可以在web上部署并可以被任何应用程序或其他服务调用的功能。
112、C#中的接口和类有什么异同。
        答:接口,是可以多继承,类只有单继承.接口强调了你必须实现,而没有具本实现的方法和虚类有点相似。
113、内置对象
Response、Request、Server、Session、Application、Cookie
114、请说明在.net中常用的几种页面间传递参数的方法,并说出他们的优缺点。
答:session(viewstate) 简单,但易丢失
application 全局
cookie 简单,但可能不支持,可能被伪造
input ttype="hidden" 简单,可能被伪造
url参数 简单,显示于地址栏,长度有限
数据库 稳定,安全,但性能相对弱
115、维护数据库的完整性、一致性、你喜欢用触发器还是自写业务逻辑?为什么?
答:尽可能用约束(包括CHECK、主键、唯一键、外键、非空字段)实现,这种方式的效率最好;其次用触发器,这种方式可以保证无论何种业务系统访问数据库都能维持数据库的完整性、一致性;最后再考虑用自写业务逻辑实现,但这种方式效率最低、编程最复杂,当为下下之策。

116、几大对象

Request对象主要是让服务器取得客户端浏览器的一些数据,包括从HTML表单用Post或者GET方法传递的参数、Cookie和用户认证。

Response对象用语输出数据到客户端,包括向浏览器输出数据、重定向浏览器到另一个URL或向浏览器输出Cookie文件。

Server对象提供对服务器上的方法和属性进行的访问 .其类名称是HttpServerUtility.

Application对象在实际网络开发中的用途就是记录整个网络的信息,如上线人数、在线名单、意见调查和网上选举等。

Session即会话,是指一个用户在一段时间内对某一个站点的一次访问。 
Cookie就是Web服务器保存在用户硬盘上的一段文本。

 

1.用两种方法求数列 1,1,2,3,5,8.......n的第n位数
function getN(n)
{
if (n<3) 
{
return 1;
}
else
{
return getN(n-1)+getN(n-2);
}
}
function getN2(n)
{
if(n<3)
{
return 1;
}
else
{
var a=1,b=1,c=0
for(var i=3;i<=n;i++)
{
c=a+b;
a=b;
b=c;
}
return b;
}
}
2.写出observer设计模式,猫叫,人醒,老鼠跑
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace observer1
{
    public interface IObserver
    {
        void Response();
    }
    public interface IObject
    {
        void AddFollower(IObserver obs);
    }
    public class Mouse:IObserver
    {
        private string _name;
        public Mouse(string name,IObject obj)
        {
            _name = name;
            obj.AddFollower(this);
        }
        public void Response()
        {
            Console.WriteLine("Mouse: "+ _name + " start running!");
        }
    }
    public class Person : IObserver
    {
        public Person(IObject obj)
        {
            obj.AddFollower(this);
        }
        public void Response()
        {
            Console.WriteLine("person wake up!");
        }
    }
    public class Cat : IObject
    { 
        public List obsList;
        public Cat()
        {
            obsList = new List();
        }
        public void AddFollower(IObserver obr)
        {
            obsList.Add(obr);
        }
        public void Cry()
        {
            Console.WriteLine("cat is crying!");
            foreach (IObserver obr in obsList)
            {
                obr.Response();
            }
        }
    }
    class ObserverTest
    {
        static void Main(string[] args)
        {
            Cat cat = new Cat();
            Mouse m1 = new Mouse("mouse1", cat);
            Mouse m2 = new Mouse("mouse2", cat);
            Person p = new Person(cat);
            cat.Cry();
            Console.ReadLine();
        }
    }
}
3.javascript三种弹出窗体的方式
var pwd = prompt("enter your password:","***");
if(confirm("Are you sure!"))
{
if(pwd == "***")
{
alert("success!");
}
}
4.现场设计数据库,公交车经过的站点
create table route(
id int primary key identity(1,1) not null,
name varchar(10) not null,
remark varchar(10) null
)
create table routeInfo
(
rID int not null,--路线ID
sID int not null,--站点ID
)
create clustered index i_rid on routeInfo
(
rID asc
)
create table stops
(
id int primary key identity(1,1) not null,
name varchar(10) not null,
remark varchar(10) null
)
truncate table stops
/*
create clustered index i_name on route(
 name asc
)
drop index PK__route__03317E3D on route
create nonclustered index i_name on route
(
name desc
)
drop index i_name on route
alter table route drop constraint idkey
*/
select * from route
5.SQL删除相同行记录
delete route from route as r left join (select min(id) as id,name,remark from route group by name,remark) as b on r.id=b.id
where b.id is null
6.数据库索引方面的知识,聚集索引和非聚集索引
聚:物理上连续的,叶节点是数据,一个表只有一个聚集
非:索引是连续的,叶节点存的还是索引,索引指向内容
一般来说:where 条件的都用聚或联合聚,时间字段最好用聚,自增ID一般不浪费聚,
7.ASP.NET里如何解决Session失效的问题
分析原因
Global.asax文件,Config文件被更改或扫描
检查是否有Session.Abandon
是否有更新的文件放在BIN目录下
如果是Iframe造成的,在Header里面加一段代码
webconfig加大超时的时间
webconfig的Session的3种存储方式,inproc,stateserver,sql
8.值类型和引用类型的区别
值类型就是现金,要用直接用;引用类型是存折,要用还得先去银行取现。
值类型存取速度快,引用类型存取速度慢。
值类型继承自System.ValueType,引用类型继承自System.Object
值:直接存数据,栈
引用:存对象的引用,堆,需要内存回收
比较struct和class的不同,可以得出以下几条struct和class的使用原则:
1 在表示诸如点、矩形等主要用来存储数据的轻量级对象时,首选struct。
2 在表示数据量大、逻辑复杂的大对象时,首选class。
3 在表现抽象和多级别的对象层次时,class是最佳选择
9. 选出TableA中15条到25条的数据,Identity ID是不连续自增的。
with tmp as
select row_number() over(order by id asc) as rowID ,name from route
)
select * from tmp where rowID between 2 and 5
10.编写存储过程,取出数据库表中的15到25中的10条记录。
分页,4种排序函数
with tmp as 
(
select ntile(3) over(order by id asc) as page,* from route
)
select * from tmp
面试:
1.       大容量数据的更新。
分批更新
作业
游标
使用select case when ..... in newTb from stb
2.       关注在设计模式 列出你熟悉的 然后让你当场写一个示例,从你列出的任选其一。
单例
    class Singleton
    {
        private static Singleton _instance;
        private Singleton() { }
        public static Singleton instance
        {
            get {
                if (_instance == null)
                {
                    _instance = new Singleton();
                }
                return _instance;
            }
        }
    }
简单工厂
    class Program
    {
        static void Main(string[] args)
        {
            IFruit apple = FriuFactory.CreateFriut("apple");
            IFruit banana = FriuFactory.CreateFriut("banana");
            Console.WriteLine("apple:" + apple.Price);
            Console.WriteLine("Banana:" + banana.Price);
            Console.ReadLine();
        }
    }
    public interface IFruit
    {
        int Price { get; }
    }
    public class Apple : IFruit
    { 
        public int Price{
            get {
                return 5;
            }
        }
    }
    public class Banana : IFruit
    {
       public int Price
        {
            get
            {
                return 6;
            }
        }
    }
    public class FriuFactory
    {
        public static IFruit CreateFriut(string key)
        {
            switch (key)
            { 
                case "apple":
                    return new Apple();
                case "banana":
                    return new Banana();
            }
            return null;
        }
    }
适配器模式
装饰模式
观察者模式
外观模式
3.       面试到一定的时候就让你写一个设计订单表
create table orders
(
id bigint identity(1,1) not null,
userID bigint not null,
orderID varchar(50) not null,
createTime int not null,
)
create unique index u_id on orders
(
id
)
create unique clustered index c_userID on orders
(
userID asc
)
insert into orders values(3,'no125',datediff(second,'2000-1-1',getdate()))
函数题:
传入一个list和一个值找出所有关于这个list中所有元素能组合这个值的组合相加得这个值,并对写的算法进行讨论。
4. 数据库问了怎么处理异常
set xact_abort on
commit tran
try
{
}
catch ()
{
}
 
HR说的
1.       很多候选人可能是做到一定程度,又可能是公司分工的问题,可能很多只是刚开始会亲自去写编码或者写东西,但是咱们要求的是项目中会亲自写代码、写SQL的,重技术,而且算法和SQL是必须会得,缺一不可。
2.       我们比较期望候选人是参加到了项目中的,并且是亲自动手操作过的,最好是核心部分,说白了就是真实参加到开发过程中,有了一定经验,掌握了一定技术及思路的
3.       我们是特别注重动手能力,高端一点的人会开始注重设计能力
 
注意:
多了解设计模式和微软才出来的东东
 
 
做了两道题,分别是大数阶乘和分页查询。但问的题比较多,整理如下:
求5000的阶乘(大数阶乘),
谈谈QQ农场的设计思路?
SP的优缺点,临时表与表变量的优缺点及适用场合?行列转换的两种方式:函数和CASE 子句
SP:安全,高效,不会产生大量T-sql语句的代码流量。对执行计划的重复使用,可维护,版本控制
如果更改输入,输出参数麻烦,可移植性差
不支持面向对象的设计,无法采用面向对象的方式将业务逻辑进行封装,从而无法形成通用的可支持复用的业务逻辑框架。
临时表是利用了硬盘(tempdb数据库) ,表名变量是占用内存,因此小数据量当然是内存中的表变量更快。当大数据量时,就不能用表变量了,太耗内存了。大数据量时适合用临时表。
触发器、自定义函数用表变量;存储过程看情况,大部分用表变量;特殊的应用,大数据量的场合用临时表。
表变量有明确的作用域,在定义表变量的函数、存储过程或批处理结束时,会自动清除表变量。
表变量不必删除,也就不会有命名冲突,临时表特别是全局临时表用的时候必须解决命名冲突。
表变量:需要事先知道表结构  
普通临时表:只在当前会话中可用与表变量相同  into一下就可以了,方便  
全局临时表:可在多个会话中使用存在于temp中需显示的drop  
select name,
isnull(sum(case subject when 'math' then score end),0) as 'math',
isnull(sum(case subject when 'english' then score end),0) as 'english'
from score group by name
select * from score
pivot(
sum(score) for subject in(math,english)
) as b
有javascript实现C#的Format方法,如Format(“How {0} you,How {1} are you.”,"Are","old")=How Are you,How old are you.
对那些开源项目有了解?有了解过ORM架构吗?
AOP,IOC的概念,
AOP为Aspect Oriented Programming的缩写,意为:面向方法编程,可以通过预编译方式和运行期动态代理实现在不修改源代码的情况下给程序动态统一添加功能的一种技术。
AOP是OOP的延续,是Aspect Oriented Programming的缩写,意思是面向方面编程。AOP实际是GoF设计模式的延续,设计模式孜孜不倦追求的是调用者和被调用者之间的解耦,AOP可以说也是这种目标的一种实现。
IOC控制反转,依赖注入
设计模式也问到了,后面谈了对电子商务的看法和了解。
 
1.一个12升的杯子装有12升水,还提供8升的杯子1个,和5升的杯子一个.
请帮我分6升的水出来?
4,8,0
4,3,5
9,3,0
9,0,3
1,8,3
1,6,5
6,6,0
2.存储过程/锁和事务.(问我用代码解锁,在select语句最后加上 nolock)
3. 联接的种类,内联接及左右联接的区别
外联接
full outer join 左+右+内
cross join 乘积
left join 以left join前面的表为主表,把left join后面的表符合on条件的内容加到主表中,如果没有符合on条件的内容,则显示为NULL
right join 以right join后面的表为主表,把right join前面的表符合on条件的内容加到主表中,如果没有符合on条件的内容,则显示为NULL
inner join 就是返回两个表中符合on条件的记录,若不满足条件则不返回
4.UNION 和 UNION ALL 的区别
union 有distinct 功能
Union all 不包含
所以如果要组合的表数据不重复,使用Union all 更快。
5.批处理(包括存储过程中),锁机制是怎样的(允许查询及DML吗)
1.HOLDLOCK: 在该表上保持共享锁,直到整个事务结束,而不是在语句执行完立即释放所添加的锁。 
2.NOLOCK:不添加共享锁和排它锁,当这个选项生效后,可能读到未提交读的数据或“脏数据”,这个选项仅仅应用于SELECT语句。 
3. PAGLOCK:指定添加页面锁(否则通常可能添加表锁)。 
4.READCOMMITTED:设置事务为读提交隔离性级别。 
5.READPAST: 跳过已经加锁的数据行,这个选项将使事务读取数据时跳过那些已经被其他事务锁定的数据行,而不是阻塞直到其他事务释放锁,READPAST仅仅应用于READ COMMITTED隔离性级别下事务操作中的SELECT语句操作。 
6.READUNCOMMITTED:等同于NOLOCK。 
7.REPEATABLEREAD:设置事务为可重复读隔离性级别。 
8.ROWLOCK:指定使用行级锁。 
9.SERIALIZABLE:设置事务为可串行的隔离性级别。 
10.TABLOCK:指定使用表级锁,而不是使用行级或页面级的锁,SQL Server在该语句执行完后释放这个锁,而如果同时指定了HOLDLOCK,该锁一直保持到这个事务结束。 
11.TABLOCKX:指定在表上使用排它锁,这个锁可以阻止其他事务读或更新这个表的数据,直到这个语句或整个事务结束。 
12. UPDLOCK :指定在读表中数据时设置修改锁(update lock)而不是设置共享锁,该锁一直保持到这个语句或整个事务结束,使用UPDLOCK的作用是允许用户先读取数据(而且不阻塞其他用户读数据),并且保证在后来再更新数据时,这一段时间内这些数据没有被其他用户修改。 
还有一些函数题的,和问了一些进存销的东西。

转载于:https://www.cnblogs.com/lishenglyx/archive/2008/09/07/1286338.html

你可能感兴趣的:(面试,数据库,设计模式)