- 博客(194)
- 收藏
- 关注
转载 在windows上搭建redis集群(redis-cluster)
一 所需软件:Redis、Ruby语言运行环境、Redis的Ruby驱动redis-xxxx.gem、创建Redis集群的工具redis-trib.rb二 安装配置redisredis下载地址 https://github.com/MSOpenTech/redis/releases; 下载Redis-x64-3.2.100.zip。集群规划有三个节点的集群,每个节点有一主一备。需要6台虚拟机。把 redis 解压后,再复制出 5 份,配置 三主三从集群。 由于 redis 默认端口...
2020-09-16 14:46:31 427
转载 Elasticsearch DSL 查询详解
在 Elasticsearch 中,提供了功能十分丰富、多种表现形式的查询语言——DSL 查询。DSL 查询使用 JSON 格式的请求体与 Elasticsearch 交互,可以实现各种各样的查询需求。DSL 查询主要包含两种类型的查询语句:叶子查询语句 : 用于查询特殊字段的特殊值,例如:match, term, range 等。 复合查询语句 : 可以合并其他的叶子查询或复合查询,从而实现非常复杂的查询逻辑。查询语句的执行结果依赖于它们是用于查询语境还是过滤语境。基本语法使用 .
2020-09-02 11:29:03 1140
原创 Spring技术内幕(3)Spring AOP的实现
本章内容Spring AOP概述、Spring AOP的设计与实现、建立AopProxy代理对象、Spring AOP拦截器调用的实现、Spring AOP的高级特性。3.1 Spring AOP概述3.1.1 AOP概念回顾AOP是Aspect-Oriented Programming(面向方面编程或面向切面)的简称。关于AOP技术简介:AspectJ:源代码和字节码级别...
2020-07-17 14:27:37 320
转载 数据库面试知识点汇总
一、基本概念1.主键、外键、超键、候选键超键:在关系中能唯一标识元组的属性集称为关系模式的超键。一个属性可以为作为一个超键,多个属性组合在一起也可以作为一个超键。超键包含候选键和主键。候选键:是最小超键,即没有冗余元素的超键。主键:数据库表中对储存数据对象予以唯一和完整标识的数据列或属性的组合。一个数据列只能有一个主键,且主键的取值不能缺失,即不能为空值(Null)。外键:在一个表中存在的另一个表的主键称此表的外键。2.为什么用自增列作为主键如果我们定义了主键(PRIMAR
2020-07-17 14:02:28 436
原创 JWT验证原理
1.概述什么是JWT?JSON Web Token(JWT),是一个开放安全的行业标准,用于多个系统之间传递安全可靠的信息。2.JWT的结构JSON Web Token说到底也是一个token字符串,它由三部分组成,头部、载荷与签名。 如下图 红色的为Header,指定token类型与签名类型,紫色的为载荷(playload),存储用户id等关键信息,最后蓝色的为签名,保证整个信息的完整性,可靠性。2.1 头部(Header)JWT的头部用于描述关于该JWT的最基本的信息,例如.
2020-07-16 14:19:02 658
转载 Dubbo 的 8000 字图文详解
为了更好地了解和使用 Dubbo,今天来介绍一下 Dubbo 的主要组件和实现原理。Dubbo 分层Dubbo 是一款高性能 Java RPC 架构。它实现了面向接口代理的 RPC 调用,服务注册和发现,负载均衡,容错,扩展性等等功能。Dubbo 大致上分为三层,分别是: 业务层 RPC 层 Remoting 层 从上图中可以看到,三层结构中包含了 Dubbo 的核心组件。他们的基本功能如下,对于比较常用的组件,会在后面的篇幅中详细讲解。这里将...
2020-07-15 13:16:01 133
转载 服务注册中心,Eureka与Zookeeper比较
1. 前言服务注册中心,给客户端提供可供调用的服务列表,客户端在进行远程服务调用时,根据服务列表然后选择服务提供方的服务地址进行服务调用。服务注册中心在分布式系统中大量应用,是分布式系统中不可或缺的组件,例如rocketmq的name server,hdfs中的namenode,dubbo中的zk注册中心,spring cloud中的服务注册中心eureka。 在spring cloud中,除了可以使用eureka作为注册中心外,还可以通过配置的方式使用zookeeper作为注册中心。...
2020-07-15 11:21:03 229
转载 Linux 内核空间与用户空间
本文以 32 位系统为例介绍内核空间(kernel space)和用户空间(user space)。内核空间和用户空间对 32 位操作系统而言,它的寻址空间(虚拟地址空间,或叫线性地址空间)为 4G(2的32次方)。也就是说一个进程的最大地址空间为 4G。操作系统的核心是内核(kernel),它独立于普通的应用程序,可以访问受保护的内存空间,也有访问底层硬件设备的所有权限。为了保证内核的安...
2020-03-12 10:18:54 187
转载 Treiber Stack简单分析
AbstractTreiber Stack Algorithm是一个可扩展的无锁栈,利用细粒度的并发原语CAS来实现的,Treiber Stack在 R. Kent Treiber在1986年的论文Systems Programming: Coping with Parallelism中首次出现。基本原理该算法的基本原理是:只有当您知道要添加的项目是自开始操作以来唯一添加的项目时,才会...
2020-03-07 11:23:53 159
转载 FutureTask源码解析(1)——预备知识
FutureTask 是一个同步工具类,它实现了Future语义,表示了一种抽象的可生成结果的计算。在包括线程池在内的许多工具类中都会用到,弄懂它的实现将有利于我们更加深入地理解Java异步操作实现。在分析它的源码之前, 我们需要先了解一些预备知识。本篇我们先来看看FutureTask 中所使用到的接口:Runnable、Callable、Future、RunnableFuture以及所使用到...
2020-03-07 11:19:09 168
转载 FutureTask源码解析(2)——深入理解FutureTask
Future和Task在深入分析源码之前,我们再来拎一下FutureTask到底是干嘛的。人如其名,FutureTask包含了Future和Task两部分。FutureTask实现了RunnableFuture接口,即Runnable接口和Future接口。其中Runnable接口对应了FutureTask名字中的Task,代表FutureTask本质上也是表征了一个任务。而Future接...
2020-03-07 11:09:10 535
原创 Zookeeper
一、概述Zookeeper 是一个开源的分布式的,为分布式应用提供协调服务的 Apache 项目。Zookeeper 从设计模式角度来理解:是一个基于观察者模式设计的分布式服务管理框架,它负责存储和管理大家都关心的数据,然后接受观察者的注册,一旦这些数据的状态发生变化,Zookeeper 就将负责通知已经在 Zookeeper 上注册的那些观察者做出相应的反应,从而实现集群中类似 Mast...
2020-02-28 15:28:43 151
转载 【Spring Cloud】微服务架构选型方案
1、技术架构2、组件介绍1、服务注册与发现——Eureka服务注册与发现中心采用Eureka,以AP为核心的高可用注册中心,保证高可用性和最终一致性,server之间互相注册的replicate机制可以单点注册、全局感知,通过集群式部署来避免单点故障导致服务不可用。提供云端服务发现,一个基于Rest的服务,用于定位服务,以实现云端中间层的服务发现和故障转移。主要用来实现服务...
2020-02-28 11:08:52 389
原创 Spring技术内幕(6)Spring事务处理的实现
本章内容Spring与事务处理、Spring事务处理的设计概览、Spring事务处理的应用场景、Spring声明式事务处理、Spring事务处理的设计与实现Spring事务处理器的设计与实现6.1 Spring与事务处理6.2 Spring事务处理的设计概览6.3 Spring事务处理的应用场景6.4 Spring声明式事务处理6.4.1设计原理与基本过程Spri...
2020-02-27 10:59:31 191
原创 Spring技术内幕(5)数据库操作组件的实现
本章内容Spring JDBC的设计与实现、Spring JDBC中模板类的设计与实现、Spring JDBC中RDBMS操作对象的实现、Spring ORM的设计与实现5.1 Spring JDBC的设计与实现5.1.1 应用场景Spring建立的JDBC的框架中,还设计了一种更面向对象的方法,相对于JDBC模板,这种实现更像是一个简单的ORM工具,为应用提供了另外一种选择。...
2020-02-27 10:55:27 182
原创 Spring技术内幕(4)Spring MVC与Web环境
本章环境Spring MVC 概述、Web环境中的SpringMVC、上下文在Web容器中的启动、Spring MVC的设计与实现、Spring MVC视图的呈现4.1 SpringMVC概述在使用Spring MVC的时候,需要在web.xml中配置DispatcherServlet,这个DispatcherServlet可以看成是一个前端控制器的具体实现,还需要在Bean定义中...
2020-02-27 10:33:27 243
原创 Spring技术内幕(2)Spring FrameWork的核心:IoC容器的实现
本章内容:Spring IoC容器概述、IoC容器系列的设计与实现:BeanFactory和ApplicationContext、IoC容器初始化过程、IoC容器的依赖注入、容器其他相关特性的设计与实现。2.1 Spring IoC容器概述2.1.1 IoC容器和依赖反转模式在面向对象中,对象封装了数据和对数据处理,对象的依赖关系体现在对数据和方法的依赖上。这些依赖关系可以通过把对...
2020-02-23 10:56:11 148
原创 Spring技术内幕(1)Spring的设计理念和整体架构
本章内容:Spring各个子项目、Spring设计目标、Spring整体架构、Spring应用场景。1.1 Spring各个子项目Spring Framework(Core):包含一系列IoC容器的设计,提供依赖反转模式的实现;继承了AOP;包含其他基本模块,例如MVC、JDBC、事务处理模块的实现。Spring Web Flow:工作流引擎。Spring BlazeDs Inte...
2020-02-21 11:18:13 169
原创 Java Object的详解
构造方法摘要Object()方法摘要protected Object clone() 创建并返回此对象的一个副本。boolean equals(Object obj) 指示某个其他对象是否与此对象“相等”。protected void finalize() 当垃圾回收器确定不存在对该对象的更多引用时,...
2019-12-30 09:28:22 131
原创 springCloud集成分布式事务LCN 5.0.2
TX-LCN的3种模式LCN5.0.2有3种模式,分别是LCN模式,TCC模式,TXC模式LCN模式:LCN模式是通过代理Connection的方式实现对本地事务的操作,然后在由TxManager统一协调控制事务。当本地事务提交回滚或者关闭连接时将会执行假操作,该代理的连接将由LCN连接池管理。该模式的特点:- 该模式对代码的嵌入性为低。- 该模式仅限于本地存在连接对象且可通过...
2019-12-20 15:25:47 484
转载 常见的限流算法
在高并发的系统中,往往需要在系统中做限流,一方面是为了防止大量的请求使服务器过载,导致服务不可用,另一方面是为了防止网络攻击。常见的限流方式,比如Hystrix适用线程池隔离,超过线程池的负载,走熔断的逻辑。在一般应用服务器中,比如tomcat容器也是通过限制它的线程数来控制并发的;也有通过时间窗口的平均速度来控制流量。常见的限流纬度有比如通过Ip来限流、通过uri来限流、通过用户访问频次来限...
2019-12-12 10:36:44 168
转载 SpringCloud gateway 限流源码分析
路由过滤器允许以某种方式修改传入的HTTP请求或传出的HTTP响应,路径过滤器的范围限定为特定路径,Spring Cloud Gateway包含许多内置的GatewayFilter工厂。Spring Cloud Gateway限流就是通过内置的RequestRateLimiterGateWayFilterFactory工厂来实现的。当然,官方的肯定不能满足我们部分业务需求,因此可以自定义限...
2019-12-12 10:28:15 207
转载 TCP停止等待、超时重传、滑动窗口、拥塞控制、快重传和快恢复
TCP超时与重传机制TCP协议是一种面向连接的可靠的传输层协议,它保证了数据的可靠传输,对于一些出错,超时丢包等问题TCP设计的超时重传机制。其基本原理:在发送一个数据之后,就开启一个定时器,若是在这个时间内没有收到发送数据的ACK确认报文,则对该报文进行重传,在达到一定次数还没有成功时放弃并发送一个复位信号。 这里比较重要的是重传超时时间,怎样设置这个定时器的时间(RTO),从而保证对...
2019-10-19 10:45:06 1459 1
转载 MySQL避免插入重复记录:唯一性约束
mysql在存在主键冲突或者唯一键冲突的情况下,根据插入策略不同,一般有以下三种避免方法。1、insert ignore2、replace into3、insert on duplicate key update注意,除非表有一个PRIMARY KEY或UNIQUE索引,否则,使用以上三个语句没有意义,与使用单纯的INSERT INTO相同。一、insert ignoreins...
2019-10-16 19:12:38 537
转载 HTTP1.0、HTTP1.1 和 HTTP2.0 的区别
一、HTTP的历史早在 HTTP 建立之初,主要就是为了将超文本标记语言(HTML)文档从Web服务器传送到客户端的浏览器。也是说对于前端来说,我们所写的HTML页面将要放在我们的 web 服务器上,用户端通过浏览器访问url地址来获取网页的显示内容,但是到了 WEB2.0 以来,我们的页面变得复杂,不仅仅单纯的是一些简单的文字和图片,同时我们的 HTML 页面有了 CSS,Javascrip...
2019-09-28 09:38:46 120
转载 JDBC中的Statement和PreparedStatement的区别
1、PreparedStatement是预编译的,对于批量处理可以大大提高效率.也叫JDBC存储过程2、使用 Statement 对象。在对数据库只执行一次性存取的时侯,用 Statement 对象进行处理。PreparedStatement对象的开销比Statement大,对于一次性操作并不会带来额外的好处。3、statement每次执行sql语句,相关数据库都要执行sql语句的编译,p...
2019-09-28 09:08:30 608
转载 Java的值传递
1. 形参与实参我们先来重温一组语法: 形参:方法被调用时需要传递进来的参数,如:func(int a)中的a,它只有在func被调用期间a才有意义,也就是会被分配内存空间,在方法func执行完成后,a就会被销毁释放空间,也就是不存在了 实参:方法被调用时是传入的实际值,它在方法被调用前就已经被初始化并且在方法被调用时传入。 举个栗子:1publicstati...
2019-09-22 09:43:56 137
翻译 解密Redis持久化【翻译】
本文来自Redis的作者,他在论坛看到大家对Redis持久化误解较大,所以写此文章论述持久化写操作的流程首先我们来看一下数据库在进行写操作时到底做了哪些事,主要有下面五个过程。客户端向服务端发送写操作(数据在客户端的内存中) 数据库服务端接收到写请求的数据(数据在服务端的内存中) 服务端调用write(2) 这个系统调用,将数据往磁盘上写(数据在系统内存的缓冲区中) 操作系统将缓...
2019-09-04 09:11:14 178
转载 Java并发编程的艺术(二十)——线程池ThreadPoolExecutor实现原理
1. 为什么要使用线程池在实际使用中,线程是很占用系统资源的,如果对线程管理不善很容易导致系统问题。因此,在大多数并发框架中都会使用线程池来管理线程,使用线程池管理线程主要有如下好处:降低资源消耗。通过复用已存在的线程和降低线程关闭的次数来尽可能降低系统性能损耗; 提升系统响应速度。通过复用线程,省去创建线程的过程,因此整体上提升了系统的响应速度; 提高线程的可管理性。线程是稀缺资源,...
2019-06-13 13:35:46 134
转载 TCP和UDP的区别
TCP和UDP是OSI模型中的运输层中的协议。TCP提供可靠的通信传输,而UDP则常被用于广播和细节控制交给应用的通信传输UDP(User Datagram Protocol)UDP不提供复杂的控制机制,利用IP提供面向无连接的通信服务。并且它是将应用程序发来的数据在收到的那一刻,立刻按照原样发送到网络上的一种机制。即使是出现网络拥堵的情况下,UDP也无法进行流量控制等避免网络拥塞的行为...
2019-06-04 14:51:43 108
转载 ConcurrentHashMap源码分析(JDK8版本)
ConcurrentHashMap是conccurrent家族中的一个类,由于它可以高效地支持并发操作,以及被广泛使用,经典的开源框架Spring的底层数据结构就是使用ConcurrentHashMap实现的。与同是线程安全的老大哥HashTable相比,它已经更胜一筹,因此它的锁更加细化,而不是像HashTable一样为几乎每个方法都添加了synchronized锁,这样的锁无疑会影响到性能。...
2019-06-02 15:27:27 167
转载 Java并发编程的艺术(十九)——并发容器之ArrayBlockingQueue和LinkedBlockingQueue实现原理详解
1. ArrayBlockingQueue简介在多线程编程过程中,为了业务解耦和架构设计,经常会使用并发容器用于存储多线程间的共享数据,这样不仅可以保证线程安全,还可以简化各个线程操作。例如在“生产者-消费者”问题中,会使用阻塞队列(BlockingQueue)作为数据容器,关于BlockingQueue可以看前面的文章。为了加深对阻塞队列的理解,唯一的方式是对其实验原理进行理解,这篇文章就主...
2019-06-02 09:57:47 123
转载 Java并发编程的艺术(十八)——并发容器之BlockingQueue
1. BlockingQueue简介在实际编程中,会经常使用到JDK中Collection集合框架中的各种容器类如实现List,Map,Queue接口的容器类,但是这些容器类基本上不是线程安全的,除了使用Collections可以将其转换为线程安全的容器,Doug Lea大师为我们都准备了对应的线程安全的容器,如实现List接口的CopyOnWriteArrayList,实现Map接口的Con...
2019-06-02 09:54:52 118
转载 Java并发编程的艺术(十六)——并发容器之ThreadLocal
1. ThreadLocal的简介在多线程编程中通常解决线程安全的问题我们会利用synchronzed或者lock控制线程对临界区资源的同步顺序从而解决线程安全的问题,但是这种加锁的方式会让未获取到锁的线程进行阻塞等待,很显然这种方式的时间效率并不是很好。线程安全问题的核心在于多个线程会对同一个临界区共享资源进行操作,那么,如果每个线程都使用自己的“共享资源”,各自使用各自的,又互相不影响到彼...
2019-06-02 09:51:43 133
转载 Java并发编程的艺术(十五)——并发容器之ConcurrentLinkedQueue
1.ConcurrentLinkedQueue简介在单线程编程中我们会经常用到一些集合类,比如ArrayList,HashMap等,但是这些类都不是线程安全的类。在面试中也经常会有一些考点,比如ArrayList不是线程安全的,Vector是线程安全。而保障Vector线程安全的方式,是非常粗暴的在方法上用synchronized独占锁,将多线程执行变成串行化。要想将ArrayList变成线程...
2019-06-02 09:49:18 180
转载 Java并发编程的艺术(十四)——并发容器之CopyOnWriteArrayList
1. CopyOnWriteArrayList的简介java学习者都清楚ArrayList并不是线程安全的,在读线程在读取ArrayList的时候如果有写线程在写数据的时候,基于fast-fail机制,会抛出ConcurrentModificationException异常,也就是说ArrayList并不是一个线程安全的容器,当然您可以用Vector,或者使用Collections的静态方法将...
2019-06-02 09:43:47 145
转载 Java并发编程的艺术(十三)——并发容器之ConcurrentHashMap(JDK 1.8版本)
1.ConcurrentHashmap简介在使用HashMap时在多线程情况下扩容会出现CPU接近100%的情况,因为hashmap并不是线程安全的,通常我们可以使用在java体系中古老的hashtable类,该类基本上所有的方法都采用synchronized进行线程安全的控制,可想而知,在高并发的情况下,每次只有一个线程能够获取对象监视器锁,这样的并发性能的确不令人满意。另外一种方式通过Co...
2019-06-02 09:38:21 274
转载 Java并发编程的艺术(十二)——LockSupport工具
1. LockSupport简介在之前介绍AQS的底层实现,已经在介绍java中的Lock时,比如ReentrantLock,ReentReadWriteLocks,已经在介绍线程间等待/通知机制使用的Condition时都会调用LockSupport.park()方法和LockSupport.unpark()方法。而这个在同步组件的实现中被频繁使用的LockSupport到底是何方神圣,现在...
2019-06-01 11:12:57 147
转载 Java并发编程的艺术(十一)——详解Condition的await和signal等待/通知机制
1.Condition简介任何一个java对象都天然继承于Object类,在线程间实现通信的往往会应用到Object的几个方法,比如wait(),wait(long timeout),wait(long timeout, int nanos)与notify(),notifyAll()几个方法实现等待/通知机制,同样的, 在java Lock体系下依然会有同样的方法实现等待/通知机制。从整体上来...
2019-06-01 11:11:14 166
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人