.Net面試題一


1、進程和線程的區別是什么?

  答:https://www.cnblogs.com/renzhuang/articles/6733461.html
2、請列舉ASP.Net頁面之間傳遞值的幾種方式?列出3種

  答:https://www.cnblogs.com/jhuang-com/p/5961513.html
3、請解釋ASP.Net MVC開發框架,並說明使用MVC有哪些好處?

  答:總的來說MVC設計模式可以方便開發人員分工協作,提高開發效率,增強程序的可維護性和拓展性而且還利用Controller將Model與View分離,降低它們之間的耦合度。

  更快的服務器端處理和客戶端呈現:MVC只簡單地處理“模板”,而無需構建復雜的控件樹,因此,無論是在服務器處理的時間,和客戶端的呈現速度都會有所提高;MVC優點:1.大型開發的時候容易維護,擴展性很好。2.能夠對HTML有完全的控制權限,對於前端來說很友好。3.能夠進行單元測試,保證功能的實現。缺點:1.沒有那么多的現成控件使用,開發效率相對較低(特別是對於菜鳥來說)2.對於大型數據的處理比較難,還是因為沒有現成girdview控件。這個控件雖然生成的html結構異常復雜,但是對於處理大量而且復雜的數據來說是很不錯的。不過一般網站是很少有這種大量且復雜的數據,很多菜鳥都是用這個大炮來打蚊子,浪費且低效率。對於網站開發來說這個控件應該不推薦使用。

  簡單地講:C# 是語言, asp.net, asp.net mvc,winform,wpf,wcf 都是框架

  既然是框架,則都提供了一些框框(規范,標准,接口)等

  開發時按這些框框走,就實現了我們想要的結果

  但是不同的框架提供的框框是不一樣的,

  是圓的框我們就得把自己削成圓的往里套,

  是方的框我們就得把自己吃成胖子往里套,

  當然,不管是圓框還是方框,都能達到目的

  winform 走的是 win32 gdi 的路子,wpf走的是Directx 的路子,

  但他們都能實現桌面程序的界面效果

  asp.net 走的是頁面周期,服務端控件Render成HTMl的路子,

  asp.net mvc 走的是路由到不同的View的路子,但是他們都能實現Web 站點的功能

4、請寫出一條sql語句,去除表A中的第31到40條記錄(SQLSERVER以自增長ID為逐漸,注意:ID可能不是連續的)

  select * from (select ROW_NUMBER() OVER(ORDER BY ID) as rowid from A)T where T.rowid>30 and rowid<=40 

  select top 10 * from A where ID not in(select top 30 ID from Aorder by ID) order by ID

  select top 40 * from A  except select top 30 * from A

  except 返回兩個結果集的差(即從左查詢中返回右查詢沒有找到的所有非重復值)。

  intersect 返回 兩個結果集的交集(即兩個查詢都返回的所有非重復值)。

5、SQL行變列和列轉行

  答:在做數據統計的時候,行轉列,列轉行是經常碰到的問題。case when方式太麻煩了,而且可擴展性不強,可以使用 PIVOT,UNPIVOT比較快速實現行轉列,列轉行,而且可擴展性強

  行專列測試數據

CREATE  TABLE [StudentScores]
(
   [UserName]         NVARCHAR(20),        --學生姓名
   [Subject]          NVARCHAR(30),        --科目
   [Score]            FLOAT,               --成績
)

INSERT INTO [StudentScores] SELECT '張三', '語文', 80
INSERT INTO [StudentScores] SELECT '張三', '數學', 90
INSERT INTO [StudentScores] SELECT '張三', '英語', 70
INSERT INTO [StudentScores] SELECT '張三', '生物', 85
INSERT INTO [StudentScores] SELECT '李四', '語文', 80
INSERT INTO [StudentScores] SELECT '李四', '數學', 92
INSERT INTO [StudentScores] SELECT '李四', '英語', 76
INSERT INTO [StudentScores] SELECT '李四', '生物', 88
INSERT INTO [StudentScores] SELECT '碼農', '語文', 60
INSERT INTO [StudentScores] SELECT '碼農', '數學', 82
INSERT INTO [StudentScores] SELECT '碼農', '英語', 96
INSERT INTO [StudentScores] SELECT '碼農', '生物', 78

行專列

select * from [StudentScores] /*數據源*/
AS P
pivot 
(
    sum(Score/*行轉列后 列的值*/) FOR 
    p.Subject/*需要行轉列的列*/ IN ([語文],[數學],[英語],[生物]/*列的值*/)
) AS T

效果

 

 列轉行測試數據

CREATE TABLE ProgrectDetail
(
    ProgrectName         NVARCHAR(20), --工程名稱
    OverseaSupply        INT,          --海外供應商供給數量
    NativeSupply         INT,          --國內供應商供給數量
    SouthSupply          INT,          --南方供應商供給數量
    NorthSupply          INT           --北方供應商供給數量
)

INSERT INTO ProgrectDetail
SELECT 'A', 100, 200, 50, 50
UNION ALL
SELECT 'B', 200, 300, 150, 150
UNION ALL
SELECT 'C', 159, 400, 20, 320
UNION ALL

列轉行

select P.ProgrectName,P.Supplier,P.SupplyNum
from 
(
    select ProgrectName, OverseaSupply, NativeSupply,
           SouthSupply, NorthSupply
     from ProgrectDetail
)T
unpivot
(
    SupplyNum FOR Supplier IN
    (OverseaSupply, NativeSupply, SouthSupply, NorthSupply )
) P

行專列case語句實現

select * from [StudentScores]
-- 使用case when (SQL2000以上)
select [UserName],
max(case 課程 when '語文' then 分數 else 0 end)語文,
max(case 課程 when '數學' then 分數 else 0 end)數學,
max(case 課程 when '英語' then 分數 else 0 end)英語,
max(case 課程 when '生物' then 分數 else 0 end)生物
from [StudentScores]
group by [UserName]

 

效果

6、1、1、2、3、5、8、13、21、34,求第30位數是多少,用遞歸算法實現。

  答:斐波納契數列(Fibonacci Sequence),又稱黃金分割數列。在數學上,斐波納契數列以如下被以遞歸的方法定義:F0=0,F1=1,Fn=F(n-1)+F(n-2)(n>=2,n∈N*)在現代物理、准晶體結構、化學等領域,斐波納契數列都有直接的應用,從算法的角度利用遞歸和非遞歸兩種方式實現:

  遞歸

private static  long Fibonacci(int n)
{
  long result = 1;//當n<=2時都返回1
  if(n>2)//當n>2時,進行遞歸計算
  {
    result= Fibonacci(n-1)+Fibonacci(n-2);
  }
  return result;
}

  循環

private static long Fibonacci(int n)
        {
            long result = 1; //當n<=2時都返回1
            if (n > 2)          //當n>2時,利用循環計算
            {
                long first = 1;
                long second = 1;              
                int i = 0;
                n = n - 2;      //每次當然要減少兩次循環
                while (i < n)
                {
                    first = second;
                    second = result;
                    result = first + second;
                    i++;
                }
            }
            return result;
        }


7、什么是匿名方法?請寫一段代碼

  答:匿名方法(Anonymous methods)匿名方法是沒有名稱只有主體的方法。 提供了一種傳遞代碼塊作為委托參數的技術。在匿名方法中您不需要指定返回類型,它是從方法主體內的 return 語句推斷的。

  匿名方法概念實例:

using System;

delegate void NumberChanger(int n);
namespace DelegateAppl
{
    class TestDelegate
    {
        static int num = 10;
        public static void AddNum(int p)
        {
            num += p;
            Console.WriteLine("Named Method: {0}", num);
        }

        public static void MultNum(int q)
        {
            num *= q;
            Console.WriteLine("Named Method: {0}", num);
        }
        public static int getNum()
        {
            return num;
        }

        static void Main(string[] args)
        {
            // 使用匿名方法創建委托實例
            NumberChanger nc = delegate(int x)
            {
               Console.WriteLine("Anonymous Method: {0}", x);
            };
            
            // 使用匿名方法調用委托
            nc(10);

            // 使用命名方法實例化委托
            nc =  new NumberChanger(AddNum);
            
            // 使用命名方法調用委托
            nc(5);

            // 使用另一個命名方法實例化委托
            nc =  new NumberChanger(MultNum);
            
            // 使用命名方法調用委托
            nc(2);
            Console.ReadKey();
        }
    }
}

輸出的結果為:
Anonymous Method: 10
Named Method: 15
Named Method: 30

  上列匿名方法是通過使用delegate關鍵字創建委托實例來聲明的。例如:

delegate void NumberChanger(int n);//聲明一個有參的委托
...
NumberChanger nc = delegate(int x)
{
    Console.WriteLine("Anonymous Method: {0}", x);
};

代碼塊

Console.WriteLine("Anonymous Method: {0}", x);

是匿名方法的主體。

  委托可以通過匿名方法調用,也可以通過命名方法調用,即,通過向委托對象傳遞方法參數。例如:

nc(10);

8、列出幾種使用過的工作流產品和框架, 並簡要對比他們的差異。

  答:java開發語言的jbpm、Apache ODE、Enhydra Shark、Bonita、Open Business Engine、Eclipse JWT

  .Net的Windows Workflow Foundation、NetBPM、CCFlow,參考

  模擬公司的請假流程,

這個典型的流程假設:公司有兩級領導,一級為主管Chief,一級為老板Boss

場景描述:

  在某公司中,部門員工休假需要主管Chief的批准。 
  如果休假天數大於10天,則 在部門主管同意后,還必須老板Boss批准。 
  如果是部門主管請假則直接提交老板批准。 
  在休假被批准之前,申請人可以撤銷休假申請。 
  申請批准后,對休假天數進行修改(也可以是其他業務數據處理)。 每次休假申請結束之 后,不管通過未通過或是否取消,都必須記錄下來。 
  流程結束時,系統要把請假的結果信息Email給申請人。

  對於大於10天的申請,如果部門主管已批准同意而上級主管還未批准,這時申請人撤銷申請后,系統應發Email通知部門主管申請已撤銷。

9、列出你所了解的設計模式,說一說實用設計模式可能帶來的好處,並嘗試用代碼寫一個例子。

   答:是對面向對象設計中反復出現的問題的解決方案。是一套被反復使用、多數人知曉的、經過分類編目的、代碼設計經驗的總結。使用設計模式是為了可重用代碼、讓代碼更容易被他人理解、保證代碼可靠性、程序的重用性。

  https://baike.baidu.com/item/%E8%BD%AF%E4%BB%B6%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM