java
Leahy000
这个作者很懒,什么都没留下…
展开
-
【网络编程】Netty零拷贝的三类体现
参考链接:https://www.leahy.club/archives/netty-zero-copy关于ZeroCopy底层原理可以参见【网络编程】零拷贝的底层实现原理Netty的三种类型的零拷贝:Netty中的零拷贝与我们传统理解的零拷贝不太一样。传统的零拷贝指的是数据传输过程中,不需要CPU进行数据的拷贝。主要是数据在用户空间与内核中间之间的拷贝。传统意义的零拷贝:Zero-Copy describes computer operations in which the CPU does原创 2020-06-04 17:36:49 · 451 阅读 · 0 评论 -
【网络编程】零拷贝的底层实现原理
零拷贝是一种网络编程中的性能优化方式。传统的Java I/O编程中的网络文件传输会涉及到多次的用户态和内核态之间的切换以及数据从硬盘到内核缓存区和用户缓存区的拷贝。零拷贝技术主要就是减少拷贝次数(并不是一次都不拷贝,而是减少CPU拷贝的次数,尽量使用DMA拷贝)和减少状态的切换。零拷贝的实现主要有mmap和sendFile。传统的I/O模型:从上图中可以看出,传统的I/O模型的主要过程是:从用户态切换到内核态、使用DMA将硬盘中的数据拷贝到内核中的kernel buffer、数据从kernel原创 2020-06-04 17:21:30 · 394 阅读 · 0 评论 -
【网络编程】Netty采用的NIO为什么是同步非阻塞的?
参考链接:https://www.leahy.club/archives/netty-nio-sync-nonblocking这个问题可以分为两部分:NIO为什么是同步非阻塞的?Netty是如何实现NIO的?那么首先需要回答是什么是同步/异步,什么是阻塞/非阻塞?同步/异步和阻塞/非阻塞描述的都是IO操作。同步和异步:从操作系统角度来说,网络IO的数据拷贝主要分为两个阶段,一是数据准备阶段,二是数据从内核拷贝到用户中。同步IO指的是数据从内核拷贝到用户时。发起该请求的线程会自己来拷贝数据(表现为原创 2020-05-28 22:17:55 · 4726 阅读 · 2 评论 -
Netty的线程模型
原文链接:https://www.leahy.club/netty-thread-model主从Reactor模型:Netty里面采用的使用一种称为Reactor的线程模型(可以用来对Java NIO进行进一步的封装,但是大家一般不自己封装而是使用Netty这种框架)。Reactor是将IO多路复用和线程池技术结合的一种线程模型。Netty的线程模型主要是基于一种称为主从Reactor线程模型的改进。主从Reactor线程模型主要包括一个MainReactor和多个SubReactor,MainRea原创 2020-05-27 11:11:10 · 489 阅读 · 0 评论 -
Linux中的select、poll和epoll详解
原文链接:https://www.leahy.club/archives/select-poll-epollselect、poll和epoll都是Linux系统中的I/O多路复用的模型,是网络编程的基础知识。首先Linux中有多种I/O模型,比如NIO、BIO、AIO等,比如NIO和BIO可以使用I/O多路复用来提高效率。select:Linux中一切皆文件,网络连接使用文件描述符。对于每一个socket连接都是用一个文件描述符(FD)来表示。在Linux中实现用户进程之间网络文件传输必须经过两步.转载 2020-05-15 10:19:12 · 1030 阅读 · 1 评论 -
AQS源码详解
一、概述谈到并发,不得不谈ReentrantLock;而谈到ReentrantLock,不得不AbstractQueuedSynchronizer(AQS)!类如其名,抽象的队列式的同步器,AQS定义了一套多线程访问共享资源的同步器框架,许多同步类实现都依赖于它,如常用的ReentrantLock/Semaphore/CountDownLatch…。二、框架它维护了一个volatile i...转载 2020-03-30 21:20:08 · 171 阅读 · 0 评论 -
Java 虚拟机枚举 GC Roots 解析
原始链接:https://www.leahy.club/archives/gcroots最近在复习JVM,在看《深入理解Java虚拟机》中关于GC Roots的描述不是很明白,就收集了相关资料整理如下:在实际的垃圾回收器实现中,为了实现高性能还必须考虑一下几点:枚举根节点:首先需要明确GC Roots在哪里?对于一个 Java 程序而言,对象都位于堆内存块中,存活的那些对象都被根节点...转载 2020-03-25 15:15:13 · 313 阅读 · 0 评论 -
MySQL事务:浅析脏读、不可重复读和幻读
原文链接:https://www.leahy.club/archives/mysqlisolations事务并发会造成的三个隔离性问题:脏读、不可重复读、幻读。脏读、不可重复读和幻读首先先举例说明这三种问题。脏读:脏读就是指当一个事务正在访问数据,并且对数据进行了修改,而这种修改还没有提交到数据库中(数据还在内存中),这时,另外一个事务也访问这个数据(内存中数据),然后使用了这个...转载 2020-03-19 10:26:01 · 166 阅读 · 0 评论 -
MySQL数据库索引的底层实现原理和优化策略
原文链接:https://www.leahy.club/archives/mysqlindexMySQL的索引主要有BTree索引、Hash索引、全文索引。重点讨论BTree(后面涉及到的BTree都是指B+Tree)索引的实现原理。MySQL的官方定义:索引(index)是帮助MySQL高效获取数据的数据结构,也就是说索引本质上是数据结构。而我们最常用的是使用BTree数据结构作为索引...转载 2020-03-18 22:08:37 · 1230 阅读 · 0 评论 -
ConcurrentHashMap是如何保证线程安全的
原文链接:https://www.leahy.club/archives/concurrenthashmap为什么说HashMap线程不安全,而ConcurrentHashMap就线程安全其实ConcurrentHashMap在Android开发中使用的场景并不多,但是ConcurrentHashMap为了支持多线程并发这些优秀的设计却是最值得我们学习的地方,往往”ConcurrentHash...转载 2020-03-15 16:27:19 · 598 阅读 · 0 评论 -
Java并发编程中各种锁的分析
Java并发编程中各种锁的分析。原文链接:https://www.leahy.club/archives/java%E5%9F%BA%E7%A1%80java%E5%B9%B6%E5%8F%91%E7%BC%96%E7%A8%8B%E4%B8%AD%E7%9A%84%E5%90%84%E7%A7%8D%E9%94%81公平锁 VS 非公平锁公平锁:获取不到锁的时候,会自动加入队列,等待...转载 2020-03-15 10:29:35 · 255 阅读 · 0 评论 -
Java代理设计模式(静态代理、动态代理)
原文链接:https://www.leahy.club/archives/%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F%E4%BB%A3%E7%90%86%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F什么是代理?代理就是为其他对象提供一些代理服务以控制的访问或者扩展功能。Java中常见的代理模式主要有两种:一种是静态代理,一种是动态代...转载 2020-03-12 21:26:49 · 227 阅读 · 0 评论 -
HashMap常见问题
HashMap常见问题原文链接:https://www.leahy.club/archives/java%E5%9F%BA%E7%A1%80hashmap%E5%B8%B8%E8%A7%81%E9%97%AE%E9%A2%98HashMap定义:HashMap是Java集合框架下的一个用来存储键值对的集合类。底层数据结构:在JDK1.7之前采用的是数组+单向链表的形式,存储数据的单元为E...转载 2020-03-11 13:56:33 · 95 阅读 · 0 评论 -
Top K问题
Top K问题Top K问题在数据分析中非常普遍的一个问题(在面试中也经常被问到),比如:从20亿个数字的文本中,找出最大的前100个。解决Top K问题有两种思路,最直观:小顶堆(大顶堆 -> 最小100个数);较高效:Quick Select算法。LeetCode上有一个问题215. Kth Largest Element in an Array,类似于Top K问题...原创 2019-11-15 22:07:55 · 177 阅读 · 0 评论 -
Java笔记——Java的泛型实现
一、Java泛型面向对象的一个重要目标是对代码重用的支待。支持这个目标的一个重要的机制就是泛型机制。如果除去对象的基本类型外,实现方法是相同的,那么我们就可以用泛型实现(generic implementation) 来描述这种基本的功能。例如,可以编写一个方法,将由一些项组成的数组排序;方法的逻辑关系与被排序的对象的类型尤关,此时可以使用泛型方法。二、Pre-Java5泛型的实现2...原创 2019-03-20 21:43:15 · 343 阅读 · 0 评论 -
Java Collection集合基本知识总结
1 Java集合1.1 Java集合的简介1.基本说明定义:一个Java对象可以在内部持有若干其他对象,并对外提供访问接口,将这种Java对象称之为集合。这些对象可以是基本的数据类型也可以是引用类型。主要的Java集合:java.util提供了集合类,包括: Collection:根接口 List:有序列表,一种线性ADT Set:无重复元...原创 2019-08-29 21:29:47 · 343 阅读 · 0 评论 -
MySQL基础入门
MySQL入门1.1. 数据库最近想为找工作做几个项目实战演练一下,其中一个是基于SpringBoot搭建一个头条咨询网站。项目中用到了MySQL数据库,最近学习了一下基础知识(非科班出身有太多的课要补。。。)。数据库主要分为两种,一种是关系型数据库,另一种是非关系型数据库。虽说现在非关系型数据库发展很快,但是关系型数据库的地位依旧不可动摇,并逐渐发展成为关系型数据为主,非关系型数据为辅的局...原创 2019-09-02 22:41:22 · 270 阅读 · 1 评论 -
算法性能分析(以最大子序列计算为例子)
算法(性能)分析1 数学基础定义:①如果存在正常数c和n0n_{0}n0 使得当N≥n0N\ge n_{0}N≥n0 时T(N)≤cf(N)T(N)\le cf(N)T(N)≤cf(N) ,则记为T(N)=O(f(N))T(N)=O(f(N))T(N)=O(f(N)) .②当T(N)=O(f(N))T(N)=O(f(N))T(N)=O(f(N)) 时,可以保证函数T(N)T(N)T(N...原创 2019-09-05 22:01:20 · 244 阅读 · 2 评论 -
java的Char[]和byte[]的一种转换方式
主要介绍一种简单的方法:新建一个String使用String的toCharArray()和getBytes()方法来实现char[]和byte[]的相互转化。byte[] buffer = new byte[12,45,89];char[] c = new String(buffer).toCharArray();byte[] b = new String(c).getBytes("...原创 2019-02-15 17:27:59 · 2519 阅读 · 0 评论