/avatar.png

格心

软件架构设计

1 软件架构概述

1.1 软件架构的定义

架构是对系统的抽象,由多个架构组成,任何软件都存在架构,元素与其行为的集合构成架构内容,架构具有“基础性”,架构隐含有“决策”。

1.2 软件架构重要性

项目关系人之间交流平台;
早期设计决策;
在较高层面上实现软件复用;
架构对开发的指导与规范意义不容忽略。

1.3 架构的模型

结构模型;框架模型;动态模型;过程模型;功能模型;
逻辑视图,开发视图,进程视图,物理视图,场景。

2 架构需求与软件质量属性

2.1 软件质量属性

功能性;可靠性;易用性;效率;可维护性;可移植性;

  • 1 运行期质量属性
    性能;安全性;易用性;可伸缩性;互操作性;可靠性;持续可用性;鲁棒性;

  • 2 开发期质量属性
    易理解性;可扩展性;可重用性;可测试性;可维护性;

2.2 六个质量属性与实现

质量属性:可用性;可修改性;性能;安全性;可测试性;易用性;

质量属性场景组件:刺激源;刺激;环境;制品;响应;响应度量;

  • 1 可用性与其实现战术
    可用性描述
    可用性战术
    错误检测:命令/响应;心跳;异常;
    错误恢复
    表决;主动冗余;被动冗余;备件;状态再同步;检查点/回滚;
    错误预防
    从服务中删除;事务;进程监视器;
  • 2 可修改性与其实现战术
    可修改性描述
    可修改性战术
    局部化修改;(维持语义的一致性;预期期望的变更;泛化该模块;限制可能的选择)
    防止连锁反应;(信息隐藏;维持现有的接口;限制通信路径;仲裁者的使用)
    推迟绑定时间;(运行时注册;配置文件;多态;构件更换;)
  • 3 性能与其实现技术
    性能描述
    性能战术
    资源消耗:闭锁时间;
    资源需求:减少处理事件流所需的资源;减少所处理事件的数量;控制资源的使用;
    资源管理:引入并发;维持数据或计算的多个副本;增加可用资源;
    资源仲裁:先进先出;固定优先级调度;动态优先级调度;静态调度;
  • 4 安全性与其实现技术
    安全性描述
    安全性战术
    抵抗攻击:对用户进行身份验证;对用户进行授权;维护数据的机密性;维护完整性;限制暴露的信息;限制访问;
    检测攻击
    从攻击中恢复:恢复;识别攻击者;
  • 5 可测试性与其实现战术
    可测试性描述
    可测试性战术
    输入/输出:记录回放;将接口与现实分离;优化访问线路
    内部监控
  • 6 易用性与实现战术
    易用性描述
    易用性战术
    运行时战术:任务的模型;用户的模型;系统的模型;
    设计时战术
    支持用户主动操作

常见的六个质量属性:可用性、可修改性、性能、安全性、可测试性、易用性。

自定义扩展功能测试

自定义扩展

脑图测试

  • Root
    • l1
      • l11
      • l12
    • l2
      • l12
        • l121
        • l122
      • l13
    • l3
      • l31
        • l313
        • l323
Test1

ABC

2021
Test
11 months

ABC

博客代办事项

网站功能

  • 文章加密
  • 自定义域名
  • 网站分析
  • 脑图
  • 时间轴
  • 评论的优化
  • 关于页面的优化
  • 版权声明
  • 运行时间
  • 赞赏
  • 网站流量统计

编辑

  • 新文章头部模板

phonics

自然拼读

元音

  • a
    • am
      • pam
      • sam
    • ad
      • dad
    • at
      • cat
      • rat
    • an
      • van
      • man
      • ran
    • ap
      • cap
      • nap
      • lap
    • ab
      • cab
      • lab
      • tab
    • ag
      • bag
      • rag
      • wag
    • ack
      • jack
      • back
      • sack
      • pack
    • ant
      • pant
      • Kant
      • rant
    • ang
      • bang
      • hang
      • sang
    • ank
      • bank
      • rank
      • sank
      • tank
    • amp
      • lamp
      • camp
      • ramp
  • e
    • ed
      • Ted
      • red
    • en
      • ten
      • hen
    • ell
      • bell
      • sell
    • eg
      • egg
      • meg
      • leg
      • beg
    • et
      • jet
      • get
      • wet
    • ess
      • Bess
      • less
      • mess
    • end
      • bend
      • mend
      • send
    • ent
      • Kent
      • bent
      • sent
      • went
      • tent
    • est
      • best
      • pest
      • nest
      • test
      • west
    • eck
      • neck
      • peck
      • deck
  • i
    • id
      • Sid
      • kid
    • ig
      • pig
      • dig
    • ill
      • Jill
      • hill
      • kill
    • it
      • sit
      • fit
      • hit
      • pit
    • im
      • Tim
      • Jim
      • Kim
      • dim
    • in
      • fin
      • win
      • tin
      • pin
    • ing
      • ding
      • ring
      • king
      • sing
    • ink
      • pink
      • sink
      • link
    • ish
      • fish
      • dish
      • wish
    • ick
      • pick
      • kick
      • sick
      • tick
      • Rick
  • o
    • ox
      • fox
      • box
    • ot
      • pot
      • hot
    • op
      • hop
      • top
    • ob
      • Bob
      • job
      • rob
    • od
      • nod
      • pod
      • rod
    • og
      • hog
      • jog
      • log
    • om
      • Tom
      • mom
    • ock
      • rock
      • sock
      • lock
  • u
    • ug
      • bug
      • mug
    • un
      • run
      • sun
    • ut
      • hut
      • nut
    • ub
      • cub
      • rub
      • tub
    • um
      • gum
      • hum
      • mum
    • uck
      • duck
      • luck
      • tunk
    • ump
      • bump
      • hump
      • jump
    • unch
      • lunch
      • munch
      • punch

.NET 本质论

声明:本文仅用做复习整理知识,在下列文章中进行二次加工,大部分内容整理自: https://www.cnblogs.com/edisonchou/p/4787775.html https://zhuanlan.zhihu.com/p/38799766

.NET 本质论

.NET中所有类型的基类是什么

System.Object

值类型和引用类型的区别

所有继承自System.ValueType的类型是值类型,而其他类型都是引用类型。
常用的值类型包括:结构、枚举、整数型、浮点型、布尔型等等。

  • 赋值时的区别 值类型的变量直接将获得一个真实的数据副本,而对引用类型的赋值仅仅是把对象的引用赋给变量,这样就可能导致多个变量引用到一个对象实例上。
  • 内存分配的区别 引用类型的对象将会在堆上分配内存,而值类型的对象则会在堆栈上分配内存
  • 继承结构的区别

装箱和拆箱的原理

装箱:CLR需要做额外的工作把堆栈上的值类型移动到堆上,这个操作就被称为装箱。
拆箱:装箱操作的反操作,把堆中的对象复制到堆栈中,并且返回其值。

struct和class的区别,struct适用于哪些场合

  • struct(结构)是值类型,而class(类)是引用类型。
  • struct与class相比,不具备继承的特性
  • struct不能有无参数的构造方法(class默认就有),也不能为成员变量定义初始值。

C#中方法的参数传递有哪几种方式

  • ref关键字:引用传递参数,需要在传递前初始化;(ref 要求参数在传入前被初始化)
  • out关键字:引用传递参数,需要在返回前初始化;(out 要求参数在方法返回前被初始化)
  • params关键字:允许方法在定义时不确定参数的数量。

浅复制和深复制的区别

  • 浅复制:复制一个对象的时候,仅仅复制原始对象中所有的非静态类型成员和所有的引用类型成员的引用。(新对象和原对象将共享所有引用类型成员的实际对象)
  • 深复制:复制一个对象的时候,不仅复制所有非静态类型成员,还要复制所有引用类型成员的实际对象。

.NET中栈和堆的差异

  • .NET 中的栈 堆栈用来存储值类型的对象和引用类型对象的引用(地址),其分配的是一块连续的地址,堆栈上的地址从高位向低位分配内存。

https://cdn.jsdelivr.net/gh/Gethin1990/PicBed/BlogImg/20210426140758-2021-04-26-14-07-59.png