- 博客(58)
- 资源 (9)
- 收藏
- 关注
转载 5种分布式事务解决方案优缺点对比
转载自:https://www.toutiao.com/a6717432946736759299/?app=news_article_lite&is_hit_share_recommend=0&tt_from=copy_link&utm_source=copy_link&utm_medium=toutiao_ios&utm_campaign=client_share背景分布式事务是企业集成中的一个技术难点,也是每一个分布式系统架构中都会涉及到的一个东西,特别是
2020-07-16 15:44:31 1895
原创 git本地分支与远程分支关联
在使用git分支时候,多分支切换是经常遇到的问题。下文两种情况分表介绍一下。1、本地仓库中存在分支,远程仓库没有分支假设有本地分支feature/xxx,远程没有分支。此时push或者pull时,就不知道跟踪的是哪个分支?使用以下指令:git push --set-upstream origin feature/xxx此时会在远端自动创建分支feature/xxx,会自动和本地分支...
2020-05-07 13:56:18 1037
原创 Spring Cloud Zuul 网关简介
Zuul网关原理及其配置网关: 是一个网络整体系统中的前置门户入口。请求首先通过网关,进行路径的路由,定位到具体的服务节点上。Zuul是一个微服务网关,首先是一个微服务。也是会在Eureka注册中心中进行服务的注册和发现。也是一个网关,请求应该通过Zuul来进行路由。Zuul网关的作用网关有以下几个作用:统一入口:未全部为服务提供一个唯一的入口,网关起到外...
2020-03-31 16:00:51 260
原创 linux防火墙查看状态firewall、iptable
一、iptables防火墙1、基本操作# 查看防火墙状态service iptables status# 停止防火墙service iptables stop# 启动防火墙service iptables start# 重启防火墙service iptables restart# 永久关闭防火墙chkconfig iptables off...
2019-10-11 19:10:04 201
原创 修改Docker容器的时间和宿主时间一致
在查看容器的日志的,发现时间有和宿主主机时间相差有8个小时,而且宿主主机使用的是CST时间,容器容器使用的是UTC时间 首先进入到容器中:docker exec -it xxxxx /bin/bash 在容器中修改下/etc/localtime文件的名称,避免冲突。root@ddbfb445e9ca:# cd /etc/root@ddbfb445...
2019-06-15 11:49:03 1418
原创 并发的核心:CAS 是什么?Java8是如何优化 CAS 的?
大家可能都听说说 Java 中的并发包,如果想要读懂 Java 中的并发包,其核心就是要先读懂 CAS 机制,因为 CAS 可以说是并发包的底层实现原理。今天就带大家读懂 CAS 是如何保证操作的原子性的,以及 Java8 对 CAS 进行了哪些优化。synchronized:大材小用我们先来看几行代码:public class CASTest { static int i =...
2019-04-11 19:49:13 136
转载 ThreadLocal终极篇
前言在面试环节中,考察"ThreadLocal"也是面试官的家常便饭,所以对它理解透彻,是非常有必要的.有些面试官会开门见山的提问:“知道ThreadLocal吗?” “讲讲你对ThreadLocal的理解”当然了,也有面试官会慢慢引导到这个话题上,比如提问“在多线程环境下,如何防止自己的变量被其它线程篡改”,将主动权交给你自己,剩下的靠自己发挥。那么ThreadLocal可以...
2019-02-16 22:33:55 162
转载 内存溢出和内存泄漏的区别、产生原因以及解决方案
内存溢出 out of memory,是指程序在申请内存时,没有足够的内存空间供其使用,出现out of memory;比如申请了一个integer,但给它存了long才能存下的数,那就是内存溢出。内存泄露 memory leak,是指程序在申请内存后,无法释放已申请的内存空间,一次内存泄露危害可以忽略,但内存泄露堆积后果很严重,无论多少内存,迟早会被占光memory leak会最终会导致...
2018-12-18 11:35:33 188
转载 Java并发编程:Lock
在上一篇文章中我们讲到了如何使用关键字synchronized来实现同步访问。本文我们继续来探讨这个问题,从Java 5之后,在java.util.concurrent.locks包下提供了另外一种方式来实现同步访问,那就是Lock。 也许有朋友会问,既然都可以通过synchronized来实现同步访问了,那么为什么还需要提供Lock?这个问题将在下面进行阐述。本文先从synchroni...
2018-12-13 16:49:48 123
转载 Java并发编程:synchronized
虽然多线程编程极大地提高了效率,但是也会带来一定的隐患。比如说两个线程同时往一个数据库表中插入不重复的数据,就可能会导致数据库中插入了相同的数据。今天我们就来一起讨论下线程安全问题,以及Java中提供了什么机制来解决线程安全问题。 以下是本文的目录大纲: 一.什么时候会出现线程安全问题? 二.如何解决线程安全问题? 三.synchronized同步方法或者同步块 ...
2018-12-13 16:23:22 154
转载 Redis分布式锁的正确实现方式
前言分布式锁一般有三种实现方式:1. 数据库乐观锁;2. 基于Redis的分布式锁;3. 基于ZooKeeper的分布式锁。本篇博客将介绍第二种方式,基于Redis实现分布式锁。虽然网上已经有各种介绍Redis分布式锁实现的博客,然而他们的实现却有着各种各样的问题,为了避免误人子弟,本篇博客将详细介绍如何正确地实现Redis分布式锁。可靠性首先,为了确保分布式锁可用,我们至少要确保锁的...
2018-12-06 16:47:36 148
原创 Java中创建String的两种方式
创建一个String类型的变量一般有两种方法,如下public class Test { public static void main(String[] args){ String str1 = "abcd"; String str2 = new String ( "abcd" ); }}那么为什么会存在这两种创建方式呢,它们在内存中的表现形式各有什么区别?第一种情况...
2018-11-29 14:25:22 1825 1
转载 Java中Comparable和Comparator排序小结
一、Comparable简介 Comparable是排序接口。若一个类实现了Comparable接口,就意味着该类支持排序。实现了Comparable接口的类的对象的列表或数组可以通过Collections.sort或Arrays.sort进行自动排序。 此外,实现此接口的对象可以用作有序映射中的键或有序集合中的集合,无需指定比较器。该接口定义如下:package java.la...
2018-11-23 11:40:40 145
原创 SpringBoot读取配置的几种方式
Spring Boot使用了一个全局的配置文件application.properties或者application.yml,放在src/main/resources目录下或者类路径的/config下。Sping Boot的全局配置文件的作用是对一些默认配置的配置值进行修改 新建一个springboot的项目,在application.properties中添加demo.name=...
2018-11-22 15:09:47 689
转载 适配器模式(adapter)
适配器模式将某个类的接口转换成客户端期望的另一个接口表示,目的是消除由于接口不匹配所造成的类的兼容性问题。主要分为三类:类的适配器模式、对象的适配器模式、接口的适配器模式。首先,我们来看看类的适配器模式,先看类图:类的适配器模式 核心思想就是:有一个Source类,拥有一个方法,待适配,目标接口时Targetable,通过Adapter类,将Source的功能扩展到Targetab...
2018-11-21 14:06:09 121
转载 第十三章 - 字符串
1、不可变String String对象时不可变的。每当把String对象作为方法的参数时,都会复制一份引用。(其实就是对函数中参数列表中参数的操作不会影响外面的原参数)如下:import static net.mindview.util.Print.*;public class Immutable {public static String upcase(String s) {...
2018-11-20 17:08:55 175
转载 第十二章 - 通过异常处理错误
Java的基本理念是“结构不佳的代码不能运行”。Java中异常处理的目的在于通过使用少于目前数量的代码来简化大型、可靠的程序的生成,并且通过这种方式可以使程序员增加自信。1、概念 因为异常机制将保证能够捕获这个错误,所以不用小心翼翼的各种去检查。而处理错误只需要在一个地方完成,那就是 异常处理程序。 只需要在异常处理程序中处理错误。2、基本异常异常情形是指阻止当前方法...
2018-11-20 17:02:00 206
原创 第十一章 - 持有对象
泛型和类型安全的容器 java se5之前容器是没有泛型的,以ArrayList为例,所有的都是ArrayList<Object>的,所以它允许向容器中插入任何类型的对象,这样做会有很多问题出现,进去的是详细的类型,而出来是确是Object的了,如果要使用就要强制类型转换,转换错了,程序就会抛出错误 java SE5 之后引入的了泛型,如果想容器中插入类型错误的对象,编...
2018-11-20 14:35:22 130
转载 工厂方法模式(Factory Method)
设计模式的六大原则1、开闭原则(Open Close Principle)开闭原则就是说对扩展开放,对修改关闭。在程序需要进行拓展的时候,不能去修改原有的代码,实现一个热插拔的效果。所以一句话概括就是:为了使程序的扩展性好,易于维护和升级。想要达到这样的效果,我们需要使用接口和抽象类,后面的具体设计中我们会提到这点。2、里氏代换原则(Liskov Substitution Princi...
2018-11-19 16:38:00 227
转载 Redis淘汰策略
将 Redis 用作缓存时, 如果内存空间用满, 就会自动驱逐老的数据。 maxmemory用于指定 Redis 能使用的最大内存。既可以在redis.conf文件中设置, 也可以在运行过程中通过CONFIG SET命令动态修改 当内存使用达到最大限制时, 如果需要存储新数据, 根据配置的策略(policies)的不同, Redis可能直接返回错误信息, 或者删除部...
2018-11-15 17:32:50 193
转载 缓存与数据库一致性
一、不一致原因分析将不一致分为三种情况: 1. 数据库有数据,缓存没有数据; 2. 数据库有数据,缓存也有数据,数据不相等; 3. 数据库没有数据,缓存有数据。 在讨论这三种情况之前,先说明一下我使用缓存的策略,也是大多数人使用的策略,叫做 Cache Aside Pattern。简而言之,就是 1. 首先尝试从缓存读取,读到数据则直接返回;如果读不到,就读数据库,...
2018-11-15 17:11:54 144
转载 30条MySql语句优化技巧
1、应尽量避免在 where 子句中使用!=或<>操作符,否则将引擎放弃使用索引而进行全表扫描。2、对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引。3、应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描,如:select id from t where num is ...
2018-11-15 15:42:29 118
原创 最全面的MySQL 索引详解
什么是索引? 1、索引 索引是表的目录,在查找内容之前可以先在目录中查找索引位置,以此快速定位查询数据。对于索引,会保存在额外的文件中。是数据库中专门用于帮助用户快速查询数据的一种数据结构。类似于字典中的目录,查找字典内容时可以根据目录查找到数据的存放位置,然后直接获取即可。索引由数据库中一列或多列组合而成,其作用是提高对表中数据的查询速度索引的优点是可以提高检索数据的...
2018-11-15 15:32:01 269
转载 mybatis传递参数到mapping.xml
第一种方案 ,通过序号传递DAO层的函数方法 1 Public User selectUser(String name,String area); 对应的Mapper.xml 1 2 3 <select id="selectUser" resultMap="BaseResultMap">...
2018-11-12 16:33:26 240
原创 Git 教程 4 标签管理
发布一个版本时,我们通常先在版本库中打一个标签(tag),这样,就唯一确定了打标签时刻的版本。将来无论什么时候,取某个标签的版本,就是把那个打标签的时刻的历史版本取出来。所以,标签也是版本库的一个快照。创建标签 首先,切换到需要打标签的分支上git tag v1.0查看标签git tag 默认标签是打在最新提交的commit上的,如果我想给历史上的某次co...
2018-11-08 18:03:39 283
原创 Git 教程 3 分支管理
Svn中也有分支管理,但是很low,Git的分支管理非常强大,本文先不去说分支管理内部到底怎么做的,我们先来看看Git中最基本的分支管理操作 查看分支 git branch 这里显示当前仓库只有一个master分支,这是git默认创建出来的,master前面的*表示我们当前处于这一个分支中 分支创建和切换 git branch <分支名> 我们可...
2018-11-08 17:40:13 130
原创 Git 教程 2 远程仓库
远程仓库 在内容前,请自行注册GitHub账号。由于你的本地Git仓库和GitHub仓库之间的传输是通过SSH加密的。 配置SSH KEY 在用户主目录下,看看有没有.ssh目录,如果有,再看看这个目录下有没有id_rsa和id_rsa.pub这两个文件,如果已经有了,可跳过 。如果没有,创建SSH Key:ssh-keygen -t rsa -b 4096 -C ...
2018-11-08 17:05:59 148
原创 Git 教程 1 git安装及基本命令
在Mac OS X上安装Git 由于没有Windows系统,也没在Windows上安装过git,所以只介绍mac的安装。Windows小伙伴自行百度了。 第一是安装homebrew,然后通过homebrew安装Git,具体方法请参考homebrew的文档:http://brew.sh/。 第二种方法更简单,也是推荐的方法,就是直接从AppStore安装Xcode,Xcode...
2018-11-08 15:39:09 158
原创 SpringCloud实战10 - 使用Spring Cloud Config 统一管理微服务配置
为什么要统一管理服务配置 对于传统的单体应用而言,常使用配置文件来管理所有配置,比如SpringBoot的application.yml文件,但是在微服务架构中全部手动修改的话很麻烦而且不易维护。 微服务的配置管理一般有以下需求: 1.集中配置管理,一个微服务架构中可能有成百上千个微服务,所以集中配置管理是很重要的。 2.不同环境不同配置,比如数据源配置在不同环境(开发,...
2018-11-07 18:15:40 733
原创 SpringCloud实战9 - 使用Zuul构建微服务网关
微服务网关 微服务网关是介于客户端与服务器端的中间层,所有外部请求先经过网关。 微服务网关封装了应用程序的内部结构,客户端只用跟网关交互,而无需直接调用特定的微服务接口Zuul简介 Zuul可以通过加载动态过滤机制,从而实现以下各项功能: 1.验证与安全保障: 识别面向各类资源的验证要求并拒绝那些与要求不符的请求。 2.审查与监控: 在边缘位置追踪有意义数据...
2018-11-04 15:40:00 484
原创 MYSQL数据库事务4种隔离级别及7种传播行为
事务的特性:原子性:事务的不可分割,组成事务的各个逻辑单元不可分割。一致性:事务执行的前后,数据完整性保持一致。隔离性:事务执行不应该受到其他事务的干扰。持久性:事务一旦结束,数据就持久化到数据库中。查看/设置隔离级别 查看:SELECT @@tx_isolation 设置:set tx_isolation='xxx'事务的隔离级别如果不考虑隔离性,引发一些安...
2018-11-02 17:54:00 8078
原创 SpringCloud实战8 - 使用Turbine聚合监控数据
Turbine简介 Turbine是一个聚合Hystrix监控数据的工具,它可将所有相关的Hystrix.stream端点的数据聚合到一个组合的turbine.stream中,从容让几圈管理更加方便。使用Turbine监控多个微服务 创建一个turbine的项目,并在pom.xml中添加依赖。<dependency> <groupId>org...
2018-11-02 14:41:42 710
原创 SpringCloud实战7 - 使用Hystrix Dashborad可视化监控数据
Hystrix的监控 除了实现容错,Hystrix还提供了近乎实时的监控,HystrixCommand在执行时,会生成执行结果和运行指标,比如每秒执行请求数,成功数等,这些监控数据对分析应用系统的状态有用。 在ribbon-consumer的pom.xml 添加依赖实现具备监控能力。<dependency> <groupId>o...
2018-11-01 16:11:52 516
原创 SpringCloud实战6 - 使用Hystrix实现微服务的容错处理
容错机制如果服务提供者相应非常缓慢,那么消费者对提供者的请求就会被强制等待,知道提供者相应超时。在高负载场景下,如果不作任何处理,此类问题可能会导致服务消费者的资源耗尽甚至整个系统崩溃。雪崩效应微服务架构的应用系统通常包含多个服务层,微服务之间通过网络进行通信,从而支撑起整个应用系统,因此,微服务之间难免存在依赖关系。我们常把“基础服务故障”导致“级联故障”的现象成为雪崩效应。雪崩效应...
2018-10-31 16:27:41 337
原创 SpringCloud实战5 - 使用Feign实现声明式rest调用
上一节是是使用RestTemplate实现REST API调用的,大致代码如下: @RequestMapping(value = "/hello", method = RequestMethod.GET) public String hello(@RequestParam String name) { ResponseEntity<String&g...
2018-10-31 13:44:58 243
原创 SpringCloud实战4 - Ribbon实现客户端侧负载均衡
Ribbon简介 Ribbon有助于控制HTTP和tcp客户端的行为,为ribbon配置服务提供者地址列表后,Ribbon就可以基于某种负载均衡算法吗,自动的帮助服务消费者去请求。Ribbon默认为我们提供很多负载均衡算法,例如轮询,随机等, SpringCloud在,当Ribbon和Eureka配合使用时,Ribbon可以自动 从Eureka Server获取服务提供者地址,并基于...
2018-10-28 19:12:49 183
原创 spring boot maven 打包提示 “程序包找不到” 解决方法。
再用springboot maven打包的时候会碰到 找不到“程序包找不到” 的问题。解决放下如下修改父pom.xml配置文件。由原来的<build> <plugins> <plugin> <groupId>org.springframework.boot</...
2018-10-28 16:46:24 7660 9
原创 springboot访问请求404解决方法
新手在刚接触springboot的时候,可能会出现访问请求404的情况,代码怎么看都是对的,但就是404。 在十分确定代码没问题的时候,可以看下自己的包是不是出问题了,什么意思么? 答案:SpringBoot 注解 @SpringBootApplication 默认扫描当前类的同包以及子包下的类; 如:启动程序在包名 com.yang.test.ymkribbonco...
2018-10-28 16:22:25 93873 33
原创 SpringCloud实战3 - Eureka的自我保护模式
本文探讨Eureka的自我保护模式,进入自我保护模式最直观的体现就是,页面输出的警告信息,以下的红色部分 默认 情况下,如果Eureka Server在一定时间内没有收到某个微服务的心跳,Eureka Server会注销改实例(默认90秒),但是网络分区故障发生时,微服务与Eureka Server之间无法通信,以上行为就非常危险了--以为微服务本身是健康的,此时不应该注销这个服务。...
2018-10-27 16:44:38 176
原创 SpringCloud实战2 - 将微服务注册到Eureka Server 上
注册到单节点Eureka Server 将编写如何将微服务注册到Eureka Server上 先创建一个子模块项目,用来放api接口,然后再创建一个子模块,充当提供者。 在提供者项目的pom文件中添加依赖 <dependency> <groupId>org.springframework.clo...
2018-10-27 16:26:35 357
springboot+springcloud 第9篇
2018-11-04
springboot+springcloud第8篇
2018-11-02
springboot+springcloud第7篇
2018-11-01
springboot+springcloud第6篇
2018-10-31
springboot+springcloud第5篇
2018-10-31
springboot+springcloud第4篇
2018-10-28
springboot+springcloud 第2篇
2018-10-27
springboot+springcloud
2018-10-26
springboot+dubbo
2018-10-25
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人