GitHub 上 1,java面试逻辑题及答案

本文公开了作者整理的Java面试题,旨在帮助求职者和开发者巩固基础知识,提高面试效率。内容涵盖字符串操作、数组处理、流与Lambda表达式等多个方面,通过源码解析加深理解。
摘要由CSDN通过智能技术生成

为什么要公开这些面试题?

原因一:身边从事 Java 开发的人员越来越多,我的表弟表妹们,朋友的表弟表妹们,朋友的朋友的表弟表妹们,每次问我要相同的面试复习材料,已经让我疲于应付,索性整理出来,直接发链接给他们。

原因二:节省招聘双方彼此的时间,有些来公司面试人,无论是有几年工作经验的还是刚毕业的,就连这些最基础的面试题都搞不定,这确实让人很遗憾。常言道“一屋不扫何以扫天下”,也是同样的道理,如果连基础的概念都搞不明白,又怎么让面试官相信你能写出高质量的程序呢?与其浪费彼此的时间,还不如花点时间把自己的基础知识掌握牢固。

原因三:提高 Java 从业人员整体的能力模型,让优秀的人能“冒”出来。有了这些面试题不意味着,死记硬背之后就能进入企业工作,尤其是 BAT 等工作岗位竞争更为激烈,这些面试题只能成为面试体系中的一道“开胃菜”,从而提高了整个 Java 面试的壁垒,让愿与学的人,变的更加优秀,从而和懒惰的人拉开差距,让企业也能更轻易的甄别。

来看一下源码:

public static String[] between(final String value, final String start, final String end) {

String[] parts = value.split(end);

return Arrays.stream(parts).map(subPart -> subPart.substring(subPart.indexOf(start) + start.length()))

.toArray(String[]::new);

}

java.util.Arrays 类是为数组而生的专用工具类,基本上常见的对数组的操作,Arrays 类都考虑到了,stream() 方法可以将数组转换成流:

String[] intro = new String[] { “沉”, “默”, “王”, “二” };

Arrays.stream(intro);

Java 8 新增的 Stream 流在很大程度上提高了开发人员在操作集合(Collection)时的生产力。要想操作流,首先需要有一个数据源,可以是数组或者集合。每次操作都会返回一个新的流对象,方便进行链式操作,但原有的流对象会保持不变。

map() 方法可以把一个流中的元素转化成一个新流中的元素,它可以接收一个 Lambda 表达式作为参数。Lambda 表达式描述了一个代码块(或者叫匿名方法),可以将其作为参数传递给构造方法或者普通方法以便后续执行。

考虑下面这段代码:

() -> System.out.println(“沉默王二”)

来从左到右解释一下,() 为 Lambda 表达式的参数列表(本例中没有参数),-> 标识这串代码为 Lambda 表达式(也就是说,看到 -> 就知道这是 Lambda),System.out.println("沉默王二") 为要执行的代码,即将“沉默王二”打印到标准输出流。

toArray() 方法可以将流转换成数组,你可能比较好奇的是 String[]::new,它是什么东东呢?来看一下 toArray() 方法的源码。

A[] toArray(IntFunction<A[]> generator);

也就是说 String[]::new 是一个 IntFunction,一个可以产生所需的新数组的函数,可以通过反编译字节码看看它到底是什么:

String[] strArray = (String[])list.stream().toArray((x$0) -> {

return new String[x$0];

});

也就是相当于返回了一个指定长度的字符串数组。

[](()05、chars

返回组成字符串的单个字符的数组。

String [] results = Strman.chars(“沉默王二”);

System.out.println(Arrays.toString(results));

结果如下所示:

[沉, 默, 王, 二]

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值