几个Java相关的考题
📝

几个Java相关的考题

Tags
Java
Published
September 28, 2022
Author
Cryln
毕业入职第一个比较大的任务,就是和组内另一个校招生一起,出一套关于Java编码规范的试题。有机会为难一下这些大厂老鸟也是一件挺酷的事。当然,我们的主旨肯定不是说,故意找一些冷门知识,企图把大家难倒,这种偏难怪的题是我们作为学生所不屑的。这里把几个有意思的题分享出来。
 void test() throws ParseException {    SimpleDateFormat yearOfEra = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");    SimpleDateFormat weekBasedYear = new SimpleDateFormat("YYYY-MM-dd HH:mm:ss");      String date = "2021-12-31 10:10:10";    Date result = yearOfEra.parse(date);    String newDate = weekBasedYear.format(result);    log.info("newDate: {}",newDate);  }
notion image

上面这段代码中newDate结果是多少? (单选)

A. "2021-12-31 10:10:10"
B. "2022-12-31 10:10:10"
C. "2020-12-31 10:10:10”

关于数字类型的计算原则,下列说法正确的是 (不定项)

A. quotient的值为3.0f
 float quotient = (float)10/3;
B. prod的值溢出
 int a = Integer.MAX_VALUE;  long prod = (long)a*2;
C. bar < 0
 int foo = -10;  int bar = foo % 3;
D. res < 0
 int foo = Integer.MIN_VALUE;  int res = Math.abs(foo);

下列代码的运行结果为 (单选)

 public class ReturnStatementInFinallyBlockTest {      public static void main(String[] args) {          System.out.println(getReturnValue());     }      public static int getReturnValue() {          try {               System.out.print("A");               return 1;         } finally {              System.out.print("C");              return 2;         }     }  }
A. A1
B. A1C
C. A1C2
D. AC2

第11行代码调用的方法是hello(List list)。 T/F ?

 class A {      void hello(List list);      void hello(ArrayList arrayList);    }    List arrayList = new ArrayList();    a.hello(arrayList);

执行完以下三元运算符后,会在控制台打印b的值: null。 T/F ?

 Boolean a = null;  Boolean b = true ? a : false;  System.out.println(b);

下列代码可以编译通过。 T/F ?

 public class Test {        public static void main(String[] args) {          List<String> list = new ArrayList<>();          list.add("ab");          foo(list);     }        public static void foo(List<Object> list) {          ••••••     }  }

参考答案


1.时期格式化

 void test() throws ParseException {    SimpleDateFormat yearOfEra = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");    SimpleDateFormat weekBasedYear = new SimpleDateFormat("YYYY-MM-dd HH:mm:ss");      String date = "2021-12-31 10:10:10";    Date result = yearOfEra.parse(date);    String newDate = weekBasedYear.format(result);    log.info("newDate: {}",newDate);  }
notion image

上面这段代码中newDate结果是多少? B

A. "2021-12-31 10:10:10"
B. "2022-12-31 10:10:10"
C. "2020-12-31 10:10:10”
Java 日期格式化规范 参考 尤其注意YYYY是week based year。日期格式化时,yyyy 表示当天所在的年,而大写的 YYYY 代表是 week in which year(JDK7 之后引入的概念), 意思是当天所在的周属于的年份,一周从周日开始,周六结束,只要本周跨年,返回的 YYYY 就是下一年。

2.数值计算

关于数字类型的计算原则,下列说法正确的是? CD

A. quotient的值为3.0f
 float quotient = (float)10/3;
B. prod的值溢出
int a = Integer.MAX_VALUE; long prod = (long)a*2;
C. bar < 0
int foo = -10; int bar = foo % 3;
D. res < 0
int foo = Integer.MIN_VALUE; int res = Math.abs(foo);
可能会导致溢出和精度丢失的操作应该先转型, 另外转型(cast)优先级高于算术运算

3.try-catch块

下列代码的运行结果为 D

public class ReturnStatementInFinallyBlockTest { public static void main(String[] args) { System.out.println(getReturnValue()); } public static int getReturnValue() { try { System.out.print("A"); return 1; } finally { System.out.print("C"); return 2; } } }
A. A1
B. A1C
C. A1C2
D. AC2
如果try中有return语句,finally中也有return语句,最终执行的是finally中的return语句

4.重载规范

第11行代码调用的方法是hello(List list)。 T

class A { void hello(List list); void hello(ArrayList arrayList); } List arrayList = new ArrayList(); a.hello(arrayList);
不能使用有继承关系的参数类型来重载方法。因为方法重载的参数类型是根据编译时表面类型匹配的,不根据运行时的实际类型匹配。因此代码中调用的是hello(List list),因为arrayList的定义类型是List

5.三元表达式 ?:

执行完以下三元运算符后,会在控制台打印b的值: null。 F

Boolean a = null; Boolean b = true ? a : false; System.out.println(b);
三目运算符 condition ? 表达式 1:表达式 2 中,高度注意表达式 1 和 2 在类型对齐时,可能抛出因自动拆箱导致的 NPE 异常。
说明:以下两种场景会触发类型对齐的拆箱操作: 1)表达式 1 或 表达式 2 的值只要有一个是原始类型。 2)表达式 1 或 表达式 2 的值的类型不一致,会强制拆箱升级成表示范围更大的那个类型。

6.范型

下列代码可以编译通过。 F

public class Test { public static void main(String[] args) { List<String> list = new ArrayList<>(); list.add("ab"); foo(list); } public static void foo(List<Object> list) { •••••• } }
按照大家对Java伪范型的理解,大概率会认为这里是可以通过编译的。JVM确实允许这么做,但是javac(Java编译器)不允许。而同样使用JVM的Groovy是允许这样操作的,当然它属于弱类型的动态语言。