学习log配置,看这篇就够了!
这年头还有问Tomcat调优和JVM参数优化的,你还不知道怎么回答么?那么你一定需要看看这篇文章
前几天阿粉的一个小学弟在咨询阿粉面试的时候怎么还会问到关于Tomcat调优和JVM优化,我听完这个的时候,当时就想说,问这个不是应该的么?那么下面阿粉就给大家好好的掰扯掰扯这个Tomcat优化和 JVM 参数优化的事情
阿粉带你几百行代码手撸搜索引擎
Hello 大家好,我是鸭血粉丝,大家都叫我阿粉,搜索引擎想必大家一定不会默认,我们项目中经常使用的 ElasticSearch 就是一种搜索引擎,在我们的日志系统中必不可少,ELK 作为一个整体,基本上是运维标配了,另外目前的搜索引擎底层都是基于 Lucene 来实现的。
阿粉最近遇到一个需求,因为数据量没有达到需要使用 ElasticSearch 的级别,也不想单独部署一套集群,所以准备自己基于 Lucene 实现一个简易的搜索服务。下面我们一起来看一下吧。
阿粉教你如何使用爬虫来对比某东上的数据
自从阿粉经历过上次的大数据杀熟事件之后,明显感觉现在的平台对于用户非常的不友好呀,只要你高频的搜索某些关键词的同时,却往往是越对比,直接就买在了最高峰,就和买股票一样,每次总感觉能抄底,殊不知买在了天台。于是阿粉想了个办法,把所有的数据扒拉下来,我自己做对比,也不去搜索了,省的平台上总是根据我的搜索内容去进行推荐。
乖,答应我,这些 Linux 命令你一定要常用
想要玩转 Linux 系统的话,平时就要多实践,多用,暖暖的阿粉都替你想到了,赶紧来总结一篇,照着多实践,跟着阿粉不会翻车
这个国庆长假,阿粉被骗了!!
这个中秋国庆你被邀请参加几场婚礼,少于三场的请自觉走开
Hello 大家好,我是鸭血粉丝,这个中秋国庆注定是一个繁忙的日子,国庆本身就是一个结婚订婚的高峰期,再加上上半年因为疫情的缘故很多人的婚期都延期举行,这个国庆结婚的就更多了。所以这个国庆你参加了几场呢?那些去不了的你又出了多少份子钱呢?
中美日印程序员收入对比
差别到底有多大呢?
关于 缓存穿透/缓存击穿/缓存雪崩 看这篇文章就够了
redis 在项目中用的话,主要就是用作缓存了
只听说过用python做爬虫,java程序员笑了!
网络爬虫技术,早在万维网诞生的时候,就已经出现了,今天我们就一起来揭开它神秘的面纱!
不要听信那些程序员不需要学英语的毒鸡汤
前天的时候,也就是国庆刚刚过的几天的时候,一个之前在学校的小学弟在问阿粉,说现在想入行当程序员,需要准备什么样子的知识,于是阿粉就给他提出了一些意见,比如先掌握好基础,然后代码规范,以及之后的框架什么的,这时候,小学弟问了一句,对英语的要求高么?阿粉说英语不太好的话,问题不太大,但是还是要学习英语的。
面试官:三个线程顺序执行,你来说说有几种实现方式?
能想起来几种呢?
高铁晚点,滴滴崩了,千万杭州网友直呼出城好难!!
长假第一天,不知道各位小伙伴玩的可好?
阿粉就比较惨了,刚买好的回家的动车票,领导就告知长假前两天还需要加班,赶下项目的进度。
本来还想吐槽抱怨的,不过听到领导说国庆加班三倍工资,哎,算了算了,辛苦一点算什么?为公司服务~
哈哈,幸好今年长假有八天,少了两天也无妨。
好了,不扯这个了,不知道各位出去玩之路,是否顺利?是不是也堵在路上了?
SpringBoot2.x 整合 thumbnailator 图片处理
1、序
在实际项目中,有时为了响应速度,难免会对一些高清图片进行一些处理,比如图片压缩之类的,而其中压缩可能就是最为常见的。最近,阿粉就被要求实现这个功能,原因是客户那边嫌速度过慢。借此机会,阿粉今儿就给大家介绍一些一下我做这个功能时使用的 Thumbnailator
库。
记一次项目中遇到的坑
hello~各位读者好,我是鸭血粉丝(大家可以称呼我为「阿粉」)。今天,阿粉带着大家来了解一下 最近在项目中遇到的一个坑。
Redis 实例对比工具之 Redis-full-check
Hello 大家好,我是鸭血粉丝,前面一篇文章给大家介绍了 SpringBoot
项目是如何从单机切换接入集群的,没看过的小伙伴可以去看一下SpringBoot 项目接入 Redis 集群 。这篇文章给大家介绍一个 Redis 工具 redis-full-check,主要是用来校验迁移数据过后的准确性,下面我们来看一下。
为何建议技术人写写博客?
前言
在阿粉刚刚选择走上程序员道路的时候,脑海中还没有技术博客这个概念。那个时候入门靠的是培训班的视频,初学的过程中总会遇到许多陌生的概念,视频里没听懂的话一般会选择到搜索引擎去搜一下,多看几种不同的解释进行消化,也就是从这时开始接触到的技术博客。
在最开始的时候,我对博客的理解和我们读书时候做的笔记差不多,就是把学到的知识记录下来。但是慢慢的,我开始接触到了一些比较优秀的博客,他们的共性是能够把一个知识点讲得很清楚,能给出自己的理解,或者有适当的示例代码帮助读者理解。慢慢地我也萌发了要写博客的念头,初衷很简单,就是要把自己理解的某个知识点用自己的话分享出来。
屈指一算,从开创博客园账号至今也已经一年半了,自己的博客记录了自己的技术成长过程,收获了很多,下面我就给大家分享一下写博客能给大家带来什么好处吧。
1. 帮助我们理解知识
首先写博客能帮助我们很好地梳理并掌握一个知识点。不知道大家有没有听过这样的话:在学一个知识点的时候,如果只是听一遍讲,那你大概能掌握10%;做了笔记,大概掌握25%;能做出相应的题目,掌握50%;如果能把这个知识点教授给别人的话,那么就掌握了80%了。如果我们把写博客当成一个给他人传授知识的过程,当我们的博客写完了,自然地我们也就掌握了这个知识。当然这个过程是非常不容易的,想要把知识传授给他人,首先我们自己要吃透了这个知识。我个人在写博客的时候常常会遇到这么一种情况:写着写着就写不下去了,发现自己其实没有搞懂,理解透彻某个知识。为了把博客写下去,会强迫自己去把相关的知识搞懂。当我们通过博客的形式把一个知识点讲懂之后,其实我们就明白了一个知识点的来龙去脉,这对我们形成系统的知识体系很有帮助。
2. 获得成就感
写博客除了能帮助我们巩固理解知识外,还能给我们带来一些学习之外的乐趣。就我自己而言,每当我写的文章被别人评论或点赞,心里都会暗暗一乐,毕竟大多数情况下人还是希望得到他人认可的。尽管有时候得到的也不全是认可,可能会有其他小伙伴指出你的不足,也不失是一次学习的机会。
3. 提高影响力
在我个人看来,写博客还能提高自己的影响力,你的每一篇博客都是一次能力的展示,如果你的内容足够优秀的话,这些博客就是你的一张名片。我曾经因为博客收到过出版社的出书邀约,大厂的面试邀约等,尽管当时知道自己还没有达到那个水平,但还是蛮开心的。
4. 面试加分项
在面试写简历的时候,我们可以直接放上自己的博客链接,在同等水平的情况下,长期精心维护的技术博客是很有可能成为加分项的,毕竟大家都喜欢乐于分享知识的人。我曾经经历过一场有趣的面试,那是一场腾讯的主管面试,采用视频面试。面试的形式很常规,面试官抛出一个知识点,让我能讲多少讲多少。当时不知道为啥,他问的内容很多都是我掌握的比较好的内容。等面试结束的时候他告诉我他从面试开始就一直在看我的博客,刚好我的博客涉及的知识点也比较多,他就直接从上面挑知识问了,并对我的博客给予了肯定。虽然这是小概率事件了,但是也从侧面说明总有一天你的博客会帮上忙的。
后话
不知道以上写博客的好处能不能打动你,在我个人看来,写博客是一件百利无一害的事情,可能唯一比较麻烦的就是写博客比较费时间,不过我想花出去的时间能获得以上四个方面的收获也是值得的。把写博客当成一种习惯吧,坚持下来一定会有所收获的。
原来使用 Spring 实现策略模式可以这么简单!
Hello,大家好,我是鸭血粉丝~
最近看同事的代码时候,学到了个小技巧,在某些场景下非常挺有用的,这里分享一下给大家。
Spring 中 @Autowired
注解,大家应该不会陌生,用过 Spring 的肯定也离不开这个注解,通过这个注解可以帮我们自动注入我们想要的 Bean。
除了这个基本功能之外,@Autowired
还有更加强大的功能,还可以注入指定类型的数组,List/Set 集合,甚至还可以是 Map 对象。
比如说当前应用有一个支付接口 PayService
,分别需要对接支付宝、微信支付、银行卡,所以分别有三个不同实现类 AliPayService
,WechatPayservice
,BankCardPayService
。
四个类的关系如下图所示:
如果此时我需要获取当前系统类所有 PayService
Bean,老的方式我们只能通过 BeanFactory
或者 ApplicationContex
t 获取。
1 |
|
但是现在我们可以不用这么麻烦了,我们可以直接使用 @Autowired
注入 PayService
Bean 数组,或者 PayService
List/Set 集合,甚至,我们还可以注入 PayService
的 Map 集合。
1 |
|
知道了这个功能,当我们需要使用 Spring 实现策略模式就非常简单。
可能有的小伙伴不太了解策略模式,没关系,这类阿粉介绍一个业务场景,通过这个场景给大家介绍一下策略模式。
还是上面的例子,我们当前系统需要对接微信支付、支付宝、以及银行卡支付。
当接到这个需求,我们首先需要拿到相应接口文档,分析三者的共性。
假设我们这里发现,三者模式比较类似,只是部分传参不一样。
所以我们根据三者的共性,抽象出一组公共的接口 PayService
,
1 |
|
然后分别实现三个实现类,都继承这个接口。
那么现在问题来了,由于存在三个实现类,如何选择具体的实现类?
其实这个问题很好解决,请求参数传入一个唯一标识,然后我们根据标识选择相应的实现类。
比如说我们在请求类 PayRequest
搞个 channelNo
字段,这个代表相应支付渠道唯一标识,比如说支付宝为:00000001,微信支付为 00000002,银行卡支付为 00000003。
接着我们需要把唯一标识与具体实现类一一映射起来,刚好我们可以使用 Map
存储这种映射关系。
我们实现一个 RouteService
,具体代码逻辑如下:
1 |
|
我们在 RouteService
自动注入 PayService
所有相关 Bean,然后使用唯一标识查找实现类。
这样我们对外就屏蔽了支付渠道的差异,其他服务类只要调用 RouteService
即可。
但是这样实现还是有点小问题,由于我们唯一标识为一串数字,如果像我们上面直接使用 @Autowired
注入 Map
,这就需要我们实现类的 Bean
名字为 00000001 这些。
但是这样命名不是很优雅,这样会让后来同学很难看懂,不好维护。
所以我们需要做个转换,我们可以这么实现。
首先我们改造一下 PayService
这个接口,增加一个方法,每个具体实现类通过这个方法返回其唯一标识。
1 |
|
具体举个支付宝实现类的代码,其他实现类实现类似。
1 |
|
最后我们改造一下 RouteService
,具体逻辑如下:
1 |
|
上面代码首先通过自动注入 ` PayService 一个集合,然后我们再将其转为一个
Map`,这样内部存储刚好是唯一标识与实现类的映射了。
好了,今天的小技巧就分享到这里,学到小伙伴,不妨点个赞吧。
如果时间可以倒流
阿粉一定鼓足勇气,跟喜欢的女生表白
今天同事问阿粉一个问题,觉得挺有意义的,在这里也问问各位读者们:如果时间可以倒流,你最想做什么呢?为什么呢?
这个问题阿粉也问了问身边的一些朋友们,下面是他们的答案,或许可以给你一些启发
朋友 A :如果时间可以倒流,我特别想要回到高中的时候,好好学习,踏踏实实的去努力,好好读书。不是那种死板教条的读书,是有计划有效率的读书,希望自己能够死不要脸一些,多向老师和同学请教问题,我可能天资不够聪慧,但是如果能够有效率一些,死不要脸一些,最起码会比现在要好得多吧
朋友 B :我想回到高三结束的那个暑假啊,跟喜欢的女生表白。我也是后来才知道,当时我喜欢的那个女生,对我也有好感,我当时但凡是再勇敢一点儿,也不至于母胎 solo …
朋友 C :我跟你讲,要是能回到过去的话,我就回到 2006 年 6 月 1 日,中国船泊 5 元钱,全部身价买了后 2007 年 9 月 298 抛,然后买房子,然后入股腾讯阿里,在微信刚起来的时候就去做公众号,这样的话 2020 年的我可能算不上首富,但起码也可以算是人生赢家了(狗头保命
朋友 D :我希望我能回到初中的时候,告诉自己你很棒,自信一些。我以前就是一个比较敏感的小女生,非常在意别人看法,心情不愉快的时候就是自己憋着,也不会和别人人沟通,一个人硬抗。有的时候,朋友就会跟我说比较喜欢我,对我称赞有加,但是因为我不是很自信,所以对自己的闪光点视而不见。这些年在男朋友的耐心陪伴下才慢慢建立起自己的自信心,才敢表达自己的想法,说到这里,想和所有的女生说一句,你就是最棒的,不要怀疑自己,要自信一些!(PS : 这个小姐姐好暖,阿粉爱了
朋友 E :希望在大学的时候,自己少在宿舍睡会儿觉,打会儿游戏,多出去走走,多交朋友。一定要积极结交朋友,因为他们可以或多或少带给你快乐,在未来的生活里朋友是非常重要的一个存在,很多事情都可以帮到你,真的到那个时候,你会无比的庆幸自己有好朋友在身边陪伴着自己
朋友 F :如果时间可以倒流,我想回到高中,跟我的老班道个歉,谢谢她当时是一直为我考虑,当时自己太年少轻狂了,根本没有把她的话放在心上,反而以为是老班想要放弃我这个学生了,处处和她顶撞,说那么难听的话。当时如果能够站在她的角度去想想…现在想要和她道个歉,都已经联系不到她了,特别遗憾
朋友 G : 如果时间可以倒流么?我就回到母亲的子宫里,脐带绕颈三圈勒死我自己,哈哈哈,阿粉你肯定没想到我会这样回答
朋友 G 是个调皮鬼,平时就是段子频出,问他的时候他给我这个回答,真是让我惊呆了,脑回路总是这么清奇
其实阿粉对于这个问题也是认真的想了想,阿粉也有想要回去的时候,比如阿粉小的时候,一家人在冬天围着火炉,边取暖边和父母说笑,现在一年可能也就过年的时候回去;比如阿粉做错事惹母亲生气的时候;但是怎么可能会回去呢
只是当我们有这么念头的时候,肯定是当时是哪里自己没有做好,所以想要回去,尽自己的努力去做的更好一些
过去的已经过去,已经是抓不住的了,其实我们不如将那份心情和遗憾,放在未来,尽全力去做好当下的事情,去抓住未来。
故事还长,不要失望~
SpringBoot 项目接入 Redis 集群
Hello 大家好,我是鸭血粉丝,Redis
想必大家一定不会陌生,平常工作中或多或少都会用到,不管是用来存储登录信息还是用来缓存热点数据,对我们来说都是很有帮助的。但是 Redis
的集群估计并不是每个人都会用到,因为很多业务场景或者系统都是一些简单的管理系统,并不会需要用到 Redis
的集群环境。
阿粉之前也是这样,项目中用的的 Redis
是个单机环境,但是最近随着终端量的上升,慢慢的发现单机已经快支撑不住的,所以思考再三决定将 Redis
的环境升级成集群。下面阿粉给大家介绍一下在升级的过程中项目中需要调整的地方,这篇文章不涉及集群的搭建和配置,感兴趣的同学自行搜索。