自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(32)
  • 收藏
  • 关注

原创 【网络编程】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 398

原创 【网络编程】零拷贝的底层实现原理

零拷贝是一种网络编程中的性能优化方式。传统的Java I/O编程中的网络文件传输会涉及到多次的用户态和内核态之间的切换以及数据从硬盘到内核缓存区和用户缓存区的拷贝。零拷贝技术主要就是减少拷贝次数(并不是一次都不拷贝,而是减少CPU拷贝的次数,尽量使用DMA拷贝)和减少状态的切换。零拷贝的实现主要有mmap和sendFile。传统的I/O模型:从上图中可以看出,传统的I/O模型的主要过程是:从用户态切换到内核态、使用DMA将硬盘中的数据拷贝到内核中的kernel buffer、数据从kernel

2020-06-04 17:21:30 333

原创 【网络编程】Netty采用的NIO为什么是同步非阻塞的?

参考链接:https://www.leahy.club/archives/netty-nio-sync-nonblocking这个问题可以分为两部分:NIO为什么是同步非阻塞的?Netty是如何实现NIO的?那么首先需要回答是什么是同步/异步,什么是阻塞/非阻塞?同步/异步和阻塞/非阻塞描述的都是IO操作。同步和异步:从操作系统角度来说,网络IO的数据拷贝主要分为两个阶段,一是数据准备阶段,二是数据从内核拷贝到用户中。同步IO指的是数据从内核拷贝到用户时。发起该请求的线程会自己来拷贝数据(表现为

2020-05-28 22:17:55 4461 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 445

转载 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 960 1

转载 Yarn Cluster模式下Spark创建ApplicationMaster源码解析

Spark创建ApplicationMaster源码解析原文链接:https://www.leahy.club/archives/spark-core-applicationmaster源文件:SparkSubmit.scalaSparkSubmit是一个伴生对象,可以静态地访问其属性和方法。SparkSubmit是Spark程序运行起来之后或者打开Spark Shell之后启动的第一个进程...

2020-04-06 13:45:12 303

转载 AQS源码详解

一、概述谈到并发,不得不谈ReentrantLock;而谈到ReentrantLock,不得不AbstractQueuedSynchronizer(AQS)!类如其名,抽象的队列式的同步器,AQS定义了一套多线程访问共享资源的同步器框架,许多同步类实现都依赖于它,如常用的ReentrantLock/Semaphore/CountDownLatch…。二、框架它维护了一个volatile i...

2020-03-30 21:20:08 136

转载 Java 虚拟机枚举 GC Roots 解析

原始链接:https://www.leahy.club/archives/gcroots最近在复习JVM,在看《深入理解Java虚拟机》中关于GC Roots的描述不是很明白,就收集了相关资料整理如下:在实际的垃圾回收器实现中,为了实现高性能还必须考虑一下几点:枚举根节点:首先需要明确GC Roots在哪里?对于一个 Java 程序而言,对象都位于堆内存块中,存活的那些对象都被根节点...

2020-03-25 15:15:13 293

转载 MySQL事务:浅析脏读、不可重复读和幻读

原文链接:https://www.leahy.club/archives/mysqlisolations事务并发会造成的三个隔离性问题:脏读、不可重复读、幻读。脏读、不可重复读和幻读首先先举例说明这三种问题。脏读:脏读就是指当一个事务正在访问数据,并且对数据进行了修改,而这种修改还没有提交到数据库中(数据还在内存中),这时,另外一个事务也访问这个数据(内存中数据),然后使用了这个...

2020-03-19 10:26:01 132

转载 MySQL数据库索引的底层实现原理和优化策略

原文链接:https://www.leahy.club/archives/mysqlindexMySQL的索引主要有BTree索引、Hash索引、全文索引。重点讨论BTree(后面涉及到的BTree都是指B+Tree)索引的实现原理。MySQL的官方定义:索引(index)是帮助MySQL高效获取数据的数据结构,也就是说索引本质上是数据结构。而我们最常用的是使用BTree数据结构作为索引...

2020-03-18 22:08:37 1148

转载 ConcurrentHashMap是如何保证线程安全的

原文链接:https://www.leahy.club/archives/concurrenthashmap为什么说HashMap线程不安全,而ConcurrentHashMap就线程安全其实ConcurrentHashMap在Android开发中使用的场景并不多,但是ConcurrentHashMap为了支持多线程并发这些优秀的设计却是最值得我们学习的地方,往往”ConcurrentHash...

2020-03-15 16:27:19 576

转载 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 212

转载 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 196

转载 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 84

转载 最长回文子串解法

最长回文子串原文链接:https://www.leahy.club/archives/%E7%AE%97%E6%B3%95%E4%B8%8E%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84%E6%9C%80%E9%95%BF%E5%9B%9E%E6%96%87%E5%AD%90%E4%B8%B21. 题目2. 解答常见的解法主要有:暴力法:列举出所有可能的子串...

2020-03-09 16:23:08 160

转载 二叉树的遍历(递归、非递归、Morris Traversal)

二叉树的遍历原文链接:https://www.leahy.club/archives/%E7%AE%97%E6%B3%95%E4%B8%8E%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84%E4%BA%8C%E5%8F%89%E6%A0%91%E7%9A%84%E9%81%8D%E5%8E%861. 综述在二叉树中,搜索(Search)和遍历(Traversal)本质...

2020-03-08 13:20:51 195

转载 Spark的部署模式详解

Spark的部署模式详解原文链接:https://www.leahy.club/archives/sparkcorespark%E7%9A%84%E9%83%A8%E7%BD%B2%E6%A8%A1%E5%BC%8F%E8%AF%A6%E8%A7%A31. Spark的部署模式在介绍Spark的部署模式之前,需要明确两个重要的角色:Driver(驱动器)、Executor(执行器)。1.1...

2020-02-26 20:46:52 411

原创 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 142

原创 算法性能分析(以最大子序列计算为例子)

算法(性能)分析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 192 2

原创 MySQL基础入门

MySQL入门1.1. 数据库最近想为找工作做几个项目实战演练一下,其中一个是基于SpringBoot搭建一个头条咨询网站。项目中用到了MySQL数据库,最近学习了一下基础知识(非科班出身有太多的课要补。。。)。数据库主要分为两种,一种是关系型数据库,另一种是非关系型数据库。虽说现在非关系型数据库发展很快,但是关系型数据库的地位依旧不可动摇,并逐渐发展成为关系型数据为主,非关系型数据为辅的局...

2019-09-02 22:41:22 189 1

原创 Java Collection集合基本知识总结

1 Java集合1.1 Java集合的简介1.基本说明定义:一个Java对象可以在内部持有若干其他对象,并对外提供访问接口,将这种Java对象称之为集合。这些对象可以是基本的数据类型也可以是引用类型。主要的Java集合:java.util提供了集合类,包括:​ Collection:根接口​ List:有序列表,一种线性ADT​ Set:无重复元...

2019-08-29 21:29:47 302

原创 Java笔记——Java的泛型实现

一、Java泛型面向对象的一个重要目标是对代码重用的支待。支持这个目标的一个重要的机制就是泛型机制。如果除去对象的基本类型外,实现方法是相同的,那么我们就可以用泛型实现(generic implementation) 来描述这种基本的功能。例如,可以编写一个方法,将由一些项组成的数组排序;方法的逻辑关系与被排序的对象的类型尤关,此时可以使用泛型方法。二、Pre-Java5泛型的实现2...

2019-03-20 21:43:15 301

原创 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 2492

原创 TimSort(简易版)和堆排序的Python实现

一、timsort排序简述:timsort排序是Python、Java等编程语言默认的排序函数。timsort排序是一种高效、稳定的排序算法,其平均时间复杂度为 O(nlogn)。timsort是将插入排序和归并排序结合起来并从提高排序速度角度提出了很多有效的提速方法。在现实的待排序序列中有很多序列存在许多已经排好序的“小块”,timsort就是很好的利用这一特性。在timsort中我...

2018-11-27 21:46:48 1274 2

转载 如何计算算法的时间复杂度

原地址:http://www.nowamagic.net/librarys/veda/detail/2195在进行算法分析时,语句总的执行次数T(n)是关于问题规模n的函数,进而分析T(n)随n的变化情况并确定T(n)的数量级。算法的时间复杂度,也就是算法的时间量度,记作:T(n}=0(f(n))。它表示随问题规模n的增大,算法执行时间的埔长率和 f(n)的埔长率相同,称作算法的渐近时间复杂度...

2018-11-26 22:08:17 808

原创 几种常见的排序算法的Ptython实现(冒泡、选择、插入、希尔、归并、快速)

  一、综述排序算法可以分为内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存。常见的内部排序算法有:插入排序、希尔排序、选择排序、冒泡排序、归并排序、快速排序、堆排序、基数排序等。用一张图概括:时间复杂度 平方阶 (O(n2)) 排序 各类简单排序:直接插入、直接选择和冒泡排序。 ...

2018-11-26 22:02:01 402

转载 人工智能工程师学习路线及具备的5项基本技能

摘要学习路线你是否对机器学习充满兴趣呢?其实到目前为止,每天有越来越多的工程师开始将好奇的目光转向机器学习领域。实际上,你会发现现在没有哪一个领域比机器学习能引起更多的曝光率和关注度。机器学习已经以一种高调姿态闯入广大民众的意识当中,无论是采用机器学习等相关技术的Google AlphaGo以5局4胜的战绩打败人类世界的围棋冠军,还是采用了机器学习技术的Twitter能够鉴定是否你在...

2018-10-30 20:34:19 151

原创 Note——Neural Network and Deep Learning (1)[神经网络与深度学习学习笔记(1)]

话不多说直接上参考书籍:http://neuralnetworksanddeeplearning.com/index.html。当然中文版的百度很容得到。一、初学神经网络的体会正如书中作者说的神经网络可以被称作最美的编程范式之一,神经网络将我们需要解决的复杂问题,比如手写字体分类,简化成一个个简单的步骤,而本人无需了解内部的具体结构参数变化等。关于神经网络已经有很多实用的库,使用这些库可以...

2018-10-20 18:09:48 310

转载 某位算法工程师对自己工作的反思

算法、技术及其它在和刘同学长谈之后,我再次对前一段时间的想法进行了反思,结合聊天中的新感受,整理在这里。(注:标题里的算法,指机器学习算法,或者说“算法工程师”这个职位名称里的“算法”,不是“算法与数据结构”里的那个算法。谁能告诉我有没有什么更好的名字来区别这它们,或许是“机器学习算法”与“传统算法”?)算法与算法工程师先来一段我在知乎里回答“做算法工程师是一种怎样的体验?”的答案(其中的...

2018-10-20 15:52:33 298

原创 Python的迭代

最近在自己写python程序时,迭代器这一块遇到了些问题。网上找了资料终于把问题解决了,现在分享如下。python的for循环我们知道python的for循环在风格上与C、C++、JS 等语言的for循环风格不太一样。这是一个JS的for循环:这是一个python的for循环:很显然python的for循环中,对于每个待循环的变量,并没有对其进行下标索引,而是直接对每个...

2018-08-02 12:46:37 6011 2

原创 Ananconda包管理

学习完Python基本语法准备着手重现一些好玩的demo,但是在配置Anaconda的安装包时遇到了些问题,现在总结一下遇到的 解问题和决方法。1.Anaconda环境下的第三方包安装Anaconda自带pip和conda两种方式,这里基于习惯主要是使用conda。操作步骤:Anaconda3-->Anaconda Prompt(以管理员身份运行)-->conda install &l...

2018-07-03 11:03:53 1700

原创 Python的一些总结

1.关于python的缩进问题,python对结构直接的规整度要求严格,需要时刻注意这些细节问题。如下图,试了好多次才想起来要Tab一下。2.Python的for循环抽象程度要高于C的for循环,因为Python的for循环不仅可以用在list或tuple上,还可以作用在其他可迭代对象上。字符串也可以看做是一种tuple,也可以用来直接迭代。在python中我们统称为可迭代对象。3.关...

2018-04-04 21:29:03 197

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除