苍穹外卖Day01项目日志
1.软件开发流程和人员分工是怎样的?
软件开发流程
一个软件是怎么被开发出来的?
需求分析
先得知道软件定位人群、用户群体、有什么功能、要实现什么效果等。
需要得到需求规格说明书、产品原型。

其中前后端工程师要关注的就是产品原型图。

你看这个产品原型,是不是很丑?要优化,就看UI(设计师)的。
设计
包括UI设计、数据库设计、接口设计等。
UI设计,就是原型图界面这么丑,不能做成这样。
数据库设计,就是设计存数据的结构。
接口设计,就是设计前后端交互规则。
编码
就是写代码嘛。
包括项目代码、单元测试。
这个写代码,就是根据原型、接口文档去写。
有的人会说,“直接用页面测试嘛!”
一般这时候,前端页面都没看到,所以还不能联调,所以还是单元测试。
测试
产出测试用例、测试报告等。
测试包括压力测试、性能测试等。
比如查到数据,花了几秒。
比如每秒钟1k的并发,能不能抗住。
测试没问题,项目就ok了,就交付使用了。
上线运维
软件环境安装、配置。
搭建软件运行环境。
角色分工
项目经理
对整个项目分工,负责进度把控。
可能会用到项目管理软件,比如禅道、ones。


除了项目经理,第二牛气的:
产品经理
进行需求调研分析,输出需求调研文档、产品原型。
跟上面领导打交道比较多,但不是领导胜似领导,只是一个岗位名称。意思就是,我出需求,你来实现,是提要求的,所以一般就牛气一点。
(出需求的产品经理,是程序员的天敌)
UI设计师
根据产品原型输出界面效果图。
不一定是小姐姐的哦。
架构师
项目整体架构设计,即项目整体结构的搭建,还有技术选型等。
比如架构是选微服务还是单体,用什么技术,设计什么模块,
以及一些棘手的问题,都是架构师去做。
架构师不一定很牛,有牛逼的也有菜的。有些大公司,有小组,其中就有架构师组。里面的,不一定都是你能佩服到高山仰止的哦~
开发工程师
代码实现。
喏,苦逼打代码的来了。
测试工程师
编写测试用例,输出测试报告。
运维工程师
软件环境搭建,运行项目。
其他
在公司内可能还有其他细化方向,比如还有DBA,即数据库管理员。
他们就只写SQL语句。
特殊情况
比较理想的情况,是上面的岗位都有。但进公司,你会发现总会缺那么几个专职岗位,这些细分工作就被其他人兼职做了。
最低配置
2类人,一类人就是敲代码的程序员,兼任了开发、测试、运维甚至架构,可能还有UI,也可能UI是外包出去的。
第二类人就兼任了项目经理、产品经理。这样的配置比起分两个人来有好有坏。好处是他或她懂技术,可以和他去聊。(有的产品经理,功能实现做不出来,就是技术不行,可以搜一下 识别手机壳颜色打架 ,体会一下程序员和产品的爱恨情仇)坏处呢,就是不敢怼他了。第一,他是懂行的。第二,他是领导啊,你敢怼?[手动滑稽]
2.后端项目有哪几个模块?每个模块有哪些内容?
一共4个模块,分别是父模块sky-take-out,实体模块sky-pojo,公共资源模块sky-common,业务代码模块sky-server。
父模块sky-take-out
父工程,管理依赖版本,聚合其他模块,实现模块的统一管理。

实体模块sky-pojo
包括一下3种类:
实体类POJO或Entity。保证属性名和数据库表的字段名一一对应。
数据传输对象DTO,封装前端传过来的请求参数。
视图对象VO,封装前端需要接收的响应数据。

公共资源模块sky-common
存放公共资源,比如工具类、常量类、枚举类、异常类等。
业务代码模块sky-server
存放业务代码,比如三层架构中表现层、业务层、持久层的代码。
3.登录流程是怎样的,描述清楚。
如下图:
4.反向代理和负载均衡是什么?
反向代理
前端把请求发送给nginx,再由nginx将请求发送给后端服务器。
负载均衡
反向代理的3个好处之一。下面详细介绍。
反向代理的3个好处
1.提高访问速度
因为nginx可以存访问数据的缓存,比如如果有10次相同的访问,nginx就可以把缓存返回给前端,只用返回1次后端而不用再访问10次后端。
2.进行负载均衡
存在服务器集群时,前端发送给nginx,由nginx选择调配策略,选择性的调配服务器,这就叫负载均衡。
3.保证后端服务安全
直接暴露后端端口,有被攻击的风险;而只暴露nginx,由nginx来间接调用服务器,这就保障了后端服务的安全。
代码实现
在nginx中,conf文件夹下的nginx.conf中:
server {listen 80;server_name localhost;....
}
说明nginx监听的是80端口。
然后看下面:
server {listen 80;server_name localhost;location / {root html/sky;index index.html index.htm;...}
}
location告诉程序,如果访问写好的前端页面都放在html/sky文件夹下。看一眼,确实。
继续往下看:
server {listen 80;server_name localhost;...# 反向代理,处理管理端发送的请求location /api/ {proxy_pass http://localhost:8080/admin/;#proxy_pass http://webservers/admin/;}...
}
这边的代码就是说,只要访问api路径下的资源,就自动反向代理到localhost:8080/admin/路径下。
再继续就到负载均衡了:
server {listen 80;server_name localhost;...# 反向代理,处理用户端发送的请求location /user/ {proxy_pass http://webservers/user/;}upstream webservers{server 127.0.0.1:8080 weight=90 ;server 127.0.0.1:8088 weight=10 ;}
}
上面的代码就是反向代理/user路径的资源。代理到webservers下的路径。这个webservers可以当作一个别名。
然后再看这个webservers,这里就用到负载均衡了。对于127.0.0.1:8080的路径,分配90的权重;对于127.0.0.1:8088的路径,分配10的权重。
对于负载均衡,有不同的策略值得说一下。
负载均衡的不同策略
轮询
默认方式。即一人一次。
上面如果是轮询,写法如下:
upstream webservers{server 127.0.0.1:8080;server 127.0.0.1:8088;
}
weight
权重方式,默认为1,权重越高,被分配的客户端请求就越多。权重可以就当作分配给该地址的概率。比如如下实验:
weight实验
nginx的配置文件中,nginx.conf文件内部如下:
upstream testservers {server 127.0.0.1:8080 weight=4;server 127.0.0.1:8081 weight=1;
}server {listen 80;server_name localhost;... # 省略其他配置# 自定义反向代理location /testPort/ {proxy_pass http://testservers/test/;}...
}
可以看到,我们设置了访问/testPort下的资源时,就自动跳转到8080、8081下的/test资源下的路径。而8080、8081端口的权重,分别为4和1。
在后端写一个测试的controller类:
package com.sky.controller.admin;import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;import java.time.LocalDateTime;
@RestController
@RequestMapping("/test")
@Slf4j
@Api(tags = "负载均衡接口使用测试")
public class TestPortController {@Value("${server.port}")private String port;@ApiOperation("测试端口")@GetMapping("/port")public String port() {return port + " " + LocalDateTime.now();}
}
可以看到,会返回端口号和访问时间。
在拦截器中(com.sky.interceptor.JwtTokenAdminInterceptor)加入放行代码:
if (1==1) {return true;}
默认端口为8080,启动它。然后新建一个启动类,用系统属性参数设置端口为新的8081。然后启动。
然后启动nginx,开始测试:
输入地址(可以自己思考一下为什么这样输)
http://localhost/testPort/port
看结果:
基本上就是4:1的几率。
验证成功。
5.Swagger和yapi有什么区别?
yapi是在线项目接口管理工具,需要联网;
Swagger是本地部署的接口管理工具。
相关文章:

苍穹外卖Day01项目日志
1.软件开发流程和人员分工是怎样的? 软件开发流程 一个软件是怎么被开发出来的? 需求分析 先得知道软件定位人群、用户群体、有什么功能、要实现什么效果等。 需要得到需求规格说明书、产品原型。 需求规格说明书 其中前后端工程师要关注的就是产品原…...

Netty学习(二)
文章目录 二. Netty 入门1. 概述1.1 Netty 是什么?1.2 Netty 的作者1.3 Netty 的地位1.4 Netty 的优势 2. Hello World2.1 目标加入依赖 2.2 服务器端2.3 客户端2.4 流程梳理课堂示例服务端客户端 分析提示(重要) 3. 组件3.1 EventLoop事件循…...

ReactRouterv5在BrowserRouter和HashRouter模式下对location.state的支持
结论:HashRouter不支持location.state 文档:ReactRouter v5 从文档可看到history.push()方法支持2个参数:path, [state] state即是location.state,常用于隐式地传递状态参数 但文档未提的是,仅适用于BrowserRouter&am…...

Aerotech系列文章(3)运动设置命令Motion Setup Commands
1.运动设置命令Motion Setup Commands 斜坡类型: 直线,S曲线,与正弦曲线 Enumerator: RAMPTYPE_Linear Linear-based ramp type. RAMPTYPE_Scurve S-curve-based ramp type. RAMPTYPE_Sine Sine-based ramp type. 函数原型&a…...

线性神经网络——softmax 回归随笔【深度学习】【PyTorch】【d2l】
文章目录 3.2、softmax 回归3.2.1、softmax运算3.2.2、交叉熵损失函数3.2.3、PyTorch 从零实现 softmax 回归3.2.4、简单实现 softmax 回归 3.2、softmax 回归 3.2.1、softmax运算 softmax 函数是一种常用的激活函数,用于将实数向量转换为概率分布向量。它在多类别…...

【Nodejs】Node.js开发环境安装
1.版本介绍 在命令窗口中输入 node -v 可以查看版本 0.x 完全不技术 ES64.x 部分支持 ES6 特性5.x 部分支持ES6特性(比4.x多些),属于过渡产品,现在来说应该没有什么理由去用这个了6.x 支持98%的 ES6 特性8.x 支持 ES6 特性 2.No…...

梅尔频谱(Mel spectrum)简介及Python实现
梅尔频谱(Mel spectrum)简介及Python实现 1. 梅尔频谱(Mel spectrum)简介2. Python可视化测试3.频谱可视化3.1 Mel 频谱可视化3.2 STFT spectrum参考文献资料1. 梅尔频谱(Mel spectrum)简介 在信号处理上,声信号(噪声信号)是一种重要的传感监测手段。对于语音分类任务…...

【数据结构】实验六:队列
实验六 队列 一、实验目的与要求 1)熟悉C/C语言(或其他编程语言)的集成开发环境; 2)通过本实验加深对队列的理解,熟悉基本操作; 3) 结合具体的问题分析算法时间复杂度。 二、…...

【Linux线程】第一章||理解线程概念+创建一个线程(附代码加讲解)
线程概念 🌵什么是线程🌲线程和进程的关系🎄线程有以下特点:🌳 线程的优点🌴 线程的缺点🌱线程异常🌿线程用途 ☘️手动创建一个进程🍀运行 🌵什么是线程 在L…...

Android进阶之微信扫码登录
遇到新需求要搭建微信扫码登录功能,这篇文章是随着我的编码过程一并写的,希望能够帮助有需求的人和以后再次用到此功能的自己。 首先想到的就是百度各种文章,当然去开发者平台申请AppID和密钥是必不可少的,等注册好发现需要创建应用以及审核(要官网,流程图及其他信息),想着先写…...

macOS Monterey 12.6.8 (21G725) Boot ISO 原版可引导镜像
macOS Monterey 12.6.8 (21G725) Boot ISO 原版可引导镜像 本站下载的 macOS 软件包,既可以拖拽到 Applications(应用程序)下直接安装,也可以制作启动 U 盘安装,或者在虚拟机中启动安装。另外也支持在 Windows 和 Lin…...

Unity自定义后处理——用偏导数求图片颜色边缘
大家好,我是阿赵。 继续介绍屏幕后处理效果的做法。这次介绍一下用偏导数求图形边缘的技术。 一、原理介绍 先来看例子吧。 这个例子看起来好像是要给模型描边。之前其实也介绍过很多描边的方法,比如沿着法线方向放大模型,或者用Ndo…...

本地Git仓库和GitHub仓库SSH传输
SSH创建命令解释 ssh-keygen 用于创建密钥的程序 -m PEM 将密钥的格式设为 PEM -t rsa 要创建的密钥类型,本例中为 RSA 格式 -b 4096 密钥的位数,本例中为 4096 -C “azureusermyserver” 追加到公钥文件末尾以便于识别的注释。 通常以电子邮件地址…...

【C++11】——右值引用、移动语义
目录 1. 基本概念 1.1 左值与左值引用 1.2 右值和右值引用 1.3 左值引用与右值引用 2. 右值引用实用场景和意义 2.1 左值引用的使用场景 2.2 左值引用的短板 2.3 右值引用和移动语义 2.3.1 移动构造 2.3.2 移动赋值 2.3.3 编译器做的优化 2.3.4 总结 2.4 右值引用…...

消息服务概述
消息服务的作用: 在多数应用尤其是分布式系统中,消息服务是不可或缺的重要部分,它使用起来比较简单,同时解决了不少难题,例如异步处理、应用解耦、流量削锋、分布式事务管理等,使用消息服务可以实现一个高…...

【Spring Boot】Web开发 — 数据验证
Web开发 — 数据验证 对于应用系统而言,任何客户端传入的数据都不是绝对安全有效的,这就要求我们在服务端接收到数据时也对数据的有效性进行验证,以确保传入的数据安全正确。接下来介绍Spring Boot是如何实现数据验证的。 1.Hibernate Vali…...

技术分享 | App常见bug解析
功能Bug 内容显示错误 前端页面展示的内容有误。 这种错误的产生有两种可能 1、前端代码写的文案错误 2、接口返回值错误 功能错误 功能错误是在测试过程中最常见的类型之一,也就是产品的功能没有实现。比如图中的公众号登录不成功的问题。 界面展示错乱 产…...

树莓派Pico|RP2040|使用SWD进行调试|构建 “Hello World“ debug版本
文章目录 使用SWD进行调试构建 "Hello World" debug版本安装 GDB使用 GDB 和 OpenOCD 来 debug Hello World TIP重要提示 使用SWD进行调试 基于rp2040的板上的SWD端口重置,加载和运行代码,如树莓派Pico可用于交互式调试已加载的程序。这包括:…...

Ubuntu18.04 下配置Clion
配置Clion 安装gcc、g、make Ubuntu中用到的编译工具是gcc©,g(C),make(连接)。因此只需安装对应的工具包即可。Ubuntu下使用命令安装这些包: (1)安装gcc sudo apt install gcc&am…...

数据库管理-第九十四期 19c OCM之路-第四堂(02)(20230725)
第九十四期 19c OCM之路-第四堂(02)(20230725) 第四堂继续! 考点3:SQL statement tuning SQL语句调优 收集Schema统计信息 exec dbms_stats.gather_schems_stats(HR);开启制定表索引监控 create index…...

以智慧监测模式守护燃气安全 ,汉威科技“传感芯”凸显智慧力
城市燃气工程作为城市基建的重要组成部分,与城市居民生活、工业生产紧密相关。提升城市燃气服务质量和安全水平,也一直是政府和民众关注的大事。然而,近年来居民住宅、餐饮等工商业场所燃气事故频发,时刻敲响的警钟也折射出我国在…...

【阅读笔记】一种暗通道优先的快速自动白平衡算法
解决问题: 自动白平衡算法中存在白色区域检测错误导致白平衡失效的问题,作者提出了一种基于暗通道优先的白平衡算法。 算法思想: 图像中白色区域或者高饱和度区域的光线透射率较低,根据以上特性利用暗通道法计算图像中白色区域。 算法概述: 作者使用何凯明提出的基于暗…...

OpenStack之云主机管理
一)必备知识 1.云主机与快照管理 a-云主机管理 云主机管理是OpenStack云计算平台的核心功能,通常,云主机的管理包括创建、删除、查询等。可使用以下命令对OpenStack的云主机进行管理: openstack server <操作><云主机…...

Linux系列---【Ubuntu 20.04安装KVM】
Ubuntu 20.04安装KVM 一、安装kvm 1.安装kvm sudo apt install qemu-kvm libvirt-daemon-system libvirt-clients bridge-utils 2. 将当前用户添加至libvirt 、 kvm组 sudo adduser $USER libvirt sudo adduser $USER kvm 3.验证安装 virsh list --all 4.启动libvert sudo syst…...

【Vue3】局部组件和全局组件
1. 局部组件 Card.vue <template><div class"card"><header><div>标题</div><div>副标题</div></header><section>内容</section></div> </template><script setup lang"ts"…...

vscode开发Go和Java
vscode开发Go和Java 最新最全 vscode 插件推荐可以参考: https://zhuanlan.zhihu.com/p/623580867 1、公共插件安装 下面是个人使用的插件: # 中文插件 Chinese (Simplified) (简体中文) Language Pack for Visual Studio Code https://marketplace…...

自定义MVC
目录 一.什么是MVC 1.1.三层架构和MVC的区别 二.自定义MVC工作原理图 三.自定义mvc实现 3.1 创建web工程 3.2 中央处理器 3.3 Action接口定义 3.4 实现子控制器 3.5 完善中央控制器 3.5.1 请求分发功能 3.5.2 使用配置文件配置action 3.5.3 请求参数处理 1. 定义接…...

简单分享婚宴预订小程序怎么做
婚宴预订小程序需要具备一些功能,通过这些功能,新人可以更方便地选择婚宴场地、预订服务,并且更好地规划自己的婚礼。 1. 场地浏览与选择 婚宴预订小程序可以展示多个婚宴场地的照片和详细信息,包括容纳人数、场地设施、价格等。…...

【多模态】19、RegionCLIP | 基于 Region 来实现视觉语言模型预训练
文章目录 一、背景二、方法2.1 Region-based Language-Image Pretraining2.2 目标检测的迁移学习 三、效果3.1 数据集3.2 实现细节3.3 结果 论文: RegionCLIP: Region-based Language-Image Pretraining 代码:https://github.com/microsoft/RegionCLIP …...

本地文件夹上传到Github
本地文件夹上传到Github 步骤1. 下载git步骤2. 在github中新建一个库(Repository)步骤3. 设置SSH key步骤4. 添加SSH keys步骤5. 本地文件上传到github参考 步骤1. 下载git 下载git客户端,并在本地安装完成。 步骤2. 在github中新建一个库&a…...