整理幾個有想法的面試題

bolg地址:http://blog.csdn.net/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)。

       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>

/// 請編程實現此方法。將輸入的整型數組,合併轉換爲逗號分隔的字符串。

/// 例如輸入參數爲整型數組{972},那麼輸出結果爲字符串"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>

/// UpdateData1UpdateData2是兩個含有更新數據庫操作方法,

/// 我們希望這兩個操作能夠在一個事物(Transaction)如果成功,就全部提交, 

/// 如果失敗,就全部回滾。

/// 請設計main方法中調用UpdateData1UpdateData2的寫法。

/// UpdateData1UpdateData2的參數可以自己設計。

/// 另外,請簡要回答, 

/// 如果UpdateData1UpdateData2需要操作的數據庫不是一個數據庫怎麼處理。

/// </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它是一個給類的對象添加方法的方法

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章