NET面試匯總3

來源:互聯網
上載者:User

2 幾十上百萬行,如何快速查詢出表資料
答:用分頁預存程序
/*
函數名稱: GetRecordFromPage
函數功能: 擷取指定頁的資料
參數說明: @tblName      包含資料的表名
           @fldName      關鍵字段名
           @PageSize     每頁記錄數
           @PageIndex    要擷取的頁碼
           @OrderType    排序類型, 0 - 升序, 1 - 降序
           @strWhere     查詢條件 (注意: 不要加 where)
*/
CREATE PROCEDURE GetRecordFromPage
    @tblName      varchar(255),       -- 表名
    @fldName      varchar(255),       -- 欄位名
    @PageSize     int = 10,           -- 頁尺寸
    @PageIndex    int = 1,            -- 頁碼
    @OrderType    bit = 0,            -- 設定排序類型, 非 0 值則降序
    @strWhere     varchar(2000) = '' -- 查詢條件 (注意: 不要加 where)
AS

declare @strSQL   varchar(6000)       -- 主語句
declare @strTmp   varchar(1000)       -- 臨時變數
declare @strOrder varchar(500)        -- 排序類型

if @OrderType != 0
begin
    set @strTmp = '<(select min'
    set @strOrder = ' order by [' + @fldName + '] desc'
end
else
begin
    set @strTmp = '>(select max'
    set @strOrder = ' order by [' + @fldName +'] asc'
end

set @strSQL = 'select top ' + str(@PageSize) + ' * from ['
    + @tblName + '] where [' + @fldName + ']' + @strTmp + '(['
    + @fldName + ']) from (select top ' + str((@PageIndex-1)*@PageSize) + ' ['
    + @fldName + '] from [' + @tblName + ']' + @strOrder + ') as tblTmp)'
    + @strOrder

if @strWhere != ''
    set @strSQL = 'select top ' + str(@PageSize) + ' * from ['
        + @tblName + '] where [' + @fldName + ']' + @strTmp + '(['
        + @fldName + ']) from (select top ' + str((@PageIndex-1)*@PageSize) + ' ['
        + @fldName + '] from [' + @tblName + '] where ' + @strWhere + ' '
        + @strOrder + ') as tblTmp) and ' + @strWhere + ' ' + @strOrder

if @PageIndex = 1
begin
    set @strTmp = ''
    if @strWhere != ''
        set @strTmp = ' where (' + @strWhere + ')'

    set @strSQL = 'select top ' + str(@PageSize) + ' * from ['
        + @tblName + ']' + @strTmp + ' ' + @strOrder
end

exec (@strSQL)

GO

三、資料庫查詢最佳化:
1、多態性,多種資料庫相容;
2、支援翻頁,支援查詢總數,頁碼顯示;
3、能處理100萬以上資料量;
答:
CREATE   PROCEDURE   dbo.LSP_SP_SelectElementByPage      
@SelectFields   varchar(200),/*要查詢的欄位列表*/  
@Condition   varchar(300),/*查詢條件*/  
@PageSize   int   =20,/*頁面大小,預設為20*/  
@PageNumber   int   =1/*頁號,預設為第一頁*/  
/*@PageCount   int   out返回滿足條件的總頁數*/  
AS  
begin  
declare   @count   int  
select   @count   =count(*)   from   lsp_t_elementInfo  
if(@count   %@PageSize=0)  
set   @count   =   @count/@PageSize  
else  
set   @count   =   @count/@PageSize   +1  
select   @count   PageCount  
select   IDENTITY(int,1,1)   as   iid,ElementName,Type   into   #temptable   from   LSP_T_ElementInfo  
select     *   from   #temptable   where   iid   between     @PageSize   *   (@PageNumber   -1)   and   @PageSize   *   @PageNumber  
end  
GO

1.兩個表,寫查詢語句,根據兩個欄位一個是升序,一個將序。
答:select * from a,b where a.欄位1 = b.欄位1 order by a.欄位2 asc,b.欄位2 desc
2.根據第一題,每頁面顯示10條記錄,在第25頁時怎樣顯示
答:
/*
函數名稱: GetRecordFromPage
函數功能: 擷取指定頁的資料
參數說明: @tblName      包含資料的表名
           @fldName      關鍵字段名
           @PageSize     每頁記錄數
           @PageIndex    要擷取的頁碼
           @OrderType    排序類型, 0 - 升序, 1 - 降序
           @strWhere     查詢條件 (注意: 不要加 where)
*/
CREATE PROCEDURE GetRecordFromPage
    @tblName      varchar(255),       -- 表名
    @fldName      varchar(255),       -- 欄位名
    @PageSize     int = 10,           -- 頁尺寸
    @PageIndex    int = 1,            -- 頁碼
    @OrderType    bit = 0,            -- 設定排序類型, 非 0 值則降序
    @strWhere     varchar(2000) = '' -- 查詢條件 (注意: 不要加 where)
AS

declare @strSQL   varchar(6000)       -- 主語句
declare @strTmp   varchar(1000)       -- 臨時變數
declare @strOrder varchar(500)        -- 排序類型

if @OrderType != 0
begin
    set @strTmp = '<(select min'
    set @strOrder = ' order by [' + @fldName + '] desc'
end
else
begin
    set @strTmp = '>(select max'
    set @strOrder = ' order by [' + @fldName +'] asc'
end

set @strSQL = 'select top ' + str(@PageSize) + ' * from ['
    + @tblName + '] where [' + @fldName + ']' + @strTmp + '(['
    + @fldName + ']) from (select top ' + str((@PageIndex-1)*@PageSize) + ' ['
    + @fldName + '] from [' + @tblName + ']' + @strOrder + ') as tblTmp)'
    + @strOrder

if @strWhere != ''
    set @strSQL = 'select top ' + str(@PageSize) + ' * from ['
        + @tblName + '] where [' + @fldName + ']' + @strTmp + '(['
        + @fldName + ']) from (select top ' + str((@PageIndex-1)*@PageSize) + ' ['
        + @fldName + '] from [' + @tblName + '] where ' + @strWhere + ' '
        + @strOrder + ') as tblTmp) and ' + @strWhere + ' ' + @strOrder

if @PageIndex = 1
begin
    set @strTmp = ''
    if @strWhere != ''
        set @strTmp = ' where (' + @strWhere + ')'

    set @strSQL = 'select top ' + str(@PageSize) + ' * from ['
        + @tblName + ']' + @strTmp + ' ' + @strOrder
end

exec (@strSQL)

GO

2.寫出一條Sql語句: 取出表A中第31到第40記錄(SQLServer, 以自動成長的ID作為主鍵, 注意:ID可能不是連續的。)
select top 10 * from A where id not in (select top 30 id from A)
解2: select top 10 * from A where id > (select max(id) from (select top 30 id from A )as A)

3.public class c{ public c(string a) : this() {;}; public c() {;} } 解釋第一個建構函式中發生了什嗎?這個建構函式有什麼用?
(第一個建構函式調用了第二個建構函式,這個建構函式構造了一個c對象的執行個體。)

4.一個長度為10000的字串,通過隨機從a-z中抽取10000個字元組成。請用c#語言編寫主要程式來實現。
答:
       using System.Text;
StringBuilder sb = new StringBuilder(0, 10000);
        string strABC = "a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z";
        string[] ABC = strABC.Split(',');
        int len = ABC.Length;
        Random rd = new Random();
        for (int i = 0; i < 10000; i++)
        {
            sb.Append(ABC[rd.Next(len)]);
        }

5.產生一個int數組,長度為100,並向其中隨機插入1-100,並且不能重複。
int[] intArr=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];

2.如何把一個Array複製到ArrayList裡
答:
foreach( object o in array )arrayList.Add(o);

8.用C#寫一段選擇排序演算法,要求用自己的編程風格。
答:private int min;
    public void xuanZhe(int[] list)//選擇排序
    {
        for (int i = 0; i < list.Length - 1; i++)
        {
            min = i;

            for (int j = i + 1; j < list.Length; j++)
            {
                if (list[j] < list[min])

                    min = j;

            }

            int t = list[min];

            list[min] = list[i];

            list[i] = t;

        }
    }

4.寫一個Function Compute當參數為N的值:1-2+3-4+5-6+7……+N
答:public int returnSum(int n)
    {
        int sum = 0;
        for (int i = 1; i <= n; i++)
        {
            int k = i;
            if (i % 2 == 0)
            {
                k = -k;
            }
            sum = sum + k;
        }
        return sum;
    }

    public int returnSum1(int n)
    {
        int k = n;
        if (n == 0)
        {
            return 0;
        }
        if (n % 2 == 0)
        {
            k = -k;
        }
        return aaa(n - 1) + k;
    }

7. 某一密碼僅使用K、L、M、N、O共5個字母,密碼中的單詞從左向右排列,密碼單詞必須遵循如下規則 :
(1) 密碼單詞的最小長度是兩個字母,可以相同,也可以不同
(2) K不可能是單詞的第一個字母
(3) 如果L出現,則出現次數不止一次
(4) M不能使最後一個也不能是倒數第二個字母
(5) K出現,則N就一定出現
(6) O如果是最後一個字母,則L一定出現
問題一:下列哪一個字母可以放在LO中的O後面,形成一個3個字母的密碼單詞?
A) K B)L C) M D) N
答案:B
問題二:如果能得到的字母是K、L、M,那麼能夠形成的兩個字母長的密碼單詞的總數是多少?
A)1個 B)3個 C)6個 D)9個
答案:A
問題三:下列哪一個是單詞密碼?
A) KLLN B) LOML C) MLLO D)NMKO
答案:C

62-63=1 等式不成立,請移動一個數字(不可以移動減號和等號),使得等式成立,如何移動?
答案:62移動成2的6次方

17、列出常用的使用javascript操作xml的類包
答:
XML.prototype.xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
XML.prototype.InitXML=InitXML;
XML.prototype.getFirstChild=getFirstChild;
XML.prototype.getLastChild=getLastChild;
XML.prototype.getChild=getChild;      // 取得節點值
XML.prototype.getNodeslength=getNodeslength;   // 最得節點下的子節點的個數
XML.prototype.getNode=getNode;       // 取得指定節點
XML.prototype.delNode=delNode;       // 刪除指定節點,如果節點相同,則刪除最前面的節點.
XML.prototype.getNodeAttrib=getNodeAttrib;    // 取得節點的指定屬性值.
XML.prototype.InsertBeforeChild=InsertBeforeChild; // 在指定節點之前插入一個節點.
XML.prototype.InsertChild=InsertChild;     // 在指定節點下插入節點.
XML.prototype.setAttrib=setAttrib;      // 設定指定屬性的值.
XML.prototype.setNodeValue=setNodeValue;    // 設定指定節點的值.
XML.prototype.CreateNodeS=CreateNodeS;     // 建立一個指定名的節點.
XML.prototype.addAttrib=addAttrib;      // 為指定節點添加指定屬性,並設定初值.
XML.prototype.FindString=FindString;     // 在指定節點下尋找字串.

給定以下XML檔案,完成演算法流程圖<FileSystem>
< DriverC >
<Dir DirName=”MSDOS622”>
<File FileName =” Command.com” ></File>
</Dir>
<File FileName =”MSDOS.SYS” ></File>
<File FileName =” IO.SYS” ></File>
</DriverC>
</FileSystem>
請畫出遍曆所有檔案名稱(FileName)的流程圖(請使用遞迴演算法)。
答:
void FindFile( Directory d )
{
FileOrFolders = d.GetFileOrFolders();
foreach( FileOrFolder fof in FileOrFolders )
{
if( fof is File )
You Found a file;
else if ( fof is Directory )
FindFile( fof );
}
}

6.C#代碼實現,確保windows程式只有一個執行個體(instance)
        ///<summary>
        ///應用程式的主進入點。
        ///</summary>
        [STAThread]
        staticvoid Main()
        {
            //防止程式多次運行
            if(!OneInstance.IsFirst("GetPayInfo"))
            {
                MessageBox.Show ("警告:程式正在運行中! 請不要重複開啟程式!可在右下角系統欄找到!","程式錯誤提

示:",MessageBoxButtons.OK,MessageBoxIcon.Stop);
                return;
            }
            Application.Run(new Form1());
        }
        // ******************* 防止程式多次執行 **************************
        publicabstractclass OneInstance
        {
            ///<summary>
            ///判斷程式是否正在運行
            ///</summary>
            ///<param name="appId">程式名稱</param>
            ///<returns>如果程式是第一次運行返回True,否則返回False</returns>
            publicstaticbool IsFirst(string appId)
            {
                bool ret=false;
                if(OpenMutex(0x1F0001,0,appId)==IntPtr.Zero)
                {
                    CreateMutex(IntPtr.Zero,0,appId);
                    ret=true;
                }
                return ret;
            }
            [DllImport("Kernel32.dll",CharSet=CharSet.Auto)]
            privatestaticextern IntPtr OpenMutex(
                uint dwDesiredAccess, // access
                int bInheritHandle,    // inheritance option
                string lpName          // object name
                );
            [DllImport("Kernel32.dll",CharSet=CharSet.Auto)]
            privatestaticextern IntPtr CreateMutex(
                IntPtr lpMutexAttributes, // SD
                int bInitialOwner,                       // initial owner
                string lpName                            // object name
                );
        }

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.