cap与base理论_rhyme-编程思维

分布一致性的提出 在分布式系统中要解决的一个重要问题就是数据的复制。在我们的日常开发经验中,相信很多开发人员都遇到过这样的问题:假设客户端C1将系统中的一个值K由V1更新为V2,但客户端C2无法立即读取到K的最新值,需要在一段时间之后才能读取到。这很正常,因为数据库复制之间存在延时。 分布式系统对于数据的复制需求一般都来自于以下两个原因: 1、为了增加系统的可用性,以防止单点故障引起的系统不可用

计算机网络知识整理_rhyme-编程思维

一 OSI与TCP/IP各层的结构与功能,都有哪些协议 五层协议的体系结构 学习计算机网络时我们一般采用折中的办法,也就是中和OSI和TCP/IP的优点,采用一种只有五层协议的体系结构,这样既简洁又能将概念阐述清楚。   二 ICMP协议到底属于哪一层 ping命令就是利用的ICMP协议; ICMP协议是IP层的附属协议,是介于IP层和TCP层之间的协议,一般认为属于IP层协议;   ICMP

常用正则表达式_rhyme-编程思维

第一个字符为中文或英文字母,只包含中文、字母、数字、下划线、连字符"-" 的字符串  无空格,"^"表示字符串开头,"$"表示字符串结尾,"*"表示前面的子表达式"[A-Za-z\u4e00-\u9fa50-9_\-]"字母、中文、数字、下划线、连字符"-" 重复0次或更多次 ^[A-Za-z\u4e00-\u9fa5][A-Za-z\u4e00-\u9fa50-9_\-]*$   Java

搞定springboot项目连接远程服务器上kafka遇到的坑以及完整的例子_rhyme-编程思维

版本 springboot 2.1.5.RELEASE kafka 2.2   遇到的坑 用最新的springboot就要用最新的kafka版本! 当我启动云服务器上的zk后,再启动kafka后台日志也没报错,只感觉EndPoint日志信息有点奇怪,然后springboot项目连接kafka,老是有warn级别的日志:"Connection to node -1 could n

java内存模型、jvm内存结构和java对象模型_rhyme-编程思维

JVM内存结构 我们都知道,Java代码是要运行在虚拟机上的,而虚拟机在执行Java程序的过程中会把所管理的内存划分为若干个不同的数据区域,这些区域都有各自的用途。其中有些区域随着虚拟机进程的启动而存在,而有些区域则依赖用户线程的启动和结束而建立和销毁。在《Java虚拟机规范(Java SE 8)》中描述了JVM运行时内存区域结构如下: 各个区域的功能不是本文重点,就不在这里详细介绍了。这里简

java内存模型中volatile关键字的作用_rhyme-编程思维

JAVA内存模型,为啥线程要有自己的本地内存,CPU高速缓存 volatile作用总结:  1. 强制线程从公共内存中取得变量的值,而不是从线程的私有的本地内存(如CPU高速缓存)中,volatile修饰的变量不具有原子性(修改一个变量的值不能同步)。  2. 保证volatile修饰的变量在被一个线程修改后,会被强制立即刷新到主存(可见性),其他线程如果有该变量的缓存行,会被设置为无效。  3

java内存模型,为啥线程要有自己的本地内存,cpu高速缓存_rhyme-编程思维

首先Java内存模型不是“JVM 的内存模型”;   Java线程之间的通信采用的是共享内存模型,这里提到的共享内存模型指的就是Java内存模型(简称JMM),JMM决定一个线程对共享变量的写入何时对另一个线程可见。 从抽象的角度来看,JMM定义了线程和主内存之间的抽象关系:线程之间的共享变量存储在主内存(main memory)中,线程被CPU执行,每个线程都有一个私有的本地内存(如CPU的高

分布式系统高可用原则_rhyme-编程思维

下面的blade命令时阿里开源的ChaosBlade   分布式系统高可用原则 高可用的分布式系统一般需要满足以下原则: 失败重试 实例隔离 请求限流 服务降级 服务熔断 流量调度 开关&预案 监控告警 日志跟踪 混沌实验场景实践 我们以 A 调用 B,B 调用 C,A 同时也调用 D 举例,A1、A2 是 A 服务的多个实例,依次类推。 失败重试 实验场景:调用下游服务实例异常。容

springboot rabbitmq 死信队列应用场景和完整demo_rhyme-编程思维

何为死信队列? SpringBoot配置文件 初始化和绑定重定向队列配置类 生产者向业务队列发送消息 死信队列消费者 重定向队列 测试 何为死信队列? 死信队列实际上就是,当我们的业务队列处理失败(比如抛异常并且达到了retry的上限),就会将消息重新投递到另一个Exchange(Dead Letter Exchanges),该Exchange再根据routingKey重定向到另一个队列,在

deferredresult使用方式和场景_rhyme-编程思维

为什么使用DeferredResult? 场景 Demo代码 测试 1. 超时 2. 进行setResult 为什么使用DeferredResult? API接口需要在指定时间内将异步操作的结果同步返回给前端时; Controller处理耗时任务,并且需要耗时任务的返回结果时; 当一个请求到达API接口,如果该API接口的return返回值是DeferredResult,在没有超时或者D

mongodb导出与导入远程linux服务器上的数据_rhyme-编程思维

场景 简单方案 工具 导出数据 导入数据 总结 场景 将远程服务器A上的MongoDB数据库test下的集合people导入到服务器B数据库test的集合people_test下。   简单方案 先将A服务器数据导出,然后再执行导入到B服务器。 下面的导入和导出操作,均是在git bash下执行,如果是在windows命令行下需要稍微更改路径。   工具 利用本地原生MongoDB安装目录下

rabbitmq消费者抛异常日志持续打印的问题_rhyme-编程思维

场景 消费者接受消息,进行一系列处理,但是由于某些原因处理过程中该消费者的抛出了异常,并且不捕获(直接 throws IOException 抛出去); 由于抛出了IOException,那么这条消息就会再次被发送到该队列,消费者就再次收到,而消费者抛出异常,该消息又会入队……所以就形成了一个死循环(除非不再有类似IO的异常),那么控制台日志就一直打印该消费者的抛出异常。 所以,如果不需要消费者

java8内置的函数式接口_rhyme-编程思维

JDK 1.8 API 包含了很多内置的函数式接口。其中就包括我们在老版本中经常见到的 Comparator 和 Runnable,Java 8 为他们都添加了 @FunctionalInterface 注解,以用来支持 Lambda 表达式。 值得一提的是,除了 Comparator 和 Runnable 外,还有一些新的函数式接口,它们很多都借鉴于知名的 Google Guava 库。 对于

java8内置的函数式编程接口应用场景和方式_rhyme-编程思维

首先,我们先定义一个函数式编程接口 @FunctionalInterface public interface BooleanFunctionalInterface<T> { boolean test(T t); } 很简单,该接口的唯一一个抽象方法(并且非Object类的方法)返回值为boolean 下面,定义一个方法,接受一个List,利用实现了该接口的test方法的

mybatis如何防止sql注入_rhyme-编程思维

来源:https://www.cnblogs.com/200911/p/5869097.html   SQL注入,大家都不陌生,是一种常见的攻击方式。攻击者在界面的表单信息或URL上输入一些奇怪的SQL片段(例如“or ‘1’=’1’”这样的语句),有可能入侵参数检验不足的应用程序。 所以,在我们的应用中需要做一些工作,来防备这样的攻击方式。在一些安全性要求很高的应用中(比如银行软件),经常使用