面試問題

一:介紹下設計模式,好比依賴倒置、開閉、迪米特法則等幾大設計原則
《依賴倒置》???原本由我依賴你變成我依賴第三方接口,面向接口編程。這就是依賴倒置了。前端

《開放-封閉原則》函數、某模塊 開放擴展-封閉內部修改。指出代表:應當多用接口抽象類或虛方法,以便於後期擴展子類和複寫虛方法,而不是修改已有代碼,代碼優美,便於維護,也能夠用裝飾者模式實現不修改老代碼而擴展其功能。web

《迪米特法則》也叫最少知道原則。只與最直接的朋友通訊,好比註冊功能我只須要調用你這個類提供的註冊函數而且提供帳號密碼就OK了,至於密碼怎麼處理須要調用什麼類來加密我都不關心,一個類對本身依賴的類知道的越少越好,儘可能下降減小類之間的耦合。ajax

《單一職責原則》一個類或者是模塊歸納的功能,職責應該是單一的。不然就會耦合到一塊兒。不利於維護。sql

《接口隔離原則》上端客戶端不該該依賴它不須要的接口,要用什麼接口,就創建單一的接口,不該創建臃腫龐大的總接口,而應該儘可能細化,方法儘可能少點。數據庫

《裏式替換原則》全部的子類必定可以要替代父類,反過來確定不行,這樣能提升擴展性,提升代碼重用性,缺點:繼承是侵入性的,子類可以擁有父類全部方法屬性,增長耦合,父類的變量方法改了,須要考慮子類的修改。編程

二:Unity是怎麼使用的,流程介紹一下。
《c#代碼的Unity容器提供的RegisterType方法傳入接口與子類註冊》c#

《配置文件配置全部的註冊映射,》
1.經過本身定義的配置文件路徑來打開獲取到Unity配置文件的配置節點,強制轉換類型而後用UnityConfigurationSection類獲取
2.section.Configure(container容器,"配置文件容器名稱") //用Unity提供的這個方法傳入容器對象和配置文件設置對應的容器名稱來註冊接口,具體子類,註冊AOP配置設計模式

《在Global.asax全局初始化Application_Start方法裏一次性循環遍歷註冊業務邏輯層目錄下的全部接口與子類》api

最後Resolve<T>();獲取須要的實現類緩存

《直接在控制器全局聲明接口變量resolve獲取》
《經過控制器的構造函數注入直接獲取到實現類》控制器的Unity構造注入在Global裏重寫控制器工廠,設置指定的我複寫的控制器工廠


三:介紹下多線程是在哪裏使用的。線程之間怎麼通訊。好比信號燈

答:Windows定時服務,或者同時需求量多的地方,接收到的壓縮包,須要壓縮,對視頻進行截圖,壓縮處理。或者是處理隊列任務的地方,
緩存用在什麼地方,設置時間是?能夠用線程一直去查是否有更新,有的話就直接更新緩存數據,若是是服務裏運行的線程那能夠發起通知到ui主程序去更新緩存。還有就是看使用場景設置時間。也能夠在啓動程序的時候開啓一個線程去讀取數據源(好像是硬盤上固化,RadisBase類提供有Save方法能夠保存數據DB文件到硬盤。根本仍是MSSQL,Radis存的結果數據有可能也會存在MSSQL)把數據轉移到Radis裏面去。


四:介紹下反射是怎麼操做的,在哪些地方使用。

答:反射能夠動態反射出實例類、獲取他方法,屬性,進行操做。IoC就是經過反射的原理操做的,我本身也能夠寫,就是經過配置文件配置的命名空間、類去動態的反射出這個類的實例。做用就是解耦,沒有那麼多關聯,更靈活。在查詢的時候也能夠用在動態拼接表名、字段上,利用泛型建立新對象出來並賦值。

動態根據某些特徵建立須要的對象類,能夠提升代碼複用率,簡化代碼結構,利於維護,若是使用次數過多也能夠將其緩存。

五:前端是怎樣操做的,好比數據綁定。或者用的什麼插件
六:zdy count與count()區別是什麼?
七:zdy引用類型與值類型的區別是什麼?

八:zdy網站初始化Global.asax文件的MvcApplication類的Application_Start()初始化方法裏能夠作的擴展設置有哪些?
《繼承HandleErrorAttribute複寫OnException方法》可切入異常處理檢測代碼。
答:1.《繼承AuthorizeAttribute類 複寫OnAuthorization()》第一個執行可切入檢測權限等代碼。
2.《繼承HandleErrorAttribute類 複寫OnException()進行異常攔截和處理》
3.繼承ActionFilterAttribute類
《複寫OnActionExecuting()在執行方法前執行,可計時》
4.《複寫OnActionExecuted()在執行方法後執行,可計時》
5.《複寫OnResultExecuting()在輸出結果前執行,》
6.《複寫OnResultExecuted()在輸出結果視圖後執行,》

九:zdy介紹下Nhibernte。怎麼使用的?流程是?

1.《NhibernateBase類的Get函數根據傳入的conn數據庫暱稱到web.config獲取到相應的數據庫配置文件地址》
2.《而後根據配置文件路徑獲取到Nhibernate提供的Configuration配置實例類》
3.《經過config實例類獲取到ISessionFactory工廠》
4.《經過session工廠類.OpenSession()方法打開獲取Nhibernate的Session》

5.《再判斷獲取到的Session.Connection是SQL仍是Oracle什麼數據庫New/新建相應的數Nhibernate數據庫鏈接倉儲層DAL,裏面封裝有各類定義泛型增刪改查的方法。調用便可》

答:web.config裏配置nhibernate_pool鏈接池,分別以key-value對應相應的名稱、數據庫的xml配置(通常就是sql與orcal或者sql不一樣的數據庫) 控制器經過Unity獲取到業務邏輯層後,在業務邏輯層有定義構造函數以便能區分

十:zdy大家日誌是怎麼記錄的?怎麼檢測程序運行狀況?好比運行時長

答:能夠繼承Unity提供的IInterceptionBehavior接口實現Invoke方法處理方法執行先後操做、異常。或者繼承MVC提供的HandleErrorAttribute類重寫OnException方法

經常使用的《在global.asax全局初始化函數Application_start函數裏註冊Filter過濾器的地方添加自定義的異常Filter擴展重寫OnException方法,能夠獲取異常並處理,也能夠判斷請求頭是否ajax來作JsonResult()或者ViewRsult()返回處理》

《利用UnityAOP切入異常檢測代碼,能夠利用特性filter進行AOP切入檢測代碼,通常在unity配置文件裏配置AOP切入》

十一:zdy介紹下委託?zhi
答:接口定義行爲,只能申明方法體,都是抽象的。繼承了就必需要實現。接口類能夠多個繼承,抽象類的繼承只是惟一的。
抽象類舉例: 定義動物能夠用抽象類,猴子類,貓類,狗類,就能夠繼承動物類。
接口舉例 :定義動物的行爲,好比中間有類似的方法,可是它們自己又不能抽象成一個事物。就定義一個接口來存放共有的方法。

十六:webapi與webservice區別。
答:webapi用的http協議,webservice用的是soap協議,

 

 

依賴:我要調用你這個類裏的方法,因此我依賴你。

依賴倒置:針對接口編程!我如今不依賴你這個具體類了,我依賴抽象、接口。上層和下層都去依賴抽象。這個就是依賴倒置了

控制反轉(IoC):IoC是Inversion of Control的縮寫,是說對象的控制權進行轉移,轉移到第三方,好比交給IoC容器,它就是一個建立工廠,你要什麼對象,它就給你什麼對象,
有了IoC容器,依賴關係就變了,原先的依賴關係就沒有了,他們都依賴IoC,經過IoC容器來創建他們的關係。
依賴倒置減小了具類的依賴,接口是穩定的,若是之後有修改也不影響,只須要修改具體的類或者配置文件對應的接口與具類的映射。這個就是控制反轉,具體對象的控制權交給了配置文件。

依賴注入(DI):DI是Dependency Injection縮寫,它提出了「什麼東西的控制權被反轉了,被轉移了?」它也給出了答案:「依賴對象的建立得到被反轉。」所謂依賴注入,就是由IoC容器在運行期間,動態的將某種依賴關係注入到對象中。能夠是屬性、方法、構造函數注入

相關文章
相關標籤/搜索