Java 8 主要引入了哪些新特性?
我们知道 Java 8 是 Java 发布历史上一个里程碑式的版本,哪怕现在 Java 的最新版本已发展到 22,但仍有相当一部分企业在使用 Java 8,可以说 Java 8 是后续 Java 新版本得以快速迭代的基石。本文即重点回顾 Java 8 引入的那些主要特性。
- 4天前
- 1次浏览
我们知道 Java 8 是 Java 发布历史上一个里程碑式的版本,哪怕现在 Java 的最新版本已发展到 22,但仍有相当一部分企业在使用 Java 8,可以说 Java 8 是后续 Java 新版本得以快速迭代的基石。本文即重点回顾 Java 8 引入的那些主要特性。
偶然间读到曹大(曹春辉,Golang 编译器领域大牛)在博客分享的一篇关于当下互联网环境的感想(一些鬼故事),对曹大在文章中所批判的当前经济下行背景下互联网行业企业「降本增笑」以及员工「投机取巧」乱象深有同感。 这也引发了我对国内互联网就业环境以及自己未来职业发展的一些思考。
Java 虚拟机(Java Virtual Machine,简称 JVM)是 Java 程序(字节码)的运行环境,其主要提供 Java 字节码执行(解释执行或者即时编译为本地机器码)、内存管理(内存分配和垃圾回收等)、多线程支持和安全控制等功能,是 Java 语言「一次编写,到处运行」口号得以实现的基石。
1 题目描述 假设我们有一个记录用户登录的日志文件,该文件有多行记录,每一行记录包含用户 ID、登录日期(格式为:yyyy-MM-dd)和登录时间(格式为:HH:mm:ss)三个以空格分割的条目。记录并不是以时间先后排序的,而是乱序的(如:样例输入中的记录 1002 2023-02-06 12:10:01 在 1002 2023-02-05 11:10:01 之前)。请计算每个用户的最长连续登录天数,输出格式为:用户 ID: 最长连续登录天数(如:样例输出中的 1002: 5)。
这是一个关于计算用户最长连续登录天数的Java实现。输入是一个记录用户登录信息的日志文件,每行包含用户ID、登录日期和登录时间。代码首先使用HashMap和TreeSet建立用户登录日期的记录,然后遍历每个用户的登录日期列表,计算出每个用户的最长连续登录天数并输出。实现中使用了Java8的时间API进行日期计算,体现了良好的编程实践。
面向对象编程中有一条经典的设计原则:组合优于继承,即多用组合少用继承。什么是继承?什么是组合?为什么不推荐使用继承?组合有哪些优势?如何判断该用组合还是该用继承?本文将围绕这几个问题来分析组合优于继承的原因。 1 什么是继承?什么是组合? 继承(Inheritance)和组合(Composition)是面向对象编程(Object-Oriented Programming)中两种不同的代码复用机制。
本文围绕面向对象编程的两种代码复用机制 - 继承和组合进行分析。继承是指子类继承父类的属性和方法,而组合则是通过在一个类中使用另一个类的实例来实现功能复用。文章指出,组合相比继承有诸多优势,包括更好的灵活性、可测试性和可维护性等。同时提出了如何判断使用继承还是组合的原则,帮助开发者做出更合理的设计选择。
Go 1.18 加入了对泛型的支持。本文将使用切片反转和对象排序两个示例场景来演示泛型的使用。 开始前,我们先了解一下泛型的基本概念。 1 泛型是什么? 泛型(Generics)是编程语言中的一种范式,其允许在定义类(Go 中的结构体)、接口和方法(函数)时使用类型参数(Type Parameters)。这些类型参数可以用来描述方法的参数类型或者类与接口的属性类型,从而使得代码可以在不同类型之间进行重用,而不必进行类型转换或使用 Object(Go 中的 interface{})类型来处理。
本文介绍了Go 1.18引入的泛型特性,并通过切片反转和对象排序两个示例场景演示了泛型的使用。泛型可以提高代码的重用性和类型安全性,让开发者编写出更通用的函数和类型。文章首先解释了泛型的概念,然后展示了使用泛型前后对切片反转的不同实现方式,最后简要介绍了对对象排序的泛型实现。整体内容全面系统地介绍了Go语言泛型的应用场景和使用方法。
今天参加了大连云原生技术开放日的分享活动,主题主要围绕在云原生、AI、开源等方面。 出门时,雨下的还不算小,想着今天能参加的人可能不会很多,但是去了以后发现座无虚席,大连的技术氛围看来还是不错的。 主办方请到了几位国内云原生方面的专家坐镇,此外还有本地软件协会、开源组织、头部企业的领导参会,观众也汇集了本地大大小小各个公司的技术人员。 关于云原生、AI 方面的分享,大家的参与度都非常高,提问的人非常踊跃。云原生方面的分享主要涉及云环境下服务治理的难点、服务网格的使用等。AI 方面的分享涉及...
作者参加了大连云原生技术开放日活动,主要讨论云原生、AI和开源。尽管天气不佳,现场依然座无虚席,技术氛围浓厚。云原生分享集中在服务治理,AI部分讨论了大模型的应用。开源部分,开放原子开源基金会介绍了 RustyVault 项目。活动收获颇丰,技术人员积极参与讨论,展示了大连地区良好的技术交流氛围。
我们知道,Serenity BDD 和 Cucumber Java 是两个常用的、适用于 Java 语言的自动化测试框架。Serenity BDD 框架功能丰富、内置了对业界通用的软件测试设计模式(诸如:页面对象模型、Screenplay 模式等)的支持,而 Cucumber 框架的一大优势是可以使用类似自然语言的方式(Gherkin 语法)来编写测试场景。因此,将两者进行集成将拥有叠加的能力。
本文介绍了如何将 Serenity BDD 与 Cucumber Java 集成,以增强自动化测试的能力。通过借助具体场景“登录 GitHub 并创建 Issue”,演示了两者的结合使用,并提供了完整的示例工程供读者参考。
前文「如何使用 Serenity BDD 进行 UI 测试?」介绍了使用 Serenity BDD 与 Selenium 进行 Web UI 测试的方法,但 Serenity BDD 不仅限于进行 UI 测试,还可以使用其进行 REST API 测试。本文即介绍使用 Serenity BDD 与 REST Assured 进行 API 测试的方法。
本文介绍使用 Serenity BDD 和 REST Assured 进行 API 测试的方法,强调如何将两者集成以进行高效的 RESTful API 测试。
Screenplay 模式是一个用于软件测试的设计模式,本文探索如何使用 Screenplay 模式编写 Web UI 测试用例? 本文首先会介绍 Screenplay 模式的基本概念;接着,以登录 GitHub 并在页面创建 Issue 为测试场景,来分析该场景中的操作者与行为分别对应 Screenplay 模式中的哪个部分;最后,针对该测试场景,使用 Serenity BDD 测试框架来编写满足 Screenplay 模式的测试用例。
本文介绍了如何使用 Screenplay 模式编写 Web UI 测试用例,解释了 Screenplay 模式的基本概念并通过 GitHub 登录及创建 Issue 的场景分析操作内容。最后,文章展示了如何利用 Serenity BDD 测试框架编写符合 Screenplay 模式的测试用例。
Serenity BDD(Behavior Driven Development,行为驱动开发)是一个支持 Java 语言的 BDD 自动化测试框架。Serenity BDD 框架功能强大,层级设计符合业界通用测试规范,支持页面对象模式(Page Object Model),可与 JUnit、Cucumber、Selenium、JBehave 等多种流行测试框架进行集成。此外,Serenity BDD...
本文介绍了如何使用 Serenity BDD、JUnit 5 和 Selenium 框架来进行 Web UI 测试,以登录 GitHub 并创建 Issue 为例。Serenity BDD 是一个强大的 BDD 自动化测试框架,支持 Java 语言,集成多种流行测试框架,并提供详细的测试报告。
前面我们在「如何使用 Cucumber Java 进行 UI 测试?」一文中,以登录 GitHub 并在页面创建 Issue 为例介绍了 Cucumber 与 Selenium 的集成,但其中的示例工程未使用依赖注入工具,所有对象的新建均是使用原生 new 关键字来实现的。接着,我们在上文「如何在 Cucumber Java 中使用 PicoContainer 进行依赖注入?」介绍了在 Cucumber 中使用 PicoContainer 进行依赖注入的方法。尽管 PicoContainer...
本文详细介绍了如何在使用 Java、Cucumber 结合 Spring Boot 进行 UI 测试的工程中集成 Spring Boot。作者演示了如何用 Cucumber、Selenium 和 Spring Boot 来实现自动化测试,并提供了详细的工程结构、配置文件及代码示例。此外,还列出了所用工具和框架的版本信息,并介绍了每个包和类的作用,最终形成了一个完整的测试工程。
上文「如何使用 Cucumber Java 进行 UI 测试?」以在 GitHub 页面上创建 Issue 为例演示了 Cucumber Java 与 Selenium 的集成,以及 UI 测试工程的搭建及测试用例的编写。您可能注意到,上文演示的测试工程未使用依赖注入工具,对象的创建均是使用最原生的 new 方式来实现的。这对于大型工程来说,会显得非常笨拙。本文主要介绍 Cucumber Java 与依赖注入框架 PicoContainer...
本文讲解了如何使用 Cucumber Java 结合依赖注入框架 PicoContainer 进行 UI 测试。通过改造原有的测试工程,减轻了手动创建对象的繁琐。示例代码已上传至 GitHub,供读者参考。
加沙平民正在遭遇的「種族滅絕式大清洗」讓我們驚歎如此「現代的社會」竟然還有如此殘暴的事實在發生。我們在歷史書上所看到喪心病狂的「活埋」、「萬人坑」竟然又一次在 21 世紀的今天上演。加沙幾個月的時間,已有超過兩萬平民喪生,這都讓我們驚歎不已。但想想倭寇當年在南京製造的慘絕人寰的大屠殺,只恐怕其較以色列只會過猶而無不及,且不說倭寇使用的手段更加殘暴與惡劣,僅就平民死亡的人數而言,恐怕就比這個慘烈 10 倍都不止吧!
文章讨论了加沙平民遭遇的严重暴力事件,并将其与南京大屠杀进行了比较。作者对现代社会发生如此残暴的事实感到震惊,并警示年轻一代关于日本历史的态度和行为。强调要提前做好防备,防止未来可能的挑衅。
上文「Cucumber 是什么?如何使用 Cucumber Java 进行 API 测试?」介绍了 Cucumber 中的基本概念,并以实例的方式演示了如何使用 Cucumber Java 进行 API 测试。本文基于此,以在页面创建 GitHub Issue 为例进一步探索如何使用 Cucumber Java 进行 UI(浏览器)测试。示例工程实现语言为 Java,使用的浏览器测试工具为 Selenium,工程使用 Maven 管理。
本文介绍了如何使用Cucumber Java进行UI测试,以在页面创建GitHub Issue为例,详细阐述了示例工程的结构和依赖配置。