自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 HashMap工作原理和扩容机制

HashMap工作原理 HashMap扩容 1 HashMap的扩容时机 2 HashMap的扩容过程 补充 1 容量必须是2的幂 2 rehash References  1. HashMap工作原理HashMap作为优秀的Java集合框架中的一个重要的成员,在很多编程场景下为我们所用。HashMap作为数据结构散列表的一种实现,就其工...

2018-09-12 12:58:03 424

原创 远程调用中,rpc到底比http好在哪里

ProtoBuffer的介绍google有一款非常高效的数据传输格式框架ProtoBuffer。在java中使用protobuffer作为序列化效率比jdk自身的serializable接口效率高的多(github上有个对于序列号性能的研究https://github.com/eishay/jvm-serializers/wiki),这在缓存的时候效率非常高。当然,如此优秀的数据格式框架并...

2018-09-05 20:25:49 3947

原创 slf4j门面模式实现原理

在使用slf4j的时候,只需要通过门面类LoggerFactory类获取Logger Java代码  /**     * Return a logger named according to the name parameter using the statically     * bound {@link ILoggerFactory} instance.     *    ...

2018-08-14 16:21:03 1007

原创 生产者-消费者Java实现

1 概述 生产者消费者问题是多线程的一个经典问题,它描述是有一块缓冲区作为仓库,生产者可以将产品放入仓库,消费者则可以从仓库中取走产品。解决生产者/消费者问题的方法可分为两类:采用某种机制保护生产者和消费者之间的同步; 在生产者和消费者之间建立一个管道。第一种方式有较高的效率,并且易于实现,代码的可控制性较好,属于常用的模式。第二种管道缓冲区不易控制,被传输数据对象不易于封装等...

2018-08-14 11:07:33 216

原创 B树、B+树、LSM树以及其典型应用场景

前言动态查找树主要有:二叉查找树、平衡二叉树、红黑树、B树、B+树。前面三种是典型的二叉查找树,查找的时间复杂度是O(log2N)与树的深度有关系,那么降低树的深度也就可以提升查找效率。这时就提出了平衡多路查找树,也就是B树以及B+树。B树和B+树非常典型的场景就是用于关系型数据库的索引(MySQL)B树B树是一种平衡多路搜索树,B树与红黑树最大的不同在于,B树的结点可以有多个子女...

2018-08-13 15:35:37 221

转载 C++之引用的详解

C++中的引用:引用引入了对象的一个同义词。定义引用的表示方法与定义指针相似,只是用&代替了*。引用(reference)是c++对c语言的重要扩充。引用就是某一变量(目标)的一个别名,对引用的操作与对变量直接操作完全一样。其格式为:类型 &引用变量名 = 已定义过的变量名。 引用的特点:①一个变量可取多个别名。②引用必须初始化。③引用只能在初始化的时候...

2018-08-06 22:07:29 159

原创 为什么需要RPC,而不是简单的HTTP接口

转载自:http://www.oschina.net/question/271044_2155059?sort=default&p=1#answers目前有很多Java的RPC框架,有基于Json的,有基于XML,也有基于二进制对象的。论复杂度,RPC框架肯定是高于简单的HTTP接口的。但毋庸置疑,HTTP接口由于受限于HTTP协议,需要带HTTP请求头,导致传输起来效率或者说安全...

2018-08-06 21:04:29 663

转载 红黑树(一)之 原理和算法详细介绍

首页 新随笔 联系 订阅 管理 < 2018年7月 > 日 一 二 三 四 五 六 24 25 26 27 28 29 30 1 2 3 4 5 6 7 8 9 10 11 12 1...

2018-07-26 14:07:44 261

转载 B树、B+树、LSM树以及其典型应用场景

前言动态查找树主要有:二叉查找树、平衡二叉树、红黑树、B树、B+树。前面三种是典型的二叉查找树,查找的时间复杂度是O(log2N)与树的深度有关系,那么降低树的深度也就可以提升查找效率。这时就提出了平衡多路查找树,也就是B树以及B+树。B树和B+树非常典型的场景就是用于关系型数据库的索引(MySQL)B树B树是一种平衡多路搜索树,B树与红黑树最大的不同在于,B树的结点可以有多个子女...

2018-07-26 12:18:36 163

转载 redis应用场景

毫无疑问,Redis开创了一种新的数据存储思路,使用Redis,我们不用在面对功能单调的数据库时,把精力放在如何把大象放进冰箱这样的问题上,而是利用Redis灵活多变的数据结构和数据操作,为不同的大象构建不同的冰箱。希望你喜欢这个比喻。一、Redis常用数据类型Redis最为常用的数据类型主要有以下五种:StringHashListSetSorted set在具体描述这几种数据类型之前,我们先通过...

2018-07-10 17:50:15 120

转载 Redis深入之道:原理解析、场景使用以及视频解读

Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。同时redis也是一个key-value存储系统。Redis,更 是一个高性能的key-value数据库。最主要的是Redis还支持主从同步。本文将为大家推荐一系列的学习资料,有原理解析、场景使用、视频解读等,希望可以帮到大家。Redis视频教程Redis总体介...

2018-07-10 16:15:59 514

原创 几种负载均衡技术的实现

【前言】        负载均衡技术对于中大型网站的性能提高有着很大的优势,最近在学习《大型网站技术的架构》,其中对于负载均衡技术有一些介绍,将学习的经验总结一下,分享下。多交流。 【协议层】http重定向协议实现负载均衡      原理:根据用户的http请求计算出一个真实的web服务器地址,并将该web服务器地址写入http重定向响应中返回给浏览器,由浏览器重新进行访问。 ...

2018-07-10 15:20:52 250

转载 MQ入门总结(一)消息队列概念和使用场景

一、消息队列消息即是信息的载体。为了让消息发送者和消息接收者都能够明白消息所承载的信息(消息发送者需要知道如何构造消息;消息接收者需要知道如何解析消息),它们就需要按照一种统一的格式描述消息,这种统一的格式称之为消息协议。所以,有效的消息一定具有某一种格式;而没有格式的消息是没有意义的。而消息从发送者到接收者的方式也有两种。一种我们可以称为即时消息通讯,也就是说消息从一端发出后(消息发送者)立即就...

2018-07-10 09:53:50 202

转载 简介几种负载均衡原理

开头先理解一下所谓的“均衡”不能狭义地理解为分配给所有实际服务器一样多的工作量,因为多台服务器的承载能力各不相同,这可能体现在硬件配置、网络带宽的差异,也可能因为某台服务器身兼多职,我们所说的“均衡”,也就是希望所有服务器都不要过载,并且能够最大程序地发挥作用。一、http重定向当http代理(比如浏览器)向web服务器请求某个URL后,web服务器可以通过http响应头信息中的Location标...

2018-07-09 20:02:12 194

转载 Java日志框架:slf4j作用及其实现原理

简单回顾门面模式slf4j是门面模式的典型应用,因此在讲slf4j前,我们先简单回顾一下门面模式,门面模式,其核心为外部与一个子系统的通信必须通过一个统一的外观对象进行,使得子系统更易于使用。用一张图来表示门面模式的结构为:门面模式的核心为Facade即门面对象,门面对象核心为几个点:知道所有子角色的功能和责任将客户端发来的请求委派到子系统中,没有实际业务逻辑不参与子系统内业务逻辑的实现大致上来看...

2018-07-05 21:19:04 237

转载 你应该知道的 RPC 原理

在校期间大家都写过不少程序,比如写个hello world服务类,然后本地调用下,如下所示。这些程序的特点是服务消费方和服务提供方是本地调用关系。而一旦踏入公司尤其是大型互联网公司就会发现,公司的系统都由成千上万大大小小的服务组成,各服务部署在不同的机器上,由不同的团队负责。这时就会遇到两个问题:1)要搭建一个新服务,免不了需要依赖他人的服务,而现在他人的服务都在远端,怎么调用?2)其它团队要使用...

2018-07-05 16:32:23 185

转载 GET和POST请求的区别

GET和POST的区别1.标准答案GET在浏览器回退时是无害的,而POST会再次提交请求。GET产生的URL地址可以被Bookmark,而POST不可以。GET请求会被浏览器主动cache,而POST不会,除非手动设置。GET请求只能进行url编码,而POST支持多种编码方式。GET请求参数会被完整保留在浏览器历史记录里,而POST中的参数不会被保留。GET请求在URL中传送的参数是有长度限制的,...

2018-07-05 14:25:50 178

转载 消息队列使用的四种场景介绍

消息队列中间件是分布式系统中重要的组件,主要解决应用耦合,异步消息,流量削锋等问题实现高性能,高可用,可伸缩和最终一致性架构使用较多的消息队列有ActiveMQ,RabbitMQ,ZeroMQ,Kafka,MetaMQ,RocketMQ二、消息队列应用场景以下介绍消息队列在实际应用中常用的使用场景。异步处理,应用解耦,流量削锋和消息通讯四个场景2.1异步处理场景说明:用户注册后,需要发注册邮件和注...

2018-06-25 14:10:10 143

转载 JAVA8 十大新特性详解

一、接口的默认方法在接口中新增了default方法和static方法,这两种方法可以有方法体 1、static方法 示例代码:public interface DefalutTest { static int a =5; default void defaultMethod(){ System.out.println("DefalutTest defalut 方法"...

2018-06-25 14:08:49 132

转载 mac终端常用命令

目录操作命令名功能描述使用举例mkdir创建一个目录mkdir dirnamermdir删除一个目录rmdir dirnamemvdir移动或重命名一个目录mvdir dir1 dir2cd改变当前目录cd dirnamepwd显示当前目录的路径名pwdls显示当前目录的内容ls -ladircmp比较两个目录的内容dircmp dir1 dir2文件操作命令名功能描述使用举例cat显示或连接文件...

2018-06-08 15:03:35 181

原创 Maven学习

Maven简单来说是一个项目管理工具,它不仅仅提供编译的脚本,更是在整 个项目周期中提供测试,发布,文档生成等功能,并且有着独特的依赖性管理方法。完美的依赖性管理:      由于Maven会把所有依赖的包放在本机的一个目录下,所以实际上是脱离Project本身存在的。IntelliJ IDEA引入了一个External Library的概念,所有的Maven依赖性都会放在这里,和项目自带的库区分...

2018-06-07 16:45:54 89

原创 java.util.concurrent包下的几个常用类

 1.Callable<V>Callable<V>与Runnable类似,理解Callable<V>可以从比较其与Runnable的区别开始:1)从使用上:实现的Callable<V>的类需要实现call()方法,此方法有返回对象V;而Runnable的子类需要实现run()方法,但没有返回值;2)如果直接调用Callable<V...

2018-05-11 10:48:14 1286 1

原创 从输入URL到浏览器显示页面发生了什么

   当在浏览器地址栏输入网址,如:www.baidu.com后浏览器是怎么把最终的页面呈现出来的呢?这个过程可以大致分为两个部分:网络通信和页面渲染。一、网络通信    互联网内各网络设备间的通信都遵循TCP/IP协议,利用TCP/IP协议族进行网络通信时,会通过分层顺序与对方进行通信。分层由高到低分别为:应用层、传输层、网络层、数据链路层。发送端从应用层往下走,接收端从数据链路层网上走...

2018-05-10 20:41:10 339

转载 java中10大常见异常

NO.1 java.lang.NullPointerException  这个异常大家肯定都经常遇到,异常的解释是 “程序遇上了空指针 “,简单地说就是调用了未经初始化的对象或者是不存在的对象,这个错误经常出现在创建图片,调用数组这些操作中,比如图片未经初始化,或者图片创建时的路径错误等等。对数组操作中出现空指针,很多情况下是一些刚开始学习编程的朋友常犯的错误,即把数组的初始化和数组元素的初始化混...

2018-05-10 20:00:55 1042 1

原创 Nosql简介 Redis,Memchche,MongoDb的区别

本篇文章主要介绍Nosql的一些东西,以及Nosql中比较火的三个数据库Redis、Memchache、MongoDb和他们之间的区别。以下是本文章的阅读目录一、Nosql介绍1.Nosql简介2.Nosql的特点和关系型数据库的区别3.Redis,Memcache,MongoDb的特点与区别4.参考文章 Nosql介绍Nosql的全称是Not Only Sql,这个概念早...

2018-05-07 16:28:40 124

转载 NoSQL与SQL的区别

转载自:http://blog.csdn.net/xlgen157387/article/details/47908797云计算背后的秘密:NoSQL诞生的原因和优缺点我本来一直觉得NoSQL其实很容易理解的,我本身也已经对NoSQL有了非常深入的研究,但是在最近准备YunTable的Chart的时候,发现NoSQL不仅非常博大精深,而且我个人对NoSQL的理解也只是皮毛而已,但我还算是一个“知耻...

2018-05-07 16:27:54 142

转载 SSL四次握手

SSL类似于TCP的三次握手,在HTTP链接建立之前进行四次握手,从而客户度和服务端沟通好HTTP传输时对称加密的密钥,大致过程如下图:1、客户端请求建立SSL链接,并向服务端发送一个随机数–Client random和客户端支持的加密方法,比如RSA公钥加密,此时是明文传输。 2、服务端回复一种客户端支持的加密方法、一个随机数–Server random、授信的服务器证书和非对称加密的公钥。 3...

2018-04-17 18:55:34 328

转载 HTTP请求、响应报文格式

HTTP请求报文格式:HTTP请求报文主要由请求行、请求头部、请求正文3部分组成1,请求行由3部分组成,分别为:请求方法、URL(见备注1)以及协议版本,之间由空格分隔请求方法包括GET、HEAD、PUT、POST、TRACE、OPTIONS、DELETE以及扩展方法,当然并不是所有的服务器都实现了所有的方法,部分方法即便支持,处于安全性的考虑也是不可用的协议版本的格式为:HTTP/主版本号.次版...

2018-04-14 11:46:50 171

原创 redis详解

1. 使用redis有哪些好处?(1) 速度快,因为数据存在内存中,类似于HashMap,HashMap的优势就是查找和操作的时间复杂度都是O(1)(2) 支持丰富数据类型,支持string,list,set,sorted set,hash(3) 支持事务,操作都是原子性,所谓的原子性就是对数据的更改要么全部执行,要么全部不执行(4) 丰富的特性:可用于缓存,消息,按key设置过期时间,过期后将会...

2018-04-12 16:34:35 646

原创 c++11智能指针解析——揭开底层面纱,完整理解智能指针

昨天跟同事小小的研究了下关于不同平台下的字节对齐问题,起因是遇到了一个坑,vs上没有问题,在安卓上却崩溃了。找了半天后发现是c++字节补齐问题,期间包括使用#pragma pack(1)来限定字节对齐方式等各种条件,也是把我们搞的七晕八素,总算是进一步了解了c++对象结构以及编译器的操作(有机会的话也补充下字节对齐的理解)。进而想到了智能指针,稍微了解下。第一次接触智能指针,天知道大学期间自己有多...

2018-04-11 20:52:02 194

原创 内存中的字节对齐

一、什么是字节对齐,为什么要对齐? 现代计算机中内存空间都是按照byte划分的,从理论上讲似乎对任何类型的变量的访问可以从任何地址开始,但实际情况是在访问特定类型变量的时候经常在特定的内存地址访问,这就需要各种类型数据按照一定的规则在空间上排列,而不是顺序的一个接一个的排放,这就是对齐。    对齐的作用和原因:各个硬件平台对存储空间的处理上有很大的不同。一些平台对某些特定类型的数据只能从某些特定...

2018-04-11 20:31:00 208

转载 进程间的五种通信方式介绍

进程间通信(IPC)介绍进程间通信(IPC,InterProcess Communication)是指在不同进程之间传播或交换信息。IPC的方式通常有管道(包括无名管道和命名管道)、消息队列、信号量、共享存储、Socket、Streams等。其中 Socket和Streams支持不同主机上的两个进程IPC。以Linux中的C语言编程为例。一、管道管道,通常指无名管道,是 UNIX 系统IPC最古老...

2018-04-11 15:23:37 228

转载 Spring三大组件

Spring三大组件Spring三大组件Bean组件组件作用Bean的创建Bean的定义Bean的解析Context组件组件作用ApplicationContext子类Core组件访问资源Core资源的加载Bean组件组件作用Bean组件在Spring中的Beans包下,为了解决三件事。Bean的创建,Bean的定义,Bean的解析。最关心的就是Bean的创建。Bean的创建1、工厂模式的实现,顶...

2018-04-08 11:24:37 248

原创 滑动窗口机制

(1).窗口机制    滑动窗口协议的基本原理就是在任意时刻,发送方都维持了一个连续的允许发送的帧的序号,称为发送窗口;同时,接收方也维持了一个连续的允许接收的帧的序号,称为接收窗口。发送窗口和接收窗口的序号的上下界不一定要一样,甚至大小也可以不同。不同的滑动窗口协议窗口大小一般不同。发送方窗口内的序列号代表了那些已经被发送,但是还没有被确认的帧,或者是那些可以被发送的帧。下面举一个例子(假设发...

2018-03-28 22:09:23 459

原创 数据库问题原因详解(脏读、不可重复读、幻读)

一、脏读、不可重复读、幻读1、脏读:脏读就是指当一个事务正在访问数据,并且对数据进行了修改,而这种修改还没有提交到数据库中,这时,另外一个事务也访问这个数据,然后使用了这个数据。例如:张三的工资为5000,事务A中把他的工资改为8000,但事务A尚未提交。与此同时,事务B正在读取张三的工资,读取到张三的工资为8000。随后,事务A发生异常,而回滚了事务。张三的工资又回滚为5000。最后,事务B读取...

2018-03-28 19:35:05 737

转载 java中内存泄露有几种?如何分析泄露原因

一、Java内存回收机制 不论哪种语言的内存分配方式,都需要返回所分配内存的真实地址,也就是返回一个指针到内存块的首地址。Java中对象是采用new或者反射的方法创建的,这些对象的创建都是在堆(Heap)中分配的,所有对象的回收都是由Java虚拟机通过垃圾回收机制完成的。GC为了能够正确释放对象,会监控每个对象的运行状况,对他们的申请、引用、被引用、赋值等状况进行监控,Java会使用有向图的方法...

2018-03-28 19:04:28 1842 1

原创 理解线程池的原理

什么是线程池线程池的概念大家应该都很清楚,帮我们重复管理线程,避免创建大量的线程增加开销。除了降低开销以外,线程池也可以提高响应速度,了解点 JVM 的同学可能知道,一个对象的创建大概需要经过以下几步:检查对应的类是否已经被加载、解析和初始化类加载后,为新生对象分配内存将分配到的内存空间初始为 0对对象进行关键信息的设置,比如对象的哈希码等然后执行 init 方法初始化对象创建一个对象的开销需要经...

2018-03-26 20:15:01 123

原创 常见数据结构与算法整理总结(下)

这篇文章是常见数据结构与算法整理总结的下篇,上一篇主要是对常见的数据结构进行集中总结,这篇主要是总结一些常见的算法相关内容,文章中如有错误,欢迎指出。一、概述二、查找算法三、排序算法四、其它算法五、常见算法题六、总结一、概述以前看到这样一句话,语言只是工具,算法才是程序设计的灵魂。的确,算法在计算机科学中的地位真的很重要,在很多大公司的笔试面试中,算法掌握程度的考察都占据了很大一部分。...

2018-03-23 10:55:33 118

原创 常见数据结构与算法整理总结(上)

数据结构是以某种形式将数据组织在一起的集合,它不仅存储数据,还支持访问和处理数据的操作。算法是为求解一个问题需要遵循的、被清楚指定的简单指令的集合。下面是自己整理的常用数据结构与算法相关内容,如有错误,欢迎指出。为了便于描述,文中涉及到的代码部分都是用Java语言编写的,其实Java本身对常见的几种数据结构,线性表、栈、队列等都提供了较好的实现,就是我们经常用到的Java集合框架,有需要的可以阅读...

2018-03-23 10:54:44 117

转载 http请求中常用请求头和响应头代表的含义

http请求中的常用头(请求头)的含义: Accept:告诉服务器,客户端支持的数据类型。 Accept-Charset:告诉服务器,客户端采用的编码。 Accept-Encoding:告诉服务器,客户机支持的数据压缩格式。 Accept-Language:告诉服务器,客户机的语言环境。 Host:客户机通过这个头告诉服务器,想访问的主机名。 If-Modified-Since:客户机通过这个头告...

2018-03-23 09:56:43 1388

空空如也

空空如也

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

TA关注的人

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