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 r...
cpp的移动语义
C++的移动语义(Move Semantics)是C++11引入的一项重要特性,它旨在优化资源管理(如动态分配的内存、文件句柄等)的传递方式。通过移动语义,我们可以避免不必要的拷贝操作,从而显著提升性能,尤其在处理大对象或容器时。以下我将从背景、核心概念、实现方式、示例、使用规则到实际益处进行详细说明。 1. 背景:为什么需要移动语义?在C++98及更早版本中,对象的传递(例如函数参数、返回值)主要依赖拷贝语义(Copy Semantics)。这意味着: 当你返回一个局部对象时,会触发拷贝构造函数,复制所有资源。 对于大对象(如 std::vector 包含海量数据),拷贝开销巨大,甚至可能导致性能瓶颈或异常(如果资源不可拷贝)。 例如,假设有一个类 Resource,管理动态数组: class Resource { private: int* data; size_t size; public: Resource(size_t s) : size(s), data(new int[s]) {} // 分配资源 ~Resourc...
C++特殊成员函数生成规则
在C++中,特殊成员函数(special member functions)由编译器隐式声明并可能生成,包括默认构造函数、析构函数、拷贝/移动构造与赋值,以及新引入的默认比较运算符。这些函数的生成规则取决于用户声明、成员类型和基类。规则设计鼓励零规则(Rule of Zero):依赖编译器默认行为管理资源,避免自定义。 1. 特殊成员函数种类C++20中共8种: 默认构造函数 T() noexcept; 析构函数 ~T(); 拷贝构造函数 T(const T&); 拷贝赋值运算符 T& operator=(const T&); 移动构造函数 T(T&&) noexcept; 移动赋值运算符 T& operator=(T&&) noexcept; 默认等于运算符(C++20)bool operator==(const T&) const; 三路比较运算符(C++20)std::strong_ordering operator<=>(const T&) const noexcep...
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 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 thread&am...
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 模型的连接操作。当网络数据读取到内核缓冲区后,...













