自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 面试之redis

1、redis的数据持久化方式有哪些?redis持久化有两种,RDB(RedisDataBase)和AOF(AppendOnlyFile)。持久化就是把内存的数据写到磁盘中去,防止服务宕机,内存数据丢失。RDB其实就是把数据以快照的形式保存在磁盘上。默认开启。可以理解成把当前时刻的数据拍成一张照片保存下来。RDB持久化是指在指定的时间间隔内将内存中的数据集快照写入磁盘。也是默认的持久化方式,这种方式是就是将内存中数据以快照的方式写入到二进制文件中,默认的文件名为dump.rdb。容易丢失数据,重...

2021-04-12 15:26:01 199

原创 普通项目改造分布式,引入dubbo+zookeeper以及使用maven生成可执行的dubbo服务jar包

一、背景假如当前有一个系统,里面包含了用户模块、积分模块、商城模块...等等等,非分布式的做法是开一个web工程,把所有的模块放到同一个系统中,前端web页面也放其中,称为单体工程。很明显,这种做法会产生很多问题,臃肿、扩展延伸性差、性能瓶颈低、不利研发分组等。在分布式下则不同,每个模块都成为独立的一个系统,各个系统之间相互调用,加上前后端分离,让服务器端只提供接口,供pcweb、移动web、...

2019-08-23 21:21:09 710

原创 解析网络通讯协议,TCP连接三次握手,断开四次挥手

参考文献https://www.cnblogs.com/onepixel/p/7092302.html,这篇文章写得很好。什么是tcp?tcp是tcp/ip协议族中很重要的一个协议,位于第二层传输层,上层就是我们熟悉的http、ftp等应用协议,其兄弟协议是udp协议。在上篇文章中有提到tcp/ip协议四层模型,分别是应用层、传输层、网络层、链路层,应用层直接面对计算机中的程序,htt...

2019-07-31 16:38:18 458

原创 解析网络通讯协议,http协议报文头部解析

HTTP协议的请求和响应报文中必定包含HTTP报文头部,也称为首部。首部内容分别为客户端和服务器处理请求和响应提供所需要的信息。本质上来说,首部包含一些名/值对的数值,类似于键值对。单个HTTP首部字段可以有多个值,用逗号分隔.首部的分类:通用首部:既可出现在请求报文中,也可出现在响应报文中。比如Date首部。 请求首部:请求报文才有的,描述请求数据和客户端特性。 响应首部:响应报文...

2019-07-08 19:13:28 1353

原创 解析网络通讯协议,详解http协议

一、http是什么http是指HyperText Transfer Protocol,超文本传输协议,是一种详细规定了浏览器和万维网(WWW = World Wide Web)服务器之间互相通信的规则,通过因特网传送万维网文档的数据传送协议。它可以使浏览器更加高效,使网络传输减少。也可以理解成用于定义web浏览器到web服务器之间交换数据过程标准以及数据本身的格式。http协议是tcp/i...

2019-07-04 16:02:05 1390

原创 源码解析java集合框架,LinkedHashSet源码

一、LinkedHashSet解读LinkedHashSet继承自HashSet,实现了Set接口,底层是由LinkedHashMap实现,构造方法调用的都是LinkedHashMap的构造方法,LinkedHashSet底层使用LinkedHashMap来保存所有元素,上篇博客中对LinkedHashMap进行了介绍,LinkedHashMap是在HashMap的基础上新维护了一个双向链表...

2019-04-02 09:41:13 162

原创 源码解析java集合框架,LinkedHashMap源码

一、LinkedHashMap解读LinkedHashMap类的层次结构:LinkedHashMap实现了Map<K,V>接口,继承HashMap类。LinkedHashMap继承自HashMap,底层数据结构大体相似,都有数组+单向链表+红黑树,LinkedHashMap在此数据结构上新添加维护了一条双向链表,把所有的元素通过双向链表连接起来,比HashMap多了...

2019-04-01 21:26:10 180

原创 源码解析java集合框架,TreeSet源码

一、TreeSet剖析TreeSet与TreeMap数据结构底层都是红黑树,区别就是每个数据的结构不一样,TreeMap存储的是key-value键值对,TreeSet值存储一个值,且值是存放在TreeMap的键之上,TreeSet底层实现就是TreeMap,底层都是红黑树。TreeSet,红黑树TreeSet是通过TreeMap实现,TreeSet直接把值放在TreeMap的key...

2019-03-29 14:22:31 163

原创 源码解析java集合框架,TreeMap源码

一、TreeMap剖析TreeMap是Map接口下一个实现类,基于键值对来存储每个数据,TreeMap是一个有序集合,顺序是key值的插入顺序,每个元素对象必须实现比较器,底层数据结构是一颗红黑树,之前在介绍HashMap时也有提到过红黑树,HashMap底层是数组链表红黑树,而TreeMap只包含红黑树一种数据结构类型。红黑树插入、检索、移除元素操作时间复杂度都是O(logn),性能较高。...

2019-03-29 11:55:38 180

原创 源码解析java集合框架,HashSet源码

一、HashSet解读在讲HashSet底层数据结构之间我们不妨先来浏览下HashSet的源码,因为它很懒,为什么说它懒,是因为它底层是用的HashMap,没有自己的实现,甚至一些常量都是直接用的HashMap中的,数组初始化容量、装载因子等。/** * Constructs a new, empty set; the backing <tt>HashMap<...

2019-03-27 15:17:22 171

原创 源码解析java集合框架,HashMap源码

一、HashMap剖析HashMap与ArryList、LinkedList不同,HashMap是Map接口下的实现类。Map接口和List接口无关联,且是集合两大根接口。HashMap是以键值对(key-value)形式存储每个元素数据,底层数据结构在1.8前是“数组+链表”,1.8后是“数组+链表+红黑树”结构。本系列源码解析都是基于jdk1.8。链表长度大于8转红黑树。长度小于6时红黑树...

2019-03-25 15:40:55 149

原创 源码解析java集合框架,LinkedList源码

一、LinkedList剖析LinkedList也是List接口下的一个实现类,LinkedList是一个双向链表,底层数据结构为双向链表。LinkedList数据结构LinkedList采用双向链表存储方式,优缺点如下缺点:遍历、随机访问元素效率低下。优点:插入、删除元素效率非常高,只需改变修改元素关联的内存指针即可。二、源码解读我们直接看Link...

2019-03-20 15:31:44 267

原创 源码解析java集合框架,ArrayList源码

一、ArrayList剖析ArrayList是List接口下的一个实现类,ArrayList是一个动态数组,底层数据结构为可以动态增长的数组,相比数组来说,ArrayList可以动态的增加删除元素,有成熟的扩容算法。 0 1 2 3 4 ...... ...

2019-03-20 14:09:32 159

原创 源码解析java集合框架,集合类

一、java集合类框架二、说明集合框架主要是由两大接口派生出:Collection和Map,作为集合顶层根接口,以此派生出接口、抽象类、普通类。 集合接口,区分不同类型的集合类型,是集合框架顶层的基础。 抽象类,对不同集合接口进行部分实现,为派生的实现类做好基础。 实现类,抽象类或接口的具体实现,也是实际使用中接触最多的。 Collection接口主要分List和Set...

2019-03-19 13:31:44 171

原创 深入java多线程,深入理解volatile使用与原理

1、认识volatilevolatile是用来修饰变量的。与synchronized不同,synchronized是用来修饰方法和代码块。volatile称之为轻量级锁,被volatile修改的变量在各个线程之间是可见的,保持线程之间的可见性,可见性是指多个线程共享同一个变量,当一个线程修改了这个变量,另外的线程能感知到这个变量的变化并进行读取。2、volatile实现原理...

2019-03-14 14:06:38 179

原创 深入java多线程,单例设计模式

1、概念单例模式的意思就是只有一个实例。单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。这个类称为单例类。单例模式三大要点:一个类只能有一个对象实例 必须由自身创建这个实例 必须对整个系统提供这个实例,需要有对外提供实例的方法单例模式分为饿汉式和懒汉式:饿汉式:在程序启动或类被加载的时候,同时创建好对象实例。 懒汉式:类被加载时不进行创建,当实例被...

2019-03-13 14:39:54 132

原创 深入java多线程,多线程问题及synchronized的jvm原理

1、多线程安全新问题什么时候会出现多线程问题以及出现多线程问题的条件有哪些,下面通过一个简单的例子来看下。假如系统中需要生成累加不重复的数字,用来设置单号或流水号,我们通过一段简单的代码来实现:public class Thread4 { private int num; private int getNext() { return num++; } publi...

2019-03-12 15:28:00 293

原创 深入java多线程,多线程状态及转换

1、线程状态值在一个时间点,每个线程有且只有一种状态,反应线程当前的状况。在Thread类中用枚举定义了线程的6中状态:/** * A thread state. A thread can be in one of the following states: */ public enum State { /** * Th...

2019-03-11 14:32:45 305

原创 深入java多线程,认识多线程

1、什么是多线程?讲到线程,不得不提到进程,而进程跟操作系统相关联。一个进程对应的是一个运行中的应用程序,我们平时上的QQ、浏览器都会有相对应的进程,进程是操作系统运行的基本单位,一个应用程序可能有多同时运行的进程。每个进程都有独立的内存空间。在Windows系统中,一个运行的exe就是一个进程。进程示例线程是进程的子集,一个进程包含很多线程,每条线程并行执行不同的任务。一条线...

2019-03-08 10:56:45 174

原创 解析spring源码,IOC之bean的创建与获取

本文主要内容及做什么主要针对spring中的ioc,采用debug方式讲解spring如何创建和获取bean,承接上篇博客解析spring源码,IOC加载bean资源配置文件test代码为:public class test { public static void main(String[] args) { ApplicationContext cx = new Clas...

2019-03-01 15:13:46 564

原创 解析spring源码,IOC加载bean资源配置文件

本文主要内容及做什么主要针对spring中的ioc,采用debug方式讲解spring如何加载bean配置文件,目的是对加载过程有个大概了解,spring源码优雅且复杂。项目环境spring版本号为4.0.2,jdk1.8。spring配置文件代码:&lt;?xml version="1.0" encoding="UTF-8"?&gt;&lt;beans xmlns=...

2019-02-27 21:13:10 261

原创 详解mysql事物隔离级别与锁机制

事物隔离级别首先看下数据库事物四大特性,ACID,原子性,一致性,隔离性,持久性。隔离性:由并发事务所作的修改必须与任何其它并发事务所作的修改隔离,互相不受影响。同一时间,只允许一个事务请求同一数据,不同的事务之间彼此没有任何干扰。mysql具有四种事物隔离级别,隔离力度依次递增,高度隔离会限制可并行执行的事务数,所以一些应用程序降低隔离级别以换取更大的吞吐量。不同业务场景下使用不同的数据...

2019-01-21 17:34:34 4019 4

原创 数据结构与算法简述 递归算法

递归就是函数(方法)不断调用自身,直到得到想要的结果。其思路是把一个大问题转化为规模很小的子问题,这些子问题性质一样,可以采用同一种方式处理,通过解决小问题来达到解决大问题的目的。典型使用递归的有计算阶乘,汉诺塔问题等,递归有三要素:1明确的终止条件,不能一直递归下去,2终止处理办法,3能提取重复的逻辑,简单化问题。计算阶乘/** * 递归 * 阶乘 */public c...

2019-01-07 16:58:03 593

原创 数据结构与算法简述 插入法排序算法

插入法排序:从数据元素序列未排序的位置开始,每拿到一个元素,都将这个元素与所有它之前的元素遍历比较一遍,让符合排序顺序的元素挨个移动到当前范围内它应该所处的位置上。代码实现:/** * 插入法排序 */public class InsertSort { public static void ISort(int[] t) { for (int i = 0; i &lt; ...

2019-01-03 10:06:29 310

原创 数据结构与算法简述 选择排序算法

选择排序算法是每次从待排序数据中选择一个最大或者最小的值放到最前面,直到全部选择完毕。实现代码和冒泡排序类似,双重for循环,多次赋值操作。/** * 选择排序 */public class SelectSort { private static void sSort(int[] t) { for (int i = 0; i &lt; t.length-1; i++) {...

2019-01-02 21:35:00 212

原创 数据结构与算法简述 冒泡排序算法

冒泡排序原理:每次比较相邻两个数大小,调整顺序。先比较第一个数和第二个数,调整完再比较第二个和第三个,再比较第三第四个,依次比较,比较完第一轮将会把最大的数排序到最后,每一轮比较完就会把一个大的数冒泡到最后,冒泡好的数据将不用再排序比较。 第一轮比较:比较结果:经过第一轮比较后,把46冒泡出去第二轮比较则为:第二轮结果为:依次对比即可,可以看出,冒泡...

2019-01-02 17:49:57 508

原创 数据结构与算法简述 二分查找法

二分法查找:二分查找又称折半查找,每次查找,将数据分为两个部分,逐渐缩小查找范围,直到查到数据。时间复杂度为log2n。使用二分查找要求:一是必须是顺序存储数据结构,二按关键字有序排列。 /** * 二分查找法 */public class BinarySearch { /** * 循环实现 */ public static int search(int[] ...

2019-01-02 14:18:55 486

原创 java虚拟机杂谈三jvm内存结构

jvm内存结构包括了堆、虚拟机栈、程序计数器、方法区、本地方法栈。堆内存:堆内存主要存放java对象实例,所有线程共享,大部分新创建new的对象都会进堆内存,GC主要管理的内存,堆是是jvm中最大的一块内存,堆内部分新生代、老年代,新生代又分为eden区、from区、to区,不同区存放不同的对象,对应不同的GC回收算法。 虚拟机栈:也称栈内存,栈是线程私有的,存放方法运行时数据,生命周期...

2018-12-21 14:07:48 432

原创 java虚拟机杂谈二 java类加载器

java类加载器作用:从磁盘、网络或其他来源加载class文件(字节码文件)加载到jvm内存中,并对字节码进行校验,解析和初始化,生成对应的Class对象。 class文件(字节码文件)的来源有多种jdk编译的class文件,先是用编辑工具(如eclipse)编写java代码; Jar文件,原始jar包,包含了很多class文件; 网络,可以从网络中加载class文件; js...

2018-12-18 20:20:45 169

原创 java虚拟机杂谈一jvm简介

 java虚拟机所处位置:虚拟机是一种抽象化的计算机,通过在实际的计算机上仿真模拟各种计算机功能来实现的。Java虚拟机有自己完善的硬体架构,如处理器、堆栈、寄存器等,还具有相应的指令系统。Java虚拟机屏蔽了与具体操作系统平台相关的信息,使得Java程序只需生成在Java虚拟机上运行的目标代码(字节码),就可以在多种平台上不加修改地运行。【摘自百度】JVM是在真机上虚拟出来的机器,它...

2018-12-14 15:27:39 205

原创 (二)消息中间件RocketMQ解决分布式事物

在单库单系统中,不需要对事物进行特殊的处理,回滚即可。当一个大系统拆分多个子系统微服务之后,由于事物不支持跨系统处理,就有了分布式事物的问题。解决分布式事物常见的方案有以下几种:基于消息中间件解决,比较常用的方案,可靠性高,适合于对实时性要求不是很高的应用场景。 TCC(try confirm cancel)事物补偿性方案,实时性高,个人理解为直接通过rpc交互,如发生异常或者业务不满足...

2018-12-10 19:58:21 651

原创 (一)消息中间件,为什么要用消息中间件,解决了什么问题

什么是消息中间件?中间件被描述为为应用程序提供操作系统所提供的服务之外的服务,简化应用程序的通信、输入输出的开发,使他们专注于自己的业务逻辑。消息中间件适用于需要可靠的数据传送的分布式环境。采用消息中间件机制的系统中,不同的对象之间通过传递消息来激活对方的事件,完成相应的操作。发送者将消息发送给消息服务器,消息服务器将消息存放在若干队列中,在合适的时候再将消息转发给接收者。消息中间件能在不...

2018-12-04 10:38:09 8073 1

原创 (一)dubbo学习,dubbo是什么

dubbo是一个适用于分布式的RPC(远程过程调用)框架。什么是分布式系统随着互联网的发展,网站应用的规模不断扩大,常规的垂直应用架构已无法应对,分布式服务架构以及流动计算架构势在必行,需要一个治理系统确保架构有条不紊的演进。“分布式系统是若干独立计算机的集合,这些计算机对于用户来说就像单个相关系统”。我们拿电商系统来举例一个小型的数据量不是很大的电商系统架构,不需要做特殊的架...

2018-11-28 10:50:22 418

原创 (六)java与redis高可用,java连接哨兵sentinel原理

先来看下java连接redis主从结构图:redis主从需要在java中指定读和写redis源,而且是固定的,当主节点宕机之后,整个redis将不能使用,有明显的单点问题。使用sentinel哨兵之后为:Sentinel(哨兵)是Redis高可用性的解决方案,一个或者多个sentinel实例监视任意多个主服务器及其从服务器。sentinel每隔1秒向master发送【ping...

2018-11-23 11:47:22 3819

原创 (五)redis高可用,哨兵模式环境搭建

redis sentinel是redis高可用的实现方案,在实际生产环境中,对提高整个系统的高可用性是非常有帮助的,当主节点发生故障时,redis sentinel能自动完成故障发现和故障转移,并通知应用方,从而实现高可用。当主节点宕机后,sentinel在从节点中选举新的节点成为主节点,解决redis单点问题,实现高可用。下面进行环境搭建:准备好6台linux,redis1、re...

2018-11-14 16:48:07 6089

原创 (四)redis主从复制搭建

 在前面章节中搭建好了tomcat集群,nginx做负载均衡节点,redis统一管理存储session并且做tomcat和数据库直接的缓存:为了提高redis节点的性能,保证redis节点的高可用,需要集群redis:redis主从和mysql主从类似,三个节点,一个主,两个从,从节点复制主节点数据,在从节点中配置主节点信息即可首先准备好环境,创建三台linux虚拟机,并安装好...

2018-11-09 16:41:58 142

原创 (三)配置nginx负载tomcat,redis解决session共享

Nginx ("engine x") 是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP服务器。Nginx是由Igor Sysoev为俄罗斯访问量第二的Rambler.ru站点开发的。何为反向代理呢?即以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器...

2018-11-08 16:16:04 366

原创 (二)Nginx+Tomcat+Redis+Mysql安装

先上官网下载安装包,安装nginx需要预先安装zlib、pcre安装nginx解压:var -zxvf nginx-5,解压完进入目录,可以看到,configure为环境检测脚本./configure进行安装前的检测:缺少pcre和zlib,安装pcre和zlib,下载好相应的targz包,解压:安装pcre,进入到pcre解压目录下,源码方式安装:make &...

2018-11-07 14:11:00 912

原创 (一)redis的安装

去redis官网下载linux系统安装包redis.io放到linux中soft下解压再安装c++,yum install gcc-c++;编译安装redis:再make install:安装完,进入到/usr/local/bin目录下,可以看到redis启动文件等:执行./redis-server启动redis:出现以下,表示启动成功:...

2018-11-06 14:35:10 151

原创 (三)mycat的高可用与集群

HAProxy:HAProxy提供高可用性、负载均衡以及基于TCP和HTTP应用的代理,支持虚拟主机,它是免费、快速并且可靠的一种解决方案。HAProxy 相比 LVS 的 使用要简单很多,功能方面也很丰富,免费开源,稳定性也是非常好,可以与 LVS 相媲美。根据官方文档,HAProxy最高支持10G并发,作为软件级负载均衡,性能强大;一般都采用HAProxy来负载Mysql。keepal...

2018-11-01 15:00:57 4926 1

空空如也

空空如也

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

TA关注的人

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