freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

java工程師求職筆試題及答案(編輯修改稿)

2024-12-02 01:29 本頁面
 

【文章內(nèi)容簡介】 ull 為佳。 java 類是否可以多繼承,怎么實現(xiàn)多繼承? 答: java 沒有多繼承,但可以通過接口的形式來達(dá)到多繼承的目地。 面向?qū)ο蟮奶攸c(diǎn)答:面向?qū)ο笥腥筇攸c(diǎn):封裝、繼承、多態(tài)。 (如果要回答四個,可加上 抽象性 這一特點(diǎn) ) 接口有什么優(yōu)點(diǎn) 答:接口有以下優(yōu)點(diǎn): l 接口只是一個框架而沒有實現(xiàn),因此在接口定義時不需要考慮接口中的方法如何實現(xiàn)。 l 利用接口可達(dá)到實現(xiàn)多繼承的目地。 l 可以在不暴露對象的類的前提下,暴露對象的編程接口。 l 不用強(qiáng)迫類關(guān)系在無關(guān) 類中截獲相似處 (采用適配器就可以了 )。 l 聲明想執(zhí)行的一個或多個方法。 ArrayList 與 Vector 的區(qū)別 答:主要從兩個方面來說明: l 安全、效率方面 如果要實現(xiàn)同步安全,則要用 Vector,否則則用 ArrayList,因為 ArrayList 不考慮同步安全的問題,所以效率要高些。 l 資源方面 當(dāng)兩者的容量已滿時,它們都會自動增長其容量,但 Vector 是按其容量的一倍增長,而 ArrayList 則按其容量的 50%增加,所以Vector 更能節(jié)省資源。 筆試題 騰訊數(shù)據(jù)庫筆試題: 在一個文 件中有 10G 個整數(shù),亂序排列,要求找出中位數(shù)。內(nèi)存限制為 2G。只寫出思路即可。 騰訊筆試題解答 (Peak Wong): 2828 8 1,把整數(shù)分成 256M 段,每段可以用 64 位整數(shù)保存該段數(shù)據(jù)個數(shù), 256M*8 = 2G 內(nèi)存,先清 0 2,讀 10G 整數(shù),把整數(shù)映射到 256M 段中,增加相應(yīng)段的記數(shù) 3,掃描 256M 段的記數(shù),找到中位數(shù)的段和中位數(shù)的段前面所有段的記數(shù),可以把其他段的內(nèi)存釋放 4,因中位數(shù)段的可能整數(shù)取值已經(jīng)比較小 (如果是 32bit 整數(shù),當(dāng)然如果是 64bit 整數(shù)的話,可以再次分段 ),對每個整數(shù) 做一個記數(shù),再讀一次 10G 整數(shù),只讀取中位數(shù)段對應(yīng)的整數(shù),并設(shè)置記數(shù)。 5,對新的記數(shù)掃描一次,即可找到中位數(shù)。 如果是 32bit 整數(shù),讀 10G 整數(shù) 2 次,掃描 256M 記數(shù)一次,后一次記數(shù)因數(shù)量很小,可以忽略不記。 解釋一下:假設(shè)是 32bit 整數(shù),按無符號整數(shù)處理 整數(shù)分成 256M 段 ? 整數(shù)范圍是 0 2^32 1 一共有 4G 種取值, 4G/256M = 16,每 16 個數(shù)算一段 015 是 1 段, 1631 是一段, ... 整數(shù)映射到 256M 段中 ? 如果整數(shù)是 015,則增加第一段記數(shù),如果整 數(shù)是 1631,則增加第二段記數(shù), ... 其實可以不用分 256M 段,可以分的段數(shù)少一些,這樣在掃描記數(shù)段時會快一些,還能節(jié)省一些內(nèi)存。 C++筆試題匯總 20200125 16:07① 鏈表反轉(zhuǎn) 單向鏈表的反轉(zhuǎn)是一個經(jīng)常被問到的一個面試題,也是一個非常基礎(chǔ)的問題。比如一個鏈表是這樣的: 12345 通過反轉(zhuǎn)后成為 54321。 最容易想到的方法遍歷一遍鏈表,利用一個輔助指針,存儲遍歷過程中當(dāng)前指針指向的下一個元素,然后將當(dāng)前節(jié)點(diǎn)元素的指針反轉(zhuǎn)后,利用已經(jīng)存儲的指針往后面繼續(xù) 遍歷。源代碼如下: struct linka { int data。 linka* next。 }。 void reverse(linka*amp。 head) { if(head ==NULL) return。 linka *pre, *cur, *ne。 pre=head。 cur=headnext。 while(cur) { ne = curnext。 curnext = pre。 pre = cur。 cur = ne。 } headnext = NULL。 head = pre。 } 還有一種利用遞歸的方法。這種方法的基本思想是在反轉(zhuǎn)當(dāng)前節(jié)點(diǎn)之前先調(diào)用遞歸函數(shù)反轉(zhuǎn)后續(xù)節(jié)點(diǎn)。源代碼如下。不過這個方法有一個缺點(diǎn),就是在反轉(zhuǎn)后的最后一個結(jié)點(diǎn)會形成一個環(huán),所以必須將函數(shù)的返回的節(jié)點(diǎn)的 next 域置為 NULL。因為要改變 head指針,所以我用了引用。算法的源代碼如下: linka* reverse(linka* p,linka*amp。 head) { if(p == NULL || pnext == NULL) { head=p。 return p。 } else { linka* tmp = reverse(pnext,head)。 2829 9 tmpnext = p。 return p。 } } ② 已知 String類定義如下: class String { public: String(const char *str = NULL)。 // 通用構(gòu)造函數(shù) String(const String amp。another)。 // 拷貝構(gòu)造函數(shù) ~ String()。 // 析構(gòu)函數(shù) String amp。 operater =(const String amp。rhs)。 // 賦值函數(shù) private: char *m_data。 // 用于保存字符串 }。 嘗試寫出類的成員函數(shù)實現(xiàn)。 答案: String::String(const char *str) { if ( str == NULL ) //strlen 在參數(shù)為 NULL 時會拋異常才會有這步判斷 { m_data = new char[1] 。 m_data[0] = 39。\039。 。 } else { m_data = new char[strlen(str) + 1]。 strcpy(m_data,str)。 } } String::String(const String amp。another) { m_data = new char[strlen() + 1]。 strcpy(m_data,)。 } Stringamp。 String::operator =(const String amp。rhs) { if ( this == amp。rhs) return *this 。 delete []m_data。 //刪除原來的數(shù)據(jù),新開一塊內(nèi)存 m_data = new char[strlen() + 1]。 strcpy(m_data,)。 return *this 。 } String::~String() { delete []m_data 。 } ③ 網(wǎng)上流傳的 c++筆試題匯總 28210 10 (微軟) int func(x) { int countx = 0。 while(x) { countx ++。 x = xamp。(x1)。 } return countx。 } 假定 x = 9999。 答案: 8 思路:將 x轉(zhuǎn)化為 2 進(jìn)制,看含有的 1 的個數(shù)。 2. 什么是 ―引用 ‖?申明和使用 ―引用 ‖要注意哪些問題? 答:引用就是某個目標(biāo)變量的 ―別名 ‖(alias),對應(yīng)用的操作與對變量直接操作效果完全相同。申明一個引用的時候,切記要對其進(jìn)行初始化。引用聲明完畢后,相當(dāng)于目標(biāo)變量名有兩個名稱,即該目標(biāo)原名稱和引用名,不能再把該引用名作為其他變量名的別名。聲明一個引用,不是新定義了一個變量,它只表示該引用名是目標(biāo)變量名的一個別名,它本身不是一種 數(shù)據(jù)類型,因此引用本身不占存儲單元,系統(tǒng)也不給引用分配存儲單元。不能建立數(shù)組的引用。 3. 將 ―引用 ‖作為函數(shù)參數(shù)有哪些特點(diǎn)? ( 1)傳遞引用給函數(shù)與傳遞指針的效果是一樣的。這時,被調(diào)函數(shù)的形參就成為原來主調(diào)函數(shù)中的實參變量或?qū)ο蟮囊粋€別名來使用,所以在被調(diào)函數(shù)中對形參變量的操作就是對其相應(yīng)的目標(biāo)對象(在主調(diào)函數(shù)中)的操作。 ( 2)使用引用傳遞函數(shù)的參數(shù),在內(nèi)存中并沒有產(chǎn)生實參的副本,它是直接對實參操作;而使用一般變量傳遞函數(shù)的參數(shù),當(dāng)發(fā)生函數(shù)調(diào)用時,需要給形參分配存儲單元,形參變量是實參變量的副本;如果傳 遞的是對象,還將調(diào)用拷貝構(gòu)造函數(shù)。因此,當(dāng)參數(shù)傳遞的數(shù)據(jù)較大時,用引用比用一般變量傳遞參數(shù)的效率和所占空間都好。 ( 3)使用指針作為函數(shù)的參數(shù)雖然也能達(dá)到與使用引用的效果,但是,在被調(diào)函數(shù)中同樣要給形參分配存儲單元,且需要重復(fù)使用 *指針變量名 的形式進(jìn)行運(yùn)算,這很容易產(chǎn)生錯誤且程序的閱讀性較差;另一方面,在主調(diào)函數(shù)的調(diào)用點(diǎn)處,必須用變量的地址作為實參。而引用更容易使用,更清晰。 4. 在什么時候需要使用 ―常引用 ‖? 如果既要利用引用提高程序的效率,又要保護(hù)傳遞給函數(shù)的數(shù)據(jù)不在函數(shù)中被改變,就應(yīng)使用常引用 。常引用聲明方式: const 類型標(biāo)識符 amp。引用名 =目標(biāo)變量名; 例 1 int a 。 const int amp。ra=a。 ra=1。 //錯誤 a=1。 //正確 例 2 string foo( )。 void bar(string amp。 s)。 那么下面的表達(dá)式將是非法的: bar(foo( ))。 bar(hello world)。 原因在于 foo( )和 hello world串都會產(chǎn)生一個臨時對象,而在 C++中,這些臨時對象都是 const 類型的。因此上面的表達(dá)式就是試圖將一個 const 類型的對象轉(zhuǎn) 換為非 const 類型,這是非法的。 引用型參數(shù)應(yīng)該在能被定義為 const 的情況下,盡量定義為 const 。 5. 將 ―引用 ‖作為函數(shù)返回值類型的格式、好處和需要遵守的規(guī)則 ? 格式:類型標(biāo)識符 amp。函數(shù)名(形參列表及類型說明) { //函數(shù)體 } 好處:在內(nèi)存中不產(chǎn)生被返回值的副本;(注意:正是因為這點(diǎn)原因,所以返回一個局部變量的引用是不可取的。因為隨著該局部變量生存期的結(jié)束,相應(yīng)的引用也會失效,產(chǎn)生 runtime error! 注意事項: 28211 11 ( 1)不能返回局部變量的引用。這條可以參照 Effective C++[1]的 Item 31。主要原因是局部變量會在函數(shù)返回后被銷毀,因此被返回的引用就成為了 無所指 的引用,程序會進(jìn)入未知狀態(tài)。 ( 2)不能返回函數(shù)內(nèi)部 new 分配的內(nèi)存的引用。這條可以參照 Effective C++[1]的 Item 31。雖然不存在局部變量的被動銷毀問題,可對于這種情況(返回函數(shù)內(nèi)部 new 分配內(nèi)存的引用),又面臨其它尷尬局面。例如,被函數(shù)返回的引用只是作為一個臨時變量出現(xiàn),而沒有被賦予一個實際的變量,那么這個引用所指向的空間(由 new 分配)就無法釋放,造成 memory leak。 ( 3)可以返回類 成員的引用,但最好是 const。這條原則可以參照 Effective C++[1]的 Item 30。主要原因是當(dāng)對象的屬性是與某種業(yè)務(wù)規(guī)則( business rule)相關(guān)聯(lián)的時候,其賦值常常與某些其它屬性或者對象的狀態(tài)有關(guān),因此有必要將賦值操作封裝在一個業(yè)務(wù)規(guī)則當(dāng)中。如果其它對象可以獲得該屬性的非常量引用(或指針),那么對該屬性的單純賦值就會破壞業(yè)務(wù)規(guī)則的完整性。 ( 4)流操作符重載返回值申明為 ―引用 ‖的作用: 流操作符 和 ,這兩個操作符常常希望被連續(xù)使用,例如: cout hello endl。 因此這兩個操作符的返回值應(yīng)該是一個仍然支持這兩個操作符的流引用??蛇x的其它方案包括:返回一個流對象和返回一個流對象指針。但是對于返回一個流對象,程序必須重新(拷貝)構(gòu)造一個新的流對象,也就是說,連續(xù)的兩個 操作符實際上是針對不同對象的!這無法讓人接受。對于返回一個流指針則不能連續(xù)使用 操作符。因此,返回一個流對象引用是惟一選擇。這個唯一選擇很關(guān)鍵,它說明了引用的重要性以及無可替代性,也許這就是 C++語言中引入引用這個概念的原因吧。賦值操作符 =。這個操作符象流操作符一樣,是可以連續(xù)使用的,例如 : x = j = 10?;蛘?(x=10)=100。賦值操作符的返回值必須是一個左值,以便可以被繼續(xù)賦值。因此引用成了這個操作符的惟一返回值選擇。 例 3 # i nclude int amp。put(int n)。 int vals[10]。 int error=1。 void main() { put(0)=10。 //以 put(0)函數(shù)值作為左值,等價于 vals[0]=10。 put(9)=20。 //以 put(9)函數(shù)值作為左值,等價于 vals[9]=20。 coutcout} int amp。put(int n) { if (n=0 amp。amp。 n=9 ) return vals[n]。 else { coutsubscript error。 return error。 } } ( 5)在另外的一些操作符中,卻千萬不能返回引用: +*/ 四則運(yùn)算符。它們不能返回引用, Effective C++[1]的 Item23 詳細(xì)的討論了這個問題。主要原因是這四個操作符沒有 side effec
點(diǎn)擊復(fù)制文檔內(nèi)容
教學(xué)課件相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖片鄂ICP備17016276號-1