Java|CountDownLatch

CountDownLatch 是一个线程栓子,当计数到达 0 释放所有线程运行,它只能使用一次,CyclicBarrier 可以使用多次。

Java|ThreadLocal、InheritableThreadLocal、FastThreadLocal

  • ThreadLocal 既线程本地变量,可以使变量为线程私有,避免状态共享出现线程安全问题。
  • InheritableThreadLocal 继承 ThreadLocal 实现,可以使子线程共享父线程的 ThreadLocal。
  • FastThreadLocal 是 Netty 实现的一个 ThreadLocal,当从 FastThreadLocalThread 访问时,可以产生更高的访问性能,在 FastThreadLocal 内部使用数组中的索引来查找变量,而不是使用哈希码和哈希表。

JVM|笔记1

image JVM 如何执行 Java 字节码? 执行字节码既将字节码加载到方法区,实际虚拟机会执行方法区的代码 JVM 在执行字节码时有两种方式: 1)通过解释执行器解释执行; 2)通过即使编译器(Just-In-Time, JIT)进行编译(机器码),使得 CPU 直接执行 解释执行的优势在于无需等待编译,而后者的优势在于实际的运行速度更快 HotSpot 默认采用混合模式,综合了解释执行和即时编译两者的优点。它先解释执行字节码,而后将其中反复执行的热点代码即时

读书|《程序员修炼之道》

我了解到这本书是在一个偶然的机会,当时向一位大佬请教后端方面的问题,他在邮件回复中给我推荐了这本书,这确实是一本好书,目前我读了不止一遍。

请教的问题

这并非是一本技术书,它主要讲如何成为更好的开发者。书籍的内容构造很巧妙,在一个主题结束后,会有一些同类的“线索”,每每读到这里便会有豁然开朗的感觉;另外一点是书的内容很贴切,它确实是开发中经常遇到的面临的,作者结合多年经验以及诸多开发者的反馈,总结了最佳实践和最佳原则,读后让人受益匪浅。

关于学习方法的一点感想

在大学时我总想一次就把知识吃透,所以在学习时经常深挖知识,因为深挖,有时会走很多弯路,因此我在学习一项技术时总慢一些,要说有收获吗,确实有,这使我了解的知识面更广,但同时我也在这上面浪费了很多时间,这些时间能让我做更多的事。我大三时才翻然悔悟,我悔我没有那么早明白。

在我们实验室,有的喜欢通过视频学习,有的喜欢看书,方式不同,各取所好。我以前挺鄙视通过慕课视频学习的,以为那些学不到高深的知识,现在我发现我忽略了理解知识与知识数量的关系,二者并不等价,理解知识才是正解,是一切的前提。

我带过几个学弟学妹,他们有时也问题我怎么学这些知识,我心里也没有准确的答案,因为我从来都是按照自己的学习方式学的,我把我的这种想法传达给了他们,并告诉他们一些方法和要点,让他们寻找自己的学习方式。

每个人的学习方式不同,学习过程也大相径庭,况且人的成长环境、生活习惯、年龄都在随时间不断变化,学习方式也需要不断调整,从而找到最适合自己的。我在学习这条路上踩了不少坑,有的让我受益匪浅,有的却浪费了不少时间,简单总结下我认为有哪些重要的点。

随笔|记向云风先生请教

我老弟最近要准备校招,他对游戏开发有意向,作为大哥的就准备为他搜集些资料,我现在做的工作与游戏开发相差有一些远,我怕给他参谋错了,我在网上也搜集了些博客和帖子,质量参差,于是就发邮件请教了游戏开发大佬云风先生,昨天云发先生回邮件给了我答复,非常感谢他能抽出时间解答我的疑惑,我知道到他这种境界的时间是最宝贵的,在后来的回信中我向云风先生表达了感谢。云风先生的回复除了解答我内心的疑惑外,还让我了解到他对“工程师”的认知,我简单总结了一些要点:

  • 兴趣很重要,有了兴趣可以进步的更快;
  • 工程能力很重要。我的理解是编码解决问题的能力、动手能力;
  • 代码可靠稳定优先于性能;
  • 编码规范与协作:写明显没有问题的代码。我们开发写代码绝不是只有自己看,有多少人写完代码后会反观自己:代码能否让别人轻松看懂?

道阻且长,行则将至;行而不辍,未来可期。

阅读|财务独立之路的条件

今天读阮一峰技术周刊,对开头介绍的“财务独立之路”的条件印象深刻,要点如下。

  1. 首要的努力方向,就是追求工资提升。目标很重要,并且做正确的事比用正确的方法做事更重要!
  2. 每过三年,就到别处面试。看清自己最好的方式就是通过别人。
  3. 建立良好的职业履历。
  4. 优先加入增长最快的领域。增长快的必然是一个新领域,会面临更多新问题新挑战,参与其中对自己提升最大。
  5. 投资你的钱。既要投资自己也要投资钱。
  6. 节制消费。

原文: http://www.ruanyifeng.com/blog/2022/01/weekly-issue-191.html

Shell 批量获取力扣做题量工具

这是一个批量统计国内版 LeetCode 做题量的工具,写这个小工具的起因是我们实验室准备每周统计大家 leetcode 的做题量,我们实验室十几个人,如果一人一个人看,太费时间了,作为高效程序员这不是我们做事的风格,于此就有了这个小工具。对于平常的事务我一贯对待的风格是:能规范化的尽量使其流程化,能流程化的尽量使其自动化。追逐效率工具能解放我们更多的时间,这没什么可说的。

2021 年总结:戒骄戒躁,看清目标,持之以恒,厚积薄发

由于这一年生活节奏很快,生活环境也发生了翻天覆地都变化——从学校到了社会,在这种变化下有时觉得自己目标也变得模糊了些,静下思考了半晌后我有了一些答案:“戒骄戒躁,看清目标,持之以恒,厚积薄发“,现在我把它当作了博客的 slogan,这样能常警示自己。我觉得今年在成长方面最大的收获莫过于这十六个字了,因此作为今年的总结,也是本文的标题。

在写这篇总结之前,我把前几年的总结看了一遍,除了感叹时过境迁外,其次是觉得之前写的中二了,我现在大概写不出那样的文章了,也许是心态不同了吧。

Netty 教程

Netty 简介

基于Netty 版本:4.1.70.Final

当我们打开 Netty 官网,会看到一个赫然的标题。

Netty is an asynchronous event-driven network application framework for rapid development of maintainable high performance protocol servers & clients. Netty 是一个异步事件驱动网络编程框架,用于快速开发可维护的高性能协议服务器和客户端。

从中我们提取一些重点词汇:异步、事件驱动、协议服务器。

没错,这就是 Netty 的特点,基于 Reactor 线程模型异步能力,基于 epoll 处理 IO 的能力,内置了许多协议处理器和编解码器,只需要简单编码就能实现高性能的服务器-客户端应用。

Netty 发展十几年,Java 生态许多高性能的中间件都是用了它,例如:Apache Flink、Apache Spark、Elastic Search 等,这说明了 Netty 是优良网络编程框架。

P.S. 你可以点击这个链接了解使用 Netty 的开源项目 https://netty.io/wiki/related-projects.html