- 博客(183)
- 资源 (25)
- 收藏
- 关注
原创 Java流(Stream)简介
要讨论流,我们先来谈谈集合,这是最容易上手的方式了。 Java 8中的集合支持一个新的stream方法,它会返回一个流(接口定义在java.util.stream.Stream里)。那么, 流到底是什么呢?简短的定义就是“从支持数据处理操作的源生成的元素序列”。让我们一步步剖析这个定义。
2017-11-24 11:54:39 2739 1
原创 14、使用Nginx+Tomcats搭建高可用负载均衡集群
负载均衡的目的是为了解决单个节点压力过大,造成Web服务响应过慢,严重的情况下导致服务瘫痪,无法正常提供服务。本实例通过使用Nginx作为负载均衡器,Tomcats作为后台Web服务器,部署一个高可用的Web应用.
2017-11-20 16:43:46 453
转载 轻量级微服务架构及最佳实践
架构需要由人去设计,这些人被称为架构师。或许很多人并未授予架构师的头衔,但自己却从事着架构的工作。我们认为,架构这项工作永远都需要由人去完成,可能短期内都无法由机器来取代。如果我们不理解什么是架构,或者对架构师的职责感到疑惑,那么很难让架构这项工作有效地落地。我们将在本节重新认识架构,并重新定义架构师的职责。
2017-11-17 18:18:55 609
原创 13、Spring技术栈-整合dubbo、zookeeper实现高可用分布式微服务实战
在Spring技术栈-整合dubbo、zookeeper一文中我们已经讲述了如何整合Spring、dubbo、zookeeper来开发一个分布式的应用。本文在上文的基础上来描述如何打包部署dubbo微服务,实现一个高可用的微服务集群,如果不知道如何整合Spring、dubbo、zookeeper,请读者先阅读上文,然后再阅读此文进行微服务的打包和部署操作。
2017-11-17 16:52:14 3047
原创 12、Spring技术栈-Redis Sentinel实现高可用缓存集群方案实战
Redis Sentinel是一个分布式系统,Sentinel运行在有许多Sentinel进程互相合作的环境下,它本身就是这样被设计的。通过Redis Sentinel模式,我们可以实现缓存系统的高可用,本文从实践的角度为读者讲解具体实现方案。
2017-11-15 15:21:46 1319
原创 11、Spring技术栈-整合Redis,通过Redis的Master-Slave实现缓存数据读写分离
Redis的Master-Slave实现缓存数据读写分离
2017-11-13 14:15:34 6618 2
转载 Redis持久化(persistence)
RDB 持久化可以在指定的时间间隔内生成数据集的时间点快照(point-in-time snapshot)。AOF 持久化记录服务器执行的所有写操作命令,并在服务器启动时,通过重新执行这些命令来还原数据集。 AOF 文件中的命令全部以 Redis 协议的格式来保存,新命令会被追加到文件的末尾。
2017-11-11 15:01:35 426
原创 Redis主从(Master-Slave)复制(Replication)设置
Redis 支持简单且易用的主从复制(master-slave replication)功能, 该功能可以让从服务器(slave server)成为主服务器(master server)的精确复制品。
2017-11-10 17:31:51 3062
原创 插入排序和希尔排序(Java实现)
插入排序就是每一步都将一个待排数据按其大小插入到已经排序的数据中的适当位置,直到全部插入完毕。希尔排序算法是插入排序的一种更高效的改进版本。它的作法不是每次一个元素挨一个元素的比较。而是初期选用大跨步(增量较大)间隔比较,使记录跳跃式接近它的排序位置;然后增量缩小;最后增量为 1 ,这样记录移动次数大大减少,提高了排序效率。希尔排序对增量序列的选择没有严格规定。
2017-11-09 15:21:11 1547
原创 10、Spring技术栈-整合Redis,使用RedisTemplate实现数据缓存实战
整合Redis,使用RedisTemplate实现数据缓存
2017-11-07 18:24:24 4974
原创 一文读懂抽象类(Java)
在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类。抽象类除了不能实例化对象之外,类的其它功能依然存在,成员变量、成员方法和构造方法的访问方式和普通类一样。由于抽象类不能实例化对象,所以抽象类必须被继承,才能被使用。也是因为这个原因,通常在设计阶段决定要不要设计抽象类。
2017-11-07 09:41:23 381
原创 选择排序算法
选择排序(Selection sort)是一种简单直观的排序算法。它的工作原理是每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完。 常见的选择排序包括:简单选择排序,树形选择排序,堆排序。
2017-11-03 18:06:21 620
原创 Java面试之Spring面试知识点
Spring是一个一站式构建企业级应用的一个轻量级解决方案框架。Spring是模块化的,允许用户根据自己需求使用特定模块。你可以使用IOC容器和一些web框架,也可以只使用Hibernate代码或者JDBC抽象层。Spring框架支持声明式事务管理,支持通过RMI或者Webservice远程访问你的业务逻辑,并且提供非常多的持久化方案持久化数据。
2017-11-01 17:39:35 612
原创 Redis集群配置-配置过程中出现的问题及解决方案
在Centos下,手动安装Ruby,安装完成后,输入命令行ruby后,却提示-bash: /usr/bin/ruby: No such file or directory解决问题之前,先确认一个情况,输入命令/usr/local/bin/ruby --version如果有版本信息,那说明ruby被装到了该目录下,而非系统认为的 /usr/bin/ruby解决方法是在系统默认运行ruby的位置
2017-10-27 16:35:19 924
原创 Redis集群配置
1、集群规划要让Redis4.0.1集群正常工作至少需要3个Master节点,每个 Master 节点要配备至少 1 个 Slave 节点。 根据以上特点和要求, 进行如下的集群实施规划:使用 6 台服务器(物理机或虚拟机) 部署 3 个 Master + 3 个 Slave; IP 端口 集群端口(服务端口+10000) 192.168.199.249 6382 16382
2017-10-27 16:23:15 2212 2
原创 一致性Hash(Consistent Hash)
一致性Hash算法简介一致性Hash算法是在1997年由麻省理工提出的一种分布式Hash实现算法,设计的目标是为了解决英特网中的热点问题。一致性Hash算法提出了在动态变化的Cache环境中,判定Hash算法好坏的四个定义。平衡性(Balance):平衡性是指哈希的结果能够尽可能的分布到所有的节点中去,这样从算法上解决负载均衡的问题。单调性(monotonicity):单调性是指在新增或者删减节
2017-10-27 12:20:56 660
原创 归并排序算法(Java实现)
归并排序(Merge)是将两个(或两个以上)有序表合并成一个新的有序表,即把待排序序列分为若干个子序列,每个子序列是有序的。然后再把有序子序列合并为整体有序序列。归并排序是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。 将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。
2017-10-26 18:17:37 378
原创 快速排序算法(Java实现)
1、基本思想通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。2、算法步骤获得待排序数组选取合适的数字作为排序基准数字(一般情况下选取数组或者子数组的第一个数字)。将待排序数组中比基准数字小的放在基准数字的左边得到sub1,比基准数...
2017-10-25 14:09:37 955
原创 Java基础之冒泡排序算法
冒泡排序(Bubble Sort),是一种计算机科学领域的较简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。
2017-10-24 18:39:23 426
原创 聊聊微服务架构
互联网时代,在极端情况下,每天都有新需求要开发上线。随着代码量及团队成员的增加, 传统单体式架构的弊端日益凸显,严重制约了业务的快速创新和敏捷交付,与互联网所追求的 “唯快不破”的目标越来越远。这就是微服务架构兴起的时代大背景。 微服务架构( Microservice Architecture) 是近两年来最流行的架构术语之一,大名鼎鼎的 Martin Flower曾这样描述
2017-10-20 17:37:02 4596
原创 分布式系统基础-消息队列之Kafka
相对于前面所说的那些MQ前辈们,Kafka可谓是不走寻常路的“天才少年”。与久负盛名的前辈们不同,Kafka从一开始就是走“互联网的野路子”,它抛弃了很多华而不实的企业级特性,专注于高性能与大规模这两个互联网应用的核心需求,并全面采用了新一代的分布式架构 的设计理念,从基因和技术两方面拉开了与前辈们的距离。我们先来看看Kafka的一些激动人心的特性。高吞吐量、低延迟:Kafka每秒可以处理几十万条
2017-10-20 10:44:42 597
原创 分布式系统基础-消息队列之RabbitMQ
RabbitMQ是挑战Java/JMS消息中间件的产物,也是第二代消息中间件,它是实现了AMQP消息模型的重要产品,所以我们需要先了解一下AMQP模型相关的内容。AMQP模型如下图所示,每个Exchange (信箱/交换机)绑定(Binding)了0到N个Queue(队列),当收到Publisher发布的Message后,Exchange会根据自身的类型结合路由规则来确定此消
2017-10-20 10:27:20 881
原创 分布式系统基础-消息队列之ActiveMQ
ActiveMQ是J2EE中 JMS消息通信规范的一个实现,也是目前还在活跃和发展的最古老的第一代MQ,自从2004年成熟以后就迅速传播开来,经过多年的发展,逐步奠定了它在Java/J2EE圈子里的开源霸主地位,可谓生生不息。ActiveMQ除了作为独立的消息中间件使用,还经常在某些ESB (Enterprise Service Bus)产品中作为总线基础设施( Bus Infrastructur
2017-10-18 20:55:24 1314 1
原创 分布式系统基础-消息队列之JMS
JMS并没有定义消息的网络报文格式及相关的通信命令协议,但它以Java API的方式给出了一个可以纳入到J2EE环境中的消息中间件所应具备的编程级接口。同时,JMS归纳总结了两种通用的消息传递模型,深入理解这两种消息模型有助于我们准确把握消息中间件的原理和典型的使用场景。第一个消息模型是点对点消息通信模型。如下图所示,发送方Client1(Producer/Sender) 与消费者Client 2
2017-10-18 20:41:16 1079
原创 分布式系统基础-消息队列概述
消息队列(Message Queue,MQ)其实是一个古老的计算机术语,UNIX进程间通信就是用到了消息队列技术:一个进程把数据写入某个特定的队列中,其他进程可以读取队列中的数据,从而实现异步通信能力。而后来我们所说的“消息队列”通常指独立的消息队列中间件。不管是最早的进程间通信的消息队列还是独立的消息队列中间件,他们相对于RPC通信来说都有以下很明显的优势。
2017-10-18 20:31:13 542
原创 分布式系统基础-全文检索
我们每个人解除互联网都是从互联网搜索开始的,虽然大家常用的搜索引擎可能不同,搜索的关键词也可能不同,但是我们习惯经常在网上搜索的方式来快速学习技术并解决日常工作中所遇到的各种技术问题,如果没有互联网搜索引擎,那么恐怕我们将会有很多的人要失业了。如何在海量的网页信息中准确且快速的找到包含我们所搜索关键字的所有网页并合理的排序展示,这的确是一个很有挑战的问题。除了我们日常工作中使用的搜
2017-10-17 16:15:22 12535
原创 Integer与Int比较
Integer与Int比较首先看一段比较有意思的代码:Integer a = 1000,b=1000; Integer c = 100,d=100; System.out.println(a==b); System.out.println(c==d); 如果这道题你能得出正确答案,并能了解其中的原理的话。说明你基础还可以。如果你的答案 是 true 和true的话,你的基础就有所
2017-10-17 12:18:26 519
转载 如何在三年内成长为一名JAVA架构师
工作前三年是职业生涯中成长最快的几年,在这段时间里你会充满激情,做事专注,也容易养成良好的习惯。在我们公司有些同学在前三年中就快速成为某一个领域的技术专家,有些同学也可能止步不前。本文和大家一起探讨下如何在三年内快速成长为一名技术专家。
2017-10-17 09:49:12 2440
原创 分布式系统基础-远程过程调用(RPC)
RPC(Remote Procedure Call,远程过程调用)是建立在Socket之上的一种多进程间的通信机制。不同于复杂的Socket通信方式,RPC的初心是设计一套远程通信的通用框架,这个框架能够自动处理通信协议、对象序列化、网络传输等复杂细节,并且希望开发者使用这个框架以后,调用一个远程机器上的接口代码与以本地方法调用的代码“看起来没什么区别”,从而大大减小分布式的开发难度,
2017-10-10 21:49:31 4306
原创 分布式系统基础-分布式事务
事务是数据库运行中的一个逻辑工作单位,工作单元内的一系列SQL命令具有原子性操作特点,这些命令要么完全成功执行,要么完全撤销或不执行,如果是后者,则表现为数据库内的最终数据没有发生任何改变。事务通常由数据库中的事务管理子系统负责处理。
2017-10-08 13:27:06 1086
原创 分布式系统的一致性原理
对于分布式系统,我们必须深刻理解和牢记一点:分布式系统的不可靠性。“可靠性”是指系统可以无故障的持续运行,如果一个系统在运行中意外宕机或者无法正常使用,那么他就是一个不可靠的系统,即使宕机和无法使用的时间很短。我们知道,分布式系统通常是由独立的服务器通过网络松散耦合组成的,而网络本质上是一个复杂的I/O系统,而通常情况下,I/O发生故障的概率和不可靠性远远高于主机的CPU和内存,加之网络设备的引入,
2017-10-06 17:54:02 834
原创 分布式系统架构网络之IDC机房
我们开发的互联网应用被部署到IDC机房里的某个服务器上,从而完成了应用互联网的接入,所以我们接下来学习一些IDC机房的相关知识。IDC机房又被称为互联网数据中心(Internet Data Center)或者数据中心,IDC不仅是数据存储的中心,还是数据流通的中心。IDC机房是标准化的电信专业级机房,为企业、政府提供服务器托管,租用及相关增值等方面的全方位服务。一开始,IDC机房主要是联通、电信等运
2017-09-28 16:46:39 18721
原创 7、Zookeeper场景案例分析
Zookeeper主要用于以下使用场景:实现配置管理(配置中心)服务注册中心集群通信与控制子系统基本上每个使用Zookeeper的集群,都会同时采用Zookeeper存储集群的配置参数,可以说,实现配置管理是(配置中心)Zookeeper最广泛,最基础的使用场景。服务注册中心是Zookeeper最“重量级”的需求场景,Zookeeper是这里的关键组件,同时最能体现其复杂能力,这个场景也是所
2017-09-28 16:36:44 537
原创 9、Spring技术栈-整合dubbo、zookeeper
在我们的Spring Web开发实战的前8篇文章中,我们详细介绍了使用Spring从0开始搭建一个项目并整合log4j2、整合MyBatis,使用hibernate-validator进行服务端数据验证、使用Spring Session管理服务端会话以及过滤器、拦截器的使用。通过前面的文章我们大致可以完成一个简单系统的实现。但是出于学习的目的,我们需要不停的完善系统,不停的学习新的东西以充实自己。此
2017-09-26 18:24:53 867
原创 分布式系统设计理念
首先,分布式系统的首要目的是提升系统的整体性能和吞吐量。如果最终设计出来的分布式系统占用了10台机器才勉强达到单机系统的两倍性能,那么这个分布式系统还有存在的价值吗?另外,即使采用了分布式架构,也仍然需要尽力提升单机上的程序性能,使得整体性能达到最高。所以,我们仍然需要掌握高性能单机程序的设计和编程技巧,例如多线程编程、多进程高性能IPC通信、高性能的网络框架等。其次,任何分布式系统都存在让人无法回
2017-09-26 17:05:34 2938
原创 软件架构需要考虑的基本原则
架构尽可能的简单,清晰,不过度设计。稳定业务和易变业务要分离处理,核心业务和非核心业务要分离处理,电商业务和辅助流程要分离,应用和数据要分离,服务和实现细节分离,前台和后台分离。
2017-09-25 15:40:04 3288 2
gpg4win-3.1.7
2019-04-09
Spring Cloud 中文参考手册
2017-08-21
Spring Cloud 参考手册英文版
2017-08-21
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人