Java教程

Java:每天三道大白话面试题(002)

本文主要是介绍Java:每天三道大白话面试题(002),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

前言

大白话讲面试题,每天更新三题,提倡每日积累而不是临阵磨枪,我的目的不是为了背题,而是通过这种方式来更好的巩固自身所掌握的知识。

题目的星星代表难度等级,五星为满,并且我会列出需要掌握的前置知识。

大家一起,冲鸭!

JDK1.8 都有哪些新特性?⭐⭐⭐⭐

目的:典中典之典中典,JDK1.8 的新特性不说有多新,但绝对是平时开发中用的最多的,这题也可以体现你对新技术的关注程度

回答这题你还需要:需要一定的 Java 语法基础

我们只需要答出那些常用的新特性即可。

Lambda 表达式:我们可以把一个“值”赋给 Java 变量,比如 int a = 10;而Lamba 表达式可以把“一块”代码赋值给变量,如 Runnable r = () -> System.out.println("Hello!")

函数式编程:为了给Lambda表达式提供更友好的支持,而提出了函数式编程。

函数式接口(Functional Interface)就是一个有且仅有一个抽象方法,但是可以有多个非抽象方法的接口,什么意思呢。

比如我写了一个函数式接口如下:

@FunctionalInterface
interface HelloService { void sayHello(String message); }

那我可以如此调用:

HelloService helloService = message -> System.out.println("F**k," + message);

Stream API :也叫做流式编程。

假定有一个集合,里面有元素 a、b、c,我们把它看作是一个数据流,在中间进行各种操作,比如过滤、聚合、排序等等,再由最后的操作进行收尾得到想要的结果。

就像下面的代码,在狗的名字挑出来,放到一个单独的集合中,我称之为「狗的名字」:

List<String> dogNames = dogs.stream.map(dog::getName).collect(Collectors.toList());

方法引用:我们可以使用 :: + 方法名的方式去指向一个方法,就像上面例子中的 dog::getName ,我们直接调用了 getName() 方法。

Optional:为了解决空指针异常,JDK1.8 引入了 Optional 类。

新的日期时间 API:为了解决旧版日期时间 API 中存在的问题,如线程不安全、时区处理麻烦、设计糟糕等等,引入了新的包 java.time

为什么重写 equal() 方法后一定要重写 hashCode() 方法?⭐⭐

目的:基础考察

回答这题你还需要:Hash 表的相关原理知识

以 HashMap 插入数据为例,HashMap 会拿到 Key,调用它的 hashCode() 方法,通过得到的值来确定要把这个数据放在数组的哪个位置,假设发生了 hash 冲突,再调用 equal() 方法来判断两个对象是否真的相等,相等的话就会覆盖这个位置的 Value。

默认的 equal 方法,直接使用 == 符号进行比较,对于 == 号,如果是基本数据类型,那么比较的是其具体的值,但对于引用数据类型来说,比较的是其内存中的地址。

所以说,复写了 equal 方法必须复写 hashCode 方法,事实上,再开发中基本是必须复写两个方法,比较简单的是借助 Lombok 的注解 @Data 来帮我们复写。

String、StringBuilder、StringBuffer 了解吗?有什么区别?⭐

目的:考察能否正确操作字符串对象。

回答这题你还需要:无

首先 String 对象在 Java 中是不可变的,这意味着我们在进行字符串拼接时,在内存中会创建多个对象。

而 StringBuilder 和 StringBuffer 的出现就是为了解决这个问题的,他们两是可变的字符串对象,另外 StringBuffer 还是线程安全的。

引用

在这里我会放上所有我参考的资料链接

  • Java 8 新特性 | 菜鸟教程 (runoob.com)
  • https://snailclimb.gitee.io/javaguide/
这篇关于Java:每天三道大白话面试题(002)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!