1. 程式人生 > >NET面試題高級篇

NET面試題高級篇

重建 面向 oneapm iis7 nfs共享 比較 work flash 狀況

以前遇到的面試題及答案

1.你在你以前的項目中,主要解決了什麽技術性難題,如果出現問題,你如何迅速找到問題,你遇到問題都是怎麽解決的

1.  先根據出現的問題,大概排查出問出問題的幾個點,逐個排查, 錯誤日誌- sql查詢計劃-定位程序錯誤,

2.  技術性難題: 自己解決---csdn(博客園)---谷歌---請教技術大牛

3.  解決的技術難題:

    1).微信支付,蘋果和安卓的支付力度不一樣
    
    2.)消息推送 signalr(以前是長輪詢)

2.在瀏覽器輸入網址,Enter之後發生了什麽?

輸入網址後DNS(域名解析協議)將網址轉換成對應的IP,然後網絡在路由表中查找最適合一條路由連接到對應的服務器ip,也就是剛剛轉換的ip.此時,傳輸層tcp經過三次握手後簡歷連接,服務器收到http請求(get/post)等後,進行相應的處理並把結果數據返回到瀏覽器上,此時輸入網址後對應的信息就會顯示出來.

3.sql語句慢,你怎麽調試出來?怎麽解決?

1.Sql執行計劃

2.統一SQL語句的寫法,包括大小寫,空格都要一致

3.不要把SQL語句寫得太復雜,一般,將一個Select語句的結果作為子集,然後從該子集中再進行查詢,這種一層嵌套語句還是比較常見的,但是根據經驗,超過3層嵌套,查詢優化器就很容易給出錯誤的執行計劃

4.使用“臨時表”暫存中間結果,將臨時結果暫存在臨時表,這可以避免程序中多次掃描主表,也大大減少了程序執行中“共享鎖”阻塞“更新鎖”,減少了阻塞,提高了並發性能

5.OLTP()系統SQL語句必須采用綁定變量 ,select * from orderheader where changetime >@chgtime,這樣大量的類似查詢可以重用該執行計劃,一次解析,多次重用.

6.綁定變量窺測也有不適用的時候, 比如在where條件中的字段是“傾斜字段”的時候,“傾斜字段”指該列中的絕大多數的值都是相同的,比如一張人口調查表,其中“民族”這列,90%以上都是漢族

7.只在必要的情況下才使用begin tran:Begin tran付出的代價是在提交之前,所有SQL語句鎖住的資源都不能釋放,直到commit掉。有些情況下可以采用觸發器同步數據。

8.一些SQL查詢語句應加上nolock,這樣讀的時候可以允許寫,但缺點是可能讀到未提交的臟數據(能采用臨時表提高並發性能的,不要用nolock )。使用 nolock有3條原則。

   1.查詢的結果用於“插、刪、改”的不能加nolock !

   2.查詢的表屬於頻繁發生頁分裂的,慎用nolock !
    
   3.使用臨時表一樣可以保存“數據前影”,起到類似oracle的undo表空間的功能,
    
9.使用like進行模糊查詢時,除非必要,否則不要在關鍵詞前加%
    
10.首先考慮在 where及order by涉及的列上建索引

11.盡量避免在where中對null判斷、!=或<>、or 
來連接條件(適用union all)、in (exists 代替 in)和 not in 也要慎用(使用between)、避免在 where 子句中對字段進行表達式操作,函數操作,否則就是全表掃描

4.數據庫移植,就是sql,換成mysql,底層怎麽做

5.ORM 有哪些框架? 框架原理?

 1.SqlSugar 2.IBatis.net  3.NFramework   4.EF 

 對象關系映射。它的實質就是將關系數據(庫)中的業務數據用對象的形式表示出來,並通過面向對象(Object-Oriented)的方式將這些對象組織起來,實現系統業務邏輯的過程.在ORM過程中最重要的概念是映射(Mapping),通過這種映射可以使業務對象與數據庫分離。從面向對象來說,數據庫不應該和業務邏輯綁定到一起,ORM則起到這樣的分離作用,使數據庫層透明,開發人員真正的面向對象. ORM是通過使用描述語言來描述數據庫與對象之間的映射關系,並將程序中的對象自動持久化到關系數據庫中

6.寫一個上傳多張圖上控件

7.性能監控 優化系統性能 都會從哪方面操作,用到哪些工具,怎麽操作

OneAPM 通過自動探知 Web 端用戶、關鍵應用、數據庫請求、外部調用等各層級應用組件,繪制全局拓撲,直觀展示組件性能及相互調用時間,其中包括網絡耗時。可以實時了解哪些環節成為了系統的性能瓶頸,做出有針對性的優化

 
百度應用性能監測中心(http://developer.baidu.com/apm/)

齊雲測(http://ce.cloud.360.cn/)

8.數據庫如何優化

         1、數據庫運維方面的優化:啟用數據庫緩存。對於一些比較常用的查詢可以采用數據庫緩存的機制,部署的時候需要註意設置好緩存依賴項,防止“過期”數據的產生。

         2、數據庫索引方面的優化:比如常用的字段建索引,聯合查詢考慮聯合索引。(PS:如果你有基礎,可以敞開談談聚集索引和非聚集索引的使用場景和區別)

         3、數據庫查詢方面的優化:避免select * 的寫法、盡量不用in和not in 這種耗性能的用法等等

         4、數據庫算法方面的優化:盡量避免大事務操作、減少循環算法,對於大數據量的操作,避免使用遊標的用法等等

9.項目中你用到的設計模式有哪些,舉例說明

單例:可以保證系統中一個類只有一個實例,並且自行實例化向整個系統提供(例如一個系統中可以存在多個打印任務,但是只能有一個正在工作的任務)

 

         最簡單的就是寫考慮線程安全的單例模式,

         public class Singleton

         {

                   // 定義一個靜態變量來保存類的實例

                   private static Singleton uniqueInstance;

                   // 定義一個標識確保線程同步

                   private static readonly object locker = new object();

                   // 定義私有構造函數,使外界不能創建該類實例

                   private Singleton() {}

                   // 定義公有方法提供一個全局訪問點,同時你也可以定義公有屬性來提供全局訪問點

                   public static Singleton GetInstance()

                   {

                            // 雙重鎖定只需要一句判斷就可以了

                            if (uniqueInstance == null)

                            {

                                     lock (locker)

                                     {

                                                // 如果類的實例不存在則創建,否則直接返回

                                                if (uniqueInstance == null)

                                                {

                                                        uniqueInstance = new Singleton();

                                                }

                                     }

                            }

                             return uniqueInstance;

                   }

         }

抽象工廠:

10.你認為最大的優點是什麽或者說你的技術優勢

喜歡鉆研,具有良好的學習歸納能力,有良好的溝通、團隊合作能力。技術上目標是項目經理、系統架構師、系統分析師等。

11.堆棧的數據結構內存是如何分配的

棧:所分配的內存是在一塊連續的內存區域內.當我們聲明變量時,那麽編譯器會自動接著當前棧區的結尾來分配內存

堆:一般由程序員分配釋放(new), 若程序員不釋放,程序結束時可能由操作系統回收

12.前端優化:

         減少 HTTP 請求的次數,啟用瀏覽器緩存,css文件放 在<head>裏面,js文件盡量放在頁面的底部,使用壓縮的css和js文件,如果條件允許,盡量使用CDN的方式引用文件

         盡量避免重復的css,盡量減少js裏面循環的次數

13.後端優化:

         程序的優化:減少代碼的層級結構、避免循環嵌套、避免循環CURD數據庫、優化算法等等

         數據庫的優化:啟用數據庫緩存、常用的字段建索引、盡量避免大事務操作、避免select * 的寫法、盡量不用in和not in 這種耗性能的用法

         服務器優化:負載均衡、Web服務器和數據庫分離、UI和Service分離

14.是否做過負載均衡?怎麽理解負載均衡?

         負載均衡是由多臺服務器以對稱的方式組成一個服務器集合,每臺服務器都具有等價的地位,都可以單獨對外提供服務而無須其他服務器的輔助。能夠平均分配客戶請求到服務器列陣,籍此提供快速獲取重要數據,解決大量並發訪問服務問題

         一種是通過硬件來進行,需要額外的增加負載均衡器,成本比較高,所以適用於流量高的大型網站系統,在多臺服務器間安裝相應的負載均衡設備,也就是負載均衡器來完成均衡負載技術,與軟件負載均衡技術相比,能達到更好的負載均衡效果

         一種是通過軟件來進行: 軟件負載均衡技術是在一個或多個交互的網絡系統中的多臺服務器上安裝一個或多個相應的負載均衡軟件來實現的一種均衡負載技術。軟件負載均衡技術配置簡單、操作也方便,最重要的是成本很低。

15.Js繼承實現

         function Person(name,age){this.name=name;this.age=age}

         //通過原型鏈給Person添加一個方法

         Person.prototype.getInfo=function(){console.log(this.name+‘-‘+this.age)}

          function Teacher(staffId){ this.staffId = staffId; }

         //通過prototype聲明Teacher繼承Person

         Teacher.prototype = new Person();

         var will = new Teacher(1000);

         will.name = "Will";

         will.age = 28;

         will.getInfo();

16.數據庫的索引失效?

         刪掉索引,然後再重建索引

17.這個表正在用 索引不能刪除 要怎麽處理

18.IIS的工作原理?

         此題主要考的是.net framework和IIS是如何結合呈現頁面的;

         1、當客戶端發送HTTP Request時,服務端的HTTP.sys(可以理解為IIS的一個監聽組件) 攔截到這個請求;

         2、HTTP.sys 聯系 WAS 向配置存儲中心請求配置信息。

         3、然後將請求傳入IIS的應用程序池。

         4、檢查請求的後綴,啟動aspnet_isapi.dll這個dll,這個dll是.net framework裏面的,也就是說到這一步,請求進入了.net framework的管轄範圍。

         5、這個時候如果是WebForm,開始執行復雜的頁面生命周期(HttpRuntime→ProcessRequest→HttpContext→HttpHandler);
           如果是MVC,則啟動mvc的路由機制,根據路由規則為URL來指定HttpHandler

         6、httpHandler處理請求後,請求結束,給出Response,客戶端處理響應,整個過程結束

19.IIS 經典模式和集成模式的區別

         經典形式是為了與之前的版本兼容,運用ISAPI擴展來調用ASP.NET運轉庫

         集成形式是一種統一的乞求處置管道,它將ASP.NET懇求管道與IIS中心管道組合在一同,這種形式可以提供更好的性能,可以完成配置和管理的模塊化,

         而且增加了運用托管代碼模塊擴展IIS時的靈敏性。假設老的Web應用程序運轉於IIS7.0的集成形式下,

         可能需求對應用程序的web.config文件停止修正,特別是運用了完成IHttpHandler接口的自定義模塊的狀況。IIS7.0在同一個效勞器上可以同時支持兩種形式的應用程序。
    
         web.config文件的變化:system.webServer節指定了應用於web應用程序的IIS7.0設置,其父節點是configuration,

       該節點中能夠設置的內容包括:當懇求未包含指定資源時,Web效勞器返回給客戶端的默許文檔(defaultDocument);

         響應的緊縮設置(httpCompression) 自定義頭部(httpProtocol節的customHeaders) 模塊(modules) 處置程序(handlers)

         其中的一些設置僅適用於集成形式,而不適用於經典形式,如經典形式下運轉的應用程序則疏忽web.config的system.WebServer節中指定的一切托管代碼模塊和處置程序,

         這種形式下web應用程序應該在syste.web節的httpModules和httpHandlers中定義模塊和處置程序。

20.Http協議

         1、http協議是瀏覽器和服務器雙方共同遵循的規範,是一種基於TCP/IP應用層協議
         2、http是一種典型的請求/響應協議。客戶端發送請求,請求的內容以及參數存放到請求報文裏面,服務端收到請求後,做出響應,

            返回響應的結果放到響應報文裏面。通過F12可以查看請求報文和響應報文

         3、http協議是”無狀態”的,當客戶端向服務端發送一次http請求後,服務端收到請求然後返回給客戶端相應的結果,服務器會立即斷開連接並釋放資源。

            在實際開發過程中,我們有時需要“保持”這種狀態,所以衍生出了Session/Cookie這些技術。

         4、http請求的方式主要有get/post。http狀態碼:200(請求成功)、404(請求的資源不存在)、403(禁止訪問)、5xx(服務端錯誤)

21.關於代碼優化你怎麽理解?你會考慮去代碼重構嗎?

         1、對於代碼優化,之前的公司每周會做代碼審核,審核的主要作用就是保證代碼的正確性和執行效率,比如減少代碼的層級結構、避免循環嵌套、避免循環CURD數據庫、盡量避免一次取出大量數據放在內存中(容易內存溢出)、優化算法等。

         2、對於陳舊代碼,可能很多地方有調用,並且開發和維護人員很有可能不是同一個人,所以重構時要格外小心,如果沒有十足的把握,不要輕易重構。如果必須要重構,必須做好充分的單元測試和全局測試。

23.MVC 架構的技術實現,怎樣理解的

 MVC的架構方式會讓系 統的可維護性更高,使得每一部分更加專註自己的職責,並且MVC提供了強大的路由機制,方便了頁面切換和界面交互

24.Session 的幾種存儲方式及優缺點

         1.基於數據庫的Session共享

         2.基於NFS共享文件系統

         3.基於memcached 的session,如何保證 memcached 本身的高可用性?

         4. 基於resin/tomcat web容器本身的session復制機制

         5. 基於TT/Redis 或 jbosscache 進行 session 共享。

         6. 基於cookie 進行session共享

25.多線程 有幾種啟動方式

         使用new Thread()和new Thread(Runnable)形式

         第一種直接調用thread的run方法,所以,往往使用Thread子類,new Thread(){}.start();這表示調用Thread子類對象的run方法,

         new Thread(){}表示一個Thread的匿名子類的實例對象。

         第二種調用Runnable的run方法。

         new Thread(new Runnable(){}).start();這表示調用Thread對象接受的Runnable對象的run方法,new Runnable(){}表示一個Runnable的匿名子類的實例對象,

26.數據庫鎖有幾種

         共享(S)鎖:多個事務可封鎖一個共享頁;任何事務都不能修改該頁; 通常是該頁被讀取完畢,S鎖立即被釋放。

         排它(X)鎖:僅允許一個事務封鎖此頁;其他任何事務必須等到X鎖被釋放才能對該頁進行訪問;X鎖一直到事務結束才能被釋放。

         更新(U)鎖:用來預定要對此頁施加X鎖,它允許其他事務讀,但不允許再施加U鎖或X鎖;當被讀取的頁將要被更新時,則升級為X鎖;U鎖一直到事務結束時才能被釋放。

27.兩個html頁面之間怎麽傳遞參數值

         1 如果頁面A和頁面B是同域的情況,使用Cookie傳遞參數 ,a頁面保存Cookie,b頁面讀取

         2.如果頁面A和頁面B不同域的情況,頁面A通過點擊鏈接跳轉到頁面B的話,那麽數據可以通過search和hash附加在B頁面的URL上,傳遞給頁面B,window對象它們是共享的,因此我們可以通過window.xx來傳遞數據,比如window.name=123;

         3.如果頁面A和B,不同域,也沒有跳轉關系,如果瀏覽器支持HTML5的話,我們可以使用window.postMessage來跨域發送數據。

         4.剩下的,除非使用第三方的插件,比如flash,activex或者通過借助中轉服務器,那麽兩者之間的數據是無法正常交互的。

28.用到了那些分布式\集群

         簡單說,分布式是以縮短單個任務的執行時間來提升效率的(WCF),而集群則是通過提高單位時間內執行的任務數來提升效率(圖片上傳另一臺服務器)。

         例如:如果一個任務由10個子任務組成,每個子任務單獨執行需1小時,則在一臺服務器上執行該任務需10小時。

         采用分布式方案,提供10臺服務器,每臺服務器只負責處理一個子任務,不考慮子任務間的依賴關系,執行完這個任務只需一個小時。

         (這種工作模式的一個典型代表就是Hadoop的Map/Reduce分布式計算模型)

         而采用集群方案,同樣提供10臺服務器,每臺服務器都能獨立處理這個任務。假設有10個任務同時到達,10個服務器將同時工作,1小時後,10個任務同時完成,這樣,整身來看,還是1小時內完成一個任務!

         集群一般被分為三種類型,高可用集群如RHCS、LifeKeeper等,負載均衡集群如LVS等、高性能運算集群;分布式應該是高性能運算集群範疇內。

         分布式:不同的業務模塊部署在不同的服務器上或者同一個業務模塊分拆多個子業務,部署在不同的服務器上,解決高並發的問題

         集群:同一個業務部署在多臺機器上,提高系統可用性

29.viewstate內部結構?是如何加密的?

ViewState並不神秘,就是一個Hidden字段,實際上它的內部也就是個Hash表,通過Key值來保存和檢索數據,ViewState中產生一個標記(唯一的Hash值),使這個ViewState只適用與對應的頁面

====================汽車之家筆試題=========================

32.最進學習的比較深刻的知識點

Angular.js: AngularJS 是一個 JavaScript 框架, 最為核心的特性是 MVVM、模塊化、自動化雙向數據綁定、語義化標簽、依賴註入等等

33.平時是如何學習的

NET面試題高級篇