作任何絕不費力的事情,都是在浪費時間,忘記這是哪本書裏看到的了,到了30歲的年紀,愈來愈有感觸,記錄失敗的面試,順便祭奠一下被我揮霍掉的這5年。面試
前提:sql
公司從事的行業就不透露了,主要從事一些內部項目,如流程管理,原素材管理等。項目不少,但都不是很大,工做壓力不是很大,只要多瞭解業務,思路清晰,不少工做都是輕輕鬆鬆的完成,即便偷懶,也被認爲是骨幹,並作到了pm的職位,還爲本身能夠號稱全棧而沾沾自喜(確實全棧,甚至包括光纖部署,存儲網絡等都是本身來幹)。而富裕的時間就是給互聯網貢獻流量了。忽然,一覺醒來,發現本身已經三十歲了,有一個須要富養的千金,決定不能這樣在荒廢下去,不能在作這種輕鬆的小項目。因而開始了求職之路。數據庫
求職過程:網絡
到某作在線教育的互聯網公司面試工程師的職位。作了一份筆試題後(不少錯誤),和hr聊了聊,而後,就沒有而後了。併發
面試題內容:ide
既然決定了,就要總結一下,回家後憑藉記憶力把面試題大概的重寫了一下,好多題目可能和原題不一致,畢竟是面試,不是參加最強大腦:函數
1 public,protected,private,internal,protected internal 這些限定符中,哪些能夠被類使用,那些能夠被方法是用優化
說實話,第一題就蒙了。這個還真不是很清楚!直接msdn的答案:ui
訪問修飾符atom |
說明 |
public |
公有訪問。不受任何限制。 |
private |
私有訪問。只限於本類成員訪問,子類,實例都不能訪問。 |
protected |
保護訪問。只限於本類和子類訪問,實例不能訪問。 |
internal |
內部訪問。只限於本項目內訪問,其餘不能訪問。 |
protected internal |
內部保護訪問。只限於本項目或是子類訪問,其餘不能訪問 |
C# 方法默認訪問級別: private
C# 類默認訪問級別: internal
1 派生類的可訪問性不能高於其基類型。換句話說,不能有從內部類A 派生的公共類B。若是容許這種狀況,將會使A 成爲公共類,由於A 的全部受保護的成員或內部成員均可以從派生類訪問。
2 成員的可訪問性決不能高於其包含類型的可訪問性。
3 可使用五種訪問類型中的任何一種來聲明類成員(包括嵌套的類和結構)。
即這些限定符類和方法都可以使用,但方法的可訪問性不能高於其包含類的可訪問性。
2 overload和override的區別
白送分的題:
1 override發生在繼承中,兩個函數的函數特徵相同
2 overload的函數名雖然相同,但函數特徵不一樣。
注:函數特徵包括函數名,參數類型和參數個數。
3 String和StringBuilder 的區別
白送分題
1 string爲System.String類 StringBuilder爲System.Text.StringBuilder類
2 string不可變,修改後會建立一個新的string;StringBuilder 爲可變的,當對變化比較頻繁的時候,StringBuilder效率會高
4 如下程序共發生了幾回裝箱操做,有什麼能夠優化的方式
int v = 2; Console.WriteLine("v={0},v={1},v={2}", v,v,v); Console.ReadKey();
較簡單
三次 優化方式爲
int v = 2; Console.WriteLine("v={0},v={0},v={0}", v); Console.ReadKey();
5 程序閱讀題
寫出下列程序輸出結果:
static void Main(string[] args) { string test = "hello"; test = test.ToUpper(); test = test.Insert(0, " WORLD"); Console.WriteLine(test); Console.ReadKey(); }
較簡單 _WORLDHELLO(_表示空格)
6 程序閱讀題
寫出下列程序輸出結果:
class A { public A() { OutputText(); } public virtual void OutputText() { Console.WriteLine("Hello world"); } } class B:A { int x = 0; int y; public B() { y = 1; } public override void OutputText() { Console.WriteLine("x+y={0}", x + y); } }
當時堅決果斷的就寫了 無輸出!
實際上 子類會默認調用父類的無參數構造函數!!!
7 寫程序題
具體題幹忘記了 意思就是寫出2+3+…55的值
典型的考遞歸的題
private static int MyAdd(int x,int y) { int sum=y; if (x <= 55) { Console.Write("+{0}", x); sum += x; return MyAdd(y, x + y); } else { Console.Write("={0}", sum); return sum; } }
8 寫一個單例模式樣例
這個題寫了一個最簡單的:
public sealed class Single { private static Single _instance = null; private Single () { } public static Single Instance { get { return _instance ?? (_instance = new Singleton()); } } }
9數據庫題 寫出SQL的幾種鏈接方式
較簡單
4種 內鏈接(左右) 外鏈接(左右)
10 數據庫題 寫一條SQL語句,查詢主單表下的name字段是否有重複及重複次數
這個 簡單理解爲 應該是group by?
select count(name),name from 表1 group by name;
11 事物題 什麼是事物的ACID屬性
平時作的項目 確實不多用到事物,因此 事物題全軍覆滅。
1. 原子性(atomic),事務必須是原子工做單元;對於其數據修改,要麼全都執行,要麼全都不執行
2. 一致性(consistent),事務在完成時,必須使全部的數據都保持一致狀態。
3. 隔離性(insulation),由併發事務所做的修改必須與任何其它併發事務所做的修改隔離。
4. 持久性(Duration),事務完成以後,它對於系統的影響是永久性的。
12 由低到高寫出事物的隔離級別
1 讀未提交(Read uncommitted): 能夠讀取其餘事務未提交的數據
2 讀已提交(Read committed):只能讀取其餘事務已經提交的數據(有進行修改的)
3 可重複讀(Repeatable read):保證使用該隔離級別的事務,在讀取數據時的數據保持一致,不會被別的事務修改、刪除數據(由於別的事務若是有修改、刪除操做會被阻塞)
4 可串行化(Serializable):使用該隔離級別的事務用到的表將所有鎖定,其餘事務不能夠進行添加、修改、刪除
13 什麼事幻影數據
幻影數據即不可重複讀數據,指指事務T1讀取數據後,事務T2執行更新操做,使T1沒法再現前一次讀取結果。具體有三種狀況:
1 事務T1讀取某一數據後,事務T2對其作了修改,當事務1再次讀該數據時,獲得與前一次不一樣的值。
2 事務T1按必定條件從數據庫中讀取了某些數據記錄後,事務T2刪除了其中部分記錄,當T1再次按相同條件讀取數據時,發現某些記錄神密地消失了。
3 事務T1按必定條件從數據庫中讀取某些數據記錄後,事務T2插入了一些記錄,當T1再次按相同條件讀取數據時,發現多了一些記錄。
14 js題:
var obj=(function(){ var num=2; var output=function() { var num; alert(num); //1 num=2 alert(num);//2 } return {output:output}; })(); obj.output();
求兩個alert的值
1 undefined
2 2
這道題,不知道爲啥我鬼使神差的1寫了null!
15 js題 setTimeout與setinterval區別
setTimeout() : 用於在指定的毫秒數後調用函數或計算表達式;
setInterval() : 按照指定的週期(以毫秒計)來調用函數或計算表達式. 會不停地調用函數,直到 clearInterval() 被調用或窗口被關閉;
摘自js手冊
簡單說 setTime只執行了一個句柄,而setInterval循環執行。
寫在後邊:
常理來講,應該有16道題吧,但能想到的只有15道了
無論怎麼說,此次面試鎩羽而歸。只能鞏固如今,期待將來了