




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、常见的 Java 上机面试题在程序员面试中,主要的考试形式分为笔试和上机编程考试两部分。笔试主要考查面试者的基础是否牢固;上机考试主要考查面试者的实际开发能力和技术技 巧。上机编程考试,要求面试者能够根据题目的要求,使用一种编程工具,编写全部代码并调试运行。这主要是考查面试者代码书写和编程的熟练程度。值得注意的是,这类面试题要求能够正确运行,往往要求面试者使用比较原始的JDK编译方式也就是使用口0前令提示符,而不是提供 Eclipse或者JBuilder等快速开发环 境。本章将经常出现的上机编程题进行分类,希望能够给读者带来帮助和启示。Java 基础编程试题( 1)在上机编程类的面试题中,大部
2、分涉及基础编程,例如算法、语法、常用的类等知识点。面试题 1 怎样截取字符串考题题干编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串。但是要保证汉字不被截半个,如 “我ABC”4应该截为“我AB,输入 我ABCR DEF6,应该输出我ABC,而不是我ABC衩的半个。试题分析本面试题容易产生困惑的是中文字符和英文字符,在这里需要考虑汉字和英文字符的占用字节数问题,中文字符占两个字节,英文字符占一个字节,理解了这个,就很容易完成本题了。具体代码实现如下:packagecore_java;importjava.util.Scanner;publicclassInterce
3、ptionStr staticString ss;/ 要进行截取操作的字符串staticintn;/ 截取的字符串的字节数publicstaticvoidmain(Stringargs) System.out.println( 请输入字符串: );Scanner scStr = newScanner(System.in);/ 从键盘获取字符串ss = scStr.next();/将 Scanner 对象中的内容以字符串的形式取出来System.out.println( 请输入字节数: );Scanner scByte/ 从键盘获取字符串newScanner(System.in);n = scB
4、yte.nextInt();/ 将 Scanner 对象中的内容以数值的形式取出来Interception(setValue();/ 方法与方法间的套用publicstaticStringsetValue() / 此方法的作用是将字符串转换成字符串数组String string= newStringss.length();/ 创建一个字符数组stringfor(inti = 0; i string.length; i+)stringi = ss.substring(i, i + 1);/ 将字符串 ss 中的第 i 个字符取出,放入字符数组中 string 中returnstring;/ 将这
5、个字符数组返回publicstaticvoidInterception(Stringstring) String m = u4e00-u9fa5;/ 汉字的正则表达试System.out.println( 以每 + n + 字节 划分的字符串如下所示: );for(inti = 0; i string.length; i+)if(stringi.matches(m)/ 将字符数组中的每一个元素与表则表达式进行匹配,如果相同则返回 truecount = count + 2;/ 如果当前字符是汉字,计数器count 就加 2 elsecount = count + 1;/ 如果当前字符不是汉字,
6、计数器count 就加 1if(count n) /如果当前计数器count的值小于n,则输出当前字符System.out.print(stringi); elseif(count = n) /如果当前计数器count的值等于n,则输出当前字符System.out.print(stringi);38. count0;System.out.println();/ 内循环结果,则需要换行,起到控制打印格式的作用 elsecount = 0;/ 如果当前计数器count 的值大于n,则计数器count清零,接着执行外部循环System.out.println();程序的输出结果如图 17.1 所示。
7、17.1 Java基础编程试题(2)面试题2怎样实现元素互换考题题干从键盘上输入10个整数,并将其放入一个一维数组中,然后将其前5个元素与后5个元素对换,即:第1个元素与第10个元素互换,第2个元素与第9个元 素互换第5个元素与第6个元素互换。分别输出数组原来各元素的值和对换后各 元素的值。试题分析由于本题的要求是实现头尾元素互换,所以可以采用取利用临时变量的方法 来进行元素交换具体代码实现如下:packageprograme;importjava.io.BufferedReader;importjava.io.IOException;importjava.io.InputStreamRead
8、er;publicclassHuHuanDemo publicstaticvoidmain(Stringargs) print();publicstaticint write() BufferedReader buf = newBufferedReader10;/* 申请缓冲数组*/intarray newint10;for(inti = 0; i 10; i+)/* 赋值 */bufi = newBufferedReader(new InputStreamReader(System.in);/* 给每个缓冲区定义*/do/* 判断是否是空串,如是则重新输入 */n = 1;System.ou
9、t.print( 请输入第 + (i + 1) + 个整数 :);try/* 建立一个异常捕获*/arrayi = Integer.parseInt(bufi.readLine();/*执行串变整数*/* Integer.parseInt(str) - str转成 int 型 bufi.readLine()入字符流给buf 缓冲区并返回字符串 TOC o 1-5 h z */ catch(NumberFormatException e)/* 捕获异常*/System.out.println( 数据输入错误请重新输入 );/* 处理异常*/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你输入的数组是:);10; i+)/* 输出原数组+ );5;i+)/* 对换 */i;对换后的数组是:);61. for(inti0; i 10; i+)/* 输
11、出对换后数组*/System.out.print(aryi+ );System.out.println();69.程序输出的结果如图17.2所示17.1 Java基础编程试题(3)面试题3怎样实现元素排序考题题干( 1)用 Java 实现一种排序。(2) Java 类实现序列化的方法是什么?( 3)在COLLECTION架中,如果实现自然比较方法,则需要实现什么样的接口?试题分析排序是程序员经常遇到的,也是基本的技巧之一,一般的排序方法有插入排序、冒泡排序、选择排序、 Shell 排序、快速排序、归并排序、堆排序、 SortUtil 等。下面详细介绍 3 种排序方法。1冒泡排序( Bubble
12、 Sort )最简单的排序方法是冒泡排序法。这种方法的基本思想是,将待排序的元素看作是竖着排列的 气泡 ,较小的元素比较轻,从而要往上浮。在冒泡排序算法中要对这个 气泡 序列处理若干遍。所谓一遍处理,就是自底向上检查一遍这个序列,并时刻注意两个相邻元素的顺序是否正确。如果发现两个相邻元素的顺序不对,即轻 的元素在下面,就交换它们的位置。显然,处理一遍之后,最轻 的元素就浮到了最高位置;处理两遍之后,次轻 的元素就浮到了次高位置。在进行第二遍处理时,由于最高位置上的元素已是 最轻 元素,所以不必检查。一般地,第i 遍处理时,不必检查第 i 高位置以上的元素,因为经过前面i-1 遍的处理,它们已正
13、确地排序。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 遍处理仅
14、将 Li 插入 L1.i-1 的适当位置,使得L1.i 还是排好序的序列。要达到这个目的,可以用顺序比较的方法。首先比较Li 和 Li-1 ,如果 Li-1Li,则L1.i已排好序,第i遍处理就结束了;否则交换 Li与Li-1的位置,继续比较Li-1和Li-2,直到找到某一个位置j (1j i -1 ),使得 Lj Lj+1时为止。简言之,插入排序就是每一步都将一个待排数据按其大小插入到已经排序的数据中的适当位置,直到全部插入完毕。( 1)具体代码实现如下:packageprograme;importjava.util.*;classInsertionSort ArrayList list;/
15、num指的是数据的个数,modf旨的是可以产生随机数的范围在1mod之间intmod) publicInsertionSort(intnum,7. listnewArrayList(num);Random dom = newRandom();System.out.println( 排序之前的数组 :);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( 排序之后的数组:);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();程序的输出结果如图17.3所示。日17.1 Java基础编程试题(4)面试题4怎样实现Singleton模式编程考题题干请编写一个Singleton模式的程序。试题分析Singleton 模式的主要作用是保证在Java 应用程序中,一个类Class 只有一个实例存在。在很多操作中,比如建立目录数据库连接都需要这样的单线程操作。使用 Singleton 的好处还在于可以节省内存,因为它限制了实例的个数,有利于Java 垃圾回收。
18、一般 Singleton 模式通常的形式为:定义一个类,它的构造函数为 private的,它有一个static 的 private 变量,在类初始化时实例化,通过一个public 的getInstance 方法获取对它的引用,继而调用其中的方法。(两种实现方法,取一即可)packageprograme;publicclassSingleton privateSingleton() / 注意这是 private 只供内部调用privatefinalstaticSingletoninstance = newSingleton();/ 这里提供了一个供外部访问本class 的静态方法,可以直接访问g
19、etInstance() publicstaticSingletonreturninstance;或者:packageprograme;publicclassSingleton privatestaticSingleton instance = null;publicstaticsynchronizedSingletongetInstance()/ 使用时生成实例,提高了效率!if(instance = null)instance = newSingleton();returninstance;面试题 5 哥德巴赫猜想的近似证明考题题干哥德巴赫猜想是说任何一个大于 2 的偶数都能表示为两个素数
20、之和。请编写一个Java程序,验证1100内哥德巴赫猜想的正确性,也就是近似证明哥德巴赫 猜想。试题分析可以应用枚举的方法列出1100内的所有偶数。然后逐一验证每个偶数是否 满足哥德巴赫猜想的论证。如果有一个不符合,就意味着哥德巴赫猜想不成立。一个正偶数 m可以表示成 m=1+(m-1), m=2+(m-2), m=3+(m-3),m=m/2+m/2由于m/2的后半部分和前半部分的结果是一样的,只是加数顺序不 同,所以可以忽略。具体代码实现如下:packageprograme;publicclassGuess publicstaticvoidmain(Stringargs) System.ou
21、t.println( 在 1100范围内,现在开始证实哥德巴赫猜想: );6. if(Testify_Guess(1,100)System.out.println( 在 1100 范围内,哥德巴赫猜想是正确的。 ); elseSystem.out.println( 哥德巴赫猜想是错误的 );publicstaticbooleanTestify_Guess(intlow,inthigh) 判断1100范围内的所有偶数是否符合哥德巴赫猜想, 符合则返回 true ,反之则返回 falseinti, j = 0;booleanflag = true;for(i = low; i 2)/在1100之间
22、选取大于2的偶数进行猜想测试if(isGoldbach(i)/j+;j 用来控制输出格式 ,每行输出 5 个数据if(j = 5) System.out.println();j = 0; elseflag = false;break;returnflag;publicstaticbooleanisGoldbach(inta)/ 判断参数 a 是否符合哥德巴赫猜想inti;36. booleanflagfalse;37. for(i1; i = a / 2;i+)if(isPrime(i) & isPrime(a - i)/ 根据试题分析中的表达式,传入相关的两个参数flag= true;Sys
23、tem.out.print(a + =+ i + + (a - i) + );break;/ 只要有一个符合条件的就可以退出循环,判断下一个偶数returnflag; publicstaticbooleanisPrime(inti)/ 判断参数 i 是否是素数,是则返回 true 反之则返回 falseintn;booleanflag = true;if(1= i)/1 本身不是素数,因此需把这个特殊的数字抛出flag = false;for(n = 2; n = i - 1;n+)/* 判断i是否是素数的一个方法是看2i-1之间有其因子(能被 2 整除),有则不是素数返回 false ,反之
24、则返回 true*/if(i% n = 0) flag= false;break;returnflag;程序的输出结果如图 17.4 所示。17.1 Java基础编程试题(5)面试题6 怎样实现金额转换考题题干金额转换,阿拉伯数字的金额转换成中国传统的形式如:(1011) 一(壹仟零壹拾壹元整)输出。试题分析金额转换,在开发财务相关软件时会经常用到,也是软件本地化的一个需 要。一般开发公司或者团队都有相应的金额转换类或者是模块,配合报表工具,可 以实现良好的本地化。这里给出一个简单的金额转换代码,供读者参考。具体代码实现如下: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/ 创建 AmountOfConversion 的实例对象创建初始化
28、一个HashMap寸象privateHashMap NumberMap = newHashMap();privateHashMap HighnumberofMoney = newHashMap();创建初始化一个NumberFormatX寸象privateNumberFormat numberFormat = NumberFormat.getInstance();privateAmountOfConversion() 在用 new创建 AmountOfConversion 对象时, 为HashMap:寸象进行key-value的映射numberFormat.setMaximumFraction
29、Digits(4);/ 设置数据的小数部分的最大位数是4 位numberFormat.setMinimumFractionDigits(2);/ 设置数据的小数部分的最小位数是2 位numberFormat.setGroupingUsed(false);/* 设置此格式中是不可以使用组。如果设置可以使用组,则数 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、行金额转换的多种数据类型64. publicString format(String moneyStr) 65. Stringresult 不能进行金额转换!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) / 将参数中传入的阿拉伯数字转换成中文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. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 四川蜀能电力产业发展有限公司招聘笔试题库2025
- 浙江安全生产科学研究有限公司招聘笔试题库2025
- 教育教学课程设计
- 创客教育管理专业考试试题及答案2025年
- 2025年云计算技术考试试卷及答案
- 2025年行业标准与规范化管理考试试题及答案
- 2025年文化产业管理与运营能力考试试题及答案
- 2025年社会学基础知识考试试卷及答案
- 2025年体育专业生理论知识考试试题及答案
- 2025年非物质文化遗产保护与发展考试试卷及答案
- 中国真正丹道理法及工程次第阐真
- 2022年四川省成都市中考英语试卷及答案
- 商务英语写作实践智慧树知到答案章节测试2023年中北大学
- 新年春节廉洁过年过廉洁年端午节清廉文化中秋节廉洁过节优秀课件两篇
- GB/T 10920-2008螺纹量规和光滑极限量规型式与尺寸
- 认知宇宙飞船之星际探索
- 皮肤病理知识学习整理课件整理
- 人工智能课件213产生式表示法
- 空调维保质量保障体系及措施方案
- 建筑桩基技术规范2018
- 信息隐藏与数字水印课件(全)全书教学教程完整版电子教案最全幻灯片
评论
0/150
提交评论