面試經歷(一)

上午去科技園面試.Net程序員,趁如今尚未忘記和你們分享面試的經歷。到公司後前臺MM給了一份面試題,我可以記住的題目大體是這樣:html

一、用C# StringBuild 類實現1到10000的整數拼接,數與數之間用逗號分隔,例如1,2,3,...。java

二、用Java 構造一個int類型的隊列,生成10000個1(含)到100(含)之間的整數,而後插入到隊列中。程序員

三、用C/C++實現N(N是常數)個int類型的內存空間,而後釋放它,這塊內存空間是連續的嗎?面試

四、用C++/C#/Java(選一種)代碼實現OOP(Oriented-Object Programming)中的多態。算法

五、用T-SQL建立一張只包含一個int類型字段的表,將1到10000插入到表中,而後對這個字段的全部行求和。數據庫

六、寫出C#代碼的輸出:dom

  Console.WriteLine(32.ToString("F01"));
  Console.WriteLine(32.ToString("X"));ide

七、寫出Java代碼的輸出:函數

  System.out.println(Math.round(10.5));
  System.out.println(Math.round(-10.5));
  System.out.println(Math.round(5 & 10));工具

八、以下C代碼中foo函數有什麼做用?這段代碼有什麼缺陷?

int foo(const char* p)

{

   const char* q = p;

   while (*p != '\0' && *p != '0')

          p++;

   return  (*p != '\0') ? -1 : (p -q);

}

九、用你熟悉的語言實現字符串反轉,不能使用語言自身提供的工具函數。

十、遞歸實現費波拉契數列的第N項。

 

作題大概用了一個小時左右吧,這裏有一個細節須要注意的是進入公司後要把手機靜音或者關機。面試官看了個人答題說作的不錯,而後開始問其餘問題,我按照時間前後來講。

一、簡單介紹下本身。

我主要是從項目經從來回答的,具體是這三個方面:

a)  項目的業務流程。

b)  項目使用的基本技術、工具。

c)  開發項目的團隊規模和本身在項目中的職責。

 

我簡歷上寫的是有兩年工做經驗,分別在兩個公司待過,每一個公司工做的時間都是整整一年。

2 問我爲何要離開第一個公司?

    第一個公司是用VB作開發,我不喜歡因此就直說了。   

3 問我爲何要離開第二個公司?   

    兩份工做都是C/S結構開發的,如今想作B/S結構開發。

這裏須要注意的是無論什麼緣由離職,最好很差說一些敏感的緣由。另外,頻繁跳槽會讓面試官以爲求職者不踏實,面試官看到我兩年跳槽兩次,擔憂我在公司待上一年會離開,因此在簡歷上幾年以內出現不少份工做是不可取的,能夠靈活處理下。

 

聊了一會聊處處理大數據和數據庫優化上,因爲我在處理大數據上沒有什麼經驗能夠提供,我只回答了優化數據庫的通常思路,這裏須要說明的是若是本身沒有某方面(如處理大數據)的經驗就如實謙虛的回答,若是你感興趣能夠問下面試官。

4 數據庫優化的通常思路,(若有不對的地方勞煩你們指出)

   a) 物理I/O

   b) 編譯時間

   c)  執行計劃

   b)  表設計

   d)  語句級別

 目前我對數據庫的優化認識很膚淺,只能從我所知道的方面來回答了,若是你們有興趣能夠看徐海蔚寫的書。

 

和麪試官大概聊了一個小時,問我期待的薪水,能夠從本身目前的薪水和行業的薪水標準給出一個大概的範圍。這裏提醒你們的是在談薪水的時候最好是給一個範圍。

5 期待的薪水是多少?

   根據本身目前的薪水和深圳軟件行業兩年工做經驗的薪酬平均水平,我期待的月薪是XXXX到YYYY。最後面試官問我有沒什麼要問的,我問的是本身會負責哪方面的工做。

 

下午回來收到面試經過的郵件了,靠譜的公司會把薪資和各項福利待遇以郵件的方式來通知面試者。

 

下面是題目的答案思路,僅供參考。

一、用C# StringBuild 類實現1到10000的整數拼接,數與數之間用逗號分隔,例如1,2,3,...。

using System.IO;
using System;
using System.Text;

class Program
{
    static void Main()
    {
       StringBuilder sb = new StringBuilder();
       
       int i = 1;
       for (i = 1; i < 10000; i++)
       {
           sb.Append(i.ToString() + ",");
       }
       sb.AppendLine(i.ToString());
      
      Console.WriteLine(sb.ToString());
    }
}

 

2  用Java 構造一個int類型的隊列,生成10000個1(含)到100(含)之間的整數,而後插入到隊列中。

import java.util.Queue;
import java.util.concurrent.LinkedBlockingQueue; 

public class HelloWorld{

     public static void main(String []args){
        
        Queue<Integer> q = new LinkedBlockingQueue<Integer>();
        
        for (Integer i = 1; i <= 10000; i++)
        {
            q.offer((int)(Math.random() * 100 + 1));
        }
        
        for(Integer x : q)
        {
            System.out.println(x);
        }
     }
}

三、用C/C++實現N(N是常數)個int類型的內存空間,而後釋放它,這塊內存空間是連續的嗎?

#include <stdio.h>
#include <stdlib.h>

#define N 10

int main()
{
    int* p = malloc(sizeof(int) * N);
   
    printf("use the memory ...\n");

    free(p);
    return 0;
}

通常是連續的,可是編譯器不能保證向操做系統申請的空間必定是連續的。 

 

四、用C++/C#/Java(選一種)代碼實現OOP(Oriented-Object Programming)中的多態。

多態能夠從覆蓋和重載兩個方面來考慮,我是從覆蓋的角度實現的。

using System.IO;
using System;

namespace myNameSpace
{
    public class Animal
    {
        public virtual void Jiao()
        {
            
        }
    }
    
    public class Dog : Animal
    {
        public override void Jiao()
        {
            Console.WriteLine("bark...");
        }
    }
    
    public class Cat : Animal
    {
        public override void Jiao()
        {
             Console.WriteLine("meow...");
        }
    }

    class Program
    {
        static void Main()
        {
            Dog g = new Dog();
            g.Jiao();
            Cat c = new Cat();
            c.Jiao();
        }
    }
}

 

五、用T-SQL建立一張只包含一個int類型字段的表,將1到10000插入到表中,而後對這個字段的全部行求和。

CREATE TABLE t1
(
  i INT PRIMARY KEY NOT NULL
 )

DECLARE @i int 
SET @i = 1
WHILE(@i <= 10000)
BEGIN
   INSERT INTO t1(i) VALUES(@i)
   SET  @i = @i + 1
END

;WITH cte AS
(
SELECT i,'1' 'GroupingCondition' FROM t1
)
SELECT SUM(i) 'sum' FROM cte GROUP BY GroupingCondition

 

六、寫出C#代碼的輸出:

  Console.WriteLine(32.ToString("F01"));
  Console.WriteLine(32.ToString("X"));

     關於C#中ToString()方法能夠參考這篇博客:http://www.cnblogs.com/jacktu/archive/2007/11/30/978293.html

 

七、寫出Java代碼的輸出:

  System.out.println(Math.round(10.5));
  System.out.println(Math.round(-10.5));
  System.out.println(Math.round(5 & 10));

       round(n):對n進行四捨五入,其算法等價於 n+0.5後向下取整。

 

八、以下C代碼中foo函數有什麼做用?這段代碼有什麼缺陷?

int foo(const char* p)

{

   const char* q = p;

   while (*p != '\0' && *p != '0')

          p++;

   return  (*p != '\0') ? -1 : (p -q);

}

做用: 當p指向的字符串包含字符'0'時,返回-1,不然返回p指向字符串的字節數(長度)。

缺陷:  指向常量的指針p的地址被改變了,若是須要使用p指向的內容,那麼p指向的內容是NULL。(這裏有幾個概念須要區分:指向常量的指針,常指針,指向常量的常指針)

 

九、用你熟悉的語言實現字符串反轉,不能使用語言自身提供的工具函數。

    我處理的思路是:使用頭尾指針交換,T(N) = O(N)

 

十、遞歸實現費波拉契數列的第N項。

       經過解齊次方程求遞歸的時間複雜度,T(N)=O(((1+√5)/2 )^N),幾年沒看線性代數了,這題解錯了。

相關文章
相關標籤/搜索