- 博客(217)
- 收藏
- 关注
原创 【深入设计模式】单例模式—你确定你会写单例?饿汉式和懒汉式(DCL)演进
在项目开发中,获取一个对象我们通常是通过 new 在内存中进行创建,然后在对其进行引用,当项目逐渐庞大起来后,创建的对象越多对内存资源的占用也将越大,并且很多对象并不需要每次都创建,比如数据库连接池,因此诞生了单例设计模式。单例设计模式是指一个类只有一个实例对象,当我们获取该类对象时始终是同一个。单例模式不仅节省了内存资源,还保证了对象内的数据一致性。在使用单例模式时,我们需要注意单例模式的几个特点:根据上一节中描述的单例模式的四个特点,我们可以画出单例模式的结构图同时,我们也能够根据特点和结构图写出伪代码
2022-06-08 22:52:09 452
原创 【深入设计模式】工厂模式—抽象工厂及工厂模式在源码中的应用
前面介绍了简单工厂模式和工厂方法模式,相信你对工厂模式有了一定理解。接下来将继续深入工厂模式,主要介绍工厂方法模式的改进——抽象工厂模式,以及工厂模式在框架源码中的应用,希望在看完这两篇介绍之后能够对彻底搞懂工厂模式,并理解其在实际开发中的意义。
2022-05-30 22:27:01 901
原创 【深入设计模式】工厂模式—简单工厂和工厂方法
设计模式(Design pattern)是软件工程的基础,最近在对公司项目代码进行迭代升级之后,决定把设计模式相关的知识点拉出来再重新整理一遍进行分享。学习设计模式,不仅是为了面试,更是为了在工作中能够写出易于维护、扩展性好的代码,否则不考虑设计的功能代码也是在给后人挖坑(已经深受其害)。首先分享的是工厂模式,将这部分分为两部分,第一部分是是简单工厂模式和工厂方法模式的介绍及演进,主要介绍这两种模式结构,以及如何从简单工厂衍生出工厂方法模式。第二部分是抽象工厂模式和工厂模式在源码应用(下一篇博客进行分..
2022-05-24 15:45:59 1294
原创 记一次生产事故排查——CPU高负载原因排查分析
文章目录1. 背景描述2. 排查过程2.1 定位负载过高的进程2.2 进程内运行分析获取进程中各线程的 CPU 使用情况线程号处理最近线上一个在线服务发现请求特别慢,接口经常出现超时问题,需要排查定位接口慢的原因。通过对现场和代码进行模拟(毕竟公司代码不太好放上来)总结一下此次排查给经验,尽可能为大家排查线上问题提供一些帮助。1. 背景描述大半夜运维打电话反馈请求到服务端接口非常缓慢,并且出现超时、报500现象,严重影响客户使用,需要排查问题原因。首先看到这样的问题直接去排查 CPU 和内存的情
2022-05-17 23:50:10 1369 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 6271 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 2285 1
原创 面试官一步步逼问让我对ThreadLocal有了更深入的思考
文章目录前言内存泄漏什么是内存泄漏?内存泄露的本质ThreadLocalThreaLocal介绍ThreaLocal原理ThreadLocalMap原理ThreaLocalMap介绍ThreaLocalMap设置值ThreadLocal内存泄漏总结前言前几天面试面试官问到和ThreadLocal相关的一些问题,回来以后对相关问题进行了详细的思考并认真阅读了一下ThreadLocal源码,以前觉得ThreadLocal只是一个用来做线程变量隔离的类,看完源码发现这个类挺有意思的,里面涉及的原理还是比较复杂
2020-09-04 22:26:06 948 2
原创 面试:什么是缓存雪崩、缓存击穿、缓存穿透?
文章目录缓存雪崩1.什么是缓存雪崩2.解决方案缓存击穿1.什么是缓存击穿2.解决方案3.缓存雪崩和缓存击穿的区别缓存穿透1.什么是缓存穿透2.解决方案3.布隆过滤器4.缓存击穿和缓存穿透的区别总结缓存雪崩1.什么是缓存雪崩为了使查询速度更快,我们选择使用缓存来保存数据,使原本每次请求都需要查询数据库的操作变成先查询缓存,缓存有直接返回,缓存没有则查询数据库然后再写入缓存中,通常缓存都是有有效时长的,否则就会一直占用内存空间。当大量请求在访问都会先从缓存查询,如果此时大部分缓存同时过期失效,那么这些
2020-08-16 21:59:38 2441
原创 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 9733 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 5125 11
原创 RocketMQ——NameServer和Broker
RocketMQ——NameServer和Broker文章目录RocketMQ——NameServer和BrokerNameServerNameServer功能为什么不用zookeeper?BrokerBroker消息存储Broker的HANameServerNameServer功能NameServer负责维护Producer和Consumer的配置信息、状态信息,并且协调各个角色的协同...
2019-08-16 21:21:50 9416 1
原创 LeetCode 每日一题——2178. 拆分成最多数目的正偶数之和
一直加2进行尝试,保证都是偶数剩余和小于当前数时,让剩余和加上列表最后一位即可。
2023-07-06 11:36:10 421
原创 LeetCode 每日一题——1750. 删除字符串两端相同字符后的最短长度
LeetCode 每日一题——1750. 删除字符串两端相同字符后的最短长度
2022-12-28 13:52:16 369 1
原创 通关剑指 Offer——剑指 Offer II 056. 二叉搜索树中两个节点之和
通关剑指 Offer——剑指 Offer II 056. 二叉搜索树中两个节点之和
2022-12-22 11:24:45 213 1
原创 通关剑指 Offer——剑指 Offer II 055. 二叉搜索树迭代器
通关剑指 Offer——剑指 Offer II 055. 二叉搜索树迭代器
2022-12-21 14:04:19 419 1
原创 LeetCode 每日一题——1780. 判断一个数字是否可以表示成三的幂的和
LeetCode 每日一题——1780. 判断一个数字是否可以表示成三的幂的和
2022-12-09 10:48:45 254
原创 LeetCode 每日一题——1812. 判断国际象棋棋盘中一个格子的颜色
LeetCode 每日一题——1812. 判断国际象棋棋盘中一个格子的颜色
2022-12-08 16:00:46 181
原创 通关剑指 Offer——剑指 Offer II 054. 所有大于等于节点的值之和
通关剑指 Offer——剑指 Offer II 054. 所有大于等于节点的值之和
2022-12-07 14:24:48 149
原创 LeetCode 每日一题——1769. 移动所有球到每个盒子所需的最小操作数
LeetCode 每日一题——1769. 移动所有球到每个盒子所需的最小操作数
2022-12-02 15:12:32 163
原创 LeetCode 每日一题——1779. 找到最近的有相同 X 或 Y 坐标的点
LeetCode 每日一题——1779. 找到最近的有相同 X 或 Y 坐标的点
2022-12-01 11:41:01 183
原创 通关剑指 Offer——剑指 Offer II 052. 展平二叉搜索树
通关剑指 Offer——剑指 Offer II 052. 展平二叉搜索树
2022-11-30 11:50:14 187
原创 LeetCode 每日一题——1758. 生成交替二进制字符串的最少操作数
LeetCode 每日一题——1758. 生成交替二进制字符串的最少操作数
2022-11-29 11:43:48 326
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人