Java知识体系!帮助程序员提高核心竞争力的30条建议,附大厂真题面经

Posted Java李松

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java知识体系!帮助程序员提高核心竞争力的30条建议,附大厂真题面经相关的知识,希望对你有一定的参考价值。

一. 什么是架构和架构本质

在软件行业,对于什么是架构,都有很多的争论,每个人都有自己的理解。 此君说的架构和彼君理解的架构未必是一回事。因此我们在讨论架构之前,我们先讨论架构的概念定义,概念是人认识这个世界的基础,并用来沟通的手段,如果对架构概念理解不一样,那沟通起来自然不顺畅。

Linux有架构,mysql有架构,JVM也有架构,使用Java开发、MySQL存储、跑在Linux上的业务系统也有架构,应该关注哪一个?想要清楚以上问题需要梳理几个有关系又相似的概念:系统与子系统、模块与组建、框架与架构

一,session共享

首先第一个要解决的就是sesison共享的问题,如下图。

通常有两种解决方案,第1种是配置nginx的负载集群策略为ip_hash,第2种是将session存储到其它地方,一般推荐放到redis中。

第1种方案适合于临时解决或者是为了兼容历史项目,但是从应用服务器无状态的角度考虑,推荐把用户会话session放到redis,如下图。

二,本地缓存

如果使用本地缓存,当从单体迁移到集群后,就会面临缓存同步的问题,如下图。

最佳实践是上分布式缓存,既解决了缓存同步的问题,也释放了应用服务器的内存资源,如下图。

三,文件服务

应用服务器在上集群之前,文件通常会放在本地,或者单独的文件服务器上,因为文件服务需要占用大量的硬盘空间,以上两种方案都无法很好的解决硬盘扩容的问题,最佳实践是放到云存储上,比如阿里云的OSS,或者腾讯云的COS上,这样可以做到按需扩容,如下图。

四,分布式环境下线程同步问题

在单机环境下,使用lock就可以解决线程同步的问题,一旦上了集群之后,lock就不管用了,这时需要上分布式锁,分布式锁的解决方案也有很多,我这里推荐使用redis的setnx,需要注意的是,如果redis是集群部署的,需要考虑这种情形:假设我们在redis的主节点上添加了一把分布式锁,不幸的是主节点挂掉了,而且主节点上的锁还没有同步到从节点上,如果此时有客户端来请求获得同一把锁,那么它将顺利地获得锁,之前那把锁会被无情地忽视掉,这就是分布式锁在Redis集群中遇到的麻烦。

最后

送大家一个小福利,点击领取Java全套进阶资料

2)]

[外链图片转存中…(img-wuvblhE9-1621312178023)]

以上是关于Java知识体系!帮助程序员提高核心竞争力的30条建议,附大厂真题面经的主要内容,如果未能解决你的问题,请参考以下文章

内卷严重!看看这些java核心资料,提高竞争力,再也不害怕行业内卷了

我擦!为何我以前没有看到,这份分布式架构知识体系巨详细

java程序员如何提高自己

Java通用型支付+电商平台双系统实战

数商云:工业4.0时代,我国传统机械制造业如何提高核心竞争力

阿里巴巴十年Java架构师分享,会了这个知识点的人都去BAT了