Java
文章平均质量分 72
尹吉欢
欢迎大家关注我的微信公众号‘猿天地’, 猿天地由《Spring Cloud微服务-全栈技术与案例解析》作者尹吉欢创建。 JAVA方向为主(Spring Boot, Spring Cloud,Sharding JDBC,Elastic Job,Mongodb等)。 技术之路很漫长,我们一起前行吧。 作者代码分享GitHub地址:https://github.com/yinjihuan , 个人网站:http://cxytiandi.com/course , 有任何问题或者合作请联系我。微信号:jihuan900
展开
-
面试官非得跟我抬杠,说MQ挂了怎么办?
原创:猿天地(微信公众号ID:cxytiandi),欢迎分享,转载请保留出处。一位读者跟我说,最近去某个公司面试,面试官非得问他MQ挂了如何处理?这位读者说当时也比较懵,因为在日常工作中也没去想过这样的问题,就回答:挂了就报错了呗**,**马上重启呗,还能咋处理。其实这个问题也并不是说这位面试官是一种抬杠的行为,因为MQ确实有可能挂掉,是一种正常现象。只不过是说这个挂的概率非常小,毕竟都是集群模式。如果是平时跟朋友,同事聊这个问题,怎么回答都没问题。如果是在面试过程中,还是得仔细想想如何去回答比较.原创 2021-09-06 23:25:03 · 2952 阅读 · 1 评论 -
面试高频题:讲讲项目中的技术难点?
原创:猿天地(微信公众号 ID:cxytiandi),欢迎分享,转载请保留出处。相信很多人都有类似的经历,在面试快要结束的时候经常会被问到一个问题:讲讲项目中的技术难点?这是一个比较开放的问题,首先它没有固定的答案,因为每个人做过的项目不同,使用的框架不同,对应的架构不同,自然遇到的技术难点也不同。1. 一定要真实在回答这个问题的时候,一定要仔细想想之前真实遇到的问题,不要随便编一个,这样很容易出问题,因为面试官会顺着细节一层层的问下去,如果你是编出来的,到最后就圆不回去了。举个例子:求职者.原创 2021-07-17 14:26:55 · 3168 阅读 · 0 评论 -
宝,我今天CR了,C的什么R? 走过场的CR
原创:猿天地(微信公众号ID:cxytiandi),欢迎分享,转载请保留出处。CodeReview我相信目前很多公司都会有这么一个流程,关键是这个流程有没有用就很难讲。主要还是取决于你对CR的理解以及有没有真正的去落地CR,去重视CR带来的隐藏价值点。正好最近也是有人在问我CR相关的问题,他们也要开始做CR了,想了解下有没有最佳实践之类的。所以今天跟大家聊聊CR这个话题,我说的也不一定都是对的,仅供参考哈。其实说实话,我觉得CR不存在什么最佳实践。因为每个公司或者说每个团队所进行的方式都会不一样,.原创 2021-06-26 14:54:58 · 390 阅读 · 0 评论 -
被监控轰炸了,不得不使出绝招
原创:猿天地(微信公众号ID:cxytiandi),欢迎分享,转载请保留出处。监控这个话题永远都不会过时,之前也有跟大家聊过监控的内容,以及如何快速实现监控满足日常需求。比如基于日志告警,基于全局异常处理器告警,基于Cat,Prometheus,Sentry等告警。无论公司是什么规模,创业小公司,稳定大公司,你都需要做监控的呀。特别是大公司的监控做的更全,也更在意监控这件事情。小公司相对来说会好点,因为业务可能还不是很稳定,用户少,出故障就出呗,能修复就行。监控的痛点有监控总比没监控要强吧,但是.原创 2021-06-19 14:31:34 · 391 阅读 · 0 评论 -
解决甩锅的一大难题,就是留个凭证
原创:猿天地(微信公众号ID:cxytiandi),欢迎分享,转载请保留出处。在多个团队之间的一些业务关联上,内部可以Rpc的方式进行交互。某些业务其实不需要强关联,这个时候就会用消息队列进行解耦操作。比如下单后加积分,发短信通知的这类操作。在用消息队列的时候,我们最需要关注的一个问题就是消息会不会丢失?这里的丢失指的就是要么你程序有问题,没有发送出去。要么发送出去了,但是在某个节点上消息丢掉了,导致消费方没有收到你发送的消息,从而引发业务问题。对于消息丢失,有很多的解决方案。本文不聊怎么在技术.原创 2021-06-05 20:28:52 · 329 阅读 · 2 评论 -
后期数据库主从架构的痛点,真的痛
原创:猿天地(微信公众号ID:cxytiandi),欢迎分享,转载请保留出处。读写分离是什么?读写分离的作用就不讲了,如果有不了解的同学可以自己去搜索资料进行了解。或者查看我之前的文章读写分离。一开始的场景肯定都基于主库去做增删改查的操作,等后面压力慢慢上来后才会考虑加数据库的从节点,通过读写分离的方式来提高查询的性能。首先读写分离默认查询都是走从节点的。从我们的使用习惯或者业务的场景来说,查询的场景是大于增删改的。所以我们会在需要走主库进行数据操作的业务场景下,手动去控制这条Sql要去主库.原创 2021-05-22 17:42:28 · 231 阅读 · 1 评论 -
不看源码,怎么卷的过小年轻
原创:猿天地(微信公众号ID:cxytiandi),欢迎分享,转载请保留出处。在工作中,我相信很多人都有下面这样的感受:这谁的代码呀,看不下去了这破代码,一行注释也没有这代码,还没我写的好这代码,有bug吧这代码,。。。。。。。是不是很真实,我们往往在看别人代码的时候就会有上面这些想法。我认为主要的原因还是大部分看的都是业务代码,而且很多是多年积累下来的,也没有重构,然后一年年的堆逻辑,最后就变成shi山了。当然也有不少的人代码写的确实很好,简洁易懂,我们在看别人代码的时候要抱着学习.原创 2021-05-09 13:08:20 · 282 阅读 · 1 评论 -
太强大了,Feign对接YAPI实现自动Mock
原创:猿天地(微信公众号ID:cxytiandi),欢迎分享,转载请保留出处。前面我们介绍了在微服务架构下如何解决单测时 Mock 的问题,通过 Mock 可以在单测时不依赖其他服务的实现。在文章最后我也给大家提供了一个思考题:是不是可以模拟前端对后端的处理方式,走 Yapi 的 Mock 功能? 这样就不用自己手动的对每个接口去 Mock 了。首先我们需要定义一个 Mock 的配置类,用于配置哪些远程调用需要进行 Mock。@Data@Configuration@ConfigurationP.原创 2021-05-09 13:07:12 · 825 阅读 · 1 评论 -
微服务接口单测依赖问题一次性搞定
在微服务架构中,服务之间的依赖是很常见的事情。在开发过程中都是并行开发的,前端会依赖后端的接口,后端也有可能会依赖其他后端服务的接口。项目整体提测后是没有问题的,因为大家都开发完了,也会同时部署到测试环境中。但是在开发过程中需要进行单测,单测的时候会依赖其他的服务,这个时候就需要解决这个依赖问题。前端依赖后端接口前端依赖后端接口,一般会提前将接口定义好,然后拉上前端同学一起评审。如果没有问题就各自去开发,那么前端同学在自测的时候是需要数据的,这个时候可以采用 Mock 的方式提供数据。关于 Mock原创 2021-04-18 22:05:05 · 459 阅读 · 1 评论 -
monkey-api-encrypt又增强了一个实用功能
框架主页:https://github.com/yinjihuan/monkey-api-encrypt背景有阵子没更新 monkey-api-encrypt 这个框架了,然后看了下 Github 上一些用户提的问题,挑了一个比较实用的进行了修复。说问题之前先简单的讲下 monkey-api-encrypt 的原理,目前 monkey-api-encrypt 中核心部分就是用了 javax.servlet.Filter 来对数据进行加解密的处理,实现也比较简单。唯一要注意的就是在 Filter 中如原创 2021-04-10 15:49:12 · 574 阅读 · 0 评论 -
慌了,老大让我将线上的服务器升配,咋搞?
在业务高速发展的时候,后端的压力慢慢变大,服务器扩容在所难免。今天就聊聊扩容相关的问题。首先我们看数据库的扩容,到底是加实例还是直接升配?在创业初期,基本上都是单库的形式。比如最开始是4C8G的配置,到了某天数据库扛不住了,但是数据量其实没那么大,只是请求量上来了而已,或者由于研发写了很多复杂的Sql导致数据库性能下降了。数据库加实例这个时候最快的解决方式就是扩容了,首先我们来看加实例的方式,比如我们可以加N个从节点来提高查询的性能,可以对库进行垂直拆分或者水平拆分。以上这些都是提高性能的方式,但原创 2021-04-01 12:57:34 · 8704 阅读 · 4 评论 -
面试官再问你 ThreadLocal,就这样狠狠 “怼” 回去!
本文大纲用过ThreadLocal吗?在什么场景下会使用ThreadLocal讲讲ThreadLocal的原理吧!使用ThreadLocal有什么需要注意的吗?有什么方式能提高ThreadLocal的性能吗?如何将ThreadLocal的数据传递到子线程中?线程池中如何实现ThreadLocal的数据传递?用过ThreadLocal吗?在什么场景下会使用ThreadLocal。这个回答一定要足够自信:必须用过啊,无论是在平时的业务开发过程中会用到,其他很多三方框架中也都用到了Thread原创 2021-03-25 12:52:23 · 419 阅读 · 0 评论 -
主动做了业务监控,产品经理对我竖起大拇指
监控,一直是个可以聊很久的话题。除了系统监控,还有一个往往容易被忽略,今天我们就来聊聊这个容易忽略的业务监控。监控什么?作为开发人员,不仅仅是把功能开发出来就行了,对于你负责的产品或者模块,你需要对它有足够的了解,时时刻刻需要关注着,要有初恋的那种感觉才行。以电商最常见的下单功能来说,比如我想知道下单的成功率多少,下单的平均耗时,下单失败中有多少是因为库存不足下单失败的等等这类相关的信息。有了这些业务指标信息,你就能知道你负责的产品现状是什么样的,以及你需要做哪些改进。至于要监控哪些指标,得跟着你原创 2021-03-04 15:12:58 · 2046 阅读 · 9 评论 -
用了很多年Dubbo,连Dubbo线程池监控都不知道,觉得自己很厉害?
前言micrometer中自带了很多其他框架的指标信息,可以很方便的通过prometheus进行采集和监控,常用的有JVM的信息,Http请求的信息,Tomcat线程的信息等。对于一些比较活跃的框架,有些还是不支持的,比如Dubbo。如果想监控Dubbo的一些指标,比如线程池的状况,我们需要手动去扩展,输出对应的线程池指标才行。在这种情况下,肯定是没什么思路的,因为你不知道怎么去扩展,下面给大家介绍去做一件事情之前的思考,方式方法很重要。Dubbo有没有现成的实现?参考micrometer中指标原创 2021-02-07 19:01:27 · 711 阅读 · 0 评论 -
Prometheus为你的SpringBoot应用保驾护航
前面我们介绍了Prometheus的作用和整体的架构,相信大家对Prometheus有了一定的了解。具体可以查看这篇文章:https://mp.weixin.qq.com/s/QoAs0-AYy8krWTa3HbmJZA今天着重介绍下如何在项目中将Prometheus用起来,结合漂亮的图表做数据展示,真的非常帅气。使用之前先介绍一个Micrometer,Micrometer 是一款监控指标的度量类库,提供了对各种指标的监控。比如JVM, 线程池,数据库连接池等。官方网站:https://microm原创 2021-02-01 14:00:53 · 352 阅读 · 0 评论 -
在冷风中我凌乱了半小时,只因健康码刷不出来
聊聊小背景前几天的早晨我早写字楼门口干等了半小时,背后的原因竟然是健康码的二维码刷不出来,保安小哥还一直跟我讲,支付宝出不来你用微信啊,用微信啊。。他们用的相同的接口,我用微信有卵用啊,冷风中我甩了甩仅有的几根秀发,扬长而去。。。作为程序员的我就开始了内心的吐槽大会:这咋做的啊,不行呀,这就打不开了,肯定没做优化,肯定没用缓存,肯定没做压力测试。。。。。下面作为技术的视角来分析下这个场景的实现,以及可以怎么去优化。这只是我YY哈,真实场景别人是怎么实现的我也不清楚哈。需求剖析每个人都有一个对应的原创 2021-01-26 20:40:05 · 5041 阅读 · 20 评论 -
ElasticSearch索引升级的小妙招
ElasticSearch在使用的时候最麻烦的一点就是重建索引了,比如你改了数据类型那么就得重建索引。为了不影响当前正在使用的场景,需要有一个方案能够平滑升级。大部分的资料都讲的是用ElasticSearch alias的方式来实现,今天我们讲下结合配置中心来实现。划重点:配置中心需要有2个配置:orderIndexNameQuery:orderorderIndexNameJob: order比如刚开始索引是order, 我们可以为这个索引进行升级,就跟API一样,增加版本的概念。比如在索引名原创 2021-01-22 12:45:55 · 380 阅读 · 0 评论 -
有了链路日志增强,排查Bug小意思啦!
在工作中,相信大家最怕的一件事就是听到有人在工作群艾特你:某某功能报错啦。。。然后你就得屁颠屁颠的去服务器看日志,日志量少还好点,多的话找起来太麻烦了。不太容易直接定位到关键地方。东找找西找找,好不容易找到了报错的信息,却不知道当时的参数信息是什么,也不太好复现,太难了。。改完还得写故障报告,美好的一天又没了。要解决这类的痛点需要做下面几件事情:日志收集异常告警日志增加链路API响应增加traceId异常时打印当前报错方法的参数支持调试模式日志收集要解决的第一个问题就是日志的集中原创 2021-01-18 12:55:34 · 580 阅读 · 0 评论 -
写了一个慢接口,年终妥妥的325
一个项目要想抗住越大的压力,那么每个API都得在最短的时间内响应,这样吞吐量才高。在很多时候,开发压根没有去做过优化,等到某天压力上来时,系统就扛不住了。举一个最常见的例子:大家上班都会做地铁(土豪可以开车哈)吧,地铁都有固定的几个入口,每个入口有几个固定的闸机可以扫码进入。如果每个人扫码进站的时间都控制在2秒内,那么一个闸机一分钟可以过30个人。如果有一个人他在那磨蹭半天,花了20秒,也就是这个闸机这一分钟只能过21个人,吞吐量立马就下降了。这种生活中的案例在程序的世界中也是同样适用的,而且是一原创 2021-01-07 12:36:22 · 318 阅读 · 0 评论 -
让API并行调用变得如丝般顺滑的绝招
当数据量较大的时候,都会通过分库分表来拆分,分担读写的压力。分库分表后比较麻烦的就是查询的问题,如果不是直接根据分片键去查询的话,需要对多个表进行查询。在一些复杂的业务场景下,比如订单搜索,除了订单号,用户,商家 这些常用的搜索条件,可能还有时间,商品等等。目前常见的做法将数据同步到ES这类搜索框架中进行查询,然后通过搜出来的结果,一般是主键ID, 再去具体的数据表中查询完整的数据,组装返回给调用方。比如下面这段代码,首先查询出文章信息,然后根据文章中的用户ID去查询用户的昵称。List<Ar原创 2020-12-29 12:17:18 · 12045 阅读 · 30 评论 -
面试官:如果让你写个分布式配置中心,就问你慌不慌
前言一位读者朋友跟我反馈,能不能写一篇比较全的配置中心的文章。自己最近在面试过程中有被面试官问:如何设计一个配置中心? 这个话题,由于自己在工作中也没实际使用过配置中心,所以对于如何去设计是完全没有概念的。今天就给大家写一篇去配置中心需要考虑的点,我也不是什么配置中心开源项目的参与者,所以写出来的仅供大家参考。有必要重复造轮子吗?当面试官问你:如果让你写一个配置中心,说说你的设计思路? 首先我们要有自己的想法,虽然是在面试过程中的问题。我们也可以反问,市面上目前有几款很优秀的开源的配置中心,我们可以原创 2020-11-27 13:06:47 · 608 阅读 · 0 评论 -
天天说要做性能优化,到底在优化什么?
面试过程中经常被问到:你做过性能优化吗?优化了哪些方面?怎么做优化的?优化的效果如何?连环炮问下来,对于有做过优化的老司机来说,肯定能抗住。对于没有真正做过优化的小白来说,肯定扛不住这一系列的追问,最后只能以面试失败而告终。那么性能优化到底在优化什么呢?我们来盘点下一些常用的优化手段。SQL 优化当你开发的接口响应时间超过了 200ms 的时候就得优化了,当然 200ms 不是绝对值,具体还是看应用场景。以 App 举例,进一个页面调用 5 个接口(题外话:也可以做聚合),那么总共就是原创 2020-11-02 14:03:10 · 728 阅读 · 4 评论 -
想要做读写分离,送你一些小经验
读写分离是应用中提升数据访问性能最常见的一种技术,当用户量越来越多,访问量越来越大,单节点数据库难免会遇到性能瓶颈。很多场景基本上都是读多写少,所以增加多个从节点来分担主节点的压力自然是水到渠成的事情。在应用接入读写分离后,难免会有一些我们意料之外的问题,这篇文章主要给大家介绍下一些经常会遇到的问题,有其他的问题欢迎留言补充。分库分表之前的文章可以查看:http://mp.weixin.qq.com/mp/homepage?__biz=MzIwMDY0Nzk2Mw==&hid=4&sn=原创 2020-10-27 13:28:46 · 613 阅读 · 0 评论 -
通用的底层埋点都是怎么做的?
想要在程序里监控数据库的操作耗时,想要在底层框架中自动传递链路跟踪信息,这些需求经常会碰到,特别是在构建基础框架的时候。核心目标只有一个,那就是在底层封装好,不用上层使用人员关心。今天跟大家聊聊常用的底层扩展埋点方式是怎么处理的。框架自带扩展点如果你使用的框架在设计的时候,就预留了扩展点就很方便了。比如 Mybatis 的拦截器,我们可以在拦截器中对 Sql 进行监控,改写。比如阿里的 Sentinel 框架,可以通过 SPI 来扩展 Slot,调整编排顺序,新增自定义的 Slot 来实现限流告警等原创 2020-10-21 12:30:58 · 9217 阅读 · 4 评论 -
草率了,又一个Maven打包的问题
经常遇到 Maven 相关的问题,这是之前的文章:这个 Maven 依赖的问题,你敢说你没遇到过:https://mp.weixin.qq.com/s/SzBbDtyRUrk_7LH8SUbGXQMaven 快照版本要这样用才真的香!:https://mp.weixin.qq.com/s/S0X1qY4uRsAeaqiC80fyNA今天再来一个,首先看下错误信息,一看就很熟悉,都是老朋友了,还是曾经那个味道。Caused by: java.lang.ClassNotFoundException:原创 2020-10-12 12:43:58 · 871 阅读 · 0 评论 -
被产品经理怼了,线上出Bug为啥你不知道
前言前几天跟读者聊天,他说被产品经理给怼了。原因是线上出 Bug 了,最后是客户反馈才知道的。我就问他:你们是不是没做监控?读者:我们是刚成立的创业团队,目前最重要的就是堆功能,很多基础设施都没时间做。正所谓有多大的碗吃多少的饭,不要盲目追求规模大,很牛的那种方案,合适的就可以。监控亦是如此,小方案只要够用,能解决问题,也是非常不错的选择。下面给大家介绍一些常用的异常监控方式:最小成本化如果是刚成立的创业团队,可以用最小的实现成本来对系统的异常进行实时监控。所谓最小的实现成本,就是可以不用依赖原创 2020-09-23 13:03:56 · 745 阅读 · 2 评论 -
大写的服,看完这篇你还不懂RocketMQ算我输
目录RocketMQ介绍RocketMQ概念为什么要用RocketMQ?异步解耦削峰填谷分布式事务最终一致性数据分发RocketMQ架构RocketMQ消息类型普通消息顺序消息定时消息事务消息最佳实践消息重试消息过滤消费模式消费幂等本地事务消息封装参考代码RocketMQ 介绍Apache RocketMQ 是一款 低延迟、高并发、高可用、高可靠的分布式消息中间件。消息队列 RocketMQ 可为分布式应用系统提供异步解耦和削峰填谷的能力,同原创 2020-09-15 12:56:35 · 1420 阅读 · 0 评论 -
写一个通用的幂等组件,我觉得很有必要
本文目录背景简单幂等实现2.1 数据库记录判断2.2 并发问题解决通用幂等实现3.1 设计方案3.1.1 通用存储3.1.2 使用简单3.1.3 支持注解3.1.4 多级存储3.1.5 并发读写3.1.6 执行流程3.2 幂等接口3.3 幂等注解3.4 自动区分重复请求3.5 存储结构3.6 源码地址背景回答群友的问题:幂等有没有什么通用的方案和实践?关于什么是幂等,本文就不再阐述了。相信大家都知道,并且也都遇到过类似的问题以及有自己的一套解决方案。原创 2020-09-09 12:21:35 · 701 阅读 · 1 评论 -
如何将分布式锁封装的更优雅
分布式锁通常有很多选择,基于 Redis 的,基于 Zookeeper 的,基于数据库等等方案。Redis 用于缓存数据,在项目中都有使用,所以使用 Redis 来做分布式锁的会稍微多些。如果用 Redis 来做锁,可以直接用开源的方案,比如redisson。最常见的使用方式如下所示:RLock lock = redisson.getLock("anyLock");lock.lock();run();lock.unlock();获取锁对象,调用 lock()加锁,执行业务逻辑,调用 unl原创 2020-09-01 12:46:11 · 620 阅读 · 0 评论 -
哇,ElasticSearch多字段权重排序居然可以这么玩
背景读者提问:ES 的权重排序有没有示列,参考参考?刚好之前也稍微接触过,于是写了这篇文章,可以简单参考下。在很多复杂的业务场景下,排序的规则会比较复杂,单一的降序,升序无法满足日常需求。不过 ES 中提供了给文档加权重的方式来排序,还是挺好用的。首先初始化三条测试数据,方便查看效果:{ id: 1, title: "Java怎么学", type: 3, userId: 1, tags: [ "java" ], textContent: "我要学Java", status: 1原创 2020-08-27 13:01:18 · 3354 阅读 · 5 评论 -
简直骚操作,ThreadLocal还能当缓存用
背景说明有朋友问我一个关于接口优化的问题,他的优化点很清晰,由于接口中调用了内部很多的 service 去组成了一个完成的业务功能。每个 service 中的逻辑都是独立的,这样就导致了很多查询是重复的,看下图你就明白了。上层查询传递下去对于这种场景最好的就是在上层将需要的数据查询出来,然后传递到下层去消费。这样就不用重复查询了。如果开始写代码的时候是这样做的没问题,但很多时候,之前写的时候都是独立的,或者复用的老逻辑,里面就是有独立的查询。如果要做优化就只能将老的方法重载一个,将需要的信息直原创 2020-08-10 12:59:10 · 1146 阅读 · 0 评论 -
恕我直言,我也是才知道ElasticSearch条件更新是这么玩的
背景ElasticSearch 的使用度越来越普及了,很多公司都在使用。有做日志搜索的,有做商品搜索的,有做订单搜索的。大部分使用场景都是通过程序定期去导入数据到 ElasticSearch 中,或者通过 CDC 的方式来构建索引。在这种场景下,更新数据都是单条更新,比如 ID=1 的数据发生了修改操作,那么就会把 ElasticSearch 中 ID=1 的这条数据更新下。但有些场景下需要根据条件同时更新多条数据,就像 Mysql 中我们使用 Update Table Set Name=XXX wh原创 2020-07-29 12:59:06 · 1583 阅读 · 0 评论 -
分布式ID生成服务,真的有必要搞一个
目录阐述背景Leaf snowflake 模式介绍Leaf segment 模式介绍Leaf 改造支持RPC阐述背景不吹嘘,不夸张,项目中用到ID生成的场景确实挺多。比如业务要做幂等的时候,如果没有合适的业务字段去做唯一标识,那就需要单独生成一个唯一的标识,这个场景相信大家不陌生。很多时候为了涂方便可能就是写一个简单的ID生成工具类,直接开用。做的好点的可能单独出一个Jar包让其他项目依赖,做的不好的很有可能就是Copy了N份一样的代码。单独搞一个独立的ID生成服务非常有必要,当然我们也原创 2020-07-22 11:59:48 · 733 阅读 · 0 评论 -
Dubbo测试环境服务调用隔离这么玩对么
背景阐述前几天,有位同学问我一个关于 Dubbo 的问题。他的诉求是这样子的:诉求一第一个诉求是本地开发的时候想自己调用自己的服务,比如自己在改 A 服务,然后出问题了,本地再启动一个 B 服务,A 服务调用 B 服务直接排查问题。目前的问题是用的同一个注册中心,所以会调用到其他的服务实例。还有就是去网上找了一些文章的资料,按照资料上的配置没有效果,也就是在@Reference 配置 url 来指定调用的服务地址。配置如下:@Reference(url="dubbo://localhost:2原创 2020-07-15 13:07:08 · 728 阅读 · 0 评论 -
一时技痒,撸了个动态线程池,源码放Github了
阐述背景线程池在日常工作中用的还挺多,当需要异步,批量处理一些任务的时候我们会定义一个线程池来处理。在使用线程池的过程中有一些问题,下面简单介绍下之前遇到的一些问题。场景一:实现一些批量处理数据的功能,刚开始线程池的核心线程数设的比较小,然后想调整下,只能改完后重启应用。场景二:有一个任务处理的应用,会接收 MQ 的消息进行任务的处理,线程池的队列也允许缓存一定数量的任务。当任务处理的很慢的时候,想看看到底有多少没有处理完不是很方便。当时为了快速方便,就直接启动了一个线程去循环打印线程池队列的大小。原创 2020-06-17 13:06:49 · 872 阅读 · 0 评论 -
熬夜之作:一文带你了解Cat分布式监控
Cat 是什么?CAT(Central Application Tracking)是基于 Java 开发的实时应用监控平台,包括实时应用监控,业务监控。CAT 作为服务端项目基础组件,提供了 Java, C/C++, Node.js, Python, Go 等多语言客户端,已经在美团点评的基础架构中间件框架(MVC 框架,RPC 框架,数据库框架,缓存框架等,消息队列,配置系统等)深度集成,为美团点评各业务线提供系统丰富的性能指标、健康状况、实时告警等。CAT 很大的优势是它是一个实时系统,CAT 大原创 2020-06-08 13:00:42 · 1632 阅读 · 0 评论 -
这个Maven依赖的问题,你敢说你没遇到过
Maven 依赖没处理好的话经常会导致发生一些问题,非常烦。今天给大家分享一个依赖相关的问题,说不定你之前就遇到过。问题背景有个 ES 搜索的项目,刚开始还是好好的状态,过了一段时间,然后就发现启动时报错了。看了下 Git 提交日志,也没有改动过,神奇的代码世界。错误如下图所示,很明显的错误,经常会碰到,肯定是依赖版本的问题。kitty-spring-cloud-starter-elasticsearch 是我自己封装的,里面用的版本是 6.8.7。最开始测试的时候也是正常的,这突然就不行了。我看原创 2020-05-30 17:28:04 · 1269 阅读 · 2 评论 -
一言难尽,Jpa这个功能差点让我丢了工作
故事背景前阵子,有位朋友在微信上问我数据被删了能不能恢复,我问了下原因,居然是因为一个配置项惹的祸。故事细节在 Spring Boot 中使用 jpa 来操作数据库,jpa 就不做详细的介绍了,相信大家都有所了解或者也用过。在 jpa 中有一个配置项,可以让程序在启动的时候自动初始化表结构或者更新表结构的功能。听上去很不错,非常实用。其实这是一个非常危险的功能,个人觉得不应该提供这种功能,只要留了口子就有可能会出问题。这个配置就是:spring.jpa.hibernate.ddl-auto原创 2020-05-24 15:28:31 · 1043 阅读 · 0 评论 -
Java中执行Linux命令
public static void exec(List commands) throws Exception{//指定脚本执行目录为根目录,然后cd到程序的目录中执行shell脚本//这样做是为了能够在进程中获得运行脚本的全路径,直接使用new File()来指定工作目录获取不到File wd = new File("/");Process process = null;pr原创 2014-09-10 15:57:38 · 1474 阅读 · 0 评论 -
Java中取多个集合的交集和并集
private void getIntersection(List> list ) {if(list == null){list = new ArrayList>();}int size = list.size();if(size > 1){//取集合中的交集for (int i = 0; i int j = i+1;if(j list.get(0).retainA原创 2014-09-10 16:05:18 · 7303 阅读 · 0 评论