后端开发
文章平均质量分 77
后端开发
陈如水
市场经济条件下,每个人都有一个价,你有哪些本事?你值不值这个价?
人生如茶,经历浮沉,经历苦难浸泡,方能长大.
展开
-
apollo配置中心
apollo原创 2022-08-30 16:06:54 · 13937 阅读 · 0 评论 -
20211117 项目原型的制作与使用
GroupId和ArtifactId1、groupid和artifactId被统称为“坐标”是为了保证项目唯一性而提出的,如果你要把你项目弄到maven本地仓库去,你想要找到你的项目就必须根据这两个id去查找。(项目的唯一性,maven管理项目包时,artifactId一般是项目名或者模块名,groupId点分命名法,artifactId中画线命名法)2、groupId和artifactId是maven管理项目包时用作区分的字段,就像是地图上的坐标。3、artifactId:artifactId原创 2021-11-17 19:19:20 · 897 阅读 · 0 评论 -
20210601 线程池中的异常处理
线程池异常处理1,Runnable接口的run方法的完整签名,没有标识throws语句,所以方法是不会抛出checked异常的。至于RuntimeException这样的unchecked异常,由于新线程由JVM进行调度执行,如果发生了异常,也不会通知到父线程。即:子线程中发生了异常,如果没有任何类来接手处理的话,是会直接退出的,虚拟机直接杀死线程,而不会记录任何日志。所以,如果什么都不做的话,是会出现子线程任务既没执行成功,也没有任何日志提示的“诡异”现象的。java线程中,如果抛出未被捕获的原创 2021-06-03 18:29:23 · 814 阅读 · 0 评论 -
20201030ThreadPoolExecutor线程池
如何模拟高并发场景? public static void main(String[] args) { //模拟高并发场景 ExecutorService service = Executors.newFixedThreadPool(100); //模拟多少的并发 for (int i = 0; i < 2000; i++) { service.submit(new Callable<Object原创 2020-10-30 10:43:13 · 172 阅读 · 0 评论 -
20210531 Synchronized三种用法
Synchronized三种用法类锁,对象锁,普通同步方法,静态同步方法,同步代码块。先来看下利用synchronized实现同步的基础:Java中的每一个对象都可以作为锁,即一个对象一把锁。具体表现为以下3种形式。1,对于普通同步方法,锁是当前实例对象;进入同步代码前要获得当前实例的锁;2,对于静态同步方法,锁是当前类的Class对象;当前类加锁,进去同步代码前要获得当前类对象的锁;3,对于同步方法块,锁是Synchonized括号里配置的对象。这需要指定加锁的对象,进入同步代码前要获原创 2021-05-31 20:38:38 · 720 阅读 · 0 评论 -
20210523 rpc调用和http调用的区别
测试原创 2021-05-23 23:36:49 · 403 阅读 · 0 评论 -
20210522 SL4J+LOG4J2日志框架
测试原创 2021-05-22 22:42:17 · 146 阅读 · 0 评论 -
202007219 Oracle建表语句
在一般性的项目里面,可以参照这个顺序来:一、建表,指定列类型,指定约束,设置主键;二、加表注释,列注释,方便其它开发人员使用;三、加索引,提高表查询速度;四、加自增序列,新增数据时会用到。建表语句模板:-- 建表语句create table ORD_CANCEL( ORD_CANCEL_ID number(11) not null, CANCLE_SERIALNO VARCHAR2(200) not null, CANCLE_TYP.原创 2020-07-19 15:59:10 · 399 阅读 · 0 评论 -
20200714 Dubbo+Zookeeper技术栈
Dubbo+Zookeeper 分布式项目搭建dubbo主要核心组件:1、Remoting:网络通信框架,实现了 sync-over-async 和request-response 消息机制.2、RPC:一个远程过程调用的抽象,支持负载均衡、容灾和集群功能3、Registry:服务目录框架用于服务的注册和服务事件发布和订阅工作原理:Provider 暴露服务方称之为“服务提供者”。Consumer 调用远程服务方称之为“服务消费者”。Registry 服务注册与...原创 2020-07-15 15:01:10 · 376 阅读 · 0 评论 -
20200428 线程安全(上)--彻底搞懂volatile关键字
计算机在处理数据的过程中为什么会出现线程不安全的问题。计算机在执行程序时,每条指令都是在CPU中执行的,而执行指令过程中会涉及到数据的读取和写入。由于程序运行过程中的临时数据是存放在主存(物理内存)当中的,这时就存在一个问题,由于CPU执行速度很快,而从内存读取数据和向内存写入数据的过程跟CPU执行指令的速度比起来要慢的多,因此如果任何时候对数据的操作都要通过和内存的交互来进行,会大大降低指令...原创 2020-04-28 18:31:43 · 186 阅读 · 0 评论 -
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 · 210 阅读 · 0 评论 -
20200427 补偿模式
微服务架构应满足数据最终一致性,实现最终一致性的三种模式:可靠事件模式、补偿模式、TCC模式。事务补偿机制事务补偿即在事务链中的任何一个正向事务操作,都必须存在一个完全符合回滚规则的可逆事务。如果是一个完整的事务链,则必须事务链中的每一个业务服务或操作都有对应的可逆服务。实现真正的预提交和正式提交的分离。需要手工编写大量的代码来处理以保证事务的完整性。考虑实现一个通用的事...原创 2020-04-27 11:46:45 · 610 阅读 · 0 评论 -
20200426 synchronized底层原理
对象锁和类锁1. 对象锁在 Java 中,每个对象都会有一个 monitor 对象,这个对象其实就是 Java 对象的锁,通常会被称为“内置锁”或“对象锁”。类的对象可以有多个,所以每个对象有其独立的对象锁,互不干扰。2. 类锁在 Java 中,针对每个类也有一个锁,可以称为“类锁”,类锁实际上是通过对象锁实现的,即类的 Class 对象锁。每个类只有一个 Class 对象,所以每...原创 2020-04-26 10:28:59 · 137 阅读 · 0 评论 -
20200423 值传递和引用传递
int属于基本数据类型,因此在方法中进行传递和引用时,并不会改变该变量的数值而arr属于数组,是引用数据类型,因此在方法引用时,实际传递的是该数组在堆内存中的物理内存地址,在方法中对该数组进行操作,则会影响到该数组内部的数值,会发生改变.在java中,基本数据类型作为参数传递的时候叫做值传递,传的是值本身,值传递:值在该方法中改变属于局部变量改变当出了该方法就没有作用了(方法...原创 2020-04-23 18:28:37 · 287 阅读 · 0 评论 -
20200423 订单幂等处理
订单幂等性1、联合唯一索引,进行去重复;用户id+商品id建立唯一索引。2、通过状态机保证接口幂等;后端可以根据不同的状态去保证幂等性,比如在退款的时候,一定要保证这笔订单是已支付的状态。3、TOKEN机制,针对客户端连续点击或者调用方的超时重试等情况,例如提交订单,此种操作就可以用Token的机制实现防止重复提交。TOKEN机制如何实现?简单的说就是调用方在调用接口的时候先向后端请求...原创 2020-04-23 16:07:39 · 770 阅读 · 0 评论 -
20200423 Java公平锁与非公平锁
通过CAS算法保证操作的可靠性,正确性。不断尝试修改值,最快失败,保证了结果的最终一致性。一、synchronized与Lock的区别1.首先synchronized是java内置关键字,在jvm层面,Lock是个java类;2.synchronized无法判断是否获取锁的状态,Lock可以判断是否获取到锁;3.synchronized会自动释放锁 (a线程执行完同步代码会释...原创 2020-04-23 13:30:01 · 213 阅读 · 0 评论 -
Spring cloud 灰度发布
Spring Cloud灰度发布之Nepxion Discovery架构升级,有单体架构升级为微服务架构。服务的灰度发布,根据访问量逐渐切换用新版本替换老版本,并且能够做到代码零入侵的。Nepxion Discovery是一款对Spring Cloud Discovery服务注册发现、Ribbon负载均衡、Feign和RestTemplate调用的增强中间件,其功能包括灰度发布(包括切...原创 2020-04-22 13:58:29 · 444 阅读 · 0 评论 -
20200422 Eureka Server结点之间如何同步数据
搭建Eureka Server集群,对外暴露集群地址,让客户端进行注册。Eureka Server结点之间如何同步数据?1、相同的服务名称但有不同的实例id,所以拉取的是服务列表。最终通过负载均衡来获取一个服务,这样可以均衡各个服务器上的服务。2、服务提供者向注册中心注册服务,并每隔30秒发送一次心跳,就如同人还活着存在的信号一样,如果Eureka在90秒后还未收到服务提供者发来...原创 2020-04-22 13:03:26 · 2540 阅读 · 0 评论 -
20200420 Hikali连接池
最小空闲连接数量;空闲连接存活最大时间,默认600000(10分钟);连接池最大连接数,默认是10;此属性控制从池返回的连接的默认自动提交行为,默认值:true;连接池名称;此属性控制池中连接的最长生命周期,值0表示无限生命周期,默认1800000即30分钟;数据库连接超时时间,默认30秒,即30000;1、数据库配置;2、连接池的配置;read...原创 2020-04-20 17:42:06 · 2016 阅读 · 0 评论 -
20200420 maven私服配置
Maven私服配置的两种方式以下配置均在settings.xml中配置,私服配置不建议配置在某个项目的 pom.xml文件中。1、镜像方式配置。maven 在默认情况下是从中央仓库下载构建,也就是 id 为 central 的仓库。如果没有特殊需求,一般只需要将私服地址配置为镜像,同时配置其代理所有的仓库就可以实现通过私服下载依赖的功能。(通过私服代理所有的仓库)当按照以上方...原创 2020-04-20 16:57:10 · 246 阅读 · 1 评论 -
20200115 k8s的原理
Docker:开源的容器引擎。Images(Docker镜像)Container(容器)容器是镜像的可运行实例。镜像和容器的关系有点类似于面向对象中,类和对象的关系。Docker Registry是一个集中存储与分发镜像的服务。构建完Docker镜像后,就可在当前宿主机上运行。但如果想要在其他机器上运行这个镜像,就需要手动复制。此时可借助Docker Registry来避免镜像的手动复...原创 2020-04-15 11:39:20 · 216 阅读 · 0 评论 -
20200409 ThreadLocal
ThreadLocal,并发编程ThreadLocal为解决多线程程序的并发问题提供了一种新的思路。当使用ThreadLocal维护变量时,ThreadLocal为每个使用该变量的线程提供独立的变量副本,所以每一个线程都可以独立地改变自己的副本,而不会影响其它线程所对应的副本。在ThreadLocal类中有一个Map,用于存储每一个线程的变量副本,Map中元素的键为线程对象,而值对应线程...原创 2020-04-09 19:14:52 · 282 阅读 · 0 评论 -
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 · 985 阅读 · 0 评论 -
20200119 日志框架
日志体系与SringBoot的日志应用开发的时候,日志记录方法的调用,不应该来直接调用日志的实现类,而是调用日志抽象层里面的方法;日志抽象层----->日志实现层。调用日志抽象层里面的方法。把不同的日志系统的实现进行了具体的抽象化,只提供了统一的日志使用接口。使用时只需要按照其提供的接口方法进行调用即可,由于它只是一个接口,并不是一个具体的可以直接单独使用的日志框架,所以最终...原创 2020-01-19 17:25:43 · 208 阅读 · 0 评论 -
20200114 ASM框架
用了一下BeanUtils.copyPropertie和PropertyUtils.copyProperties()的方法,发现其效率非常低。原理是通过JDK自带的反射机制动态的去get,set从而去转换我们的类。使用ASM框架来动态生成ASM 让我们有能力在运行的过程中动态生成一个新的类并加载和运行它。ASM是一个通用的 Java 字节码操控和分析框架。它可以用于修改已有的类也可...原创 2020-01-14 16:39:48 · 230 阅读 · 0 评论 -
20191220 CAS理论
CAS比较替换CAS是项乐观锁技术,当多个线程尝试使用CAS同时更新同一个变量时,只有其中一个线程能更新变量的值,而其它线程都失败,失败的线程并不会被挂起,而是被告知这次竞争中失败,并可以再次尝试。CAS是一种非阻塞式的同步方式。乐观锁是一种思想。CAS是这种思想的一种实现方式。CAS 操作包含三个操作数 —— 内存位置(V)、预期原值(A)和新值(B)。如果内存位置的值与预期原值相匹...原创 2019-12-20 18:57:32 · 316 阅读 · 0 评论 -
20191206 linux常用命令
可用的memory=free memory+buffers+cached(可用内存的统计)如何查看linux系统的内存和cpu信息? 文件:cpuinfo,meminfo,或者直接top命令。如何查看正在运行的用户进程:进程名称,所占用端口号信息?netstat -ntlupgrep -C 10 1089676533 error-latest.log Linux下grep显...原创 2019-12-06 10:21:56 · 149 阅读 · 0 评论 -
20191205 swagger接口文档api完善
添加请求头,token信息,完善对框架的完善。自己打jar包让别人引用,慢慢进行封装。 @Bean public Docket customDocket(){ ParameterBuilder ticketPar = new ParameterBuilder(); List<Parameter> pars = new ArrayList<P...原创 2019-12-06 09:54:39 · 150 阅读 · 0 评论 -
20191204 支付后端文档
JSAPI支付:公众号接入文档(支付系统对比.pdf 文档)商户已有H5商城网站,用户通过消息或扫描二维码在微信内打开网页时(公众号),可以调用微信支付完成下单购买的流程。立即支付---->确认支付---->支付成功调起微信支付控件,用户开始输入支付密码。密码验证通过,支付成功。商户后台得到支付成功的通知。返回商户页面,显示购买成功。该页面由商户自定义。微信支...原创 2019-12-04 17:01:00 · 474 阅读 · 0 评论 -
20191102 常见异步的手段
//一、使用线程池 ExecutorService executorService= Executors.newFixedThreadPool(5); executorService.submit(new Runnable() { @Override public void run() { ...原创 2019-12-02 18:31:46 · 191 阅读 · 0 评论 -
20191128 数据库拆分方案
任何脱离业务的架构设计都是耍流氓。数据库分布式,其核心内容无非就是数据切分(Sharding),以及切分后对数据的定位、整合工作,解决单一数据库或数据表因数据量过大而导致的性能瓶颈问题。已有的MySQL、ORACLE等成熟数据库系统基础上进行的一系列数据操作调度。后者分布式数据库则是集数据存储、管理以及分布式协调与计算为一体的数据库系统。纵向拆分数据库(逻辑关系),横向拆分数据表...原创 2019-11-28 16:18:54 · 505 阅读 · 0 评论 -
20191128 分布式系统下最终一致性案例
分布式事务:这种解决方案的成本是非常高的,而且实现起来非常复杂,效率也比较低下。对于极端的情况:例如发布,故障的时候都是没有办法保证强一致性的。订单系统,支付系统,仓库系统是三个独立的应用,是独立部署的,系统之间通过远程服务调用。订单的有三个状态:I:初始 P:已支付 W:已出库,订单金额100, 会员帐户余额200如果整个流程比较顺利,正常情况下,订单的状态会变为I->P-&g...原创 2019-11-28 13:58:57 · 365 阅读 · 0 评论 -
20191127 分布式系统下最终一致性解决方案
分布式事务+(幂等、重试、状态机、恢复日志、异步校验)一个操做需要在四个服务上写数据,这四个服务对应不同的db;aMysql,bMysql,cMysql,dMysql;如何保证同时成功,同时失败?A服务在写sql的同时,调用服务B,这两个操做在一个事务里面。B服务也可以这样处理。如果接口不能保证幂等性,数据的唯一性将很难保证。 数据的唯一性。账户表数据重复:接口...原创 2019-11-27 17:53:25 · 723 阅读 · 0 评论 -
20191127 数据库查询优化方案
不能跨库查询是一种理念,每个库所有的数据出口、入口,只能有一个中间件,要统一收口,要不然不能确定数据从哪里落库的,从哪里出去的。-- 不为null这个条件经常忘记select pd.id,ai.id from p_doctor pd inner join account_info aion ai.id=pd.acct_idwhere pd.register_source!=a...原创 2019-11-27 13:40:04 · 158 阅读 · 0 评论 -
20191126 一致性Hash算法的原理
什么是一致性Hash?当mysql单表数据大于500W条记录的时候需要对其进行分库分表;当数据量很大的时候(标准可能不一样,要看Redis服务器容量)我们同样可以对Redis进行类似的操作,就是分库分表。假设,我们有一个社交网站,需要使用Redis存储图片资源,存储的格式为键值对,key值为图片名称,value为该图片所在文件服务器的路径(图片名称,图片url地址),我们需要根据文件名查找...原创 2019-11-26 21:05:59 · 155 阅读 · 0 评论 -
20191126 B+tree数据结构
查询速度更快,查询更稳定。关键字:索引字段的值信息,左闭合区间原则。二叉树数据结构中的二叉树;树是一种一对多的数据结构。树又有很多子集,比如:二叉树、二叉搜索树、2-3树、红黑树等等。树的特征:1.没有父结点的结点叫根(根结点),一个数有且只有一个根;2.每个结点有0个或多个子结点;3.一颗树里也可拥有子树,且子树不能相交;(根结点,子结点,叶子结点,子树...原创 2019-11-26 17:31:44 · 1003 阅读 · 0 评论 -
20191125 事务以及隔离级别二
Spring的配置式事务可以把多个操作数据库的方法配置在一个事务中。起了一个新事务,就是创建了一个新的数据库连接。如果方法中全是查询操作 根本没必要使用事务。只是多了传播行为,只是因为存在方法的调用。根据你的传播行为,是使用同一个会话,还是使用一个新的连接回话。Spring的事务是什么?与数据库的事务是否一样?本质上其实是同一个概念,spring的事务是对数据库的事...原创 2019-11-25 13:38:49 · 87 阅读 · 0 评论 -
20191125 HashMap,LinkedHashMap的有序性
有序集合与无序集合的使用场景(对excel表格的字段进行排序)1、集合是否有序指的是:存取是否有序。map内保存内容的顺序不一定与放进去顺序一致,这叫无序。内容不变,取出来顺序一定不变,这叫有序。2、如果集合中的内容有排序的需求,尽量使用有序集合,比如LinkedHashMap,如果没有排序需求,可以使用HashMap。HashMap,LinkedHashMap,TreeMap的...原创 2019-11-25 11:53:57 · 168 阅读 · 0 评论 -
20191121 查询优化器及慢sql优化
优化器分类传统关系型数据库里面的优化器分为CBO和RBO。RBO— Rule_Based Potimizer 基于规则的优化器:( 内置规则)RBO :RBO所用的判断规则是一组内置的规则,这些规则是硬编码在数据库的编码中的,RBO会根据这些规则去从SQL诸多的路径中来选择一条作为执行计划(比如在RBO里面,有这么一条规则:有索引使用索引。那么所有带有索引的表在任何情况下都会走索引)所...原创 2019-11-21 19:43:35 · 235 阅读 · 0 评论 -
20191121 比较器Comparator
Comparable比较器类,主要用于排序。在字符串中使用过CompareTo方法,这个方法是用于比较字符串顺序的,根据字典顺序进行排序。Java中所有的compareTo方法都源于一个共同的接口,那就是Comparable。这个接口只有一个方法,那就是CompareTo。所有想要具有比较功能的类,都建议实现这个接口,而非是自己定义这个功能。 /** * Has...原创 2019-11-21 18:50:46 · 216 阅读 · 0 评论