最近找工做面的面試題目彙總(三)

引言

今天繼續的是去那幾家面試公司的一些面試題目,適合剛出來或者兩三年經驗的,大牛能夠適量吐槽下,找工做的能夠補補基礎。html

這系列文章請查看這裏:web

  1. 最近找工做面的面試題目彙總(一)
  2. 最近找工做面的面試題目彙總(二)

11.interface是否可繼承interface?abstract class 是否可實現interface

回答1:接口能夠繼承接口,並且能夠繼承多個接口,用「,」進行分割,接口不容許直接或間接地從自身繼承。和類的繼承類似,接口的繼承也造成接口之間的層次結構面試

回答2:抽象類是能夠實現接口的,抽象類裏能夠有抽象方法,也能夠有具體的實現方法,也就是說繼承了接口後也是能夠實現接口裏定義的方法
參考文章:sql

  1. C#之接口

12.private、protected、public、internal

修飾訪問符這個算是挺基礎的了,不過也不能忘記哦數據庫

  1. public:同一程序集中的任何其餘代碼或引用該程序集的其餘程序集均可以訪問該類型或成員。
  2. private:只有同一類或結構中的代碼能夠訪問該類型或成員。
  3. protected:只有同一類或結構或者此類的派生類中的代碼才能夠訪問的類型或成員。
  4. internal:同一程序集中的任何代碼均可以訪問該類型或成員,但其餘程序集中的代碼不能夠。
  5. protected internal:由其聲明的程序集或另外一個程序集派生的類中任何代碼均可訪問的類型或成員。 從另外一個程序集進行訪問必須在類聲明中發生,該類聲明派生自其中聲明受保護的內部元素的類,而且必須經過派生的類類型的實例發生。

參考文章:
1.訪問修飾符(C# 編程指南)編程

13.asp.net中 static的存活週期

全局變量和靜態變量的存儲是放在一塊的,初始化的全局變量和靜態變量在一塊區域, 未初始化的全局變量和未初始化的靜態變量在相鄰的另外一塊區域。 當類首次被加載時static定義的變量被分配空間,程序結束後由系統釋放.
若是在一個程序裏過多的使用static定義的成員,確實很佔內存,由於他的生命週期是整個程序,程序運行時沒法被gc所回收,直到程序結束,釋放內存.設計模式

參考文章:api

1.靜態類和靜態類成員(C# 編程指南)緩存

14.try{}裏有一個return語句,那麼緊跟 在這個try後的finally{}裏的代碼會不會被執行,是在return前仍是後

這題我tm面試的幾間都有啊,公司得有多懶架構

答案:會執行,在return後執行

15.new的做用,where的做用

  1. new 運算符:用於建立對象和調用構造函數。
  2. new 修飾符:用於向基類成員隱藏繼承成員。
  3. new 約束:用於在泛型聲明中約束可能用做類型參數的參數的類型。

參考文章:

  1. new(C# 參考)
  2. C# where用法

    16.this的做用

    this 關鍵字引用類的當前實例,還可用做擴展方法的第一個參數的修飾符。

用途:

  1. 限定被類似的名稱隱藏的成員,例如
public Employee(string name, string alias)
            {
                // Use this to qualify the fields, name and alias:
                this.name = name;
                this.alias = alias;
            }
  1. 將對象做爲參數傳遞到其餘方法,例如
CalcTax(this);
  1. 聲明索引器,例如:
public int this[int param]
            {
                get { return array[param]; }
                set { array[param] = value; }
            }

參考文章:
this(C# 參考)

17.MVC的各個部分用什麼技術實現,和三層架構的關係

這個要詳細講的話得要一本書吧,我就說大概。ASP.NET MVC包含了三部分,Model,View和Controller。Controller負責後臺邏輯代碼,View是純淨的HTML頁面,Model是中間數據層。

1.概述

  • 當咱們討論系統時,它通常包含用戶輸入邏輯、業務處理邏輯以及UI顯示邏輯等,MVC是一種架構模式,它可以讓咱們開發出各個模塊之間鬆耦合的應用程序。MVC最主要的目的是「關注點分離」,它可以分離開UI顯示、業務邏輯以及用戶輸入等。根據MVC的規定,一個系統應該被劃分爲Model、View以及Controller三個部分
  1. Model:它被當作一個能夠處理業務規則、邏輯以及數據的智能體,同時它獨立於MVC中其它兩個部分(C和V)(不訪問Controller和View,譯者注)
  2. Controller:它負責接收用戶請求、分配請求給處理者,它能夠訪問Model和View。
  3. View:它被當作一個啞吧,專門呈現最終的數據給用戶。它能夠是一個excel表單,也能夠是一個包含許多記錄的web頁面甚至是一個純文本。它能夠訪問Model。

2.MVC與三層架構的區別

①.各自原理

前提固然是要搞懂這二者的聯繫了

三層架構是最基本的項目分層結果,而MVC則是三層架構的一個變體,MVC是一種好的開發模式。
首先你要明白MVC分別表明的是什麼意思.

  1. M 即Model(模型層),主要負責出來業務邏輯以及數據庫的交互
  2. V 即View(視圖層),主要用於顯示數據和提交數據
  3. C 即Controller(控制器),主要是用做捕獲請求並控制請求轉發

三層:UI 界面層 BLL 業務邏輯層,DAL數據訪問層,Model 實體層
MVC中的的M 不是三層中的Model(實體層),他其實包括三層中的 BLL,DAL,Model,這是很是要注意的,這也是他們之間的區別的關鍵所在

三層是基於業務邏輯來分的,而mvc是基於頁面來分的

MVC是 Model-View-Controller,嚴格說這三個加起來之後纔是三層架構中的WEB層,也就是說,MVC把三層架構中的WEB層再度進行了分化,分紅了控制器、視圖、實體三個部分,控制器完成頁面邏輯,經過實體來與界面層完成通話;而C層直接與三層中的BLL進行對話

②.區別之處

  • 在三層中也提到了Model,可是三層架構中Model的概念與MVC中Model的概念是不同的,「三層」中典型的Model層是已實體類構成的,而MVC裏,則是由業務邏輯與訪問數據組成的。
  • 首先,MVC和三層架構,是不同的。
    三層架構中,DAL(數據訪問層)、BLL(業務邏輯層)、WEB層各司其職,意在職責分離。
      MVC是 Model-View-Controller,嚴格說這三個加起來之後纔是三層架構中的WEB層,也就是說,MVC把三層架構中的WEB層再度進行了分化,分紅了控制器、視圖、實體三個部分,控制器完成頁面邏輯,經過實體來與界面層完成通話;而C層直接與三層中的BLL進行對話。因此, .net的三層結構中,並無action這個概念。
  • MVC模式是一種複合設計模式,一種解決方案;三層是種軟件架構,經過接口實現編程
  • 三層模式是體系結構模式,MVC是設計模式
  • 三層模式又可歸於部署模式,MVC可歸於表示模式

參考文章:

  1. 7 天玩兒 轉 ASP.NET MVC
  2. WebForms VS. MVC(翻譯)
  3. mvc與三層結構終極區別

18.MVC框架中能夠實現AOP效果的接口是?

關於AOP,它面向的是一個切面,可以把公共的功能抽出來,獨立開發,而後將公共部分實現,在開發人員不知情的狀況下,添加進去。而在MVC前臺框架中,MVC中Controller中的Filter能夠將公共的代碼抽離出來。

實現AOP效果的接口(只列舉經常使用)

Asp.Net MVC提供瞭如下幾種默認的Filter:

Filter Type 實現接口 執行時間 Default Implementation
Authorization filter IAuthorizationFilter 在全部Filter和Action執行以前執行 AuthorizeAttribute
Action filter IActionFilter 分別在Action執行以前和以後執行。 ActionFilterAttribute
Result filter IResultFilter 分別在Action Result執行以後和以前 ResultFilterAttribute
Exception filter IExceptionFilter 只有在filter,或者 action method, 或者 action result 拋出一個異常時候執行 HandleErrorAttribute

參考文章:

  1. MVC過濾器 實現AOP(入門)
  2. ASP.NET MVC3 類面向切面AOP 的Filter操做

19.Entity Framework是什麼

1.Entity Framework簡述

微軟官方提供的ORM工具,ORM讓開發人員節省數據庫訪問的代碼時間,將更多的時間放到業務邏輯層代碼上。EF提供變動跟蹤、惟一性約束、惰性加載、查詢事物等。開發人員使用Linq語言,對數據庫操做如同操做Object對象同樣省事。

EF有三種使用場景,

  1. 從數據庫生成Class
  2. 由實體類生成數據庫表結構,
  3. 經過數據庫可視化設計器設計數據庫,同時生成實體類。

ORM 是什麼?

ORM 是將數據存儲從域對象自動映射到關係型數據庫的工具。ORM主要包括3個部分:域對象、關係數據庫對象、映射關係。ORM使類提供自動化CRUD,使開發人員從數據庫API和SQL中解放出來。

EntityFramework 架構

image

  • EDM (實體數據模型):EDM包括三個模型,概念模型、 映射和存儲模型。
  • 概念模型 ︰ 概念模型包含模型類和它們之間的關係。獨立於數據庫表的設計。
  • 存儲模型 ︰ 存儲模型是數據庫設計模型,包括表、 視圖、 存儲的過程和他們的關係和鍵。
  • 映射 ︰ 映射包含有關如何將概念模型映射到存儲模型的信息。
  • LINQ to Entities ︰ LINQ to Entities 是一種用於編寫針對對象模型的查詢的查詢語言。它返回在概念模型中定義的實體。
  • Entity SQL: Entity SQL 是另外一種爐相似於L2E的言語,但相給L2E要複雜的多,因此開發人員不得不單獨學習它。
  • Object Services(對象服務):是數據庫的訪問入口,負責數據具體化,從客戶端實體數據到數據庫記錄以及從數據庫記錄和實體數據的轉換。
  • Entity Client Data Provider:主要職責是將L2E或Entity Sql轉換成數據庫能夠識別的Sql查詢語句,它使用Ado.net通訊向數據庫發送數據可獲取數據。
  • ADO.Net Data Provider:使用標準的Ado.net與數據庫通訊

DBContext

DbContext是EntityFramework很重要的部分,鏈接域模型與數據庫的橋樑,是與數據庫通訊的主要類。
image

DbContext主要負責如下活動:

  • EntitySet::DbContext包含了全部映射到表的entities
  • Querying:將Linq-To-Entities轉譯爲Sql併發送到數據庫
  • Change Tracking:從數據庫獲取entities後保留並跟蹤實體數據變化
  • Persisting Data:根據entity狀態執行Insert、update、delete命令
  • Caching:DbContext的默認第一級緩存,在上下文中的生命週期中存儲entity
  • Manage Relationship:DbContext在DbFirst模式中使用CSDL、MSL、SSDL管理對象關係,Code first中使用fluent api 管理關係
  • Object Materialization:DbContext將物理錶轉成entity實例對象

參考文章:

  1. Entity Framework 基礎

20.entityframework的開發模式

簡述

有三種方式:Code First、DBFirst、Model First

  1. CodeFirst 領域設計時先定義實體類,用實體類生成數據庫
  2. DbFirst 從數據庫生成實體類
  3. Model First 使用Visual Studio實體設計器,設計ER,同時生成Entity類和DB

查詢方式

  1. LINQ to Entities:
//Querying with LINQ to Entities 

using (var context = newSchoolDBEntities())

{

var L2EQuery = context.Students.where(s => s.StudentName == "Bill");

 

var student = L2EQuery.FirstOrDefault<Student>();

 

}

LINQ Query syntax:

using (var context = new SchoolDBEntities())

{

var L2EQuery = from st in context.Students

where st.StudentName == "Bill"select st;

 

var student = L2EQuery.FirstOrDefault<Student>();

}
  1. Entity SQL
//Querying with Object Services and Entity SQL

string sqlString = "SELECT VALUE st FROM SchoolDBEntities.Students " +

"AS st WHERE st.StudentName == 'Bill'";

 

var objctx = (ctx as IObjectContextAdapter).ObjectContext;

 

ObjectQuery<Student> student = objctx.CreateQuery<Student>(sqlString);

Student newStudent = student.First<Student>();

//使用EntityDataReader

using (var con = newEntityConnection("name=SchoolDBEntities"))

{

con.Open();

EntityCommand cmd = con.CreateCommand();

cmd.CommandText = "SELECT VALUE st FROM SchoolDBEntities.Students as st where st.StudentName='Bill'";

Dictionary<int, string> dict = newDictionary<int, string>();

using (EntityDataReader rdr = cmd.ExecuteReader(CommandBehavior.SequentialAccess | CommandBehavior.CloseConnection))

{

while (rdr.Read())

{

int a = rdr.GetInt32(0);

var b = rdr.GetString(1);

dict.Add(a, b);

}

}

}
  1. Native SQL
using (var ctx = newSchoolDBEntities())

{

var studentName = ctx.Students.SqlQuery("Select studentid, studentname, standardId from Student where studentname='Bill'").FirstOrDefault<Student>();

}
相關文章
相關標籤/搜索