自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

转载 看似简单的hashCode和equals面试题,竟然有这么多坑!

hashCode()方法和equals()区别与联系这到面试题,看似简单,根据以往面试星友的情况来说,绝大部分人都不能很好的回答出来,要么没有逻辑,想到一句就说一句,要么抓不住重点,答非所问。从这个很小的面试题上我们就可以看出来,对于任何一个面试题来说,都是要清晰有条理的回答。那么如何才能回答到点子上并且让面试官觉得你的逻辑清晰哪?首先,我们要介绍hashCode()和equals()方法的作用是是什么,然后才说他的区别,说了区别之后再说使用的时候需要注意到的地方,这样的回答思路基本是OK的,如果你在了

2020-07-22 23:33:25 196

转载 10款常见MySQL高可用方案选型解读

一、概述我们在考虑MySQL数据库的高可用架构时,主要考虑如下几方面: 如果数据库发生了宕机或者意外中断等故障,能尽快恢复数据库的可用性,尽可能的减少停机时间,保证业务不会因为数据库的故障而中断。 用作备份、只读副本等功能的非主节点的数据应该和主节点的数据实时或者最终保持一致。 当业务发生数据库切换时,切换前后的数据库内容应当一致,不会因为数据缺失或者数据不一致而影响业务。 关于对高可用的分级我们暂不做详细的讨论,这里只讨论常用高可用方案的优缺点以及选型。二、高可用方案

2020-07-22 13:52:11 483

转载 千万不要这样使用Arrays.asList !

使用Arrays.asList()的原因无非是想将数组或一些元素转为集合,而你得到的集合并不一定是你想要的那个集合。而一开始asList的设计时用于打印数组而设计的,但jdk1.5开始,有了另一个比较更方便的打印函数Arrays.toString(),于是打印不再使用asList(),而asList()恰巧可用于将数组转为集合。一、错误用法如果你这样使用过,那你可要注意了。1、错误一将基本类型数组作为asList的参数猜一下输出结果?2、错误二将数组作为asList参数后

2020-07-22 10:49:39 279

转载 Spring Cloud构建微服务架构:服务网关(基础)

通过之前几篇Spring Cloud中几个核心组件的介绍,我们已经可以构建一个简略的(不够完善)微服务架构了。比如下图所示:alt我们使用Spring Cloud Netflix中的Eureka实现了服务注册中心以及服务注册与发现;而服务间通过Ribbon或Feign实现服务的消费以及均衡负载;通过Spring Cloud Config实现了应用多环境的外部化配置以及版本管理。为了使得服务...

2019-11-03 23:52:35 177

转载 Spring Cloud源码分析之Ribbon

在之前介绍使用Ribbon进行服务消费的时候,我们用到了RestTemplate,但是熟悉Spring的同学们是否产生过这样的疑问:RestTemplate不是Spring自己就有的吗?跟Ribbon的客户端负载均衡又有什么关系呢?下面在本文,我们来看RestTemplate和Ribbon是如何联系起来并实现客户端负载均衡的。首先,回顾一下之前的消费者示例:我们是如何实现客户端负载均衡的?仔细...

2019-11-03 00:21:17 201

转载 Spring Cloud源码分析之Eureka

在看具体源码前,我们先回顾一下之前我们所实现的内容,从而找一个合适的切入口去分析。首先,服务注册中心、服务提供者、服务消费者这三个主要元素来说,后两者(也就是Eureka客户端)在整个运行机制中是大部分通信行为的主动发起者,而注册中心主要是处理请求的接收者。所以,我们可以从Eureka的客户端作为入口看看它是如何完成这些主动通信行为的。我们在将一个普通的Spring Boot应用注册到Eure...

2019-11-03 00:17:49 137

原创 Redis

1、为什么使用Redis分析:博主觉得在项目中使用redis,主要是从两个角度去考虑:性能和并发。当然,redis还具备可以做分布式锁等其他功能,但是如果只是为了分布式锁这些其他功能,完全还有其他中间件(如zookpeer等)代替,并不是非要使用redis。因此,这个问题主要从性能和并发两个角度去答。回答:如下所示,分为两点(一)性能如下图所示,我们在碰到需要执行耗时特别久,且结果...

2019-10-28 10:51:43 167

转载 Spring Cloud中,如何解决Feign/Ribbon第一次请求失败的问题?

Spring Cloud中,Feign和Ribbon在整合了Hystrix后,可能会出现首次调用失败的问题,要如何解决该问题呢造成该问题的原因Hystrix默认的超时时间是1秒,如果超过这个时间尚未响应,将会进入fallback代码。而首次请求往往会比较慢(由于Ribbon是懒加载的,在首次请求时,才会开始初始化相关类),这个响应时间可能就大于1秒了。知道原因后,我们来总结一下解决方案。以...

2019-10-28 09:13:13 216

转载 Spring Cloud构建微服务架构:Hystrix监控数据聚合

上一篇我们介绍了使用Hystrix Dashboard来展示Hystrix用于熔断的各项度量指标。通过Hystrix Dashboard,我们可以方便的查看服务实例的综合情况,比如:服务调用次数、服务调用延迟等。但是仅通过Hystrix Dashboard我们只能实现对服务当个实例的数据展现,在生产环境我们的服务是肯定需要做高可用的,那么对于多实例的情况,我们就需要将这些度量指标数据进行聚合。下面...

2019-10-27 20:04:02 188

转载 Spring Cloud构建微服务架构:Hystrix监控面板

在上一篇《服务容错保护(hystrix断路器)》的介绍中,我们提到断路器是根据一段时间窗内的请求情况来判断并操作断路器的打开和关闭状态的。而这些请求情况的指标信息都是HystrixCommand和HystrixObservableCommand实例在执行过程中记录的重要度量信息,它们除了Hystrix断路器实现中使用之外,对于系统运维也有非常大的帮助。这些指标信息会以“滚动时间窗”与“桶”结合的方...

2019-10-27 20:03:41 166

转载 Spring Cloud之RestTemplate和Feign的使用

介绍在Spring cloud有两种服务调用方式,一种是ribbon+restTemplate,另一种是feign,feign注解化更方便使用。 ribbon是一个负载均衡客户端,可以很好的控制http和tcp的一些行为。Feign默认集成了ribbon。RestTemplate中 @LoadBalanced表明这个restRemplate开启负载均衡的功能。Feign1,添加依赖&l...

2019-10-27 20:03:12 1309

转载 Spring Cloud构建微服务架构:服务容错保护之Hystrix断路器

前言在前两篇《Spring Cloud构建微服务架构:服务容错保护之Hystrix服务降级》和《Spring Cloud构建微服务架构:服务容错保护之Hystrix依赖隔离》中,我们对Hystrix提供的服务降级和依赖隔离有了基本的认识。下面我们将继续说说Hystrix的另外一个重要元件:断路器。断路器断路器模式源于Martin Fowler的Circuit Breaker一文。“断路...

2019-10-26 14:47:34 195

转载 Spring Cloud构建微服务架构:服务容错保护之Hystrix依赖隔离

前言在上一篇《Spring Cloud构建微服务架构:服务容错保护之Hystrix服务降级》中,我们已经体验了如何使用@HystrixCommand来为一个依赖资源定义服务降级逻辑。实现方式非常简单,同时对于降级逻辑还能实现一些更加复杂的级联降级等策略。之前对于使用Hystrix来实现服务容错保护时,除了服务降级之外,我们还提到过线程隔离、断路器等功能。那么在本篇中我们就来具体说说线程隔离。...

2019-10-26 14:46:19 266

转载 Spring Cloud构建微服务架构:服务容错保护之Hystrix服务降级

在微服务架构中,我们将系统拆分成了一个个的服务单元,各单元应用间通过服务注册与订阅的方式互相依赖。由于每个单元都在不同的进程中运行,依赖通过远程调用的方式执行,这样就有可能因为网络原因或是依赖服务自身问题出现调用故障或延迟,而这些问题会直接导致调用方的对外服务也出现延迟,若此时调用方的请求不断增加,最后就会出现因等待出现故障的依赖方响应而形成任务积压,线程资源无法释放,最终导致自身服务的瘫痪,进一...

2019-10-26 14:44:20 442

转载 Spring Cloud构建微服务架构:分布式配置中心

Spring Cloud Config是Spring Cloud团队创建的一个全新项目,用来为分布式系统中的基础设施和微服务应用提供集中化的外部配置支持,它分为服务端与客户端两个部分。其中服务端也称为分布式配置中心,它是一个独立的微服务应用,用来连接配置仓库并为客户端提供获取配置信息、加密/解密信息等访问接口;而客户端则是微服务架构中的各个微服务应用或基础设施,它们通过指定的配置中心来管理应用资源...

2019-10-26 14:42:01 181

转载 Spring Cloud构建微服务架构:服务消费之Feign

通过前两篇《Spring Cloud构建微服务架构:服务消费(基础)》和《Spring Cloud构建微服务架构:服务消费(Ribbon)》,我们已经学会了在Spring Cloud中基本的服务调用方式。本文我们将继续介绍Spring Cloud中的另外一个服务消费的工具:Spring Cloud Feign。Spring Cloud FeignSpring Cloud Feign是一...

2019-10-26 14:40:15 180

转载 Spring Cloud构建微服务架构:服务消费之Ribbon

通过上一篇《Spring Cloud构建微服务架构:服务消费》,我们已经学会如何通过LoadBalancerClient接口来获取某个服务的具体实例,并根据实例信息来发起服务接口消费请求。但是这样的做法需要我们手工的去编写服务选取、链接拼接等繁琐的工作,对于开发人员来说非常的不友好。所以,下来我们看看Spring Cloud中针对客户端负载均衡的工具包:Spring Cloud Ribbon。...

2019-10-26 14:36:45 145

转载 Spring Cloud构建微服务架构:服务消费之基础

通过上一篇《Spring Cloud构建微服务架构:服务注册与发现》,我们已经成功地将服务提供者:eureka-client或consul-client注册到了Eureka服务注册中心或Consul服务端上了,同时我们也通过DiscoveryClient接口的getServices获取了当前客户端缓存的所有服务清单,那么接下来我们要学习的就是:如何去消费服务提供者的接口?使用LoadBal...

2019-10-26 14:32:09 189

原创 Spring Cloud RestTemplate使用的三种方式

1、直接写死urlRestTemplate restTemplate = new RestTemplate();String resp = restTemplate.getForObject("http://ip:port/order",String.class);2、通过LoadBalancerClient的方式获取服务的url@Autowiredprivate LoadBa...

2019-10-26 02:19:04 383

原创 Spring Cloud Eureka配置文件说明

Eureka服务端:application.yml # eureka(最)简单单点开发配置。支持yml与properties两种,yml文件后缀必须为yml,不能是yaml,否则找不到该文件,使用默认配置。# yml文件大小写敏感;# 每个级别至少用1个空格缩进,也可多个,但同级别的必须一致,不支持tab,本项目按照eclipse的插件(spring官方Spring Tool Suite...

2019-10-26 01:54:12 647

原创 Java反射机制

一、总体介绍1、什么是反射机制。JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制(注意关键词:运行状态)换句话说,Java程序可以加载一个运行时才得知名称的class,获悉其完整构造(但不包括methods定义),并生成其对象...

2019-10-21 22:34:17 116

转载 Redis相关问题

什么是redis?Redis 本质上是一个 Key-Value 类型的内存数据库,整个数据库加载在内存当中进行操作, 定期通过异步操作把数据库数据 flush 到硬盘上进行保存。因为是纯内存操作, Redis 的性能非常出色, 每秒可以处理超过 10 万次读写操作, 是已知性能最快的 Key-Value DB。Redis 的出色之处不仅仅是性能, Redis 最大的魅力是支持保存多...

2019-10-21 22:13:21 199

转载 java高级技术梳理

java高级技术梳理内容环境搭建在这一阶段,首先是安装了虚拟机. 在安装虚拟机过后,学习了以后,就开始安装在虚拟机上安装jdk, tomcat, mysql .,将这些软件安装好后,我们算是把虚拟机运行环境搭建完毕了.Linux环境下安装(jdk\mysql\tomcat)高级技术maven技术虚拟机环境搭建完毕之后,首先学习的了Maven, 用于对项目进行管理和构建 ,因为要使...

2019-10-20 23:39:59 203

原创 Spring Boot常用注解

一、注解(annotations)列表二、注解(annotations)详解三、JPA注解四、springMVC相关注解五、全局异常处理一、注解(annotations)列表@SpringBootApplication:包含了@ComponentScan、@Configuration和@EnableAutoConfiguration注解。其中@ComponentScan让...

2019-10-20 23:36:42 178

原创 Spring Boot中@Async的作用

在Spring中,@Async这个注解用于标记的异步的方法。方法上一旦标记了这个方法,当其它线程调用这个方法时,就会开启一个新的线程去异步处理业务逻辑。此注解的使用说明: 1、此注解可以用在方法上,也可以用在类上(如果用在类上,这个类中的所有的方法就是异步的) 2、使用此注解的方法的类对象,需要是spring管理下的bean对象 3、程序...

2019-10-20 21:40:04 247

原创 String, StringBuffer,StringBuilder的区别和原理

(一) StringString对象一旦创建,其值是不能修改的,如果要修改,会重新开辟内存空间来存储修改之后的对象,即修改了String的引用。因为String的底层是用数组来存值的,数组长度不可改变这一特性导致了上述问题。‌如果我们在实际开发过程中需要对某个字符串进行频繁的修改,使用String就会造成内存空间的浪费,应该怎样解决这个问题呢?‌答案就是可以使用...

2019-10-19 23:23:59 158

转载 Nginx Linux环境下安装及负载均衡配置

在正式介绍Nginx之前先简单说明下什么是正向代理和反向代理,Nginx实现负载均衡功能正是基于其反向代理功能实现的。正向代理类似一个跳板机,代理访问外部资源。正向代理 是一个位于客户端和原始服务器之间的服务器,为了从原始服务器取得内容,客户端向代理发送一个请求并指定目标(原始服务器),然后代理向原始服务器转交请求并将获得的内容返回给客户端。客户端必须要进行一些特别的设置才能使用正向代理。...

2019-10-19 23:15:05 158

转载 Nginx rewrite模块详解、expires缓存配置及gzip压缩策略

一、rewrite使用rewrite的主要功能是实现URI地址的重定向,将用户请求的URI基于regex所描述的模式进行检查,匹配到时将其替换为replacement指定的新的URI,即使用nginx提供的全局变量或自己设置的变量,结合正则表达式和标志位实现url重写以及重定向。如果replacement是以http://或https://开头,则替换结果会直接以重向返回给客户端。1)rew...

2019-10-19 23:10:47 210

转载 Nginx配置https请求,以及Nginx+keepalived实现高可用

一、Nginx配置https请求要实现Nginx配置https请求,安装的时候需要加上 --with-http_ssl_module,因为http_ssl_module不属于Nginx的基本模块。./configure--prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module1、创建证...

2019-10-19 23:01:33 307

原创 基于Session共享的方式解决单点登录问题

本文主要讲述集群环境下解决Session共享的问题,从而实现集群环境下的单点登录。Session共享问题已经有很多解决方案,这里主要讲述常用四种方法。Session StickySession Sticky(粘性) 保证同一个会话的请求都在同一个Web服务器上处理,这样就完全不需要考虑到会话问题了。比如负载均衡算法中哈希算法就是一个典型的Session Sticky实现手段。这种实现方式...

2019-10-19 22:58:27 448

原创 数据库表的设计

一、表设计1、表必须定义主键,默认为ID,整型自增,如果不采用默认设计必须咨询DBA进行设计评估;2、ID字段作为自增主键,禁止在非事务内作为上下文作为条件进行数据传递;3、禁止使用外键;4、多表中的相同列,必须保证列定义一致;5、国内表默认使用InnoDB,表字符集默认使用gbk,国际默认使用utf8的表6、表必须包含gmt_create和gmt_modified字段,即表...

2019-10-19 22:56:36 652

转载 亿级数据量系统数据库性能优化方案

一、数据库性能瓶颈主要原因1、数据库连接MySQL数据库默认连接为100,我们可以通过配置initialSize、minIdle、maxActive等进行调优,但由于硬件资源的限制,数据库连接不可能无限制的增加,对大型单体应用单实例数据库可能会出现最大连接数不能满足实际需求的情况,这时就会系统业务阻塞。2、表数据量大(空间存储问题)普遍观点认为单表数据量超过1000万条时就是出现数据...

2019-10-19 22:54:36 702

转载 数据库分库分表及MySQL主从复制实现数据库同步

一、为什么要分库分表解决大数据存储时数据访问性能,具体来说就是解决超大容量问题和性能问题。举例说明,订单表或用户表如果数据量达到上亿条记录,此时数据库的IO能力、处理能力就会出现一个瓶颈(MySQL官方统计单表数据量超过1000万性能会逐渐下降)。另一方面,单一数据库本身的CPU、内存、磁盘、IO都有性能极限。二、如何分库分表垂直分库:解决数据表过多问题,按照功能模块、业务维度、ER图...

2019-10-19 15:01:00 621

原创 常见的几种单例模式的设计

单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。单例模式 涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象。单例类只能有一个实例。单例类必须自己创建自己的唯一实例。单例类必须给所有其他对...

2019-10-14 23:47:04 152

原创 Vmware虚拟机设置静态IP地址

一、安装好虚拟后在菜单栏选择编辑→ 虚拟网络编辑器,打开虚拟网络编辑器对话框,选择Vmnet8 Net网络连接方式,随意设置子网IP,点击NAT设置页面,查看子网掩码和网关,后面修改静态IP会用到。 二、检查宿主机VM8 网卡设置,打开网络和共享中心→ 更改适配器设置→,在VMware Network Adapter VMnet8上单击右键,选择属性按钮打开属性对话框...

2019-10-14 23:33:18 196

原创 设计模式

从1995 年至今,设计模式在软件开发中得以广泛应用,在Sun 的Java SE/Java EE 平台 和Microsoft 的.net 平台 设计中就应用了大量的设计模式。设计模式(Design Pattern) 是一套 被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结 ,使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。根据其 目的 (模式是用来做什么的...

2019-10-14 23:31:38 189

原创 Eclipse快捷方式

Ctrl+1 快速修复(最经典的快捷键)Ctrl+D 删除当前行Ctrl+Alt+↓ 复制当前行到下一行(复制增加)Ctrl+Alt+↑ 复制当前行到上一行(复制增加)Alt+↓ 当前行和下面一行交互位置(特别实用,可以省去先剪切,再粘贴了)Alt+↑ 当前行和上面一行交互位置(同上)Alt+← 前一个编辑的页面Alt+→ 下一个编辑的页面(当然是针对上面那条来说了)Alt+Ent...

2019-10-14 23:08:22 168

转载 拦截器(Interceptor)和过滤器(Filter)的执行顺序和区别

引言本来想记录一下关于用户登陆和登陆之后的权限管理、菜单管理的问题,想到解决这个问题用到Interceptor,但想到了Interceptor,就想到了Filter,于是就想说一下它们的执行顺序和区别。关于Interceptor解决权限和菜单管理的问题,在放在下一篇写吧,就酱紫。二、区别1、过滤器(Filter)首先说一下Filter的使用地方,我们在配置web.xml时,总会配置...

2019-10-14 23:05:50 302

转载 如何实现前后端分离开发

为什么要做分离开发:现在很多公司的web开发模式都是用jsp、php、asp等等开发,而前端工程师的工作就是完成切图及静态页面的搭建,他们的精力都放在了辅助别人完成项目的工作,背锅还不讨好,责任划分不明确。因此今天要讨论的话题就是前后端分离的开发,让前端工程师的工作更饱满,更具有价值!如何实现前后端分离:web的前后台分离开发无非就是前后台通过http...

2019-10-14 22:58:14 2685

转载 分布式=高并发=多线程?

确实,在一开始接触的时候,不少人都会将三者混淆,误以为所谓的分布式高并发的系统就是能同时供海量用户访问,而采用多线程手段不就是可以提供系统的并发能力吗?实际上,他们三个总是相伴而生,但侧重点又有不同。什么是分布式?分布式更多的一个概念,是为了解决单个物理服务器容量和性能瓶颈问题而采用的优化手段。该领域需要解决的问题极多,在不同的技术层面上,又包括:分布式文件系统、分布式缓存、分布式...

2019-10-14 22:49:09 152

空空如也

空空如也

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

TA关注的人

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