苍穹外卖Day01项目日志

1.软件开发流程和人员分工是怎样的?

软件开发流程

一个软件是怎么被开发出来的?

需求分析

先得知道软件定位人群、用户群体、有什么功能、要实现什么效果等。

需要得到需求规格说明书、产品原型。

需求规格说明书

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

产品原型图

 你看这个产品原型,是不是很丑?要优化,就看UI(设计师)的。

设计

包括UI设计、数据库设计、接口设计等。

UI设计,就是原型图界面这么丑,不能做成这样。

数据库设计,就是设计存数据的结构。

接口设计,就是设计前后端交互规则。

扫描二维码关注公众号,回复: 16184995 查看本文章

编码

就是写代码嘛。

包括项目代码、单元测试。

这个写代码,就是根据原型、接口文档去写。

有的人会说,“直接用页面测试嘛!”

一般这时候,前端页面都没看到,所以还不能联调,所以还是单元测试。

测试

产出测试用例、测试报告等。

测试包括压力测试、性能测试等。

比如查到数据,花了几秒。

比如每秒钟1k的并发,能不能抗住。

测试没问题,项目就ok了,就交付使用了。

上线运维

软件环境安装、配置。

搭建软件运行环境。

角色分工

项目经理

对整个项目分工,负责进度把控。

可能会用到项目管理软件,比如禅道、ones。

禅道
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,封装前端需要接收的响应数据。

包含DTO类、Entity类和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是本地部署的接口管理工具。

猜你喜欢

转载自blog.csdn.net/m0_46948660/article/details/131952360
今日推荐