写在最后
为了这次面试,也收集了很多的面试题!
以下是部分面试题截图
Stream APIStream
进一步得到了加强。
ofNullable
Stream<T> ofNullable(T t)
返回包含单个元素的顺序Stream
,如果非空,否则返回空Stream
。这个比较简单就不举例了。
iterate
Stream iterate(T seed, Predicate<? super T> hasNext, UnaryOperator next)
这个是用来生成有限流的新迭代实现。
-
seed
初始种子值 -
hasNext
用来判断何时结束流,这个与seed
有关。如何该函数不迭代保留seed
计算,返回的流可能为空。 -
next
函数用来计算下一个元素值。
举个例子:
Stream.iterate(0, i -> i < 5, i -> i + 1)
.forEach(System.out::println);
等同于传统的:
for (int i = 0; i < 5; ++i) {
System.out.println(i);
}
takeWhile
Stream.takeWhile(Predicate)
Stream
中元素会被断言Predicate
,一旦元素断言为false
就中断操作,忽略掉没有断言的元素(及时未断言中的元素有满足条件的),仅仅把之前满足元素返回。
Stream.of(1, 2, 3, 4, 2, 5)
.takeWhile(x -> x < 4)
.forEach(System.out::println);
上面的例子中只会输出1
、2
、3
。
dropWhile
这个API和takeWhile
机制类似,也用来筛选Stream
中的元素。不过符合断言的元素会被从Stream
中移除。一旦元素断言为false
,就会把断言为false
的元素以及后面的元素统统返回。
Stream.of(1, 2, 3, 4, 2, 5)
.dropWhile(x -> x < 4)
.forEach(System.out::println);
上面的例子会输出4
、2
、5
。
❝
和
filter
操作可不一样啊,切记!
Optional扩展
Optional
增加了三个有用的API。
-
stream()
Optional
现在可以转Stream
。 -
ifPresentOrElse(Consumer<? super T> action, Runnable emptyAction)
如果有值了怎么消费,没有值了怎么消费。 -
or(Supplier<? extends Optional<? extends T>> supplier)
如果有值就返回有值的Optional
,否则就提供能获取一个有值的Optional
的渠道(Supplier
)。
try-with-resources 优化
在Java 7 中引入了try-with-resources功能,保证了每个声明了的资源在语句结束的时候都会被关闭。任何实现了java.lang.AutoCloseable
接口的对象,和实现了java.io.Closeable
接口的对象,都可以当做资源使用。
在Java 7中需要这样写:
try (BufferedInputStream bufferedInputStream = new BufferedInputStream(System.in);
BufferedInputStream bufferedInputStream1 = new BufferedInputStream(System.in)) {
// do something
} catch (IOException e) {
e.printStackTrace();
}
而到了Java 9简化为:
BufferedInputStream bufferedInputStream = new BufferedInputStream(System.in);
BufferedInputStream bufferedInputStream1 = new BufferedInputStream(System.in);
try (bufferedInputStream;
bufferedInputStream1) {
// do something
} catch (IOException e) {
e.printStackTrace();
}
接口私有方法
继Java 8 引入了接口静态方法和接口默认方法后,又引入了接口私有方法:
public interface Catable {
/**
* 接口私有方法
*/
private void doSomething() {
}
}
引入HttpClient
定义一个新的 HTTP 客户端 API 来实现 HTTP/2 和 WebSocket,并且可以替换旧的HttpURLConnection
API。Java以前原生的确实难用,所以诞生了Apache HttpClientComponents 、OkHttp等好用的客户端。新的也不怎么好用,不过也算从零到一了。
HttpRequest httpRequest = HttpRequest.newBuilder(newURI)
总结:绘上一张Kakfa架构思维大纲脑图(xmind)
其实关于Kafka,能问的问题实在是太多了,扒了几天,最终筛选出44问:基础篇17问、进阶篇15问、高级篇12问,个个直戳痛点,不知道如果你不着急看答案,又能答出几个呢?
若是对Kafka的知识还回忆不起来,不妨先看我手绘的知识总结脑图(xmind不能上传,文章里用的是图片版)进行整体架构的梳理
梳理了知识,刷完了面试,如若你还想进一步的深入学习解读kafka以及源码,那么接下来的这份《手写“kafka”》将会是个不错的选择。
-
Kafka入门
-
为什么选择Kafka
-
Kafka的安装、管理和配置
-
Kafka的集群
-
第一个Kafka程序
-
Kafka的生产者
-
Kafka的消费者
-
深入理解Kafka
-
可靠的数据传递
-
Spring和Kafka的整合
-
SpringBoot和Kafka的整合
-
Kafka实战之削峰填谷
-
数据管道和流式处理(了解即可)
[外链图片转存中…(img-3rzllXto-1715370254497)]
[外链图片转存中…(img-qa1r0m9z-1715370254497)]