软件架构系列感想(六)

2020年chx的计算机保研之路系列(5)——夏令营面试问题及感想杂谈 写在前面 自动化所不出意外的gg了。综合分析了一下形势,发现今年去清北的可能性不大了,因此就打算计算所上岸了。当然,九推该报名还是要报名的,试一下也能够让我死心。。。 之前有一些小伙伴问我能不能把面试问题写一写,趁着我还没有忘得太干净,赶紧记录一下,也给其他小伙伴一个复习参考。 主要会涉及英文问题,数学问题、专业问题和机试这四个方面,都是我面试当中碰到的。我只把一些重要的问题列出,答案这种东西是见仁见智,大家各显神通吧。 英语问题 自我介绍。 介绍你的家... 阅读详情

1、代码不会讲述完整的故事。

编写好的代码很重要,重构迫使我们考虑让方法变得更小、更可复用和自文档化,每个人都应该追求编写易于阅读、理解和维护的好代码。

了解系统的设计意图,可以通过代码库如何被拆分为子项目、目录、包、命名空间等对整体架构做出一些判断,也可以根据对这个项目有限的了解、业务领域、你对团队如何构建软件的期望以及你对所用技术的知识,做出自己的假设。

(1)软件系统如何融入已有的系统形态

(2)为什么会选择正在使用的技术

(3)软件系统的整体结构

(4)各个组件在运行时部署在哪里,如何相互沟通

(5)Web层如何知道在哪里找到中间层

(6)日志/配置/错误的处理/其他采用了什么方法,在代码库中是否一致

(7)代码库中是否使用了通用的模式和原则

(8)如何添加新功能,在哪里添加

(9)栈的安全性是如何实现的

(10)如何实现可伸缩性

(11)与其他系统的接口如何工作

2、代码之上还有一个额外的信息层。

这类信息和代码是互补的,应该在某处被捕获,比如轻量级的辅助文档,他能描述代码自己无法描述的东西。

语境:这都是关于什么的

功能概览:系统能做什么

质量属性:是否有重要的非功能需求

约束:是否有重要的约束

原则:采用了哪些设计和开发原则

软件架构:大局看起来怎么样?系统的结构如何

外部接口:有哪些外部接口

代码:是否有你需要解释的实现细节

数据:数据模型看起来怎么样?存储在哪里

基础设施架构:目标部署环境看起来怎么样

部署:软件和基础设施之间的映射是什么样的

运营和支持:人们如何运营和支持系统

3、语境是用来为文档的其余部分设置好场景,涉及以下问题:

(1)这个软件项目/产品/系统是关于什么的

(2)构建的是什么

(3)他如何融入现有环境?比如系统、业务流程等

(4)谁在使用(用户、角色、参与者、人物等)

4、软件的功能性概览,涉及以下问题:

(1)系统实际上做什么是否清楚

(2)哪些特性、功能、用例、用户故事等对架构是重要的,原因是否清楚

(3)重要的用户是谁(角色、参与者、人物等)以及系统如何满足他们的需求是否清楚

(4)上述已用于塑造和定义架构是否清楚

(5)从流程的角度系统做什么是否清楚

(6)系统的主要流程和信息流是什么

5、质量属性,涉及以下问题:

(1)对于架构必须满足的质量属性是否有清晰的认识

(2)质量属性是否满足SMART原则(具体、可衡量、可达成、相关、及时)

(3)有没有不切实际的质量属性

清单:性能(比如延迟和吞吐);可伸缩性(比如数据和流量);可用性(比如运行时间、停机时间、定期维护、全天候、99.9%等);安全性(比如认证、授权、数据保密性等);可扩展性;灵活性;审计;监测和管理;可依赖性;故障转移/灾难恢复目标;业务连续性;互操作性;可访问性;易用性;

6、约束清单:

时间、预算和资源;允许使用的技术清单和技术约束;目标部署平台;已有系统和继承标准;局部标准(比如开发、编码等);公共标准(比如http、soap、xml等);标准协议;标准消息格式;软件开发团队的规模;软件开发团队的技能配置;所构建软件的本质(比如战术或战略);内部知识产权的使用;

7、软件开发原则清单:

架构分层策略;

视图中没有业务逻辑;

视图中没有数据访问;

接口的使用;

始终使用ORM;

依赖注入;

好莱坞原则;

高内聚、低耦合;

遵循SOLID(单一职责原则、开闭原则、里氏替换原则、接口隔离原则、依赖倒置原则);

确保所有组件都是无状态的;

始终选择存储过程;

绝不使用存储过程;

不要重新发明轮子;

错误处理、日志等的通用方法;

购买而非构建;

8、外部接口清单:

(1)关键的外部接口是哪些?

你的系统和其他系统之间的;暴露出来用于消费的API;从你的系统导出的文件;

(2)每个接口都从技术角度考虑过了吗?

接口的技术定义是什么;

如果使用了消息,哪些队列(点对点)和话题(发布-订阅)是用于通信的组件;

消息的格式是什么;

同步还是异步;

异步消息的连接有保障吗;

如果必要,人们会长期订阅吗;

消息能否打乱顺序接收,这是一个问题吗;

接口是否幂等;

接口是否总是可用,或者是否需要在本地缓存数据;

性能/可伸缩性/安全性是如何满足的。

9、数据部分的目的是记录任何从数据的角度来看重要的东西,涉及以下问题:

数据模型看起来是什么样的;

数据存储在哪里;

谁拥有数据;

数据需要多少存储空间;

归档和备份策略是什么;

业务数据的长期归档是否有法规要求;

日志文件和审计跟踪是否有类似的要求;

是否用简单文件来存储;

如果是,用的是哪种格式。

10、基础设施架构,涉及以下问题:

是否有清晰的物理架构;

在所有的层中,什么硬件(虚拟或物理)做了这件事;

如果适用,它是否满足冗余、故障转移和灾难恢复;

选择的硬件组件如何改变大小和被选中是否清楚;

如果使用了多个服务器和网站,他们之间的网络联系是什么;

谁负责基础设施的支持和维护;

有照管通用基础架构(比如数据库、消息总线、应用程序服务器、网络、路由器、交换机、负载均衡器、反向代理、互联网连接等)的中心团队吗;

谁拥有资源;

开发、测试、验收、试制、生产等是否有合适的环境;

11、部署部分就是软件和基础设施之间的映射,涉及以下问题:

软件安装和配置软件在哪里,怎么做;

软件如何部署到基础设施架构部分描述的基础设施元素上是否清楚;

内存和CPU在运行于单块基础设施上的进程间如何分配是否清楚;

有容器和或组件以主动-主动、主动-被动、热备用、冷备用用等形态运行吗;

部署和回滚策略是否已经定义;

软件或基础设施出现故障时会发生什么;

跨站点的数据如何复制是否清楚;

再次学习C++基础感想 这篇文章适合收藏。谢谢! 阅读详情

相关推荐

Windows10 Qt下用MINGW 编译VTK-8.1.0

1. 材料准备(1) 下载VTK-8.1.0: https://www.vtk.org/download/(2) 下载TIFF库: http://gnuwin32.sourceforge.net/packages/tiff.htm(直接安装即可,注意选择路径不包含中文字符)2. 安装: (1) cmake配置: a. Module下配置:勾选下图所示的六项 b. Build 配置:勾选这里能够在b...

hit1524468的专栏 3891

对软件体系结构这门课有什么感想,学到了什么

学习软件体系结构这门课程可以带来许多有益的收获和深刻的感悟。

华仔的博客 684

Veritas NetBackup 10.1 Windows安装指南:从账户配置到完整部署

本文详细介绍了Veritas NetBackup 10.1在Windows系统上的完整安装流程,从账户配置到部署验证。重点讲解了创建专用服务账户、安装组件选择、许可证输入等关键步骤,并提供了常见问题排查和进阶配置建议,帮助用户顺利完成企业级备份解决方案的部署。

weixin_26765287的博客 454

软件架构系列感想(五)

1、通用的抽象集合。可以将软件系统简单的理解成由多个容器构成,容器又由多个组件构成,组件由一个或多个类实现。类(在一个面向对象系统里,类是最小结构单元)组件(组件可以想象成一个或多个类组成的逻辑群组,通常由多个类在更高层次的约束下组合而成)容器(指一个在其内部可以执行组件或驻留数据的东西)系统(系统是最高的抽象层次,代表了能够提供价值的东西)2、软件的静态视图。语境(设定场景的高层次图,包括关键的...

woshibendangao的专栏 413

Aurora8b10b光口通信实战:复位时序与IP核配置详解

本文深入解析了Aurora 8B10B协议在FPGA高速光口通信中的核心实践,重点剖析了确保链路稳定启动的关键复位时序与IP核配置细节。通过详解全双工与单工模式下的复位流程、Vivado中IP核的物理层与链路层参数设置,并结合用户逻辑设计实例,为工程师实现可靠的高速数据传输提供了清晰的实战指南。

weixin_29280219的博客 177

Debian下Rust环境极速安装指南:国内镜像+避坑配置(附清华/中科大源对比)

本文详细介绍了在Debian系统上快速安装和配置Rust开发环境的完整指南。针对国内网络环境,重点对比评测了清华大学、中国科学技术大学等主流镜像源,提供了详细的安装配置步骤、Cargo优化技巧以及常见问题排查方案,帮助开发者显著提升依赖下载和编译效率。

s8t9u0v1w的博客 1161

互联网软件架构设计的思考

互联网软件架构   互联网软件通常是指在万维网上搭建的站点平台,其用户基数大且增长迅速。在其架构设计时,需要考虑高并发和高可用性。通用的互联网架构设计中需要的关注点。 高并发: 高并发是指在系统能够并行处理多个请求,其相关的指标有响应时间、吞吐量、QPS、并发用户数等。 响应时间:系统对请求作出的响应时间。 吞吐量:单位时间内系统可以处理的请求数。 QPS(Query Per Second)...

lusic01的专栏 470

组合导航(八):INS/GPS组合导航

INS/GPS组合导航1 误差反馈1.1 开环INS/GPS架构1.2 闭环INS/GPS架构2 组合导航的类型2.1 松耦合 的INS/GPS组合导航2.2 紧耦合 的INS/GPS组合导航2.3 深度耦合的 INS/GPS组合导航3 INS方程的动态误差模型4 松耦合的INS/GPS组合导航模型4.1 系统模型4.2 测量模型4.3 INS/GPS松耦合总框图5 紧耦合的INS/GPS组合导航模型5.1 系统模型5.2 测量模型 INS/GPS组合导航 对比INS与GPS导航方法,二者都有其各自的优.

weixin_43793960的博客 3万+

软件架构设计的心得

最近正在为公司提炼一个规范的、通用的 开发架构,有一些心得,需要把它辑录下来, 以免以后忘掉。1。建立一个软件架构,最关键得核心应该是建立一套标准的、易于执行的、代码编写规则。预先对常见的情况,定义一些编写规则,并要求开发者必须执行,以保证代码的可读性,以及易维护性。2。对一些常用的场景,要设计一些通用的的、可以解决大部分情况的共用构件,以提高开发质量和开发效率。而且这些共用构件,目的是为

gavinou的专栏 1203

基于YOLOv5与改进遗传算法的动态路径规划方法研究

摘要 本文提出一种融合YOLOv5目标检测与改进遗传算法的动态路径规划方法。通过YOLOv5实时感知环境中的动态和静态障碍物,将语义信息转化为栅格地图。针对传统遗传算法在路径规划中易早熟收敛、局部搜索能力差等问题,提出自适应初始化种群策略、动态变异算子及精英保留机制等改进方案。仿真结果表明,该方法在动态环境中能规划出更安全、平滑且长度更优的路径,具有更强的环境适应性和鲁棒性。 关键词:路径规划;YOLOv5;遗传算法;动态环境;目标检测

huanghm88的专栏 939

Pandas滚动窗口的妙用:动态计算列数据的最大值

Pandas的滚动窗口(rolling window)功能是数据分析中处理时间序列数据的重要工具。本文通过实例演示了如何使用rolling(window=4).max()计算DataFrame列A的滚动最大值,并将结果存入新列Max_Range。该方法会在4个元素的滑动窗口内计算最大值,前3行因数据不足显示为NaN。这种技术广泛应用于金融分析(如股价波动)、数据平滑和趋势识别等场景,能有效帮助分析数据的动态变化特征。示例展示了从数据准备到结果输出的完整流程,体现了Pandas在处理滑动窗口计算时的高效性和便

m0_74337424的博客 53

软件架构系列感想(一)

1、什么是架构?架构是一种能力,架构角色则是要求你在具体事物中行使某些行为,而架构师则是用来标识这些能力与行为的一个职务。对于不同的人来说,可能意味着什么是不一样的。模块、连接、依赖和接口;大局观;改变成本很高的事情;难以改变的事情;更加兼顾全局的设计;接口而非实现;审美(比如艺术般的整洁代码);概念模型;满足非功能需求/质量属性;每件事情都有架构;沟通能力(抽象、语言、词汇);计划;一定程度的严...

woshibendangao的专栏 1148

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

软件架构系列感想(四)

1、技术约束。时间和预算是大多数软件开发者都熟悉的约束,还有一些在大型组织里经常碰到的一些技术相关的约束:(1)批准的技术清单(目的是限制组织必须支持,运行,维护和购买许可证的技术)(2)现有系统的互操作性(有时别的系统需要和你构建的系统整合,这时组织性的约束规定了你可以用于整合的协议和技术)(3)目标部署平台(包括嵌入式设备、windows或Linux服务器的可用性,以及云)(4)技术成熟度(有...

woshibendangao的专栏 431

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

软件架构系列感想(三)

1、未来的架构师在哪里?我们可能花了很长时间谈论编写代码、自动化测试、自动化部署、工具、各种技术,以及所有相关的流程,而可用的软件是关键。多想想这些问题:(1)你上次写代码是什么时候(2)你上次重构是什么时候(3)你上次测试你的代码是什么时候(4)你上次设计东西是什么时候(5)你上次从零开始设计一个软件系统是什么时候(6)你上次从零开始设计一个会由一个团队来实现的软件系统是什么时候2、有些人过于渴...

woshibendangao的专栏 385

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

软件架构系列感想(二)

3、软件架构师是什么? 应用程序架构的关注点是应用程序,通常包括将应用程序解构为类和组件,确保设计模式的正确应用,构建和使用框架等等。本质上,应用程序架构谈论的是软件设计的低级别切面,通常只考虑单一的技术栈。 结构单元主要以软件为基础,包括编程语言和结构、类库、框架、api等。它由类、组件、函数、模块、设计模式等加以描述。应用程序架构着重考虑软件和代码组织。 大多数软件系统实际上是由横跨不同...

e5Max的专栏 397

看史泰龙演的洛奇系列片的一些感想

这几天看《洛奇》系列片的一些感想,分享一下 《洛奇》电影一共6部,主演是史泰龙,讲的是一个拳击手洛奇从一个无名的拳击手到最后的世界级的拳击冠军,并最后50多岁了还跟现在的拳击冠军进行比赛的故事,每部电影之间故事衔接的非常好,之前我没有看过,我觉得我迟到了,我应该早点遇到这么好看的电影,这部电影能给人很多启发。 我写下我的一些感受: 1 只有努力才能出结果,不管你多么优秀,假如你不努力,你也会

晓兵专栏 2682

不错,过几天给大家一系列原创感想帖子加精华,加油!:):rose:

不错,过几天给大家一系列原创感想帖子加精华,加油!:):rose:[@more@]不错,过几天给大家一系列原创感想帖子加精华,加油!:):rose: ...

102

仙剑游戏系列..感想

当然这篇文章的一切内容都是…个人感想 先说一说我个人认为的仙剑系列的巅峰…. 开山鼻祖,也足够成为永恒之经典的《仙剑奇侠传一》 确立仙剑三皇六界世界观的里程碑之作的《仙剑奇侠传三》 被众多玩家称为神作的《仙剑奇侠传四》 再从游戏性角度来看看 《仙剑奇侠传一》 《仙剑奇侠传三》 《仙剑奇侠传四》 以上内容纯属个人感想,以上 最近知乎推给我一些…能否从游戏性分析一下仙...

jnxxhzz的博客 3572

Spring Boot应用开发课后感想

参加完Spring Boot应用开发课程后,我深刻体会到了这项技术在现代软件开发中的重要地位和其所带来的革命性变化。Spring Boot作为Spring家族中的一个关键成员,不仅继承了Spring框架的强大功能,更通过一系列默认配置和简化措施,极大地提升了开发的效率与应用的性能。以下是我对这次学习经历的一些详细感想。

guihunzhiquan的博客 1423
上一篇: 软件架构系列感想(五)
下一篇: 软件架构分层设计
e5Max
博客等级 码龄14年 145粉丝 129原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值