10 CrankZ

尚未进行身份认证

我要认证

暂无相关简介

等级
TA的排名 4w+

本地缓存Caffeine

Caffeine说起Guava Cache,很多人都不会陌生,它是Google Guava工具包中的一个非常方便易用的本地化缓存实现,基于LRU算法实现,支持多种缓存过期策略。由于Guava的大量使用,Guava Cache也得到了大量的应用。但是,Guava Cache的性能一定是最好的吗?也许,曾经,它的性能是非常不错的。但所谓长江后浪推前浪,总会有更加优秀的技术出现。今天,我就来介绍一个比...

2019-05-19 16:54:04

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

JDK1.8之前的堆内存示意图:从上图可以看出堆内存的分为新生代、老年代和永久代。新生代又被进一步分为:Eden区+Survior1区+Survior2区。值得注意的是,在JDK1.8中移除整个永久代,取而代之的是一个叫元空间(Metaspace)的区域(永久代使用的是JVM的堆内存空间,而元空间使用的是物理内存,直接受到本机的物理内存限制)。JVM为什么要进行垃圾回收?...

2019-01-07 16:41:45

String学习笔记

阿里Java开发手册这里总结了阿里开发手册中有关String类的介绍13. 【推荐】使用索引访问用String的split方法得到的数组时,需做最后一个分隔符后有无内容的检查,否则会有抛IndexOutOfBoundsException的风险。说明:String str = "a,b,c,,";String[] ary = str.split(",");// 预期大于3,...

2018-12-25 16:23:54

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

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

2018-12-15 11:22:03

基本类型与包装类型

阿里开发手册中关于基本类型的问题7. 【强制】所有的相同类型的包装类对象之间值的比较,全部使用equals方法比较。 说明:对于Integer var = ? 在-128至127范围内的赋值,Integer对象是在IntegerCache.cache产生,会复用已有对象,这个区间内的Integer值可以直接使用==进行判断,但是这个区间之外的所有数据,都会在堆上产生,并不会复用已有对象,这是...

2018-12-14 21:48:08

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

什么是单例模式单例模式(Singleton Pattern):单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例,这个类称为单例类,它提供全局访问的方法。单例模式特点:这个类只能有一个实例; 它必须自行创建这个实例; 它必须自行向整个系统提供这个实例。Tips:单例模式是一种对象创建型模式。单例模式分类饿汉方式 懒汉方式 双重检测法 静态内...

2018-12-11 15:04:04

创建型模式:工厂模式

23种设计模式工厂模式的分类简单工厂(Simple Factory)模式 工厂方法(Factory Method)模式 抽象工厂(Abstract Factory)模式为什么要用工厂模式满足开闭原则:对修改关闭,对扩展开放。就是别改老代码,只需要添代码,以前所有的老代码,都是有价值的,需要尽力保留 解耦 :把对象的创建和使用的过程分开 降低代码重复: 如果创建某个对象的过...

2018-12-10 15:52:13

哈希 学习笔记

Tips:Hash=哈希=散列Tips:哈希经常与哈希函数指一个意思。本文中哈希与哈希函数不做特殊区分,默认就是一个意思。什么是哈希在记录的关键字与记录的存储地址之间建立的一种对应关系叫哈希函数。哈希函数就是一种映射,是从关键字到存储地址的映射。通常,包含哈希函数的算法的算法复杂度都假设为O(1),这就是为什么在哈希表中搜索数据的时间复杂度会被认为是”平均为O(1)的复杂度...

2018-12-09 18:30:13

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

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

2018-12-09 15:49:10

分布式锁,学习笔记

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

2018-12-06 17:55:17

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

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

2018-12-02 19:07:15

分库分表

名词解释库:database;表:table;分库分表:sharding为什么要分库分表移动互联网时代,海量的用户每天产生海量的数量,比如:用户表 订单表 交易流水表以支付宝用户为例,8亿;微信用户更是10亿。订单表更夸张,比如美团外卖,每天都是几千万的订单。淘宝的历史订单总量应该百亿,甚至千亿级别,这些海量数据远不是一张表能Hold住的。事实上MySQL单表可以存储10亿级...

2018-12-01 23:11:31

MySQL存储引擎:MyISAM与InnoDB

常见命令查看数据库可配置的存储引擎类型MySQL>show engines; create table创建表时指定存储引擎MySQL> use schoolMySQL> create table class(id int ,cname varchar(20)) engine=InnoDB; #创建库,指定引擎InnoDBMySQL> show...

2018-11-28 23:14:30

Cookie、Session、Token

HTTP无状态而Web应用程序是使用HTTP协议传输数据的。HTTP协议是无状态的协议。一旦数据交换完毕,客户端与服务器端的连接就会关闭,再次交换数据需要建立新的连接。这就意味着服务器无法从连接上跟踪会话。就是说假如你去网上购物,把喜欢的商品加到购物车中,因为HTTP是无状态的协议,一旦你的浏览器关闭,下次打开的时候,你上次购物车的商品都没了。这种体验肯定是很差的,所有需要一种机制解决这个问题...

2018-11-28 11:47:23

8个排序算法

排序算法排序算法(Sorting algorithms)是什么? Wikipedia 如是说:In computer science, a sorting algorithm is an algorithm that puts elements of a list in a certain order.也就是说,排序算法,就是某种算法,将列表中的元素按照某种规则排序。常见的如数字大...

2018-11-22 18:30:44

BeanFactory、 ApplicationContext、FactoryBean区别与联系

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

2018-11-21 16:53:25

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

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

2018-11-20 16:41:09

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

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

2018-11-18 23:11:00

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

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

2018-11-18 21:49:12

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

概述创建线程的三种方式:继承Thread,重写run方法 实现Runnable接口,重新run方法 实现Callable接口,重写call方法前两种方式,一种是直接继承Thread,另外一种就是实现Runnable接口,这两种方式都是Java第一版就有的方法。 这两种方式都有一个缺陷就是:在执行完任务之后无法获取执行结果。 如果需要获取执行结果,就必须通过共享变量或者使用线程通信...

2018-11-08 10:14:32

查看更多

勋章 我的勋章
  • 持之以恒
    持之以恒
    授予每个自然月内发布4篇或4篇以上原创或翻译IT博文的用户。不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
  • 勤写标兵Lv1
    勤写标兵Lv1
    授予每个自然周发布1篇到3篇原创IT博文的用户。本勋章将于次周周三上午根据用户上周的博文发布情况由系统自动颁发。