自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

CrankZ的博客

希望能用自己的技术使这个世界更加美好。

原创 本地缓存Caffeine

Caffeine 说起Guava Cache,很多人都不会陌生,它是Google Guava工具包中的一个非常方便易用的本地化缓存实现,基于LRU算法实现,支持多种缓存过期策略。由于Guava的大量使用,Guava Cache也得到了大量的应用。但是,Guava Cache的性能一定是最好的吗?也...

2019-05-19 16:54:04 404 0

原创 Java——七种垃圾收集器+JDK11最新ZGC

JDK1.8之前的堆内存示意图: 从上图可以看出堆内存的分为新生代、老年代和永久代。新生代又被进一步分为:Eden 区+Survior1 区+Survior2 区。值得注意的是,在 JDK 1.8中移除整个永久代,取而代之的是一个叫元空间(Metaspace)的区域(永久代使用的是JVM的堆...

2019-01-07 16:41:45 5962 6

原创 String学习笔记

阿里Java开发手册 这里总结了阿里开发手册中有关String类的介绍 13. 【推荐】使用索引访问用String的split方法得到的数组时,需做最后一个分隔符后有无内容的检查,否则会有抛IndexOutOfBoundsException的风险。 说明: String str = &q...

2018-12-25 16:23:54 234 0

原创 结构型模式:代理模式,Java静态代理+动态代理实现

什么是代理模式 代理(Proxy)是一种设计模式,提供了对目标对象另外的访问方式;即通过代理对象访问目标对象.这样做的好处是:可以在目标对象实现的基础上,增强额外的功能操作,即扩展目标对象的功能. 这里使用到编程中的一个思想:对扩展开放,对修改关闭。也就是不要随意去修改已经写好的代码或者...

2018-12-15 11:22:03 168 0

原创 基本类型与包装类型

阿里开发手册中关于基本类型的问题 7. 【强制】所有的相同类型的包装类对象之间值的比较,全部使用equals方法比较。 说明:对于Integer var = ? 在-128至127范围内的赋值,Integer对象是在IntegerCache.cache产生,会复用已有对象,这个区间内的Inte...

2018-12-14 21:48:08 926 0

原创 创建型模式:单例模式+5种写法+最佳实践。

什么是单例模式 单例模式(Singleton Pattern):单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例,这个类称为单例类,它提供全局访问的方法。 单例模式特点: 这个类只能有一个实例; 它必须自行创建这个实例; 它必须自行向整个系统提供这个实例。 Ti...

2018-12-11 15:04:04 516 0

原创 创建型模式:工厂模式

23种设计模式 工厂模式的分类 简单工厂(Simple Factory)模式 工厂方法(Factory Method)模式 抽象工厂(Abstract Factory)模式 为什么要用工厂模式 满足开闭原则:对修改关闭,对扩展开放。就是别改老代码,只需要添代码,以前所有的老代码,都是...

2018-12-10 15:52:13 130 0

原创 哈希 学习笔记

Tips:Hash=哈希=散列 Tips:哈希经常与哈希函数指一个意思。本文中哈希与哈希函数不做特殊区分,默认就是一个意思。 什么是哈希 在记录的关键字与记录的存储地址之间建立的一种对应关系叫哈希函数。 哈希函数就是一种映射,是从关键字到存储地址的映射。 通常,包含哈希函数的算法的算...

2018-12-09 18:30:13 1335 0

原创 布隆过滤器,原理+案例+代码实现

概述 什么是布隆过滤器         布隆过滤器(Bloom Filter)是1970年由布隆提出的,它实际上是由一个很长的二进制向量和一系列随意映射函数组成。         它是一种基于概率的数据结构,主要用来判断某个元素是否在集合内,它具有运行速度快(时间效率),占用内存小的优点(空...

2018-12-09 15:49:10 1962 0

原创 分布式锁,学习笔记

什么是分布式锁? 当在分布式模型下,数据只有一份(或有限制),此时需要利用锁的技术控制某一时刻修改数据的进程数。 与单机模式下的锁不仅需要保证进程可见,还需要考虑进程与锁之间的网络问题。(我觉得分布式情况下之所以问题变得复杂,主要就是需要考虑到网络的延时和不可靠。。。一个大坑) 分布式锁还是...

2018-12-06 17:55:17 125 0

原创 时间复杂度+常见复杂度解释

前言 算法的效率 虽然计算机能快速的完成运算处理,但实际上,它也需要根据输入数据的大小和算法效率来消耗一定的处理器资源。要想编写出能高效运行的程序,我们就需要考虑到算法的效率。 算法的效率主要由以下两个复杂度来评估:时间复杂度:评估执行程序所需的时间。可以估算出程序对处理器的使用程度。空间复杂...

2018-12-02 19:07:15 7267 2

原创 分库分表

名词解释 库:database;表:table;分库分表:sharding 为什么要分库分表 移动互联网时代,海量的用户每天产生海量的数量,比如: 用户表 订单表 交易流水表 以支付宝用户为例,8亿;微信用户更是10亿。订单表更夸张,比如美团外卖,每天都是几千万的订单。淘宝的历史订单总...

2018-12-01 23:11:31 5215 0

原创 MySQL存储引擎:MyISAM与InnoDB

常见命令 查看数据库可配置的存储引擎类型 MySQL>show engines;   create table创建表时指定存储引擎 MySQL> use school MySQL> create table class(id int ,c...

2018-11-28 23:14:30 181 0

原创 Cookie、Session、Token

HTTP无状态 而Web应用程序是使用HTTP协议传输数据的。HTTP协议是无状态的协议。一旦数据交换完毕,客户端与服务器端的连接就会关闭,再次交换数据需要建立新的连接。这就意味着服务器无法从连接上跟踪会话。就是说假如你去网上购物,把喜欢的商品加到购物车中,因为HTTP是无状态的协议,一旦你的浏...

2018-11-28 11:47:23 144 0

原创 8个排序算法

排序算法 排序算法(Sorting algorithms)是什么? Wikipedia 如是说: In computer science, a sorting algorithm is an algorithm that puts elements of a list in a certai...

2018-11-22 18:30:44 160 0

原创 BeanFactory、 ApplicationContext、FactoryBean区别与联系

BeanFactory 概述 Spring 作为一种IoC容器最大的目的就是降低组件与组件之间的依赖关系。而BeanFactory作为整个Spring IoC容器的核心使用了一种统一的方法来装配所有的应用对象,通过Java的反射机制和依赖注入来实现这一装配过程,使受之管理的对象无需知道Spri...

2018-11-21 16:53:25 227 0

原创 从输入URL到显示页面的过程中发生了什么?

概览 关于这个问题,我看过很多文章,每个人分析的方法与总结的步骤都不相同。我这里按照自己的理解把过程分为了十个部分。因为我主要学习后端,所以最后几步前端的内容略写了。 一、URL解析 二、DNS域名解析 三、建立TCP连接 四、发送HTTP请求 五、访问重定向301/302(非必须) 六、...

2018-11-20 16:41:09 745 0

原创 Redis淘汰机制+热点数据问题

为什么需要淘汰 Redis是内存数据库,我们能时时刻刻能感受到Redis作者为更好地使用内存而费尽各种心思,例如最明显的是对于同一种数据结构在不同应用场景下提供了基于不同底层编码的实现(如压缩列表、跳跃表等)。 Redis最常见的两种应用场景为缓存和持久存储,当Redis做缓存时,有一个Red...

2018-11-18 23:11:00 4669 0

原创 Netty学习笔记(一):基础理论+核心组件

前置知识 I/O模型 用什么样的通道将数据发送给对方,BIO、NIO或者AIO,I/O模型在很大程度上决定了框架的性能 阻塞I/O 传统阻塞型I/O(BIO)可以用下图表示: 特点 每个请求都需要独立的线程完成数据read,业务处理,数据write的完整操作 问题 当并发数较大时...

2018-11-18 21:49:12 176 0

原创 Java多线程学习笔记:Callable、Future、FutureTask

概述 创建线程的三种方式: 继承Thread,重写run方法 实现Runnable接口,重新run方法 实现Callable接口,重写call方法 前两种方式,一种是直接继承Thread,另外一种就是实现Runnable接口,这两种方式都是Java第一版就有的方法。  这两种方式都有一个缺...

2018-11-08 10:14:32 120 0

原创 Java多线程学习笔记:ReentrantLock,Condition,ReentrantReadWriteLock

ReentrantLock ReentrantLock和synchronized关键字一样可以用来实现线程之间的同步互斥,但是在功能是比synchronized关键字更强大而且更灵活。 ReentrantLock 整体结构如下图: 常用接口分析 构造器 ReentrantLock...

2018-11-07 11:48:31 154 0

原创 Java并发编程:CountDownLatch、CyclicBarrier和Semaphore

概述 在java 1.5中,提供了一些非常有用的辅助类来帮助我们进行并发编程,比如CountDownLatch,CyclicBarrier和Semaphore,今天我们就来学习一下这三个辅助类的用法。 CountDownLatch 上图TA刚开始被阻塞,三个线程T1,T2,T3每次调用c...

2018-11-06 10:03:52 97 0

原创 Docker学习笔记(一):基础概念与核心原理

开发中遇到的问题 场景1 当你拥有一台新的电脑,你第一件事会做什么? 一般都是去装一些常用软件,比如QQ、微信、网易云音乐、Chrome浏览器等等。 当然作为开发者,还需要装一些环境,JDK,或者python等等。 假如现在让你负责给学校机房100台电脑,都安装以上软件和环境。那你怎么办...

2018-11-05 11:24:12 140 0

原创 设计模式学习笔记:设计模式七大原则

维基百科对设计模式的分类 什么是设计模式 可以用一句话概括设计模式———设计模式是一种利用OOP的封闭、继承和多态三大特性,同时在遵循单一职责原则、开闭原则、里氏替换原则、迪米特法则、依赖反转原则、接口隔离原则及合成/聚合复用原则的前提下,被总结出来的经过反复实践并被多数人知晓且经过分类和...

2018-10-26 11:35:16 237 2

原创 二叉树,二叉搜索树,AVL树,红黑树。学习笔记

树的基本概念 维基百科对树的分类 树的基本概念与术语 在计算器科学中,树(英语:tree)是一种抽象数据类型(ADT)或是实现这种抽象数据类型的数据结构,用来模拟具有树状结构性质的数据集合。它是由n(n>0)个有限节点组成一个具有层次关系的集合。把它叫做“树”是因为它看起来...

2018-10-23 09:45:57 248 0

原创 Linux学习笔记+Vim用法简介

学习Linux之前,我们先来简单的认识一下操作系统。 一 从认识操作系统开始 1.1 操作系统简介 我通过以下四点介绍什么操作系统: 操作系统(Operation System,简称OS)是管理计算机硬件与软件资源的程序,是计算机系统的内核与基石; 操作系统本质上是运行在计算机上的软件程...

2018-10-11 22:41:07 109 0

原创 数据库【三种读现象】与【四种隔离级别】+MySQL相关命令

数据库事务特性ACID 数据库事务特征,即 ACID: A Atomicity 原子性 事务是一个原子性质的操作单元,事务里面的对数据库的操作要么都执行,要么都不执行, C Consistent 一致性 在事务开始之前和完成之后,数据都必须保持一致状态,必须保证数据库的完整性。也就是说,...

2018-10-11 20:23:07 143 0

原创 Java NIO学习笔记:结合源码分析+Reactor模式

Java NIO和IO的主要区别 下表总结了Java NIO和IO之间的主要差别,我会更详细地描述表中每部分的差异。 IO NIO 面向流 面向缓冲 阻塞IO 非阻塞IO 面向流与面向缓冲 Java NIO和IO之间第一个最大的区别是,IO是面向流的,NIO是面...

2018-10-01 20:24:23 445 0

原创 数据库连接池学习笔记(一):原理介绍+常用连接池介绍

什么是连接池 数据库连接池负责分配、管理和释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,而不是再重新建立一个。 为什么要使用连接池  数据库连接是一种关键的有限的昂贵的资源,这一点在多用户的网页应用程序中体现得尤为突出。  一个数据库连接对象均对应一个物理数据库连接,每次操作都...

2018-09-27 22:12:43 36821 2

原创 直播技术学习笔记(直播协议+流媒体服务器+音视频处理+FFmpeg)

直播协议 RTMP(Real Time Messaging Protocol) 简介 Time Messaging Protocol,实时消息传送协议 RTMP是Adobe公司为Flash播放器和服务器之间音频、视频和数据传输开发的开放协议。 协议:长连接TCP 原理:每个时刻的数据,...

2018-09-17 17:06:38 2320 0

原创 Python+OpenCV+mss实现局域网跨平台桌面演示

整体思路 server.py:用mss截图,然后zlib压缩后socket发送 client:socket接收,zlib解压缩,然后使用OpenCV播放 简单介绍mss An ultra fast cross-platform multiple screenshots module in ...

2018-09-17 10:30:52 1805 0

原创 ZooKeeper学习笔记二

实战使用 ZooKeeper框架的安装 1. 下载并tar开解压(略) 2. 创建配置文件 创建conf/zoo.cfg 配置文件 tickTime=2000 dataDir=/var/lib/zookeeper clientPort=2181  参数说明: tickTime: zoo...

2018-09-03 17:13:52 168 0

原创 ZooKeeper学习笔记一

分布式应用程序 分布式应用程序可以通过在它们之间协调以完成特定的任务,快速且有效的方式在多个系统中的网络在给定时间(同时)运行 分布式应用程序有两部分,分别是:服务器和客户端应用程序。如下图所示: 分布式应用程序的优点 可靠性 可扩展性 透明性 Zookeeper在分布式中提供的服务...

2018-09-03 17:02:42 275 0

原创 Spring注解学习笔记

什么是注解 传统的Spring做法是使用.xml文件来对bean进行注入或者是配置aop、事物,这么做有两个缺点: 如果所有的内容都配置在.xml文件中,那么.xml文件将会十分庞大;如果按需求分开.xml文件,那么.xml文件又会非常多。总之这将导致配置文件的可读性与可维护性变得很低 在开...

2018-08-23 17:50:10 1253 1

原创 Java注解学习笔记

什么是注解 注解(Annotation)是一种应用于类、方法、参数、变量、构造器及包声明中的特殊修饰符,它是一种由JSR-175标准选择用来描述元数据的一种工具。Java从Java5开始引入了注解。在注解出现之前,程序的元数据只是通过java注释和javadoc,但是注解提供的功能要远远超过这些...

2018-08-22 15:36:58 99 0

原创 Spring AOP学习笔记(一):基础概念

AOP产生背景 AOP(Aspect Oriented Programming),即面向切面编程,可以说是OOP(Object Oriented Programming,面向对象编程)的补充和完善。OOP引入封装、继承、多态等概念来建立一种对象层次结构,用于模拟公共行为的一个集合。不过OOP允许...

2018-08-14 23:00:35 110 0

原创 Java反射机制学习笔记

前置知识 Java类型 Java中每个类型要么是引用类型,要么是基本类型。 基本数据类型:byte、short、int、long、float、double、char、boolean 除掉这四类八种基本类型,其它的都是对象,也就是引用类型,包括数组。 对于每个对象类型,JVM都会为其初始化一...

2018-08-10 23:11:30 129 1

原创 敏捷开发、持续集成/交付(CI/CD)、DevOps学习笔记

概述 敏捷开发和DevOps都是一种理念。他们的理念相似,都是为了更好更快的发布产品,但又不完全相同。 而CI/CD是实现这两者理念的一种方法。 敏捷开发 前言 传统方式开发前有一份详细的开发文档,程序员照着需求直接敲代码,产品做好了直接部署上线。中间不会有人打扰,需求也不会变。 但是...

2018-08-09 22:56:16 12785 4

原创 POJO与JavaBean与SpringBean的概念与区别

前言 最近在看阿里Java开发手册的过程中发现了大量的POJO关键字,之前也一直听说JavaBean和SpringBean,但是他们之间的概念还不是很清楚,所以最近学习了一下,写下了这篇文章。 先来看一下阿里Java开发手册中提到“POJO”这个关键字的片段。 阿里Java开发手册 一、编...

2018-08-08 15:35:26 1973 0

原创 控制反转(IoC)学习笔记

什么是依赖(Dependency)? 依赖是一种关系,通俗来讲就是一种需要。 程序员需要电脑,因为没有电脑程序员就没有办法编写代码,所以说程序员依赖电脑,电脑被程序员依赖。 在面向对象编程中,代码可以这样编写。 class Coder { // 程序员依赖电脑,并自己new一个 ...

2018-08-06 22:37:29 139 0

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