![](https://img-blog.csdnimg.cn/728ddf434f334729bb8da315b1b8600b.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
Java
文章平均质量分 88
java 学习笔记
SK_Jaco
这个作者很懒,什么都没留下…
展开
-
【深入设计模式】工厂模式—抽象工厂及工厂模式在源码中的应用
前面介绍了简单工厂模式和工厂方法模式,相信你对工厂模式有了一定理解。接下来将继续深入工厂模式,主要介绍工厂方法模式的改进——抽象工厂模式,以及工厂模式在框架源码中的应用,希望在看完这两篇介绍之后能够对彻底搞懂工厂模式,并理解其在实际开发中的意义。原创 2022-05-30 22:27:01 · 735 阅读 · 0 评论 -
【深入设计模式】工厂模式—简单工厂和工厂方法
设计模式(Design pattern)是软件工程的基础,最近在对公司项目代码进行迭代升级之后,决定把设计模式相关的知识点拉出来再重新整理一遍进行分享。学习设计模式,不仅是为了面试,更是为了在工作中能够写出易于维护、扩展性好的代码,否则不考虑设计的功能代码也是在给后人挖坑(已经深受其害)。首先分享的是工厂模式,将这部分分为两部分,第一部分是是简单工厂模式和工厂方法模式的介绍及演进,主要介绍这两种模式结构,以及如何从简单工厂衍生出工厂方法模式。第二部分是抽象工厂模式和工厂模式在源码应用(下一篇博客进行分..原创 2022-05-24 15:45:59 · 1012 阅读 · 0 评论 -
记一次生产事故排查——CPU高负载原因排查分析
文章目录1. 背景描述2. 排查过程2.1 定位负载过高的进程2.2 进程内运行分析获取进程中各线程的 CPU 使用情况线程号处理最近线上一个在线服务发现请求特别慢,接口经常出现超时问题,需要排查定位接口慢的原因。通过对现场和代码进行模拟(毕竟公司代码不太好放上来)总结一下此次排查给经验,尽可能为大家排查线上问题提供一些帮助。1. 背景描述大半夜运维打电话反馈请求到服务端接口非常缓慢,并且出现超时、报500现象,严重影响客户使用,需要排查问题原因。首先看到这样的问题直接去排查 CPU 和内存的情原创 2022-05-17 23:50:10 · 1145 阅读 · 4 评论 -
解决项目版本冲突——maven-shade插件使用
文章目录背景maven-shade-plugin介绍解决问题1.环境准备2.解决方案3.引入依赖一些需要注意的坑maven-shade-plugins的其他使用背景当我们在maven项目中引入第三方组件时,三方组件中的依赖可能会与项目已有组件发生冲突。比如三方组件中依赖httpclient的版本是4.5.x,而项目中已有的httpclient版本是3.1.x,那么此时就会产生一下两种情况:如果用三方组件的高版本httpclient覆盖原有的低版本httpclient,有可能会导致原来项目启动运行失原创 2020-12-22 21:24:17 · 5863 阅读 · 3 评论 -
使用ES完成“离我最近”相关功能
文章目录前言准备工作1.构建索引2.插入数据完成需求1.根据经纬度进行距离排序并获取距离2.获取距离并筛选距离总结前言最近项目中有个需求是完成离我最近的功能,经过讨论决定使用ElasticSearch根据用户所在位置经纬度来完成相关需求,这里使用一个小的Demo来做记录。准备工作1.构建索引创建索引location_test,索引只包含两个字段,一个景点名字另一个是景点经纬度,保存经纬度使用geo_point类型存储。PUT http://localhost:9200/location_test原创 2020-09-20 23:37:48 · 2107 阅读 · 1 评论 -
面试官一步步逼问让我对ThreadLocal有了更深入的思考
文章目录前言内存泄漏什么是内存泄漏?内存泄露的本质ThreadLocalThreaLocal介绍ThreaLocal原理ThreadLocalMap原理ThreaLocalMap介绍ThreaLocalMap设置值ThreadLocal内存泄漏总结前言前几天面试面试官问到和ThreadLocal相关的一些问题,回来以后对相关问题进行了详细的思考并认真阅读了一下ThreadLocal源码,以前觉得ThreadLocal只是一个用来做线程变量隔离的类,看完源码发现这个类挺有意思的,里面涉及的原理还是比较复杂原创 2020-09-04 22:26:06 · 785 阅读 · 2 评论 -
面试:什么是缓存雪崩、缓存击穿、缓存穿透?
文章目录缓存雪崩1.什么是缓存雪崩2.解决方案缓存击穿1.什么是缓存击穿2.解决方案3.缓存雪崩和缓存击穿的区别缓存穿透1.什么是缓存穿透2.解决方案3.布隆过滤器4.缓存击穿和缓存穿透的区别总结缓存雪崩1.什么是缓存雪崩为了使查询速度更快,我们选择使用缓存来保存数据,使原本每次请求都需要查询数据库的操作变成先查询缓存,缓存有直接返回,缓存没有则查询数据库然后再写入缓存中,通常缓存都是有有效时长的,否则就会一直占用内存空间。当大量请求在访问都会先从缓存查询,如果此时大部分缓存同时过期失效,那么这些原创 2020-08-16 21:59:38 · 2240 阅读 · 0 评论 -
Canal和Kafka整合方案——解决Canal写入Kafka并发消费问题
文章目录一、问题描述二、引入Kafka1.Canal整合Kafka及项目初步搭建2.整合Kafka后引出新问题三、最终方案1.修改Canal配置文件2.修改项目代码3.整体架构4.结果验证四、总结思考五、参考一、问题描述在使用Canal读取binlog来对数据库增量进行同步时遇到一下几个问题首先是在使用Canal自带客户端进行同步时需要自己手动调用get()或者getWithoutAck()进行拉取拉取日志后进行同步只能一条一条处理,效率比较低如果处理日志过慢或者其他原因容易导致日志堆积在服务器原创 2020-08-11 21:36:34 · 9200 阅读 · 1 评论 -
MySQL数据增量同步——Canal搭建部署
文章目录简介canal部署MySql设置canalcanal多数据源监听canal-admin搭建canal整合kafka坑版本canal.deployer-1.1.4简介canal是阿里巴巴开源的一款用于MySQL数据库增量日志解析组件,提供增量数据订阅和消费功能。canal读音[kəˈnæl]canal 工作原理canal 模拟 MySQL slave 的交互协议,伪装自己为 MySQL slave ,向 MySQL master 发送dump 协议MySQL master 收到原创 2020-07-24 20:16:00 · 4909 阅读 · 11 评论 -
Spring源码分析——解决循环依赖
Spring源码分析——解决循环依赖文章目录Spring源码分析——解决循环依赖一、循环依赖二、循环依赖解决1.三级缓存2.循环依赖解决过程(1)缓存添加过程(2)获取缓存过程3.三级缓存解决循环依赖流程三、总结一、循环依赖什么是循环依赖?存在类A实例Bean、类B实例Bean、类C实例Bean,在类A中引用了类B,类B中引用了类C,同时类C中引用了类A,此时使用Spring初始化类A、B、C便会存在循环引用的情况。当实例化A时发现其引用了B实例;于时对B进行实例化,实例化B时又对C实例进行引用;于原创 2020-06-25 22:55:12 · 956 阅读 · 0 评论 -
Spring源码分析——获取Bean
Spring源码分析——获取Bean文章目录Spring源码分析——获取Bean一.源码分析1.getBean()2.doGetBean()获取单例Bean判断获取单例对象是否为空(1)如果获取的sharedInstance不为null(2)如果获取的sharedInstance为null二.整体流程三.相关博客一.源码分析1.getBean()在解析完配置获取应用上下文ApplicationContext之后便可以获取Bean对象,调用AbstractApplicationContext类中的ge原创 2020-06-19 23:14:41 · 671 阅读 · 1 评论 -
Spring源码分析——Bean创建
文章目录Spring源码分析——Bean创建一.示例代码二.步骤解析1.ClassPathXmlApplicationContext2.refresh()3.Bean加载obtainFreshBeanFactory()loadBeanDefinitions()4.单例Bean实例化finishBeanFactoryInitializationpreInstantiateSingletons()doGetBean()getSingleton()Spring源码分析——Bean创建一.示例代码spring原创 2020-06-09 21:29:20 · 988 阅读 · 0 评论 -
MyBatis源码分析——使用注解执行SQL
文章目录MyBatis源码分析使用注解方式执行SQL相关参考MyBatis源码分析使用注解方式执行SQL使用注解执行SQL只需在自定义Mapper接口上添加注解如@Select、@Insert、@Update、@Delete等,示例如下:public interface UserMapper { @Select("select * from user where id = #{id}"...原创 2020-02-15 19:37:29 · 1568 阅读 · 0 评论 -
MyBatis源码分析——调用Mapper接口方法执行SQL
文章目录MyBatis源码分析调用Mapper接口方法执行SQL整体操作流程相关参考MyBatis源码分析调用Mapper接口方法执行SQL在第二组测试代码中,通过SqlSession.getMapper()方法获取自定义Mapper接口,并通过执行Mapper接口的方法完成sql查询,由于Mapper是接口,并没有实现类,那么它是如何完成方法执行呢?并切在与spring整合的时候又是为何M...原创 2020-02-14 11:19:51 · 2613 阅读 · 0 评论 -
MyBatis源码分析——使用SqlSession操作数据库
文章目录MyBatis源码分析使用SqlSession操作数据库SqlSession自带方法整体操作流程相关参考MyBatis源码分析使用SqlSession操作数据库MyBatis执行数据库操作主要分为三种:使用SqlSession自带方法、调用Mapper接口方法执行SQL、使用注解执行SQLSqlSession自带方法在示例代码中使用了SqlSession.selectOne()方...原创 2020-02-11 09:27:05 · 3018 阅读 · 0 评论 -
MyBatis源码分析——MyBatis核心组件和开启SqlSession
文章目录MyBatis源码分析MyBatis核心组件MyBatis示例代码开启SqlSessionSqlSessionFactoryBuilder.build()方法SqlSessionFactory.openSession()方法开启SqlSession方法调用链MyBatis源码分析MyBatis核心组件MyBatis有几个非常重要的接口和类:Configuration、SqlSessi...原创 2020-02-09 19:12:52 · 808 阅读 · 0 评论 -
MyBatis多数据源配置
文章目录MyBatis多数据源配置引入依赖添加配置使用使用db1数据源使用db2数据源分别调用service层方法得到结果使用过程中遇到的问题问题1问题2MyBatis多数据源配置最近项目需求要将原来的项目迁移整合在一个项目中启动,因此需要对配置多数据源进行考察,通过查阅资料发现苞米豆有dynamic-datasource这个项目可以实现,因此尝试自己搭建一下实现功能引入依赖dynamic...原创 2019-12-07 16:32:03 · 2539 阅读 · 1 评论 -
日志归集系统搭建(2)——配置fluentd并完成功能需求
文章目录完成需求及修改配置需求1 日志存放路径应用+日期划分需求2 存放日志文件按文件大小进行切分需求3 按照日志等级划分日志需求4 将目录通过nginx映射出去需求5 生成一个定大小的日志文件,并能够即时查看日志遇到的问题问题描述解决方案完成需求及修改配置在上一节中完成了在日志服务器上单间fluentd,该日志收集服务器有五个需求,通过修改fluentd等配置文件来完成相关的需求。需求1...原创 2019-10-26 12:02:39 · 2200 阅读 · 0 评论 -
日志归集系统搭建(1)——需求背景及环境搭建
文章目录需求背景安装各个组件安装ruby获取fluentd源码修改gem源安装Bundle构建fluentd运行fluentd安装过程遇到的问题1.安装bundler没有zlib包2. 没有openssl需求背景公司需要搭建一个日志收集服务器,用于将公司的项目日志汇总到一台服务器上面,方便查看和减轻各项目服务器压力。但是由于目前资源不够充足,所以放弃使用ELK、EFK。最后在调研尝试过Linu...原创 2019-10-21 20:17:51 · 874 阅读 · 0 评论 -
Kafka——SpringBoot整合Kafka
maven配置<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> ...原创 2019-09-10 20:55:13 · 1275 阅读 · 0 评论 -
MyBatis开发方式
MyBatis开发方式有两种:原生Dao开发和Mapper代理方式,接下来将分别举例介绍这两种开发方式。原生Dao开发方式在编写的时候需要编写Dao接口及其实现类;而Mapper代理方式只需写Dao接口,由MyBatis自动生成Dao实现的代理对象1.原生Dao开发方式目录结构:其中SqlMapConfig.xml为mybatis的核心配置文件,User.xml为映射文件,po...原创 2018-03-01 23:48:07 · 597 阅读 · 0 评论 -
String、StringBuffer、StringBuilder类比较
1.String是不可变类,StringBuilder、StringBuffer是可变类在这里的可变指的是引用所指的值,即String s = "abc";执行上述语句后,s引用所指向的值“abc”不再变化。如果改变s,如:s+"d",则会在常量池重新开辟一块区域存放“abcd”,并且s将指向这块区域。,而StringBuilder和StringBuffer直接调用append()等方...原创 2018-09-27 23:36:21 · 410 阅读 · 0 评论 -
Java接口与抽象类的区别
笔试面试都爱问的一个问题,接口与抽象类的相同点、不同点以及之间的继承。1.接口与抽象类的一些特性接口:(1)接口中所有方法为抽象方法;(2)接口所有成员变量为static final类型;(3)接口所有成员、方法为public。抽象类:(1)只要包含一个抽象方法的类即为抽象类;(2)抽象方法不能有方法体;(3)抽象类不能实例化;(4)子类继承抽象类时必须为抽...原创 2018-10-13 20:31:09 · 349 阅读 · 0 评论 -
Redis入门
1.Redis简介简介Redis 是完全开源免费的,基于C语言开发,遵守BSD协议,是一个高性能的key-value非关系型数据库(NoSql)。参考:https://www.runoob.com/redis/redis-tutorial.htmlRedis 与其他 key - value 缓存产品有以下三个特点:Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可...原创 2019-06-02 16:31:51 · 427 阅读 · 0 评论 -
HashMap原理分析
HashMap1.HashMap简介HashMap实现Map接口,以键值对的形式存储数据,HashMap<Integer,String> hashmap = new HashMap<>();hashmap.put(1,"zhangsan");hashmap.put(2,"lisi");hashmap.put(3,"wangwu");hashmap.put(4,...原创 2019-06-14 22:04:23 · 872 阅读 · 0 评论 -
RabbitMQ——RabbitMQ搭建及问题
单点准备版本确定官方给出的RabbitMQ和Erlang对应版本RabbitMQ版本Erlang最低版本Erlang最高版本3.7.1520.3.x22.0.x3.7.14、3.7.13、3.7.12、3.7.113.7.10、3.7.9、3.7.8、3.7.720.3.x21.3.x3.7.6、3.7.5、3.7.4、3.7.33.7.2、3.7...原创 2019-07-10 19:33:27 · 2695 阅读 · 3 评论 -
SpringBoot整合RabbitMQ——Direct交换机
文章目录SpringBoot整合RabbitMQ——Direct交换机简介依赖application.yml配置消息生产者(发送端)配置,端口9000消费者(接收端)配置,端口8088消息生产者(发送端)配置SendConfig.javaController层Service层消费者(接收端)验证SpringBoot整合RabbitMQ——Direct交换机简介Direct Exchange是...原创 2019-07-17 21:50:18 · 1084 阅读 · 1 评论 -
SpringBoot整合RabbitMQ——Fanout交换机
文章目录SpringBoot整合RabbitMQ——Fanout交换机简介依赖application.yml配置消息生产者(发送端)配置,端口9001消费者1(接收端)配置,端口8001消费者2(接收端)配置,端口8002消息生产者(发送端)SendConfig.java配置信息Controller层Service层消费者(接收端)消费者1消费者2验证SpringBoot整合RabbitMQ——...原创 2019-07-17 21:53:53 · 2430 阅读 · 0 评论 -
SpringBoot整合RabbitMQ——Topic 交换机
文章目录SpringBoot整合RabbitMQ——Topic交换机简介依赖application.yml配置消息生产者(发送端)SendConfig.java配置信息Controller层Service层消费者(接收端)测试SpringBoot整合RabbitMQ——Topic交换机简介Topic交换机与Direct相似,通过与交换机绑定队列的路由键进行消息分发。不同的是Topic可以通过......原创 2019-07-17 21:56:59 · 1700 阅读 · 2 评论 -
SpringBoot整合RabbitMQ——Headers交换机
文章目录SpringBoot整合RabbitMQ——Headers交换机简介添加依赖application.yml配置消息生产者(发送端)SendConfig.java配置信息Controller层Service层消费者(接收端)SpringBoot整合RabbitMQ——Headers交换机简介头交换机(headers exchange)使用多个消息属性来代替路由键建立路由规则。通过判断消...原创 2019-07-17 21:58:32 · 2454 阅读 · 6 评论 -
初识RabbitMQ——AMQP 0-9-1
简介AMQP (Advanced Message Queuing Protocol)是一种允许符合要求的客户端应用和消息中间件(messaging middleware broker)进行通信的消息传递协议。消息中间件代理的作用:从发布者接收消息,通过路由规则将消息发送给消费者。AMQP 0-9-1模型首先发布者(publisher)将消息(message)发送给交换机(exchanges...原创 2019-07-10 19:32:09 · 773 阅读 · 0 评论 -
RocketMQ——RocketMQ搭建及问题解决
功能:引用解耦、流量消峰、消息分发、保证最终一致性、方便动态扩容下载下载地址RocketMQ 4.5.1系统要求64位 Linux、unix或mac;JDK版本1.8以上;安装unzipyum install -y unzip使用unzip命令解压unzip rocketmq-all-4.5.1-bin-release.zip单机启动nameserver两种启动方式...原创 2019-07-30 00:06:21 · 2423 阅读 · 0 评论 -
RocketMQ——生产者和消费者
RocketMQ简介RocketMQ共有四个角色,分别是Producer、Consumer、Broker、NameServer,他们分别对应的作用如下:Producer:消息生产者,负责消息的生产发送Consumer:消息消费者,负责消息接收和使用Broker:负责消息的传输和暂存NameServer:负责协调整个消息队列,维护配置信息和状态信息RocketMQ生产者消息生产者...原创 2019-08-07 10:03:29 · 6087 阅读 · 0 评论 -
RocketMQ——NameServer和Broker
RocketMQ——NameServer和Broker文章目录RocketMQ——NameServer和BrokerNameServerNameServer功能为什么不用zookeeper?BrokerBroker消息存储Broker的HANameServerNameServer功能NameServer负责维护Producer和Consumer的配置信息、状态信息,并且协调各个角色的协同...原创 2019-08-16 21:21:50 · 9151 阅读 · 1 评论 -
ZooKeeper——ZooKeeper搭建及问题解决
目标:三台zk集群192.168.108.128 node1192.168.108.129 node2192.168.108.130 node3下载解压下载安装包apache-zookeeper-3.5.5-bin.tar.gz,解压tar -zxvf apache-zookeeper-3.5.5-bin.tar.gz进入文件夹apache-zookeeper-3.5.5-bin,...原创 2019-08-27 17:16:02 · 1803 阅读 · 6 评论 -
Kafka——Kafka搭建及问题解决
简介Kafka是基于发布与订阅的消息系统设计的分布式流处理平台,有scale和java编写开发,官方对其描述为拥有三大功能:Publish and subscribe to streams of records, similar to a message queue or enterprise messaging system.(发布订阅流记录,与消息队列、企业级消息系统相似)Store...原创 2019-08-27 23:12:17 · 723 阅读 · 0 评论 -
Kafka——Kafka相关操作
命令行操作创建Topic->向Topic发送消息->接收Topic消息,所有消息命令都在kafka文件的bin目录下创建Topic和Topic有关的指令都是用bin目录下的kafka-Topics.shbin/kafka-topics.sh --create --bootstrap-server 192.168.108.129:9092 --replication-factor...原创 2019-09-05 21:27:04 · 1455 阅读 · 0 评论 -
MyBatis注意事项
由于项目需求最近开始学习mybatis,才入门有很多没有注意的也犯了很多错,在这里总结一下。1.核心配置文件SqlMapConfig.xml头文件:<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd...原创 2018-02-28 00:02:31 · 567 阅读 · 0 评论