常见的Java上机面试题

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

常见的Java上机面试题在程序员面试中,主要的考试形式分为笔试和上机编程考试两部分。笔试主要考查面试者的基础是否牢固;上机考试主要考查面试者的实际开发能力和技术技巧。上机编程考试,要求面试者能够根据题目的要求,使用一种编程工具,编写全部代码并调试运行。这主要是考查面试者代码书写和编程的熟练程度。值得注意的是,这类面试题要求能够正确运行,往往要求面试者使用比较原始的JDK编译方式也就是使用DOS命令提示符,而不是提供Eclipse或者JBuilder等快速开发环境。本章将经常出现的上机编程题进行分类,希望能够给读者带来帮助和启示。17.1Java基础编程试题(1)在上机编程类的面试题中,大部分涉及基础编程,例如算法、语法、常用的类等知识点。面试题1怎样截取字符串考题题干编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串。但是要保证汉字不被截半个,如我ABC4,应该截为我AB,输入我ABC汉DEF6,应该输出我ABC,而不是我ABC+汉的半个。试题分析本面试题容易产生困惑的是中文字符和英文字符,在这里需要考虑汉字和英文字符的占用字节数问题,中文字符占两个字节,英文字符占一个字节,理解了这个,就很容易完成本题了。参考答案具体代码实现如下:1.packagecore_java;2.importjava.util.Scanner;3.publicclassInterceptionStr{4.staticStringss;//要进行截取操作的字符串5.staticintn;//截取的字符串的字节数6.publicstaticvoidmain(String[]args){7.System.out.println(请输入字符串:);8.ScannerscStr=newScanner(System.in);//从键盘获取字符串9.ss=scStr.next();//将Scanner对象中的内容以字符串的形式取出来10.System.out.println(请输入字节数:);11.ScannerscByte=newScanner(System.in);//从键盘获取字符串12.n=scByte.nextInt();//将Scanner对象中的内容以数值的形式取出来13.Interception(setValue());//方法与方法间的套用14.}15.publicstaticString[]setValue(){//此方法的作用是将字符串转换成字符串数组16.String[]string=newString[ss.length()];//创建一个字符数组string17.for(inti=0;istring.length;i++){18.string[i]=ss.substring(i,i+1);19.//将字符串ss中的第i个字符取出,放入字符数组中string中20.}21.returnstring;//将这个字符数组返回22.}23.publicstaticvoidInterception(String[]string){24.intcount=0;25.Stringm=[\u4e00-\u9fa5];//汉字的正则表达试26.System.out.println(以每+n+字节划分的字符串如下所示:);27.for(inti=0;istring.length;i++){28.if(string[i].matches(m)){29.//将字符数组中的每一个元素与表则表达式进行匹配,如果相同则返回true30.count=count+2;//如果当前字符是汉字,计数器count就加231.}else{32.count=count+1;//如果当前字符不是汉字,计数器count就加133.}34.if(countn){//如果当前计数器count的值小于n,则输出当前字符35.System.out.print(string[i]);36.}elseif(count==n){//如果当前计数器count的值等于n,则输出当前字符37.System.out.print(string[i]);38.count=0;39.System.out.println();//内循环结果,则需要换行,起到控制打印格式的作用40.}else{41.count=0;//如果当前计数器count的值大于n,则计数器count清零,接着执行外部循环42.System.out.println();43.}44.}45.}46.}程序的输出结果如图17.1所示。17.1Java基础编程试题(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.publicstaticint[]write(){14.BufferedReader[]buf=newBufferedReader[10];/*申请缓冲数组*/15.intn;/*开关量和中间量*/16.intarray[]=newint[10];17.for(inti=0;i10;i++)/*赋值*/18.{19.buf[i]=newBufferedReader(newInputStreamReader(System.in));20./*给每个缓冲区定义*/21.do/*判断是否是空串,如是则重新输入*/22.{23.n=1;24.System.out.print(请输入第+(i+1)+个整数:);25.try/*建立一个异常捕获*/26.{27.array[i]=Integer.parseInt(buf[i].readLine());/*执行串变整数*/28./*29.*Integer.parseInt(str)-str转成int型buf[i].readLine()-30.*从系统输入缓冲区读入字符流给buf缓冲区并返回字符串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.int[]ary=write();47.ints;48.System.out.println(\n你输入的数组是:);49.for(inti=0;i10;i++)/*输出原数组*/50.{51.System.out.print(ary[i]+);52.}53.for(inti=0;i5;i++)/*对换*/54.{55.s=ary[i];56.ary[i]=ary[9-i];57.ary[9-i]=s;58.}59.60.System.out.println(\n对换后的数组是:);61.for(inti=0;i10;i++)/*输出对换后数组*/62.{63.System.out.print(ary[i]+);64.}65.System.out.println();66.}67.68.}69.程序输出的结果如图17.2所示。17.1Java基础编程试题(3)面试题3怎样实现元素排序考题题干(1)用Java实现一种排序。(2)Java类实现序列化的方法是什么?(3)在COLLECTION框架中,如果实现自然比较方法,则需要实现什么样的接口?试题分析排序是程序员经常遇到的,也是基本的技巧之一,一般的排序方法有插入排序、冒泡排序、选择排序、Shell排序、快速排序、归并排序、堆排序、SortUtil等。下面详细介绍3种排序方法。1.冒泡排序(BubbleSort)最简单的排序方法是冒泡排序法。这种方法的基本思想是,将待排序的元素看作是竖着排列的气泡,较小的元素比较轻,从而要往上浮。在冒泡排序算法中要对这个气泡序列处理若干遍。所谓一遍处理,就是自底向上检查一遍这个序列,并时刻注意两个相邻元素的顺序是否正确。如果发现两个相邻元素的顺序不对,即轻的元素在下面,就交换它们的位置。显然,处理一遍之后,最轻的元素就浮到了最高位置;处理两遍之后,次轻的元素就浮到了次高位置。在进行第二遍处理时,由于最高位置上的元素已是最轻元素,所以不必检查。一般地,第i遍处理时,不必检查第i高位置以上的元素,因为经过前面i-1遍的处理,它们已正确地排序。2.选择排序(SelectionSort)选择排序的基本思想是,对待排序的记录序列进行n-1遍的处理,第1遍处理是将L[1..n]中最小者与L[1]交换位置,第2遍处理是将L[2..n]中最小者与L[2]交换位置,……,第i遍处理是将L[i..n]中最小者与L[i]交换位置。这样,经过i遍处理之后,前i个记录的位置就已经按从小到大的顺序排列好了。当然,在实际操作时,也可以根据需要,通过从待排序的记录中选择最大者与其首记录交换位置,按从大到小的顺序进行排序处理。3.插入排序(InsertionSort)插入排序的基本思想是,经过i-1遍处理后,L[1..i-1]已排好序。第i遍处理仅将L[i]插入L[1..i-1]的适当位置,使得L[1..i]还是排好序的序列。要达到这个目的,可以用顺序比较的方法。首先比较L[i]和L[i-1],如果L[i-1]≤L[i],则L[1..i]已排好序,第i遍处理就结束了;否则交换L[i]与L[i-1]的位置,继续比较L[i-1]和L[i-2],直到找到某一个位置j(1≤j≤i-1),使得L[j]≤L[j+1]时为止。简言之,插入排序就是每一步都将一个待排数据按其大小插入到已经排序的数据中的适当位置,直到全部插入完毕。参考答案(1)具体代码实现如下:1.packageprograme;2.importjava.util.*;3.classInsertionSort{4.ArrayListlist;5.//num指的是数据的个数,mod指的是可以产生随机数的范围在1~mod之间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;ilist.size();i++){19.tempInt=(Integer)list.remove(i);20.if(tempInt.intValue()=((Integer)list.get(MaxSize-1))21..intValue()){22.li

1 / 19
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功