最近接触了一个在线测试系统,感觉这个评估系统还不错,对Java基础方面考察的较为全面,特地在做的过程中用截图软件记录下来,让大家也可以自测下,评估自己对Java基础的掌握程度。文末附上了个人测试的样例报告,从报告中可以看出测试题目所属考察内容及熟练度掌握程度概览。

测试内容均是英文展示,可能需要有些英文基础。

下面开始正文啦!(PS:由于时间仓促,同一题部分内容可能存在重复截取的现象,少部分题缺失,总题数约54题,180分钟内完成,不定向选择,每题最多三个答案。另由于本人水平有限,在进行解答时难免会有疏漏,恳请批评指正。)

Q1:

java 测试ik分词ikanalyzer ikm测试java_java

 

java 测试ik分词ikanalyzer ikm测试java_构造器_02

  • 考察内容:集合(List,Collections)、Comparator。
  • 解析:从已知的集合和给出的输出结果可以看出是根据firstName升序,lastName升序,并排除Mary,再根据排除法迅速找出答案。④虽然进行了firstName升序并排除了Mary,但并未指定lastName排序方式,按names原有顺序输出,不符合条件
  • 参考答案:⑤

Q2:

java 测试ik分词ikanalyzer ikm测试java_构造器_03

  • 考察内容:Jar包使用
  • 解析:Jar可通过classpath、类加载器和manifest等方式加载,但是不能将其解压后使用。
  • 参考答案:②③

Q3:

java 测试ik分词ikanalyzer ikm测试java_java_04

 

java 测试ik分词ikanalyzer ikm测试java_java_05

  • 考察内容:Integer、逻辑运算符
  • 解析:逻辑或、与操作具有逻辑短路特性
  • 参考答案:⑤

Q4:

java 测试ik分词ikanalyzer ikm测试java_面试_06

  • 考察内容:Math类的使用
  • 解析:Math无常量G
  • 参考答案:②④⑤

Q5:

java 测试ik分词ikanalyzer ikm测试java_面试_07

  • 考察内容:多线程
  • 解析:final class使类不可变,线程安全,如String;static变量为类实例共享,无法保证线程安全
  • 参考答案:②③⑤

Q6:

java 测试ik分词ikanalyzer ikm测试java_父类_08

  • 考察内容:国际化
  • 解析:ResourceBundle在读取资源配置文件时,文件名要遵从特定的命名规则
  • 参考答案:③④

Q7:

java 测试ik分词ikanalyzer ikm测试java_java_09

java 测试ik分词ikanalyzer ikm测试java_序列化_10

  • 考察内容:类的多态、静态方法
  • 解析:由于方法为静态的(与具体实例无关),在使用类实例调用时不会存在多态的现象;类之间无法进行强转
  • 参考答案:⑤

Q8:

java 测试ik分词ikanalyzer ikm测试java_构造器_11

 

java 测试ik分词ikanalyzer ikm测试java_序列化_12

  • 考察内容:TreeSet
  • 解析:TreeSet根据指定的排序规则判断key是否有重复,有则忽略,无则添加。这点注意和HashSet区分,HashSet是根据key的hashcode判重
  • 参考答案:③

Q9:

java 测试ik分词ikanalyzer ikm测试java_序列化_13

  • 考察内容:JDK1.8引入的新的日期类LocalDate
  • 解析:阅读源码可以发现,y数量的不同有不同的展示结果,如题日期,y为1、3、4位时,按实际位数展示,2位展示年份后两位,大于4位时前面填充0;M为1位时按实际位数展示(即1-9月前面不填充0),2位不足部分填充0,3位为英文简写,4位为英文全称,5为首字母,大于5位运行时错误;d为1位时按实际位数展示,2位时不足部分填充0,大于2位运行时错误;E代表周几,1-3位英文简写,4位英文全称,5位首字母,大于5位运行时错误
  • 参考答案:③

Q10:

java 测试ik分词ikanalyzer ikm测试java_java_14

  • 考察内容:异常
  • 解析:异常分为运行时异常和检查时异常(非运行时异常)
  • 参考答案:③ 

java 测试ik分词ikanalyzer ikm测试java_java_15

 

Q11:

java 测试ik分词ikanalyzer ikm测试java_序列化_16

 

java 测试ik分词ikanalyzer ikm测试java_构造器_17

  • 考察内容:类构造器、变量访问
  • 解析:内部类可直接操作外部类变量
  • 参考答案:②

Q12:

java 测试ik分词ikanalyzer ikm测试java_父类_18

  • 考察范围:IO流
  • 解析:构造器的使用,②④⑤无相关的构造器
  • 参考答案:①③

Q13:

java 测试ik分词ikanalyzer ikm测试java_java_19

  • 考察内容:注解、类命名、package
  • 解析:package必须声明在源文件的最前面;注解和类同名时不能在同一个package下
  • 参考答案:①③

Q14:

java 测试ik分词ikanalyzer ikm测试java_父类_20

  • 考察内容:JDK1.8新增的Stream
  • 解析:Stream.reduce三种重载方法的使用,编号①Character无此构造器,编译错误;编号③是筛选集合中长度最大的字符串
  • 参考答案:②④⑤

Q15:

java 测试ik分词ikanalyzer ikm测试java_java_21

  • 考察内容:Integer
  • 解析:前两行代码可知,number1和number2指向同一对象,第三行时,number1进行了自增,由于Integer是final的,在修改时,原有的实例指向了新的对象。
  • 参考答案:④

Q16:

java 测试ik分词ikanalyzer ikm测试java_序列化_22

  • 考察内容:内部类
  • 解析:内部类可以访问外部类所有变量和方法,外部类访问内部类时需要初始化内部类实例
  • 参考答案:③⑤

Q17:

java 测试ik分词ikanalyzer ikm测试java_序列化_23

  • 考察内容:this()和super()的使用
  • 解析:this()&super()仅可在构造器中使用,且必须放在构造器中第一行,子类默认调用父类构造器
  • 参考答案:③⑤

Q18:

java 测试ik分词ikanalyzer ikm测试java_序列化_24

  • 考察内容:JVM内存管理
  • 解析:编号①,执行finalize函数线程优先级较低,执行时间不确定,异常不会导致垃圾收集暂停;编号②,同样System.gc()优先级也较低,执行时间不确定;编号③,垃圾收集对系统性能影响较大,如吞吐量;编号④,垃圾收集并不能确保不会发生内存泄漏,如参数设置不当时,即使执行垃圾收集,依然有内存泄漏风险;编号⑤,进行垃圾收集前准备工作时,会先调用finalize(),在下一次垃圾回收时,会真正的回收对象内存
  • 参考答案:⑤

Q19:

java 测试ik分词ikanalyzer ikm测试java_java_25

 

java 测试ik分词ikanalyzer ikm测试java_父类_26

  • 考察内容:异常
  • 解析:②无CheckedException,④不属于异常
  • 参考答案:①③

Q20:

java 测试ik分词ikanalyzer ikm测试java_构造器_27

  • 考察内容:类的创建
  • 解析:一个类文件中可以声明多个类,但最多有一个类声明为public,且该类名与文件名一致。此外,亦不可以使用private/protected声明其他类
  • 参考答案:③

java 测试ik分词ikanalyzer ikm测试java_父类_28

Q21:

java 测试ik分词ikanalyzer ikm测试java_面试_29

 

java 测试ik分词ikanalyzer ikm测试java_面试_30

  • 考察内容:Stream、Collectors使用
  • 解析:从输出结果中可以看出,是将姓名集合中名字字母数作为键,名字(转为小写)作为值的Map格式输出,并通过某些条件过滤掉部分数据。这里需要了解Collector类,查阅源码可知,其范型由三种类型(按顺序分别为T-输入元素类型,A-规约操作可变的累积类型,R-规约操作结果类型)构成。②④分别是TreeSet和String,不支持forEach遍历,编译时错误
  • 参考答案:①③⑤

Q22:

java 测试ik分词ikanalyzer ikm测试java_java_31

 

java 测试ik分词ikanalyzer ikm测试java_序列化_32

  • 考察内容:IO流
  • 解析:ByteArrayOutputStream的write有两种重载方法,一个参数时其size增1,三个参数时size增加第三个参数指定长度
  • 参考答案:①

Q23:

java 测试ik分词ikanalyzer ikm测试java_父类_33

  • 考察内容:国际化Locale
  • 解析:Locale对象初始化方法,查看源码可知答案
  • 参考答案:③④⑤

Q24:

java 测试ik分词ikanalyzer ikm测试java_父类_34

  • 考察内容:接口
  • 解析:无
  • 参考答案:①③

Q25:

java 测试ik分词ikanalyzer ikm测试java_构造器_35

  • 考察内容:接口
  • 解析:接口中的变量默认final,初始化后无法再次修改
  • 参考答案:①

Q26:

java 测试ik分词ikanalyzer ikm测试java_序列化_36

 

java 测试ik分词ikanalyzer ikm测试java_面试_37

 

java 测试ik分词ikanalyzer ikm测试java_序列化_38

  • 考察内容:类初始化相关
  • 解析:对于有父类的情况,class初始化顺序:static对象/代码块(先父后子)->成员变量/代码块-构造器(先父类成员变量/代码块,再父类构造器,子类同父类)
  • 参考答案:⑤

Q27:(可能由于较为简单,忘了截了)

Q28:

java 测试ik分词ikanalyzer ikm测试java_构造器_39

  • 考察内容:类成员变量初始化
  • 解析:类成员变量在未指定值时,有默认值,布尔false,整型变量0,String为null,浮点型0.0
  • 参考答案:③

java 测试ik分词ikanalyzer ikm测试java_面试_40

  • 考察内容:方法重载
  • 解析:无
  • 参考答案:③

Q29:

java 测试ik分词ikanalyzer ikm测试java_构造器_41

  • 考察内容:函数式编程
  • 解析:Lambda表达式是函数式编程常见的方式之一,接口是封装特性的表现形式之一,隐藏具体实现细节
  • 参考答案:①②

Q30:

java 测试ik分词ikanalyzer ikm测试java_父类_42

  • 考察内容:多线程
  • 解析:无
  • 参考答案:②④⑤

Q31:

java 测试ik分词ikanalyzer ikm测试java_面试_43

  • 考察内容:Formatter使用
  • 解析:查阅源码,Formatter内部维护一个Appendable对象,每进行一次format操作,将新的参数按对应规则加入到指定位置。请参考官方说明文档
  • 参考答案:②

Q32:

java 测试ik分词ikanalyzer ikm测试java_父类_44

  • 考察内容:JVM
  • 解析:原话意思是垃圾收集会导致性能下降,有人怀疑是和应用显示调用System.gc()有关。那么很简单,我们禁用显示调用gc()功能就可以验证是否是显示调用导致的性能问题。虚拟机参数由选项名称中即可看出正确结果
  • 参考答案:⑤

Q33:(漏截)

Q34:

java 测试ik分词ikanalyzer ikm测试java_构造器_45

  • 考察内容:java基础
  • 解析:无
  • 参考答案:③

Q35:

java 测试ik分词ikanalyzer ikm测试java_构造器_46

  • 考察内容:ClassLoader
  • 解析:实例属于同一类型的判定标准为同一类加载器加载,且完全限定名一致。限定名一致但属于不同类加载器,则属于不同对象
  • 参考答案:②

Q36:

java 测试ik分词ikanalyzer ikm测试java_序列化_47

  • 考察内容:Java面向对象基础
  • 解析:基本数字类型或其包装类型在进行自增时,其指向的栈地址发生变化,可通过Objects.hashCode(Object o)观察
  • 参考答案:③

Q37:

java 测试ik分词ikanalyzer ikm测试java_序列化_48

  • 考察内容:国际化(Locale)
  • 解析:参考源码
  • 参考答案:⑤

Q38:

java 测试ik分词ikanalyzer ikm测试java_面试_49

  • 考察内容:自增运算符,HashMap
  • 解析:HashMap的顺序是根据其key的hash值来处理的。自增在语句(自增)结束后,其值才真正改变。如int i=0;int j = i++ + ++i;变量j最后的值为2,进行++i前,读取的i为1,进行++i时,先自增,i为2。
  • 参考答案:③

Q39:

java 测试ik分词ikanalyzer ikm测试java_构造器_50

  • 考察内容:Supplier,Consumer接口
  • 解析:主要考察Consumer中andThen(Consumer<? super T> after)用法,先执行第一个Consumer,然后再执行andThen中指定Consumer
  • 参考答案:④

Q40:

java 测试ik分词ikanalyzer ikm测试java_父类_51

java 测试ik分词ikanalyzer ikm测试java_序列化_52

  • 考察内容:内存泄漏
  • 解析:参考解释。静态集合类与程序生命周期一致,其引用的Object可能无法被回收;资源(网络、数据库等)未及时关闭,连接无法释放;
  • 参考答案:①②⑤

 

Q41:

java 测试ik分词ikanalyzer ikm测试java_面试_53

  • 考察内容:Set
  • 解析:LinkedHashSet保持原有输入顺序基础上,新增仍然保持Set不重复特性,即添加相同Object时,替换原有Object,底层实现参考HashMap的put(K key, V value)函数
  • 参考答案:①

Q42:

java 测试ik分词ikanalyzer ikm测试java_父类_54

  • 考察内容:Java基础
  • 解析:②字符串null无法转换为int类型,应为NumberFormatException;④不论外层加多少引号,最终处理后只带一对引号
  • 参考答案:①③

Q43:

java 测试ik分词ikanalyzer ikm测试java_构造器_55

  • 考察内容:并发集合
  • 解析:无
  • 参考答案:②④

Q44:

java 测试ik分词ikanalyzer ikm测试java_序列化_56

  • 考察内容:多线程
  • 解析:StringBuilder是线程不安全的;引起线程安全的主要原因是多个线程操作共享资源,如静态变量、全局变量,此外局部变量逃逸也会造成线程安全问题
  • 参考答案:②③⑤

Q45:

java 测试ik分词ikanalyzer ikm测试java_序列化_57

  • 考察内容:接口
  • 解析:抽象方法无法在运行时返回相关信息,需要有具体实现
  • 参考答案:④

Q46:

java 测试ik分词ikanalyzer ikm测试java_java_58

  • 考察内容:成员变量初始化
  • 解析:静态变量或代码块优先按顺序进行初始化,number2通过getValue()进行初始化,此函数又将number1返回,此时number1未进行初始化,返回默认值0
  • 参考答案:①

Q47:

java 测试ik分词ikanalyzer ikm测试java_面试_59

  • 考察内容:抽象类
  • 解析:接口声明的方法会被隐式指定为public abstract,子类覆写时,重写的方法访问范围要大于等于父类中的方法,如题中MyInterface的method1()为public,Parent中method1()必须声明为public的
  • 参考答案:①③

Q48:

java 测试ik分词ikanalyzer ikm测试java_面试_60

 

java 测试ik分词ikanalyzer ikm测试java_java_61

  • 考察内容:类初始化顺序、IO流
  • 解析:这里值得注意的是,Java中在构造一个对象时,首先会先构建父类对象,再构建子类对象。序列化时,如果父类未实现序列化接口,子类实现序列化接口,则仅有子类会被序列化,若父类也实现了序列化,则父类子类都会被序列化。反序列化子类对象时,如果父类未实现序列化,则会重新调用父类默认构造器创建父类对象,若父类实现序列化,则不需要再调用父类默认构造器。这里可以将父类也实现序列化接口进行验证
  • 参考答案: ③

Q49:

java 测试ik分词ikanalyzer ikm测试java_序列化_62

  • 考察内容:类初始化
  • 解析:无
  • 参考答案:①

Q50:

java 测试ik分词ikanalyzer ikm测试java_构造器_63

  • 考查内容:Java基础
  • 解析:jar包使用问题,②此种方式是临时的,关闭当前命令窗口后配置失效
  • 参考答案:①②

Q51:

java 测试ik分词ikanalyzer ikm测试java_构造器_64

  • 考察内容:Stream API
  • 解析:无
  • 参考答案:③

Q52:

java 测试ik分词ikanalyzer ikm测试java_构造器_65

  • 考察内容:Java基础
  • 解析:无
  • 参考答案:①⑤

Q53:

java 测试ik分词ikanalyzer ikm测试java_面试_66

 

java 测试ik分词ikanalyzer ikm测试java_父类_67

  • 考察内容:方法引用
  • 解析:①Collection不支持函数式编程,无法使用方法引用,编译错误;②Supplier未指定泛型类型,方法第一行类型转换编译错误
  • 参考答案:④

Q54:

java 测试ik分词ikanalyzer ikm测试java_父类_68

  • 考察内容:类加载器
  • 解析:参考文档,①首先调用loadClass(),内部调用findLoadedClass(),若未加载,调用父加载器loadClass(),父类加载器无法加载该类的话,就调用 findClass() 方法来查找该类;⑤classLoaderDemo写法有问题,第一点类实例未定义,第二点类实例无法直接使用.class形式,第三点此类为自定义类,此类加载器的父加载器为扩展加载器,无法加载此类
  • 参考答案:③④

 

以上基本就是测试的所有内容,总的来说题目考察Java SE 8新特性偏多。做完之后会有类似如下的报告,从中可以看出个人各个知识点掌握熟练度。

java 测试ik分词ikanalyzer ikm测试java_java_69