搜档网
当前位置:搜档网 › 常见的Java上机面试题

常见的Java上机面试题

常见的Java上机面试题
常见的Java上机面试题

常见的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()];

//创建一个字符数组string

17.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.//将字符数组中的每一

个元素与表则表达式进行匹配,如果相同则返回true

30. count = count + 2;

//如果当前字符是汉字,计数器count就加2

31. } else {

32. count = count + 1;

//如果当前字符不是汉字,计数器count就加1

33. }

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 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 = new

BufferedReader[10];/* 申请缓冲数组 */

15.int n;/* 开关量和中间量 */

16.int array[] = new int[10];

17.for (int i = 0; i < 10; i++)/* 赋值 */

18. {

19. buf[i] = new BufferedReader(new

InputStreamReader(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)

最简单的排序方法是冒泡排序法。这种方法的基本思想是,将待排序的元素看作是竖着排列的"气泡",较小的元素比较轻,从而要往上浮。在冒泡排序算法中要对这个"气泡"序列处理若干遍。所谓一遍处理,就是自底向上检查一遍这个序列,并时刻注意两个相邻元素的顺序是否正确。如果发现两个相邻元素的顺序不对,即"轻"的元素在下面,就交换它们的位置。显然,处理一遍之后,"最轻"的元素就浮到了最高位置;处理两遍之后,"次轻"的元素就浮到了次高位置。在进行第二遍处理时,由于最高位置上的元素已是"最轻"元素,所以不必检查。一般地,第i遍处理时,不必检查第i高位置以上的元素,因为经过前面i-1遍的处理,它们已正确地排序。

2.选择排序(Selection Sort)

选择排序的基本思想是,对待排序的记录序列进行n-1遍的处理,第1遍处理是将L[1..n]中最小者与L[1]交换位置,第2遍处理是将L[2..n]中最小者与L[2]交换位置,……,第i遍处理是将L[i..n]中最小者与L[i]交换位置。这样,经过i遍处理之后,前i个记录的位置就已经按从小到大的顺序排列好了。

当然,在实际操作时,也可以根据需要,通过从待排序的记录中选择最大者与其首记录交换位置,按从大到小的顺序进行排序处理。

3.插入排序(Insertion Sort)

插入排序的基本思想是,经过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.package programe;

2.import java.util.*;

3.class InsertionSort {

4. ArrayList list;

5.// num指的是数据的个数,mod指的是可以

产生随机数的范围在1~mod之间

6.public InsertionSort(int num, int mod) {

7. list = new ArrayList(num);

8. Random dom = new Random();

9. System.out.println("排序之前的数组:");

10.for (int i = 0; i < num; i++) {

11. list.add(new Integer(Math.abs

(dom.nextInt()) % mod + 1));

12. System.out.println("list[" + i

+ "]=" + list.get(i));

13. }

14. }

15.public void SortIt() {

16. Integer tempInt;

17.int MaxSize = 1;

18.for (int i = 1; i < list.size(); i++) {

19. tempInt = (Integer) list.remove(i);

20.if (tempInt.intValue() >= ((Integer)

list.get(MaxSize - 1))

21. .intValue()) {

22. list.add(MaxSize, tempInt);

23. MaxSize++;

24. } else {

25.for (int j = 0; j < MaxSize; j++) {

26.if (((Integer) list.get(j))

.intValue() >= tempInt

27. .intValue()) {

28. list.add(j, tempInt);

29. MaxSize++;

30.break;

31. }

32. }

33. }

34. }

35. System.out.println("排序之后的数组:");

36.for (int i = 0; i < list.size(); i++) {

37. System.out.println("list[" + i + "]=" + list.get(

i));

38. }

39. }

40.public static void main(String[] args) {

41. InsertionSort is = new InsertionSort(10, 100);

42. is.SortIt();

43. }

44.}

17.1 Java基础编程试题(4)

面试题4 怎样实现Singleton模式编程

考题题干

请编写一个Singleton模式的程序。

试题分析

Singleton模式的主要作用是保证在Java应用程序中,一个类Class只有一个实例存在。在很多操作中,比如建立目录数据库连接都需要这样的单线程操作。使用Singleton的好处还在于可以节省内存,因为它限制了实例的个数,有利于Java垃圾回收。

一般Singleton模式通常的形式为:定义一个类,它的构造函数为private的,它有一个static 的private变量,在类初始化时实例化,通过一个public的getInstance方法获取对它的引用,继而调用其中的方法。

参考答案

(两种实现方法,取一即可)

1.package programe;

2.

3.public class Singleton {

4.private Singleton() {

5. }

6.// 注意这是private 只供内部调用

7.private final static Singleton instance = new Singleton()

;

8.

9.// 这里提供了一个供外部访问本class的静态方法,可以直接访问

10.public static Singleton getInstance() {

11.return instance;

12. }

13. }

或者:

1.package programe;

2.

3.public class Singleton {

4.private static Singleton instance = null;

5.

6.public static synchronized Singleton getInstance() {

7.// 使用时生成实例,提高了效率!

8.if (instance == null)

9. instance = new Singleton();

10.return instance;

11. }

12.}

面试题5 哥德巴赫猜想的近似证明

考题题干

哥德巴赫猜想是说任何一个大于2的偶数都能表示为两个素数之和。请编写一个Java程序,验证1~100内哥德巴赫猜想的正确性,也就是近似证明哥德巴赫猜想。

试题分析

可以应用枚举的方法列出1~100内的所有偶数。然后逐一验证每个偶数是否满足哥德巴赫猜想的论证。如果有一个不符合,就意味着哥德巴赫猜想不成立。

一个正偶数m可以表示成m=1+(m-1),m=2+(m-2),m=3+(m-3),……,m=m/2+m/2。由于m/2的后半部分和前半部分的结果是一样的,只是加数顺序不同,所以可以忽略。

参考答案

具体代码实现如下:

1.package programe;

2.

3.public class Guess {

4.public static void main(String[] args) {

5. System.out.println("在1~100范围内,

现在开始证实哥德巴赫猜想:");

6.if (Testify_Guess(1, 100)) {

7. System.out.println("在 1~100范围内,

哥德巴赫猜想是正确的。");

8. } else {

9. System.out.println("哥德巴赫猜想是错误的");

10. }

11.

12. }

13.

14.public static boolean Testify_Guess(int low, int high) {

15.// 判断1~100范围内的所有偶数是否符合哥德巴赫猜想,

符合则返回true,反之则返回false

16.int i, j = 0;

17.boolean flag = true;

18.for (i = low; i <= high; i++)

19.if (i % 2 == 0 && i > 2) //

在1~100之间选取大于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.return flag;

32. }

33.

34.public static boolean isGoldbach(int a) {

// 判断参数a是否符合哥德巴赫猜想

35.int i;

36.boolean flag = 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.// 只要有一个符合条件的就可以退出循环,判断下一个偶数

43. }

44. }

45.

46.return flag;

47. }

48.

49.public static boolean isPrime(int i) {

50.// 判断参数i是否是素数,是则返回true反之则返回false

51.int n;

52.boolean flag = true;

53.if (1 == i) // 1本身

不是素数,因此需把这个特殊的数字抛出

54. flag = false;

55.for (n = 2; n <= i - 1; n++)

/* 判断i是否是素数的一个方法是看2~i-1之间有其因子

(能被2整除),有则不是素数返回false,反之则返回true*/

56.if (i % n == 0) {

57. flag = false;

58.break;

59. }

60.return flag;

61. }

62.}

17.1 Java基础编程试题(5)

面试题6 怎样实现金额转换

考题题干

金额转换,阿拉伯数字的金额转换成中国传统的形式如:

(¥1011)→(壹仟零壹拾壹元整)输出。

试题分析

金额转换,在开发财务相关软件时会经常用到,也是软件本地化的一个需要。一般开发公司或者团队都有相应的金额转换类或者是模块,配合报表工具,可以实现良好的本地化。这里给出一个简单的金额转换代码,供读者参考。

参考答案

具体代码实现如下:

1.package programe;

2.import java.text.NumberFormat;

3.import java.util.HashMap;

4.import java.util.Scanner;

5.public class AmountOfConversion {

6.//定义HashMap的value值

7.public static final String EMPTY = "";

8.public static final String ZERO = "零";

9.public static final String ONE = "壹";

10.public static final String TWO = "贰";

11.public static final String THREE = "叁";

12.public static final String FOUR = "肆";

13.public static final String FIVE = "伍";

14.public static final String SIX = "陆";

15.public static final String SEVEN = "柒";

16.public static final String EIGHT = "捌";

17.public static final String NINE = "玖";

18.public static final String TEN = "拾";

19.public static final String HUNDRED = "佰";

20.public static final String THOUSAND = "仟";

21.public static final String TEN_THOUSAND = "万";

22.public static final String HUNDRED_MILLION = "亿";

23.public static final String YUAN = "元";

24.public static final String JIAO = "角";

25.public static final String FEN = "分";

26.public static final String DOT = ".";

27.private static AmountOfConversion formatter = null;

//创建AmountOfConversion的实例对象

28.//创建初始化一个HashMap对象

29.private HashMap NumberMap = new HashMap();

30.private HashMap HighnumberofMoney = new HashMap();

31.//创建初始化一个NumberFormat对象

32.private NumberFormat numberFormat =

NumberFormat.getInstance();

33.private AmountOfConversion() {

34.//在用new创建AmountOfConversion对象时,

为HashMap对象进行key-value的映射

35. numberFormat.setMaximumFractionDigits(4);

//设置数据的小数部分的最大位数是4位

36. numberFormat.setMinimumFractionDigits(2);

//设置数据的小数部分的最小位数是2位

37. numberFormat.setGroupingUsed(false);

/*设置此格式中是不可以使用组。如果设置可以使用组,

则数 1234567 可能被格式化为 "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.public static AmountOfConversion getInstance() {

//判断AmountOfConversion对象formatter是否初始化

59.if (formatter == null)

60. formatter = new AmountOfConversion();

61.return formatter;

62. }

63.//进行金额转换的多种数据类型

64.public String format(String moneyStr) {

65. String result = "不能进行金额转换!!";

66.if(isConversion(moneyStr)){

67. result = convertIntegerTochinese(moneyStr);

68. result = convertPointTochinese(result);

69. }

70.return result;

71. }

72.public String format(double moneyDouble) {

73.return format(numberFormat.format(moneyDouble));

74. }

75.public String format(int moneyInt) {

76.return format(numberFormat.format(moneyInt));

77. }

78.public String format(long moneyLong) {

79.return format(numberFormat.format(moneyLong));

80. }

81.public String format(Number moneyNum) {

82.return format(numberFormat.format(moneyNum));

83. }

84.private String convertIntegerTochinese(String moneyStr) {

//将参数中传入的阿拉伯数字转换成中文

85. String result;

86. StringBuffer C2CStrBufer = new StringBuffer();

87.for (int i = 0; i < moneyStr.length(); i++) {

88. C2CStrBufer.append(NumberMap.get(moneyStr.substri

ng(

89. i, i + 1)));

90. }

91.// 拾佰仟万亿等都是汉字里面才有的单位,加上它们

92.int indexOfDot = C2CStrBufer.indexOf(DOT);

93.int moneyPatternCursor = 1;

94.for (int i = indexOfDot - 1; i > 0; i--) {

95. C2CStrBufer.insert(i, HighnumberofMoney.get(EMPTY

96. + moneyPatternCursor));

97. moneyPatternCursor = moneyPatternCursor == 8 ? 1

98. : moneyPatternCursor + 1;

99. }

100. String fractionPart = C2CStrBufer.substring(C2CStrBuf er

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. C2CStrBufer.indexOf("零万

") + 2, TEN_THOUSAND);

119. }

120.while (C2CStrBufer.indexOf("零亿") != -1) {

121. C2CStrBufer.replace(C2CStrBufer.indexOf("零亿"), 122. C2CStrBufer.indexOf("零亿

") + 2, HUNDRED_MILLION);

123. }

124.while (C2CStrBufer.indexOf("零零") != -1) {

125. C2CStrBufer.replace(C2CStrBufer.indexOf("零零"), 126. C2CStrBufer.indexOf("零零") + 2, ZERO); 127. }

128.if (https://www.sodocs.net/doc/aa2241066.html,stIndexOf(ZERO) == C2CStrBufer.leng th() - 1)

129. C2CStrBufer.delete(C2CStrBufer.length() - 1, 130. C2CStrBufer.length());

131. C2CStrBufer.append(fractionPart);

132. result = C2CStrBufer.toString();

133.return result;

134. }

135.private String convertPointTochinese(String moneyStr) {

//对小数点后面的数字进行汉字处理

136. String result;

137. StringBuffer C2CStrBufer = new StringBuffer(moneyStr) ;

138.int indexOfDot = C2CStrBufer.indexOf(DOT);

139. C2CStrBufer.replace(indexOfDot, indexOfDot + 1, YUAN) ;

140. C2CStrBufer.insert(C2CStrBufer.length() - 1, JIAO); 141. C2CStrBufer.insert(C2CStrBufer.length(), FEN);

142.if (C2CStrBufer.indexOf("零角零分") != -1)// 没有零头,加整

143. C2CStrBufer.replace(C2CStrBufer.indexOf("零角零分"),

144. C2CStrBufer.length(), "整");

145.else if (C2CStrBufer.indexOf("零分") != -1)// 没有零分,加整

146. C2CStrBufer.replace(C2CStrBufer.indexOf("零分"), 147. C2CStrBufer.length(), "整");

148.else {

149.if (C2CStrBufer.indexOf("零角") != -1)

150. C2CStrBufer.delete(C2CStrBufer.indexOf("零角"),

151. C2CStrBufer.indexOf("零角") + 2); 152. }

153. result = C2CStrBufer.toString();

154.return result;

155. }

156.private boolean isConversion(String moneyStr) {

//判断参数传来的数据是否符合进行转换的条件

157.int fractionDigits = moneyStr.length() - moneyStr.indexOf(DOT) - 1;

158.boolean flag = true;

159.if (fractionDigits > 2){

160. System.out.println("金额" + moneyStr + "

的小数位多于两位。");

// 精度不能比分低

161. flag = false;

162. }

163.return flag;

164.

165. }

166.public static void main(String args[]) {

167. System.out.println("请输入金额数:");

168. Scanner scanner = new Scanner(System.in);

169. String str = scanner.next();

170. System.out.println("转换后的金额为:");

171. System.out.println(getInstance().format(new Double(st r)));

172. }

173.}

面试题7 爱因斯坦的阶梯问题

考题题干

爱因斯坦曾出过这样一道有趣的数学题:有一个长阶梯,每步上2阶,最后剩1阶;若每步上3阶,最后剩2阶;若每步上5阶,最后剩4阶;若每步上6阶,最后剩5阶;只有每步上7阶,最后一阶也不剩。请问该阶梯至少有多少阶。编写一个Java程序解决该问题。

试题分析

从上面的描述中,可以把这个问题用数学方程式的形式表达出来,代码如下:

1.x%2=1

2.x%3=2

3.x%5=4

4.x%6=5

5.x%7=0

从上面的表达式中不难看出,此方程x的解应该有无穷个,但这里要求的是那个最小的解。这个解一定是7的倍数,因为x%7=0,因此就用7的倍数依次与2、3、5、6进行取模运算,如果都符合了上面表达式的条件,那么这个数就是本题的答案,沿着这条思路,本题的具体代码如下。

参考答案

具体代码实现如下:

1.package core_java;

2.

3.public class StairsFlight {

4.

5.public static void main(String[] args) {

6.int x = 7, i, res = 0;

7.boolean flag = false;

8.for (i = 1; i <= 50; i++) { //

将循环次数定为50,表示寻找范围为:7~350之间

9.if ((x % 2 == 1) && (x % 3 == 2)

&& (x % 5 == 4) && (x % 6 == 5)) {

10. res = x;

11. flag = true;

12.break;

13. }

14. x = 7 * (i + 1);

15. }

16.if (true == flag)

17. System.out.println("关于爱因

斯坦的阶梯问题的答案是:" + res);

18.else

19. System.out.println("在7的1~50

倍这个范围内没有结果");

20. }

21.}

程序的输出结果如下:

1.关于爱因斯坦的阶梯问题的答案是:119

面试题8 如何判断回文数字

考题题干

有这样一类数字,它们顺着看和倒着看是相同的数,例如:121、656、2332等,这样的数字就称为回文数字。编写一个Java程序,判断从键盘接收的数字是否为回文数字。

试题分析

从回文数字的特点出发,弄清楚其特点是解决本问题的关键。解决方案可以通过将该数字倒置的办法来判断它是否是回文数字,例如:586,它的倒置结果为685,因为586!=685,故586不是回文数字。

参考答案

具体代码实现如下:

1.package core_java;

2.

3.import java.util.Scanner;

4.

5.public class Palindrome {

6.

7.public static void main(String[] args) {

8.int n;

9. System.out.println("请输入一个整数:");

10. Scanner scByte = new Scanner(System.in);

11. n = scByte.nextInt();

12.if (isPalindrome(n))

13. System.out.println(n + " 是回文!");

14.else

15. System.out.println(n + " 不是回文!!");

16. }

17.

18.public static boolean isPalindrome(int n) {

//判断输入的数字是否是回文

19.int m = reverse(n);

20.if (m == n)

21.return true;

22.else

23.return false;

24. }

25.

26.public static int reverse(int i) {

27.

28.//将输入的数字进行倒置

29.int s, j = 0;

30. s = i;

31.while (s != 0) {

32. j = j * 10 + s % 10;

33. s = s / 10;

34. }

35.return j;

36. }

37.}

java经典面试题汇总

Java基础方面: 1、作用域public,private,protected,以及不写时的区别 答:区别如下: 作用域当前类同一package 子孙类其他package public √√√√ protected √√√ × friendly √√ × × private √ × × × 不写时默认为friendly 2、Anonymous Inner Class (匿名内部类) 是否可以extends(继承)其它类,是否可以implements(实现)interface(接口) 答:匿名的内部类是没有名字的内部类。不能extends(继承) 其它类,但一个内部类可以作为一个接口,由另一个内部类实现 3、Static Nested Class 和 Inner Class的不同 答:Nested Class (一般是C++的说法),Inner Class (一般是JA V A的说法)。Java内部类与C++嵌套类最大的不同就在于是否有指向外部的引用上。注:静态内部类(Inner Class)意味着1创建一个static内部类的对象,不需要一个外部类对象,2不能从一个static内部类的一个对象访问一个外部类对象 4、&和&&的区别 答:&是位运算符,表示按位与运算,&&是逻辑运算符,表示逻辑与(and) 5、Collection 和 Collections的区别 答:Collection是集合类的上级接口,继承与他的接口主要有Set 和List. Collections是针对集合类的一个帮助类,他提供一系列静态方法实现对各种集合的搜索、排序、线程安全化等操作 6、什么时候用assert 答:assertion(断言)在软件开发中是一种常用的调试方式,很多开发语言中都支持这种机制。在实现中,assertion就是在程序中的一条语句,它对一个boolean表达式进行检查,一个正确程序必须保证这个boolean表达式的值为true;如果该值为false,说明程序已经处于不正确的状态下,系统将给出警告或退出。一般来说,assertion用于保证程序最基本、关键的正确性。assertion检查通常在开发和测试时开启。为了提高性能,在软件发布后,assertion检查通常是关闭的 7、String s = new String("xyz");创建了几个String Object 答:两个,一个字符对象,一个字符对象引用对象 8、Math.round(11.5)等於多少? Math.round(-11.5)等於多少 答: Math.round(11.5)==12;Math.round(-11.5)==-11;round方法返回与参数最接近的长整数,参数加1/2后求其floor 9、short s1 = 1; s1 = s1 + 1;有什么错? short s1 = 1; s1 += 1;有什么错 答:short s1 = 1; s1 = s1 + 1; (s1+1运算结果是int型,需要强制转换类型)short s1 = 1; s1 += 1;(可以正确编译) 10、Java有没有goto 答:java中的保留字,现在没有在java中使用 11、数组有没有length()这个方法? String有没有length()这个方法 答:数组没有length()这个方法,有length的属性。String有有length()这个方法 12、Overload和Override的区别。Overloaded的方法是否可以改变返回值的类型

常见的Java上机面试题

常见的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对象中的内容以数值的形式取出来

2019最新Java面试题,常见面试题及答案汇总

ava最新常见面试题+ 答案汇总 1、面试题模块汇总 面试题包括以下十九个模块:Java 基础、容器、多线程、反射、对象拷贝、Java Web 模块、异常、网络、设计模式、Spring/Spring MVC、Spring Boot/Spring Cloud、Hibernate、Mybatis、RabbitMQ、Kafka、Zookeeper、MySql、Redis、JVM 。如下图所示: 可能对于初学者不需要后面的框架和JVM 模块的知识,读者朋友们可根据自己的情况,选择对应的模块进行阅读。 适宜阅读人群 需要面试的初/中/高级java 程序员 想要查漏补缺的人 想要不断完善和扩充自己java 技术栈的人 java 面试官 具体面试题 下面一起来看208 道面试题,具体的内容。 一、Java 基础 1.JDK 和JRE 有什么区别? 2.== 和equals 的区别是什么? 3.两个对象的hashCode()相同,则equals()也一定为true,对吗? 4.final 在java 中有什么作用? 5.java 中的Math.round(-1.5) 等于多少? 6.String 属于基础的数据类型吗? 7.java 中操作字符串都有哪些类?它们之间有什么区别? 8.String str="i"与String str=new String(“i”)一样吗? 9.如何将字符串反转? 10.String 类的常用方法都有那些? 11.抽象类必须要有抽象方法吗? 12.普通类和抽象类有哪些区别? 13.抽象类能使用final 修饰吗?

14.接口和抽象类有什么区别? 15.java 中IO 流分为几种? 16.BIO、NIO、AIO 有什么区别? 17.Files的常用方法都有哪些? 二、容器 18.java 容器都有哪些? 19.Collection 和Collections 有什么区别? 20.List、Set、Map 之间的区别是什么? 21.HashMap 和Hashtable 有什么区别? 22.如何决定使用HashMap 还是TreeMap? 23.说一下HashMap 的实现原理? 24.说一下HashSet 的实现原理? 25.ArrayList 和LinkedList 的区别是什么? 26.如何实现数组和List 之间的转换? 27.ArrayList 和Vector 的区别是什么? 28.Array 和ArrayList 有何区别? 29.在Queue 中poll()和remove()有什么区别? 30.哪些集合类是线程安全的? 31.迭代器Iterator 是什么? 32.Iterator 怎么使用?有什么特点? 33.Iterator 和ListIterator 有什么区别? 34.怎么确保一个集合不能被修改?

百一测评——Java经典面试题 带答案

职业技能题库&在线云笔试平台https://www.sodocs.net/doc/aa2241066.html, 试卷名称:Java经典面试题带答案 试卷描述:java笔试题目、招聘笔试、微信考试、在线考试 试卷链接:https://www.sodocs.net/doc/aa2241066.html,/store/open/paperInfo/41651 试卷限时:50分 一.单项选择题 每题分值:2.5分 是否题目乱序:是 是否选项乱序:是 是否可回溯:是 难度:中 1.[单选]Java是从()语言改进重新设计。 A.Ada B.C++ C.Pasacal D.BASIC 答案:B 2.[单选]下列语句哪一个正确() A.Java程序经编译后会产生machine code B.Java程序经编译后会产生byte code C.Java程序经编译后会产生DLL D.以上都不正确

职业技能题库&在线云笔试平台https://www.sodocs.net/doc/aa2241066.html, 答案:B 3.[单选]下列说法正确的有() A.class中的constructor不可省略 B.constructor必须与class同名,但方法不能与class同名 C.constructor在一个对象被new时执行 D.一个class只能定义一个constructor 答案:C 4.[单选]提供Java存取数据库能力的包是() A.java.sql B.java.awt C.https://www.sodocs.net/doc/aa2241066.html,ng D.java.swing 答案:A 5.[单选]下列运算符合法的是() A.&& B.<> C.if D.:= 答案:A 6.[单选]执行如下程序代码 a=0;c=0;

职业技能题库&在线云笔试平台https://www.sodocs.net/doc/aa2241066.html, do{ --c; a=a-1; }while(a>0); 后,C的值是() A.0 B.1 C.-1 D.死循环 答案:C 7.[单选]下列哪一种叙述是正确的() A.abstract修饰符可修饰字段、方法和类 B.抽象方法的body部分必须用一对大括号{}包住 C.声明抽象方法,大括号可有可无 D.声明抽象方法不可写出大括号 答案:D 8.[单选]下列语句正确的是() A.形式参数可被视为localvariable B.形式参数可被字段修饰符修饰 C.形式参数为方法被调用时,真正被传递的参数 D.形式参数不可以是对象

Java经典面试题大全_带答案

Java经典面试题带答案一、单项选择题 1.Java是从()语言改进重新设计。 A.Ada B.C++ C.Pasacal D.BASIC 答案:B 2.下列语句哪一个正确() A.Java程序经编译后会产生machine code B.Java程序经编译后会产生byte code(字节码) C.Java程序经编译后会产生DLL D.以上都不正确 答案:B 3.下列说法正确的有() A.class中的constructor不可省略 B.constructor必须与class同名,但方法不能与class同名C.constructor在一个对象被new时执行(构造器) D.一个class只能定义一个constructor 答案:C 4.提供Java存取数据库能力的包是() A.Java.sql /sql/数据库还有Oracle 也是一种数据库 B.java.awt C.https://www.sodocs.net/doc/aa2241066.html,ng D.java.swing 答案:A 5.下列运算符合法的是() A.&& B.<> C.if D.:= 答案:A 6.执行如下程序代码 a=0;c=0; do{ --c; a=a-1; }while(a>0); 后,C的值是() A.0 B.1 C.-1 D.死循环

答案:C 7.下列哪一种叙述是正确的() A.abstract修饰符可修饰字段、方法和类 B.抽象方法的body部分必须用一对大括号{}包住 C.声明抽象方法,大括号可有可无 D.声明抽象方法不可写出大括号 答案:D 8.下列语句正确的是() A.形式参数可被视为localvariable B.形式参数可被字段修饰符修饰 C.形式参数为方法被调用时,真正被传递的参数 D.形式参数不可以是对象 答案:A 9.下列哪种说法是正确的() A.实例方法可直接调用超类的实例方法 B.实例方法可直接调用超类的类方法 C.实例方法可直接调用其他类的实例方法 D.实例方法可直接调用本类的类方法 答案:D 二、多项选择题 1.Java程序的种类有() A.类(Class) B.Applet C.Application D.Servlet 2.下列说法正确的有() A.环境变量可在编译sourcecode时指定 B.在编译程序时,所能指定的环境变量不包括class path C.javac一次可同时编译数个Java源文件 D.javac.exe能指定编译结果要置于哪个目录(directory)答案:BCD 3.下列标识符不合法的有() A.new B.$Usdollars C.1234 D.car.taxi 答案:ACD 4.下列说法错误的有() A.数组是一种对象 B.数组属于一种原生类 C.intnumber=[]={31,23,33,43,35,63} D.数组的大小可以任意改变 答案:BCD 5.不能用来修饰interface的有()

Java经典面试编程设计题(含答案)

1、程序实现目标:输入一个字符串,将其各个字符对应的ASCII值加5后,输出结果。程序要求:该字符串只包含小写字母,若其值加5后的字符值大于'z',将其转换成从a开始的字符。 1. package com.iotex; 2. public class StringParseASCII { 3. 4. public static void main(String[] args) { 5. System.out.print(stringParseASCII("abx")); 6. } 7. 8. public static String stringParseASCII(String str){ 9. StringBuffer result = new StringBuffer(); 10. char tmp; 11. for(int i = 0;i 'z') { 14. result.append('a'); 15. }else { 16. result.append(tmp); 17. } 18. } 19. 20. return result.toString(); 21. } 22. 23. } 1. package com.iotex; 2. 3. public class StringParseASCII { 4. 5. public static void main(String[] args) { 6. System.out.print(stringParseASCII("abx")); 7. } 8. 9. public static String stringParseASCII(String str){ 10. StringBuffer result = new StringBuffer(); 11. char tmp; 12. for(int i = 0;i 'z') { 15. result.append('a'); 16. }else { 17. result.append(tmp);

java编程常见面试题目

第一,谈谈final, finally, finalize的区别。 第二,Anonymous Inner Class (匿名内部类) 是否可以extends(继承)其它类,是否可以implements(实现)interface(接口)? 第三,Static Nested Class 和Inner Class的不同, 第四,&和&&的区别。 第五,HashMap和Hashtable的区别。 第六,Collection 和Collections的区别。 第七,什么时候用assert。 第八,GC是什么? 为什么要有GC? (基础)。 第九,String s = new String("xyz");创建了几个String Object? 第十,Math.round(11.5)等於多少? Math.round(-11.5)等於多少? 第十一,short s1 = 1; s1 = s1 + 1;有什么错? short s1 = 1; s1 += 1;有什么错? 第十二,sleep() 和wait() 有什么区别? 搞线程的最爱 第十三,Java有没有goto? 第十四,数组有没有length()这个方法? String有没有length()这个方法?

第十五,Overload和Override的区别。Overloaded的方法是否可以改变返回值的类型? 第十六,Set里的元素是不能重复的,那么用什么方法来区分重复与否呢? 是用==还是equals()? 它们有何区别? 第十七,给我一个你最常见到的runtime exception。 第十八,error和exception有什么区别? 第十九,List, Set, Map是否继承自Collection接口? 第二十,abstract class和interface有什么区别? 第二十一,abstract的method是否可同时是static,是否可同时是native,是否可同时是synchronized? 第二十二,接口是否可继承接口? 抽象类是否可实现(implements)接口? 抽象类是否可继承实体类(concrete class)? 第二十三,启动一个线程是用run()还是start()? 第二十四,构造器Constructor是否可被override? 第二十五,是否可以继承String类? 第二十六,当一个线程进入一个对象的一个synchronized方法后,其它线程是否可进入此对象的其它方法? 第二十七,try {}里有一个return语句,那么紧跟在这个try后的finally {}里的code会不会被执行,什么时候被执行,在return前还是后?

Java经典面试笔试题及答案

1.什么是对象序列化,为什么要使用? 所谓对象序列化就是把一个对象以二进制流的方式保存到硬盘上。好处:方便远程调用。 2.值传递与引用传递的区别? 所谓值传递就是把一个对象的值传给一个新的变量,但是系统会给这个新的变量开辟一个新的内存空间。不会改变原有的值所谓引用传递就是把一个对象在堆中保存的数据传递给一个变量,此时新的变量与原有的变量对应同一个内存存储空间,当新的变量修改对象的属性时,内存中的数据也会修改。 3.接口与抽象类的区别? 1:接口里面不可以实现方法体,抽象类可以实现方法体。 2:接口可以多继承接口,抽象类不可以。 3:接口需要被子类实现,抽象类是要被子类继承(单一继承)。 4:接口中只能有公有的方法和属性而且必须赋初始值,抽象类中可以有私有方法和属性. 5: 接口中不能存在静态方法,但属性可以和final,抽象类中方法中可以有静态方法,属性也可以。 4.谈谈继承,为什么要使用继承? 所谓继承就是找出几个类中共同的部分,提取出来作为父类。而子类只需要继承父类,就可以共享父类的方法。 使用继承能够减少重复的代码。 5.方法重载的好处?

所谓重载就是在一个类中可以定义多个相同的方法,但是方法的参数类型和参数的个数以及顺序要不同。 重载的好处就是能够让我们很快的掌握该方法的功能,我们只要要记住该方法就能很快的理解该方法的参数以及参数的作用 6.项目中印象最深的部分? 我觉得在该项目中我体现到了反射技术的强大之处,原来我一直不清楚反射是一种什么样的技术,只知道一些概念上的知识,经过这个项目之后,终于知道该怎样灵活运用反射,以及在什么时候运用。 谈谈你对面向对象的理解与认识? 我觉得使用面向对象这种思维的方式比较符合我们人类的思想,不需要去学习一些什么新的思考方式,就按照现实生活做的一些故事就能让人理解该内容的知识以及他们的作用。 我的看法就是: 1:当加入新的功能的时候不会修改原有的代码。(面向接口编程) 2: 当我们写的一个类可以重复的运用在其他项目中。(代码的复用性) 3:当写一个新类的时候要考虑到他的可扩展性。(灵活性) 7.谈谈集合框架? 集合框架分为三部分,第一部分是collection接口,第二部分是Map接口、第三部分是collections帮助类 首先说一下collection接口,collection接口下面的接口分为set 接口、list接口,在往下面就是他们一些实现类。

常见JAVA面试题

名词解释: 1.HTTP:Hypertext Transfer Protocol 2.J2EE:Java 2 Platfore,Enterprise Edition 3.JNDI:Java Naming and Directory Interface 4.SOAP:Simple Object Access Protocol 5.UDDI:Universal Description Discovery and Integration 6.OOP:Object Oriented Programming 7.AOP:Aspect Oriented Programming 8.IOC:Inversion of Control 9.DI:Dependence Injection 10.Web:World Wide Web 11.ORM:Object/Relation Mapping 12.DOM:Document Object Model 13.TCP: Transmission Control Protocol 14.UDP : User Datagram Protocol 15.IP : Internet Protocol 编程基础: 1.描述面向对象特征?请一个例子说明,比方说车? 面向对象的4个基本特征:封装性、继承性和多态性。 a)所有东西都是对象。 b)程序是一大堆队形的组合。

c)每个对象都有自己的存储空间,可容纳其他对象。 d)每个对象都有一种类型。 e)同一类所有对象都能接收相同的消息。 封装是面向对象编程的特征之一,也是类和对象的基本特征。封装将数据以及加在这些数据上的操作组织在一起,成为有独立意义的构件。外部无法直接访问这些封装了的数据,从而保证了这些数据的正确性。如果这些数据发成了差错,也很容易定位错误是由哪些操作引起的。 继承是一种联接性的层次模型,并且允许和鼓励类的重用,他提供了一种明确表述共性的方法。对象的一种新类可以从现有的类中派生,这个过程称之为类的继承。新类继承了原始类的特征,新类称之为原始类的派生类(子类),而原始类称之为新类的基类(父类)。派生类可以修改或增加新的方法使之更适合特殊的需求。这也体现了大自然中一般与特殊的关系。继承性很好的解决了软件的可重用问题。比如说:所有的windows应用程序都有一个窗口,它们可以看作都是从一个窗口类派生出来的。但是有的应用程序用于文字处理,有的程序用于绘图,这是由于派生出了不同的子类,各个子类添加了不同的特性。 多态性是指允许不同的类的对象对同一消息做出响应。比如同样的加法,把两个时间加在一起和把两个整数加在一起肯定完全不同,又比如,同样的选择“编辑”、“粘贴”操作,在字处理程序和绘图程序中有不同的效果。多态性包括参数化多态性和运行时多态性,多态语言具有灵活。抽象,行为共享、代码共享的优势,很好解决了应用程序函数同名问题。 2.abstractclass和interface有什么区别? 声明方法的存在而不去实现它的类被叫做抽象类(abstract class),它用于要创

Java常见的22个面试问题

Java常见的22个面试问题 1.Iterator和ListIterator的区别是什么? 下面列出了他们的区别: Iterator可用来遍历Set和List集合,但是ListIterator只能用来遍历List。 Iterator对集合只能是前向遍历,ListIterator既可以前向也可以后向。 ListIterator实现了Iterator接口,并包含其他的功能,比如:增加元素,替换元素,获取前一个和后一个元素的索引,等等 2.快速失败(fail-fast)和安全失败(fail-safe)的区别是什么? Iterator的安全失败是基于对底层集合做拷贝,因此,它不受源集合上修改的影响。java.util 包下面的所有的集合类都是快速失败的,而java.util.concurrent包下面的所有的类都是安全失败的。快速失败的迭代器会抛出ConcurrentModificationException异常,而安全失败的迭代器永远不会抛出这样的异常。 3.Java中的HashMap的工作原理是什么? Java中的HashMap是以键值对(key-value)的形式存储元素的。HashMap需要一个hash 函数,它使用hashCode()和equals()方法来向集合/从集合添加和检索元素。当调用put()方法的时候,HashMap会计算key的hash值,然后把键值对存储在集合中合适的索引上。如果key已经存在了,value会被更新成新值。HashMap的一些重要的特性是它的容量(capacity),负载因子(load factor)和扩容极限(threshold resizing)。 4.hashCode()和equals()方法的重要性体现在什么地方? Java中的HashMap使用hashCode()和equals()方法来确定键值对的索引,当根据键获取值的时候也会用到这两个方法。如果没有正确的实现这两个方法,两个不同的键可能会有相同的hash值,因此,可能会被集合认为是相等的。而且,这两个方法也用来发现重复元素。所以这两个方法的实现对HashMap的精确性和正确性是至关重要的。

JAVA基础面试题(经典)

基础知识部分: 1. JDK是什么?JRE是什么? a) 答:JDK:java开发工具包。JRE:java运行时环境。 2. 什么是java的平台无关性? a) 答:Java源文件被编译成字节码的形式,无论在什么系统环境下,只要有java虚拟机就能运行这个字节码文件。也就是一处编写,处处运行。这就是java的跨平台性。 3. 在一台电脑上配置java环境,path起什么作用?如何配置? a) 答:path的作用是在DOS环境下,能在任意位置使用JD K目录中bin文件夹中的可执行程序,来编译执行java程序。 b) 在环境变量中找到path变量,把bin文件夹的绝对路径加上即可。

4. 什么样的标识符是合法的? a) 由字母、数字、_和$组成,长度不限。其中字母可以是大写或小写的英文字母,数字为0到9。 b) 标识符的第一个字符不能是数字。 c) 标识符区分大小写。 d) 标识符不能包含空格。 5. Java有几种基本数据类型? a) byte,short,int,long,float,double,char,bool ean 6. 什么是隐式类型转换?什么是显示类型转换? a) 当将占位数少的类型赋值给占位数多的类型时,Java自动使用隐式类型转换。

b) 当把在级别高的变量的值赋给级别底变量时,必须使用显示类型转换运算。 7. &&和&区别,||和|区别? a) &&和||是短路与,短路或,当左边的表达式能判断当前结果,则不判断右边的表达式。 b) 而& 和|则将两边的表达式都运算完毕后,再算结果。 8. break,continue区别? a) break结束所有循环,continue结束当次循环,进入下次循环。 9. 类的命名规则是什么? a) 如果类名使用拉丁字母,那么名字的首写字母使用大写字母。

115个Java面试题和答案

115个Java面试题和答案 面向对象编程(OOP) Java是一个支持并发、基于类和面向对象的计算机编程语言。下面列出了面向对象软件开发的优点: 代码开发模块化,更易维护和修改。 代码复用。 增强代码的可靠性和灵活性。 增加代码的可理解性。 面向对象编程有很多重要的特性,比如:封装,继承,多态和抽象。下面的章节我们会逐个分析这些特性。 封装 封装给对象提供了隐藏内部特性和行为的能力。对象提供一些能被其他对象访问的方法来改变它内部的数据。在Java当中,有3种修饰符:public,private和protected。每一种修饰符给其他的位于同一个包或者不同包下面对象赋予了不同的访问权限。 下面列出了使用封装的一些好处: 通过隐藏对象的属性来保护对象内部的状态。 提高了代码的可用性和可维护性,因为对象的行为可以被单独的改变或者是扩展。 禁止对象之间的不良交互提高模块化。 参考这个文档获取更多关于封装的细节和示例。 多态 多态是编程语言给不同的底层数据类型做相同的接口展示的一种能力。一个多态类型上的操作可以应用到其他类型的值上面。 继承

继承给对象提供了从基类获取字段和方法的能力。继承提供了代码的重用行,也可以在不修改类的情况下给现存的类添加新特性。 抽象 抽象是把想法从具体的实例中分离出来的步骤,因此,要根据他们的功能而不是实现细节来创建类。Java支持创建只暴漏接口而不包含方法实现的抽象的类。这种抽象技术的主要目的是把类的行为和实现细节分离开。 抽象和封装的不同点 抽象和封装是互补的概念。一方面,抽象关注对象的行为。另一方面,封装关注对象行为的细节。一般是通过隐藏对象内部状态信息做到封装,因此,封装可以看成是用来提供抽象的一种策略。 常见的Java问题 1.什么是Java虚拟机?为什么Java被称作是“平台无关的编程语言”? Java虚拟机是一个可以执行Java字节码的虚拟机进程。Java源文件被编译成能被Java虚拟机执行的字节码文件。 Java被设计成允许应用程序可以运行在任意的平台,而不需要程序员为每一个平台单独重写或者是重新编译。Java虚拟机让这个变为可能,因为它知道底层硬件平台的指令长度和其他特性。 和JRE的区别是什么? Java运行时环境(JRE)是将要执行Java程序的Java虚拟机。它同时也包含了执行applet 需要的浏览器插件。Java开发工具包(JDK)是完整的Java软件开发包,包含了JRE,编译器和其他的工具(比如:JavaDoc,Java调试器),可以让开发者开发、编译、执行Java应用程序。 3.”static”关键字是什么意思?Java中是否可以覆盖(override)一个private或者是static的方法?

百一测评——Java经典面试题 带答案

试卷名称:Java经典面试题带答案 试卷描述:java笔试题目、招聘笔试、微信考试、在线考试试卷链接:试卷限时:50分 一.单项选择题 每题分值:分 是否题目乱序:是 是否选项乱序:是 是否可回溯:是 难度:中 1.[单选]Java是从()语言改进重新设计。 A.Ada B.C++ C.Pasacal D.BASIC 答案:B 2.[单选]下列语句哪一个正确() A.Java程序经编译后会产生machine code B.Java程序经编译后会产生byte code C.Java程序经编译后会产生DLL D.以上都不正确 答案:B 3.[单选]下列说法正确的有()

A.class中的constructor不可省略 B.constructor必须与class同名,但方法不能与class同名C.constructor在一个对象被new时执行 D.一个class只能定义一个constructor 答案:C 4.[单选]提供Java存取数据库能力的包是() A. B. C. D. 答案:A 5.[单选]下列运算符合法的是() A.&& B.<> C.if D.:= 答案:A 6.[单选]执行如下程序代码 a=0;c=0; do{ --c; a=a-1;

}while(a>0); 后,C的值是() A.0 B.1 C.-1 D.死循环 答案:C 7.[单选]下列哪一种叙述是正确的()A.abstract修饰符可修饰字段、方法和类 B.抽象方法的body部分必须用一对大括号{}包住C.声明抽象方法,大括号可有可无 D.声明抽象方法不可写出大括号 答案:D 8.[单选]下列语句正确的是() A.形式参数可被视为localvariable B.形式参数可被字段修饰符修饰 C.形式参数为方法被调用时,真正被传递的参数D.形式参数不可以是对象 答案:A 9.[单选]下列哪种说法是正确的() A.实例方法可直接调用超类的实例方法 B.实例方法可直接调用超类的类方法

【2020最新Java面试题资料】30个Java经典的集合面试题

1.Java集合框架是什么?说出一些集合框架的优点? 每种编程语言中都有集合,最初的版本包含几种集合类:Vector Stack HashTable和Array。 随着集合的广泛使用,Java1.2提出了囊括所有集合接口、实现和算法的集合框架。在保证线程安全的情况下使用泛型和并发集合类,已经经历了很久。它还包括在并发包中,阻塞接口以及它们的实现。 集合框架的部分优点如下: (1)使用核心集合类降低开发成本,而非实现我们自己的集合类。 (2)随着使用经过严格测试的集合框架类,代码质量会得到提高。 (3)通过使用JDK附带的集合类,可以降低代码维护成本。 (4)复用性和可操作性。 2.集合框架中的泛型有什么优点? 1.Java1.5引入了泛型,所有的集合接口和实现都大量地使用它。 2.泛型允许我们为集合提供一个可以容纳的对象类型,因此,如果你添加其它类型的任何元素,它会在编译时报错。 3.这避免了在运行时出现ClassCastException,因为你将会在编译时得到报错信息。 4.泛型也使得代码整洁,我们不需要使用显式转换和instanceOf操作符。 5.它也给运行时带来好处,因为不会产生类型检查的字节码指令。 3.Java集合框架的基础接口有哪些? Collection为集合层级的根接口。一个集合代表一组对象,这些对象即为它的元素。平台不提供这个接口任何直接的实现。 Set是一个不能包含重复元素的集合。这个接口对数学集合抽象进行建模,被用来代表集合,就如一副牌。 List是一个有序集合,可以包含重复元素。你可以通过它的索引来访问任何元素。List更像长度动态变换的数组。 Map是一个将key映射到value的对象.一个Map不能包含重复的key:每个key最多只能映射一个value。

20道常见初级java面试题入职者必备

20道常见初级Java面试题,入职者必备! 大家都应该知道Java是目前最火的计算机语言之一,连续几年蝉联最受程序员欢迎的计算机语言榜首,因此每年新入职Java程序员也数不胜数。究竟这些新入职的Java程序员是入坑还是入行呢?那就要看他们对于Java这门语言的看法了。不管如何,在入职之前,问题会要经过面试,那么Java面试题是怎么出的呢?下面罗列了20道常见初级Java面试题,简直是入职者必备! 1、面向对象的特征有哪些方面? 答:面向对象的特征主要有以下几个方面: - 抽象:抽象是将一类对象的共同特征总结出来构造类的过程,包括数据抽象和行为抽象两方面。抽象只关注对象有哪些属性和行为,并不关注这些行为的细节是什么。 - 继承:继承是从已有类得到继承信息创建新类的过程。提供继承信息的类被称为父类(超类、基类);得到继承信息的类被称为子类(派生类)。继承让变化中的软件系统有了一定的延续性,同时继承也是封装程序中可变因素的重要手段(如果不能理解请阅读阎宏博士的《Java与模式》或《设计模式精解》中关于桥梁模式的部分)。 - 封装:通常认为封装是把数据和操作数据的方法绑定

起来,对数据的访问只能通过已定义的接口。面向对象的本质就是将现实世界描绘成一系列完全自治、封闭的对象。我们在类中编写的方法就是对实现细节的一种封装;我们编写一个类就是对数据和数据操作的封装。可以说,封装就是隐藏一切可隐藏的东西,只向外界提供最简单的编程接口(可以想想普通洗衣机和全自动洗衣机的差别,明显全自动洗衣机封装更好因此操作起来更简单;我们现在使用的智能手机也是封装得足够好的,因为几个按键就搞定了所有的事情)。 - 多态性:多态性是指允许不同子类型的对象对同一消息作出不同的响应。简单的说就是用同样的对象引用调用同样的方法但是做了不同的事情。多态性分为编译时的多态性和运行时的多态性。如果将对象的方法视为对象向外界提供的服务,那么运行时的多态性可以解释为:当A系统访问B 系统提供的服务时,B系统有多种提供服务的方式,但一切对A系统来说都是透明的(就像电动剃须刀是A系统,它的供电系统是B系统,B系统可以使用电池供电或者用交流电,甚至还有可能是太阳能,A系统只会通过B类对象调用供电的方法,但并不知道供电系统的底层实现是什么,究竟通过何种方式获得了动力)。方法重载(overload)实现的是编译时的多态性(也称为前绑定),而方法重写(override)实现的是运行时的多态性(也称为后绑定)。运行时的多态是面向对象最精髓的东西,要实现多态需要做两件事:1). 方法重写(子类

JAVA常见面试题及解答2015版

JAVA常见面试题及解答(精华) 1)transient和volatile是java关键字吗?(瞬联) 如果用transient声明一个实例变量,当对象存储时,它的值不需要维持。例如:class T { transient int a; //不需要维持 int b; //需要维持 } 这里,如果T类的一个对象写入一个持久的存储区域,a的内容不被保存,但b 的将被保存。 volatile修饰符告诉编译器被volatile修饰的变量可以被程序的其他部分改变。在多线程程序中,有时两个或更多的线程共享一个相同的实例变量。考虑效率问题,每个线程可以自己保存该共享变量的私有拷贝。实际的变量副本在不同的时候更新,如当进入synchronized方法时。用strictfp修饰类或方法,可以确保浮点运算(以及所有切断)正如早期的Java版本那样准确。切断只影响某些操作的指数。当一个类被strictfp修饰,所有的方法自动被strictfp修饰。 strictfp的意思是FP-strict,也就是说精确浮点的意思。在Java虚拟机进行浮点运算时,如果没有指定strictfp关键字时,Java的编译器以及运行环境在对浮点运

算的表达式是采取一种近似于我行我素的行为来完成这些操作,以致于得到的结果往往无法令你满意。而一旦使用了strictfp来声明一个类、接口或者方法时,那么所声明的范围内Java的编译器以及运行环境会完全依照浮点规范IEEE-754来执行。因此如果你想让你的浮点运算更加精确,而且不会因为不同的硬件平台所执行的结果不一致的话,那就请用关键字strictfp。 你可以将一个类、接口以及方法声明为strictfp,但是不允许对接口中的方法以及构造函数声明strictfp关键字,例如下面的代码: strictfp interface A {} public strictfp class FpDemo1 { strictfp void f() {} } 2. 错误的使用方法 interface A { strictfp void f(); } public class FpDemo2 { strictfp FpDemo2() {} } 一旦使用了关键字strictfp来声明某个类、接口或者方法时,那么在这个关键字所声明的范围内所有浮点运算都是精确的,符合IEEE-754规范

【黑马程序员】2019最新Java面试题

【黑马程序员】2019最新Java面试题 1,short s1=1;s1=s1+1;有什么错??? 答:s1为short型,1为int型,s1+1=2先为int型,S1为short 型,所以需要通过强制转化—s1=(short)(s1+1); 举例:short s1=1; s1+=1;(正确,因为可以自动转化) 2,请简述equals与==的区别 在String中,equals对比的是内容,==是比较地址 3,sleep与wait的区别 (1)sleep方法可以设置线程阻塞的时间,而wait方法必须要notily方法来唤醒(2)sleep方法属于Thread类,而wait属于Object类 (3)sleep方法不会释放锁的资源,而wait方法会释放锁的资源面试官:每个引用对象都有wait方法吗? 答:都有,因为每个类都会继承Object基类 4,String,Stringbuffer,Stringbuidder的区别? (1)String是JAVA的基础类,他可以定义少量的字符串 (2)StringBuffer是对String的扩充,他可以拼接大量字符串,但是他的效率比较低,因为他是线程安全的 (3)StringBuidder是对StringBuffer的拓展,他提高了效率,但是他是线程不安全的 5,ArrayList和Vector的区别? (1)ArrayList底层是用数组实现的,所以查找快,增删慢,ArrayList是线程不安全的(2)Vector由于是线程安全的,所以他的效率要比ArrayList底的多 6,Super关键字的使用? (1)Super关键字实现的前提必须要有继承 (2)Super关键字可以调用父类的方法,属性,通过Super.方法名,Super.属性(3)Super 关键字必须位于类的第一行

Java常见面试题及答案

1、面向对象的特征有哪些方面? 答:面向对象的特征主要有以下儿个方面: 1) 抽象:抽象是将一类对象的共同特征总结出来构造类的过程,包括数据抽象 和行为抽象两方面。抽象只关注对象有哪些属性和行为,并不关注这些行为的 细节是什么。 2) 继承:继承是从已有类得到继承信息创建新类的过程。提供继承信息的类被 称为父类(超类、基类);得到继承信息的类被称为子类(派生类)。继承让变 化中的软件系统有了一定的延续性,同时继承也是封装程序中可变因素的重要 手段(如果不能理解请阅读阎宏博士的《Java 与模式》或《设计模式精解》中 关于桥梁模式的部分)。 3) 封装:通常认为封装是把数据和操作数据的方法绑定起来,对数据的访问只 能通过已定义的接口。面向对象的本质就是将现实世界描绘成一系列完全自 治、封闭的对象。我们在类中编写的方法就是对实现细节的一种封装;我们编 写一个类就是对数据和数据操作的封装。可以说,封装就是隐藏一切可隐藏的 东西,只向外界提供最简单的编程接口(可以想想普通洗衣机和全自动洗衣机 的差别,明显全自动洗衣机封装更好因此操作起来更简单;我们现在使用的智 能手机也是封装得足够好的,因为儿个按键就搞定了所有的事情)。 4) 多态性:多态性是指允许不同子类型的对象对同一消息作出不同的响应。简 单的说就是用同样的对象引用调用同样的方法但是做了不同的事悄。多态性分 为编译时的多态性和运行时的多态性。如果将对象的方法视为对象向外界提供 的服务,那么运行时的多态性可以解释为:当A 系统访问B 系统提供的服务 时,B 系统有多种提供服务的方式,但一切对A 系统来说都是透明的(就像电 动剃须刀是A 系统,它的供电系统是B 系统,B 系统可以使用电池供电或者用 交流电,其至还有可能是太阳能,A 系统只会通过B 类对象调用供电的方法, 但并不知道供电系统的底层实现是什么,究竟通过何种方式获得了动力)。方法 重载(overload )实现的是编译时的多态性(也称为前绑定),而方法重写 (override )实现的是运行时的多态性(也称为后绑定)。运行时的多态是面向 对象最精SI 的东西,要实现多态需要做两件事:1.方法《写(子类继承父类并 重写父类中已有的或抽象的方法);2,对象造型(用父类型引用引用子类型对 象,这样同样的引用调用同样的方法就会根据子类对象的不同而表现出不同的 行为)。 2、String 是最基本的数据类型吗? 答:不是。Java 中的基本数据类型只有8个J byte 、short 、int 、long 、 float 、double> char 、boolean :除了基本类型(primitive type )和枚举类 型(enumeration type ),剩下的都是引用类型(reference 3、short si = 1: si = si + 1;有错吗?short si = 1: si 答:对于short si = 1; si = si + 1;山于1是int 类 型, 果也是int 型,需要强制转换类型才能赋值给short 型。而 short si = 1: sl+= 1;可以正确编译,因为S1+二1;相当于S1 = (short )(S1 + 1);其中有隐 含的强制类型转换。 4、int 和Integer 有什么区别? type )。 += 1;有错吗? 因此S1+1运算结

相关主题