6 陈如水

尚未进行身份认证

我要认证

市场经济条件下,每个人都有一个价,你有哪些本事?你值不值这个价? 人生如茶,经历浮沉,经历苦难浸泡,方能长大.

等级
TA的排名 5k+

20200428 线程安全(上)--彻底搞懂volatile关键字

计算机在处理数据的过程中为什么会出现线程不安全的问题。计算机在执行程序时,每条指令都是在CPU中执行的,而执行指令过程中会涉及到数据的读取和写入。由于程序运行过程中的临时数据是存放在主存(物理内存)当中的,这时就存在一个问题,由于CPU执行速度很快,而从内存读取数据和向内存写入数据的过程跟CPU执行指令的速度比起来要慢的多,因此如果任何时候对数据的操作都要通过和内存的交互来进行,会大大降低指令...

2020-04-28 18:31:43

20200428 Java中Lock和synchronized的比较和应用

synchronized在语法上已经足够简单了,在JDK 5之前只能借助此实现,但是由于是独占锁,性能却不高,因此JDK 5以后就开始借助于JNI来完成更高级的锁实现。JDK 5中的锁是接口java.util.concurrent.locks.Lock。另外java.util.concurrent.locks.ReadWriteLock提供了一对可供读写并发的锁。线程获取锁和释放锁的方...

2020-04-28 18:28:59

20200427 补偿模式

微服务架构应满足数据最终一致性,实现最终一致性的三种模式:可靠事件模式、补偿模式、TCC模式。事务补偿机制事务补偿即在事务链中的任何一个正向事务操作,都必须存在一个完全符合回滚规则的可逆事务。如果是一个完整的事务链,则必须事务链中的每一个业务服务或操作都有对应的可逆服务。实现真正的预提交和正式提交的分离。需要手工编写大量的代码来处理以保证事务的完整性。考虑实现一个通用的事...

2020-04-27 11:46:45

20200426 如何进行缓存维护(缓存一致性)

缓存一致性问题写数据频繁而读数据少的场景。 删除而不是更新。删除缓存,而不是更新缓存,就是一个lazy计算的思想。先删除缓存,再更新数据库 && 先更新数据库,再删除缓存的比较考虑到并发问题,不能只是单线程的操作。1、更新的时候,为什么先删除缓存,然后再更新数据库?写数据频繁而读数据少的场景并不合适这种解决方案,因为也许还没有查询就被删除或修改了,这样...

2020-04-26 11:45:54

20200426 synchronized底层原理

对象锁和类锁1. 对象锁在 Java 中,每个对象都会有一个 monitor 对象,这个对象其实就是 Java 对象的锁,通常会被称为“内置锁”或“对象锁”。类的对象可以有多个,所以每个对象有其独立的对象锁,互不干扰。2. 类锁在 Java 中,针对每个类也有一个锁,可以称为“类锁”,类锁实际上是通过对象锁实现的,即类的 Class 对象锁。每个类只有一个 Class 对象,所以每...

2020-04-26 10:28:59

20200423 值传递和引用传递

int属于基本数据类型,因此在方法中进行传递和引用时,并不会改变该变量的数值而arr属于数组,是引用数据类型,因此在方法引用时,实际传递的是该数组在堆内存中的物理内存地址,在方法中对该数组进行操作,则会影响到该数组内部的数值,会发生改变.在java中,基本数据类型作为参数传递的时候叫做值传递,传的是值本身,值传递:值在该方法中改变属于局部变量改变当出了该方法就没有作用了(方法...

2020-04-23 18:28:37

20200423 订单幂等处理

订单幂等性1、联合唯一索引,进行去重复;用户id+商品id建立唯一索引。2、通过状态机保证接口幂等;后端可以根据不同的状态去保证幂等性,比如在退款的时候,一定要保证这笔订单是已支付的状态。3、TOKEN机制,针对客户端连续点击或者调用方的超时重试等情况,例如提交订单,此种操作就可以用Token的机制实现防止重复提交。TOKEN机制如何实现?简单的说就是调用方在调用接口的时候先向后端请求...

2020-04-23 16:07:39

20200423 Java公平锁与非公平锁

通过CAS算法保证操作的可靠性,正确性。不断尝试修改值,最快失败,保证了结果的最终一致性。一、synchronized与Lock的区别1.首先synchronized是java内置关键字,在jvm层面,Lock是个java类;2.synchronized无法判断是否获取锁的状态,Lock可以判断是否获取到锁;3.synchronized会自动释放锁 (a线程执行完同步代码会释...

2020-04-23 13:30:01

Spring cloud 灰度发布

Spring Cloud灰度发布之Nepxion Discovery架构升级,有单体架构升级为微服务架构。服务的灰度发布,根据访问量逐渐切换用新版本替换老版本,并且能够做到代码零入侵的。Nepxion Discovery是一款对Spring Cloud Discovery服务注册发现、Ribbon负载均衡、Feign和RestTemplate调用的增强中间件,其功能包括灰度发布(包括切...

2020-04-22 13:58:29

20200422 Eureka Server结点之间如何同步数据

搭建Eureka Server集群,对外暴露集群地址,让客户端进行注册。Eureka Server结点之间如何同步数据?1、相同的服务名称但有不同的实例id,所以拉取的是服务列表。最终通过负载均衡来获取一个服务,这样可以均衡各个服务器上的服务。2、服务提供者向注册中心注册服务,并每隔30秒发送一次心跳,就如同人还活着存在的信号一样,如果Eureka在90秒后还未收到服务提供者发来...

2020-04-22 13:03:26

20200420 Hikali连接池

最小空闲连接数量;空闲连接存活最大时间,默认600000(10分钟);连接池最大连接数,默认是10;此属性控制从池返回的连接的默认自动提交行为,默认值:true;连接池名称;此属性控制池中连接的最长生命周期,值0表示无限生命周期,默认1800000即30分钟;数据库连接超时时间,默认30秒,即30000;1、数据库配置;2、连接池的配置;read...

2020-04-20 17:42:06

20200420 maven私服配置

Maven私服配置的两种方式以下配置均在settings.xml中配置,私服配置不建议配置在某个项目的 pom.xml文件中。1、镜像方式配置。maven 在默认情况下是从中央仓库下载构建,也就是 id 为 central 的仓库。如果没有特殊需求,一般只需要将私服地址配置为镜像,同时配置其代理所有的仓库就可以实现通过私服下载依赖的功能。(通过私服代理所有的仓库)当按照以上方...

2020-04-20 16:57:10

20200115 k8s的原理

Docker:开源的容器引擎。Images(Docker镜像)Container(容器)容器是镜像的可运行实例。镜像和容器的关系有点类似于面向对象中,类和对象的关系。Docker Registry是一个集中存储与分发镜像的服务。构建完Docker镜像后,就可在当前宿主机上运行。但如果想要在其他机器上运行这个镜像,就需要手动复制。此时可借助Docker Registry来避免镜像的手动复...

2020-04-15 11:39:20

20200409 ThreadLocal

ThreadLocal,并发编程ThreadLocal为解决多线程程序的并发问题提供了一种新的思路。当使用ThreadLocal维护变量时,ThreadLocal为每个使用该变量的线程提供独立的变量副本,所以每一个线程都可以独立地改变自己的副本,而不会影响其它线程所对应的副本。在ThreadLocal类中有一个Map,用于存储每一个线程的变量副本,Map中元素的键为线程对象,而值对应线程...

2020-04-09 19:14:52

20200409 日志配置文件

log4j2.xml 配置文件xml文件,定义一些属性,propertieslog4j2.xml的配置,log4j2.xml配置文件中各项标签的意义。配置文件的名称以及在项目中的存放位置;1)2.x版本配置文件后缀名只能为".xml",".json"或者".jsn".2)系统选择配置文件的优先级(从先到后),项目resoureces目录下。3)一般默认使用log4j2.xm...

2020-04-09 18:27:24

Spring Cloud项目开发中遇到的问题

Spring Cloud微服务1、某个微服务是供内部调用还是前端调用?如果是内部调用,直接引用jar即可;如果是前端调用,需要通过api-ws进行访问。(doctor服务,hospital服务)上游服务和下游服务之分,只有上游服务才能暴露给前端。微服务层级之分。接口单一职责原则:在api-ws这一层合并接口, 把所有的数据都封装到一个接口里面。2、Nginx与Eureka Serv...

2019-08-30 18:02:20

20200119 日志框架

日志体系与SringBoot的日志应用开发的时候,日志记录方法的调用,不应该来直接调用日志的实现类,而是调用日志抽象层里面的方法;日志抽象层----->日志实现层。调用日志抽象层里面的方法。把不同的日志系统的实现进行了具体的抽象化,只提供了统一的日志使用接口。使用时只需要按照其提供的接口方法进行调用即可,由于它只是一个接口,并不是一个具体的可以直接单独使用的日志框架,所以最终...

2020-01-19 17:25:43

20200119 config server服务

把密钥放在配置中心进行保密,配置中心的代码由专人进行维护。(安全性)配置中心http://192.168.110.123:7892/com.pica.cloud.trade/dev/publish。 测试配置中心是否通?url组成:Eureka Server上Config Server的地址,组名,环境名,分支名。不是git代码的地址。Config配置中心在配置中心更...

2020-01-19 13:36:18

20200117 实现接口幂等的几种方式

实现接口幂等性,防止并发操作,如何设计接口幂等方案?当前是否有高并发的场景,如果是才需要处理接口幂等操作,如果不是就不需要处理。插入更改操作,都要考虑高并发条件下的幂等性。接口的幂等性实际上就是接口可重复调用,在调用方多次调用的情况下,接口最终得到的结果是一致的。1、redis:setNX实现分布式锁,防止多个相同操作同时执行。2、mysql:select......fo...

2020-01-17 15:16:07

20200114 ASM框架

用了一下BeanUtils.copyPropertie和PropertyUtils.copyProperties()的方法,发现其效率非常低。原理是通过JDK自带的反射机制动态的去get,set从而去转换我们的类。使用ASM框架来动态生成ASM 让我们有能力在运行的过程中动态生成一个新的类并加载和运行它。ASM是一个通用的 Java 字节码操控和分析框架。它可以用于修改已有的类也可...

2020-01-14 16:39:48

查看更多

勋章 我的勋章
  • 阅读者勋章Lv2
    阅读者勋章Lv2
    授予在CSDN APP累计阅读博文达到7天的你,是你的坚持与努力,使你超越了昨天的自己。
  • 持之以恒
    持之以恒
    授予每个自然月内发布4篇或4篇以上原创或翻译IT博文的用户。不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
  • 勤写标兵Lv4
    勤写标兵Lv4
    授予每个自然周发布9篇以上(包括9篇)原创IT博文的用户。本勋章将于次周周三上午根据用户上周的博文发布情况由系统自动颁发。