别院牧志知识库 别院牧志知识库
首页
  • 基础

    • 全栈之路
    • 😎Awesome资源
  • 进阶

    • Python 工匠系列
    • 高阶知识点
  • 指南教程

    • Socket 编程
    • 异步编程
    • PEP 系列
  • 面试

    • Python 面试题
    • 2025 面试记录
    • 2022 面试记录
    • 2021 面试记录
    • 2020 面试记录
    • 2019 面试记录
    • 数据库索引原理
  • 基金

    • 基金知识
    • 基金经理
  • 细读经典

    • 德隆-三个知道
    • 孔曼子-摊大饼理论
    • 配置者说-躺赢之路
    • 资水-建立自己的投资体系
    • 反脆弱
  • Git 参考手册
  • 提问的智慧
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
首页
  • 基础

    • 全栈之路
    • 😎Awesome资源
  • 进阶

    • Python 工匠系列
    • 高阶知识点
  • 指南教程

    • Socket 编程
    • 异步编程
    • PEP 系列
  • 面试

    • Python 面试题
    • 2025 面试记录
    • 2022 面试记录
    • 2021 面试记录
    • 2020 面试记录
    • 2019 面试记录
    • 数据库索引原理
  • 基金

    • 基金知识
    • 基金经理
  • 细读经典

    • 德隆-三个知道
    • 孔曼子-摊大饼理论
    • 配置者说-躺赢之路
    • 资水-建立自己的投资体系
    • 反脆弱
  • Git 参考手册
  • 提问的智慧
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • 工作
  • 规范

  • Linux

  • 数据库

  • Git

  • 👨‍💻Web

  • 英语

  • Docker

  • 编辑器

  • 网络

  • 前端

  • 存储

  • 备忘录

    • 面试准备
    • 工作记录
      • 博智数源项目梳理
        • 项目描述(自我介绍向)
        • 简述遇到的问题以及如何解决
        • 服务器配置
      • 鲸鲨项目梳理
        • 项目
        • 单例模式
      • 其他
      • 桔家
      • 开源
    • 开发记录文档
    • bzsy 记录白皮书
  • 如何开始你的单元测试
  • 以程序员的视角看中国——西安篇
  • 💻工作
  • 备忘录
佚名
2021-03-22
目录

工作记录

# 博智数源项目梳理

# 项目描述(自我介绍向)

该项目是为中国烟草做的 GIS 平台投放分析系统,项目组 8 个人,在其中我主要做了积分管理系统和品牌数字画像的功能开发,还有一部分的日常数据维护和功能优化。

项目主要用到的技术有Django REST Framework框架,数据库为 MySQL,采用前后端分离技术,前端使用 Vue 和 Element UI。对于日常数据维护我们使用 pandas 进行数据处理。项目中我对一些数据表进行了优化,比如订单数据表的分表处理,对一些响应慢和卡顿的接口(返回数据太大,分页处理)进行了优化,使其满足用户使用要求。另外对部分内部接口实现进行优化,比如对之前爬虫的抓取数据和写入数据表的封装做了分离,从而降低接口耦合度。

日常开发中,我使用 postman 对接口进行测试;尽管项目组比较小,但在代码质量方面,我使用flake8、isort、yapf进行代码质量控制。同时,我负责项目的上线和阿里云平台的资源管理。

# 简述遇到的问题以及如何解决

  • dt 表(订单表)太大,数据查询太慢

按照月份进行水平分表,为什么呢?因为我们数据分析查询的时候是按照月份来进行查询的,对业务来说更加方便,直接命名为dt_xx_202112

  • 数据库连接出现Lost connection to MySQL server during query

    应该保持每次操作时都重新初始化连接,而不是让连接一直保持住,否则,连接等待超时之后报错。

    ref:Python 长期连接数据库的最不佳实践:Lost connection to MySQL server during query – 土豆不好吃 (opens new window)

  • 接口设计不合理

    在地图渲染零售户画像时,查询商户信息数据直接在渲染地图时查询返回,导致Serializer时耗时过大,只返回商户编码、经纬度信息即可,当点击商户点时再返回单个商户的信息。

  • 解耦

商圈信息获取和存入写在一个类中,拆分之后持久化单独存在

  • 分页

使用分页之后返回数据变少,页面卡顿缓解(200k/3M)

  1. 使用分页之后多了一次查询,导致接口变慢
  2. count 时没有必要使用临时表,可以删除group by,或者使用子查询(先查询 id,然后根据 id 去 offset)
select * from orders_history where type=8 and id>=(select id from order_history where type =8 limit 10000,1) limit 100;
select * from orders_history where type =8 limit 10000,100;
1
2

# 服务器配置

  • 云服务器 ECS
8核 64 GiB  -- 之前是32G,但是增加Java应用之后内存90%+,所以升级
CentOS  7.6 64位
1
2
  • 云数据库 RDS
-- MySQL 5.7

2核心8G内存  (60%)
最大连接数 6000 最大IOPS 10000 存储空间 300G 
1
2
3
4
-- 事务级别
select @@global.tx_isolation;

REPEATABLE-READ
1
2
3
4
-- MySQL 8.0

4核心8G内存  (60%)
最大连接数 6000 最大IOPS 20000 存储空间 700G 
1
2
3
4
select @@transaction_isolation;

-- READ-COMMITTED
1
2
3

# 鲸鲨项目梳理

# 项目

该项目是一套云存储管理系统,面向客户主要为军工、政企单位,我主要做的是 ipSAN 块存储的创建、管理、访问控制,文件存储用户配置以及基于 DRBD 实现的双机之间的块设备文件复制以及客户端连接工具的编写。

项目用到的框架是 web.py,数据库使用 MySQL,此外我接触过基于 CEPH 的二次开发(n 版)、Openstack(Cinder 组件对接)。

Cinder 服务

  • cinder 组件作用

块存储服务,为运行实例提供稳定的数据块存储服务。 提供对 volume 从创建到删除整个生命周期的管理。

  • cinder 组件构成
  1. API service:负责接受和处理 Rest 请求,并将请求放入 RabbitMQ 队列。
  2. Scheduler service: 处理任务队列的任务,并根据预定策略选择合适的 Volume Service 节点来执行任务。目前版本的 cinder 仅仅提供了一个 Simple Scheduler, 该调度器选择卷数量最少的一个活跃节点来创建卷。
  3. Volume service: 该服务运行在存储节点上,管理存储空间。每个存储节点都有一个 Volume Service,若干个这样的存储节点联合起来可以构成一个存储资源池。为了支持不同类型和型号的存储,当前版本的 Cinder 为 Volume Service 如下 drivers。当然在 Cinder 的 blueprints 当中还有一些其它的 drivers,以后的版本可能会添加进来。

此外,负责使用Flask和Vue开发前后端分离的管理系统,比如磁盘读写测速(fio),硬盘 SMART 测试(smartctl),硬件信息获取,系统概览,系统工具等。

一种基于 DRBD 实现的 ALUA 解决方案 | 别院牧志 (opens new window)

# 单例模式

  • 系统日志功能(数据库连接)

    资源共享的情况下,避免由于资源操作时导致的性能或损耗等。如日志文件,应用配置

  1. python Logger 模块单例模式 - ChnMig - 博客园 (opens new window)
  2. python logging 单例模式范例_全栈博客的技术博客_51CTO 博客 (opens new window)

# 其他

  • 保存 emoji 需要使用utf8emb4

    ref:解决博客 idealyard 支持 emoji 显示问题 | 别院牧志 (opens new window)

  • 后端数据校验: json-schema、marshmallow

# 桔家

负责商品展示功能,页面编写,后台管理系统维护以及部分黑盒测试,使用 Django+MySQL+图片云存储

# 开源

  • redis 内存淘汰机制
  • openstack cinder 工作原理
  • 文件存储、块存储、对象存储区别

参阅

  • deepcopy 什么时候用?实例
  • 列表去重保持原来顺序
reg_items = [4,3,3,4,2,1,4,3,5]
ret = sorted(set(reg_items), key=reg_items.index)
print(ret)
1
2
3
  • 什么时候不会用到索引
  • 进程线程协程区别?
  • MySQL 有关权限的表都有哪几个?
这些权限表分别 user,db,table_priv,columns_priv
1
  • 常用魔法方法 魔法方法
编辑 (opens new window)
#面试
上次更新: 2024-07-23, 01:00:43
面试准备
开发记录文档

← 面试准备 开发记录文档→

最近更新
01
2025 面试记录
05-28
02
提升沟通亲和力的实用策略
03-26
03
工作
07-15
更多文章>
Theme by Vdoing | Copyright © 2019-2025 IMOYAO | 别院牧志
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式