Java高级技术概况

标签: Java 分类: Java 创建时间:2019-10-24 07:56:20 更新时间:2024-11-23 10:24:24

要说是Java高级技术,其实也不太准确,因为很多技术不是一种实际的技术,而仅仅只是一种思想。是一种思想,那就可以用很多种不同的语言来实现。最让我想写这篇文章的原因,其实是因为前几天面试了一个人,虽然我是被迫拉过去的,而且人家来面试的是Java而不是前端,就我个人的技术层次来说,我其实都只是会皮毛而已,最多只会一个SpringBoot框架,在深层次的东西,就不知道了。所以,当我看到他的简历的时候,我被上面五花八门的技术术语给搞蒙了,我都不知道该问他什么,而且我随便问了几个问题,我也不明白他说的是什么,我总不能问,你给我解释下什么叫RabbitMQ吧,就算他说了,我也听不懂啊。不过好像这个人从恒生出来的,技术应该也不错,只不过老板好像不满意,毕竟像我们这些渣渣,都没给公司挣过什么钱,要不要的无所谓。言归正传,至于技术深不深,我觉得先放一边,起码来说,我们得了解这是一个什么东西啊。

参考文章:
1.Java生态圈技术框架、中间件、系统架构汇总 1.基础知识:Java基础知识、Java并发编程、数据结构与算法;2.进阶篇:JDK源码阅读、框架知识、JVM/类加载机制、设计模式;3.高级篇:性能优化、线上问题定位;4.常用框架&第三方库:Spring 全家桶、Web框架、ORM 框架、Http 网络请求、JSON序列化&反序列化、数据库连接池、日期&时间处理、Java 序列化框架、本地缓存、分布式缓存、任务调度框架、字节码操作、Netflix OSS、Zookeeper客户端库、NIO框架、Bean 属性拷贝、Web 容器、工具类、模版引擎、日志、单元测试、依赖管理&构建工具、版本控制;5.中间件:RPC框架、MQ消息、数据库Sharding、配置中心、分布式任务调度、分布式ID生成器、APM、分布式链路追踪、分布式文件系统、数据库binlog解析;6.RDBMS:MySQL、PostgreSQL、NoSQL、分布式;7.微服务:服务注册&发现、分布式协调&选主、应用监控;8.安全;9.团队管理;10.线上问题排查;11.架构设计:后端架构师技术图谱;12.互联网公司架构:互联网公司技术架构、淘宝技术架构,阿里巴巴技术架构、微信技术架构, 腾讯技术架构、美团点评技术架构。

1.RadditMQ

首先要讲一下,消息队列,RadditMQ只是消息队列产品中的一员,还有比如说ActiveMQ、Kafka,阿里的RocketMQ,都是消息队列产品,当然实现的方式不同,自然也就有不同的优缺点了。
那么什么是消息队列呢?

消息队列(Message Queue)是一种应用间的通信方式,消息发送后可以立即返回,由消息系统来确保消息的可靠传递。消息发布者只管把消息发布到 MQ 中而不用管谁来取,消息使用者只管从 MQ 中取消息而不管是谁发布的。这样发布者和使用者都不用知道对方的存在。消息(Message)是指在应用间传送的数据。消息可以非常简单,比如只包含文本字符串,也可以更复杂,可能包含嵌入对象。

具体的应用场景又是什么呢?

以常见的订单系统为例,用户点击【下单】按钮之后的业务逻辑可能包括:扣减库存、生成相应单据、发红包、发短信通知。在业务发展初期这些逻辑可能放在一起同步执行,随着业务的发展订单量增长,需要提升系统服务的性能,这时可以将一些不需要立即生效的操作拆分出来异步执行,比如发放红包、发短信通知等。这种场景下就可以用 MQ ,在下单的主流程(比如扣减库存、生成相应单据)完成之后发送一条消息到 MQ 让主流程快速完结,而由另外的单独线程拉取MQ的消息(或者由 MQ 推送消息),当发现 MQ 中有发红包或发短信之类的消息时,执行相应的业务逻辑。

好了,了解到这里先告一段落,其实关于RadditMQ还有很多内容,想要学习,可能不止一篇文章就可以解决的。

2.微服务

我觉得参考文章一( question ) 写的非常好。微服务:

简而言之,微服务架构风格是一种将单个应用程序作为一套小型服务开发的方法,每种应用程序都在自己的进程中运行,并与轻量级机制(通常是HTTP资源API)进行通信。 这些服务是围绕业务功能构建的,可以通过全自动部署机制独立部署。 这些服务的集中管理最少,可以用不同的编程语言编写,并使用不同的数据存储技术。

比较典型的应用就是Spring Cloud。管网上描述Spring Cloud:微服务架构集大成者,云计算最佳业务实践。

3.Dubbo

Dubbo是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,是阿里巴巴SOA服务化治理方案的核心框架,每天为2,000+个服务提供3,000,000,000+次访问量支持,并被广泛应用于阿里巴巴集团的各成员站点。Dubbo是Alibaba开源的分布式服务框架,它最大的特点是按照分层的方式来架构,使用这种方式可以使各个层之间解耦合(或者最大限度地松耦合)。从服务模型的角度来看,Dubbo采用的是一种非常简单的模型,要么是提供方提供服务,要么是消费方消费服务,所以基于这一点可以抽象出服务提供方(Provider)和服务消费方(Consumer)两个角色。Dubbo框架使得使用者可以像调用本地方法一样调用远程方法,而这一切只需要简单的配置。Dubbo完全兼容Spring配置方式注入,也与Spring boot无缝整合

参考文章:
1.Dubbo教程
2.重点)深入理解Java分布式架构 (这篇文章对Java的分布式讲解的非常的清楚,值得细细品味。)

4.ZooKeeper

ZooKeeper 是一个开源的分布式协调服务,ZooKeeper框架最初是在“Yahoo!”上构建的,用于以简单而稳健的方式访问他们的应用程序。 后来,Apache ZooKeeper成为Hadoop,HBase和其他分布式框架使用的有组织服务的标准。 例如,Apache HBase使用ZooKeeper跟踪分布式数据的状态。ZooKeeper 的设计目标是将那些复杂且容易出错的分布式一致性服务封装起来,构成一个高效可靠的原语集,并以一系列简单易用的接口提供给用户使用。
Apache ZooKeeper是Apache软件基金会的一个软件项目,它为大型分布式计算提供开源的分布式配置服务、同步服务和命名注册。ZooKeeper曾经是Hadoop的一个子项目,但现在是一个独立的顶级项目。

(看上面几个概念,就把我搞得头疼,真是后台的技术,也不是那么容易学的啊。)

5.PO、VO、BO、DTO、DAO 和 POJO

参考文章:
1.详述 PO VO BO DTO DAO 和 POJO 的概念及区别 (各种O,还是挺令人头大的,不同的概念用在不同的地方)

6.幂等

幂等就是一个操作,这个操作不管执行多少次,产生的效果和返回的结果都是一样的。比如说有一个 getOne () 函数,无论执行这个函数多少次,它返回的都是 1,这时就可以说它是一个幂等函数。幂等性的技术方案:

  • 1.查询操作
  • 2.删除操作
  • 3.建立唯一索引,防止新增脏数据
  • 4.Token 机制,防止页面重复提交
  • 5.悲观锁
  • 6.乐观锁
  • 7.分布式锁
  • 8.select+insert
  • 9.状态机幂等

7.反射

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
/** 
* 根据属性名获取属性值
* */
private Object getFieldValueByName(String fieldName, Object o) {
try {
String firstLetter = fieldName.substring(0, 1).toUpperCase();
String getter = "get" + firstLetter + fieldName.substring(1);
Method method = o.getClass().getMethod(getter, new Class[] {});
Object value = method.invoke(o, new Object[] {});
return value;
} catch (Exception e) {
log.error(e.getMessage(),e);
return null;
}
}
参考文章:
【1】.java获取对象属性类型、属性名称、属性值 这里提供的代码还是挺有用的,1.获取实体类所有属性值组成的String数组;2.获取属性的名、属性类型、属性值;3.向实体类中设值;4.获取属性值。
【2】.java中循环遍历实体类的属性和数据类型以及属性值
小额赞助
本人提供免费与付费咨询服务,感谢您的支持!赞助请发邮件通知,方便公布您的善意!
**光 3.01 元
Sun 3.00 元
bibichuan 3.00 元
微信公众号
广告位
诚心邀请广大金主爸爸洽谈合作
每日一省
isNaN 和 Number.isNaN 函数的区别?

1.函数 isNaN 接收参数后,会尝试将这个参数转换为数值,任何不能被转换为数值的的值都会返回 true,因此非数字值传入也会返回 true ,会影响 NaN 的判断。

2.函数 Number.isNaN 会首先判断传入参数是否为数字,如果是数字再继续判断是否为 NaN ,不会进行数据类型的转换,这种方法对于 NaN 的判断更为准确。

每日二省
为什么0.1+0.2 ! == 0.3,如何让其相等?

一个直接的解决方法就是设置一个误差范围,通常称为“机器精度”。对JavaScript来说,这个值通常为2-52,在ES6中,提供了Number.EPSILON属性,而它的值就是2-52,只要判断0.1+0.2-0.3是否小于Number.EPSILON,如果小于,就可以判断为0.1+0.2 ===0.3。

每日三省
== 操作符的强制类型转换规则?

1.首先会判断两者类型是否**相同,**相同的话就比较两者的大小。

2.类型不相同的话,就会进行类型转换。

3.会先判断是否在对比 null 和 undefined,是的话就会返回 true。

4.判断两者类型是否为 string 和 number,是的话就会将字符串转换为 number。

5.判断其中一方是否为 boolean,是的话就会把 boolean 转为 number 再进行判断。

6.判断其中一方是否为 object 且另一方为 string、number 或者 symbol,是的话就会把 object 转为原始类型再进行判断。

每日英语
Happiness is time precipitation, smile is the lonely sad.
幸福是年华的沉淀,微笑是寂寞的悲伤。