常見的Java上機面試題.doc_第1頁
常見的Java上機面試題.doc_第2頁
常見的Java上機面試題.doc_第3頁
常見的Java上機面試題.doc_第4頁
常見的Java上機面試題.doc_第5頁
已閱讀5頁,還剩14頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

常見的Java上機面試題在程序員面試中,主要的考試形式分為筆試和上機編程考試兩部分。筆試主要考查面試者的基礎是否牢固;上機考試主要考查面試者的實際開發(fā)能力和技術技巧。上機編程考試,要求面試者能夠根據題目的要求,使用一種編程工具,編寫全部代碼并調試運行。這主要是考查面試者代碼書寫和編程的熟練程度。值得注意的是,這類面試題要求能夠正確運行,往往要求面試者使用比較原始的JDK編譯方式也就是使用DOS命令提示符,而不是提供Eclipse或者JBuilder等快速開發(fā)環(huán)境。本章將經常出現的上機編程題進行分類,希望能夠給讀者帶來幫助和啟示。17.1 Java基礎編程試題(1)在上機編程類的面試題中,大部分涉及基礎編程,例如算法、語法、常用的類等知識點。面試題1 怎樣截取字符串考題題干編寫一個截取字符串的函數,輸入為一個字符串和字節(jié)數,輸出為按字節(jié)截取的字符串。但是要保證漢字不被截半個,如我ABC4,應該截為我AB,輸入我ABC漢DEF6,應該輸出我ABC,而不是我ABC+漢的半個。試題分析本面試題容易產生困惑的是中文字符和英文字符,在這里需要考慮漢字和英文字符的占用字節(jié)數問題,中文字符占兩個字節(jié),英文字符占一個字節(jié),理解了這個,就很容易完成本題了。參考答案具體代碼實現如下:1. packagecore_java; 2. importjava.util.Scanner; 3. publicclassInterceptionStr 4. staticStringss;/要進行截取操作的字符串 5. staticintn;/截取的字符串的字節(jié)數 6. publicstaticvoidmain(Stringargs) 7. System.out.println(請輸入字符串:); 8. ScannerscStr=newScanner(System.in);/從鍵盤獲取字符串 9. ss=scStr.next();/將Scanner對象中的內容以字符串的形式取出來 10. System.out.println(請輸入字節(jié)數:); 11. ScannerscByte=newScanner(System.in);/從鍵盤獲取字符串 12. n=scByte.nextInt();/將Scanner對象中的內容以數值的形式取出來 13. Interception(setValue();/方法與方法間的套用 14. 15. publicstaticStringsetValue()/此方法的作用是將字符串轉換成字符串數組 16. Stringstring=newStringss.length();/創(chuàng)建一個字符數組string 17. for(inti=0;istring.length;i+) 18. stringi=ss.substring(i,i+1); 19. /將字符串ss中的第i個字符取出,放入字符數組中string中 20. 21. returnstring;/將這個字符數組返回 22. 23. publicstaticvoidInterception(Stringstring) 24. intcount=0; 25. Stringm=u4e00-u9fa5;/漢字的正則表達試 26. System.out.println(以每+n+字節(jié)劃分的字符串如下所示:); 27. for(inti=0;istring.length;i+) 28. if(stringi.matches(m) 29. /將字符數組中的每一個元素與表則表達式進行匹配,如果相同則返回true 30. count=count+2;/如果當前字符是漢字,計數器count就加2 31. else 32. count=count+1;/如果當前字符不是漢字,計數器count就加1 33. 34. if(countn)/如果當前計數器count的值小于n,則輸出當前字符 35. System.out.print(stringi); 36. elseif(count=n)/如果當前計數器count的值等于n,則輸出當前字符 37. System.out.print(stringi); 38. count=0; 39. System.out.println();/內循環(huán)結果,則需要換行,起到控制打印格式的作用 40. else 41. count=0;/如果當前計數器count的值大于n,則計數器count清零,接著執(zhí)行外部循環(huán) 42. System.out.println(); 43. 44. 45. 46. 程序的輸出結果如圖17.1所示。17.1 Java基礎編程試題(2)面試題2 怎樣實現元素互換考題題干從鍵盤上輸入10個整數,并將其放入一個一維數組中,然后將其前5個元素與后5個元素對換,即:第1個元素與第10個元素互換,第2個元素與第9個元素互換第5個元素與第6個元素互換。分別輸出數組原來各元素的值和對換后各元素的值。試題分析由于本題的要求是實現頭尾元素互換,所以可以釆用取利用臨時變量的方法來進行元素交換。參考答案具體代碼實現如下:1. packageprograme; 2. 3. importjava.io.BufferedReader; 4. importjava.io.IOException; 5. importjava.io.InputStreamReader; 6. 7. publicclassHuHuanDemo 8. publicstaticvoidmain(Stringargs) 9. print(); 10. 11. 12. 13. publicstaticintwrite() 14. BufferedReaderbuf=newBufferedReader10;/*申請緩沖數組*/15. intn;/*開關量和中間量*/16. intarray=newint10; 17. for(inti=0;i10;i+)/*賦值*/18. 19. bufi=newBufferedReader(newInputStreamReader(System.in); 20. /*給每個緩沖區(qū)定義*/21. do/*判斷是否是空串,如是則重新輸入*/22. 23. n=1; 24. System.out.print(請輸入第+(i+1)+個整數:); 25. try/*建立一個異常捕獲*/26. 27. arrayi=Integer.parseInt(bufi.readLine();/*執(zhí)行串變整數*/28. /* 29. *Integer.parseInt(str)-str轉成int型bufi.readLine()- 30. *從系統(tǒng)輸入緩沖區(qū)讀入字符流給buf緩沖區(qū)并返回字符串 31. */32. catch(NumberFormatExceptione)/*捕獲異常*/33. 34. System.out.println(數據輸入錯誤請重新輸入);/*處理異常*/35. n=0; 36. catch(IOExceptione) 37. e.printStackTrace(); 38. 39. while(n=0); 40. 41. returnarray; 42. 43. 44. 45. publicstaticvoidprint() 46. intary=write(); 47. ints; 48. System.out.println(n你輸入的數組是:); 49. for(inti=0;i10;i+)/*輸出原數組*/50. 51. System.out.print(aryi+); 52. 53. for(inti=0;i5;i+)/*對換*/54. 55. s=aryi; 56. aryi=ary9-i; 57. ary9-i=s; 58. 59. 60. System.out.println(n對換后的數組是:); 61. for(inti=0;i10;i+)/*輸出對換后數組*/62. 63. System.out.print(aryi+); 64. 65. System.out.println(); 66. 67. 68. 69. 程序輸出的結果如圖17.2所示。17.1 Java基礎編程試題(3)面試題3 怎樣實現元素排序考題題干(1)用Java實現一種排序。(2)Java類實現序列化的方法是什么?(3)在COLLECTION框架中,如果實現自然比較方法,則需要實現什么樣的接口?試題分析排序是程序員經常遇到的,也是基本的技巧之一,一般的排序方法有插入排序、冒泡排序、選擇排序、Shell排序、快速排序、歸并排序、堆排序、SortUtil等。下面詳細介紹3種排序方法。1冒泡排序(Bubble Sort)最簡單的排序方法是冒泡排序法。這種方法的基本思想是,將待排序的元素看作是豎著排列的氣泡,較小的元素比較輕,從而要往上浮。在冒泡排序算法中要對這個氣泡序列處理若干遍。所謂一遍處理,就是自底向上檢查一遍這個序列,并時刻注意兩個相鄰元素的順序是否正確。如果發(fā)現兩個相鄰元素的順序不對,即輕的元素在下面,就交換它們的位置。顯然,處理一遍之后,最輕的元素就浮到了最高位置;處理兩遍之后,次輕的元素就浮到了次高位置。在進行第二遍處理時,由于最高位置上的元素已是最輕元素,所以不必檢查。一般地,第i遍處理時,不必檢查第i高位置以上的元素,因為經過前面i-1遍的處理,它們已正確地排序。2選擇排序(Selection Sort)選擇排序的基本思想是,對待排序的記錄序列進行n-1遍的處理,第1遍處理是將L1.n中最小者與L1交換位置,第2遍處理是將L2.n中最小者與L2交換位置,第i遍處理是將Li.n中最小者與Li交換位置。這樣,經過i遍處理之后,前i個記錄的位置就已經按從小到大的順序排列好了。當然,在實際操作時,也可以根據需要,通過從待排序的記錄中選擇最大者與其首記錄交換位置,按從大到小的順序進行排序處理。3插入排序(Insertion Sort)插入排序的基本思想是,經過i-1遍處理后,L1.i-1已排好序。第i遍處理僅將Li插入L1.i-1的適當位置,使得L1.i還是排好序的序列。要達到這個目的,可以用順序比較的方法。首先比較Li和Li-1,如果Li-1Li,則L1.i已排好序,第i遍處理就結束了;否則交換Li與Li-1的位置,繼續(xù)比較Li-1和Li-2,直到找到某一個位置j(1ji-1),使得LjLj+1時為止。簡言之,插入排序就是每一步都將一個待排數據按其大小插入到已經排序的數據中的適當位置,直到全部插入完畢。參考答案(1)具體代碼實現如下:1. packageprograme; 2. importjava.util.*; 3. classInsertionSort 4. ArrayListlist; 5. /num指的是數據的個數,mod指的是可以產生隨機數的范圍在1mod之間 6. publicInsertionSort(intnum,intmod) 7. list=newArrayList(num); 8. Randomdom=newRandom(); 9. System.out.println(排序之前的數組:); 10. for(inti=0;inum;i+) 11. list.add(newInteger(Math.abs(dom.nextInt()%mod+1); 12. System.out.println(list+i+=+list.get(i); 13. 14. 15. publicvoidSortIt() 16. IntegertempInt; 17. intMaxSize=1; 18. for(inti=1;i=(Integer)list.get(MaxSize-1) 21. .intValue() 22. list.add(MaxSize,tempInt); 23. MaxSize+; 24. else 25. for(intj=0;j=tempInt 27. .intValue() 28. list.add(j,tempInt); 29. MaxSize+; 30. break; 31. 32. 33. 34. 35. System.out.println(排序之后的數組:); 36. for(inti=0;ilist.size();i+) 37. System.out.println(list+i+=+list.get(i); 38. 39. 40. publicstaticvoidmain(Stringargs) 41. InsertionSortis=newInsertionSort(10,100); 42. is.SortIt(); 43. 44. 程序的輸出結果如圖17.3所示。17.1 Java基礎編程試題(4)面試題4 怎樣實現Singleton模式編程考題題干請編寫一個Singleton模式的程序。試題分析Singleton模式的主要作用是保證在Java應用程序中,一個類Class只有一個實例存在。在很多操作中,比如建立目錄數據庫連接都需要這樣的單線程操作。使用Singleton的好處還在于可以節(jié)省內存,因為它限制了實例的個數,有利于Java垃圾回收。一般Singleton模式通常的形式為:定義一個類,它的構造函數為private的,它有一個static的private變量,在類初始化時實例化,通過一個public的getInstance方法獲取對它的引用,繼而調用其中的方法。參考答案(兩種實現方法,取一即可)1. packageprograme; 2. 3. publicclassSingleton 4. privateSingleton() 5. 6. /注意這是private只供內部調用 7. privatefinalstaticSingletoninstance=newSingleton(); 8. 9. /這里提供了一個供外部訪問本class的靜態(tài)方法,可以直接訪問 10. publicstaticSingletongetInstance() 11. returninstance; 12. 13. 或者:1. packageprograme; 2. 3. publicclassSingleton 4. privatestaticSingletoninstance=null; 5. 6. publicstaticsynchronizedSingletongetInstance() 7. /使用時生成實例,提高了效率! 8. if(instance=null) 9. instance=newSingleton(); 10. returninstance; 11. 12. 面試題5 哥德巴赫猜想的近似證明考題題干哥德巴赫猜想是說任何一個大于2的偶數都能表示為兩個素數之和。請編寫一個Java程序,驗證1100內哥德巴赫猜想的正確性,也就是近似證明哥德巴赫猜想。試題分析可以應用枚舉的方法列出1100內的所有偶數。然后逐一驗證每個偶數是否滿足哥德巴赫猜想的論證。如果有一個不符合,就意味著哥德巴赫猜想不成立。一個正偶數m可以表示成m=1+(m-1),m=2+(m-2),m=3+(m-3),m=m/2+m/2。由于m/2的后半部分和前半部分的結果是一樣的,只是加數順序不同,所以可以忽略。參考答案具體代碼實現如下:1. packageprograme; 2. 3. publicclassGuess 4. publicstaticvoidmain(Stringargs) 5. System.out.println(在1100范圍內,現在開始證實哥德巴赫猜想:); 6. if(Testify_Guess(1,100) 7. System.out.println(在1100范圍內,哥德巴赫猜想是正確的。); 8. else 9. System.out.println(哥德巴赫猜想是錯誤的); 10. 11. 12. 13. 14. publicstaticbooleanTestify_Guess(intlow,inthigh) 15. /判斷1100范圍內的所有偶數是否符合哥德巴赫猜想,符合則返回true,反之則返回false 16. inti,j=0; 17. booleanflag=true; 18. for(i=low;i2)/在1100之間選取大于2的偶數進行猜想測試 20. if(isGoldbach(i) 21. j+;/j用來控制輸出格式,每行輸出5個數據 22. if(j=5) 23. System.out.println(); 24. j=0; 25. 26. else 27. flag=false; 28. break; 29. 30. 31. returnflag; 32. 33. 34. publicstaticbooleanisGoldbach(inta)/判斷參數a是否符合哥德巴赫猜想 35. inti; 36. booleanflag=false; 37. for(i=1;i=a/2;i+) 38. if(isPrime(i)&isPrime(a-i)/根據試題分析中的表達式,傳入相關的兩個參數 39. flag=true; 40. System.out.print(a+=+i+(a-i)+); 41. break; 42. /只要有一個符合條件的就可以退出循環(huán),判斷下一個偶數 43. 44. 45. 46. returnflag; 47. 48. 49. publicstaticbooleanisPrime(inti) 50. /判斷參數i是否是素數,是則返回true反之則返回false 51. intn; 52. booleanflag=true; 53. if(1=i)/1本身不是素數,因此需把這個特殊的數字拋出 54. flag=false; 55. for(n=2;n=i-1;n+)/*判斷i是否是素數的一個方法是看2i-1之間有其因子(能被2整除),有則不是素數返回false,反之則返回true*/56. if(i%n=0) 57. flag=false; 58. break; 59. 60. returnflag; 61. 62. 程序的輸出結果如圖17.4所示。17.1 Java基礎編程試題(5)面試題6 怎樣實現金額轉換考題題干金額轉換,阿拉伯數字的金額轉換成中國傳統(tǒng)的形式如:(¥1011)(壹仟零壹拾壹元整)輸出。試題分析金額轉換,在開發(fā)財務相關軟件時會經常用到,也是軟件本地化的一個需要。一般開發(fā)公司或者團隊都有相應的金額轉換類或者是模塊,配合報表工具,可以實現良好的本地化。這里給出一個簡單的金額轉換代碼,供讀者參考。參考答案具體代碼實現如下:1. packageprograme; 2. importjava.text.NumberFormat; 3. importjava.util.HashMap; 4. importjava.util.Scanner; 5. publicclassAmountOfConversion 6. /定義HashMap的value值 7. publicstaticfinalStringEMPTY=; 8. publicstaticfinalStringZERO=零; 9. publicstaticfinalStringONE=壹; 10. publicstaticfinalStringTWO=貳; 11. publicstaticfinalStringTHREE=叁; 12. publicstaticfinalStringFOUR=肆; 13. publicstaticfinalStringFIVE=伍; 14. publicstaticfinalStringSIX=陸; 15. publicstaticfinalStringSEVEN=柒; 16. publicstaticfinalStringEIGHT=捌; 17. publicstaticfinalStringNINE=玖; 18. publicstaticfinalStringTEN=拾; 19. publicstaticfinalStringHUNDRED=佰; 20. publicstaticfinalStringTHOUSAND=仟; 21. publicstaticfinalStringTEN_THOUSAND=萬; 22. publicstaticfinalStringHUNDRED_MILLION=億; 23. publicstaticfinalStringYUAN=元; 24. publicstaticfinalStringJIAO=角; 25. publicstaticfinalStringFEN=分; 26. publicstaticfinalStringDOT=.; 27. privatestaticAmountOfConversionformatter=null;/創(chuàng)建AmountOfConversion的實例對象 28. /創(chuàng)建初始化一個HashMap對象 29. privateHashMapNumberMap=newHashMap(); 30. privateHashMapHighnumberofMoney=newHashMap(); 31. /創(chuàng)建初始化一個NumberFormat對象 32. privateNumberFormatnumberFormat=NumberFormat.getInstance(); 33. privateAmountOfConversion() 34. /在用new創(chuàng)建AmountOfConversion對象時,為HashMap對象進行key-value的映射 35. numberFormat.setMaximumFractionDigits(4);/設置數據的小數部分的最大位數是4位 36. numberFormat.setMinimumFractionDigits(2);/設置數據的小數部分的最小位數是2位 37. numberFormat.setGroupingUsed(false);/*設置此格式中是不可以使用組。如果設置可以使用組,則數可能被格式化為1,234,567*/38. NumberMap.put(0,ZERO); 39. NumberMap.put(1,ONE); 40. NumberMap.put(2,TWO); 41. NumberMap.put(3,THREE); 42. NumberMap.put(4,FOUR); 43. NumberMap.put(5,FIVE); 44. NumberMap.put(6,SIX); 45. NumberMap.put(7,SEVEN); 46. NumberMap.put(8,EIGHT); 47. NumberMap.put(9,NINE); 48. 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.put(5,TEN); 54. HighnumberofMoney.put(6,HUNDRED); 55. HighnumberofMoney.put(7,THOUSAND); 56. HighnumberofMoney.put(8,HUNDRED_MILLION); 57. 58. publicstaticAmountOfConversiongetInstance()/判斷AmountOfConversion對象formatter是否初始化 59. if(formatter=null) 60. formatter=newAmountOfConversion(); 61. returnformatter; 62. 63. /進行金額轉換的多種數據類型 64. publicStringformat(StringmoneyStr) 65. Stringresult=不能進行金額轉換!; 66. if(isConversion(moneyStr) 67. result=convertIntegerTochinese(moneyStr); 68. result=convertPointTochinese(result); 69. 70. returnresult; 71. 72. publicStringformat(doublemoneyDouble) 73. returnformat(numberFormat.format(moneyDouble); 74. 75. publicStringformat(intmoneyInt) 76. returnformat(numberFormat.format(moneyInt); 77. 78. publicStringformat(longmoneyLong) 79. returnformat(numberFormat.format(moneyLong); 80. 81. publicStringformat(NumbermoneyNum) 82. returnformat(numberFormat.format(moneyNum); 83. 84. privateStringconvertIntegerTochinese(StringmoneyStr)/將參數中傳入的阿拉伯數字轉換成中文 85. Stringresult; 86. StringBufferC2CStrBufer=newStringBuffer(); 87. for(inti=0;i0;i-) 95. C2CStrBufer.insert(i,HighnumberofMoney.get(EMPTY 96. +moneyPatternCursor); 97. moneyPatternCursor=moneyPatternCursor=8?198. :moneyPatternCursor+1; 99. 100. StringfractionPart=C2CStrBufer.substring(C2CStrBufer 101. .indexOf(.); 102. C2CStrBufer.delete(C2CStrBufer.indexOf(.), 103. C2CStrBufer.length(); 104. while(C2CStrBufer.indexOf(零拾)!=-1) 105. C2CStrBufer.replace(C2CStrBufer.indexOf(零拾), 106. C2CStrBufer.indexOf(零拾)+2,ZERO); 107. 108. while(C2CStrBufer.indexOf(零佰)!=-1) 109. C2CStrBufer.replace(C2CStrBufer.indexOf(零佰), 110. C2CStrBufer.indexOf(零佰)+2,ZERO); 111. 112. while(C2CStrBufer.indexOf(零仟)!=-1) 113. C2CStrBufer.replace(C2CStrBufer.indexOf(零仟), 114. C2CStrBufer.indexOf(零仟)+2,ZERO); 115. 116. while(C2CStrBufer.indexOf(零萬)!=-1) 117. C2CStrBufer.replace(C2CStrBufer.indexOf(零萬), 118. C2CS

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論