自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

转载 CentOS7安装RabbitMQ

一、安装erlang由于rabbitmq是基于erlang语言开发的,所以必须先安装erlang。安装依赖linux命令:yum -y install gcc glibc-devel make ncurses-devel openssl-devel xmlto perl wget gtk2-devel binutils-develerlang官网:https://www.erlang...

2020-02-23 14:50:46 262

原创 redis键过期删除与淘汰策略

Redis缓存淘汰策略与Redis键的过期删除策略并不完全相同,前者是在Redis内存使用超过一定值的时候(一般这个值可以配置)使用的淘汰策略;而后者是通过定期删除+惰性删除两者结合的方式进行内存淘汰的。定期删除:有一些键只访问一次,因此需要主动删除,默认情况下redis每秒检测10次,检测的对象是所有设置了过期时间的键集合,每次从这个集合中随机检测20个键查看他们是否过期,如果过期就直接删除,...

2019-10-17 22:08:40 476

原创 redis的数据结构与内部编码

Redis支持5种数据结构类型,type命令实际返回的就是当前键的数据结构类型,它们分别是:string(字符串)、hash(哈希)、list(列表)、set(集合)、zset(有序集合),但这些只是Redis对外的数据结构。而每种结构都有至少两种编码;这样做的好处在于:一方面接口与实现分离,当需要增加或改变内部编码时,用户使用不受影响,另一方面可以根据不同的应用场景切换内部编码,提高效率。可...

2019-10-13 18:50:45 318

原创 TCP和UDP原理

一、TCP包1.了解TCP原理首先要知道TCP协议的报文格式:TCP 用于应用程序之间的通信。当应用程序希望通过 TCP 与另一个应用程序通信时,它会发送一个通信请求。这个请求必须被送到一个确切的地址。在双方“握手”之后,TCP 将在两个应用程序之间建立一个全双工 (full-duplex) 的通信。这个全双工的通信将占用两个计算机之间的通信线路,直到它被一方或双方关闭为止。TCP报文由首...

2019-10-03 22:39:10 2711

转载 如何防订单重复提交策略方法

背景在业务开发中,我们常会面对防止重复请求的问题。当服务端对于请求的响应涉及数据的修改,或状态的变更时,可能会造成极大的危害。重复请求的后果在交易系统、售后维权,以及支付系统中尤其严重。前台操作的抖动,快速操作,网络通信或者后端响应慢,都会增加后端重复处理的概率。前台操作去抖动和防快速操作的措施,我们首先会想到在前端做一层控制。当前端触发操作时,或弹出确认界面,或disable入口并倒计时等等...

2019-04-09 00:50:42 774

转载 SpringAOP之注入AspectJ切面

版权声明:本文为博主原创文章, 转载请注明出处。 https://blog.csdn.net/u012523359/article/details/72851479 写在开头: 本文参考资料为Spring In Action(第4版),文中理解不对之处均为本人原因,与书籍无关。 Spring In Action中提到:“Spring AOP构建在动态代理之...

2019-04-09 00:46:58 229 1

转载 JAVA中几种常用的RPC框架介绍

浅谈服务治理与微服务 http://blog.csdn.net/suifeng3051/article/details/53992560RPC框架可以从语言兼容和服务治理不同角度来划分:从语言兼容上的rpc框架有 thrift zeroC-ICE protbuf从服务治理角度的rpc架构有 dubbo RMI、Hessian spring Cloud &nbs...

2019-04-09 00:42:10 378

转载 IN和EXISTS、not in 和not exists的效率详解

从效率来看:1) select * from T1 where exists(select 1 from T2 where T1.a=T2.a) ;T1数据量小而T2数据量非常大时,T1<<T2 时,1) 的查询效率高。2) select * from T1 where T1.a in (select T2.a from T2) ;T1数据量非常大而T2数据量小时,T1&gt...

2019-04-09 00:38:44 1404

转载 负载均衡算法及手段

负载均衡算法及手段 负载均衡器可以是专用设备,也可以是在通用服务器上运行的应用程序。 分散请求到拥有相同内容或提供相同服务的服务器。 专用设备一般只有以太网接口,可以说是多层交换机的一种。 负载均衡器一般会被分配虚拟IP地址,所有来自客户端的请求都是针对虚拟IP地址完成的。负载均衡器通过负载均衡算法将来自客户端的请求转发到服务器的实际IP地址上。负载均...

2019-04-09 00:30:45 326

转载 一致性哈希算法原理

一致性Hash算法背景  一致性哈希算法在1997年由麻省理工学院的Karger等人在解决分布式Cache中提出的,设计目标是为了解决因特网中的热点(Hot spot)问题,初衷和CARP十分类似。一致性哈希修正了CARP使用的简单哈希算法带来的问题,使得DHT可以在P2P环境中真正得到应用。  但现在一致性hash算法在分布式系统中也得到了广泛应用,研究过memcached缓存数据库...

2019-04-09 00:23:50 400

转载 eclipse项目中.classpath文件详解

在使用eclipse或者myeclipse进行java项目开发的时候,每个project(工程)下面都会有一个.classpath文件,那么这个文件究竟有什么作用?2 作用.classpath文件用于记录项目编译环境的所有信息,包括:源文件路径、编译后class文件存放路径、依赖的jar包路径、运行的容器信息、依赖的外部project等信息。如果把该文件删除,则eclipse不能讲该工程识别为...

2019-04-09 00:21:13 278

转载 浅析 eclipse 项目中的".classpath" 和 ".project" 文件的作用

“.classpath” 文件定义项目的结构,如src、output、con、lib等。 源文件的具体位置(kind=”src”)运行的系统环境(kind=”con”,exported=”true”)外部引用的jar(不在项目的libs文件夹中)的具体位置信息(kind=”lib”,exported=”true” )编译后的类文件(*.class)的输出目录(kind=”output”...

2019-04-09 00:14:55 150

转载 Java并发之线程中断

Java并发之线程中断      前面的几篇文章主要介绍了线程的一些最基本的概念,包括线程的间的冲突及其解决办法,以及线程间的协作机制。本篇主要来学习下Java中对线程中断机制的实现。在我们的程序中经常会有一些不达到目的不会退出的线程,例如:我们有一个下载程序线程,该线程在没有下载成功之前是不会退出的,若此时用...

2019-04-09 00:10:50 109

转载 Java并发编程:深入剖析ThreadLocal

Java并发编程:深入剖析ThreadLocal  想必很多朋友对ThreadLocal并不陌生,今天我们就来一起探讨下ThreadLocal的使用方法和实现原理。首先,本文先谈一下对ThreadLocal的理解,然后根据ThreadLocal类的源码分析了其实现原理和使用需要注意的地方,最后给出了两个应用场景。  以下是本文目录大纲:  一.对ThreadLocal的理解  二.深入解...

2019-04-09 00:03:27 84

转载 Java 容器源码分析之Deque 与 ArrayDeque

Java 容器源码分析之 Deque 与 ArrayDeque Queue 也是 Java 集合框架中定义的一种接口,直接继承自 Collection 接口。除了基本的 Collection 接口规定测操作外,Queue 接口还定义一组针对队列的特殊操作。通常来说,Queue 是按照先进先出(FIFO)的方式来管理其中的元素的,但是优先队列是一个例外。D...

2019-04-08 23:51:18 305

转载 LinkedHashMap源码详解

LinkedHashMap源码详解 序言  本来是不打算先讲map的,但是随着对set集合的认识,发现如果不先搞懂各种map,是无法理解set的。因为set集合很多的底层就是用map来存储的。比如HashSet就是用HashMap,LinkedHashSet就是用LinkedHashMap。所以打算把map讲完把。 一、LinkedHash...

2019-04-08 23:30:27 191

转载 groovy脚本导致的FullGC问题

这个是由一个线上问题导致的:背景:应用中内嵌了groovy引擎,会动态执行传入的表达式并返回执行结果线上问题:发现机器的fullGC从某个时候开始暴涨,并且一直持续;登到机器上,用jstat -gcutil命令观察,发现perm区一直是100%,fullGC无法回收;将这台机器的内存dump出来进行分析;在类视图中,发现大量的groovy.lang.GroovyClassLoade...

2019-04-08 23:16:38 303

转载 Java 堆内存

Java 堆内存 堆内存Java 中的堆是 JVM 所管理的最大的一块内存空间,主要用于存放各种类的实例对象。在 Java 中,堆被划分成两个不同的区域:新生代 ( Young )、老年代 ( Old )。新生代 ( Young ) 又被划分为三个区域:Eden、From Survivor、To Survivor。这样划分的目的是为了使 J...

2019-04-08 23:10:30 1808

转载 深入理解JAVA虚拟机---GC日志详解

1.编写JAVA代码import java.util.ArrayList;import java.util.List;/** * -verbose:gc -Xms30M -Xmx30M -Xmn10M -XX:PermSize=200M -XX:MaxPermSize=200M -XX:+PrintGCDetail...

2019-04-08 23:05:01 189

转载 关于Heap Dump

转载自   关于Heap DumpHeap Dump是什么?Heap Dump也叫堆转储文件,是一个Java进程在某个时间点上的内存快照。Heap Dump是有着多种类型的。不过总体上heap dump在触发快照的时候都保存了java对象和类的信息。通常在写heap du...

2019-04-08 22:58:48 17047 1

转载 JVM-String常量池与运行时常量池

周志明先生著-《深入理解Java虚拟机》,书买回来好几天了,但是最近才准备开始搞一搞了(哭瞎……)。首先是第一章的Java以及JVM发展历史,大概知道了现行的应用最广泛的Java虚拟机是HotSpot,当然一些商业公司也有使用自己的虚拟机。JVM运行时数据区这是放在Java内存区域与内存溢出异常里面的必备知识,描述了Java虚拟机在运行时的数据区域↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓...

2019-04-08 22:50:30 227

原创 slf4j、log4j、logbcak、commons-logging等日志的集成

在项目开发过程中,我们可以通过 debug 查找问题。而在线上环境我们查找问题只能通过打印日志的方式查找问题。因此对于一个项目而言,日志记录是一个非常重要的问题。因此,如何选择一个合适的日志记录框架也非常重要。在Java开发中,常用的日志记录框架有JDKLog、Log4J、LogBack、Log4J2、SLF4J。这些日志记录框架各有各的特点,各有各的应用场景。了解这些框架的特点及应用场景,有利...

2018-11-18 15:39:28 442

转载 B树与B+树

B树是为实现高效的磁盘存取而设计的多叉平衡搜索树。这个概念在文件系统,数据库系统中非常重要。当然,有关于B树的产生,发展,结构等等方面的介绍已经非常详细,所以本文只是介绍有关于B树和B+树最核心的知识点,也算是我本人的学习笔记。至于详细的资料,因为毕竟有着太多,所以不再赘述。可以向大家推荐一篇博客:从B树、B+树、B*树谈到R 树,这篇文章中,作者对于B树系列数据结构的讲解非常详细,我的这篇博客,...

2018-10-26 22:42:38 134

转载 Activemq 常见的一些问题

1.先讲严重的:服务挂掉。这得从ActiveMQ的储存机制说起。在通常的情况下,非持久化消息是存储在内存中的,持久化消息是存储在文件中的,它们的最大限制在配置文件的&amp;lt;systemUsage&amp;gt;节点中配置。但是,在非持久化消息堆积到一定程度,内存告急的时候,ActiveMQ会将内存中的非持久化消息写入临时文件中,以腾出内存。虽...

2018-10-26 21:40:17 254

转载 分布式锁的几种实现方式

目前几乎很多大型网站及应用都是分布式部署的,分布式场景中的数据一致性问题一直是一个比较重要的话题。分布式的CAP理论告诉我们“任何一个分布式系统都无法同时满足一致性(Consistency)、可用性(Availability)和分区容错性(Partition tolerance),最多只能同时满足两项。”所以,很多系统在设计之初就要对这三者做出取舍。在互联网领域的绝大多数的场景中,都需要牺牲强一致...

2018-10-26 21:04:52 112

转载 hashCode() 和 equals()的详解

hashCode()和equals()的若干问题解答本章的内容主要解决下面几个问题:1 equals() 的作用是什么?2 equals() 与 == 的区别是什么?3 hashCode() 的作用是什么?4 hashCode() 和 equals() 之间有什么联系?第1部分 equals() 的作用equals() 的作用是 用来判断两个对象是否相等。equals() 定义在...

2018-10-26 21:01:05 152

转载 JWT生成Token详解

JWT简介JWT(json web token)是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准。JWT的声明一般被用来在身份提供者和服务提供者间传递被认证的用户身份信息,以便于从资源服务器获取资源。比如用在用户登录上。基于session的登录认证在传统的用户登录认证中,因为http是无状态的,所以都是采用session方式。用户登录成功,服务端会保证一个session,当...

2018-10-26 20:21:20 4524

原创 Twitter的snowflake算法

摘要:系统唯一ID是我们在设计一个系统的时候常常会遇见的问题,也常常为这个问题而纠结。生成ID的方法有很多,适应不同的场景、需求以及性能要求。关于订单号的生成,一些比较简单的方案:1、数据库自增长ID优势:无需编码缺陷:大表不能做水平分表,否则插入删除时容易出现问题高并发下插入数据需要加入事务机制在业务操作父、子表(关联表)插入时,先要插入父表,再插入子表2、时间戳+随机数优势...

2018-10-26 20:12:38 747

转载 限流实现方案

一.总体介绍很多做服务接口的人或多或少的遇到这样的场景,由于业务应用系统的负载能力有限,为了防止非预期的请求对系统压力过大而拖垮业务应用系统。&nbsp; &nbsp; 也就是面对大流量时,如何进行流量控制?&nbsp; &nbsp; 服务接口的流量控制策略:分流、降级、限流等。本文讨论&nbsp; 限流策略,虽然降低了服务接口的访问频率和并发量,却换取服务接口和业务应用系统的高可用。&...

2018-10-26 19:49:30 2364

转载 几种常见web 容器比较

web 容器比较 tomcat jboss resin weblogic websphere glassfishTomcat是Apache鼎力支持的Java Web应用服务器,由于它优秀的稳定性以及丰富的文档资料,广泛的使用人群,从而在开源领域受到最广泛的青睐。-Jboss作为Java EE应用服务器,它不但是Servlet容器,而且是EJB容器,从而受到企业级开发人员的欢迎,从而弥补...

2018-10-25 22:32:08 15364 2

转载 java动态代理实现与原理

关于Java中的动态代理,我们首先需要了解的是一种常用的设计模式--代理模式,而对于代理,根据创建代理类的时间点,又可以分为静态代理和动态代理。&nbsp;一、代理模式&nbsp; &nbsp;代理模式是常用的java设计模式,他的特征是代理类与委托类有同样的接口,代理类主要负责为委托类预处理消息、过滤消息、把消息转发给委托类,以及事后处理消息等。代理类与委托类之间通常会存在关联关系,一个代理...

2018-10-25 22:22:06 144

转载 Java并发编程:线程间协作的两种方式:wait、notify、notifyAll和Condition

Java并发编程:线程间协作的两种方式:wait、notify、notifyAll和Condition在前面我们将了很多关于同步的问题,然而在现实中,需要线程之间的协作。比如说最经典的生产者-消费者模型:当队列满时,生产者需要等待队列有空间才能继续往里面放入商品,而在等待的期间内,生产者必须释放对临界资源(即队列)的占用权。因为生产者如果不释放对临界资源的占用权,那么消费者就无法消费队列中的商品...

2018-10-25 22:13:14 91

转载 Java多线程Condition接口原理详解

Condition接口提供了类似Object的监视器方法,与Lock配合可以实现等待/通知模式,但是这两者在使用方式以及功能特性上还是有差别的 Condition接口详解Condition定义了等待/通知两种类型的方法,当前线程调用这些方法时,需要提前获取到Condition对象关联的锁。Condition对象是由Lock对象(调用Lock对象的newCondition()方法)创建出来的,...

2018-10-25 21:52:26 126

转载 CAS实现单点登录原理

一、不落俗套的开始1、背景介绍单点登录:Single Sign On,简称SSO,SSO使得在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。CAS框架:CAS(Central Authentication Service)是实现SSO单点登录的框架。2、盗一张学习CAS绝大多都看过的图以及执行部分分析注:已分不清原创,此处就不给出地址了。 从结构上看,CAS...

2018-10-25 20:23:47 3723 1

转载 Java 重定向和请求转发的区别

一、调用方式&nbsp; 我们知道,在servlet中调用转发、重定向的语句如下:request.getRequestDispatcher("new.jsp").forward(request, response);//转发到new.jspresponse.sendRedirect("new.jsp");//重定向到new.jsp在jsp页面中你也会看到通过下面的方式实现转发:&lt;jsp:...

2018-10-25 20:18:58 105

转载 解决hash冲突的四个方法

通过构造性能良好的哈希函数,可以减少冲突,但一般不可能完全避免冲突,因此解决冲突是哈希法的另一个关键问题。创建哈希表和查找哈希表都会遇到冲突,两种情况下解决冲突的方法应该一致。下面以创建哈希表为例,说明解决冲突的方法。常用的解决冲突方法有以下四种:开放定址法这种方法也称再散列法,其基本思想是:当关键字key的哈希地址p=H(key)出现冲突时,以p为基础,产生另一个哈希地址p1,如果p1仍然冲...

2018-10-25 00:07:16 251

转载 跳跃表 SkipList【数据结构】原理及实现

为什么选择跳表目前经常使用的平衡数据结构有:B树,红黑树,AVL树,Splay Tree, Treep等。想象一下,给你一张草稿纸,一只笔,一个编辑器,你能立即实现一颗红黑树,或者AVL树出来吗? 很难吧,这需要时间,要考虑很多细节,要参考一堆算法与数据结构之类的树,还要参考网上的代码,相当麻烦。用跳表吧,跳表是一种随机化的数据结构,目前开源软件 Redis 和 LevelDB 都有用到它,...

2018-10-24 23:08:35 125

转载 线程间通信

线程间的通信方式主要有如下4种方式: 1)共享变量; 2)wait, notify机制; 3)Lock, Condition机制; 4)管道 下面将逐一讲解这4中线程间通信方式。1. 共享变量线程之间通过共享一个对象,在同步块中访问该对象中数据来实现通信。 下面是一个例子,创建了两个线程thread1和thread2,创建了Runnable实现类对象task,threa...

2018-10-24 23:05:34 89

转载 linux下tar.gz、tar、bz2、zip等解压缩、压缩命令详解

Linux下最常用的打包程序就是tar了,使用tar程序打出来的包我们常称为tar包,tar包文件的命令通常都是以.tar结尾的。生成tar包后,就可以用其它的程序来进&nbsp;行压缩了,所以首先就来讲讲tar命令的基本用法:&nbsp;  tar命令的选项有很多(用man tar可以查看到),但常用的就那么几个选项,下面&nbsp;来举...

2018-10-24 22:59:38 165

转载 vi/vim编辑器使用方法详解

vi编辑器是所有Unix及Linux系统下标准的编辑器,他就相当于windows系统中的记事本一样,它的强大不逊色于任何最新的文本编辑器。他是我们使用Linux系统不能缺少的工具。由于对Unix及linux系统的任何版本,vi编辑器是完全相同的,学会它后,您将在Linux的世界里畅行无阻。vim 具有程序编辑的能力,可以以字体颜色辨别语法的正确性,方便程序设计;vim可以当作vi的升级版本,他...

2018-10-24 22:52:05 367

空空如也

空空如也

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

TA关注的人

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