随笔|记向云风先生请教

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

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

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

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

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

  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

Easy Netty 系列(七):EventLoop

EventLoop

EventLoop 是 Netty 的工作线程,EventLoop 是单线程的,每一个 EventLoop 永远只和一个 Java 线程绑定,这使得 EventLoop 处理读写事件是线程安全的(非共享 Handler)。

Netty 版本:4.1.70.Final

Netty 技术分享

这是实习期间在团队的第三次技术分享。

Easy Netty 系列(六):异常处理详解

异常处理

摘要:异常处理在任何系统中都是重要的组成部分,Netty 的异常处理是通过在 ChannelHandler 中重写 exceptionCaught 方法来实现,这篇文章聚焦于此。

Netty 版本:4.1.70.Final

Easy Netty 系列(五):ChannelHandlerContext详解

ChannelHandlerContext 的主要功能是关联 ChannelPipeline 与 ChannelHandler 然后管理 ChannelHandler,另一方面是管理和同一个 Pipeline 中的其他 Handler 的交互,也就是 Handler 之间的事件传递。

Easy Netty 系列(四):ChannelPipeline

ChannelPipeline 是 ChannelHandler 链的容器,可以说是业务逻辑处理的大动脉,所有的 IO 事件都在这里流转。

ChannelPipeline 负责 ChannelHandler 的编排,其次是传递 Channel 的事件通知。

通过图说明 ChannelPipeline 的要点

1、每一个 ChannelPipeline 和 Channel 唯一绑定

2、ChannelPipeline 是一个带有头和尾的双向管道,事件可以从头到尾流动,也可以从尾到头流动。

3、写 ChannelPipeline 的事件会是从 Pipeline 的头部开始流动事件

4、通常,如果事件从头到尾流动我们称为入站,从尾到头称为出站,入站的第一个 ChannelHandler 的序号是 1,出站的第一个 ChannelHandler 是序号 4。