金山軟件筆試測試題目
金山軟件是許多計算機(jī)專業(yè)學(xué)生向往的企業(yè),那么你知道金山軟件的筆試題是怎樣的嗎?下面由學(xué)習(xí)啦小編為你提供的金山軟件筆試測試題目,希望能幫到你。
金山軟件筆試測試題目(一)
一:分別寫出下面游戲的產(chǎn)商和運(yùn)營商
1:穿越火線 2:魔獸世界 3:天龍八部 4 征途
二:1、 有一起謀殺案,發(fā)生在一個家庭中,父親、母親、兒子、女兒四個成員中,有兇手、目擊者、同謀和被害者。已知條件如下:(1)最年輕者和被害者性別不同
(2)年齡最大的和目擊者性別不同
(3)目擊者和同謀性別不同
(4)兇手不是最年輕的
(5)父親是年齡最長者
(6)被害者比同謀年輕
請問四個成員分別對應(yīng)的身份?
寫出推理過程:
三:寫出4個你玩過的游戲,并寫出特點(diǎn)和吸引你的地方(什么類型都可以)并寫出你的游戲經(jīng)歷,比如玩到什么程度,游戲級別,花費(fèi)時間等等
四:有一張表,里面列出了很多種情況,大致的說法如下:A論壇里有很多玩家說你設(shè)計的某個游戲里面哪個門派不夠強(qiáng),其中一個門派還集體說要提升其門派的實(shí)力,否則就集體退出游戲。
B你的朋友告訴你游戲還是不要改,參考XX世界,不然改了之后罵聲更多。
C 客服人員反映說一個VIP玩家建議說有個門派的實(shí)力太弱了,要提升一下。
D 公司里資深的游戲設(shè)計人員告訴你說某個門派的實(shí)力太弱,需要加強(qiáng),但是論壇里該門派并沒有類似的反應(yīng)。
E 公司總裁也是你的游戲玩家,他玩過之后說有個門派實(shí)力太弱,該提升。
F 很多玩家反映有一個門派的實(shí)力過強(qiáng),而你恰恰是這個門派的長老,玩過很多時間,進(jìn)行了一些改進(jìn),但是你自己卻發(fā)覺甚至比以前打敵人更加吃力了。
G 數(shù)據(jù)顯示一個門派的玩家流失率很大,但是卻沒有相關(guān)評價說該門派的實(shí)力太弱。
H 你提出的策劃案沒有得到大家認(rèn)可,遭到拒絕。
要求對這些重視程度進(jìn)行排序,然后在每一項后面寫出排在該位置的理由,最后再寫出你對待每一項的解決辦法。
五:寫出偷菜游戲火了的原因以及現(xiàn)在玩家流失的原因
六:手機(jī)電池不夠用,開發(fā)新能源成本高,見效慢,提出3個建議解決問題
七:寫出從游戲登陸界面開始到進(jìn)入游戲所有可能發(fā)生的情況,最好畫出流程圖說明
八:如果游戲新推出一個主手法杖,如何設(shè)計可以最大的吸引RMB玩家的消費(fèi)欲望(大概這個意思,也有可能是我理解出現(xiàn)偏差,那就悲劇了……)
九:很多游戲都有怪物類npc,對戰(zhàn)會有音效,畫面特效之類的,讓你設(shè)計如何提高戰(zhàn)斗打擊感和玩家的爽快程度(差不多的意思)
十:專業(yè)詞解釋:附魔,MT,AOE,嘲諷,副本(還有幾個記不清了,選4個即可)
金山軟件筆試測試題目(二)
1、 (1) 寫出C++的四種類型轉(zhuǎn)換。
我的理解:
四種,答題的時候我忘了reinterpret_cast怎么拼寫。要求寫成示例代碼, 不過我沒寫(沒上下文環(huán)境,還得我自個去自定義類型,太費(fèi)事了)。
(2)explicit關(guān)鍵字的作用。
我的理解:
去除隱式轉(zhuǎn)換。
(3)虛析構(gòu)函數(shù)。
我的理解:
在一個繼承體系中,基類的析構(gòu)函數(shù)必須設(shè)置為虛函數(shù),不然可能存在析構(gòu)不完整的危險。
2、 是一個改錯題。大概考察的知識是:vector、多態(tài)、虛函數(shù)表指針。
我的理解:
(1)要實(shí)現(xiàn)多態(tài),vector里邊保存的必須是地址(指針),而不能是基類、引用。
(2)定義vector的const_iterator。
(3)派生類的構(gòu)造函數(shù)是在派生類對象構(gòu)造的最后階段才被調(diào)用的,當(dāng)調(diào)用構(gòu)造函數(shù)的時候,對象的基類子對象、成員變量(對象)已經(jīng)初始化完畢。所以派生類的構(gòu)造函數(shù)不可以亂來。
3、容器的傳參和erase操作
給出的是一個函數(shù),其中關(guān)鍵的部分大概是這樣:
for(vector::iterator iter = ivec.begin(); iter != ivec.end(); ++iter)
{
if (*iter == N)
ivec.erase(iter);
}
我的理解:
(1) 容器類對象傳參的時候最好用引用。
(2) erase操作之后會導(dǎo)致迭代器失效。
(3) 可能會導(dǎo)致刪除不徹底,因為erase之后iter指向了下一個元素,而for循環(huán)中又++iter,這樣會跳過一個元素,而且可能跳到vector對象之外的地方,最后導(dǎo)致出錯。(我只考慮到會跳過一個元素,沒有想到如果最后一個被刪元素剛好是vector對象的最后一個元素,那么會跳出對象之外的地方。其實(shí)這個問題幾個星期前在csdn上回答過,不過我通過上機(jī)得出的答案一下子就被我拋到腦后)
4、 智能指針。
大概意思是:引用計數(shù)型的智能指針存在循環(huán)引用的缺陷,需要一個“弱引用”智能指針。大概是要求實(shí)現(xiàn)這兩個智能指針。
我的理解:
很遺憾。我想題目是想答題者實(shí)現(xiàn)boost庫里的shared_ptr和weak_ptr,我知道這兩個指針的存在,但問題是我沒考慮過它們是怎么實(shí)現(xiàn)的。主要是弱指針不知道該怎么做。引用計數(shù)型的智能指針湊合著寫了出來,不過寫得超亂,而且構(gòu)造函數(shù)有錯誤。
一方面是很少用手寫代碼,一方面是幾乎沒有自己親手寫過智能指針,雖然分析學(xué)習(xí)了不少簡單例子。雖然以前看書的時候看到“循環(huán)引用”這回事,只是當(dāng)時不知道是什么,現(xiàn)在依然不知道,忘了問why。
算法考察的內(nèi)容:
1、 有一個N位二進(jìn)制數(shù),找出其中沒有相鄰11的數(shù)的個數(shù)。例如:N=2時,00,01,10,11,其中沒有相鄰11的數(shù)的個數(shù)有3個。
我的理解:
求相鄰11的數(shù)的個數(shù)。
N位數(shù)跟N-1位數(shù)有關(guān)系。如果一個數(shù)在N-1中是“相鄰11”,那么在這個數(shù)前面添加上0或1它還是一個相鄰11的數(shù)。這里邊就至少有兩倍的關(guān)系了。另外,如果N-1中有數(shù)是這樣的:“10XXX”,那么在N位數(shù)中,在它前面添加上1這個數(shù)就是“相鄰11”了。那么N-1位數(shù)中有多少個“10XXX”這樣的數(shù)字呢?對于N-1位的數(shù)來說, 如果頭一兩位是“10”,后邊就還有N-3位的二進(jìn)制位,所以以“10”開頭的數(shù)有2的(N-3)次方個。
列出如下:N就是在N-1的數(shù)前面加上1、0。
N=2
00 01 10 11
N=3
000 001 010 011
100 101 110 111
N=4
0000 0001 0010 0011
1000 1001 1010 1011
0100 0101 0110 0111
1100 1101 1110 1111
感覺這就是數(shù)字的組合的問題。另外,上邊是我個人的理解,也不一定是對的。
(結(jié)果證明,我真的錯了,唯一一道會寫的算法題,淚奔……)
修正:非相鄰11的數(shù)字的個數(shù)正如樓下所說是斐波那契序列。因為我一開始就沒往“非相鄰11”方向想,而是往“相鄰11”方向考慮,所以沒發(fā)覺另一個方向其實(shí)有捷徑可通…….但我還是想把這條路走完,雖然走了彎路。
我的分析出差錯的原因在這里:“所以以“10”開頭的數(shù)有2的(N-3)次方個”,這句話沒錯,但是沒考慮到這(N-3)個位里也有可能存在“相鄰11”,導(dǎo)致了重復(fù)計算“相鄰11”的數(shù)。必須減去才行。計算“相鄰11”個數(shù)的函數(shù)如下:
int fun(int n)
{
[size=9pt]if (n return 0;
if (n == 2)
return 1;
if (n == 3)
return 3;
[size=9pt]return ((fun(n-1))*2 + (2}
以上方式實(shí)現(xiàn)比較垃圾。比較好的方式有(第二種更好一些,但第一種的思路很值得學(xué)習(xí)):
(1)
//實(shí)現(xiàn):動態(tài)規(guī)劃,遞推算法
/*參考:
用動態(tài)規(guī)劃的東西 "[j]保存i位長的二進(jìn)制位,最后一位是j" 的時候的個數(shù),那么
[0] = [i - 1][1] + [i - 1][0];
[1] = [i - 1][0];
*/
//2010.9.19
#include
using namespace std;
int fun(int N);
int main()
{
int N;
[size=9pt]cout cin >> N;
[size=9pt]cout return 0;
}
/////////////////////////////////////////////////////////////////////
int fun(int N)
{
//申請空間。時間換空間
int **p = new int*[N];
for (int i = 0; i != N; ++i)
{
p = new int[2];
}
//算法核心。遞推。
p[0][0] = 1;
p[0][1] = 1;
[size=9pt]for (int i = 1; i {
//求i個二進(jìn)制位以0結(jié)尾的非11相鄰數(shù):i-1個二進(jìn)制位的非"11相鄰"數(shù),后邊填加上一個0,必定也是非11相鄰數(shù)
p[0] = p[i-1][0] + p[i-1][1];
//求i個二進(jìn)制位以1結(jié)尾的非11相鄰數(shù):i-1個二進(jìn)制位的非"11相鄰"數(shù)必須以0結(jié)尾.
p[1] = p[i-1][0];
}
//保存返回值
int ret = p[N-1][0] + p[N-1][1];
//釋放空間
for (int i = 0; i != N; ++i)
{
[] p;
}
[] p;
return ret;
}
(2)
//實(shí)現(xiàn):斐波那契數(shù)列實(shí)現(xiàn)
/*參考:
通過列出非相鄰11的數(shù)的個數(shù),可以發(fā)現(xiàn)其實(shí)這個就是斐波那契數(shù)列。2,3,5,8,13,……
*/
//2010.9.19
#include
using namespace std;
int fun(int n);
int main()
{
int n;
[size=9pt]cout cin >> n;
[size=9pt]cout return 0;
}
int fun(int n)
{
if (n == 1)
return 2;
if (n == 2)
return 3;
int f1 = 2;
int f2 = 3;
int f3;
[size=9pt]for (int i = 2; i {
f3 = f1 + f2;
f1 = f2;
f2 = f3;
}
return f3;
}
2、 對一個服務(wù)器日志的分析。
日志里邊記錄了IP登錄信息,信息內(nèi)容有時間和IP地址。現(xiàn)在要統(tǒng)計
(1) 每一天登錄次數(shù)最多的1000個IP。以登錄次數(shù)為序,從高到低排序
(2) 每一周登錄次數(shù)最多的1000個IP。以登錄次數(shù)為序,從高到低排序
每一天大概有10億條IP信息記錄