常见的Java上机面试题在程序员面试中,主要的考试形式分为笔试和上机编程考试两部分。
笔试主要考查面试者的基础是否牢固;上机考试主要考查面试者的实际开发能力和技术技巧。
上机编程考试,要求面试者能够根据题目的要求,使用一种编程工具,编写全部代码并调试运行。
这主要是考查面试者代码书写和编程的熟练程度。
值得注意的是,这类面试题要求能够正确运行,往往要求面试者使用比较原始的JDK编译方式也就是使用DOS命令提示符,而不是提供Eclipse或者JBuilder等快速开发环境。
本章将经常出现的上机编程题进行分类,希望能够给读者带来帮助和启示。
17.1 Java基础编程试题(1)在上机编程类的面试题中,大部分涉及基础编程,例如算法、语法、常用的类等知识点。
面试题1 怎样截取字符串考题题干编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串。
但是要保证汉字不被截半个,如"我ABC"4,应该截为"我AB",输入"我ABC汉DEF"6,应该输出"我ABC",而不是"我ABC+汉的半个"。
试题分析本面试题容易产生困惑的是中文字符和英文字符,在这里需要考虑汉字和英文字符的占用字节数问题,中文字符占两个字节,英文字符占一个字节,理解了这个,就很容易完成本题了。
参考答案具体代码实现如下:1.package core_java;2.import java.util.Scanner;3.public class InterceptionStr {4.static String ss;//要进行截取操作的字符串5.static int n;//截取的字符串的字节数6.public static void main(String[] args) {7. System.out.println("请输入字符串:");8. Scanner scStr = new Scanner(System.in);//从键盘获取字符串9. ss = scStr.next(); //将Scanner对象中的内容以字符串的形式取出来10. System.out.println("请输入字节数:");11. Scanner scByte = new Scanner(System.in);//从键盘获取字符串12. n = scByte.nextInt();//将Scanner对象中的内容以数值的形式取出来13. Interception(setValue());//方法与方法间的套用14. }15.public static String[] setValue() {//此方法的作用是将字符串转换成字符串数组16. String[] string = new String[ss.length()];//创建一个字符数组string17.for (int i = 0; i < string.length; i++) {18. string[i] = ss.substring(i, i + 1);19.//将字符串ss中的第i个字符取出,放入字符数组中string中20. }21.return string;//将这个字符数组返回22. }23.public static void Interception(String[] string) {24.int count = 0;25. String m = "[\u4e00-\u9fa5]";//汉字的正则表达试26. System.out.println("以每" + n + "字节划分的字符串如下所示:");27.for (int i = 0; i < string.length; i++) {28.if (string[i].matches(m)) {29.//将字符数组中的每一个元素与表则表达式进行匹配,如果相同则返回true30. count = count + 2;//如果当前字符是汉字,计数器count就加231. } else {32. count = count + 1;//如果当前字符不是汉字,计数器count就加133. }34.if (count < n) {//如果当前计数器count的值小于n,则输出当前字符35. System.out.print(string[i]);36. } else if (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.1 Java基础编程试题(2)面试题2 怎样实现元素互换考题题干从键盘上输入10个整数,并将其放入一个一维数组中,然后将其前5个元素与后5个元素对换,即:第1个元素与第10个元素互换,第2个元素与第9个元素互换…第5个元素与第6个元素互换。
分别输出数组原来各元素的值和对换后各元素的值。
试题分析由于本题的要求是实现头尾元素互换,所以可以釆用取利用临时变量的方法来进行元素交换。
参考答案具体代码实现如下:1.package programe;2.3.import java.io.BufferedReader;4.import java.io.IOException;5.import java.io.InputStreamReader;6.7.public class HuHuanDemo {8.public static void main(String args[]) {9. print();10.11. }12.13.public static int[] write() {14. BufferedReader[] buf = newBufferedReader[10];/* 申请缓冲数组 */15.int n;/* 开关量和中间量 */16.int array[] = new int[10];17.for (int i = 0; i < 10; i++)/* 赋值 */18. {19. buf[i] = new BufferedReader(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 (NumberFormatException e)/* 捕获异常 */33. {34. System.out.println("数据输入错误请重新输入");/* 处理异常 */35. n = 0;36. } catch (IOException e) {37. e.printStackTrace();38. }39. } while (n == 0);40. }41.return array;42.43. }44.45.public static void print() {46.int[] ary = write();47.int s;48. System.out.println("\n你输入的数组是:");49.for (int i = 0; i < 10; i++)/* 输出原数组 */50. {51. System.out.print(ary[i] + " ");52. }53.for (int i = 0; i < 5; 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 (int i = 0; i < 10; i++)/* 输出对换后数组 */62. {63. System.out.print(ary[i] + " ");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)最简单的排序方法是冒泡排序法。
这种方法的基本思想是,将待排序的元素看作是竖着排列的"气泡",较小的元素比较轻,从而要往上浮。
在冒泡排序算法中要对这个"气泡"序列处理若干遍。
所谓一遍处理,就是自底向上检查一遍这个序列,并时刻注意两个相邻元素的顺序是否正确。
如果发现两个相邻元素的顺序不对,即"轻"的元素在下面,就交换它们的位置。
显然,处理一遍之后,"最轻"的元素就浮到了最高位置;处理两遍之后,"次轻"的元素就浮到了次高位置。