bolg地址:http://blog.csdn.net/adsdassadfasdfasdf/article/details/7553028
1.
階乘,指從1乘以2乘以3乘以4一直乘到所要求的數。
例如所要求的數是4,則階乘式是1×2×3×4,得到的積是24,24就是4的階乘。 例如所要求的數是6,則階乘式是1×2×3×……×6,得到的積是720,720就是6的階乘。例如所要求的數是n,則階乘式是1×2×3×……×n,設得到的積是x,x就是n的階乘。
任何大於1的自然數n階乘表示方法:
n!=1×2×3×……×n 或 n!=n×(n-1)! 注:0!=1
1) 請編寫一個函數,能夠計算10以內數的階乘,儘量採用遞歸算法。(10!=3628800)。
public int jiecheng(int n)
{
if (n == 1)
return 1;
else if (n == 2)
return 2;
else
return n * jiecheng(n - 1);
}
2. 請編程實現:
public static void main()
{
int[] a = { 1, 3, 5, 7, 9 };
Console.WriteLine(Combine(a)); //期待的結果,輸出字符串"1,3,5,7,9"
}
/// <summary>
/// 請編程實現此方法。將輸入的整型數組,合併轉換爲逗號分隔的字符串。
/// 例如輸入參數爲整型數組{9,7,2},那麼輸出結果爲字符串"9,7,2"。
/// </summary>
/// <param name="data"></param>
/// <returns></returns>
請認真考慮輸入參數的各種邊界情況!
private static string Combine(int[] data)
{
string str = "";
foreach (int s in data)
{
str += s.ToString() + ",";
}
return str;
}
3. 簡答題:
A. 數據表T用來記錄用戶登錄、註銷信息,其中只有4個記錄:
user(用戶名) |
operate(操作) |
time(時間) |
LiMing |
Login |
2010/10/24 8:03 |
WangYi |
Login |
2010/10/24 8:14 |
WangYi |
Logout |
2010/10/24 16:14 |
LiMing |
Logout |
2010/10/24 16:44 |
請寫出一個SQL查詢語句,返回用戶在線時間情況的結果集:
LiMing |
8:13 |
WangYi |
8:46 |
create table tb ( [user] varchar(20), operate varchar(20), [time] datetime)
insert into tb select 'LiMing', 'Login', '2010/10/24 8:03'
union all
select 'WangYi', 'Login', '2010/10/24 8:14'
union all
select 'WangYi', 'Logout', '2010/10/24 16:14'
union all
select 'LiMing', 'Logout', '2010/10/24 16:44'
select a.[user] , cast(DATEdiff(MI, b.[time] ,a.[time] )/ 60 as varchar) + ':' + cast(DATEdiff(MI, b.[time] ,a.[time] )%60 as varchar) AS 在線時間
from ( select * from tb where operate ='Logout') a,
(select * from tb where operate ='Login') b
where a.[user] =b.[user]
4. 請編程實現:
/// <summary>
/// UpdateData1和UpdateData2是兩個含有更新數據庫操作方法,
/// 我們希望這兩個操作能夠在一個事物(Transaction)中。如果成功,就全部提交,
/// 如果失敗,就全部回滾。
/// 請設計main方法中調用UpdateData1和UpdateData2的寫法。
/// UpdateData1和UpdateData2的參數可以自己設計。
/// 另外,請簡要回答,
/// 如果UpdateData1和UpdateData2需要操作的數據庫不是一個數據庫怎麼處理。
/// </summary>
public static void main()
{
……
UpdateData1(…);
UpdateData2(…);
……
}
private static string UpdateData1(…)
{
……
}
private static string UpdateData2(…)
{
……
}
解答:
public static void main()
{
string conString = "data source=127.0.0.1;database=codematic;user id=sa;
password=";
SqlConnection myConnection = new SqlConnection(conString);
myConnection.Open();
//啓動一個事務
SqlTransaction myTrans = myConnection.BeginTransaction();
//爲事務創建一個命令
SqlCommand myCommand = new SqlCommand();
myCommand.Connection = myConnection;//字符串連接
myCommand.Transaction = myTrans;
try
{
myCommand.CommandText = UpdateData1();
myCommand.ExecuteNonQuery();
myCommand.CommandText = UpdateData1();
myCommand.ExecuteNonQuery();
myTrans.Commit();//提交
Response.Write("兩條數據更新成功");
}
catch (Exception ex)
{
myTrans.Rollback();//遇到錯誤,回滾
Response.Write(ex.ToString());
}
finally
{
myConnection.Close();
}
}
private static string UpdateData1()
{
Return "update a set Name='測試1' where Id=1";
}
private static string UpdateData2()
{
Return "update b set Name='測試2' where Id=1";
}
如果不在一個數據庫裏面可以用兩個SqlTransaction 分別爲 sqlTran1和sqlTran2
定義一個變量int num;執行sqlTran1,如果成功num就加1,執行sqlTran2,成功num再加1,
最後判斷num==2 兩個事務都提交,如果!=2兩個事務都回滾。
代碼:
public void TransactionDebug()
{
string sql1 = @"Data Source=XXXXXX;Initial Catalog=stuDB;Integrated Security=True";
string sql2 = @"Data Source=XXXXXX;Initial Catalog=Northwind;Integrated Security=True";
SqlConnection conn1 = new SqlConnection(sql1);
SqlConnection conn2 = new SqlConnection(sql2);
string sqlUpdate1 = "UPDATE stuInfo SET stuAddress='江南' WHERE stuNO='s25301'";
string sqlUpdate2 = "UPDATE Products SET ProductName='Chian' WHERE ProductID=1";
SqlCommand sc1 = new SqlCommand(sqlUpdate1, conn1);
SqlCommand sc2 = new SqlCommand(sqlUpdate2, conn2);
conn1.Open();
SqlTransaction sqlTran1 = conn1.BeginTransaction();
conn2.Open();
SqlTransaction sqlTran2 = conn2.BeginTransaction();
int effectrow=0;
using(TransactionScope tranScope = new TransactionScope())
{
try
{
sc1.Transaction = sqlTran1;
effectrow += sc1.ExecuteNonQuery();
sc2.Transaction = sqlTran2;
effectrow += sc2.ExecuteNonQuery();
}
catch(SqlException ex)
{
sqlTran1.Rollback();
sqlTran2.Rollback();
conn1.Close();
conn2.Close();
throw ex;
}
if(effectrow == 2)
{
sqlTran1.Commit();
sqlTran2.Commit();
}
else
{
sqlTran1.Rollback();
sqlTran2.Rollback();
}
conn1.Close();
conn2.Close();
}
}
5. 請簡答關於SQL Server的概念題:
a) 在查詢和更新數據時,會涉及到那幾種類型的鎖。
獨佔和更新
6. 請解釋下面Javascript代碼的區別:
var a = new Object();
// 下面兩句話是否有區別
a.companyName = “Microsoft”;
a[“companyName”] = “Microsoft”;
// 請簡述下面兩種寫法的本質,涉及到javascipt語法的原理
var company = function() {};
company.get_name = function() {
return “Microsoft”;
}
var company = function() {};
company.prototype.get_name = function() {
return “Microsoft”;
}
解答:
var a = new Object();
a.companyName = “Microsoft”;//給a對象增加companyName屬性
a[“companyName”] = “Microsoft”; //和上邊一句話是一樣的 相當於a.companyName
// 對象訪問或增加屬性的方式有兩種 對象.屬性和對象[屬性]
var company = function() {}; //function也是對象
company.get_name = function() {
//所以可以對function也增加屬性
return “Microsoft”;
}
var company = function() {};
//既然function是對象 其自然也具有prototype屬性 即原型
company.prototype.get_name = function() {
return “Microsoft”;
}
var c = new company();
alert(c.get_name());
前者報錯,後者可運行,關於原型鏈的問題,請Google搜索“js 原型鏈”進行有條理地學習
prototype它是一個給類的對象添加方法的方法