上午去科技園面試.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),幾年沒看線性代數了,這題解錯了。