今天在Q群里看到有人發表面試時候的題目,看了一下,所以順手在這里發表一下看法,包括一些題目;
第一類繼承類,
有以下C#代碼
using System;
class A
{
public A()
{
test();
}
public virtual void test(){}
}
class B:A
{
int x=1;
int y;
public B()
{
y=-1;
}
public override void test()
{
Console.WriteLine("x={0},y={1}",x,y);
}
static void Main(string[] args)
{
B b=new B();
}
} 這類是一些很基礎的題目主要考察的是對面向對象的了解,,
首先我們要了解,繼承的時候,類的聲明,初始化。子類的聲明,內部都會先聲明父類。這里我們可以根據父親才有孩子的思想去記憶,沒有父親,哪里來孩子呢,
上面的程序父類的構造函數是調用子類的TEST()方法,我們看一下TEST方法
Console.WriteLine("x={0},y={1}",x,y);
這里是在控制臺輸出X,Y的值,C#是先初始化A讓后在初始化B,在初始化A的時候調用了子類的TEST方法,子類的TEST方法在B沒有初始化的時候Y是沒有給定值的,在沒有給定值的時候INT類型CLR會自動初始一個0到 Y里面去,所以輸出的結果將會是1,0,
這道題目涉及到了繼承于多態。不過都是很基礎的,但是對于新手,或者不是正規系統地學習過C#的人來說。。就會犯迷糊了。1,0如何出來的。。甚至有人會認為是1,-1,這樣認為的原因是,覺得先初始話B類,在初始化A類。我 不知道那類語言是這樣初始化的,但感覺這樣想法本來就不符合人類的習慣;明顯的:我媽媽生我姐姐的時候,我幫媽媽燒水呢?
Q群的面試第二道邏輯題;
7. 某一密码仅使用K、L、M、N、O共5个字母,密码中的单词从左向右排列,密码单词必须遵循如下规则:
(1) 密码单词的最小长度是两个字母,可以相同,也可以不同
(2) K不可能是单词的第一个字母
(3) 如果L出现,则出现次数不止一次
(4) M不能使最后一个也不能是倒数第二个字母
(5) K出现,则N就一定出现
(6) O如果是最后一个字母,则L一定出现
问题一:下列哪一个字母可以放在LO中的O后面,形成一个3个字母的密码单词?
A) K B)L C) M D) N
问题二:如果能得到的字母是K、L、M,那么能够形成的两个字母长的密码单词的总数是多少?
A)1个 B)3个 C)6个 D)9个
问题三:下列哪一个是单词密码?
A) KLLN B) LOML C) MLLO D)NMKO
這個邏輯題目其實不難的,只要是做程序的,或者可以說是,有過代碼經歷,或者自己設計過算法的人都會做。但是對于剛出校門的學生,這道題目。。。對30%左右的人是有難度的。。。。他們會很執著的想,啥是密碼單詞。
上面的1-6是形成密碼單詞的條件,問題其實就是在這6個條件下得到的結果,
問題一:答案是B,為什么是B?因為條件(3)L不只出現1次,根據題目一個3個字母的密碼單詞,LO占了2個,最后一個字母必定是需要重復出現的L
問題二:答案是A,為什么是1個?第一,根據條件(5),K絕對不會出現,因為問題里沒有N,那么剩下L,M,LM組合的2個字母單詞總個數是4個,分別是LM,LL,ML,MM;根據(3)L不只出現1次,所以排除LM,ML,根據(4)M不能出現在最后一個字母排除MM,最后只剩下一個LL。
問題三:這個問題是考察所有條件的混合應用,K不能開頭,排除A, (4)M不能使最后一个也不能是倒数第二个字母,排除B
(
6) O如果是最后一个字母,则L一定出现,排除D,剩下的只有C了,所以答案是C
雖然我不知道Q群里那個仁兄到底面試啥公司。。。但是發出來的題目。。。沒啥難度啊,只要是有心從事軟件開發的,應該都不難,從公司的角度,面試,筆試,機試,目標都是考察個人能力是否適合這份工作,這2個題目,我覺得靠的應該是。。。應屆生。。
posted on 2009-06-05 12:31
^乔乔^ 阅读(1220)
评论(1) 编辑 收藏 引用 所属分类:
c#