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

news2024/11/26 14:42:29

前言

以我的视野来看,部长或技术总监这种岗位还是比较难竞争的,换言之,程序员的上升空间比较窄,如果想要拿到高级岗位,最好的是工作三五年后就转项目经理,然后再往上爬。
架构师倒是也能晋升高级岗位,但就效率而言,是非常低的。就我的经验而言,架构师系的高级职位通常是技术管理一手抓,但这也代表着,责任更大,也就是锅更大。
所以架构师系的高级职是非常不稳定的,非常累,非常容易坚持不下来,尤其在你结婚生子后,就更难坚持下来。
所以,选择大于努力,如果想拼命向上走,还是尽快入坑项目管理才是上策,不想拼命或者做不到拼命的,那就无所谓选择了。
就算是同样的架构师,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):用于指定该页面的访问权限,如只读、读写、可执行等。

页号物理块号/页帧号状态位访问位
0110
1-00
2311
3811

逻辑地址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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2128694.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

git的快速合并fast-forward merge详解

文章目录 1. 什么是快进合并?2. 快进合并的前提条件3. 快进合并的工作原理3.1 示例场景:3.2 使用命令:3.3 快进合并的视觉效果: 4. 快进合并的优点5. 快进合并的缺点6. 快进合并 vs 非快进合并6.1 非快进合并:6.2 非快…

Promise详解、自定义

这里写目录标题 一、.Promise对象详解1. Promise是什么2. Promise的优点3. 异步编程4. then(onFulfilled, onRejected):5. util.promisify 方法:6. promise的状态改变7.Promise 对象的值8. Promise的基本执行流程9. Promise的API10. Promise中的关键问题…

怎样训练一个自己的大语言模型?这可能是全网最简单易懂的教程!

Llama 2 是来自 Meta 的第二代开源LLM的集合,旨在处理各种自然语言处理任务,模型的规模从 7B(70亿)到 70B(700亿)个参数不等,可以商用。 Llama-2-Chat 针对对话进行了优化,显示出与…

你们准备好了吗?Python 入行 AI 的基础技术栈及学习路线

人工智能(AI)是当今技术发展的重要领域之一,而 Python 已成为 AI 领域的首选编程语言之一。Python 简单易学,具有丰富的生态系统和社区支持,特别是在 AI 和机器学习(ML)领域有大量强大的库和框架…

电商系统源码开发中的卷轴模式系统:当前技术面临的问题

随着互联网技术的飞速发展,电商系统已成为数字经济的重要组成部分。为了提升用户体验和平台活跃度,卷轴模式作为一种创新的用户参与机制,逐渐在电商系统中崭露头角。然而,在电商系统源码开发卷轴模式系统的过程中,仍面…

‌汽车的舒适进入功能是什么意思?

移动管家汽车的舒适进入系统是指无钥匙进入功能,它允许驾驶者在距离车辆一定范围内自动感应解锁车辆,并具备无钥匙启动功能‌。舒适进入系统的核心优势包括: ‌智能化操作‌:无需传统钥匙,通过智能感应实现车门解锁和…

@Transactional和@Synchronized的冲突

Transactional和Synchronized的冲突 场景 方法是先进行检查,然后新增,添加了事务注解,为了保证检查(要求业务上唯一),添加了Synchronized注解 想法很简单,事务注解保证方法原子性&#xff0c…

基于Kithara实时套件的EtherCAT主站

第1章 Kithara实时套件概述 1.1 概述 Kithara Software是一家德国的软件公司,专注于实时技术和嵌入式解决方案。 他们为Windows操作系统提供了Kithara RealTime Suite,这是一套实时扩展模块,使Windows能够实现硬实时任务和控制。 Kithara R…

C++实现宏编译不同版本程序

1. #define的概念 #define命令是C语言中的一个宏定义命令,它用来将一个标识符定义为一个字符串,该标识符被称为宏名,被定义的字符串称为替换文本。该命令有两种格式:一种是简单的宏定义,另一种是带参数的宏定义。 (1)简单的宏定义: #define <宏名>  <字符串…

JavaScript web API part2

web API 全选反选案例 需求&#xff1a; 勾选大复选框&#xff0c;勾选全部小复选框取消勾选大复选框&#xff0c;则取消勾选全部小复选框若有小复选框没有被勾选&#xff0c;则大复选框不被勾选若所有小复选框都被勾选&#xff0c;则大复选框被勾选 <!DOCTYPE html>…

Scratch中秋节贺卡——福满中秋

小虎鲸Scratch资源站-免费少儿编程Scratch作品源码,素材,教程分享网站! 中秋佳节即将到来&#xff0c;小虎鲸Scratch资源站为大家特别准备了一款精美的《Scratch中秋节贺卡——福满中秋》作品&#xff0c;带您轻松制作属于自己的节日贺卡&#xff0c;为亲朋好友送上最真挚的节日…

OpenBayes 教程上新 | FLUX ComfyUI 现已上线 ,让 SD 和 Midjourney 颤抖的文生图黑马!

横空出世的黑马 FLUX &#xff0c;以其强大的图像生成能力&#xff0c;让 Stable Diffusion 和 Midjourney 这 2 个「昔日顶流」倍感压力。 FLUX 与 Stable Diffusion 渊源颇深&#xff0c;其研发公司 Black Forest Labs 的创始人 Robin Rombach 是 Stable Diffusion 的共同开…

影刀RPA实战:自动化批量生成条形码完整指南

今天我们聊聊使用影刀来实现批量生成条形码&#xff0c;条形码在零售行业运用非常广泛&#xff0c;主要作用表现在产品识别&#xff0c;库存管理&#xff0c;销售管理&#xff0c;防伪保护等&#xff0c;这些作用使其成为现代商业和工业环境中不可或缺的工具&#xff0c;它极大…

HarmonyOS Next鸿蒙NDK使用示例

创建一个Native C项目 跟普通项目相比&#xff0c;主要区别是多了一个cpp文件夹、oh-package.json5中的dependencies引入还有build-profile.json5中的externalNativeOptions配置&#xff0c;abiFilters是支持的CPU架构&#xff0c;目前移动端项目只支持arm64-v8a、x86_64两种。…

微信支付开发--订阅号与服务号的区别

微信支付的开发&#xff0c;首先要搞明白订阅号与服务号的区别&#xff0c;其次就是要明白微信支付有很多通道&#xff0c;例如&#xff1a;JSAPI、APP、H5、Natice、小程序支付等。 微信支付系统的时序图 1、运营主体的不同 a、订阅号&#xff1a; 个人、媒体、企业、政府或其…

sheng的学习笔记-AI-序贯覆盖(sequential covering)

AI目录&#xff1a;sheng的学习笔记-AI目录-CSDN博客 规则学习&#xff1a;sheng的学习笔记-AI-规则学习&#xff08;rule learning&#xff09;-CSDN博客 剪枝&#xff1a;https://blog.csdn.net/coldstarry/article/details/137441167 基础知识 什么是序贯覆盖 规则学习…

论文翻译:arxiv-2022 Ignore Previous Prompt: Attack Techniques For Language Models

Ignore Previous Prompt: Attack Techniques For Language Models https://arxiv.org/pdf/2211.09527 忽略之前的提示&#xff1a;针对语言模型的攻击技术 文章目录 忽略之前的提示&#xff1a;针对语言模型的攻击技术摘要1 引言 摘要 基于Transformer的大型语言模型&#xf…

G1: Yunli‘s Subarray Queries (easy version)(1900)(定长区间众数)

思路&#xff1a;因为是定长区间&#xff0c;因此我们可以利用滑动窗口维护定长区间的众数的数量 AC代码&#xff1a; #include<bits/stdc.h>using namespace std;typedef long long ll; const int MOD 998244353; const int N 2e5 10;ll a[N]; ll b[N];//前i个数的…

com.alibaba.druid.pool.DruidDataSource error

Druid报错 Sep 11, 2024 11:16:03 AM com.alibaba.druid.pool.DruidDataSource error SEVERE: init datasource error, url: "jdbc:mysql://x.x.x.x:xxxx/test01?useSSLfalse&serverTimezoneUTC" java.sql.SQLException: connect error, url "jdbc:mysql:…

JAVA:对称加密技术的详细指南

请关注微信公众号&#xff1a;拾荒的小海螺 博客地址&#xff1a;http://lsk-ww.cn/ 1、简述 对称加密是一种加密算法&#xff0c;其中加密和解密使用相同的密钥。其主要特点是速度快、效率高&#xff0c;适用于大数据量的加密需求。对称加密算法通常用于保护数据的机密性和完…