Java架构师图谱之基础组件认知1——构建稳固基石,引领技术未来

本文深入讲解了Java架构师所需的基础组件,包括多线程的实现方式、高效网络层框架如ApacheMINA和Netty,以及插件如MavenHelper和Lombok的使用。还涉及了Java代码的加密策略,如对称和非对称加密,以及PBE算法的应用。

作为Java架构师,掌握基础组件的认知是构建稳固基石、引领技术未来的关键。基础组件是Java应用开发中不可或缺的重要组成部分,它们为系统提供了核心功能和支持,决定了系统的性能、可靠性和可扩展性。本文将带您深入探索Java架构师图谱中的基础组件认知,揭示其重要性,并为您呈现一个令人眼前一亮的技术世界

一、多线程

1.1继承Thread类:

Thread类本质上也是实现了Runnable接口的一个实例,表明一个线程的实例。启动线程的惟一方法就是经过Thread类的start()实例方法。start()方法是一个native方法,它将启动一个新线程,并执行run()方法。这种方式实现多线程比较简单,经过继承Thread类并复写run()方法,就能够启动新线程并执行本身定义的run()方法。

1.2、实现Runnable接口

因为Java是单继承机制,若是本身的类已经继承自另外一个类,则没法再直接继承Thread类,此时,能够经过实现Runnable接口来实现多线程。异步

实现Runnable接口并实现其中的run方法,而后经过构造Thread实例,传入Runnable实现类,而后调用Thread的start方法便可开启一个新线程。

1.3、实现Callable接口经过FutureTask包装器

首先须要一个实现Callable接口的实例,而后实现该接口的惟一方法call逻辑,接着把Callable实例包装成FutureTask传递给Thread实例启动新线程。FutureTask本质上也实现了Runnable接口,因此一样能够用来构造Thread实例。

1.4、使用ExecutorService、Callable、Future实现有返回结果的线程(线程池方式)

ExecutorService、Callable、Future三个接口都是属于Executor框架。可返回值的任务必须实现Callable接口。经过ExecutorService执行Callable任务后,能够获取到一个Future的对象,在该对象上调用get()就能够获取到Callable任务返回的结果了。

注意:Future的get方法是阻塞的,即:线程无返回结果,get方法会一直等待。

二、队列

只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表,队列具有先进先出FIFO(First In First Out) 入队列:进行插入操作的一端称为队尾(Tail/Rear) 出队列:进行删除操作的一端称为队头(Head/Front)

队列主要分为阻塞和非阻塞,有界和无界、单向链表和双向链表之分

三、高性能网络层

3.1、Apache MINA

为开发高性能和高可用性的网络应用程序提供了非常便利的框架;支持基于 Java NIO 技术的 TCP/UDP 应用程序开发、串口通讯程序

3.2、Grizzly

设计与一般的nio框架相比是比较不同的,主要不同点在于读和写都是采用blocking方式,并且使用临时selector ;

线程模型高度可配置,不过据作者介绍在跑一个selector主线程处理ACCEPT,用线程池处理read和write性能表现最好,这点不出意料。

3.3、Netty

提供了一组基于事件的API来开发高性能, 可管理的TCP/IP服务端或客户端应用程序. 对于要求建立高性能的网络应用来说,Netty提供许多基本特性,像readiness selection, 线程池, 写缓冲DoS的预防, 可重用的缓冲等.

3.4、NIO Framework

搭建在Java NIO library之上,封装了原始NIO的大部分复杂性。利用NIO Framework能够很容易地开发安全,高性能的Java网络应用程序。

3.5、QuickServer

一个免费的开源Java库,用于快速创建健壮的多线程、多客户端TCP服务器应用程序。使用QuickServer,用户可以只集中处理应用程序的逻辑/ 协议。

3.6、xSocket

一个轻量级的基于nio的服务器框架用于开发高性能、可扩展、多线程的服务器。该框架封装了线程处理、异步读/写等方面。

3.7、IOServer

高性能,易扩展的网络框架,相对于Apache的MINA更加轻量级,源码更容易读懂,源码中有大量详细的中文注解,是一个非常不错的学习框架,框架主要至力于解决中国市场上手机网游的服务器端程序的编写。

IoServer构建简单服务器例程(更详细的例程可下载例程包,或进入Wiki查看)服务器接收一个来自客户端的整型,并加一返回给客户端。

3.8、XNIO

一个帮助你简化NIO应用程序开发的Java包;

提供了一个独特和易于使用的API,用于结合blocking和非blocking操作,即使是在同一个channel上,也可以允许你利用简单和低延迟性的blocking I/O,同时还能获得非blocking I/O的优势;

还引入了一个功能强大的基于回调的接口,可以大大简化基于traditional state machine的非blocking应用,并让您的应用程序之间的吞吐量(throughput)和延时达到完美平衡。

四、插件

4.1、Maven Helper(Maven 辅助工具)
目前市面上大多数项目都使用 Maven 管理依赖,而 Maven Helper 简化了与 Maven 构建系统集成的复杂性。提供了依赖分析、冲突解决、依赖图可视化等功能,让我们能够更轻松地管理项目的依赖关系。
pom 文件内容页下方点击 Dependcy Analyzer

除了使用上面的方式,我们使用另外一种更加直观的树形图的方式查看依赖关系,点击鼠标右键 -> 选择 Maven -> Show Diagram

4.2、free-mybatis-plugin(MyBatis 插件)
目前市面上大多数项目都使用 MyBatis 作为持久层框架(Persistence Framework),而该插件可以为 MyBatis 框架提供支持,它可以自动生成 MyBatis XML 映射文件、代码导航和语法检查等功能,有助于加速 MyBatis 数据库访问层的开发。
该插件最大的优势是免费,有经济实力甚至可以使用功能更加齐全的 MyBatis Plugin。

4.3、Lombok(项目开发加速神器)
Lombok 是一个 Java 库,它通过注解简化了 Java 类的编写。它可以自动生成 getter、setter、equals、hashCode 等方法,减少了样板代码的编写,提高了代码的可读性和维护性。

4.4、Tabnine(智能代码补全)
Tabnine 是一款智能代码补全工具,支持多种开发环境,包括 IntelliJ IDEA、Visual Studio Code 等。它使用深度学习技术,根据上下文和项目的代码风格,为您提供智能的代码建议,节省编写代码的时间。
代码补全插件可以很大程度提高我们的生产力,市面上也有很多同类型的插件,大家可以选择一款喜欢的食用。

4.5、Alibaba Java Coding Guidelines
阿里巴巴Java开发规范(Alibaba Java Coding Guidelines)的IDE插件可以帮助我们在IDE(集成开发环境)中更容易地遵循和检查规范,以确保编写的Java代码符合阿里巴巴的最佳实践。插件提供代码审查、自动修复、格式化、代码提示等功能,以帮助我们编写符合规范的代码。

4.6、GitToolBox(Git 工具箱)
GitToolBox 是适用于 IntelliJ IDEA 的 Git 插件,它增强了与 Git 版本控制系统的集成。它提供了更多的 Git 命令和操作选项,帮助我们更轻松地管理版本控制。
• GitToolBox 有许多有有趣的功能,我主要介绍两个日常开发中最常使用的功能:
Inline Blame
可以让我们清楚的看到哪一行在哪一天被谁因为什么而修改

五、压缩

5.1、GZIP压缩:使用java.util.zip.GZIPOutputStream类可以对数据进行GZIP压缩,并使用java.util.zip.GZIPInputStream类进行解压缩。

5.2、ZIP压缩:使用java.util.zip.ZipOutputStream类可以对数据进行ZIP压缩,并使用java.util.zip.ZipInputStream类进行解压缩。

5.3、Deflate压缩:使用java.util.zip.Deflater类可以对数据进行Deflate压缩,并使用java.util.zip.Inflater类进行解压缩。

5.4、LZ77压缩:可以使用第三方库,如jzlib库,对数据进行LZ77压缩。

5.5、Snappy压缩:可以使用第三方库,如Snappy-java库,对数据进行Snappy压缩。

六、加密

Java代码加密是一种保护源代码的方法,可以防止他人对代码进行非法使用、修改或者盗取。在实际开发中,保护代码的安全性是非常重要的,本文将介绍几种常见的Java代码加密方法。

6.1、加密类型

6.1.1、编译加密

编译加密是指将Java源代码编译成字节码文件,使得源代码无法直接被阅读和修改。这种加密方法可以有效地保护源代码的安全性,但是无法防止反编译。常见的编译加密工具有ProGuard和Jasmin等。

ProGuard是一个开源的Java代码优化和混淆工具,可以对Java字节码进行优化和混淆,从而提高代码的安全性。ProGuard可以删除无用的类、字段和方法,减小字节码文件的大小,同时还可以对类、字段和方法进行重命名,使得代码更难以理解和修改。

Jasmin是一个Java汇编器,可以将Java源代码转换成Java字节码。通过使用Jasmin,开发者可以手动编写Java字节码,从而实现对源代码的加密。Jasmin提供了一套简单的指令集,可以用来编写Java字节码文件,然后通过Java虚拟机来执行这些字节码。

6.1.2、混淆加密

混淆加密是指通过对Java源代码进行混淆处理,使得代码变得难以理解和修改。混淆加密可以通过改变代码的结构、变量名和方法名等方式来实现。常见的混淆加密工具有ProGuard、DashO和Allatori等。

ProGuard在编译加密的基础上,还可以进行代码混淆。ProGuard可以对类、字段和方法进行重命名,使得代码更难以理解和修改。此外,ProGuard还可以对代码进行优化,删除无用的类、字段和方法,减小字节码文件的大小。

DashO是一个商业化的Java代码混淆工具,可以对Java源代码进行混淆和优化。DashO可以对类、字段和方法进行重命名,删除无用的类、字段和方法,从而提高代码的安全性和性能。

Allatori是另一个商业化的Java代码混淆工具,可以对Java源代码进行混淆和优化。Allatori可以对类、字段和方法进行重命名,删除无用的类、字段和方法,同时还可以对代码进行加密,使得代码更难以理解和修改。

6.1.3、透明加密

透明加密算法是一种强大的加密算法,它在加密和解密过程中对用户来说是透明的,用户无需关心加密和解密的细节。透明加密算法可以在不影响用户使用的情况下,对数据进行加密和解密操作。常见的透明加密工具有洞察眼MIT系统等。

洞察眼MIT系统是一款专业的企业终端安全管理软件,它可以保护企业内部的一切机密数据不被泄密,包括但不限于各类开发代码、三维二维图纸、设计软件源文件、办公文档、思维导图等等众多办公常用的文件。它的功能有透明加密、限制外发、涉密密级管理、上网行为管理、usb设备加密等等众多功能,可以有效保护企业数据的安全。

6.2、加密方式

6.2.1、对称加密:对称加密算法,使用Cipher类即可,以广泛使用的AES为例

6.2.2、非对称加密:非对称加密同样是使用Cipher类,只是传入的密钥对象不同,以RSA算法为例

6.2.3、密码学哈希:密码学哈希算法包括MD5、SHA1、SHA256等,在JCA中都使用MessageDigest类即可

6.2.4、消息认证码:密码学哈希算法包括MD5、SHA1、SHA256等,在JCA中都使用MessageDigest类即可

6.2.5、数字签名:数字签名使用Signature类实现,以RSA搭配SHA256为例

6.2.6、密钥协商算法:在JCA中,使用KeyAgreement来调用密钥协商算法,以ECDH协商算法为例

6.2.7、基于口令加密PBE:

通常,对称加密算法需要使用128位字节的密钥,但这么长的密钥用户是记不住的,用户容易记住的是口令,也即password,但与密钥相比,口令有如下弱点:

  1. 口令通常较短,这使得直接使用口令加密的强度较差。
  2. 口令随机性较差,因为用户一般使用较容易记住的东西来生成口令。

为了使得用户能直接使用口令加密,又能最大程度避免口令的弱点,于是PBE(Password Based Encryption)算法诞生,思路如下:

  1. 既然密码算法需要密钥,那在加解密前,先使用口令生成密钥,然后再使用此密钥去加解密。
  2. 为了弥补口令随机性较差的问题,生成密钥时使用随机盐来混淆口令来产生准密钥,再使用散列函数对准密钥进行多次散列迭代,以生成最终的密钥。

因此,使用PBE算法进行加解密时,除了要提供口令外,还需要提供随机盐(salt)与迭代次数(iteratorCount)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

京比特科技工作室

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值