golang项目后端测评

安全意识

  1. 任何项目中的资料(代码、数据、文档等)不可上传个人云端保存
  2. 任何帐号密码不可云端保存
  3. 任何项目测试帐号未经许可,不可外传(项目组范围内)

一.使用for 循环对两个切片赋值,并合并这两个切片

import "fmt"

func main()  {
   var s []int
   for i :=1;i<=50;i++{
      s = append(s, i)
   }
   fmt.Println(s)
   var s1 []int
   for i :=1;i<=50;i++{
      s1 = append(s1,i)
   }
   fmt.Println(s1)
   s = append(s,s1...)
   fmt.Println(s)
}
  1. (3分)匿名函数可以直接赋值给一个变量或者直接执行,这一说法是否正确 正确
    在这里插入图片描述
    2.golang虽然没有显式的提供继承语法,但是通过匿名组合实现了继承。这一说法是否正确 正确
    在这里插入图片描述

  2. (3分)interface{}是可以指向任意对象的Any类型,这一说法是否正确 正确

  3. (3分)import后面的最后一个元素是包名 路径

  4. (3分)map反序列化时json.unmarshal的入参必须为map的地址 正确

  5. (3分)协程间通信 channel
    进程是在cpu上进行的,举个例子,现在电脑既可以用来写笔记,也可以用来搜索浏览器就是两个进程,那么如果我现在又想听音乐了,怎么办,就可以在某个进程中开辟两条路径,这就是线程,协程是比线程消耗资源更少的东西。将每个软件都分配很小的一段时间,在管道中进行传递信息。

  6. (3分)select机制用来处理什么问题 异步IO问题
    异步就是一会处理这个,一会处理那个,IO就是输入输出的意思
    select的多路复用
    在这里插入图片描述
    8.restful规范
    http://www.ruanyifeng.com/blog/2014/05/restful_api.html
    http://www.ruanyifeng.com/blog/2018/10/restful-api-best-practices.html
    9.统一返回格式中,code 是自定义状态码,同时还有data,message
    响应状态码是请求服务器的时候返回的状态码,是已经定义好的
    2开头: ok
    3开头:请求重定向
    4开头:请求错误
    5开头:服务器错误
    10.三层架构:1.数据访问层 2.业务逻辑层 3.表示层 目的是高内聚低耦合
    MVC: M:Model业务逻辑操作 V:View视图 C: 控制器
    在这里插入图片描述
    在这里插入图片描述
    11.数据传输对象
    PO(持久对象):PO就是数据库中的一条记录;
    BO(业务对象):由service层产生
    VO(表现对象):在前端页面展示
    DTO(数据传输对象)
    12.请叙述一下Jwt用户认证机制
    正常的JWT是不涉及服务端存储的,完全靠算法校验token是否有效
    当然想要实现某些进阶的控制或校验,就需要搭配一些其他的技术栈实现
    比如用户退出登录,要作废某个token,像这样的场景就需要在服务端保存一个token的黑名单
    把作废的token保存到黑名单里,后续每一次请求进来,先去黑名单里找一下,如果在黑名单里就拒绝此次请求。
    至于保存的黑名单是使用redis还是其他的存储都是可以的
    实现异地登录退出就是要结合请求的IP或设备识别号一起生成token,然后保存userid 和 token的对应关系,以及token和userid 的对应关系
    A先登录,生成token1, 服务端保存 userID->token1,
    B后登录,生成token2, 服务端保存userID->token2,
    A再携带token1发请求来,我们根据userID查到的是token2,对不上,A就需要重新登录
    目前Jwt当session使用
    使用jwt生成token,并将token为key,将该用户的具体信息为value,存入到redis里,并在redis里设置过期时间。
    用户下次带着token请求,先去redis里查找有没有对应的token
    有对应的token就放行,并将redis中存储的用户信息放到上下文中,方便后续操作使用。
    没有对应的token直接拒接此次请求。
    在这里插入图片描述
    JWT token 是一个字符串,由3部分组成,之间以 . 隔开

生成的JWT token 字符串

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9.TJVA95OrM7E2cBab30RMHrHDcEfxjoYZgeFONFh7HgQ

三部分可以分为header,payload,signature
header: 头部
{
“token类型”,
“签名加密算法”
}

使用base64对头部内容进行编码加密,生成字符串就是header

payload: 载荷:保存有效的数据。
{
“user_id”: “用户id”,
“username”: “用户名”,
“mobile”: “手机号”,

“exp”: “jwt token有效时间”
}

使用base64对载荷内容进行编码加密,生成字符串就是payload

signature: 签名信息,防止jwt token被伪造。
签名验证。

签名生成过程就是:服务器在生成jwt token时,会将header和payload字符串进行拼接,用.隔开。之后会

使用一个只有服务器知道的密钥对拼接后的内容进行加密,signature的内容就是加密之后生成的字符串。
第一次请求先携带自己的账号密码信息,和mysql数据库中的数据做对比,如果不对直接打回,如果正确则生成一个token,并把token作为键,其他信息作为值存储在redis中,下次访问时携带token,过中间件然后过路由。
13.叙述水平越权和垂直越权
水平越权:假设现在有两个部门,信息工程学院和生命科技学院,信息工程学院的管理员是不能对生命科技学院的学生进行操作管理的
垂直越权:是指上下级之间
14.叙述casbin实现权限拦截器的思想
在这里插入图片描述
15.叙述gin中间件的执行顺序
在这里插入图片描述
在这里插入图片描述
16.请画出nginx负载均衡示意图,反向代理,动静分离
在这里插入图片描述
反向代理:可以作为内容服务器的替身,假设QQ聊天中,A向B发送消息,A发送消息的过程中一定会出现请求,这个请求中就会透漏出B的ip地址,那么B的位置就会泄露出去,非常的不安全。如果这时候我们增加一个代理服务器,将信息先传递到代理服务器,由代理服务器再传递给B,就大大的增强了安全效果。
17.常见docker命令
docker images 列出本地镜像
docker ps 列出容器
docker run 创建一个新的容器并运行一个命令
18.redis是key-value存储系统
它通常被称为数据结构服务器,因为值(value)可以是 字符串(String), 哈希(Hash), 列表(list), 集合(sets) 和 有序集合(sorted sets)等类型。
string 字符串(可以为整形、浮点型和字符串,统称为元素) 字符串类型的使用get,set, del,expire,exists , keys *
list 列表(实现队列,元素不唯一,先入先出原则)
set 集合(各不相同的元素)
hash hash散列值(hash的key必须是唯一的)
sort set 有序集合(zset)

redis字符串命令 set key value 设置指定key的值
get key 获取指定key的值
del key 用于删除已存在的键,不存在的key会被忽略
expire key TIME_IN_SECONDS 设置key的过期时间,key过期后将不再 可用。设置成功返回1,当key不存在或者不能为key设置过期时间时返回0
exists key 用于检查给定key是否存在,若存在返回1,否则返回0
keys * 获取redis中所有的key
19.InnoDB的特点, 列自增,支持事务,拥有缓冲管理,支持外键约束,使用行级锁,支持更高并发
表的结构存储在xxx.frm文件中,数据结构存储在tablespace这样的表空间中(逻辑概念),无法被压缩,无法转换成只读。在MySQL数据库崩溃后提供自动恢复机制。支持级联删除和级联更新
聚集索引,叶节点包含了完整的数据记录。表数据文件本身就是按照B+Tree组织的一个索引结构文件。
在这里插入图片描述
19.go实现mysql事务
在这里插入图片描述
什么时候会用到事务呢?在执行一系列数据库操作时,要保证这些操作必须完全正确执行,否则就不执行,在这种情况下,适合使用事务,例如将一些数据插入到两个相关联的表中,而且不能只有一张表插入成功,这种情况下,使用事务,无论是否插入成功,都不会对数据库造成不好的影响。
21.1. (6分)数据库的三范式属性21.
1F 不能有多值或重复信息,即原子性
2F 每行必须是可以唯一区分,完全依赖主键
3F 除外建外不能包含其他表的字段,不可存在传递依赖
在这里插入图片描述
22. group by : select gender from students group by gender;
order by : select * from students where gender=1 and is_delete=0 order by id desc;
asc默认升序,desc降序
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值