Java热点及趋势
当我将要开口说Java历经风雨了20多年的时候,突然发现,它快30年了。Java语言作为静态面向对象编程语言的代表,极好地实现了面向对象理论,允许程序员以优雅的思维方式进行复杂的编程。在这近30年中,只有少数几年它的热度被C语言超越,其它时间是绝对领先。
一、热点方案介绍
1、微服务技术
在高并发高可用的开发部署环境下,微服务技术在当前占据了绝对C位。以SpringBoot 和SpringCloud系列技术为实现代表,通过项目间远程调用通信技术,实现多个服务器之间的互联互通。使服务更独立的同时也为整体项目紧密的联系到一起。
微服务的落地技术有很多,公司中微服务框架用的最多的就是spring cloud 系列技术,这个要好好的去学习。
2、远程调用技术
从Web service 到hession,再到dubbo,OpenFeign,远程调用技术在不断的发展,功能不断的强大 。远程调用的使用场景也越来越多,再也不是一个项目单打独斗的时代了。
隔离开系统之后,本来项目内的调用就要改成项目之间的调用了,项目之间的调用最常用的方式就是网络通信,而远程的网络通信调用函数的方式就是RPC(Remote Process Call)远程过程调用。
dubbo和OpenFeign是公司中用的最多的技术,这个要好好的去学习。
3、权限管理技术
根据系统设置的安全规则或者安全策略,用户可以访问而且只能访问自己被授权的资源,不多不少。权限管理几乎出现在任何系统里面,只要有用户和密码的系统。很少会看到没有用户和密码的系统了,所以权限技术是必须掌握的技术之一。
Spring Security 和 Apache Shiro 这两种技术基本霸占了权限管理框架的份额(如果用权限框架管理权限的话),前年的时候传智播客对市场进行调研的时候,Apache Shiro 的使用率是略大于Spring Security 的。但个人感觉Spring Security 依靠Spring全家桶系列技术,超越Apache Shiro也是指日可待。所以这两个技术一定要掌握,如果只愿意掌握一个,个人建议学习Spring Security。
4、消息队列技术
远程调用技术的使用场景是越来越广了,dubbo和openFeign也普及开来,但这两技术实现的是同步通信技术。如果项目间通信,并不需要返回值,采用异步通信技术是提高程序执行效率很有效的方法之一。消息队列技术就可以充当项目间异步通信的中间件。当然还有解耦合,流量消峰,日志处理,消息通讯,观察者模式开发等很多功能。总结一下就是:消息队列技术的使用场景特别多!
RabbitMQ、ActiveMQ、Kafka等等都是消息队列技术的软件。其中RabbitMQ和ActiveMQ市场占有率相对较高。ActiveMQ相对功能单一,RabbitMQ相对功能丰富,所以个人感觉RabbitMQ才是方向。Kafka常见于大数据中的消息通信。
5、分布式缓存技术
在分布式开发部署的环境下,用户对数据的显示速度要求并没有降低,所以怎么快速响应数据,就成了一个课题。分布式缓存技术也逐渐成为当下程序员必须面对的一个课题。分布式缓存经历了多个发展阶段,由最初的本地缓存到弹性缓存平台直至弹性应用平台,目标是朝着构建更好的分布式系统方向发展 。
在分布式系统中,缓存的应用非常广泛,从部署角度有以下几个方面的缓存应用。
CDN缓存;反向代理缓存;分布式缓存;本地应用缓存;
CDN缓存和反向代理缓存,就尽可能的交给运维人员。本地应用缓存应用缓存并不能在集群环境下同步缓存数据。分布式缓存就是我们程序员要完成的开发代码。常常是把缓存存储到NoSql数据库中。比如说Redis就是非常常用的分布式缓存存储库,因为它快!!所以Redis还是要掌握的。
> Redis是非关系型数据库,是数据库,是数据库,它不是为了缓存而生的,它还有很多其它功能。
6、全文检索技术
全文检索技术,就是以数据诸如文字,声音,图像等为主要内容,以检索文献资料的内容而不是外表特征的一种检索技术 。现在的程序数据越来越多,查询越来越多样性,全文检索技术也越来越平民化,公司中也逐渐铺陈开来。
全文检索过程分为索引、搜索两个过程,再说明白点,就是分为先把数据存进去,再查询出来。当然这个技术用于大批量数据。如果只有几百条数据的话,还是不要用了。
目前的技术实现有Lucene,Solr,ElasticSearch等。Solr和ElasticSearch都是对lucene的包装和扩展。所以公司中也就用solr或ElasticSearch。Lucene和Solr是一家的,所以Solr会相观资源更全一些。但相对来说ElasticSearch天生就为分布群集而生的,所以不管是现在还是未来,我看好的是它。所以ElasticSearch也是要学习的!
二、工作的热点技术
Git是目前最流行的版本控制系统。
**Git 是分布式的,SVN 不是**:这是 Git 和其它非分布式的版本控制系统,例如 SVN,CVS 等,最核心的区别。
公司的代码必定会用到版本控制,这个是必须掌握的技术。
Maven是一个项目管理工具,主要是对项目的构建,导包,编译,打包等管理工具,是程序员必备技术
maven项目分为pom 项目, jar项目 , war项目。pom项目常作为父项目, 进行 jar包进行统一管理 ;特别是版本控制 ; jar项目用于将该项目打包成jar包使用 ; war项目 , 也是最常用的项目 , 用于进web项目的开发.
maven项目的关系有三种, **依赖, 继承和聚合**. 添加被依赖的坐标,即可获得被依赖的jar 包与相关的类(通过创建该类的对象获取或者直接导入) ,这就是依赖关系 . 继承关系用于描述父子项目关系 ,子项目继承父项目,也就是继承pom项目 ,被继承后,通过groupid 与artifactId 即可完成对坐标的导入 .聚合项目用于对一个模块进行更细致的划分, 降低耦合度.
3、vsftpd技术
vsftpd 是“very secure FTP daemon”的缩写,安全性是它的一个最大的特点。 是用于上传图片和使用 FTP 协议访问图片服务器; 解决分布式环境的图片访问问题,使用vsftpd对图片做统一管理 。
vsftpd技术, 它是一块开源的ftp服务器软件,对linux上的ftp协议, 即对文件传输协议进保护. 增强文件传输的安全性与效率性. 而文件传输就涉及了上传和下载, 通过与java的整合, 来进行从虚拟机上文件的上传和下载
用户上传时,通过负载均衡服务器将图片上传到 ftp服务器上,它是一个专门用于存储图片的服务器,然后通过nginx反向代理, 使我们方便对文件的访问和下载 ,从而不会受限于单体接口图片存储的影响
nginx技术, 用于配置正向代理和反向代理 . 正向代理,代理在客户端,服务端不知道实际发起请求的客户端 反向代理,代理在服务端, 客户端不知道实际提供服务的服务端. 反向代理常用于分摊服务器的压力, 即实现服务器的负载均衡. 通过配置虚拟主机 .,实现一台主机对外提供多个web服务 ,且他们之间互不影响 . 虚拟主机的配置分为基于ip ,基于端口 ,基于域名的配置 .
Redis是一个开源的、**基于内存**的**数据结构存储器**,可以用作**数据库**、**缓存**和**消息中间件**。 在数据处理,模拟session,分布式锁等方面也有应用。特点是速度特别快,操作简单,功能强大。
6、JSONP技术
浏览器安全模型规定,XMLHttpRequest、框架(frame)等只能在一个域中通信。从安全角度考虑,这个规定很合理;但是,也确实给分布式Web开发带来了麻烦。其中XMLHttpRequest技术就是ajax请求的基础实现技术,所以当我们用ajax进行跨域请求数据的时候,会失败,因为浏览器认为我们的请求不安全。解决办法之一就是绕过浏览器的安全认证,JSONP技术就可以实现ajax请求的跨域请求数据问题。
MyCAT 是一个彻底开源的,面向企业应用开发的“大数据库集群” 支持事务、ACID、可以替代Mysql的加强版数据库。一个可以视为“Mysql”集群的企业级数据库,用来替代昂贵的Oracle集群。一个融合内存缓存技术、Nosql技术、HDFS大数据的新型SQL Server 。 结合传统数据库和新型分布式数据仓库的新一代企业级数据库产品 。
8、Swagger 技术
Swagger 是一个规范和完整的框架,用于生成、描述、调用和可视化 RESTful 风格的 Web 服务。
总体目标是使客户端和文件系统作为服务器以同样的速度来更新。作用是接口的文档在线自动生成及功能测试。
Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux或Windows 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。大量用于软件安装,软件集群部署。
10、数据库变化监控技术
canal 是阿里巴巴的一个开源项目,基于java实现,整体已经在很多大型的互联网项目生产环境中使用,是一个非常成熟的数据库同步方案,基础的使用只需要进行简单的配置即可。 canal是通过模拟成为mysql 的slave的方式,监听mysql 的binlog日志来获取数据,binlog设置为row模式以后,不仅能获取到执行的每一个增删改的脚本,同时还能获取到修改前和修改后的数据,基于这个特性,canal就能高性能的获取到mysql数据数据的变更。
日志是应用软件中不可缺少的部分,Apache的开源项目log4j是一个功能强大的日志组件,提供方便的日志记录。我们可以控制每一条日志的输出格式;通过定义每一条日志信息的级别,我们能够更加细致地控制日志的生成过程。最令人感兴趣的就是,这些可以通过一个配置文件来灵活地进行配置,而不需要修改应用的代码。
12、埋点技术
现在业界客户端埋点一般都是采取key-value的形式,key代表某个事件,value代表相应的参数值,埋点逻辑大概为:用户产生点击行为,生成一个点击事件,当有页面呈现在屏幕前时,生成一个页面事件。 埋点技术一般分为客户端埋点和服务端埋点,也可以两着结合。数据埋点主要是为了采集用户行为数据 。一般可以在用户操作功能按钮、行为、页面、支付流程、搜索等操作时进行埋点。
三、值得观望的开源技术
1、分布式事务Seata
Seata 是一款开源的分布式事务解决方案,提供高性能和简单易用的分布式事务服务 。Seata 融合了阿里巴巴和蚂蚁金服在分布式事务技术上的积累,并沉淀了新零售、云计算和新金融等场景下丰富的实践经验,但要实现适用于所有的分布式事务场景的愿景,仍有很长的路要走。 2019年1月产生。
Arthas(阿尔萨斯) 是 Alibaba 开源的 Java 诊断工具。可以解决下面这些让人脑壳疼的问题:
这个类从哪个 jar 包加载的?为什么会报各种类相关的 Exception?我改的代码为什么没有执行到?难道是我没 commit?分支搞错了?遇到问题无法在线上 debug,难道只能通过加日志再重新发布吗?线上遇到某个用户的数据处理有问题,但线上同样无法 debug,线下无法重现!是否有一个全局视角来查看系统的运行状况?有什么办法可以监控到JVM的实时运行状态?怎么快速定位应用的热点,生成火焰图。
3、数据库同步技术otter
otter(水獭) 基于数据库增量日志解析,准实时同步到本机房或异地机房的mysql/oracle数据库. 一个分布式数据库同步系统。 基于Canal开源产品,获取数据库增量日志数据。 官方描述: 阿里巴巴B2B公司,因为业务的特性,卖家主要集中在国内,买家主要集中在国外,所以衍生出了杭州和美国异地机房的需求,同时为了提升用户体验,**整个机房的架构为双A,两边均可写**,由此诞生了otter这样一个产品。
4、进一步了解单元测试
为了职业生涯的发展,你应该专心掌握单元测试,因为这方面的技术很有价值。有很多非常适合单元测试的新框架、功能、技术和工具,可供Java开发人员使用。
还有一些用于集成测试的工具,包括 PowerMock。另外,开发人员还可以研究一下 Robot Framework,因为它可以简化自动集成测试的过程。
因此,仅仅提高编程技术还不够,你还需要注意提高单元测试的技术。学习单元测试的途径有很多,比如线上和线下的课程。但是,最好的方法是实践单元测试,并确保你的测试技术能够达到要求。
TDD开发模式 - 讲的就是先写测试用例,再进行开发代码。
5、深度学习
MNN是高效且轻量级的深度学习框架。它支持深度学习模型的推理和训练,并且在设备上进行推理和训练具有行业领先的性能。目前,MNN已集成到淘宝,天猫,优酷,叮当,仙游等阿里巴巴20多个应用中,涵盖了直播,短视频拍摄,搜索推荐,产品等70多个使用场景。通过图像搜索,交互式营销,股权分配,安全风险控制。此外,MNN还用于嵌入式设备(例如IoT - 物联网)上。
Sentinel 是面向分布式服务架构的高可用流量防护组件,主要以流量为切入点,从限流、流量整形、熔断降级、系统负载保护、热点防护等多个维度来帮助开发者保障微服务的稳定性。
Sentinel 具有以下特性:
- **丰富的应用场景**:Sentinel 承接了阿里巴巴近 10 年的双十一大促流量的核心场景,例如秒杀(即突发流量控制在系统容量可以承受的范围)、消息削峰填谷、集群流量控制、实时熔断下游不可用应用等。
- **完备的实时监控**:Sentinel 同时提供实时的监控功能。您可以在控制台中看到接入应用的单台机器秒级数据,甚至 500 台以下规模的集群的汇总运行情况。
- **广泛的开源生态**:Sentinel 提供开箱即用的与其它开源框架/库的整合模块,例如与 Spring Cloud、Dubbo、gRPC 的整合。您只需要引入相应的依赖并进行简单的配置即可快速地接入 Sentinel。
- **完善的 SPI 扩展点**:Sentinel 提供简单易用、完善的 SPI 扩展接口。您可以通过实现扩展接口来快速地定制逻辑。例如定制规则管理、适配动态数据源等。
四、值得展望的方向
1、移动Java开发
预计在未来几年中,移动应用程序的开发将以飞快的速度增长。有报告称,到2020年,全球智能手机的销量有望达到16亿部。 因此,在2020年,Java开发人员应该关注与智能手机开发相关的新技巧、工具和趋势。许多 Android 程序员都比较喜欢Java。这是因为他们相信Java的可靠性,相信Java可以帮助他们为移动平台开发高质量的产品。有人认为Java是最适合制作现代移动应用程序的语言之一。它可以在包括 Android 在内的各种平台上运行。Android 是应用最广泛的操作系统之一,而它也是用 Java 编写的。因此,毫无疑问,通过学习Java,你能够为 Android 操作系统开发出色的移动应用程序。另外,如果你想抓住移动应用程序技术的未来,那么就应该专心学习Java移动应用程序的开发。
2、Docker云/IaaS/PaaS/SaaS
Docker云以容器为资源分割和调度的基本单位,封装整个软件运行时环境,为开发者和系统管理员提供用于构建、发布和运行分布式应用的平台 。主要用于运行环境的提供。
IaaS(基础设施即服务) 指把IT基础设施作为一种服务通过网络对外提供,并根据用户对资源的实际使用量或占用量进行计费的一种服务模式。 主要表现就是各大弹性云服务平台,emp:阿里云。
SaaS,是Software-as-a-Service的缩写名称,意思为软件即服务,即通过网络提供软件服务。SaaS平台供应商将应用软件统一部署在自己的服务器上,客户可以根据工作实际需求,通过互联网向厂商定购所需的应用软件服务,按定购的服务多少和时间长短向厂商支付费用,并通过互联网获得Saas平台供应商提供的服务。常见的有短信平台,邮件服务器等。
PaaS是的缩写,是指平台即服务。 把服务器平台作为一种服务提供的商业模式,通过网络进行程序提供的服务称之为SaaS(Software as a Service),而云计算时代相应的服务器平台或者开发环境作为服务进行提供就成为了PaaS(Platform as a Service)。 指的是只提供场地,而不提供服务。常见的微信公众号小程序平台。
3、区块链技术
2019年10月24日,在中央政治局第十八次集体学习时,习近平总书记强调,“把区块链作为核心技术自主创新的重要突破口”“加快推动区块链技术和产业创新发展”。“区块链”已走进大众视野,成为社会的关注焦点。今年的数字货币政策也有所松动,区块链发展前景是绝对看好的。
区块链是一个信息技术领域的术语。从本质上讲,它是一个共享数据库,存储于其中的数据或信息,具有“不可伪造”“全程留痕”“可以追溯”“公开透明”“集体维护”等特征。基于这些特征,区块链技术奠定了坚实的“信任”基础,创造了可靠的“合作”机制,具有广阔的运用前景。
4.人工智能
人工智能是计算机科学的一个分支,它企图了解智能的实质,并生产出一种新的能以人类智能相似的方式做出反应的智能机器,该领域的研究包括机器人、语言识别、图像识别、自然语言处理和专家系统等。人工智能从诞生以来,理论和技术日益成熟,应用领域也不断扩大,可以设想,未来人工智能带来的科技产品,将会是人类智慧的“容器”。人工智能可以对人的意识、思维的信息过程的模拟。人工智能不是人的智能,但能像人那样思考、也可能超过人的智能。
5、物联网
物联网(Internet of Things,缩写:IoT)是基于互联网、传统电信网等信息承载体,让所有能行使独立功能的普通物体实现互联互通的网络。其应用领域主要包括运输和物流、工业制造、健康医疗、智能环境(家庭、办公、工厂)等,具有十分广阔的市场前景。物联网的概念已经是一个“中国制造”的概念,它的覆盖范围与时俱进,已经超越了1999年Ashton教授和2005年ITU报告所指的范围,物联网已被贴上“中国式”标签。
截至2010年, 发改委、 工信部等部委正在会同有关部门,在新一代信息技术方面开展研究,以形成支持新一代信息技术的一些新政策措施,从而推动我国经济的发展。
物联网作为一个新经济增长点的战略新兴产业,具有良好的市场效益,《2014-2018年中国物联网行业应用领域市场需求与投资预测分析报告》数据表明,2010年物联网在安防、交通、电力和物流领域的市场规模分别为600亿元、300亿元、280亿元和150亿元。2011年中国物联网产业市场规模达到2600多亿元。
6、AR和VR
增强现实(Augmented Reality)技术是一种将虚拟信息与真实世界巧妙融合的技术,广泛运用了多媒体、三维建模、实时跟踪及注册、智能交互、传感等多种技术手段,将计算机生成的文字、图像、三维模型、音乐、视频等虚拟信息模拟仿真后,应用到真实世界中,两种信息互为补充,从而实现对真实世界的“增强”。
虚拟现实技术(英文名称:Virtual Reality,缩写为VR),又称灵境技术,是20世纪发展起来的一项全新的实用技术。虚拟现实技术囊括计算机、电子信息、仿真技术于一体,其基本实现方式是计算机模拟虚拟环境从而给人以环境沉浸感。随着社会生产力和科学技术的不断发展,各行各业对VR技术的需求日益旺盛。VR技术也取得了巨大进步,并逐步成为一个新的科学技术领域。
7、量子计算 - 未来可期
量子计算是一种遵循量子力学规律调控量子信息单元进行计算的新型计算模式。对照于传统的通用计算机,其理论模型是通用图灵机;通用的量子计算机,其理论模型是用量子力学规律重新诠释的通用图灵机。从可计算的问题来看,量子计算机只能解决传统计算机所能解决的问题,但是从计算的效率上,由于量子力学叠加性的存在,某些已知的量子算法在处理问题时速度要快于传统的通用计算机。
结语
展望未来,企业应如何改变当前的技术应用方式,又应如何发挥技术对企业和社会的赋能作用?
答案显而易见:除了增加产品和服务的技术含量,企业还要顺应大众的期望,让技术应用更符合人性需求。为了实现这一目标,企业必须以信任为基石,重新审视原有的商业和技术模式,以负责任的态度在数字世界中建立可持续发展和增长。商业技术和创新模式的变革迫在眉睫。
技术发展日新月异,当我从常见的技术,想到量子计算的时候.....我感觉:奔跑吧,朋友们。