让我们来到微观世界重新认识 Netty 在前面 Netty 源码解析系列 <聊聊 Netty 那些事儿>中,笔者带领大家从宏观世界详细剖析了 Netty 的整个运转流程.从一个网络数据包在内核中的收发过程开始聊起,总体介绍了 Netty 的 IO 线程模型,后面我们围绕着这个 IO 模型又详细介绍了整个 Reactor 模型在 Netty 中的实现. 这个宏观流程包括:Reactor模型的创建,启动,运转架构,网络连接的接收和关闭,网络数据的接收和发送,利用 pipeline 对 IO 处理逻…
1. 前言 笔者在 <从 Linux 内核角度看 IO 模型的演变>一文中曾对 Socket 文件在内核中的相关数据结构为大家做了详尽的阐述. 又在此基础之上介绍了针对 socket 文件的相关操作及其对应在内核中的处理流程: 并与 epoll 的工作机制进行了串联: 通过这些内容的串联介绍,我想大家现在一定对 socket 文件非常熟悉了,在我们利用 socket 文件接口在与内核进行网络数据读取,发送的相关交互的时候,不可避免的涉及到一个新的问题,就是我们如何在用户空间设计一个字节缓冲区来…
写在本文开始之前.... 从本文开始我们就正式开启了 Linux 内核内存管理子系统源码解析系列,笔者还是会秉承之前系列文章的风格,采用一步一图的方式先是详细介绍相关原理,在保证大家清晰理解原理的基础上,我们再来一步一步的解析相关内核源码的实现.有了源码的辅证,这样大家看得也安心,理解起来也放心,最起码可以证明笔者没有胡编乱造骗大家,哈哈~~ 内存管理子系统可谓是 Linux 内核众多子系统中最为复杂最为庞大的一个,其中包含了众多繁杂的概念和原理,通过内存管理这条主线我们把可以把操作系统的众多核…
摘要 上文(存储篇)说到数据库重要的两部分为存储和计算,本篇内容为你解读图数据库 Nebula 在查询引擎 Query Engine 方面的设计实践. 在 Nebula 中,Query Engine 是用来处理 Nebula 查询语言语句(nGQL).本篇文章将带你了解 Nebula Query Engine 的架构. 上图为查询引擎的架构图,如果你对 SQL 的执行引擎比较熟悉,那么对上图一定不会陌生.Nebula 的 Query Engine 架构图和现代 SQL 的执行引擎类似,只是在查询…
我们首先需要澄清一个概念:NIO到底是什么的简称?有人称之为New I/O,因为它相对于之前的I/O类库是新增的,所以被称为New I/O,这是它的官方叫法.但是,由于之前老的I/O类库是阻塞I/O,New I/O类库的目标就是要让Java支持非阻塞I/O,所以,更多的人喜欢称之为非阻塞I/O(Non-block I/O),由于非阻塞I/O更能够体现NIO的特点. 与Socket类和ServerSocket类相对应,NIO也提供了SocketChannel和ServerSocketChannel…
一.场景分析 最近做项目遇到了一个很奇怪的问题,大致的业务场景是这样的:我们首先设定两个事务,事务parent和事务child,在Controller里边同时调用这两个方法,示例代码如下: 1.场景A: 这里其实是分别执行了两个事物,执行的结果是两个方法都可以插入数据!如下: 2.场景B: 修改上述代码如下: Propagation.REQUIRES_NEW的含义表示:如果当前存在事务,则挂起当前事务并且开启一个新事物继续执行,新事物执行完毕之后,然后在缓刑之前挂起的事务,如果当前不存在事务的话…
一.场景分析 最近做项目遇到了一个很奇怪的问题,大致的业务场景是这样的:我们首先设定两个事务,事务parent和事务child,在Controller里边同时调用这两个方法,示例代码如下: 1.场景A: @RestController @RequestMapping(value = "/test") public class OrderController { @Autowired private TestService userService; @GetMapping public…
摘要 相比于静态代理,动态代理避免了开发人员编写各个繁锁的静态代理类,只需简单地指定一组接口及目标类对象就能动态的获得代理对象. 代理模式 使用代理模式必须要让代理类和目标类实现相同的接口,客户端通过代理类来调用目标方法,代理类会将所有的方法调用分派到目标对象上反射执行,还可以在分派过程中添加"前置通知"和后置处理(如在调用目标方法前校验权限,在调用完目标方法后打印日志等)等功能.   使用动态代理的五大步骤 1.通过实现InvocationHandler接口来自定义自己的Invoca…
注:其实真正学习一门新语言的第一步并不是安装开发工具,我是C#转JAVA,有一点编程经验了,所以可以直接跳过前面几步,直接上IDE. 1.下载IntelliJ IDEA [官网] http://www.jetbrains.com/idea/ 这里推荐一个免费的关于IntelliJ IDEA的教学视频 https://www.imooc.com/learn/924 2.下载JDK 你可以直接前往官网下载. [官网] https://www.oracle.com/technetwork/java/j…
动态代理.静态代理优缺点优点:业务类只需要关注业务逻辑本身,保证了业务类的重用性.这是代理的共有优点.动态代理只有在用到被代理对象的时候才会对被代理类进行类加载. 而静态代理在编译器就已经开始占内存了.. 缺点: 1)代理对象的一个接口只服务于一种类型的对象,如果要代理的方法很多,势必要为每一种方法都进行代理,静态代理在程序规模稍大时就无法胜任了. 2)如果接口增加一个方法,除了所有实现类需要实现这个方法外,所有代理类也需要实现此方法.增加了代码维护的复杂度. 弱引用被弱引用关联的对象只能生存到…