一次失敗的面試


做任何毫不費力的事情,都是在浪費時間,忘記這是哪本書里看到的了,到了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道了

不管怎么說,這次面試鎩羽而歸。只能鞏固現在,期待未來了

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM