首页 星云 工具 资源 星选 资讯 热门工具
:

PDF转图片 完全免费 小红书视频下载 无水印 抖音视频下载 无水印 数字星空

架构师备考的一些思考(二)

编程知识
2024年09月10日 10:34

前言

以我的视野来看,部长或技术总监这种岗位还是比较难竞争的,换言之,程序员的上升空间比较窄,如果想要拿到高级岗位,最好的是工作三五年后就转项目经理,然后再往上爬。
架构师倒是也能晋升高级岗位,但就效率而言,是非常低的。就我的经验而言,架构师系的高级职位通常是技术管理一手抓,但这也代表着,责任更大,也就是锅更大。
所以架构师系的高级职是非常不稳定的,非常累,非常容易坚持不下来,尤其在你结婚生子后,就更难坚持下来。
所以,选择大于努力,如果想拼命向上走,还是尽快入坑项目管理才是上策,不想拼命或者做不到拼命的,那就无所谓选择了。
就算是同样的架构师,java系架构师也相对更好,生态好意味着java系架构师就相对学的不用那么多,也就不用那么累。
举个简单例子,java架构师可以不会安卓和鸿蒙,但net架构师必须会winform和wpf。
所以,还是那句话,选择大于努力,能入坑java还是尽早入坑java,这样你会少走几年弯路,而且如果你躺平了,能让你35岁以后能继续用技术吃饭,还吃的不错的,就只有java的生态。
当然,java系还有细分的,能选大数据就走大数据,大数据是一个工作内容异常简单,工作量异常少的一个岗位,而且大家还觉得你工作内容很神秘,会比较有尊严。
就我的个人学习flink的经验而言,学习flink的难度只有学习java的难度的30%,但你的工资可能高于java,加班也会少于java。
下面回到正题,架构师备考。

架构师备考——记忆难点

其实所谓的记忆难点,就是我们的理解和扯淡描述之间的转换比较难。

原型模式(property)

通过copy对象属性,或者clone获得新对象,就是DTO转实体的那个对象属性映射。

要能通过下面定义分析出他在描述的是原型模式。
用原型实例指定创建对象的类型,并且通过拷贝这个原型来创建新的对象。运行对象在不了解创建对象的确切类以及如何创建细节的情况下创建自定义对
象。

Builder(生成器模式)

就是java里常见的builder创建对象,或者理解为注解@Builder。
注:其他语言没有这个模式,其他语言开发,就理解为构造函数创建对象即可。

要能通过下面定义分析出他在描述的是生成器模式。
将一个复杂类的表示与其构造相分离,使得相同的构建过程能够得出不同的表示。

Abstract Factory(抽象工厂模式):

通过不同的接口来获取不同对象。
注:抽象工厂模式与工厂模式的区别是,工厂模式是通过入参来获取不同的对象。这两种模式在其他语言中是随手写的代码,所以没有形成概念结构,这里要学会区分。

要能通过下面定义分析出他在描述的是抽象工厂模式。
提供一个创建一系列相关或相互依赖对象的接口而无需指定它们具体的类。

仓库风格架构

  • 集中存储:就是说数据都在一个数据库里。
  • 数据驱动:就是说数据一更新,查询该数据就马上得到最新数据,因为都在一个库。
  • 数据处理方式:就是存储到数据库
  • 扩展性:可以增加插件扩展功能。

管道过滤器风格

  • 这个主要是考察servlet的机制,所有的题型往servlet里靠即可。其他语言开发就把他像成一堆filter即可。这个一般情况是架构中的一个小环节,纯用管道过滤器做出来的组件还是很少见的。
  • 特点:数据流动,功能单一,组合灵活。
  • 扩展性:可以灵活增加filter。

数据驱动机制

数据驱动机制就是数据驱动的方法,有几种:数据库驱动应用,配置文件驱动应用,脚本语言驱动应用。这个有点IOC的感觉,控制翻转,反向以数据为中心驱动应用的表现。

页面变换表

这个是必背的,一定会有1 ~ 2空,即这1 ~ 2分是必拿的。
虚拟内存:虚拟内存就是物理内存和部分硬盘(辅助存储)组合起来,供cpu调用的。
虚拟页面:在虚拟内存系统中,程序所使用内存,被细分成多个内存块,这些内存块就叫虚拟页面。
页帧/物理块:就是虚拟内存对应的物理内存和硬盘的地址。
页面变换表:就是用于记录虚拟内存中的页帧/物理块之间的对应关系。

存在位(Present Bit):表示该页面是否当前在物理内存中。如果存在位为 1,表示该页面在物理内存中;如果为 0,表示该页面不在物理内存中,需要从辅助存储中调入。
访问位(Access Bit):记录该页面是否被访问过。操作系统可以根据访问位来决定哪些页面是最近使用过的,以便在需要换出页面时进行选择。
修改位(Modified Bit):表示该页面是否被修改过。如果修改位为 1,表示该页面在被调入物理内存后被修改过,在换出时需要写回辅助存储;如果为 0,表示该页面未被修改过,可以直接丢弃。
保护位(Protection Bit):用于指定该页面的访问权限,如只读、读写、可执行等。

页号 物理块号/页帧号 状态位 访问位
0 1 1 0
1 - 0 0
2 3 1 1
3 8 1 1

逻辑地址16位:3148H,第一位5表示虚拟页面地址,页内地址是148H,查表,3对应的页帧是8,所以转换物理地址为8148H。
如果访问1页,因为1页状态位0,所以是没有在内存的,所以要淘汰一个在内存的页,为这次访问提供位置,那么淘汰0页,因为0页在内存,且近期未被访问。

质量属性

质量属性的含义如下:
性能(响应时间),可用性(宕机恢复),可修改性(修改时间短),易用性,可靠性(容错、健壮性),安全性(验证逻辑,阻止非授权用户)

  • 提高性能——资源调度(就是负载均衡)
  • 提高可用性——心跳(考试里的可用性是专指——服务查询(nacos)的心跳体系,通过心跳上线下线服务)
  • 提高可修改性——信息隐藏(这个比较难记难理解,我猜测是他们认为一个表单修改的内容减少了,就提高了可修改性,这个要特殊背一下,有点反逻辑)
  • 易用性——这个就是用户使用难易度。
  • 可靠性——容错、健壮性。在意外或错误使用的情况下维持软件系统的功能特性的能力。
  • 提高安全性——追踪审计,就是记录日志和溯源。
    安全性在考试里应该是特指java的Security和Auth2,他这套逻辑还是挺难理解的,尤其是结合了java的控制反转的结构。(java现在搞的组件设计都是控制反转,而其他语言都是正向开发)
    非java系开发可以参考下面文章理解。
    其实,如果是我们正常的、手工搭框架,我认为即便是java架构师也会把Security和Auth2踢出局,因为他这个模式有问题,不过,考试里很多题都会参考这个出,非java系开发,这块就只能蒙了,确实不好理解。
    SpringBoot的Security和OAuth2的使用

构件类别

这个构件体系,就是spring的体系,因为整体是IOC,所以,就一个一个的构件往里注入。
由于我们大部分开发都是做应用开发的,而这种构件模式,虽然有,但相对还是比较少见的,非java开发可能工作20年也没这么开发过软件的可能性是很高的。
非java开发可以把这个构件模式想象为docker。java开发就比较幸福了,下面的定义一看,马上就可以联想到spring的各种组件了。

  • (1)独立而成熟的构件。独立而成熟的构件得到了实际运行环境的多次检验,该类构件隐藏了所有接口,用户只需用规定好的命令进行使用。例如,数据库管理系统和操作系统等。
  • (2)有限制的构件。有限制的构件提供了接口,指出了使用的条件和前提,这种构件在装配时,会产生资源冲突、覆盖等影响,在使用时需要加以测试。例如,各种面向对象程序设计语言中的基础类库等。
  • (3)适应性构件。适应性构件进行了包装或使用了接口技术,把不兼容性、资源冲突等进行了处理,可以直接使用。这种构件可以不加修改地使用在各种环境中。例如 ActiveX等。
  • (4)装配的构件。装配(assemble)的构件在安装时,已经装配在操作系统、数据库管理系统或信息系统不同层次上,使用胶水代码(gluecode)就可以进行连接使用。目前一些软件商提供的大多数软件产品都属这一类。
  • (5)可修改的构件。可修改的构件可以进行版本替换。如果对原构件修改错误、增加新功能,可以利用重新“包装”或写接口来实现构件的替换。这种构件在应用系统开发中使用得比较多。

中间件

这里考的中间件是特指kafka和redis和nacos,其他语言就用rabbitMQ和redis和consul思考即可。
连接与通信:考试中认为,中间件是客户端与服务器的连接与通信(连接与通信是中间件的一个属性,在考试里认为它是主要属性,我个人感觉这么定义是有点怪,但还是能给与一定理解)
交易管理机制保证交易一致性:这个应该指的是用redis构件的分布式锁。
负载均衡和高可用:这个指的是nacos,一个内部组件Load Balance(低版本的是Robbin)实现负载均衡,一个是心跳实现高可用。

关系模式 R(U,F)

这个主要是要记一些名词。
在 “R(U,F)” 中:
“R” 表示一个关系模式(Relation Schema)。
“U” 是属性集(Attributes Set),即关系模式中所有属性的集合。例如,一个学生关系模式可能有属性集 U = {学号,姓名,年龄,班级号} 等。
“F” 是函数依赖集(Set of Functional Dependencies),用于描述属性之间的约束关系。例如,F 中可能包含函数依赖 {学号}→{姓名}、{班级号}→{辅导员} 等。

  • 如给出关系R(U,F),U={A,B,C,D,E,F={A→BC,B→D,D→E}。
    则有【依赖传递】,A→B,B→D,D→E。
    根据依赖传递,可得新依赖关系,A→D,A→E
  • 如,U1={A,B,C)、U2={B,D,E},则分解p()。
    这个问题是问拆表,把U表拆成俩表,然后字段是U1={A,B,C)、U2={B,D,E},这个拆表,比较好理解,我们经常拆,题中的拆法,是正确的拆法,所以什么也不影响,所以【无损连接并保持函数依赖】。
    无损连接就是没丢字段。

数据库分布式模式

这个数据库模式是针对java系的mysql数据库设计的,在java项目中,有时候会使用现有的开源项目,这些项目大多数是微服务模式的。
然后这些开源项目,通常会把表拆到8到20个数据库中,因为一开始起步时表和库就过多,所以之后,随着开发,表和库的混乱就是指数倍的增加,库表越多操作就越复杂,所以一些平平无奇的项目,也会有一些和淘宝京东这种大系统一样的困难要去面对。
也因此,有一些概念,本来是要到特定的环境下才需要学习的,但在java系统,就变成了常用概念。

  • 全局外模式:
    兽语:是对分布式数据库的最高层的抽象。
    人言:全局外模式是一个图。就是是把分布式数据库看成集中数据库,集中数据库就是一个数据库。然后用一个图描述数据库结构。
  • 全局概念模式:
    兽语:是分布式数据库的整体抽象,包含了系统中全部数据的特性和逻辑结构描述分布数据库全局数据的逻辑结构,是分布式数据库的全局概念视图。
    人言:全局概念模式是一个图,分布式数据库的整体、详细的逻辑关系图。
  • 分片模式:
    兽语:描述全局数据逻辑划分的视图,是全局数据的逻辑结构根据条件的划分;每一个逻辑划分就是一个片段或称为分片。
    人言:不是图,他是拆分数据库,就是横向,纵向拆分,比如按字段拆,按日期拆。
  • 分配模式(分布模式):
    兽语:描述局部逻辑的局部物理结构是划分后的片段(或分片)的物理分配视图;是全局概念层的内容。
    人言:是一个图,就是记录上面的数据分片的逻辑关系图。
  • 局部概念层:
    兽语:由局部概念模式描述,是全局概念模式的子集;全局概念模式经逻辑划分后被分配在各局部场地上。
    人言:局部概念层是个图,分布式数据库会有多个库,这个局部概念图就是节点库的逻辑描述图。

注:此文章为原创,任何形式的转载都请联系作者获得授权并注明出处!



若您觉得这篇文章还不错,请点击下方的【推荐】,非常感谢!

https://www.cnblogs.com/kiba/p/18404588

From:https://www.cnblogs.com/kiba/p/18404588
本文地址: http://shuzixingkong.net/article/1893
0评论
提交 加载更多评论
其他文章 在 Web 中判断页面是不是刷新
在 Web 开发中,我们经常需要区分用户是否通过刷新操作重新加载了页面。这一操作可能是由用户手动刷新(如按下 F5 键或点击浏览器刷新按钮)或通过浏览器自动重新加载。判断页面是否刷新有助于开发者优化用户体验,例如在使用 vue 的时候需要进行权限控制,就需要判断在刷新后根据登录者的权限去添加对应的路
在 Web 中判断页面是不是刷新 在 Web 中判断页面是不是刷新 在 Web 中判断页面是不是刷新
鸿蒙系统(HarmonyOS)全局弹窗实现
全局弹窗相对于自定义弹窗有以下优点: 封装更彻底,一行代码就能调用 跟组件耦合度低,只需要传入组件的UIContext对象,不需要跟自定义弹窗一样需要在组件内部实例化CustomDialogController对象 全局弹窗是鸿蒙在API 12增加的,PromptAction对象增加了openCus
鸿蒙系统(HarmonyOS)全局弹窗实现 鸿蒙系统(HarmonyOS)全局弹窗实现
Locust 进行分布式负载测试
什么是 Locust Locust 是一个开源的负载测试工具,用于测试网站和其他应用程序的性能。它通过编写 Python 脚本来定义虚拟用户的行为,模拟这些用户对目标系统发起请求。Locust 提供了一个直观的 Web 界面,允许用户实时监控测试进度和性能指标。 主要特性包括: Python 编写测
一文轻松搞定 tarjan 算法(二)(附带 tarjan 题单)
完结篇:tarjan 求割点、点双连通分量、割边(桥)(附 40 道很好的 tarjan 题目)。 上一篇(tarjan 求强连通分量,缩点,求边双) tarjan 求割点 还是求强联通分量的大致思路捏. 算法思路: 我们把图中的点分为两种: 每一个联通子图搜索开始的根节点 和 其他点。 判断是不是
一文轻松搞定 tarjan 算法(二)(附带 tarjan 题单)
痞子衡嵌入式:在MDK开发环境下自定义安装与切换不同编译器版本的方法
大家好,我是痞子衡,是正经搞技术的痞子。今天痞子衡给大家分享的是在MDK开发环境下自定义安装与切换不同编译器版本的方法。 Keil MDK 想必是嵌入式开发者最熟悉的工具之一了,自 2005 年 Arm 公司收购 Keil 公司之后,MDK 就走上了发展快车道,从 v2.50a 一路狂奔到现在最新的
痞子衡嵌入式:在MDK开发环境下自定义安装与切换不同编译器版本的方法 痞子衡嵌入式:在MDK开发环境下自定义安装与切换不同编译器版本的方法 痞子衡嵌入式:在MDK开发环境下自定义安装与切换不同编译器版本的方法
设计模式之状态模式(三分钟学会一个设计模式)
状态模式(State Pattern)的定义是这样的:类的行为是基于它的状态改变的。注意这里的状态不是狭义的指对象维护了一个“状态”字段,我们传入了不同的枚举值,对象整体的表现行为(对外方法)就改变了。而是指内部的(任意)字段如果发生了变化,那么它的状态就变了,那么它对外的表现形式就变了。它是面向对
设计模式之状态模式(三分钟学会一个设计模式)
Redis 入门 - C#|.NET Core客户端库六种选择
介绍了6款.NET系Redis客户端库:ServiceStack.Redis、StackExchange.Redis、CSRedisCore、FreeRedis、NewLife.Redis、BeetleX.Redis,各具特色,如商业支持、高性能、高并发、低延迟等,适合不同场景和需求。
Redis 入门 - C#|.NET Core客户端库六种选择 Redis 入门 - C#|.NET Core客户端库六种选择 Redis 入门 - C#|.NET Core客户端库六种选择
Redis、Nginx、SQLite、Elasticsearch等开源软件成功的原因及它们对IT技术人员的启示
引言 这些年在自研产品,对于如何做好产品进行了一些思考。随着开源软件的蓬勃发展,许多开源项目已经成为IT行业的核心组成部分。像Redis、Nginx、SQLite、Elasticsearch这些知名的开源软件,已经成为了开发者的首选工具。这些开源软件不仅在技术性能上取得了重大突破,还在社区建设、生态