Easy Netty 系列(一):netty 入门

摘要:这是最近学习的一些成果,预计会有十几篇文章,我准备用通俗有趣的语言把它分享给你,让你学习 Neety 变的 Easy,敬请期待。

当我们打开 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 是优良网络编程框架。

网络编程常见名词介绍

这篇文章总结了网络编程常见名词汇总,是博主自己的理解,如果和你的有出入,一切以你为准,博主欢迎交流。

开源|一个操作日志工具

image

摘要:业务系统中难免要记录敏感操作,可以通过硬编码或者简单注解实现,但是都不够优雅,今天分享一个自己写的日志工具。

这是参考美团的一篇文章所实现的日志工具,能够灵活地记录操作日志,并且具有较好的扩展性,欢迎尝鲜。下面是这个工具的介绍和使用教程。

代码仓库:https://github.com/elltor/oplog

今天1024节日快乐

去年过了第一个 1024 在实验室的创客中心,今天在外地。去年 1024 写了一篇文章,记录了属于程序员的仪式感,今年也应该写篇文章记录一下,毕竟每年都是一个特别的 1024。

实验室今年也举办了 1024 活动,群里发了些照片,保存了一些图片留念。

前端技术分享

这是在 TEAM 的第二次分享,第一次分享的是加密技术,这次分享些前端知识,即使做为后端开发工程师也应该了解些前端知识。所有的内容如下:

幻灯片1

给一位陌生网友解决编程疑惑

今天有位小伙伴加我,问我 Java 应该怎么学,编程学习没有捷径,需要自己坐得住、耐得住性子多敲代码多实践

如果是一个新手,建议先学个简单的编程语言养成编程思维,捅破编程的第一层窗户纸,很多同学没有入门的原因就是因为这个。分两方面说,如果时间充裕,建议写个小游戏练手,是比较锻炼自己的基本功,同时遇到问题及时谷歌百度也可以培养解决问题的能力,这个过程需要多坚持,可能会试很多错但会收获很多;如果时间不充裕,建议就跟着网上的教程视频做,通常这个过程不会碰到太多问题,也不需要思考太多,因为坑和问题都给你设计好了,因此需要自己鼓捣(动脑思考)多实现些功能。

北京沙河水库

21 年 9 月 21,晴,中秋,来沙河的水库垂钓。

Shell|Mac OS批量文件编码转换工具

前言

本来想查看 win 电脑上的一些源码,奈何在 Mac 上都乱码了,于是网上搜集了一些解决办法,网上多数都是针对单文件的,而我的源码文件是比较多的,因此写了个脚本进行批量处理,我先介绍单文件编码转换方法,最后放上批量转换的脚本。

单文件编码转换

第一种,直接使用 vi 编辑器调整编码方法。输入以下命令。

1:set fileencoding=utf-8

业务思考|项目国际化处理

最近在做国际化相关的工作,需求是在「English」状态用户的名称和部门的名称显示英文字段,实体中有 name 和 englishName,当用户选择英语时 name 需要被填充 englishName,这种情况不像系统字段的国际化,系统字段的各个语言是固定的,而用户的英文名称是变动的。为了处理用户的不同语言选择需要写很多 if 或者 switch,因此当 VO、DOT、Model 对象多了就会出现很多形式相似的代码,像下面这样。

业务系统会有多处与下面雷同的代码,因为不同的 VO、DTO 需要不同的处理。

 1    public void i18nHandler(UserVO vo, User user){
 2        LanguageEnum language = currentLanguage();
 3        switch (language){
 4            case EN:
 5                String englishName = user.getEnglishName();
 6                if(StringUtils.isNotEmpty(englishName)){
 7                    vo.setName(englishName);
 8                }
 9                break;
10            case JP:
11                String jpName = user.getJpName();
12                if(StringUtils.isNotEmpty(jpName)){
13                    vo.setName(jpName);
14                }
15            case ZH:
16            default:
17                // 缺省默认中文
18        }
19    }

Java热部署工具JRebel

之前我一直抵触热部署工具,一是因为之前项目启动都比较快,二是对 spring 的热部署工具有不好的印象——使用过程中出先问题很难排查,直到现在启动比较大的项目一次要消耗掉 5 ~ 10 分钟,真能在期间喝杯咖啡了,忍无可忍了于是又想起了热部署工具,否则一上午也调试不了几次。

今天体验了一下 JRebel 还不错,推荐一下。公司内部开发的也有热部署工具 🔧,不过问同事了体验不是太好,不过能开发这种工具的是挺厉害,虽然不认同工具但对他的技术是认可的。

关于热部署相关工具,spring 热部署工具 spring-boot-devtools , idea 也有热部署工具,还有收费的 JRebel。

JRebel 下载安装教程(亲测可用):点击跳转

果然,人要善于利用工具,把自己从繁忙、低效中解放出来,把空出的时间用来提升自己、社交或娱乐。