網(wǎng)易研發(fā)類筆試題
第一部分(必做): 計(jì)算機(jī)科學(xué)基礎(chǔ)
1. (單選)軟件設(shè)計(jì)中模塊劃分應(yīng)該遵循的準(zhǔn)則是:
A.低內(nèi)聚低耦合 B.高內(nèi)聚低耦合 C.低內(nèi)聚高耦合 D.高內(nèi)聚高耦合
2. (單選)最壞情況下時(shí)間復(fù)雜度不是n(n-1)/2的排序算法是:
A.快速排序 B.冒泡排序 C.直接插入排序 D.堆排序
3. 哈希表中解決沖突的方法通常可以分為open addressing和chaining兩類, 請(qǐng)分別解釋這兩類沖突解決方法的大致實(shí)現(xiàn)原理
4. 簡(jiǎn)單的鏈表結(jié)構(gòu)擁有很好的插入 刪除節(jié)點(diǎn)性能, 但隨機(jī)定位(獲取鏈表第n個(gè)節(jié)點(diǎn))操作性能不佳, 請(qǐng)你設(shè)計(jì)一種改進(jìn)型的鏈表結(jié)構(gòu)優(yōu)化隨機(jī)定位操作的性能, 給出設(shè)計(jì)思路及其改進(jìn)后隨機(jī)定位操作的時(shí)間復(fù)雜度
5. 什么是NP問(wèn)題?列舉典型的NP問(wèn)題(至少兩個(gè))?對(duì)于一個(gè)給定的問(wèn)題你通常如何判斷它是否為NP問(wèn)題?
6. 以下是一個(gè)tree的遍歷算法, queue是FIFO隊(duì)列, 請(qǐng)參考下面的tree, 選擇正確的輸出. 1
/ \
2?? 3
/ \ / \
4 5 6 7 queue.push(tree.root)
while(true){
node=queue.pop();
output(node.value);//輸出節(jié)點(diǎn)對(duì)應(yīng)數(shù)字
if(null==node)
break;
for(child_node in node.children){
queue.push(child_node);
}
}
A. 1234567
B. 1245367
C. 1376254
D. 1327654 第二部分(選作): C/C 程序設(shè)計(jì)
1. 有三個(gè)類A B C定義如下, 請(qǐng)確定sizeof(A) sizeof(B) sizeof(C)的大小順序, 并給出理由
struct A{
A() {}
~A() {}
int m1;
int m2;
}; struct B{
B() {}
~B() {}
int m1;
char m2;
static char m3;
}; struct C{
C() {}
virtual~C() {}
int m1;
short m2;
};
2. 請(qǐng)用C 實(shí)現(xiàn)以下print函數(shù),打印鏈表I中的所有元素, 每個(gè)元素單獨(dú)成一行
void print(const std::listint ;I){
}
3. 假設(shè)某C工程包含a.c和b.c兩個(gè)文件,在a.c中定義了一個(gè)全局變量foo, 在b.c中想訪問(wèn)這一變量時(shí)該怎么做?
4. C 中的new操作符通常完成兩個(gè)工作, 分配內(nèi)存及其調(diào)用相應(yīng)的構(gòu)造函數(shù)初始化
請(qǐng)問(wèn):
1) 如何讓new操作符不分配內(nèi)存, 只調(diào)用構(gòu)造函數(shù)?
2) 這樣的用法有什么用?
5. 下面這段程序的輸出是什么?為什么?
class A{
public:
A(){p();}
virtual void p(){print(A)}
virtual ~A(){p();}
}; class B{
public:
B(){p();}
void p(){print(B)}
~B(){p();}
}; int main(int, char**){
A* a=new B();
delete a;
}
6. 什么是C Traits? 并舉例說(shuō)明 第三部分(選作): JAVA程序設(shè)計(jì)
1. (單選)以下Java程序運(yùn)行的結(jié)構(gòu)是:
public class Tester{
public static void main(String[] args){
Integer var1=new Integer(1);
Integer var2=var1;
doSomething(var2);
System.out.print(var1.intValue());
System.out.print(var1==var2);
} public static void doSomething(Integer integer){
integer=new Integer(2);
}
}
A. 1true
B. 2true
C. 1false
D. 2false
2. (單選)往OuterClass類的代碼段中插入內(nèi)部類聲明, 哪一個(gè)是正確的:
public class OuterClass{
private float f=1.0f;
//插入代碼到這里
}
A.
class InnerClass{
public static float func(){return f;}
}
B.
abstract class InnerClass{
public abstract float func(){}
}
C.
static class InnerClass{
protected static float func(){return f;}
}
D.
public class InnerClass{
static static float func(){return f;}
}
3. Java中的interface有什么作用? 舉例說(shuō)明哪些情況適合用interface, 哪些情況下適合用抽象類.
4. Java多線程有哪幾種實(shí)現(xiàn)方式? Java中的類如何保證線程安全? 請(qǐng)說(shuō)明ThreadLocal的用法和適用場(chǎng)景
5. 線程安全的Map在JDK 1.5及其更高版本環(huán)境 有哪幾種方法可以實(shí)現(xiàn)?
6.
1) 簡(jiǎn)述Java ClassLoader的模型, 說(shuō)明其層次關(guān)系及其類加載的主要流程即可.
2) TypeA.class位于classpath下, /absolute_path/TypeA.class為其在文件系統(tǒng)中的絕對(duì)路徑, 且類文件小于1k, MyClassLoader為一個(gè)自定義的類加載器, 下面的這段類加載程序是否正確, 如果有錯(cuò)請(qǐng)指出哪一行有錯(cuò), 簡(jiǎn)述理由 import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream; public class Tester{
public static void main(String[] args){
MyClassLoader cl1=new MyClassLoader();
try{
File f=new File(/absolute_path/TypeA.class);
byte[] b=new byte[1024];
InputStream is=new FileInputStream(f);
int I=is.read(b);
Class c=cl1.defineMyClass(null,b,0,1);
TypeA a=(TypeA)c.newInstance();
}catch(Exception e){
e.printStacktrace();
}
}
} 第四部分(選作): Linux應(yīng)用與開(kāi)發(fā)
1. 寫(xiě)出完成以下功能的Linux命令:
1) 在當(dāng)前目錄及其子目錄所有的.cpp文件中查找字符串example, 不區(qū)分大小寫(xiě);
2) 使用sed命令, 將文件xyz中的單詞AAA全部替換為BBB;
3) 用一條命令創(chuàng)建aa bb cc三個(gè)子目錄
4) mount cdrom.iso至/dev/cdrom目錄
5) 設(shè)置ulimit使得程序在Segment fault等嚴(yán)重錯(cuò)誤時(shí)可以產(chǎn)生coredump;
2. 設(shè)umask為002, 則新建立的文件的權(quán)限是什么?
A. -rw-rwr;
B. rwxrwx-w-
C. -w-
D. rwxrwxr-x
3. 用戶HOME目錄下的.bashrc和.bash_profile文件的功能有什么區(qū)別?
4. 寫(xiě)出完成以下功能的gdb命令(可以使用命令簡(jiǎn)寫(xiě)形式):
1) 使用gdb調(diào)試程序foo, 使用coredump文件core.12023;
2) 查看線程信息
3) 查看調(diào)用堆棧
4) 在類ClassFoo的函數(shù)foo上設(shè)置一個(gè)斷點(diǎn)
5) 設(shè)置一個(gè)斷點(diǎn), 當(dāng)表達(dá)式expr的值被改變時(shí)觸發(fā)
5.
1) 例舉Linux下多線程編程常用的pthread庫(kù)提供的函數(shù)名并給出簡(jiǎn)要說(shuō)明(至少給出5個(gè))
2) pthread庫(kù)提供哪兩種線程同步機(jī)制, 列出主要API
3) 使用pthread庫(kù)的多線程程序編譯時(shí)需要加什么連接參數(shù)? 第五部分(選作): Windows開(kāi)發(fā)
1. DC(設(shè)備上下文)有哪幾類? 區(qū)別在哪里?
2. 碰撞檢測(cè)是游戲中經(jīng)常要用到的基本技術(shù) 對(duì)于二維情況, 請(qǐng)回答以下問(wèn)題:
1). 如何判斷一個(gè)點(diǎn)在一個(gè)多邊形內(nèi)
2). 如何判斷兩個(gè)多邊形相交
3). 如何判斷兩個(gè)點(diǎn)集所形成的完全圖所圍的區(qū)域是否相交
3. PostMessage SendMessage和PostThreadMessage的區(qū)別是什么
4. 什么叫Alpha混合? 當(dāng)前流行的圖片格式中哪些支持alpha通道? Layered Window和普通Window有什么區(qū)別?
5. 如果要實(shí)現(xiàn)一個(gè)多線程(非MFC)程序, 選擇多線程CRT, 創(chuàng)建線程的時(shí)候應(yīng)該用CreateThread還是_beginthreadex(), 為什么? 第六部分(選作): 數(shù)據(jù)庫(kù)開(kāi)發(fā)
1. 基于哈希的索引和基于樹(shù)的索引有什么區(qū)別?
2. User表用于記錄用戶相關(guān)信息, Photo表用于記錄用戶的照片信息, 兩個(gè)表的定義如下:
CREATE TABLE User( ;用戶信息表
UserId bigint,?? ;用戶唯一id
Account varchar(30)?? ;用戶唯一帳號(hào)
);
CREATE TABLE Photo(?? ;照片信息表
PhotoId bigint, ;照片唯一id
UserId bigint,?? ;照片所屬用戶id
AccessCount int,?? ;訪問(wèn)次數(shù)
Size bigint?? ;照片文件實(shí)際大小
)
1) 請(qǐng)給出SQL打印帳號(hào)為dragon的用戶訪問(wèn)次數(shù)最多的5張照片的id;
2) 給出SQL打印擁有總的照片文件大小(total_size)最多的前10名用戶的id, 并根據(jù)total_size降序排列
3) 為優(yōu)化上面兩個(gè)查詢, 需要在User和Photo表上建立什么樣的索引?
4) 簡(jiǎn)述索引對(duì)數(shù)據(jù)庫(kù)性能的影響?
3. 什么是兩階段提交協(xié)議?
4. 數(shù)據(jù)庫(kù)事務(wù)基本概念:
1) 什么是事務(wù)的ACID性質(zhì)?
2) SQL標(biāo)準(zhǔn)中定義的事務(wù)隔離級(jí)別有哪四個(gè)?
3) 數(shù)據(jù)庫(kù)中最常用的是哪兩種并發(fā)控制協(xié)議?
4) 列舉你所知的數(shù)據(jù)庫(kù)管理系統(tǒng)中采用的并發(fā)控制協(xié)議 5. 數(shù)據(jù)庫(kù)中有表User(id, name, age):
表中數(shù)據(jù)可能會(huì)是以下形式:
id?? name?? age
001 張三?? 56
002 李四?? 25
003 王五?? 56
004 趙六?? 21
005 錢(qián)七?? 39
006 孫八?? 56
..
由于人員年齡有可能相等, 請(qǐng)寫(xiě)出SQL語(yǔ)句, 用于查詢age最大的人員中, id最小的一個(gè)記錄
6. 并發(fā)訪問(wèn)數(shù)據(jù)庫(kù)時(shí)常使用連接池, 請(qǐng)問(wèn)使用連接池的好處是什么? 對(duì)于有多臺(tái)應(yīng)用服務(wù)器并發(fā)訪問(wèn)一臺(tái)中心數(shù)據(jù)庫(kù)的情況, 數(shù)據(jù)庫(kù)訪問(wèn)往往成為系統(tǒng)瓶頸, 請(qǐng)問(wèn)在應(yīng)用服務(wù)器上設(shè)計(jì)和使用連接池時(shí)該注意哪些問(wèn)題, 以保證系統(tǒng)的可靠性 正確性和整體性能. 假設(shè)每臺(tái)應(yīng)用服務(wù)器都執(zhí)行相同的任務(wù)并且負(fù)載均衡. 第七部分(選作): Web開(kāi)發(fā)
1. 以下哪一條Javascript語(yǔ)句會(huì)產(chǎn)生運(yùn)行錯(cuò)誤:
A. var obj=( );
B. var obj=[ ];
C. var obj={ };
D. var obj=/ /;
2. 如下頁(yè)面代碼(示例代碼DOCTYPE為Strict)
!DOCTYPE html PUBLIC -//W3C//DTD XHTML 1.0 Transitional//EN http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd
html xmlns=http://www.w3.org/1999/xhtml xml:lang=zh lang=zh
head
title測(cè)試/title
meta http-equiv=content-type content=text/html; charset=gbk /
meta http-equiv=content-style-type content=text/cee /
meta http-equiv=content-script-type content=text/javascript /
script
*{margin:0; padding:0}
html{width:100%; height:100%;
overflow:scroll; overflow-x:auto;
text-align:center; border:0}
.test{height:200px}
/script
/head body
div;nbsp;/div
/body
/html
假設(shè)a.jpg圖片的規(guī)格是200pxX100px, 請(qǐng)給出當(dāng)前背景圖片距div.a頂部距離的計(jì)算方式和結(jié)果(css)
3. HTTP協(xié)議相關(guān)知識(shí)
A) 常見(jiàn)的HTTP Request頭字段有哪些?
B) web服務(wù)器如何區(qū)分訪問(wèn)者是普通瀏覽用戶還是搜索引擎的Spider?
C) cookie按生命周期分類分為哪兩類? 其生命周期分別是多長(zhǎng)? 向?yàn)g覽器設(shè)置cookie時(shí)cookie有哪些屬性可以設(shè)置, 分別起到什么作用?
D) HTTP協(xié)議中Keep-Alive是什么意思? 使用Keep-Alive有何好處, 對(duì)服務(wù)器會(huì)有什么不利的影響? 對(duì)于不利的影響有什么解決方案
4. 簡(jiǎn)述你最常用的Web服務(wù)器的一種或者幾種, 并說(shuō)明如何在Web服務(wù)器和應(yīng)用服務(wù)器之間建立反向代理
5. 簡(jiǎn)述你所了解的MVC各層次的常用開(kāi)發(fā)框架, 說(shuō)明其特點(diǎn)
6. 簡(jiǎn)述Web應(yīng)用環(huán)境下遠(yuǎn)程調(diào)用的幾種方式, 并且從性能 異構(gòu)性等方面比較其優(yōu)劣 第八部分(選作): Flash開(kāi)發(fā)
7. flash和js如何交互?
8. flash中的事件處理分哪幾個(gè)過(guò)程 Event對(duì)象的target和currentTarget有什么區(qū)別? 第九部分(選作): 軟件測(cè)試
1. 請(qǐng)描述你對(duì)測(cè)試的了解, 內(nèi)容可以涉及測(cè)試流程, 測(cè)試類型, 測(cè)試方法, 測(cè)試工具等
2. 如果有一天你早上上班, 發(fā)現(xiàn)不能上網(wǎng)了, 你會(huì)用什么步驟找出問(wèn)題所在?
3. Web應(yīng)用中實(shí)現(xiàn)了好友功能, 用戶可以給別人發(fā)加為好友的'請(qǐng)求, 發(fā)了請(qǐng)求后可以取消請(qǐng)求, 對(duì)方收到請(qǐng)求后, 可以選擇接受或者拒絕. 互為好友的兩個(gè)人, 每個(gè)人都可以單方面刪除對(duì)方, 請(qǐng)?jiān)O(shè)想盡可能多的路徑對(duì)此功能設(shè)計(jì)測(cè)試用例, 每個(gè)用例包括測(cè)試步驟和預(yù)期結(jié)果
4. 公司開(kāi)發(fā)了一個(gè)web聊天工具, 用于網(wǎng)絡(luò)用戶之間的聊天, 一個(gè)人同時(shí)可以和多個(gè)人聊天, 功能類似于MSN等等IM工具
要求該系統(tǒng)能承受1萬(wàn)個(gè)在線用戶, 平均每個(gè)用戶會(huì)和3個(gè)人同時(shí)聊天, 在網(wǎng)絡(luò)條件正常的情況下, 要求用戶收到消息的延遲時(shí)間不超過(guò)1分鐘. 現(xiàn)在需要對(duì)系統(tǒng)進(jìn)行性能測(cè)試, 驗(yàn)證系統(tǒng)是否達(dá)到預(yù)定要求, 請(qǐng)你寫(xiě)一個(gè)性能測(cè)試方案. 提示如下:
1) 性能測(cè)試的過(guò)程一般都是模擬大量客戶端操作, 同時(shí)監(jiān)控服務(wù)器的性能和客戶端相應(yīng), 根據(jù)服務(wù)器的性能指標(biāo)和客戶端響應(yīng)狀況進(jìn)行分析和判斷
2) 系統(tǒng)的性能問(wèn)題可以從兩個(gè)角度考慮, 一個(gè)是服務(wù)器問(wèn)題, 設(shè)計(jì)得不好的程序, 在大負(fù)載或者長(zhǎng)時(shí)間運(yùn)行情況下, 服務(wù)器會(huì)down機(jī); 另一個(gè)是客戶端問(wèn)題, 在負(fù)載大的時(shí)候, 客戶端響應(yīng)會(huì)變慢 3) 在答題中, 可以不涉及性能測(cè)試工具, 監(jiān)控工具等細(xì)節(jié), 把你的測(cè)試思路說(shuō)清楚就可以
5. 自動(dòng)功能測(cè)試中會(huì)將測(cè)試用例組織成測(cè)試集合來(lái)統(tǒng)一運(yùn)行, 測(cè)試集合suite按功能分類可以有若干個(gè)模塊module, 每個(gè)模塊module下包含若干個(gè)測(cè)試用例test. 現(xiàn)測(cè)試集合已經(jīng)運(yùn)行完畢, 但是需要在測(cè)試報(bào)告中統(tǒng)計(jì)各個(gè)模塊的用例失敗率, 將失敗率超過(guò)20%的模塊名與其失敗率記錄下來(lái)報(bào)警, 請(qǐng)編寫(xiě)實(shí)現(xiàn)上述功能的getTestReport函數(shù). 可使用Java或C 等您熟悉的編程語(yǔ)言, 提供的接口及方法如下:
測(cè)試集合接口Isuite:
CollectionITestgetTests()?? //得到測(cè)試集合下的所有測(cè)試用例test
測(cè)試用例接口Itest:
String getModule()?? //得到該用例對(duì)應(yīng)的模塊名稱module
int getResult()?? //得到該用例的執(zhí)行結(jié)果:0失敗 1成功
報(bào)警函數(shù):
void alertMessage(String message)
public static void getTestReport(ISuite suite){
//你的實(shí)現(xiàn)寫(xiě)在這里
2. 如果有一天你早上上班, 發(fā)現(xiàn)不能上網(wǎng)了, 你會(huì)用什么步驟找出問(wèn)題所在?
3. Web應(yīng)用中實(shí)現(xiàn)了好友功能, 用戶可以給別人發(fā)加為好友的請(qǐng)求, 發(fā)了請(qǐng)求后可以取消請(qǐng)求, 對(duì)方收到請(qǐng)求后, 可以選擇接受或者拒絕. 互為好友的兩個(gè)人, 每個(gè)人都可以單方面刪除對(duì)方, 請(qǐng)?jiān)O(shè)想盡可能多的路徑對(duì)此功能設(shè)計(jì)測(cè)試用例, 每個(gè)用例包括測(cè)試步驟和預(yù)期結(jié)果
4. 公司開(kāi)發(fā)了一個(gè)web聊天工具, 用于網(wǎng)絡(luò)用戶之間的聊天, 一個(gè)人同時(shí)可以和多個(gè)人聊天, 功能類似于MSN等等IM工具
要求該系統(tǒng)能承受1萬(wàn)個(gè)在線用戶, 平均每個(gè)用戶會(huì)和3個(gè)人同時(shí)聊天, 在網(wǎng)絡(luò)條件正常的情況下, 要求用戶收到消息的延遲時(shí)間不超過(guò)1分鐘. 現(xiàn)在需要對(duì)系統(tǒng)進(jìn)行性能測(cè)試, 驗(yàn)證系統(tǒng)是否達(dá)到預(yù)定要求, 請(qǐng)你寫(xiě)一個(gè)性能測(cè)試方案. 提示如下:
1) 性能測(cè)試的過(guò)程一般都是模擬大量客戶端操作, 同時(shí)監(jiān)控服務(wù)器的性能和客戶端相應(yīng), 根據(jù)服務(wù)器的性能指標(biāo)和客戶端響應(yīng)狀況進(jìn)行分析和判斷
2) 系統(tǒng)的性能問(wèn)題可以從兩個(gè)角度考慮, 一個(gè)是服務(wù)器問(wèn)題, 設(shè)計(jì)得不好的程序, 在大負(fù)載或者長(zhǎng)時(shí)間運(yùn)行情況下, 服務(wù)器會(huì)down機(jī); 另一個(gè)是客戶端問(wèn)題, 在負(fù)載大的時(shí)候, 客戶端響應(yīng)會(huì)變慢 3) 在答題中, 可以不涉及性能測(cè)試工具, 監(jiān)控工具等細(xì)節(jié), 把你的測(cè)試思路說(shuō)清楚就可以
5. 自動(dòng)功能測(cè)試中會(huì)將測(cè)試用例組織成測(cè)試集合來(lái)統(tǒng)一運(yùn)行, 測(cè)試集合suite按功能分類可以有若干個(gè)模塊module, 每個(gè)模塊module下包含若干個(gè)測(cè)試用例test. 現(xiàn)測(cè)試集合已經(jīng)運(yùn)行完畢, 但是需要在測(cè)試報(bào)告中統(tǒng)計(jì)各個(gè)模塊的用例失敗率, 將失敗率超過(guò)20%的模塊名與其失敗率記錄下來(lái)報(bào)警, 請(qǐng)編寫(xiě)實(shí)現(xiàn)上述功能的getTestReport函數(shù). 可使用Java或C 等您熟悉的編程語(yǔ)言, 提供的接口及方法如下:
測(cè)試集合接口Isuite:
CollectionITestgetTests()?? //得到測(cè)試集合下的所有測(cè)試用例test
測(cè)試用例接口Itest:
String getModule()?? //得到該用例對(duì)應(yīng)的模塊名稱module
int getResult()?? //得到該用例的執(zhí)行結(jié)果:0失敗 1成功
報(bào)警函數(shù):
void alertMessage(String message)
public static void getTestReport(ISuite suite){
//你的實(shí)現(xiàn)寫(xiě)在這里
【網(wǎng)易研發(fā)類筆試題】相關(guān)文章: