微服务面试相关内容
分布式事务CAP定理1998年,加州大学的计算机科学家Eric Brewer提出,分布式系统有三个指标:
Consistency(一致性)
Availability(可用性)
Partition tolerance(分区容错性)
Eric Brewer认为,分布式系统无法同时满足这三个指标
这个结论就叫做CAP定理
ConsistencyConsistency(一致性):用户访问分布式系统中的任意节点,得到的数据必须一致
比如现在包含两个节点,其中的初始数据是一致的:
当修改其中一个节点的数据时,两者的数据产生了差异:
要想保住一致性,就必须实现node01 到 node02的数据 同步:
AvailabilityAvailability(可用性):用户访问分布式系统时,读或写操作总能成功。只能读不能写,或者只能写不能读,或者两者都不能执行,说明系统弱可用或不可用
Partition tolerancePartition(分区):因为网络故障或其他原因导致分布式系统中的部分节点与其他节点失去连接,形成独立分区
如上图,node01和node02之间网关畅通,但是 ...
若依框架实战项目 - 中州养老
文档以及资料:04-企业级智能物联网项目(中州养老) - 飞书云文档
项目中的护理模块相关内容已经在若依框架资料中实现
入住办理在开发之前呢,重新搞定一套新的环境,详细请参考:初始代码-环境准备
需求分析入住办理列表页原型文件如下:
搜索:老人姓名为模糊搜索,老人身份证号为精准搜索;
列表数据:列表中所展示的数据是入住成功且未退住的老人信息
发起入住办理:点击【发起入住申请】进入到【入住申请详情页】;
查看:点击【查看】进入到【入住详情页】,数据回显,不可编辑,不显示文本框,只显示已填写/已选择的内容;
入住办理详情页通过原型打开入住办理详情页,详细如下:
上述需求中,共包含了四部分:
基本信息:入住老人的基本信息,包含了姓名、年龄、身份证号、性别,住址、照片等信息
家属信息:入住老人的家属列表,可以有多个
入住配置:入住老人在养老院选择的费用信息,包含了护理等级,入住床位、入住期限等信息
签约办理:入住老人签订的合同信息
表结构设计后端开发流程在开发接口之前呢,需要先熟悉一下后端开发的流程,如下:
需求分析( ...
异步处理和AMQP协议
异步处理基础概念在接收设备数据之前,需要先来熟悉一些基本的概念,方便理解接收设备数据的基本思路
同步和异步同步和异步的概念:
同步(Background Synchronous)是指任务在后台进行处理,但其他任务需要等待任务完成后才能执行
异步(Asynchronous)是指任务的提交和执行是相互独立的,任务的执行不会阻塞程序的继续执行
同步请求下,任务1完成后才能执行任务2,任务2需要等待任务1的完成。这种顺序执行的方式称为同步
异步请求下,任务1和任务2可以并行执行,彼此之间相互独立,不需要等待对方的完成。这种并行执行的方式称为异步
单线程/多线程:决定了有多少人”同时干活”
同步/异步:决定了是否需要”一直等着”
异步的优缺点:
好处:
提高系统的并发性
改善系统的响应性
缺点:
复杂性增加
资源消耗增加
消息队列的基本概念知道了同步和异步的区别之后,再来理解一下消息队列的概念,**消息队列都是以异步的方式进行请求的**
broker:负责接收、存储和分发消息的中间件组件,实现类发送者和接收者之间的解耦和异步通信
生产者:负责 ...
Swagger在线接口文档
在线接口文档在开发中,如果遇到后端项目开发完毕,但是前端项目还未开发完成,但又需要对后端接口进行测试
先前的解决方式是通过第三方接口测试软件,如postman、apifox等进行测试
但这类测试工具需要清楚的知道接口的路径、请求方式、请求参数,且还需要手动填写对应内容
当与前端对接时,后端还需要提供详细的接口文档,当接口文档编写的不及时或者更新不及时,就会造成信息闭塞,造成不必要的效率降低
Swagger简介Swagger是一个规范和完整的框架,用于生成、描述、调用和可视化RESTful风格的Web服务
官网:https://swagger.io
它的主要作用:
使得前后端分离开发更加方便,有利于团队协作
在线自动生成接口文档,降低后端开发人员编写接口文档的负担
功能测试
Spring已经将Swagger纳入自身的标准,建立了Spring-Swagger项目,现在加Springfox。通过在项目中引入Springfox,就可以非常简单快捷的使用Swagger啦
项目中集成目前若依框架已经集成了Swagger,核心配置有如下几个:
关键依赖:
核心配置类:
位置:com.zz ...
性能优化-Redis数据库
概述Redis是一个基于内存的key-value结构数据库,也是互联网技术领域使用最为广泛的存储中间件
官网:Redis - The Real-time Data Platform
中文网:Redis中文网
key-value结构存储:
key
value
id
10001
name
小智
city
北京
主要特点:
基于内存存储,读写性能高
适合存储热点数据(热点商品、资讯、新闻)
企业应用广泛
Redis是用C语言开发的一个开源的高性能键值对(key-value)数据库,官方提供的数据是可以达到**100000+**的QPS(每秒内查询次数)。它存储的value类型比较丰富,也被称为结构化的NoSql数据库
NoSql(Not Only SQL),不仅仅是SQL,泛指非关系型数据库。NoSql数据库并不是要取代关系型数据库,而是关系型数据库的补充
关系型数据库(RDBMS):
Mysql
PostgreSQL
Oracle
SQLServer
非关系型数据库(NoSql):
Redis
Mongodb
MemCached
Redis环境准备下载与 ...
性能优化-MySQL索引
为什么要使用索引?使用索引是为了提高数据检索的效率。当数据量很大时,如果没有索引,数据库系统需要**逐条扫描数据**来找到符合条件的记录,这样会消耗大量的时间和资源。而使用索引可以通过创建特定的数据结构,将数据按照某种规则有序地组织起来,从而加快数据的查找速度
索引可以在数据库表的一列或多列上创建,它们包含了对应列值的引用和指针,使得数据库系统可以快速定位到需要的数据。通过使用索引,数据库系统可以根据索引的排序和搜索算法,快速定位到符合查询条件的数据,提高查询的效率
相同的SQL执行,左边没加索引,后边添加了索引,效率差了10倍有余(基础数据量为60万)
优点:
提高数据查询的效率,降低数据库的IO成本
通过索引列对数据进行排序,降低数据排序的成本,降低CPU消耗
缺点:
索引会占用存储空间
索引大大提高了查询效率,同时却也降低了insert、update、delete的效率
MySQL索引-结构MySQL数据库支持的索引结构有很多,如:Hash索引、B+Tree索引、Full-Text索引等
平常所说的索引,如果没有特别指明,都是指默认的 B+Tree 结构组织的索引
在没 ...
日志管理技术-ELK
日志管理查看日志信息对于运维和开发人员来说是非常必要的,常见的查看日志情况如下:
当应用程序或服务出现故障时,查看日志可帮助快速定位问题,了解故障前后的系统状态
通过分析日志,可以监控应用程序性能,识别性能瓶颈或资源消耗异常
在开发和测试过程中,查看日志有助于开发人员调试代码、定位并修复bug,同时也是验证应用程序功能是否正常的重要依据
日志采集方式在项目的logback.xml文件定义如下:
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687<?xml version="1.0" encoding="UTF-8"?> <configuration> <!-- 定义日志文件的存放路径 --> <prope ...
代码质量检查插件
代码检查插件在idea中安装阿里检查代码的插件:Alibaba Java Coding Guidelines(XenoAmess TPM),这个插件为 Java 开发者提供了编码标准和建议,旨在提高代码质量,提升可读性,可维护性,以及性能等
在idea中插件市场搜索安装,如下图:
生成代码质量报告安装完成之后,在项目上点击右键,再点击编码规约扫描,可以对项目代码进行全面扫描,并生成报告,如下图:
可以在控制台看到生成的报告:
BLOCKER 阻塞性的问题的,必须修改
CRITICAL 紧要的问题,建议修复,不影响系统正常运行
MAJOR 重要的,可能是代码不规范导致的问题,不影响系统正常运行
codereview 代码检查,代码评估(团队共同完成)
所有成员参加,评估一个人的代码
项目开发模式
项目开发模式瀑布模型(Waterfall Model)瀑布模型是一种顺序型开发模式,各个阶段按照顺序依次进行,一个阶段完成后才能进入下一个阶段。这种模式适用于需求稳定、开发周期长的项目
敏捷开发(Agile Development)敏捷开发是一种迭代型开发模式,强调团队合作、用户参与和快速响应变化。敏捷开发方法包括Scrum、XP、Lean等,适用于需求不稳定、开发周期较短的项目
DevOpsDevOps是一种将开发和运维流程整合在一起的开发模式,强调自动化和持续交付。DevOps适用于需要频繁部署和更新的项目
三者对比
持续集成持续集成 (Continuous integration,简称 CI) 指的是,频繁地(一天多次)将代码集成到主干
它的好处主要有两个:
快速发现错误。每完成一点更新,就集成到主干,可以快速发现错误,定位错误也比较容易
防止分支大幅偏离主干。如果不是经常集成,主干又在不断更新,会导致以后集成的难度变大,甚至难以集成
持续集成的目的,就是让产品可以快速迭代,同时还能保持高质量。它的核心措施是,**代码集成到主干之前,必须通过自动化测试**。只要有一个 ...
项目自动化部署-Jenkins
项目部署整体部署思路
在企业正常的项目部署中,可能会涉及多台服务器共同使用,如上图中的Nginx、Tomcat、Redis、MySQL都会有对应的单独的服务器,让各个服务器进行互相通信即可完成部署
其中的微信小程序必须租腾讯的服务器才能完成部署
在学习阶段,所有的服务都使用同一个虚拟机来完成项目的部署
环境准备软件环境:
软件
版本
安装方式
docker
Docker version 20.10.11
shell
docker-compose
1.29.1
shell
Java JDK
11.0.19
shell
Maven
3.6.1
shell
Git
1.8.3.1
shell
Redis
7.2.4
docker
MySQL
8.0.29
docker
Nginx
1.25.5
docker
shell脚本:
1234567891011121314151617181920212223242526272829303132333435363738#!/bin/bash# 安装 Gitecho "开始安装 Git.. ...
