做任何毫不費力的事情,都是在浪費時間,忘記這是哪本書裡看到的了,到了30歲的年紀,越來越有感觸,記錄失敗的面試,順便祭奠一下被我揮霍掉的這5年。
前提:
公司從事的行業就不透露了,主要從事一些内部項目,如流程管理,原素材管理等。項目很多,但都不是很大,工作壓力不是很大,隻要多了解業務,思路清晰,很多工作都是輕輕松松的完成,即使偷懶,也被認為是骨幹,并做到了pm的職位,還為自己可以号稱全棧而沾沾自喜(确實全棧,甚至包括光纖部署,存儲網絡等都是自己來幹)。而富裕的時間就是給網際網路貢獻流量了。突然,一覺醒來,發現自己已經三十歲了,有一個需要富養的千金,決定不能這樣在荒廢下去,不能在做這種輕松的小項目。于是開始了求職之路。
求職過程:
到某做線上教育的網際網路公司面試工程師的職位。做了一份筆試題後(很多錯誤),和hr聊了聊,然後,就沒有然後了。
面試題内容:
既然決定了,就要總結一下,回家後憑借記憶力把面試題大概的重寫了一下,好多題目可能和原題不一緻,畢竟是面試,不是參加最強大腦:
1 public,protected,private,internal,protected internal 這些限定符中,哪些可以被類使用,那些可以被方法是用
說實話,第一題就蒙了。這個還真不是很清楚!直接msdn的答案:
通路修飾符 | 說明 |
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道了
不管怎麼說,這次面試铩羽而歸。隻能鞏固現在,期待未來了