3000 天,破茧成蝶
作者:沉默王二
Java 程序员进阶之路:https://tobebetterjavaer.com
大家好,我是二哥呀。
不得不说,中秋节是我们国家非常重要的节日之一。每年的中秋佳节,二哥都会收到一些博客社区寄来的礼品,这次有知乎、CSDN 和 Apipost,给大家小晒一波😄。
朋友圈有小伙伴留言说,“怎么才能像二哥一样,收到这些礼品呢?”我当时大言不惭回复他说,大概也就需要 3000 天的坚持吧!
(瞧我这得意忘形的死样子)
不过确实,从 2014 年开始写博客到现在,8 年的时间,粗略一算,真的有 3000 天了。
好了,接下来给大家分享一波二哥编程星球里一位球友的故事,这位球友一开始,有点温水煮青蛙的味道,上班 CRUD,下班躺尸,就这样从实习到工作,过了三年时间,但突然有一天,开始奋发图强,觉得不能再这么荒废下去了,于是来二哥星球开始了连续 90 天的打卡之旅,感觉蜕变了很多。
说真的,这位球友的坚持,远超二哥当年的努力程度。说来也巧,我们差不多都是工作 3 年后开始幡然醒悟的。来看看这位球友的故事吧。
坦白从宽😂
先来看一下球友的坦白从宽,可以说像极了二哥实习和毕业的那会。
作为一个 PHP 转 Java 的业务开发,经常对自己的 Java 基础是否扎实有个问号。实际业务上由于基本上都是 CURD,并没遇到什么困难,但越是这样有时候心里就越慌。
原来是想看二哥的《Java 程序员进阶之路》或者 JavaGuide,看了一部分,感觉还是想系统性的过一遍。于是,刷了一遍《Head+First+Java》、《Think in Java》。
看完后当时感觉自信心爆棚,于是去隔壁小傅哥的抽奖系统刷了一通,中间断断续续,现在差不多快完结了。
感觉快要步入刷的越多、心里越慌的程度了,大概是自己学的很多没真正应用落地。
比如小傅哥的重学设计模式,自己也跟着做完了,也输出了自己的博客,但还是没啥感觉。
反而在抽奖中实际体验过的模板模式,慢慢开始能落地到业务上了,感觉开始熟练化了。
所以除了输出,最重要的还是要落地到自己业务的实际代码中,如果没有实际项目,可以在自己的模拟项目中,先写一版,之后考虑如何重构。
今年除了抽奖,就是 TiDB 了,新型数据库,语法基本上兼容 MySQL,但用起来挺舒服的,不用分库分表了,去年引入到业务中了,由于遇到了一些问题,开始被迫倒逼系统性学习,TiDB 官网有相关的系统性学习视频,甚至还有考试。
哈哈哈,感觉二哥有空联合星球的小伙伴整理一下题库,边学习边考试,提高熟练度。
说了这么多,就是跟大家打声招呼!!!
然后列一下学习计划吧。
二哥的 Java 面试指南 带着疑问去做 Java 程序员进阶之路 源码学习:Spring、Mybatis 项目实战
打卡之旅
这位球友的毅力真的是没得说,从进入星球到现在,真的是没有间断过。起到了一个很好的模范带头作用,关键是,这样自律的表现,给他也带来了质的提高。二哥接下来就来挑一下球友的打卡记录分享出来,给大家鼓鼓劲和加加油💪🏻。
2022-06-06 20:57
2022-06-08 23:40
今天按计划开始 Java 基础,计划是这样的:
(1)CS Note、Java Gudie、Java 程序员进阶之路、Effective Java 把基础过一遍
(2)基础知识过的时候,整理一下基础的骨架
(3)对比三个 Guide 的基础骨架不同,合一把
(4)根据这份基础骨架后续定期复习,把容易忘记的,和一些能整理的点梳理出博客
今日份:CS Note(Java 基础 1~6 节)
2022-06-26 19:13
Java 程序员进阶之路 - Java 概述 Java 程序员进阶之路 - Java 基础语法 Java 程序员进阶之路 - 面向对象编程
今天开始二哥的进阶之路,这个真的是挺适合初学者,不过用来复习也很不错。还有几件小事:
一、文字勘误了 2 个小问题,提了个 PR。 二、final 方法中有一个不太理解的表述,二哥有空帮忙看下@沉默王二
这位球友非常认真,在阅读《Java 程序员进阶之路》的过程中还发现了一些小错误,并且提交了 PR。
2022-07-04 21:35
今天主要是 ReetrantLock 和 ReentrantWriteLock。
ReetrantLock
(1)非公平锁实现 AQS 父类 AbstractOwnableSynchronizer 记录了持有锁的线程 AQS state 属性记录重入次数,来保证加解锁 (2)公平锁实现 hasQueuePredecessors() 从后往前找最后一个等待线程,若不为自身线程,说明前面还有任务等待,无法获取锁
ReentrantWriteLock
(1)核心 state 高 16 位读锁次数,低 16 位写锁次数 (2)写锁 若读锁已被读线程获取 or 写锁已被其他写线程获取,则写锁获取失败 (3)读锁 写锁被其他进程获取,读锁获取失败,否则 CAS 更新,CAS 失败,走 fullTryAcireShared() 自旋
这位球友的打卡内容越来越认真,并且开始画思维导图总结了。
2022-07-10 12:45
一、6 月学习小结
之前笔记里也有不少东西,不过我都只是在附图中展示了一下,现在开始慢慢抽出来。
还是有点好处的,感觉又总结了一遍,后面的博客计划应该能省挺多事,之前只是把一些关键点记下来,以备后续整理,现在只是相当于提前了。
而且并发编程这块确实有挺多很有意思的地方。
因为并发编程这款很多和源码有关,不太好写整块的东西,都是一个个执行步骤,之前那种直接把 markdown 贴出来,自己有时候在外边想看一眼也不是很好看。
此刻推荐一个神器 markmap,可以将 markdown 转成思维导图,看上去就很清晰了。VS Code 搜索:markmap(31 K stars)
这算是自己最近的学习经验总结吧!
二、7 月份计划
二哥的 Java 程序员进阶之路完结 冰河大大的 SpringCloud Alibaba 实战开始
7 月份不贪多,需要恢复恢复状态,初步目标 2~3 篇!后续可能会继续穿插 Spring 和 Mybatis 的学习来把基础打得更扎实一点,具体可能还是要看后面的一些学习感觉,是先把实战篇完成,还是穿插着来。
2022-07-14 21:52
今天主要是并发编程的计划任务-ScheduledThreadPoolExecutor。
用途
(1)在给定的延迟之后运行任务 (2)周期性地重复执行任务
2.为什么不用 Timer?
(1)Timer 单线程模式,在执行任务时某个 TimerTask 耗时久,会影响其他任务 (2)Timer 任务调度基于绝对时间,对系统时间敏感 (3)Timer 不捕获 TimerTask 执行时抛出的异常,因此一个任务失败,会影响其他任务
ScheduledThreadPoolExecutor 结构
(1)继承 ThreadPoolExecutor (2)实现 ScheduledExecutorService
schedleAtFixedRate()
(1)在 initialDelay 后第一次执行任务 (2)每隔 period ,再次执行任务
schedlueWithFixDelay
(1)在 initialDelay 后第一次执行任务 (2)每当任务执行完成后,等待 delay,执行任务
主要方法执行逻辑(见思维导图)
2022-08-07 19:13
2022-09-08 23:26
2022-09-12 21:48
二哥点评
这位球友的打卡内容真的是非常非常的仔细,就连中秋假期也没有停下脚步。他的这种毅力让我想起了 2014 年开始坚持写博客的那段“光辉岁月”(大言不惭,😝)
不再去埋怨环境不好啊,不再去埋怨公司没有发展前景啊,不再去抱怨队友不给力啊,就是踏踏实实地专注于自身的成长,每天积累一点点,一点点。
久而久之(8年时间,3000天),二哥变成了你们眼中的这个样子,每到中秋节之前,各大博客平台都“非常积极”地送来中秋礼品(装,让我这个逼再装会)
有不少读者经常给我抱怨说,自己这个学不会,那个没有耐心,本质的原因就是因为你关注了太多外界的干扰因素,没有几个人能做到日复一日的坚持。
可一旦你做到了,根本就到不了拼天赋、拼家庭背景,就能在学生阶段、工作阶段脱颖而出。
好了,心灵鸡汤就先灌到这吧,你们小心点喝,别噎着,😃
ending
一个人可以走得很快,但一群人才能走得更远。当你处在一个学习氛围浓烈的环境中时,就会不由自主地往前冲刺。二哥的编程星球已经有 780 多名 球友加入了,如果你也需要一个良好的学习氛围,戳链接加入我们吧。
星球置顶帖里的知识图谱和精华贴里已经沉淀了非常多优质的内容,多看看这些,相信能帮助你走的更稳、更远。
没有什么使我停留——除了目的,纵然岸旁有玫瑰、有绿荫、有宁静的港湾,我是不系之舟。
欢迎点击左下角阅读原文了解二哥的编程星球详情,这可能是你学习求职路上最有含金量的一次点击。