以我的视野来看,部长或技术总监这种岗位还是比较难竞争的,换言之,程序员的上升空间比较窄,如果想要拿到高级岗位,最好的是工作三五年后就转项目经理,然后再往上爬。
架构师倒是也能晋升高级岗位,但就效率而言,是非常低的。就我的经验而言,架构师系的高级职位通常是技术管理一手抓,但这也代表着,责任更大,也就是锅更大。
所以架构师系的高级职是非常不稳定的,非常累,非常容易坚持不下来,尤其在你结婚生子后,就更难坚持下来。
所以,选择大于努力,如果想拼命向上走,还是尽快入坑项目管理才是上策,不想拼命或者做不到拼命的,那就无所谓选择了。
就算是同样的架构师,java系架构师也相对更好,生态好意味着java系架构师就相对学的不用那么多,也就不用那么累。
举个简单例子,java架构师可以不会安卓和鸿蒙,但net架构师必须会winform和wpf。
所以,还是那句话,选择大于努力,能入坑java还是尽早入坑java,这样你会少走几年弯路,而且如果你躺平了,能让你35岁以后能继续用技术吃饭,还吃的不错的,就只有java的生态。
当然,java系还有细分的,能选大数据就走大数据,大数据是一个工作内容异常简单,工作量异常少的一个岗位,而且大家还觉得你工作内容很神秘,会比较有尊严。
就我的个人学习flink的经验而言,学习flink的难度只有学习java的难度的30%,但你的工资可能高于java,加班也会少于java。
下面回到正题,架构师备考。
其实所谓的记忆难点,就是我们的理解和扯淡描述之间的转换比较难。
通过copy对象属性,或者clone获得新对象,就是DTO转实体的那个对象属性映射。
要能通过下面定义分析出他在描述的是原型模式。
用原型实例指定创建对象的类型,并且通过拷贝这个原型来创建新的对象。运行对象在不了解创建对象的确切类以及如何创建细节的情况下创建自定义对
象。
就是java里常见的builder创建对象,或者理解为注解@Builder。
注:其他语言没有这个模式,其他语言开发,就理解为构造函数创建对象即可。
要能通过下面定义分析出他在描述的是生成器模式。
将一个复杂类的表示与其构造相分离,使得相同的构建过程能够得出不同的表示。
通过不同的接口来获取不同对象。
注:抽象工厂模式与工厂模式的区别是,工厂模式是通过入参来获取不同的对象。这两种模式在其他语言中是随手写的代码,所以没有形成概念结构,这里要学会区分。
要能通过下面定义分析出他在描述的是抽象工厂模式。
提供一个创建一系列相关或相互依赖对象的接口而无需指定它们具体的类。
数据驱动机制就是数据驱动的方法,有几种:数据库驱动应用,配置文件驱动应用,脚本语言驱动应用。这个有点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页在内存,且近期未被访问。
质量属性的含义如下:
性能(响应时间),可用性(宕机恢复),可修改性(修改时间短),易用性,可靠性(容错、健壮性),安全性(验证逻辑,阻止非授权用户)
这个构件体系,就是spring的体系,因为整体是IOC,所以,就一个一个的构件往里注入。
由于我们大部分开发都是做应用开发的,而这种构件模式,虽然有,但相对还是比较少见的,非java开发可能工作20年也没这么开发过软件的可能性是很高的。
非java开发可以把这个构件模式想象为docker。java开发就比较幸福了,下面的定义一看,马上就可以联想到spring的各种组件了。
这里考的中间件是特指kafka和redis和nacos,其他语言就用rabbitMQ和redis和consul思考即可。
连接与通信:考试中认为,中间件是客户端与服务器的连接与通信(连接与通信是中间件的一个属性,在考试里认为它是主要属性,我个人感觉这么定义是有点怪,但还是能给与一定理解)
交易管理机制保证交易一致性:这个应该指的是用redis构件的分布式锁。
负载均衡和高可用:这个指的是nacos,一个内部组件Load Balance(低版本的是Robbin)实现负载均衡,一个是心跳实现高可用。
这个主要是要记一些名词。
在 “R(U,F)” 中:
“R” 表示一个关系模式(Relation Schema)。
“U” 是属性集(Attributes Set),即关系模式中所有属性的集合。例如,一个学生关系模式可能有属性集 U = {学号,姓名,年龄,班级号} 等。
“F” 是函数依赖集(Set of Functional Dependencies),用于描述属性之间的约束关系。例如,F 中可能包含函数依赖 {学号}→{姓名}、{班级号}→{辅导员} 等。
这个数据库模式是针对java系的mysql数据库设计的,在java项目中,有时候会使用现有的开源项目,这些项目大多数是微服务模式的。
然后这些开源项目,通常会把表拆到8到20个数据库中,因为一开始起步时表和库就过多,所以之后,随着开发,表和库的混乱就是指数倍的增加,库表越多操作就越复杂,所以一些平平无奇的项目,也会有一些和淘宝京东这种大系统一样的困难要去面对。
也因此,有一些概念,本来是要到特定的环境下才需要学习的,但在java系统,就变成了常用概念。
注:此文章为原创,任何形式的转载都请联系作者获得授权并注明出处!
若您觉得这篇文章还不错,请点击下方的【推荐】,非常感谢!