0%

之前的文章中也提到了,Stream 的核心在于 Collectors,即对处理后的数据进行收集。Collectors 提供了非常多且强大的 API,可以将最终的数据收集成 List、Set、Map,甚至是更复杂的结构 (这三者的嵌套组合)。

阅读全文 »

函数式接口是伴随着 Stream 的诞生而出现的,Java8Stream 作为函数式编程的一种具体实现,开发者无需关注怎么做,只需知道要做什么,各种操作符配合简洁明了的函数式接口给开发者带来了简单快速处理数据的体验。

阅读全文 »

相信 Java8 的 Stream 大家都已听说过了,但是可能大家不会用或者用的不熟,笔者将在《玩转Java8Stream》系列文章中带大家从零开始使用,循序渐进,带你走向 Stream 的巅峰。

阅读全文 »

从 Java 8 引入的一个很有趣的特性是 Optional 类。Optional 类主要解决的问题是臭名昭著的空指针异常(NullPointerException) —— 每个 Java 程序员都非常了解的异常。

本质上,这是一个包含有可选值的包装类,这意味着 Optional 类既可以含有对象也可以为空。

Optional 是 Java 实现函数式编程的强劲一步,并且帮助在范式中实现。但是 Optional 的意义显然不止于此。

阅读全文 »

1. Git 团队协作机制

1.2 团队内协作

团队内协作

我们以一个示例来介绍一下 Git 团队内是如何协作的。查看上图,首先岳不群会在本地创建一个本地库,然后 push 推送到远程库。此时令狐冲可以从远程库 clone 克隆项目到他自己的本地库中,然后令狐冲在本地库修改了部分项目代码并 push 到远程库中(前提是岳不群的远程库认为令狐冲是同一个团队的)。此时岳不群可以 pull 拉去远程库中最新的代码,也就是可以获取到令狐冲提交的代码。

阅读全文 »

1. 什么是分支

在版本控制过程中,同时推进多个任务,为每个任务,我们就可以创建每个任务的单独分支。使用分支意味着程序员可以把自己的工作从开发主线上分离开来,开发自己分支的时候,不会影响主线分支的运行。对于初学者而言,分支可以简单理解为副本,一个分支就是一个单独的副本。(分支底层其实也是指针的引用)

阅读全文 »

1. Git 工作机制

如上图,首先我们会在工作区编写代码,然后使用 git add 命令在代码提交的暂存区之中,最后使用git commit 将代码提交到本地仓库。

阅读全文 »

1. 用户注册

1.1 发送验证码

  • 使用 Redis 缓存存储指定生存时间验证码,其中手机号为 key,值的时间戳 + 验证码。时间戳的作用用于实现用户执行时间内不能重复发送验证码;
  • 验证码的发送采阿里云第三方服务实现,传入指定手机号和验证码;
  • 缓存中的验证码未过期且与用户的验证码相互匹配,且此时支持再次发送验证码,那么再次调用第三方服务发送验证码;
  • 缓存中的验证码已经过期,那么生成新的验证码并调用第三方服务发送验证码。
阅读全文 »

Future 是 Java 5 添加的类,用来描述一个异步计算的结果。你可以使用isDone方法检查计算是否完成,或者使用get阻塞住调用线程,直到计算完成返回结果,你也可以使用cancel 方法停止任务的执行。

虽然 Future 以及相关使用方法提供了异步执行任务的能力,但是对于结果的获取却是很不方便,只能通过阻塞或者轮询的方式得到任务的结果。阻塞的方式显然和我们的异步编程的 初衷相违背,轮询的方式又会耗费无谓的 CPU 资源,而且也不能及时地得到计算结果,为什么不能用观察者设计模式当计算结果完成及时通知监听者呢?

阅读全文 »