12 道语⾔特性⾯试题

Q1Java 语⾔的优点?

① 平台⽆关性,摆脱硬件束缚,"⼀次编写,到处运⾏"

② 相对安全的内存管理和访问机制,避免⼤部分内存泄漏和指针越界。

③ 热点代码检测和运⾏时编译及优化,使程序随运⾏时间增⻓获得更⾼性能。

④ 完善的应⽤程序接⼝,⽀持第三⽅类库。

Q2Java 如何实现平台⽆关?

JVM:  Java  编译器可⽣成与计算机体系结构⽆关的字节码指令,字节码⽂件不仅可以轻易地在任何机器上解释执⾏,还可以动态地转换成本地机器代码,转换是由 JVM 实现的,JVM  是平台相关的,屏蔽了不同操作系统的差异。

语⾔规范: 基本数据类型⼤⼩有明确规定,例如 int 永远为 32 位,⽽ C/C++ 中可能是 16 位、32 位, 也可能是编译器开发商指定的其他⼤⼩。Java    中数值类型有固定字节数,⼆进制数据以固定格式存储和传输,字符串采⽤标准的 Unicode 格式存储。

Q3JDK JRE 的区别?

JDKJava Development Kit,开发⼯具包。提供了编译运⾏ Java 程序的各种⼯具,包括编译器、JRE 及常⽤类库,是 JAVA 核⼼。

JREJava Runtime Environment,运⾏时环境,运⾏ Java 程序的必要环境,包括 JVM、核⼼类库、核⼼配置⼯具。

Q4Java 按值调⽤还是引⽤调⽤?

按值调⽤指⽅法接收调⽤者提供的值,按引⽤调⽤指⽅法接收调⽤者提供的变量地址。

Java 总是按值调⽤,⽅法得到的是所有参数值的副本,传递对象时实际上⽅法接收的是对象引⽤的副本。⽅法不能修改基本数据类型的参数,如果传递了⼀个 int 值 ,改变值不会影响实参,因为改变的是值的⼀个副本。

可以改变对象参数的状态,但不能让对象参数引⽤⼀个新的对象。如果传递了⼀个 int 数组,改变数组的内容会影响实参,⽽改变这个参数的引⽤并不会让实参引⽤新的数组对象。

Q5:浅拷⻉和深拷⻉的区别?

浅拷⻉:     只复制当前对象的基本数据类型及引⽤变量,没有复制引⽤变量指向的实际对象。修改克隆对象可能影响原对象,不安全。

深拷⻉: 完全拷⻉基本数据类型和引⽤数据类型,安全。

Q6:什么是反射?

在运⾏状态中,对于任意⼀个类都能知道它的所有属性和⽅法,对于任意⼀个对象都能调⽤它的任意⽅       法和属性,这种动态获取信息及调⽤对象⽅法的功能称为反射。缺点是破坏了封装性以及泛型约束。反       射是框架的核⼼,Spring ⼤量使⽤反射。

Q7Class 类的作⽤?如何获取⼀个 Class 对象?

在程序运⾏期间,Java    运⾏时系统为所有对象维护⼀个运⾏时类型标识,这个信息会跟踪每个对象所属的类,虚拟机利⽤运⾏时类型信息选择要执⾏的正确⽅法,保存这些信息的类就是 Class,这是⼀个泛型类。

获取 Class 对象:① 类名.class 。②对象的 getClass⽅法。③ Class.forName(类的全限定名)

Q8:什么是注解?什么是元注解?

注解是⼀种标记,使类或接⼝附加额外信息,帮助编译器和 JVM 完成⼀些特定功能,例如 @Override标识⼀个⽅法是重写⽅法。

元注解是⾃定义注解的注解,例如:

@Target:约束作⽤位置,值是 ElementType 枚举常量,包括 METHOD ⽅法、VARIABLE 变量、TYPE /接⼝、PARAMETER ⽅法参数、CONSTRUCTORS 构造⽅法和 LOACL_VARIABLE 局部变量等。

@Rentention:约束⽣命周期,值是 RetentionPolicy 枚举常量,包括 SOURCE 源码、CLASS 字节码和RUNTIME 运⾏时。

@Documented:表明这个注解应该被 javadoc 记录。

Q9:什么是泛型,有什么作⽤?

泛型本质是参数化类型,解决不确定对象具体类型的问题。泛型在定义处只具备执⾏ Object ⽅法的能⼒。

泛型的好处: ① 类型安全,放置什么出来就是什么,不存在 ClassCastException 。② 提升可读性,编码阶段就显式知道泛型集合、泛型⽅法等处理的对象类型。 ③ 代码重⽤,合并了同类型的处理代码。

Q10:泛型擦除是什么?

泛型⽤于编译阶段,编译后的字节码⽂件不包含泛型类型信息,因为虚拟机没有泛型类型对象,所有对       象都属于普通类。例如定义 List List ,在编译后都会变成 List 

定义⼀个泛型类型,会⾃动提供⼀个对应原始类型,类型变量会被擦除。如果没有限定类型就会替换为Object,如果有限定类型就会替换为第⼀个限定类型,例如T。

Q11JDK8 新特性有哪些?

会使⽤ A 类型替换

lambda 表达式:允许把函数作为参数传递到⽅法,简化匿名内部类代码。

函数式接⼝:使⽤ @FunctionalInterface 标识,有且仅有⼀个抽象⽅法,可被隐式转换为 lambda 达式。

⽅法引⽤:可以引⽤已有类或对象的⽅法和构造⽅法,进⼀步简化 lambda 表达式。

接⼝:接⼝可以定义 default 修饰的默认⽅法,降低了接⼝升级的复杂性,还可以定义静态⽅法。

注解:引⼊重复注解机制,相同注解在同地⽅可以声明多次。注解作⽤范围也进⾏了扩展,可作⽤于局       部变量、泛型、⽅法异常等。

类型推测:加强了类型推测机制,使代码更加简洁。

Optional 类:处理空指针异常,提⾼代码可读性。

Stream 类:引⼊函数式编程⻛格,提供了很多功能,使代码更加简洁。⽅法包括 forEach 遍历、count 统计个数、filter 按条件过滤、limit 取前 n 个元素、skip 跳过前 n 个元素、map 映射加⼯、concat 合并 stream 流等。

⽇期:增强了⽇期和时间 API,新的 java.time 包主要包含了处理⽇期、时间、⽇期/时间、时区、时刻和时钟等操作。

JavaScript:提供了⼀个新的 JavaScript 引擎,允许在 JVM上运⾏特定 JavaScript 应⽤。

Q12:异常有哪些分类?

所有异常都是 Throwable 的⼦类,分为 Error ExceptionError Java 运⾏时系统的内部错误和资源耗尽错误,例如 StackOverFlowError OutOfMemoryError,这种异常程序⽆法处理。

Exception     分为受检异常和⾮受检异常,受检异常需要在代码中显式处理,否则会编译出错,⾮受检异常是运⾏时异常,继承⾃ RuntimeException

受检异常:

① ⽆能为⼒型,如字段超⻓导致的 SQLException

② ⼒所能及型,如未授权异常 UnAuthorizedException,程序可跳转权限申请⻚⾯。常⻅受检异常还FileNotFoundExceptionClassNotFoundExceptionIOException等。

⾮受检异常:

① 可预测异常,例如 IndexOutOfBoundsExceptionNullPointerExceptionClassCastException

等,这类异常应该提前处理。

② 需捕捉异常,例如进⾏ RPC 调⽤时的远程服务超时,这类异常客户端必须显式处理。

③ 可透出异常,指框架或系统产⽣的且会⾃⾏处理的异常,例如 Spring

NoSuchRequestHandingMethodExceptionSpring 会⾃动完成异常处理,将异常⾃动映射到合适的状态码。

最后呢,本文章的所有知识取自于B站高淇老师讲的Java300集教程,里面更加全面的讲述了关于Java面试中所能遇到的各种问题,包括解决问题的方法。小编也给大家准备了充分的资源:

给同学们带来全新的Java300集课程啦!java零基础小白自学Java必备优质教程_手把手图解学习Java,让学习成为一种享受_哔哩哔哩_bilibili

你可能感兴趣的:(jvm,java,开发语言)