Java17 新特性
Java 17 相对于 Java 8 的提升主要体现在语言特性、性能、API 增强、安全性以及生态系统的改进上。以下是详细对比,涵盖主要方面的提升: 1. 语言特性的改进Java 17 引入了多项新特性,许多是 Java 8 之后逐步引入并在 Java 17(长期支持版本,LTS)中稳定或正式化的功能: 密封类(Sealed Classes,JEP 409,Java 17 正式化) 允许限制类的继承,明确指定哪些子类可以继承某个类或接口,增强代码的可维护性和安全性。 示例: public sealed class Shape permits Circle, Rectangle, Triangle { ... } Java 8 无此功能,继承控制依赖开发者手动约束。 记录类(Records,JEP 395,Java 16 引入,Java 17 完善) 用于快速定义不可变数据类,减少样板代码(如 getters、equals、hashCode 等)。 示例: public record Point(int x, int y) {...
Java11 新特性
Java 11 是继 Java 8 之后的另一个长期支持(LTS)版本,于 2018 年 9 月 25 日发布,相对于 Java 8 引入了多项重要的语言特性、性能优化、API 改进和模块化支持。以下是对 Java 11 相比 Java 8 的主要新特性和提升的简洁总结,涵盖核心变化: 1. 语言特性改进 局部变量类型推断(var,JEP 323,Java 10 引入) 使用 var 关键字简化局部变量声明,编译器自动推断类型。 示例: var list = new ArrayList<String>(); *// 推断为 ArrayList<String>* var stream = list.stream(); *// 推断为 Stream<String>* Java 8 无此功能,需显式声明类型,代码较冗长。 Lambda 参数的局部变量语法(JEP 323,Java 11 扩展) 允许在 Lambda 表达式中使用 var。 (var x, var y) -> x + y Java 8 的 Lambda 表达式不支持 var,需显式指...
Java8 新特性
Java 8 的主要新特性,深入每个特性的背景、用法、实际应用场景,并提供代码示例,力求全面且易懂。Java 8(2014年3月发布)是 Java 语言的一次重大升级,引入了函数式编程、现代化 API 和性能优化,极大地提升了开发效率和代码可读性。以下是详细内容: 1. Lambda 表达式背景:Lambda 表达式是 Java 8 引入的函数式编程核心特性,旨在减少样板代码,允许将行为作为参数传递。之前,Java 处理匿名函数(如匿名内部类)时代码冗长,Lambda 简化了这一过程。 特性: 语法:(参数) -> 表达式 或 (参数) -> { 语句块; }。 无需显式声明参数类型(编译器可推断)。 可访问外部 final 或“有效 final”变量(即未被修改的变量)。 用于实现函数式接口(只有一个抽象方法的接口,如 Runnable, Comparator)。 代码示例: // 传统匿名内部类 Runnable r1 = new Runnable() { @Override public void run() {...
boost中好用的算法
基于 boost 1.82… timer 计时器过去老的 boost/timer.hpp 已经废弃了,目前推荐使用的是 boost/timer/timer.hpp, 主要包括下面了2个类 class detail boost::timer::cpu_timer 计时器 boost::timer::auto_cpu_timer 计时器,基于cpu_timer实现,在析构的时候输出耗时 struct cpu_times { nanosecond_type wall; // 挂钟时间 nanosecond_type user; // 用户时间 nanosecond_type system; // 系统时间 void clear() {wall = user = system = 0LL; } }; 默认的输出格式为下: “%w s wall, %u s user + %s s system = %t s CPU (%p%)\n” format meanin...
cpp中的rvo
c++11 以后支持了nrvo(命名的rvo),先来一张图 直接贴代码 #include <iostream> #include <string> #include <vector> using namespace std; class BigObject { public: BigObject() { cout << "Constructor\n"; } ~BigObject() { cout << "Destructor\n"; } BigObject(BigObject const&) { cout << "Copy Constructor\n"; } BigObject& operator=(BigObject const&) { cout << "Assignment Operator\n"; return *this; ...
cpp字符串
c++ string 的allocate和cowstring 可以说是c++ stl 中最常用的容器了,首先弄明白 cpp 中的string 到底是在哪里存储的,下面的代码我们重载了全局的new和delete #include <string> #include <iostream> #include <cstdlib> #include <vector> using namespace std; // 重载全局 new void* operator new(std::size_t size) { cout << "[Allocating " << size << " bytes]\n"; return malloc(size); } // 重载全局的 delete // void operator delete(void* ptr) noexcept { // cout << "[Deallocating]\n"; // return fre...
cpp的lambda和bind
基本表达式[capture](parameters) -> return-type {body} 当没有返回类型时, 可以省略 -> return-type 变量捕获与lambda闭包实现 [] 不截取任何变 [&] 截取外部作用域中所有变量,并作为引用在函数体中使用 [=] 截取外部作用域中所有变量,并拷贝一份在函数体中使用 [=, &foo] 截取外部作用域中所有变量,并拷贝一份在函数体中使用,但是对foo变量使用引用 [bar] 截取bar变量并且拷贝一份在函数体重使用,同时不截取其他变量 [x, &y] x按值传递,y按引用传递 [this] 截取当前类中的this指针。如果已经使用了&或者=就默认添加此选项。 lambda 的底层实现lambda 其实是c++的语法糖,是通过c++编译器生成class来实现的,看一个简单的例子。 #include <functional> using namespace std; int main(int argc, char* argv[]) { i...
cpp中的并发
cpp11之后,cpp本身对并发的支持大大增强,这里记录一下 1 std::thread classcpp的thread类型,创建即运行,不像java那样需要start,thread表示一个系统资源,一个系统线程 构造函数 function construct constructor 1 c++thread() noexcept; constructor 2 thread( thread&& other ) noexcept; constructor 3 template<class F, class... Args>explicit thread(F&& f, Args&&... args); copy constructor thread(const thread&) = delete; assign copy operator thread& operator=(const thread&) = delete; assign move operator thre...
Java开发手册_黄山版
《Java 开发手册》是 Java 社区爱好者的集体智慧结晶和经验总结,经历了多次大规模一线实战的检验及不断完善,整理成册后,众多社区开发者踊跃参与打磨完善,系统化地整理成册,当前的最新版本是黄山版。 现代软件行业的高速发展对开发者的综合素质要求越来越高,因为不仅是编程知识点,其它维度的知识点也会影响到软件的最终交付质量。比如:五花八门的错误码会人为地增加排查问题的难度;数据库的表结构和索引设计缺陷带来的系统架构缺陷或性能风险;工程结构混乱导致后续项目维护艰难;没有鉴权的漏洞代码容易被黑客攻击等。所以本手册以 Java 开发者为中心视角,划分为编程规约、异常日志、单元测试、安全规约、MySQL 数据库、工程结构、设计规约七个维度,再根据内容特征,细分成若干二级子目录。此外,依据约束力强弱及故障敏感性,规约依次分为【强制】、【推荐】、【参考】三大类。在延伸的信息中,“说明”对规约做了适当扩展和解释;“正例”提倡什么样的编码和实现方式;“反例”说明需要提防的雷区,以及真实的错误案例。 手册的愿景是码出高效,码出...
一大坨知识-12-Netty
1.核心组件1. 整体结构1. Core 核心层 Core 核心层是 Netty 最精华的内容,它提供了底层网络通信的通用抽象和实现,包括事件模型、通用API、支持零拷贝的 ByteBuf 等。2. Protocol Support 协议支持层 协议支持层基本上覆盖了主流协议的编解码实现,如 HTTP、Protobuf、WebSocket、二进制等主流协议,此外 Netty 还支持自定义应用层协议。Netty 丰富的协议支持降低了用户的开发成本,基于 Netty 我们可以快速开发 HTTP、WebSocket 等服务。3. Transport Service 传输服务层 传输服务层提供了网络传输能力的定义和实现方法。它支持 Socket、HTTP 隧道、虚拟机管道等传输方式。Netty 对 TCP、UDP 等数据传输做了抽象和封装,用户可以更聚焦在业务逻辑实现上,而不必关系底层数据传输的细节。 2. 逻辑架构 1. 网络通信层网络通信层的职责是执行网络 I/O 的操作。它支持多种网络协议和 I/O模型的连接操作。当网络数据读取到内核缓冲区后,会...