




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、常見的 Java 上機面試題在程序員面試中,主要的考試形式分為筆試和上機編程考試兩部分。筆試主要考查面試者的基礎(chǔ)是否牢固;上機考試主要考查面試者的實際開發(fā)能力和技術(shù)技 巧。上機編程考試,要求面試者能夠根據(jù)題目的要求,使用一種編程工具,編寫全部代碼并調(diào)試運行。這主要是考查面試者代碼書寫和編程的熟練程度。值得注意的是,這類面試題要求能夠正確運行,往往要求面試者使用比較原始的JDK編譯方式也就是使用口0前令提示符,而不是提供 Eclipse或者JBuilder等快速開發(fā)環(huán) 境。本章將經(jīng)常出現(xiàn)的上機編程題進行分類,希望能夠給讀者帶來幫助和啟示。Java 基礎(chǔ)編程試題( 1)在上機編程類的面試題中,大部
2、分涉及基礎(chǔ)編程,例如算法、語法、常用的類等知識點。面試題 1 怎樣截取字符串考題題干編寫一個截取字符串的函數(shù),輸入為一個字符串和字節(jié)數(shù),輸出為按字節(jié)截取的字符串。但是要保證漢字不被截半個,如 “我ABC”4應(yīng)該截為“我AB,輸入 我ABCR DEF6,應(yīng)該輸出我ABC,而不是我ABC衩的半個。試題分析本面試題容易產(chǎn)生困惑的是中文字符和英文字符,在這里需要考慮漢字和英文字符的占用字節(jié)數(shù)問題,中文字符占兩個字節(jié),英文字符占一個字節(jié),理解了這個,就很容易完成本題了。具體代碼實現(xiàn)如下:packagecore_java;importjava.util.Scanner;publicclassInterce
3、ptionStr staticString ss;/ 要進行截取操作的字符串staticintn;/ 截取的字符串的字節(jié)數(shù)publicstaticvoidmain(Stringargs) System.out.println( 請輸入字符串: );Scanner scStr = newScanner(System.in);/ 從鍵盤獲取字符串ss = scStr.next();/將 Scanner 對象中的內(nèi)容以字符串的形式取出來System.out.println( 請輸入字節(jié)數(shù): );Scanner scByte/ 從鍵盤獲取字符串newScanner(System.in);n = scB
4、yte.nextInt();/ 將 Scanner 對象中的內(nèi)容以數(shù)值的形式取出來Interception(setValue();/ 方法與方法間的套用publicstaticStringsetValue() / 此方法的作用是將字符串轉(zhuǎn)換成字符串?dāng)?shù)組String string= newStringss.length();/ 創(chuàng)建一個字符數(shù)組stringfor(inti = 0; i string.length; i+)stringi = ss.substring(i, i + 1);/ 將字符串 ss 中的第 i 個字符取出,放入字符數(shù)組中 string 中returnstring;/ 將這
5、個字符數(shù)組返回publicstaticvoidInterception(Stringstring) String m = u4e00-u9fa5;/ 漢字的正則表達試System.out.println( 以每 + n + 字節(jié) 劃分的字符串如下所示: );for(inti = 0; i string.length; i+)if(stringi.matches(m)/ 將字符數(shù)組中的每一個元素與表則表達式進行匹配,如果相同則返回 truecount = count + 2;/ 如果當(dāng)前字符是漢字,計數(shù)器count 就加 2 elsecount = count + 1;/ 如果當(dāng)前字符不是漢字,
6、計數(shù)器count 就加 1if(count n) /如果當(dāng)前計數(shù)器count的值小于n,則輸出當(dāng)前字符System.out.print(stringi); elseif(count = n) /如果當(dāng)前計數(shù)器count的值等于n,則輸出當(dāng)前字符System.out.print(stringi);38. count0;System.out.println();/ 內(nèi)循環(huán)結(jié)果,則需要換行,起到控制打印格式的作用 elsecount = 0;/ 如果當(dāng)前計數(shù)器count 的值大于n,則計數(shù)器count清零,接著執(zhí)行外部循環(huán)System.out.println();程序的輸出結(jié)果如圖 17.1 所示。
7、17.1 Java基礎(chǔ)編程試題(2)面試題2怎樣實現(xiàn)元素互換考題題干從鍵盤上輸入10個整數(shù),并將其放入一個一維數(shù)組中,然后將其前5個元素與后5個元素對換,即:第1個元素與第10個元素互換,第2個元素與第9個元 素互換第5個元素與第6個元素互換。分別輸出數(shù)組原來各元素的值和對換后各 元素的值。試題分析由于本題的要求是實現(xiàn)頭尾元素互換,所以可以采用取利用臨時變量的方法 來進行元素交換具體代碼實現(xiàn)如下:packageprograme;importjava.io.BufferedReader;importjava.io.IOException;importjava.io.InputStreamRead
8、er;publicclassHuHuanDemo publicstaticvoidmain(Stringargs) print();publicstaticint write() BufferedReader buf = newBufferedReader10;/* 申請緩沖數(shù)組*/intarray newint10;for(inti = 0; i 10; i+)/* 賦值 */bufi = newBufferedReader(new InputStreamReader(System.in);/* 給每個緩沖區(qū)定義*/do/* 判斷是否是空串,如是則重新輸入 */n = 1;System.ou
9、t.print( 請輸入第 + (i + 1) + 個整數(shù) :);try/* 建立一個異常捕獲*/arrayi = Integer.parseInt(bufi.readLine();/*執(zhí)行串變整數(shù)*/* Integer.parseInt(str) - str轉(zhuǎn)成 int 型 bufi.readLine()入字符流給buf 緩沖區(qū)并返回字符串 TOC o 1-5 h z */ catch(NumberFormatException e)/* 捕獲異常*/System.out.println( 數(shù)據(jù)輸入錯誤請重新輸入 );/* 處理異常*/n= 0;catch(IOExceptione) e.p
10、rintStackTrace(); while(n = 0);returnarray;44.publicstaticvoidprint()int ary = write();ints;*/System.out.println(nfor(inti = 0; iSystem.out.print(aryifor(inti = 0; is = aryi;aryi = ary9-ary9- i = s;System.out.println(n你輸入的數(shù)組是:);10; i+)/* 輸出原數(shù)組+ );5;i+)/* 對換 */i;對換后的數(shù)組是:);61. for(inti0; i 10; i+)/* 輸
11、出對換后數(shù)組*/System.out.print(aryi+ );System.out.println();69.程序輸出的結(jié)果如圖17.2所示17.1 Java基礎(chǔ)編程試題(3)面試題3怎樣實現(xiàn)元素排序考題題干( 1)用 Java 實現(xiàn)一種排序。(2) Java 類實現(xiàn)序列化的方法是什么?( 3)在COLLECTION架中,如果實現(xiàn)自然比較方法,則需要實現(xiàn)什么樣的接口?試題分析排序是程序員經(jīng)常遇到的,也是基本的技巧之一,一般的排序方法有插入排序、冒泡排序、選擇排序、 Shell 排序、快速排序、歸并排序、堆排序、 SortUtil 等。下面詳細介紹 3 種排序方法。1冒泡排序( Bubble
12、 Sort )最簡單的排序方法是冒泡排序法。這種方法的基本思想是,將待排序的元素看作是豎著排列的 氣泡 ,較小的元素比較輕,從而要往上浮。在冒泡排序算法中要對這個 氣泡 序列處理若干遍。所謂一遍處理,就是自底向上檢查一遍這個序列,并時刻注意兩個相鄰元素的順序是否正確。如果發(fā)現(xiàn)兩個相鄰元素的順序不對,即輕 的元素在下面,就交換它們的位置。顯然,處理一遍之后,最輕 的元素就浮到了最高位置;處理兩遍之后,次輕 的元素就浮到了次高位置。在進行第二遍處理時,由于最高位置上的元素已是 最輕 元素,所以不必檢查。一般地,第i 遍處理時,不必檢查第 i 高位置以上的元素,因為經(jīng)過前面i-1 遍的處理,它們已正
13、確地排序。2選擇排序( Selection Sort )選擇排序的基本思想是,對待排序的記錄序列進行n-1 遍的處理,第 1 遍處理是將 L1.n 中最小者與L1 交換位置,第 2 遍處理是將L2.n 中最小者與L2交換位置,第i遍處理是將Li.n中最小者與Li交換位置。這樣, 經(jīng)過 i 遍處理之后,前i 個記錄的位置就已經(jīng)按從小到大的順序排列好了。當(dāng)然,在實際操作時,也可以根據(jù)需要,通過從待排序的記錄中選擇最大者與其首記錄交換位置,按從大到小的順序進行排序處理。3插入排序( Insertion Sort )插入排序的基本思想是,經(jīng)過i-1 遍處理后, L1.i-1 已排好序。第 i 遍處理僅
14、將 Li 插入 L1.i-1 的適當(dāng)位置,使得L1.i 還是排好序的序列。要達到這個目的,可以用順序比較的方法。首先比較Li 和 Li-1 ,如果 Li-1Li,則L1.i已排好序,第i遍處理就結(jié)束了;否則交換 Li與Li-1的位置,繼續(xù)比較Li-1和Li-2,直到找到某一個位置j (1j i -1 ),使得 Lj Lj+1時為止。簡言之,插入排序就是每一步都將一個待排數(shù)據(jù)按其大小插入到已經(jīng)排序的數(shù)據(jù)中的適當(dāng)位置,直到全部插入完畢。( 1)具體代碼實現(xiàn)如下:packageprograme;importjava.util.*;classInsertionSort ArrayList list;/
15、num指的是數(shù)據(jù)的個數(shù),modf旨的是可以產(chǎn)生隨機數(shù)的范圍在1mod之間intmod) publicInsertionSort(intnum,7. listnewArrayList(num);Random dom = newRandom();System.out.println( 排序之前的數(shù)組 :);for(inti = 0; i num; i+)list.add(newInteger(Math.abs(dom.nextInt() % mod + 1);System.out.println(list+i + =+ list.get(i);publicvoidSortIt() Integer
16、tempInt;intMaxSize = 1;for(inti = 1; i = (Integer)list.get(MaxSize-1)22. list.add(MaxSize,tempInt);MaxSize+; elsefor(intj = 0; j = tempIValue() list.add(j, tempInt);MaxSize+;break;System.out.println( 排序之后的數(shù)組:);for(inti = 0; i list.size(); i+)i + =+ list.get(i);System.out.println(list+38.public
17、staticvoidmain(String口args) InsertionSort is = newInsertionSort(10, 100);is.SortIt();程序的輸出結(jié)果如圖17.3所示。日17.1 Java基礎(chǔ)編程試題(4)面試題4怎樣實現(xiàn)Singleton模式編程考題題干請編寫一個Singleton模式的程序。試題分析Singleton 模式的主要作用是保證在Java 應(yīng)用程序中,一個類Class 只有一個實例存在。在很多操作中,比如建立目錄數(shù)據(jù)庫連接都需要這樣的單線程操作。使用 Singleton 的好處還在于可以節(jié)省內(nèi)存,因為它限制了實例的個數(shù),有利于Java 垃圾回收。
18、一般 Singleton 模式通常的形式為:定義一個類,它的構(gòu)造函數(shù)為 private的,它有一個static 的 private 變量,在類初始化時實例化,通過一個public 的getInstance 方法獲取對它的引用,繼而調(diào)用其中的方法。(兩種實現(xiàn)方法,取一即可)packageprograme;publicclassSingleton privateSingleton() / 注意這是 private 只供內(nèi)部調(diào)用privatefinalstaticSingletoninstance = newSingleton();/ 這里提供了一個供外部訪問本class 的靜態(tài)方法,可以直接訪問g
19、etInstance() publicstaticSingletonreturninstance;或者:packageprograme;publicclassSingleton privatestaticSingleton instance = null;publicstaticsynchronizedSingletongetInstance()/ 使用時生成實例,提高了效率!if(instance = null)instance = newSingleton();returninstance;面試題 5 哥德巴赫猜想的近似證明考題題干哥德巴赫猜想是說任何一個大于 2 的偶數(shù)都能表示為兩個素數(shù)
20、之和。請編寫一個Java程序,驗證1100內(nèi)哥德巴赫猜想的正確性,也就是近似證明哥德巴赫 猜想。試題分析可以應(yīng)用枚舉的方法列出1100內(nèi)的所有偶數(shù)。然后逐一驗證每個偶數(shù)是否 滿足哥德巴赫猜想的論證。如果有一個不符合,就意味著哥德巴赫猜想不成立。一個正偶數(shù) m可以表示成 m=1+(m-1), m=2+(m-2), m=3+(m-3),m=m/2+m/2由于m/2的后半部分和前半部分的結(jié)果是一樣的,只是加數(shù)順序不 同,所以可以忽略。具體代碼實現(xiàn)如下:packageprograme;publicclassGuess publicstaticvoidmain(Stringargs) System.ou
21、t.println( 在 1100范圍內(nèi),現(xiàn)在開始證實哥德巴赫猜想: );6. if(Testify_Guess(1,100)System.out.println( 在 1100 范圍內(nèi),哥德巴赫猜想是正確的。 ); elseSystem.out.println( 哥德巴赫猜想是錯誤的 );publicstaticbooleanTestify_Guess(intlow,inthigh) 判斷1100范圍內(nèi)的所有偶數(shù)是否符合哥德巴赫猜想, 符合則返回 true ,反之則返回 falseinti, j = 0;booleanflag = true;for(i = low; i 2)/在1100之間
22、選取大于2的偶數(shù)進行猜想測試if(isGoldbach(i)/j+;j 用來控制輸出格式 ,每行輸出 5 個數(shù)據(jù)if(j = 5) System.out.println();j = 0; elseflag = false;break;returnflag;publicstaticbooleanisGoldbach(inta)/ 判斷參數(shù) a 是否符合哥德巴赫猜想inti;36. booleanflagfalse;37. for(i1; i = a / 2;i+)if(isPrime(i) & isPrime(a - i)/ 根據(jù)試題分析中的表達式,傳入相關(guān)的兩個參數(shù)flag= true;Sys
23、tem.out.print(a + =+ i + + (a - i) + );break;/ 只要有一個符合條件的就可以退出循環(huán),判斷下一個偶數(shù)returnflag; publicstaticbooleanisPrime(inti)/ 判斷參數(shù) i 是否是素數(shù),是則返回 true 反之則返回 falseintn;booleanflag = true;if(1= i)/1 本身不是素數(shù),因此需把這個特殊的數(shù)字拋出flag = false;for(n = 2; n = i - 1;n+)/* 判斷i是否是素數(shù)的一個方法是看2i-1之間有其因子(能被 2 整除),有則不是素數(shù)返回 false ,反之
24、則返回 true*/if(i% n = 0) flag= false;break;returnflag;程序的輸出結(jié)果如圖 17.4 所示。17.1 Java基礎(chǔ)編程試題(5)面試題6 怎樣實現(xiàn)金額轉(zhuǎn)換考題題干金額轉(zhuǎn)換,阿拉伯?dāng)?shù)字的金額轉(zhuǎn)換成中國傳統(tǒng)的形式如:(1011) 一(壹仟零壹拾壹元整)輸出。試題分析金額轉(zhuǎn)換,在開發(fā)財務(wù)相關(guān)軟件時會經(jīng)常用到,也是軟件本地化的一個需 要。一般開發(fā)公司或者團隊都有相應(yīng)的金額轉(zhuǎn)換類或者是模塊,配合報表工具,可 以實現(xiàn)良好的本地化。這里給出一個簡單的金額轉(zhuǎn)換代碼,供讀者參考。具體代碼實現(xiàn)如下:packageprograme;importjava.text.Nu
25、mberFormat;importjava.util.HashMap;importjava.util.Scanner;publicclassAmountOfConversion / 定義 HashMap勺 value 值7. publicstaticfinalStringEMPTY =; ;8. publicstaticfinalStringZERO =零;9. publicstaticfinalStringONE =壹;10. publicstaticfinalStringTWO =才 II. 貳 ;11. publicstaticfinalStringTHREE= 叁;12. public
26、staticfinalStringFOUR = 肆;13. publicstaticfinalStringFIVE = 伍;14. publicstaticfinalStringSIX =陸;15. publicstaticfinalStringSEVEN= 柒;16. publicstaticfinalStringEIGHT= 捌;17. publicstaticfinalStringNINE = 玖;18. publicstaticfinalStringTEN =拾;19. publicstaticfinalStringHUNDRED= 佰publicstaticfinalStringpu
27、blicstaticfinalStringpublicstaticfinalStringpublicstaticfinalStringpublicstaticfinalStringpublicstaticfinalStringpublicstaticfinalStringTHOUSAND= 仟 ;TEN_THOUSAND= 萬;HUNDRED_MILLION= 億;YUAN = 元;JIAO = 角;FEN = 分;DOT = .;formatter = null;privatestaticAmountOfConversion/ 創(chuàng)建 AmountOfConversion 的實例對象創(chuàng)建初始化
28、一個HashMap寸象privateHashMap NumberMap = newHashMap();privateHashMap HighnumberofMoney = newHashMap();創(chuàng)建初始化一個NumberFormatX寸象privateNumberFormat numberFormat = NumberFormat.getInstance();privateAmountOfConversion() 在用 new創(chuàng)建 AmountOfConversion 對象時, 為HashMap:寸象進行key-value的映射numberFormat.setMaximumFraction
29、Digits(4);/ 設(shè)置數(shù)據(jù)的小數(shù)部分的最大位數(shù)是4 位numberFormat.setMinimumFractionDigits(2);/ 設(shè)置數(shù)據(jù)的小數(shù)部分的最小位數(shù)是2 位numberFormat.setGroupingUsed(false);/* 設(shè)置此格式中是不可以使用組。如果設(shè)置可以使用組,則數(shù) 1234567 可能被格式化為 1,234,567*/NumberMap.put(0,ZERO);NumberMap.put(1,ONE);NumberMap.put(2,TWO);NumberMap.put(3,THREE);NumberMap.put(4,FOUR);NumberM
30、ap.put(5,FIVE);NumberMap.put(6,SIX);NumberMap.put(7,SEVEN);NumberMap.put(8,EIGHT);NumberMap.put(9,NINE);NumberMap.put(DOT, DOT);49. HighnumberofMoney.put(1,TEN);50. HighnumberofMoney.put(2,HUNDRED);51. HighnumberofMoney.put(3,THOUSAND);52. HighnumberofMoney.put(4,TEN_THOUSAND);53. HighnumberofMoney.
31、put(5,TEN);54. HighnumberofMoney.put(6,HUNDRED);55. HighnumberofMoney.put(7,THOUSAND);56. HighnumberofMoney.put(8,HUNDRED_MILLION);57. 58. publicstaticAmountOfConversiongetInstance() / 判斷 AmountOfConversion 對象 formatter 是否初始化if(formatter = null)formatter = newAmountOfConversion();returnformatter;/ 進
32、行金額轉(zhuǎn)換的多種數(shù)據(jù)類型64. publicString format(String moneyStr) 65. Stringresult 不能進行金額轉(zhuǎn)換!II.if(isConversion(moneyStr)result= convertIntegerTochinese(moneyStr);result= convertPointTochinese(result);returnresult;publicString format(doublemoneyDouble) returnformat(numberFormat.format(moneyDouble);publicString fo
33、rmat(intmoneyInt) returnformat(numberFormat.format(moneyInt);publicString format(longmoneyLong) returnformat(numberFormat.format(moneyLong);returnformat(numberFormat.format(moneyNum);privateString convertIntegerTochinese(String moneyStr) / 將參數(shù)中傳入的阿拉伯?dāng)?shù)字轉(zhuǎn)換成中文String result;StringBuffer C2CStrBufer = newStringBuffer();for(inti = 0; i 0; i-)C2CStrBufer.insert(i,HighnumberofMoney.get(EMPTY+ moneyPatternCursor);97. moneyPatternCursormoneyPatternCursor8? 1: moneyPatternCursor + 1;String fractionPart = C2CStrBufer.substring(C2CStrBufer.indexOf(.);C2CStrBufer.delete(C2CStrBufer.
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 物聯(lián)網(wǎng)技術(shù)應(yīng)用研發(fā)合作合同
- 公司勞動合同范本簡易版4
- 2025年砂漿調(diào)配合同樣本
- 地鐵站2025年租賃設(shè)施合同
- 2025年雙方物流運輸與裝卸合同
- 2025年全球工程項目合同標(biāo)準
- 2025年個人裝修工程項目合同樣本
- 2025年醫(yī)療產(chǎn)品交易合同指南
- 2025年中等教育資源采購合同
- 2025年原材料采購合同書正式版
- DBJ 46-027-2013 海南省建筑塔式起重機安裝使用安全評定規(guī)程
- SJG 103-2021 無障礙設(shè)計標(biāo)準-高清現(xiàn)行
- 皇冠假日酒店智能化系統(tǒng)安裝工程施工合同范本
- 路面工程重點、關(guān)鍵、和難點工程的施工方案(技術(shù)標(biāo))
- 港口集裝箱物流系統(tǒng)建模與仿真技術(shù)研究-教學(xué)平臺課件
- 合肥市城市大腦·數(shù)字底座白皮書2020
- 杭州灣跨海大橋項目案例ppt課件
- (完整版)光榮榜25張模板
- 工業(yè)催化劑作用原理—金屬氧化物催化劑
- 優(yōu)秀教材推薦意見(真實的專家意見)
- QTD01鋼質(zhì)焊接氣瓶檢驗工藝指導(dǎo)書
評論
0/150
提交評論