之前遇到的面試題及答案

之前遇到的面試題及答案css

 

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

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

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

3.  解決的技術難題:程序員

1).微信支付,蘋果和安卓的支付力度不同web

2.)消息推送 signalr(之前是長輪詢)面試

 

2. 在瀏覽器輸入網址,Enter以後發生了什麼?算法

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

        

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.數據庫如何優化

         一、數據庫運維方面的優化:啓用數據庫緩存。對於一些比較經常使用的查詢能夠採用數據庫緩存的機制,部署的時候須要注意設置好緩存依賴項,防止「過時」數據的產生。

         二、數據庫索引方面的優化:好比經常使用的字段建索引,聯合查詢考慮聯合索引。(PS:若是你有基礎,能夠敞開談談彙集索引和非彙集索引的使用場景和區別)

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

         四、數據庫算法方面的優化:儘可能避免大事務操做、減小循環算法,對於大數據量的操做,避免使用遊標的用法等等

        

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是如何結合呈現頁面的;

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

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

         三、而後將請求傳入IIS的應用程序池。

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

         五、這個時候若是是WebForm,開始執行復雜的頁面生命週期(HttpRuntime→ProcessRequest→HttpContext→HttpHandler);

                   若是是MVC,則啓動mvc的路由機制,根據路由規則爲URL來指定HttpHandler

         六、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協議

         一、http協議是瀏覽器和服務器雙方共同遵循的規範,是一種基於TCP/IP應用層協議

         二、http是一種典型的請求/響應協議。客戶端發送請求,請求的內容以及參數存放到請求報文裏面,服務端收到請求後,作出響應,

            返回響應的結果放到響應報文裏面。經過F12能夠查看請求報文和響應報文

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

            在實際開發過程當中,咱們有時須要「保持」這種狀態,因此衍生出了Session/Cookie這些技術。

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

 

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

         一、對於代碼優化,以前的公司每週會作代碼審覈,審覈的主要做用就是保證代碼的正確性和執行效率,

            好比減小代碼的層級結構、避免循環嵌套、避免循環CURD數據庫、儘可能避免一次取出大量數據放在內存中(容易內存溢出)、優化算法等。

         二、對於陳舊代碼,可能不少地方有調用,而且開發和維護人員頗有可能不是同一我的,因此重構時要格外當心,

            若是沒有十足的把握,不要輕易重構。若是必需要重構,必須作好充分的單元測試和全局測試。

 

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. 平時是如何學習的

相關文章
相關標籤/搜索