整理几个有想法的面试题

bolg地址:http://blog.youkuaiyun.com/adsdassadfasdfasdf/article/details/7553028

1.

阶乘,指从1乘以2乘以3乘以4一直乘到所要求的数。

例如所要求的数是4,则阶乘式是1×2×3×4,得到的积是2424就是4的阶乘。例如所要求的数是6,则阶乘式是1×2×3×……×6,得到的积是720720就是6的阶乘。例如所要求的数是n,则阶乘式是1×2×3×……×n,设得到的积是xx就是n的阶乘。

任何大于1的自然数n阶乘表示方法:

n!=1×2×3×……×n  或  n!=n×(n-1)!注:0!=1

1)请编写一个函数,能够计算10以内数的阶乘,尽量采用递归算法。(10!=3628800)。

publicintjiecheng(intn)

{
if(n==1)
return1;
elseif(n==2)
return2;
else
returnn*jiecheng(n-1);

}

2.请编程实现:

publicstaticvoidmain()

{

int[]a={1,3,5,7,9};

Console.WriteLine(Combine(a));//期待的结果,输出字符串"1,3,5,7,9"

}

///<summary>

///请编程实现此方法。将输入的整型数组,合并转换为逗号分隔的字符串。

///例如输入参数为整型数组{972},那么输出结果为字符串"9,7,2"

///</summary>

///<paramname="data"></param>

///<returns></returns>

请认真考虑输入参数的各种边界情况!

privatestaticstringCombine(int[]data)

{

stringstr="";

foreach(intsindata)

{

str+=s.ToString()+",";

}

returnstr;

}

3.简答题:

A.数据表T用来记录用户登录、注销信息,其中只有4个记录:

user(用户名)

operate(操作)

time(时间)

LiMing

Login

2010/10/248:03

WangYi

Login

2010/10/248:14

WangYi

Logout

2010/10/2416:14

LiMing

Logout

2010/10/2416:44

请写出一个SQL查询语句,返回用户在线时间情况的结果集:

LiMing

8:13

WangYi

8:46

createtabletb([user]varchar(20),operatevarchar(20),[time]datetime)

insertintotbselect'LiMing','Login','2010/10/248:03'

unionall

select'WangYi','Login','2010/10/248:14'

unionall

select'WangYi','Logout','2010/10/2416:14'

unionall

select'LiMing','Logout','2010/10/2416:44'

selecta.[user],cast(DATEdiff(MI,b.[time],a.[time])/60asvarchar)+':'+cast(DATEdiff(MI,b.[time],a.[time])%60asvarchar)AS在线时间

from(select*fromtbwhereoperate='Logout')a,

(select*fromtbwhereoperate='Login')b

wherea.[user]=b.[user]

4.请编程实现:

///<summary>

///UpdateData1UpdateData2是两个含有更新数据库操作方法,

///我们希望这两个操作能够在一个事物(Transaction)。如果成功,就全部提交,

///如果失败,就全部回滚。

///请设计main方法中调用UpdateData1UpdateData2的写法。

///UpdateData1UpdateData2的参数可以自己设计。

///另外,请简要回答,

///如果UpdateData1UpdateData2需要操作的数据库不是一个数据库怎么处理。

///</summary>

publicstaticvoidmain()

{

……

UpdateData1(…);

UpdateData2(…);

……

}

privatestaticstringUpdateData1(…)

{

……

}

privatestaticstringUpdateData2(…)

{

……

}

解答:

publicstaticvoidmain()

{

stringconString="datasource=127.0.0.1;database=codematic;userid=sa;

password=";

SqlConnectionmyConnection=newSqlConnection(conString);

myConnection.Open();

//启动一个事务

SqlTransactionmyTrans=myConnection.BeginTransaction();

//为事务创建一个命令

SqlCommandmyCommand=newSqlCommand();

myCommand.Connection=myConnection;//字符串连接

myCommand.Transaction=myTrans;

try

{

myCommand.CommandText=UpdateData1();

myCommand.ExecuteNonQuery();

myCommand.CommandText=UpdateData1();

myCommand.ExecuteNonQuery();

myTrans.Commit();//提交

Response.Write("两条数据更新成功");

}

catch(Exceptionex)

{

myTrans.Rollback();//遇到错误,回滚

Response.Write(ex.ToString());

}

finally

{

myConnection.Close();

}

}

privatestaticstringUpdateData1()

{

Return"updateasetName='测试1'whereId=1";

}

privatestaticstringUpdateData2()

{

Return"updatebsetName='测试2'whereId=1";

}

如果不在一个数据库里面可以用两个SqlTransaction分别为sqlTran1和sqlTran2

定义一个变量intnum;执行sqlTran1,如果成功num就加1,执行sqlTran2,成功num再加1

最后判断num==2两个事务都提交,如果!=2两个事务都回滚。

代码:

publicvoidTransactionDebug()
{

stringsql1=@"DataSource=XXXXXX;InitialCatalog=stuDB;IntegratedSecurity=True";
stringsql2=@"DataSource=XXXXXX;InitialCatalog=Northwind;IntegratedSecurity=True";

SqlConnectionconn1=newSqlConnection(sql1);
SqlConnectionconn2=newSqlConnection(sql2);

stringsqlUpdate1="UPDATEstuInfoSETstuAddress='江南'WHEREstuNO='s25301'";
stringsqlUpdate2="UPDATEProductsSETProductName='Chian'WHEREProductID=1";


SqlCommandsc1=newSqlCommand(sqlUpdate1,conn1);
SqlCommandsc2=newSqlCommand(sqlUpdate2,conn2);

conn1.Open();
SqlTransactionsqlTran1=conn1.BeginTransaction();
conn2.Open();
SqlTransactionsqlTran2=conn2.BeginTransaction();

inteffectrow=0;

using(TransactionScopetranScope=newTransactionScope())
{
try
{
sc1.Transaction=sqlTran1;
effectrow+=sc1.ExecuteNonQuery();

sc2.Transaction=sqlTran2;
effectrow+=sc2.ExecuteNonQuery();
}
catch(SqlExceptionex)
{
sqlTran1.Rollback();
sqlTran2.Rollback();
conn1.Close();
conn2.Close();

throwex;
}
if(effectrow==2)
{
sqlTran1.Commit();
sqlTran2.Commit();
}
else
{
sqlTran1.Rollback();
sqlTran2.Rollback();
}

conn1.Close();
conn2.Close();
}
}

5.请简答关于SQLServer的概念题:

a)在查询和更新数据时,会涉及到那几种类型的锁。

独占和更新

6.请解释下面Javascript代码的区别:

vara=newObject();

//下面两句话是否有区别

a.companyName=“Microsoft”;

a[“companyName”]=“Microsoft”;

//请简述下面两种写法的本质,涉及到javascipt语法的原理

varcompany=function(){};

company.get_name=function(){

return“Microsoft”;

}

varcompany=function(){};

company.prototype.get_name=function(){

return“Microsoft”;

}

解答:

vara=newObject();

a.companyName=“Microsoft”;//a对象增加companyName属性

a[“companyName”]=“Microsoft”;//和上边一句话是一样的相当于a.companyName

//对象访问或增加属性的方式有两种对象.属性和对象[属性]

varcompany=function(){};//function也是对象

company.get_name=function(){

//所以可以对function也增加属性

return“Microsoft”;

}

varcompany=function(){};

//既然function是对象其自然也具有prototype属性即原型

company.prototype.get_name=function(){

return“Microsoft”;

}

varc=newcompany();
alert(c.get_name());
前者报错,后者可运行,关于原型链的问题,请Google搜索“js原型链进行有条理地学习
prototype它是一个给类的对象添加方法的方法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值