YeHongzhi's Blog 
  • 首页
  • 归档
  • 标签
  • 关于
  •     
讲讲并发编程的悲观锁和乐观锁

讲讲并发编程的悲观锁和乐观锁

思维导图 文章已收录Github精选,欢迎Star:https://github.com/yehongzhi/learningSummary 悲观锁悲观锁是平时开发中经常用到的一种锁,比如ReentrantLock和synchronized等就是这种思想的体现,它总是假设别的线程在拿线程的时候都会修改数据,所以每次拿到数据的时候都会上锁,这样别的线程想拿这个数据就会被阻塞。如图所示: synchronized是悲观锁的一种实现,一般我们都会有这样使用: private static Object monitor = new Object(); public static void main(String[] args) throws Exception { //锁一段代码块 synchronized (monitor){ } } //锁实例方法,锁对象是this,即该类实例本身 public synchronized void doSome(){ } //锁静态方法,锁对象是该类,即XXX.class public synchronized stat
 2020-11-29   java  并发编程 
三千字给大伙讲讲线程池

三千字给大伙讲讲线程池

思维导图 文章已收录Github精选,欢迎Star:https://github.com/yehongzhi/learningSummary 前言在实际开发场景中,我们经常要使用多线程开发应用,比如实现异步操作,或者为了提高程序的效率等等。但是以前我见过有实习生在使用的时候是直接new Runable(),然后start()。没有使用线程池,可能很多初学者对线程池在多线程开发中没有足够的认识,所以我写一篇文章讲讲线程池,希望对大家有所启发。 一、什么是线程池线程池借鉴了”池化”技术的思想,线程池能够对线程的生命周期进行管理,对线程重复利用,并且能够以一种简单的方式将任务的提交与执行相解耦。 举个例子来说,线程就像是某个公司的客服小姐姐,每天都要接很多客户的电话,如果同时有1000个客户打电话进来咨询,按正常的逻辑,那就需要1000个客服小姐姐,但是在现实中往往需要考虑成本问题,招这么多人费用太多了,于是就可以这样优化,可以招100个人成立一个客服中心,如果同时超过100个人则提示让客户等待,等有空闲的客服小姐姐时就去响应客户。实现效益最大化。这就是一个池化技术在现实生活中类似的例子
 2020-11-29   java  并发编程  多线程 
SpringBoot启动流程是怎样的?

SpringBoot启动流程是怎样的?

思维导图 文章已收录Github精选,欢迎Star:https://github.com/yehongzhi/learningSummary 前言SpringBoot一开始最让我印象深刻的就是通过一个启动类就能启动应用。在SpringBoot以前,启动应用虽然也不麻烦,但是还是有点繁琐,要打包成war包,又要配置tomcat,tomcat又有一个server.xml文件去配置。 然而SpringBoot则内置了tomcat,通过启动类启动,配置也集中在一个application.yml中,简直不要太舒服。好奇心驱动,于是我很想搞清楚启动类的启动过程,那么开始吧。 一、启动类首先我们看最常见的启动类写法。 @SpringBootApplication public class SpringmvcApplication { public static void main(String[] args) { SpringApplication.run(SpringmvcApplication.class, args); } } 把启动类分解一下,实际上就是两
 2020-11-15   java  SpringBoot 
手把手教你搭建ELK日志集中分析平台

手把手教你搭建ELK日志集中分析平台

思维导图 文章已收录Github精选,欢迎Star:https://github.com/yehongzhi/learningSummary 概述我们都知道,在生产环境中经常会遇到很多异常,报错信息,需要查看日志信息排查错误。现在的系统大多比较复杂,即使是一个服务背后也是一个集群的机器在运行,如果逐台机器去查看日志显然是很费力的,也不现实。 如果能把日志全部收集到一个平台,然后像百度,谷歌一样通过关键字搜索出相关的日志,岂不快哉。于是就有了集中式日志系统。ELK就是其中一款使用最多的开源产品。 一、什么是ELKELK其实是Elasticsearch,Logstash 和 Kibana三个产品的首字母缩写,这三款都是开源产品。 ElasticSearch(简称ES),是一个实时的分布式搜索和分析引擎,它可以用于全文搜索,结构化搜索以及分析。 Logstash,是一个数据收集引擎,主要用于进行数据收集、解析,并将数据发送给ES。支持的数据源包括本地文件、ElasticSearch、MySQL、Kafka等等。 Kibana,为 Elasticsearch 提供了分析和 Web 可视化界
 2020-11-13   分布式  ELK 
从设计模式的角度剖析Mybatis源码

从设计模式的角度剖析Mybatis源码

思维导图 文章已收录Github精选,欢迎Star:https://github.com/yehongzhi/learningSummary 概述Mybatis是一个比较主流的ORM框架,所以在日常工作中接触得很多。我比较喜欢看优秀框架的源码,因为能写出这种框架的作者肯定有其独特之处。如果能看懂源码的一些巧妙构思,一定是受益匪浅的。 所谓万事开头难,看源码也要找到切入的点。设计模式无疑是源码分析一个很好的切入点,废话不多说,那么我们就开始吧。 工厂模式工厂模式属于创建型模式。工厂模式的作用是把创建对象的逻辑封装起来,提供一个接口给外部创建对象,降低类与类之间的耦合。 在Mybatis中,用到工厂模式主要在DataSourceFactory。这是一个负责创建DataSource数据源的工厂。DataSourceFactory是一个接口,有不同的子类实现,根据不同的配置,生成不同的DataSourceFactory实现类。类图如下: 接着我们看一下DataSourceFactory的源码: public interface DataSourceFactory { void se
 2020-11-13   源码分析  mybatis 
什么是skywalking?看完这篇你就懂了

什么是skywalking?看完这篇你就懂了

思维导图 文章已收录Github精选,欢迎Star:https://github.com/yehongzhi/learningSummary 概述skywalking又是一个优秀的国产开源框架,2015年由个人吴晟(华为开发者)开源 , 2017年加入Apache孵化器。 skywalking是分布式系统的应用程序性能监视工具,专为微服务、云原生架构和基于容器(Docker、K8s、Mesos)架构而设计。SkyWalking 是观察性分析平台和应用性能管理系统。提供分布式追踪、服务网格遥测分析、度量聚合和可视化一体化解决方案(官网介绍)。 一、OpenTracing规范OpenTracing是一种分布式系统链路跟踪的设计原则、规范、标准。 类似JDBC的规范,主要为了提供一套标准的JDBC API。OpenTracing也是一样,是为了统一提供一套链路追踪的标准API,所制定的一种规范。 OpenTracing通过提供平台无关、厂商无关的API,使得开发人员能够方便的添加(或更换)追踪系统的实现。 类似于JDBC的规范由各个数据库厂商实现一样,OpenTracing规范也是有很多
 2020-11-02   分布式  ELK 
三千字Apollo配置中心总结

三千字Apollo配置中心总结

思维导图 文章已收录Github精选,欢迎Star:https://github.com/yehongzhi/learningSummary 一、概述Apollo(阿波罗)是携程框架部门研发的开源配置管理中心,能够集中化管理应用不同环境、不同集群的配置,配置修改后能够实时推送到应用端,并且具备规范的权限、流程治理等特性。 目前Apollo在github有22.6k颗星,在官网登记的使用的公司有451家,算是很流行的配置中心的框架技术。所以接下来跟着我一起学习Apollo配置中心吧。 二、为什么使用配置中心首先,没有配置中心之前传统的配置都是写在配置文件中,比如各种yml、perproties、xml文件。 写在各种文件里最大的问题在于如果需要改配置信息,需要重新部署发布应用才能生效,这是第一个问题。 后面为了做到动态读取配置信息,后面有人改进一下把配置信息存储在数据库的一张表,程序读取表中的配置信息,这种方式很多公司都还在使用,因为简单,而且灵活(修改配置只需要执行个SQL语句,不需要重新部署发布)。但是也不是最完美的,因为缺少了权限控制,没有管理界面进行统一配置,没有历史版本的
 2020-10-21   java  分布式  配置中心 
3千字详细讲解OpenFeign的使用姿势

3千字详细讲解OpenFeign的使用姿势

思维导图 文章已收录Github精选,欢迎Star:https://github.com/yehongzhi/learningSummary 前言目前在SpringCloud技术栈中,调用服务用得最多的就是OpenFeign,所以这篇文章讲一下OpenFeign,希望对大家有所帮助。 一、构建工程使用Nacos作为注册中心,不会搭建Nacos的话,可以参考上一篇注册中心的文章。 首先父工程parent引入依赖。 <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>Finchley.SR1</version>
 2020-10-13   java  OpenFeign  微服务 
3千字带你搞懂XXL-JOB任务调度平台

3千字带你搞懂XXL-JOB任务调度平台

思维导图 文章已收录Github精选,欢迎Star:https://github.com/yehongzhi/learningSummary 一、概述在平时的业务场景中,经常有一些场景需要使用定时任务,比如: 时间驱动的场景:某个时间点发送优惠券,发送短信等等。 批量处理数据:批量统计上个月的账单,统计上个月销售数据等等。 固定频率的场景:每隔5分钟需要执行一次。 所以定时任务在平时开发中并不少见,而且对于现在快速消费的时代,每天都需要发送各种推送,消息都需要依赖定时任务去完成,应用非常广泛。 二、为什么需要任务调度平台在Java中,传统的定时任务实现方案,比如Timer,Quartz等都或多或少存在一些问题: 不支持集群、不支持统计、没有管理平台、没有失败报警、没有监控等等 而且在现在分布式的架构中,有一些场景需要分布式任务调度: 同一个服务多个实例的任务存在互斥时,需要统一的调度。 任务调度需要支持高可用、监控、故障告警。 需要统一管理和追踪各个服务节点任务调度的结果,需要记录保存任务属性信息等。 显然传统的定时任务已经不满足现在的分布式架构,所以需要一个分布式任务
 2020-10-13   java  分布式  任务调度平台 
微服务之注册中心

微服务之注册中心

思维导图 一、前言伴随着Eurka2.0版本已停止维护,开始要考虑使用微服务新一代的开源的注册中心替代Eureka。 目前据我了解,Consul和Nacos是比较流行的两种替代方案。这篇文章就介绍一下这两种注册中心在微服务中的简单使用,希望对读者有所帮助。...
 2020-09-26   java  微服务  注册中心 
12345

搜索

Hexo Fluid
 总访问量 次   总访客数 人