开场白开发人员每天进行开发设计,多需要启动项目,难免会遇到一些项目起不来的情况,这个时候需要进行日志分析,尽量自己解决,实在解决不了,就得虚心请教同事,尤其是比较急的事情,不是很急的事情,还是最好自己进行分析解决。问题描述在项目启动的时候,报NoSuchBeanDefinitionException,截图如下:原因原因是项目在引用其他项目的client,当前项目的容器,没有把当前的client的b
开场白当项目拆分成多个微服务时,这个时候多个服务就需要进行管理,服务提供者把服务注册上去,其他消费者就可以进行调用了,当有新的服务注册上来,客户端会定时拉去服务列表跟本地存在的服务列表对比,进行服务列表的更新,当有服务下线,也会更新列表,服务提供者和消费者是动作的主要发起者,eureka注册中心是处理请求的接收者,可以先从eureka客户端作为入口研究,看看主动发起者是怎样和注册中心完成通信的。源
问题描述当两个环境共享一个私服时,一个环境的先发布,拉去最新代码;另外一个环境没有发布,没有发布的环境,代码里面没有包含传过来的属性,就会报错。问题跟踪跟踪1上面这个代码,就是一个环境发布拉去最新的代码,另外一个环境没有发布,导致没有相关属性。跟踪2把上面objMap的注释去掉,这种情况会执行成功,因为设置了属性不存在,不报异常的情况。源码分析1、根据英文说明,默认是true,只要属性不存在就会抛
开场白现在很多公司高并发的系统,以前的单体架构遇到了瓶颈,就需要一种架构来解决这种痛点,单体架构及系统流量很大的时候,并发量提不上来,很容易系统阻塞导致运转不起来,这个时候微服务就是为了解决这种痛点而生的,微服务,及把单体服务分成多个微服务,采用了分治思想,拆分的微服务也是要有度才行,不能分得太细。架构选型选型一对于并发非常大的可以采用,nginx集群加网关集群1、nginx可以做路由转发,同时可
模式描述封装请求为一个命令对象,调用者传递命令,接收者执行命令,对命令进行抽象,实现请求者与实现者进行解耦。为什么研究使用命令模式,可以很好的进行系统解耦,使系统易于维护。类图说明1、Invoker:命令调用者,用来给接收者传达命令2、Receiver:命令接受者,用来执行命令操作3、Command:抽象命令,对一组命令进行抽象4、ConcreteCommand:具体的命令实现1、命令类:publ
问题描述当项目起不来的时候,一般会报创建bean失败或者是没有类发现,会导致项目初始化失败,这个时候就要根据日志来进行分析,解决问题。问题跟踪跟踪1:启动项目,报以下异常,hibernate的校验类没有发现,导致项目初始化异常跟踪2根据校验类,搜索相关依赖版本,校验有两个版本号,一个是6.0.17和5.3.6,类加载的时候,不知道加载哪一个版本的类跟踪3把相关依赖包里面的相关校验依赖排除掉,只留下
模式描述当系统中需要对同一对象进行多次调用时,为了减少对象创建的数量,减少内存占用和提高性能。为什么研究通过研究享元模式,可以提高一个系统的内存占用和性能,比如创建线程,如果每次实现线程就进行创建一个,这样的话,会频繁的进行线程销毁创建导致性能下降,则可以通过共享对象,在需要的时候从共享内存里面取出需要的对象即可;java中的字符串常量池;Integer中的缓存;mybatis中的Configur
开场白生活是美好的,咱们无论什么时候得充满信心,对未来充满希望,并以平衡为美对于咱们的技术架构也是一样,也是一样,要做到技术对业务的平衡,并不能因为某项技术好就使用它,要从业务、公司发展及他因素寻找平衡点。异中求同,折中冲突,乃万事万物生存之道。-赫拉克利特问题描述有时候有这样的需求,客户端通过feign的client进行调用服务的接口,进行跑数据,但是这个跑数据是批量跑,需要耗费很长的时间进行返
问题描述有些需求,需要把上一步批量操作返回的主键作为下个表的关联使用,这个时候用mybatis批量操作,mybatis批量操作有些版本不能返回主键,只能一个一个的插入,这样就降低了效率。问题跟踪跟踪1mybatis的主线版本,能够正确返回主键id,主线版本修复了这个问题,并且@Param可以自定义命名跟踪2mybais的3.3.x-3.4.x源码里面判断参数的属性,并设值在这些版本是修复了这个问题
概述spring流行了很长时间了,是一个用java编写的轻量级框架,受到了很多公司及程序员的欢迎,Bean生命周期是一个像对象实例化开始到销毁的全过程,了解生命周期是很有必要的。重要性spring的生命周期是比较复杂的,只有了解其过程及原理才能更好的扩展程序。源码分析生命周期过程bean的实例化;}B同学了写了一个方法methodB{methodC();}C同学了写了一个方法methodC{do
概述最左原则就是建一个联合索引,比如(a,b,c),然后根据条件查询,条件的组合必须是包含a,否则联合索引不会用到,比如可能的组合是:(a,b,c),(a,b),(a,c),(a).重要性最左原则能引导程序员们使用联合索引的时候,不是盲目的使用,如果不知道这个原则的话,就会在写sql的时候虽然建了索引,并且条件查询也用了,查询的时候还是慢,结果用explain一看,索引没有用到,扫描是全表扫描。#
概述redis是一个完全开源的,高性能的key-value数据库,特点是:支持原子性、持久化、丰富的数据类型。场景1、在系统设计的时候,为了提高相应速度,使用各种数据类型来缓存数据2、在做验证码的时候,redis有个过期时间,刚好符合验证码的倒计时需求3、在做分布式锁的时候,redis的setnx,加上过期时间,刚好符合需求4、在做防止接口重复提交的时候,过期时间刚好符合5、在做session保存
概述在设计系统架构的时候,我们要用其道,利用其原则,不断的寻求技术平衡点,已达到架构足够的灵活。设计模式和设计原则是项目中能够使程序设计得有复用性,扩展性,安全性。场景当我们重构一个系统的时候,之前的代码如果非常糟糕那让人理解起来也费劲,不易扩展,不易重构,比如项目中用了大量的if,else;或者是一些方法特别长,用了大量的new关键字,这个时候得想起用设计模式进行改造了,一个接口集成了好几个模块
SOA、Restful、Microservice、ServiceMesh、Serverless,这些服务模式和设计思想,体现了技术在不断的进步,思想也不是不断的进步,由原来的soa到serverless,技术先驱们,一直在追求系统架构的灵活性及智能化。soa面向服务的架构,是一种设计规范,就是公司a要调用公司b的服务,这个时候就产生了一种设计规范,把公司a的服务封装起来,通过协议和b公司的服务进行
亿级流量架构,是每个公司追求的目标,但是要做到这个目标不是很容易的事,下面例举些实现亿级流量的一些方案。首先系统先保证高可用,保证服务能稳定、可靠,只有这样,用户才会体验好,买单的人才会不断的增加,在这个基础上,把业务做大做好了,咱们考虑营销方案,比如秒杀,平常的普通促销,营销发券,这个时候就要考虑高并发了,同时我们在业务设计的时候也要遵循业务设计原则。系统设计高可用的时候,需要考虑到限流,限流就
概述秒杀系统的特征就是瞬间流量大、商品总是有限先到先得、有明确的开始和结束时间。方案秒杀的时候,先是要在后台设置秒杀库存,秒杀价格,秒杀开始时间和时间,需要参与秒杀的店铺,到了时间就开始进行秒杀,秒杀的时候,会有突发流量,系统如果设置不好,就会瘫痪,一般会进行限流,比如接入端限流,服务端限流,利用缓存、消息队列提高处理速度;其中一个最难处理的问题就是库存的扣减,防止超卖,防止超卖的方法有很多种,对
概述平常在请求服务的时候,负载均衡一般会用到随机访问,但是随机访问的缺点是负载不均衡,有的服务请求的次数多,有的少;轮询,请求分配均衡,但是如果性能好的机器,想多分配些不行,导致资源白白浪费;权重轮询,权重静态配置,不灵活。hash取模策略,如果某台机器宕机,就会导致返回服务失败。分库分表的时候采取hash取模,如果是增加机器或者是减少机器,数据迁移就会全局迁移,因为机器数据增加或者减少,导致取模
zk用的算法是zab协议,里面写到必须可用节点数过半才能选举出一个leader
在工作中,我们可能会碰到各种各样的问题,如何优雅地处理这些事情,非常考验一个人的能力。
在部署zookeeper的时候,大家有没有想过官方为什么建议部署奇数个节点
用了io这么久,有没有真正的理解了,比如BIO、NIO、AIO是什么,能够在什么场景用到?
vhost是什么,能给项目配置带来什么好处?1、vhost是一个微型的消息队列服务器,它拥有自己的队里、绑定、交换器、权限控制,一个项目在不同的环境可以使用不同的vhost,比如开发环境用的是order.dev,测试环境用的是order.test,通过配置文件读取不同的配置。2、vhost通过在各个实列间提供逻辑上的分离,比如订单服务和营销服务,可以使用不同的虚拟主机,进行各自的队列配置,保证了不
CAP原则又称CAP定理,指的是在一个分布式系统中,一致性(Consistency)、可用性(Availability)、分区容错性(Partition tolerance)。CAP 原则指的是,这三个要素最多只能同时实现两点,不可能三者兼顾。
对于大部分程序员,心中总有个目标要成为架构师,但是学了这么多技术,总是成不了一个掌握全局的架构师,无法做出最优的架构,这是为什么呢?平常我们不论是工作,还是参加培训,所学到的多是些方法技巧或者工具的使用,而架构师具备的能力:理解业务,全局把控,选择合适技术,解决关键问题,指导研发落地实施。可见成为一名合格的架构师,不仅仅只是具备技术能力就可以完全胜任的,还需要领悟架构之道,架构之法并合理的应用。架
架构整洁之道 软件设计原则 软件解决的问题
SpringBoot2.0性能优化(一)
-XX:+PrintGC每次触发GC的时候打印相关日志-XX:+UseSerialGC串行回收-XX:+PrintGCDetails更详细的GC日志-Xms堆初始值-Xmx堆最大可用值-Xmn新生代堆最大可用值-XX:SurvivorRatio用来设置新生代中eden空间和from/to空间的比例.-XX:NewRatio配置新生代与老年代占比1:2含以-XX:SurvivorRatio=eden
liunx常用命令
Copyright © 2005-2023 51CTO.COM 版权所有 京ICP证060544号