架构设计面试系列-01

1. 软件架构设计都有哪些基本原则?

1、开闭原则(OCP Open Close Principle)

Software entities should be open for extension, but closed for modification.

定义:软件中的对象(类、模块、函数等)应该对于扩展是开放的,但是对于修改是封闭的。简单的说就是程序中类应该是易于扩展的,而不是一有什么新的需求或者变化就去修改原来的代码,这样很容易出现问题。

2、里氏替换原则(LSP Liskov Substitution Principle)

定义:在基类出现的地方,其子类也可以出现,并且不会出现错误。就是利用Java面向对象思想中的继承、多态的特性。简单来说凡是基类适用的地方,子类一定适用。

3、依赖倒转原则(DIP Dependence Inversion Principle)

定义:高层次的模块不依赖于低层次模块的实现细节。简单来说就是依赖抽象(高层次模块)而不依赖具体实现(低层次模块)。

4、迪米特原则(最少知识原则 LKP/LOD Least Knowledge Principle)

定义:一个类应该对自己需要耦合或者调用的类知道的最少,类的内部如何实现与调用者或者依赖者没关系,调用者或者依赖者只需要知道它需要的方法即可。

5、接口隔离原则(ISP InterfaceSegregation Principles)

定义:不依赖不需要的接口,从而容易重构、更改和重新部署。

6、单一职责原则(SRP Single Responsibility Principle)

定义:对一个类来说,应该仅有一个引起它变化的原因。简单来说就是模块的划分需要做到职责清晰,不要既能满足A需求,又能满足B需求,这样耦合太强,不利于后期的扩展和维护。

2. 什么是前后端分离架构?

前后端分离已成为互联网项目开发的业界标准使用方式,例如通过nginx与tomcat的方式(也可以中间加一个nodejs)有效的进行解耦,并且前后端分离会为以后的大型分布式架构、弹性计算架构、微服务架构、多端化服务(多种客户端,例如:浏览器,车载终端,安卓,IOS等等)打下坚实的基础。这个步骤是系统架构从“猿”进化成“人”的必经之路。

核心思想: 前端HTML页面通过AJAX调用后端的RESTFUL API接口并使用JSON数据进行交互。

Web服务器: 一般指像Nginx,Apache这类的服务器,他们一般只能解析静态资源;

应用服务器: 一般指像Tomcat,Jetty,Resin这类的服务器可以解析动态资源也可以解析静态资源,但解析静态资源的能力没有web服务器好;

一般都是只有web服务器才能被外网访问,应用服务器只能内网访问。

以前的Java Web项目大多数都是Java程序员既搞前端,又搞后端。随着技术的发展,渐渐的许多大中小公司开始把前后端的界限分的越来越明确,前端工程师只管前端的事情,后端工程师只管后端的事情。正所谓术业有专攻,一个人如果什么都会,那么他毕竟什么都不精。大中型公司需要专业人才,小公司需要全才。

3. 什么是三层架构?

三层架构就是为了符合“高内聚,低耦合”思想,把各个功能模块划分为表示层(UI)、业务逻辑层(BLL)和数据访问层(DAL)三层架构&

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

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

相关文章

紫光展锐T760_芯片性能介绍_展锐T760安卓核心板定制

展锐T760核心板是一款基于国产5G芯片的智能模块,采用紫光展锐T760制程工艺为台积电6nm工艺,支持工艺具有出色的能效表现。其采用主流的44架构的八核设计,包括4颗2.2GHz A76核心和4颗A55核心设计,内存单元板载可达8GB Ram256GB ROM…

阿里云centos安装mysql,并修改初始密码

阿里云centos安装mysql,并修改初始密码 安装数据库、修改初始密码、并测试建立自己的数据库步骤1:创建数据库和用户步骤2:配置Nginx1. 创建新的站点配置文件2. 编辑配置文件3. 保存并退出编辑器4. 测试配置文件是否正确5. 重新加载 Nginx 以应…

uniapp vuecli项目融合[小记]:将多个项目融合,打包成一个小程序/App,拆分多个H5应用

前言: 目前两个uniapp vuecli开发的项目【A、B】,新规划的项目C:需要融合项目B 80%的功能模块,同时也需要涵盖项目A的所有功能模块。 应用需求: 1、新项目C【小程序】可支持切换到应用A/C界面【内部通过初始化、路由跳…

0125-1-vue3初体验

vue3尝鲜体验 初始化 安装vue/clinext: yarn global add vue/clinext # OR npm install -g vue/clinext然后在 Vue 项目运行: vue upgrade --next项目目录 vue3-template ├── index.html // html模板 ├── mock // mock数据 │ └── user.…

【学习】基础知识

1. 不同的维度表示 图像的维度表示(H , W , C): 对于一张彩色图像,通常有三个通道(红、绿、蓝),每个通道都是一个二维矩阵。假设图像的高度为 H,宽度为 W,那么图像的维度表示为 (H…

qt学习:QListWidget控件+自定义条目项+双击删除+单击获取

目录 图片 头函数 接口 显示案例 方法1 方法2 方法3 方法4 自定义 方法5 在方法4上实现 图片 头函数 #include <QListWidgetItem> 接口 //不怎么常用void addItem(const QString &label)void addItems(const QStringList &labels) //自定义条目项…

Redis客户端之Redisson(二)Redisson分布式锁

一、原理&#xff1a; Redisson并没有通过setNx命令来实现加锁&#xff0c;而是基于 Redis 看⻔狗机制&#xff0c;自己实现了一套分布式锁逻辑。 1、加锁机制&#xff1a; 二、使用方法&#xff1a;

EasyExcel实现下载模板

实体类&#xff1a; package com.aicut.monitor.domain;import com.alibaba.excel.annotation.ExcelIgnore; import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; import com.alibaba.excel.annotation.ExcelProperty; import com.alibaba.excel.annotation.write.s…

YOLOv8全网独家首发:Powerful-IoU更好、更快的收敛IoU | 2024年最新IoU

💡💡💡本文独家改进:Powerful-IoU更好、更快的收敛IoU,是一种结合了目标尺寸自适应惩罚因子和基于锚框质量的梯度调节函数的损失函数 💡💡💡MS COCO和PASCAL VOC数据集实现涨点 收录 YOLOv8原创自研 https://blog.csdn.net/m0_63774211/category_12511737.htm…

【新课上架】安装部署系列Ⅲ—Oracle 19c Data Guard部署之两节点RAC部署实战

01 课程介绍 Oracle Real Application Clusters (RAC) 是一种跨多个节点分布数据库的企业级解决方案。它使组织能够通过实现容错和负载平衡来提高可用性和可扩展性&#xff0c;同时提高性能。本课程基于当前主流版本Oracle 19cOEL7.9解析如何搭建2节点RAC对1节点单机的DATA GU…

数学知识第一期 质数

前言 本文是关于质数的一些内容&#xff0c;希望能够对大家有帮助&#xff01;&#xff01;&#xff01; 一、质数的基本内容 定义&#xff1a; 质数又称素数。一个大于1的自然数&#xff0c;除了1和它自身外&#xff0c;不能被其他自然数整除的数叫做质数&#xff1b;否则…

基于SpringBoot IP黑白名单的实现

业务场景 IP黑白名单是网络安全管理中常见的策略工具&#xff0c;用于控制网络访问权限&#xff0c;根据业务场景的不同&#xff0c;其应用范围广泛&#xff0c;以下是一些典型业务场景&#xff1a; 服务器安全防护&#xff1a; 黑名单&#xff1a;可以用来阻止已知的恶意IP地…

html:thymeleaf实现日期格式转换

thymeleaf内置对象有&#xff1a; #dates&#xff1a;日期格式化内置对象 #numbers:数字格式化 <td th:text"${#dates.format(man.assayTime,yyyy-MM-dd)}"></td>参考以下文章&#xff1a; https://blog.csdn.net/silence1120/article/details/1057904…

Go Zero微服务个人探究之路(十)实战走通微服务前台请求调用的一套流程model->rpc微服务->apiHTTP调用

前言 Go语言凭借低占用&#xff0c;高并发等优秀特性成为后台编程语言的新星&#xff0c;GoZero框架由七牛云技术副总裁团队编写&#xff0c;目前已经成为Go微服务框架里star数量最多的框架 本文记录讲述笔者一步步走通前台向后台发出请求&#xff0c;后台api调用rpc服务的相…

VR数字展厅,平面静态跨越到3D立体化时代

近些年&#xff0c;VR的概念被越来越多的人提起&#xff0c;较为常见的形式就是VR数字展厅。VR数字展厅的出现&#xff0c;让各地以及各行业的展厅展馆的呈现和宣传都发生了很大的改变和革新&#xff0c;同时也意味着展览传播的方式不再局限于原来的图文、视频&#xff0c;而是…

js的一些运算符规则

?? 是根据 null 和 undefined 判断的&#xff0c; || 是根据 布尔值 false 判断的, 左侧为true 不看右侧 && 左侧为false 不看右侧 ?. ”可选链操作符“&#xff0c;允许读取位于连接对象链深处的属性的值&#xff0c;而不必明确验证链中的每个引用是否有效。在引…

【Redis】list以及他的应用场景

介绍 &#xff1a;list 即是 链表。链表是一种非常常见的数据结构&#xff0c;特点是易于数据元素的插入和删除并且且可以灵活调整链表长度&#xff0c;但是链表的随机访问困难。许多高级编程语言都内置了链表的实现比如 Java 中的 LinkedList&#xff0c;但是 C 语言并没有实现…

Spring Boot如何统计一个Bean中方法的调用次数

目录 实现思路 前置条件 实现步骤 首先我们先自定义一个注解 接下来定义一个切面 需要统计方法上使用该注解 测试 实现思路 通过AOP即可实现&#xff0c;通过AOP对Bean进行代理&#xff0c;在每次执行方法前或者后进行几次计数统计。这个主要就是考虑好如何避免并发情况…

JavaScript Proxy 对象、eval函数详解

&#x1f9d1;‍&#x1f393; 个人主页&#xff1a;《爱蹦跶的大A阿》 &#x1f525;当前正在更新专栏&#xff1a;《VUE》 、《JavaScript保姆级教程》、《krpano》、《krpano中文文档》 ​ 目录 ✨ 前言 ✨ 正文 Proxy 什么是 Proxy 代理 handlers get 捕获器 se…

Oracle ORA-09925

Error : 30: Read-only file system 造成这个问题的原因大多数是因为非正常关机后导致文件系统受损引起的&#xff0c;在系统重启之后&#xff0c;受损分区就会被Linux自动挂载为只读。 解决办法之一&#xff1a; 重启系统