明明如月的专栏

明明如月的技术博客
私信 关注
明明如月学长
码龄9年

前网易Java高级工程师。《解锁大厂思维:剖析《阿里巴巴Java开发手册》》、《再学经典:《EffectiveJava》独家解析》专栏作者。热爱技术,喜欢思考,乐于分享。

  • 2,674,646
    被访问量
  • 402
    原创文章
  • 727
    作者排名
  • 2,685
    粉丝数量
  • 于 2012-07-29 加入CSDN
获得成就
  • 博客专家认证
  • 获得1,538次点赞
  • 内容获得698次评论
  • 获得2,948次收藏
荣誉勋章
兴趣领域
  • #后端
    #Redis#Elasticsearch#Spring#Java#Spring Boot#MySQL
TA的专栏
  • 手册详解
    3篇
  • Java基础
    210篇
  • Java Web
    11篇
  • 数据库相关
    11篇
  • 专业知识
    9篇
  • 翻译
    51篇
  • Spring相关
    24篇
  • 测试、日志
    12篇
  • Ext JS
    4篇
  • 工具使用
    62篇
  • 算法
    7篇
  • 问题积累
    56篇
  • 通用方案
    34篇
  • 面试
    5篇
  • 感悟杂谈
    34篇
  • 其他
    2篇
  • MyBatis
    4篇
  • 源码原理
    31篇
  • 技术视频
    5篇
欢迎一起探讨交流
本人的Java技术专栏感兴趣的同学可以关注下

主要讲述从Java学习和排错方法的角度讲述如何进阶。
我的GitChat精品文章
如果你是乐于分享和探讨,可以加我微信 mingmingruyuexz (非诚勿扰,加好友请注明来自 CSDN,直接说目的)

另外我们有一个技术交流群,有阿里、网易大公司部分大佬,也有刚毕业就拿到不错Offer的校招生,还有个别知名开源项目贡献者,也有刚工作一两年的普通公司的朋友。
核心目的是交流技术方案,分享遇到的坑等。 如果你的确热爱技术,喜欢交流,可以加我微信后,按照加群说明操作即可进群。 支持博主一杯 Java 扫码加入我的知识星球
  • 最近
  • 文章
  • 资源
  • 问答
  • 课程
  • 帖子
  • 收藏
  • 关注/订阅

“我对技术架构的理解与架构师角色的思考” 读后感

一、背景最近读了一篇非常不错的文章《我对技术架构的理解与架构师角色思考》。非常推荐大家也读读。下面简单记录下对此文的一些感想。二、读后感2.1 概况1 文中【架构师角色】这一块讲得非常透彻。架构师需要大量的实践和知识的积累,身边的架构师都计算机底层原理了解的都很透彻,都有多年的编程经验。文章提到“用新的方法解决新的问题”这一点完全认可,其实我们这个行业除了极个别场景,大多数新的问题都可以用旧的方法来解决。比如分布式架构,本质上就是化整为零,分而治之的思想。领域驱动设计本质上就是加了领域这个
原创
233阅读
8评论
2点赞
发布博客于 28 天前

《编程的原则》重新发明车轮感悟之循序渐进

一、背景前一段时间有朋友说“学习的最好方式就是创造”,即想学某个源码,就自己写一套。果真如此吗?今天读《编程的原则》有讲到,可以为了学习的目的而创造。下面是其中一个节选:二、学习的原则2.1 循序渐进万事万物无非是两个维度,一个是时间维度,一个是空间维度。从时空维度来讲,学习通常需要循序渐进、先易后难、先整体后局部(先局部后整体)。日本剑道有一个非常有名的原则 “守、破、离”守」,一切盡量遵守教條,練習基本功夫直到熟練。這個階段專心學習一種實務,比學習各種理論重要。「破」,開始打破
原创
108阅读
2评论
1点赞
发布博客于 2 月前

mac Big Sur系统 mvn打包报错:No compiler is provided in this environment. Perhaps you are running on a JRE

一、背景最近将mac 升级到 Big Sur 版本,出现了个别奇奇怪怪的小问题。系统升级后执行 mvn 命令,总是出现以下错误:No compiler is provided in this environment. Perhaps you are runningon a JRE截图如下:网上搜索了很多答案,基本都是说环境变量的问题,通过 java -version 检查了环境变量没啥问题。折腾老半天没搞定,最终找到了解决方案,在这里将这个坑分享出来。二、解决办法2.1 下载并安装
原创
554阅读
5评论
4点赞
发布博客于 2 月前

MAC上Chrome浏览器没有声音

一、背景升级 Big Sur 之后出现很多小毛病。今天突然 Chrome 浏览器没声音了,但是QQ音乐声音正常。二、解决办法1、在 Mac 中打开活动监视器2、在「活动监视器」窗口右上角搜索框里输入「audio」,此时可以搜索到「coreaudiod」进程。3、选中「coreaudiod」进程,点击「活动监视器」窗口左上角的「退出进程」按钮,在弹出的对话框中点击「退出」。4、「coreaudiod」进程退出后会自动重启,这时声音就恢复了。亲测好用。...
原创
234阅读
1评论
0点赞
发布博客于 2 月前

《编写提测文档的正确姿势》GitChat

背景多程序员刚参加工作或者工作一两年,总习惯于按部就班地“搬砖”。不知道你是否认真思考过:如果你想成为一名专业的开发人员,想让测试认可你的专业度,让测试更愿意帮你兜底,应该怎么做?本文将结合自己的工作中的亲身体会,给出一些写提测文档的建议,帮助大家提高代码质量,给测试更好地合作体验,提升自己的专业度。在本场 Chat 中将会讲到如下内容:• 如何正确看待开发和测试测试人员的关系?• 写提测文档的意义?• 如何写出全面的提测文档,让测试为你点赞、更愿意为你兜底?适合..
原创
76阅读
1评论
0点赞
发布博客于 2 月前

手里拿着锤子,看啥都像钉子

一、背景有人在我的构造器文章下提了下面一个问题:老师,提一个问题,在实际生活中遇到的 比如说我写了一个发送消息的方法。比如说有一个参数是 messageDTO,但是他有很多属性,比如说 topic,tag,shadingKey,msg, delayTime 等等,但是我希望别人在使用这个方法的时候传入 messageDTO 是我想要的,即我会将无参构造方法私有化,因为我不想让别人使用无参构造new一个对象出来,(因为自己去set可能某一些参数设置有遗漏),然后只限制了 几种构造函数,或者使用静态方法来
原创
5972阅读
1评论
0点赞
发布博客于 3 月前

如何读源码更有效--直播

一、背景很多朋友在读源码收获不是很大,主要原因:缺乏整体思维,迷失在细节中(跳来跳去跳晕了)缺乏思考(学而不思则罔,思而不学则殆!!!)不知道读源码究竟读什么(设计思想)角度单一(解决问题角度、性能优化角度、设计模式角度、每次提交了、单元测试、注释等)方法单一(不懂的高级的调试技巧,不懂的时序图插件)输出最近开了一场直播来讲述以下内容:读源码究竟读什么?读源码的核心思想读源码的常见技巧二、录播内容
原创
108阅读
0评论
0点赞
发布博客于 3 月前

微服务的设计原则。

发布Blink于 3 月前

Java 8 ArrayList hugeCapacity 函数与 MAX_ARRAY_SIZE

1、背景今天有一个朋友问到一个为什么 ArrayList 源码扩容方法中,数组长度最大值是 MAX_ARRAY_SIZE = Integer.MAX_VALUE - 8 的问题(真的是MAX_ARRAY_SIZE? )。并给出下列截图:2、别急,让我们捋一捋我们先搞清楚这里没几个变量的含义:min capacity 是最小容量old capacity 是原始数组容量newCapacity = oldCapacity + (oldCapacity >> 1) 是预计要扩容到的
原创
3961阅读
1评论
3点赞
发布博客于 3 月前

ddd 四层架构

发布Blink于 3 月前

性能参考

发布Blink于 3 月前

用长连接也来代替轮询,如果连接的数量特别大会不会有问题?

发布Blink于 3 月前

我们tl真不错,出事自己先背着,功劳帮员工争取,平时分享很多不错的资料,帮助大家成长。

 
发布Blink于 3 月前

程序员进阶之排错和避坑方法GitChat将要出炉

一、背景程序员的职业生涯中会遇到无数个 BUG。面对同一个问题,不同人解决的速度体现着个人的技术水平。一分钟就可以定位问题的程序员和一个小时还毫无头绪的程序员注定拥有不一样的发展轨迹。二、破解之道定位问题是解决问题的前提,如何尽可能避免出现 BUG 也是一门学问然而,现在很少有系统化介绍这一块内容的高质量文章。为了弥补这一块空缺,我将自己在工作中积累的一些经验通过本 Chat 系统化输出给大家,让大家在遇到问题时有清晰的思路,可以快速定位问题,提高技术水平;让大家了解如何尽量避免出现 BUG,少走
原创
17265阅读
2评论
1点赞
发布博客于 3 月前

略谈为什么要重视文档写作

一、背景今天在知乎上看到一篇《作为IT行业过来人,你有什么话想对后辈说的?》问题的答案,其中一小段摘录如下:非常值得在这里给大家分享一下。二、感悟2.1 亲身体会见过很多刚毕业的同学缺乏工作经验又急于表现,为了尽快做完项目,在没有了解清楚相关背景和价值,没有做好完整的技术方案时,就着急开始编码。导致很多项目后面会有推倒重来的情况,也没有充分自测的意识,导致项目质量也不是很高。这或许就是所谓的“欲速则不达”吧。2.2 重视设计这里所说的写文档更准确说应该是编写技术方案.
原创
12233阅读
0评论
3点赞
发布博客于 3 月前

今天看知乎有一句话非常赞同,分享在这里: 一个程序员,应该花80%的时间做代码设计、画UML图、画时序图, 20%的时间写code和 debug;菜鸟程序员的这个比例恰好是反的。一句话,不论这个需求有多紧急,你都一定要“想好再动手”;“想好”的标志就是设计 文档写好了;文档一旦写好,写代码就是纯粹的无脑工作。 写文档的目的是让你在code的时候,不需要停下来思考更不需要推倒重来。

发布Blink于 3 月前

语雀三个月会员,兑换码领取

1 背景之前一直在用 notion ,但是后面发现国内访问速度不太行,导致在移动端查看和分享不太方便。最近将知识库的整理放到语雀上,虽然还有很大的成长空间,但是用起来还不错。语雀是由支付宝出品的知识管理及交流工具,为个人、团队及企业提供了全新的知识管理体验。与十万阿里员工一起,进入全新的知识交流时代。最近语雀在搞活动,大家感兴趣可以试试。2 推荐2.1 注册如果没注册,大家可以在这里去注册。2.2 三个月会员领取领取页面https://www.yuqu..
原创
17996阅读
2评论
0点赞
发布博客于 4 月前

谈技术博客写作

【DIY Plus】技术写作一、背景1.1 关于技术直播https://gitee.com/DIY_PLUS/topic_record延续孤尽老师 DIY 一期的精神。DIY班:其一,Deeply Inspire Yourself 深度激发自己其二,Do It Yourself 实践出真知新人成长困境:工作中都是自己探索,很容易走弯路,成长速度有限。 问同事和领导,问少了可能不会,问多了容易被认为能力不行。...
原创
17289阅读
1评论
2点赞
发布博客于 4 月前

2020年10月24 技术分享直播第十五期Apollo

今晚将会有一场技术关于Apollo 的技术直播。1、直播简介姓名/昵称:DMZ自我介绍:程序员分享内容介绍:Apollo分享时间:晚八点半内容简介:1.什么是Apollo?做什么的?2.配置中心的选型,为什么选用Apollo?3.Apollo拉取配置的原理4.Apollo热更新的实现原理5.Apollo的其它实现细节(选讲)适用人群:1.正在使用Apollo的同学2.目前公司还没有选用配置中心的同学3.对Apollo实现原理感兴趣的同学大致环节1 闲聊十几分钟2 开讲3
原创
260阅读
0评论
0点赞
发布博客于 4 月前

今日头条信息平台,抖音、快手视频平台,都使推荐系统。不断强化你喜欢看的内容。 通过不断“重复”不断强化自己的认知,看到大多数视频都这样,导致认为无法接触各种不同的见解。 如果青年时期就不断刷这种视频,人的认知更容易固化和偏激。 未来国家估计会出台相关措施。 作为个人而言要兼听则明,多元化学习比较好。

 
发布Blink于 4 月前

Java API Best Practices

Java API Best Practices 。 Java API 最佳实践英文版,挺不错!
pdf
发布资源于 4 月前

what to look for in a code review.pdf

what to look for in a code review。 Jetbrains 的 Code review 文档,参考价值极大,超级推荐!!!!!
pdf
发布资源于 4 月前

Plumbr Handbook Java Garbage Collection-2015-英文版.pdf

Java 垃圾回收经典手册,讲得特别清楚,非常推荐!
pdf
发布资源于 4 月前

2020年10月2日《谈技术博客写作》直播

1、 背景计划 2020年10月3日开一场《谈技术博客写作》的技术分享直播。分享内容点:(1)写技术文章的意义(2)技术文章的认知(3)技术文章的写作经验(4)心得体会分享内容的闪光点:CSDN 博客专家,拥有 200多万阅读量。《解锁大厂思维:剖析《阿里巴巴 Java 开发手册》》专栏作者,5000多销量,拥有多年技术文章写作经验。会讲解为什么推荐大家写技术文章(写技术文章对技术成长的帮助);自己积累的一些技术文章写作经验;会讲讲自己的体会。2、时间和方式2.1 流程先分享经验,然
原创
312阅读
2评论
0点赞
发布博客于 5 月前

数据库逻辑设计之三大范式通俗理解

一、第一范式1NF是对属性的原子性,要求属性具有原子性,不可再分解;表:字段1、 字段2(字段2.1、字段2.2)、字段3 ......如学生(学号,姓名,性别,出生年月日),如果认为最后一列还可以再分成(出生年,出生月,出生日),它就不是一范式了,否则就是;二、第二范式2NF是对记录的惟一性,要求记录有惟一标识,即实体的惟一性,即不存在部分依赖;表:学号、课程号、姓名、学分;这个表明显说明了两个事务:学生信息, 课程信息;由于非主键字段必须依赖主键,这里学分依赖课程号,姓.
转载
242阅读
1评论
2点赞
发布博客于 5 月前

最近出了一个GitChat,名称《性能优化方法论》 性能优化是很多 Java 程序员希望彻底掌握的一门技能。 很多人都想学好性能优化,希望能够在自己的工作中灵活运用提高性能,从而为用户提供良好的用户体验。 然而,很多人在设计技术方案或者编码时缺乏系统地、方法论级别的指导,导致想做性能优化时缺乏思路。 俗话说:“授人以鱼不如授人以渔”。通过本 Chat 的学习,你将掌握系统地性能优化方法论,对从性能优化视角下深入理解 Java 常见的中间件的设计,对设计出合理地性能优化方案,对大家的学习进阶会有较大地帮助。 在本场 Chat 中将会讲到如下内容: 性能优化的本质 性能优化方法论的源泉 性能优化的方法论各种优化角度解读 性能优化的注意事项 性能优化方法论在 Java 常见中间件中的体现 结合具体场景谈性能优化方法论如何落地 https://gitbook.cn/gitchat/activity/5f4e5ff2f9fe2a0860815500

 
发布Blink于 5 月前

真搞不懂为啥几乎所有软件,都是密码输错用户名和密码都给清空。 然后用户还得把用户名和密码重新输入,好浪费时间。

 
发布Blink于 3 月前

IDEA 使用SequenceDiagram插件绘制时序图

最近看代码,由于代码的调用层级深度比较多,层层深入到某处时,已经忘记了身处何处,虽然自己可以使用一些画图工具来时序图,但是,这种情况下,自己画时序图很繁琐,比较浪费时间,上网找了一下IDEA有一个插件可以自动生成时序图,工具名称:SequenceDiagram下载安装  方式1  可以在IDEA的Plugins中搜索上面的插件名,就可以安装插件了,如下图:    方式2  如果在IDEA的插件搜索中未找到插件,可以从官网上下载,然后在IDEA中选择“本地安装”即可,插件的..
转载
1516阅读
3评论
8点赞
发布博客于 5 月前

不得不说blink的花名设计非常反人类,为啥不能自定义?为啥都是四个字?为啥都是武侠,古代历史人物? 无力吐槽。

 
发布Blink于 6 月前

书架的书超过 300本,今天整理下书架,把部分已经看得比较不错的京东、当当买的正版书送给了技术群的几位同学。 ---- 1 《重构》,最新版 -> 纸老虎 2 漫画算法 -> 我是一个小菜鸡 3 《Spring 5 核心原理》 咕泡学院 and 《软件测试之道》-> 梦醒 4 《Spring 实战》 -> 泽裕 5 《Netty 实战》 -> O 6 《整理的艺术》 -> 烟雨平生 7 《大象 UML》 -> 王旭 8 《重构》第一版、《代码整洁之道》 -> 严小鱼鱼 书籍已经全部送出。 明天(周三)下午下班寄出去。 现在不吹水,认真讨论技术,分享经验的群真的不多了。

发布Blink于 6 月前

最近看混沌大学的课,有一个观点非常值得深思。 方法不好,却不愿改变,却期待仅仅通过更加努力取得翻天覆地的变化。 在我看来只有方法和思维的改变才能引起质的改变,就像数学中的不同函数,就像计算机中的不同算法的时间复杂度。 不同的方法和思想是是完全不同的发展曲线。 但是很多人由于舒适区的原因,总是不愿改变。

发布Blink于 4 月前

你真的理解Java 字符串的不可变性吗?

一、背景字符串的不可变性可以说是面试中的一个常见的“简单的” 问题。常见的回答如:字符串创建后不可改变。字符串的不可变性是指字符串的字符不可变。String 的 value 字符数组声明为 final 保证不可变。真的是这样吗?下面我们再思考两个问题:那么字符串的不可变究竟是指什么?是如何保证的呢?下面看一个奇怪的现象:在程序一段程序的最后执行下面的语句居然打印了 “aw” 为什么?// 前面代码省略System.out.println("ab");建议大家先思考,然后再看下
原创
19146阅读
6评论
15点赞
发布博客于 6 月前

为什么你看书记不住,记住不会用?-我的技术学习方法论

一、背景最近有些同学遇到一些困惑,比如看书,看了容易忘,记住不会用。这是非常普遍的问题,也是我曾经遇到过的问题。那么如何解决呢?这就是本文重点要讨论的内容。二、原因分析2.1 “看着答案做题”或者称为“背诵 or 记忆”我们读书的时候,书上直接将(可能是最优的)答案告诉你。你并不需要进行深度思考就认为一切顺理成章。但是“看着答案做题”危害很大。试想一下,如果你是一个高中生,如果你每次做数学题都是直接看着答案,你会很轻松,会认为就该这么解。但是一旦脱离答案,你将手足无措,和答案在手时完全不
原创
18950阅读
0评论
17点赞
发布博客于 6 月前
性能优化的核心思路,干货分享
发布Blink于 7 月前

性能优化的核心思路,干货分享

一、背景平时技术交流的时候,很多同学都会问一些性能优化方面的问题。比如:有一张订单表为了保持订单记录,更新数据时不能删除,需要打算加上版本号,查询时取版本号最新的给前端,还有场景是查询订单历史给前端。订单表量一般不会太小,每次先分组查询取出最大的一条,然后外层再去取对应的数据再分页显然性能不好。怎么办?可能也会有人会给出一些建议,然后呢?下次在遇到怎么办?网上很少有文章系统讲解性能优化的相关方法论,所以借着这次机会总结出来,分享给大家。俗话说授人以鱼不如授人以渔,本文将自己的性能优化方法
原创
18010阅读
3评论
15点赞
发布博客于 7 月前

mysql 5.6 order by limit 排序分页数据重复问题

0 问题描述在MySQL中我们通常会采用limit来进行翻页查询,比如limit(0,10)表示列出第一页的10条数据,limit(10,10)表示列出第二页。但是,当limit遇到order by的时候,可能会出现翻到第二页的时候,竟然又出现了第一页的记录。具体如下:SELECT `post_title`,`post_date` FROM post WHERE `post_status`='publish' ORDER BY view_count desc LIMIT 5,5使用...
转载
478阅读
0评论
0点赞
发布博客于 7 月前

为什么不推荐使用BeanUtils属性转换工具

1 背景之前在专栏中讲过“不推荐使用属性拷贝工具”,推荐直接定义转换类和方法使用 IDEA 插件自动填充 get / set 函数。不推荐的主要理由是:有些属性拷贝工具性能有点差有些属性拷贝工具有“BUG”使用属性拷贝工具容易存在一些隐患(后面例子会讲到)2 示例首先公司内部就遇到过 commons 包的 BeanUtils 进行属性拷贝性能较差的真实案例,然后该同事换成了 Spring 的 BeanUtils 性能好了很多,感兴趣大家可以使用性能测试框架或者基准测试框架去对比,这里就不对
原创
28161阅读
9评论
25点赞
发布博客于 7 月前

含有泛型的 JSON 反序列化问题

含有泛型的 JSON 反序列化一、背景二、分析2.1 事出诡异必有妖三、解决之道3.1 猜想验证3.2 举一反三四、总结一、背景今天无聊之园提了一个问题,涉及的示例大致如下: public static void main(String[] args) { String jsonString = "[\"a\",\"b\"]"; List<String> list = JSONObject.parseObject(jsonString, List.c
原创
10925阅读
0评论
9点赞
发布博客于 7 月前

记一次保留订单历史记录的方案讨论

一、背景今天技术交流群里,段段同学提了一个不错的问题。描述如下:假设一条记录包含以下信息:(id,username,score,version),score每次变更,version就加1,对于username相同的数据,只有version最大的那一条是有效的,也就是Mysql按字段分组取最大值记录问题,怎么做才能使查询效率高呢存在的问题:加 version 之后查询最新的用子查询效率不高;建个额外的表记录id 和 version 然后联查,这种做法怪怪的,显然效率也不够高。二、 讨论出几个方案
原创
1556阅读
0评论
1点赞
发布博客于 7 月前

OSI七层模型与TCP/IP五层模型

一、OSI参考模型 今天我们先学习一下以太网最基本也是重要的知识——OSI参考模型。1、OSI的来源 OSI(Open System Interconnect),即开放式系统互联。 一般都叫OSI参考模型,是ISO(国际标准化组织)组织在1985年研究的网络互连模型。 ISO为了更好的使网络应用更为普及,推出了OSI参考模型。其含义就是推荐所有公司使用这个规范来控制网络。这样所有公司都有相同的规范,就能互联了。 2、OSI七层模型的划分...
转载
514阅读
0评论
0点赞
发布博客于 7 月前

《过目不忘的读书方法》读书摘要

最近读了桦泽紫苑写的《过目不忘的读书方法》,深受启发。摘录部分比较不错的表述:前言部分1 有大量的”输入“,才能有大量的”输出“。为什么要读书1 百货商场地下层的试吃理论1 网上的信息都是碎片化的,不成体系。2 一年就过时的是”信息“,十年都不过时的才是“知识”。3 网络上的是“信息”,书上的是“知识”。(指点有待商榷,但是大概率是这样;换句话说“经典的书上知识居多”)2 时间购买理论每个人每天都有 24 个小时,只有时间是最公平的。所以,到底能不能获得幸福,完全看怎么去利用有限的时间。
原创
19529阅读
3评论
7点赞
发布博客于 8 月前

arthas 执行ognl表达式ClassNotFoundException

1 问题描述不希望通过编码的方式,想通过arthas 获取spring 属性。参考一篇文章https://my.oschina.net/u/4255537/blog/3357593 根据applicationcontext 工具类获取配置属性的方法。实际执行时总是报找不到类, 但是通过sc 命令可以找到该类[arthas@312]$ ognl '#context=@com.xxx.ApplicationContextHelper@appCtx,#context.getEnvironment().ge
原创
1102阅读
0评论
1点赞
发布博客于 8 月前

参加孤尽老师DIY班一期的主要收获

一、背景前一段时间孤尽老师组织的 DIY 班一期结束,本人有幸走到了最后,成为最后的十几个人之一,收到了个人的证书、DIY纪念章和获胜团队奖杯。虽然每一期都会有人淘汰,但是正是因为这种淘汰机制,才能够淘汰掉一些不够坚持的人,只有有危机感才能更认真地对待 DIY 的每一份作业。只有珍惜机会,有毅力的人才更容易走到最后。历时一年多的 DIY 班,给自己带来了很多启发和成长,下面讲讲一些重要的体会。二、主要收获2.1 两种能力孤尽老师常提到的两种能力,也是 DIY班前几次作业中提到的:学习如何学习
原创
3323阅读
3评论
5点赞
发布博客于 9 月前

《码出高效》作者,孤尽老师的DIY班第一期结束了。从最初的上千人,到最后的十二个人,终于坚持到了最后。 Do it yourself! Deeply Inspire yourself! 不忘初心,继续前行。

发布Blink于 10 月前

疫情捐款过了一段时间,发了一份收据,意外。 希望捐款发挥了它的价值,帮助到了陌生人。

发布Blink于 10 月前

你真得知道Java 中有几种创建线程的方式吗?

一、背景本文给出两个简单却很有意思的线程相关的题目题目1:Java 中有几种创建线程的方式?如果面试中遇到这个问题,估计很多人会非常开心,然而网上的诸多答案真的对吗?题目2:public static void main(String[] args) { Thread thread = new Thread(() -> System.out.println("Runnab...
原创
1537阅读
5评论
3点赞
发布博客于 10 月前

docker for mac更换国内镜像源

一、背景最近想要下载 neo4j 的 docker 镜像,发现速度不是一般的慢,囧…于是乎,类似于 maven 有国内镜像,docker 是不是也有呢?搜了一下,的确有。二、用法1、打开 docker 选择 Preferences2、切换到 Daemon 选项卡,在 Registry mirrors 添加想要添加的国内镜像如:https://docker.mirrors.ust...
原创
9598阅读
0评论
0点赞
发布博客于 1 年前

Java 性能测试框架工具-JunitPerf

一、背景最近写文章需要了解和对比一些函数的性能差异,因此在网上找到了一个简单易用的 Java 性能测试框架 junitperf。官方介绍它的优势是:可以和 Junit5 完美契合。使用简单,便于项目开发过程中的测试实用。提供拓展,用户可进行自定义开发。二、范例2.1 依赖<!-- https://mvnrepository.com/artifact/org.junit.j...
原创
1175阅读
0评论
1点赞
发布博客于 1 年前

Java 14 instanceof 的模式匹配

Java 14 instanceof 的模式匹配1. 概述本文是 Java 14 系列教程的其中一篇,本文主要讲述 InstanceOf 的模式匹配。JEP 305 的核心目的是让创建对象更简单、简洁、可读性更强而且更加安全。2. 传统的 instanceOf 操作很多时候,我们需要检查对象的类型,然后根据类型去编写不同的逻辑。通常会使用 instanceof 进行判断,然后再对对象进行...
翻译
1008阅读
0评论
1点赞
发布博客于 1 年前
将一个接口响应时间从2s优化到 200ms以内的一个案例
发布Blink于 1 年前

将一个接口响应时间从2s优化到 200ms以内的一个案例

一、背景在开发联调阶段发现一个接口的响应时间特别长,经常超时,囧…本文讲讲是如何定位到性能瓶颈以及修改的思路,将该接口从 2 s 左右优化到 200ms 以内 。二、步骤2.1 定位定位性能瓶颈有两个思路,一个是通过工具去监控,一个是通过经验去猜想。2.1.1 工具监控就工具而言,推荐使用 arthas ,用到的是 trace 命令具体安装步骤很简单,大家自行研究。我的使用步骤是...
原创
30095阅读
15评论
59点赞
发布博客于 1 年前

深度剖析‘StringBuilder‘ can be replaced with ‘String‘ 提示

一、背景在写代码的时候使用 StringBuilder 进行字符串拼接时,IDEA 很可能会给出下面的提示: ‘StringBuilder’ can be replaced with ‘String’ 。那么为什么会给出这种提示?这种提示意味着什么?二、思考之前有讲过:“每一个疑问背后都隐藏着至少一个盲点和学习的绝佳机会”。因此我们不会轻易放过这个机会。另外很多人这个时候可能就要开始百度...
原创
4754阅读
6评论
5点赞
发布博客于 1 年前

临时文件传输工具推荐

一、背景在工作和学习过程中有时候需要临时传输文件,尤其是大文件。此时如果使用某度网盘,由于你懂得的原因,下载非常慢。因此需要寻找好用的替代方案。下面介绍两个用过的不错的临时文件传输工具。二、介绍2.1 牛奶快穿https://cowtransfer.com/优点:界面非常简洁,可以不用登陆即可添加文件获取取件码。缺点:免费用户限制较多。...
原创
1301阅读
0评论
1点赞
发布博客于 1 年前
代码之美:如何让编程成为一门艺术?
发布Blink于 1 年前

Java finally 的用法,看这一篇就够了

1.概述在本教程中,我们将研究 Java 中的 finally 关键字的用法。 我们将看到如何在错误处理中与 try / catch 块一起使用它。 尽管 finally 的目的是保证代码被执行,但是我们还将讨论 JVM 不执行 finally 代码的特殊情况。我们还将讨论一些常见的陷阱,在这些陷阱中,finally 块可能会产生意外的结果。2.什么是finallytry 关键字最后可以定...
翻译
4142阅读
0评论
7点赞
发布博客于 1 年前

使用OkHttp发送POST请求的快速入门指南

英文原文:https://www.baeldung.com/okhttp-post1介绍本文将介绍 OkHttp 客户端的基本用法。在本篇简短的技术文章中,我们将特别介绍 OkHttp 3.x 版本中发送Post请求的不同方式。2 基本的 POST 请求d我们可以使用 FormBody.Builder 构造基本的 RequestBody , 包含两个参数:用户名、密码,发送 POST请...
翻译
4210阅读
0评论
0点赞
发布博客于 1 年前

细微之处见真章之StringUtils的isBlank函数细节解读

一、背景技术群里有一个老铁分享了一段 commons-lang 的 StringUtils 工具类的代码:public static boolean isBlank(final CharSequence cs) { int strLen; if (cs == null || (strLen = cs.length()) == 0) { return true;...
原创
4646阅读
1评论
5点赞
发布博客于 2 年前

Java 中的拷贝构造方法

1.介绍Java 中的拷贝构造方法是一种使用该类的一个对象构造另外一个对象的构造方法。当需要拷贝一个带有多个成员变量的复杂对象或者想构造已存在对象的深拷贝对象时非常有用。译者注:本文内容很简单,但是很实用。拷贝构造方法实战中用虽然用的不多,但是是一个非常不错的技巧。2.如何创造拷贝构造方法要创建拷贝构造方法,首先需要声明带有和本类相同类型的参数构造函数:public class E...
翻译
3782阅读
0评论
18点赞
发布博客于 2 年前

简单源码解读之猜想验证

一、背景最近有一个朋友问,为啥 ArrayList 空参构造方法和有参构造方法的参数为 0 所用的空元素数组不用同一个。空参构造方法:/** * Constructs an empty list with an initial capacity of ten. */public ArrayList() { this.elementData = DEFAULTCAPACITY_E...
原创
661阅读
0评论
1点赞
发布博客于 2 年前

尽信书不如无书之获取枚举值代码优化

1 背景实际开发中根据枚举的某个属性获取枚举值非常常见。如定义一个枚举:@Getterpublic enum CoinEnum { PENNY(1), NICKEL(5), DIME(10), QUARTER(25); CoinEnum(int value) { this.value = value; } private fi...
原创
4022阅读
0评论
0点赞
发布博客于 2 年前

每一个疑问背后都隐藏着至少一个盲点和学习的绝佳机会

一、背景之前我好多次谈到:“每一个疑问背后至少有一个知识盲区,隐藏着一次极佳的学习机会”。今天结合一个具体的案例,谈谈这个观念,顺便谈谈如何正确提问。今天有一个朋友问到:请教一个问题 为什么用lombox的build构建一个对象内部持有的另外一个对象 用io的方式进行深克隆 拿到的两个内部对象是一样的 但是如果用set的方式给内部持有对象赋值 深克隆出来的就不是同一个对象...
原创
13886阅读
0评论
3点赞
发布博客于 2 年前
2019年Java生态状况
发布Blink于 2 年前
论所谓“适合自己的方法”
发布Blink于 2 年前

很多人总是想找到适合自己的方法,其实我们更应该找到高效的方法。 我们应该去适应高效的方法,而不是让各种方法适应自己。 很多人都觉得适合自己的方法是理所当然。 但是由于舒适区的原因,他们往往认为和自己不一样的方法,我们不认可的方法,我没有尝试过的方法,都倾向于否认和拒绝。 适合自己背后难道不应该是高效的方法吗? 寻找适合自己的方法,说明现在的效率还不够高。开始使用高效的方法必然就会有些不适,而且很多方法不可能立竿见影。 这个时候我们如果认为不适合自己,那我们怎么进步呢? 所以成功的人有很多好想法,好方法,越来越成功,大多数普通的人永远普通。

 
发布Blink于 2 年前

很多初学者,嘴上说想学好,很多时候总爱急于求成。 真正好的方法,好的教程,免费的不珍惜,收费的不舍得花钱,哈哈。

 
发布Blink于 2 年前

发现很多人学习知识容易进去一个怪圈。 不了解不知道就不会学,不学或者学不好就想不到用,用不到就以为没有用。 很多时候,学了才能想到用,学得好才能用它解决问题。

 
发布Blink于 2 年前

论所谓“适合自己的方法”

一、背景听到很多同学总是强调找到“适合自己的方法”。但是发现很多人其实并不能真正理解什么才是“适合自己的方法”,这是一个看似简单但是非常严重的问题。本文发表一下自己的看法,希望能给一些同学带来不一样的启发。二、分析2.1 所谓适合自己的方法很多人所谓的“适合自己 ”,会认为对自己高效,另外隐含的条件是 学起来舒服。但是这里有一个非常严重而又容易被忽略的情况。你想找到...
原创
9468阅读
0评论
4点赞
发布博客于 2 年前

2019年Java生态状况

译者注:本文主要介绍 2019年 Java的生态状况。文章非常简短,希望大家学习技术的同时可以关注Java的发展状况。0 背景在过去的几周中,我一直在进行2019年年度“ Java状态”调查。在调查的第6个年投,我们有6707名开发人员参与了调查的回答。现在是公布结果的时间????1 不同Java 版本使用情况毫不意外,直到现在 Java8 依然生产环境中...
翻译
872阅读
0评论
2点赞
发布博客于 2 年前

校验两个Java Date是不是同一天的N种姿势

一、背景本文将介绍比较两个java.util.Date对象是不是代表同一天的N种姿势。首先介绍 Java自带 API实现,然后会介绍几种类库实现该功能。译者:比较两个对象是否是同一天本身难度不是很大,重点提醒大家多了解用到的其他类库,未来更多时间相关的功能需求,可以通过相关类库更方便地处理。二、Core JavaDate类表示特定的时间瞬间,精度为毫秒。为了找...
翻译
834阅读
0评论
0点赞
发布博客于 2 年前
拓宽知识面的重要性
发布Blink于 2 年前

IDEA超赞插件推荐

配套视频:https://www.bilibili.com/video/av77581462/一、背景工欲善其事必先利其器,文介绍几款强大实用的 IDEA 插件,助力大家开发。以下插件大都可以通过 IDEA 自带的插件管理中心安装,如果搜不到可以去 IDEA 插件官网下载本地导入。具体安装界面不同版本 IDEA略有差异,请自行研究。如果连插件安装都不愿意学、学不会的话...
原创
14989阅读
5评论
15点赞
发布博客于 2 年前
为什么要推荐大家学习字节码?
发布Blink于 2 年前

为什么要推荐大家学习字节码?

配套视频:为什么推荐大家学习Java字节码https://www.bilibili.com/video/av77600176/一、背景本文主要探讨:为什么要学习 JVM 字节码?可能很多人会觉得没必要,因为平时开发用不到,而且不学这个也没耽误学习。但是这里分享一点感悟,即人总是根据自己已经掌握的知识和技能来解决问题的。这里有个悖论,有时候你觉得有些技术没用恰恰是...
原创
16325阅读
26评论
34点赞
发布博客于 2 年前

IDEA字节码学习查看神器jclasslib bytecode viewer介绍

一、背景很多人想学习Java反汇编后的字节码,但是一方面缺乏好的资料,另外一方面缺乏好的工具。关于资料大家可以看 《Java虚拟机规范》、《深入理解Java虚拟机》,还可以购买 JVM字节码相关的专栏。虽然大家可以使用 JDK 自带的 javap 命令行工具,但是总是有些不方便。那么有啥好的工具吗?有。叫啥?jclasslib bytecode viewer接下来详...
原创
13736阅读
6评论
24点赞
发布博客于 2 年前

Maven 如何引入本地jar包

一、背景通常大家需要引入一个第三放 jar 包,直接在 maven 仓库中搜索,然后将依赖的格式 copy 到 pom.xml文件中即可。然而有些情况需要引入本地的 Jar 包,比如:1、有些二方包合作开发者由于没有权限等原因暂时无法打到公司的maven仓库中,为了不影响开发进度,你可以引入本地的 Jar 包。2、由于某个三方包不在公司的maven 仓库,但是必须要用。3、使用...
原创
1481阅读
0评论
0点赞
发布博客于 2 年前

Java foreach中List移除元素抛出ConcurrentModificationException原因全解析

一、背景本文重点探讨 foreach 循环中移除元素造成java.util.ConcurrentModificationException 异常的原因。先看《阿里巴巴 Java开发手册》中的相关规定:那么思考几个问题:反例的运行结果怎样? 造成这种现象的根本原因是什么? 有没有更优雅地的移除元素姿势?本文将为你深度解读该问题。二、解读2.0 反例源代...
原创
1381阅读
0评论
2点赞
发布博客于 2 年前
Long的哈希值计算理念和哈希冲突的情况举例
发布Blink于 2 年前

《手册》详解 第2节学员提问之 ==150问题解析

一、背景码出规范:《阿里巴巴Java开发手册》详解 专栏刚发布, 其中 “第二节 02 Integer缓存问题分析”讲到:Integer var = ? 形式声明整型,最终会通过 java.lang.Integer#valueOf(int) 来构造整数对象。有一个学员提出了断点时出现 i =255问题,在另外一篇文章作了分析:https://dwz.cn/m1of2kIu...
原创
600阅读
0评论
0点赞
发布博客于 2 年前
Long的哈希值计算理念和哈希冲突的情况举例
发布Blink于 2 年前
Long的哈希值计算理念和哈希冲突的情况举例
发布Blink于 2 年前

Long的哈希值计算理念和哈希冲突的情况举例

一、背景《阿里巴巴 Java开发手册》的作者孤尽大佬举办的第一期 DIY 班,由最初的几百人,目前仅有60多人坚持到现在。其一,Deeply Inspire Yourself 深度激发自己其二,Do It Yourself 实践出真知其中第 20 期的题目是:自主选择一个类,说明它hashCode方法的设计理念和代码核心逻辑。本人选取...
原创
1648阅读
1评论
0点赞
发布博客于 2 年前

CSDN 1024程序员blink活动的获奖的图书已收到,感谢CSDN。 未来争取读更多的经典的书,写更优雅的代码,继续学习进阶。

发布Blink于 2 年前

很多人缺少的不是书而是好书。 很多人缺乏的不是好书,而是不懂懂得读书的价值。 …… 结合自己的理解把Java相关图书资料分层,分享一下。 越往下知识密度越高,越准确,越接近本质。

发布Blink于 2 年前
是什么扼杀了大学后的成长?
发布Blink于 2 年前

昨晚坐电梯发现各种血色手印脚印,惊! 还以为哪个程序员被祭天,突然想起来是万圣节。 今早公司发了一颗糖,造型不错。 加油coding。

发布Blink于 2 年前
细微之处见真章之JSON格式美化
发布Blink于 2 年前
细微之处见真章之JSON格式美化
发布Blink于 2 年前

细微之处见真章之JSON格式美化

一、背景今天 @段段 在技术群里提出一个问题:”如何实现JSON的格式美化“。具体含义是,通过后端代码实现将紧凑的JSON字符串变为更美观的形式。如下面的JSON字符串{\"age\":0,\"name\":\"张三\",\"sex\":\"女\"转化为如下图的效果:这个问题知道API的人或许一下就可以答上来,不知道的人可能第一反应就是百度。那么是否有更好的解...
原创
1998阅读
1评论
1点赞
发布博客于 2 年前
细微之处见真章之字符串超长省略功能
发布Blink于 2 年前

1024公司的福利,定制款可乐,小姐姐热舞。发图纪念。 只要有梦想,每天都是节,继续加油。

发布Blink于 2 年前

细微之处见真章之字符串超长省略功能

一、背景有这样一个需求:如果一个字符串超过某个长度,则超过该长度的部分用省略号代替。很多人会觉得这 so easy,有点 Java基础的同学都可以简单编写出来。那么我们来分析这个简单的问题。二、编码2.1 思路思路很简单,判断size 是否小于字符串长度,如果小于,则超过部分替换为 ... 即可。2.2 编码我们编码要多考虑一些:为了健壮性,我们...
原创
1700阅读
0评论
2点赞
发布博客于 2 年前

Java类文件研究的可视化工具classpy介绍

一、背景通常研究类文件或者java 反汇编会使用 javap命令。public class IntTest { public static void main(String[] args) { Integer a = 100, b =100, c = 150, d = 150; System.out.println(a == b); ...
原创
1691阅读
0评论
2点赞
发布博客于 2 年前

从IDEA代码调试器的threads选项卡的一个细节谈如何学习编程

一、背景今天技术群里@段段同学提了一个很有意思的问题, IDEA的调试时, threads选项卡里,方法后面的 数字是啥意思??有些同学说是代码行数。但是我们发现有些代码并不是代码行数,而且还有 -1, 这是什么鬼??我们从这个很不起眼的问题,来讲述如何分析问题,如何学习。二、研究2.1 猜测猜测要有上下文,首先这是调试界面,显然是给你提供调试的一些参考。而数...
原创
1074阅读
1评论
7点赞
发布博客于 2 年前

俗话说“教是最好的学”,写技术博客也是一种“教”的过程。 从在CSDN 发表第一篇文章到现在已经 7 年多了。 博客见证了自己的成长,从大学写到研究生再写到工作。 通过博客把自己学习和工作中遇到的坑和积累的经验都沉淀下来。 通过博客也认识了一些技术上有共同追求的同学。 [坚持]二字说起来最简单,做起来挺难。 有一段时间没怎么更新博客,是一个博友的鼓励让我更有信息坚持下去。 希望未来技术上能够更加精进,希望和更多志同道合的朋友一起成长,读更多的书,写更加优雅的代码。 不要因为可以不做,而都不去做什么。 要为了一些不为了什么的坚持。 stay hungry stay foolish。

发布Blink于 2 年前

子类使用lombok 的 @Builder 注解的正确姿势

一、背景在实际开发中,有时候需要对子类使用lombok的@Builder注解来使用builder模式构造该子类对象。父类:import lombok.AllArgsConstructor;import lombok.Data;import lombok.NoArgsConstructor;@Data@NoArgsConstructor@AllArgsConstructo...
原创
4125阅读
0评论
6点赞
发布博客于 2 年前

Java 的 finally 代码块的代码一定会执行吗?

一、背景对于很多初学者而言,会想当然地认为 “finally 代码块一定会被执行”,因此我们可以看下面这个案例:public class Demo { public static void main(String[] args) { try { BufferedReader br = new BufferedReader(new File...
原创
1896阅读
3评论
2点赞
发布博客于 2 年前

花式踩坑Java空指针和避坑的正确姿势

一、背景程序员写代码经常被调侃为 “写BUG”。然而开发中遇到的其中一个主要 BUG 就是 空指针造成的。很多人并不会认为预发空指针有多难,甚至有些人会认为自己如果写代码肯定会注意到。最大的问题是,我们写代码时很多空指针的情况并不是直接发生的,而是被“传递”过来的,导致没有留意。下面介绍几种工作中可能不经意中写出的,花式踩坑空指针异常的姿势。二、踩坑姿势2.1 自...
原创
593阅读
0评论
1点赞
发布博客于 2 年前

Java 数据分批调用接口的正确姿势

一、背景现实业务开发中,通常为了避免超时、对方接口限制等原因需要对支持批量的接口的数据分批调用。比如List参数的size可能为 几十个甚至上百个,但是假如对方dubbo接口比较慢,传入50个以上会超时,那么可以每次传入20个,分批执行。通常很多人会写 for 循环或者 while 循环,非常不优雅,无法复用,而且容易出错。下面结合 Java8 的Stream ,Function...
原创
5317阅读
1评论
7点赞
发布博客于 2 年前

记SwitchHosts导致解析不了localhost的坑

一、背景switchHosts是一个非常不错的支持切换host的软件,可以在 开发环境、测试环境、线上环境等之间自由切换。https://oldj.github.io/SwitchHosts/最近遇到一个问题,在关闭SwitchHosts时,启动内嵌的MySQL服务进行单元测试时,报错。核心意识是提示无法解析 localhost。二、问题分析但是此时SwitchHost...
原创
750阅读
0评论
0点赞
发布博客于 2 年前

是什么扼杀了大学后的成长?

一、背景在《谈舒适区和成长》一文中谈到过舒适区的问题。美国著名学者NoelTichy对于人的学习行为提出了著名的的行为改变理论。他将人的学习行为从里向外分成了舒适区、学习区和恐慌区学习行为如果做成一个圆圈,最中心的是“舒适区”,指对于自己来说是没有学习难度的知识,或者习以为常的事务,自己可以处于舒适心理状态。中间一圈是“学习区”,指对自己来说有一定挑战,因而感...
原创
5438阅读
19评论
13点赞
发布博客于 2 年前