零拷贝

1.为什么使用零拷贝 我们假设一个场景,将本地文件上传到网络上,伪代码如下: read(file, tmp_buf, len); write(socket, tmp_buf, len); 注意,别看代码操作就读和写两个,实际在操作系统中涉及到4次以上的数据复制以及上下文切换,如图 注...

2019-07-30 22:25:50

阅读数 34

评论数 0

链表实现栈结构及应用场景描述

1.栈的特点 仅允许在表的一端进行插入和删除运算。这一端被称为栈顶,相对地,把另一端称为栈底。如果用链表实现栈,怎么利用链表去做呢,我们可以把链表头看成栈顶,链尾堪称栈底,添加元素的时候,元素添加到链表头,删除的时候,删除链表头即可。 2.代码实现 2.1先构建一个链表实现,方便自定义链表的...

2019-07-08 23:37:28

阅读数 42

评论数 0

java实现单向链表和优化

1.链表的时间复杂度分析 查询元素时间复杂度 链表是不支持随机访问的,在链表中只有从头节点开始一个一个往下找,找到查询的元素为止,比如链表的长度为n,最好的情况是头节点就是需要找的元素,那么就是一个时间单元1*unit_time,,最坏的情况是最后一个节点是需要找的元素,那么就是n*unit_...

2019-07-08 16:13:55

阅读数 21

评论数 0

先从算法时间复杂度分析开始

1.为什么要进行复杂度分析 在编写和使用数据结构和算法的时候,怎么去比较它们之间的优劣,需要一个评判标准,目前主要的分析维度是两方面,时间和空间,什么意思呢,时间复杂度分析就是这个算法在一定的运算量级下的消耗时间,时间越少越优,空间复杂度分析可以看作是占用内存空间的大小,空间越小越优。 2.时...

2019-07-08 10:18:16

阅读数 46

评论数 1

怎么学习数据结构和算法

1.先叨叨几句 说实话,之前代码的时候很少考虑数据结构,一方面是因为写的主要是业务代码,另外一方面是因为很多编程语言都已经封装好了基本的数据结构,拿来即用,最多也就了解基本的一个数组和链表的特点以及效率问题,因为最近重新找工作,也趁着这段时间好好的了解了数据结构这一块,有了深入的了解后,感觉还确...

2019-07-07 22:32:27

阅读数 55

评论数 1

java实现二分搜索树

二分搜索树的特点 1.二分搜索树的每一个节点的值大于其左子树的所有节点的值,并且小于其右子树的所有节点的值 2.每一颗子树也是二分搜索树 3.因为它的存储是有序的,存储的元素必须具有可比较性 树结构的遍历方法 前序遍历:先遍历根结点,再遍历左子树,最后遍历右子树。 中序遍历:先遍历...

2019-06-27 21:28:23

阅读数 16

评论数 0

使用LinkList实现LRU

LRU特点 1.固定容量,超过容量删除最近最少使用的数据 2.新增加的元素,如果存在需要刷新它的生命周期 链表实现关键点 1.给链表设置一个固定长度,如果超过固定长度,删除链表末尾的元素 2.新添加元素,将元素放在链表头 3.判断元素是否已存在,如果存在,需要先删除,然后再添加到表头 ...

2019-06-26 20:52:59

阅读数 37

评论数 0

自定义单向链表

背景 我们知道在java里面有许多数组结构,比如队列,栈等等,但是这些数据结构都是由数组、链表或者树等基本数据结构构造的。所以这里自己定义了一个扩容数组,可以用来扩展成队列或者是栈。 public class UniLink<E> { //链表头结点 ...

2019-06-26 19:59:53

阅读数 51

评论数 0

自定义扩容数组

背景 我们知道在java里面有许多数组结构,比如队列,栈等等,但是这些数据结构都是由数组、链表或者树等基本数据结构构造的。所以这里自己定义了一个扩容数组,可以用来扩展成队列或者是栈。 代码 public class UniArr<E> { private...

2019-06-26 19:58:11

阅读数 59

评论数 0

Perl正则表达式入门

1.简述 正则表达式( Regular Expression, regexp )是一种描述字符串特征的语法规则 ,用于验证各种字符串是否匹配( Match)这个特征,进而实现高级的文本查找、替换、截取内容等操作 。 例如,要在大量的文本中找 出符合某个特征的字符串,就将这个特征按照正则 表达式的...

2019-06-20 15:30:29

阅读数 5

评论数 0

java中的静态分派和动态分派

1.理解前提 在理解静态分派和动态分派之前我们需要先理解静态类型和动态类型。 静态类型,是在编译期间可知的,什么意思呢,就是在使用javac命令编译java文件时确定的指令集。 动态类型,则是编译期间不可知,只有在运行期间才能确定的。 2.静态分派 为了更好的说明静态分派,参考如下重载方...

2019-06-20 10:53:16

阅读数 16

评论数 0

Nginx安装详解

1.下载Nginx安装包 下载链接地址 2.拷贝/解压安装包 因为是tar包,需要执行命令 tar -zxvf nginx安装包 3.安装需要编译的插件 Gcc:yum install gcc c++ (用于编译c、c++代码) Pcre:yum install ...

2019-06-19 14:48:46

阅读数 7

评论数 0

Nginx进阶(一)

1.主要应用场景 通过本地文件系统提供静态资源服务,也就是常说的静态资源分离 利用其强大性能,缓存,负载均衡为服务端提供反向代理服务 提供API服务 2.优点 高并发,高性能 可扩展性好 高可靠性 热部署 BSD许可证 3.Nginx的组成 Nginx二进制可执行文件(由各模块原...

2019-06-19 08:54:15

阅读数 20

评论数 0

JVM垃圾收集器的特点和比较

1.垃圾收集器分布图 2.各垃圾收集器的特点和作用 3.相关名词解释 3.1 Stop The World 在垃圾回收器进行回收之前,JVM会对内存中的对象进行一次可达性分析,也就是哪些是可回收的,哪些是不可回收的,但是在这个判断的过程中,要求JVM中的对象是不可变得,也就是要求一...

2019-06-18 10:32:49

阅读数 17

评论数 0

Spring源码之一(定位、加载、注册)

1.阅读前言 Spring框架的核心是IOC和AOP,而IOC流程可以分为两个主线,第一条主线是启动容器时候针对配置文件进行加载解析,第二条主线是从容器中获取实例对象的时候,容器进行的初始化。这篇文章主要针对第一条主线进行详细分析。 2.容器核心接口 2.1 BeanFactory 2.1...

2019-06-16 20:43:47

阅读数 44

评论数 0

CopyOnWriteArrayList的特性

特性 1.依赖于底层数组复制,对于修改操作是线程安全的 //添加元素 public boolean add(E e) { //低效操作(1) 加锁,使用ReentrantLoc是一个消耗性能的方式 final ReentrantLock lock = this...

2019-03-30 23:57:03

阅读数 12

评论数 0

数据库死锁导致rpc服务超时分析

发生背景 服务A和服务B同时对一个表中的同一条记录进行了更新操作 流程如图 代码示例 //服务A @Transactional public void serviceAmth{ System.out.println("服务A事务方法开启"); ...

2018-12-02 23:15:21

阅读数 70

评论数 0

java中对象拷贝的几种方式

方式一 实现Cloneable接口,重写clone()方法 示例对象 @Data public class User implements Cloneable,Serializable { private static final long serialVersionUID = 1...

2018-12-01 23:50:08

阅读数 225

评论数 0

java.util.ConcurrentModificationException 故障分析

错误示例代码 @Test public void testInteger() { ArrayList list = new ArrayList(12); list.add(111); list.add(222); list...

2018-12-01 20:26:43

阅读数 33

评论数 0

Eclipse中离线安装Activity插件,亲测可用

1.下载插件包和相关jar 链接:https://pan.baidu.com/s/1TuY74XskEcfXmKyk7O7S0w  提取码:z30v    2.将文件中的4个jar包放入eclipse安装目录下的plugins目录下 3.打开eclipse,选择help 4.填写N...

2018-11-25 13:27:25

阅读数 495

评论数 0

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