工程项目去问你详细做了什么,用到了什么关键技术等
个人博客项目
STAR
S:
二次评论的设计 :
- 我想设计成类似于百度贴吧那种楼中楼的样式 , 不知道怎么设计数据表.
- 当时查了很多资料,最后设计了三个表,一级评论和二级评论继承抽象表
- 抽象表BaseComment
- 一级评论表ArticleComment
- 二级评论表ArticleCommentReply
- 抽象表外键是用户id
- 一级评论外键是文章,
- 二级评论外键是一级评论和to_user(允许为空,为空表示回复层主)
二级评论表设计两个外键,
- 一个外键是一级评论,表示一级评论下的所有二级评论
- 一个外键是to_user(二级评论),也就是说绑定自己,表示允许互相回复。
查找步骤:
- 首先根据文章ID找出所有的一级评论
- 根据一级评论id找出所有的二级评论,
- 按时间排序即可
1 | class BaseComment(models.Model): |
你是如何防止XSS攻击和SQL攻击
XSS攻击和SQL攻击主要发生在URL和提交的表单上,我就对用户提交的内容进行编码和过滤.
- 编码 : 对于大于号小于号等等解析
- 使用DOM Parser 进行解析过滤,过滤掉一些危险标签和属性
web项目的性能优化
后端优化:
- 缓存存储读写次数高,变化少的数据,先从缓存中读取,如果读取不到或数据已失效,再访问磁盘数据库,并将数据再次写入缓存。
- 异步方式,如果有耗时操作,可以采用异步,比如celery
数据库优化:
- 如有条件,数据可以存放于redis,读取速度快
- 建立索引、外键等
websocket项目
接入流程:
- 判断是否为websocket链接
- 创建用户,并且将其存储到客户端列表
- 使用while True
- 等待消息的传入
- 如果消息不为空,使用send更新所有人前端的用户列表
- 如果消息为空,说明用户断开了连接,从客户端列表中删除,然后更新所有人前端的用户列表
向发生信息流程:
- 用户使用ajax发送数据,(其中包括是群发还是私聊的标志)
- 后台获取相应的数据
- 如果是群发就获取向所有客户端发送信息,否则就先特定的用户发送信息
困难:
- 试了好久发现获取不到cookies , aiohttp支持的session仅仅是HTTPONLY类型,
- 最后使用token,就token藏在隐藏表单
困难二 :
- sqlalchemy的session新建问题
- 因为协程本质就是单线程,所以为了有效利用资源就不session设计成了单例模式
- 要调用sqlalchemy的session来存储数据,然后我发现使用session存储的数据并不能在数据库读出来,必须关闭session后才真的写入数据
- 这就意味着我要频繁的新建session,写入数据,然后关闭
- 解决思路就是 : 使用主从复制与读写分离
- 先将数据存缓到redis中 , 等用户下线或者点击
查看历史信息
的时候再写入数据
时间
2019-5 基于 Django的博客项目
全栈开发
- 项目简介: 独立开发网站 http://obgnail.com ; 实现博文展示 ; 支持Markdown和富文本的博文发表 ; 表单验证 ; 通过 Ajax发送请求实现登录注册 ; 使用 Django REST framework优化接口 ; 对游客用户访问限制 ; 反爬虫限制 ; 防止 CSRF和 XSS,SQL 注入攻击
- 项目实现: 存缓(Redis)+持久存储(MySQL)的数据库结构; 基于 Celery的延时任务 ; cookies+session实现登录状态的保存和检验 ; 对提交的内容进行编码,避免 XSS和 SQL注入攻击 ; 使用中间件拦截后台访问进行反爬
2019-6 到2019-6 基于 aiohttp的网络聊天室项目
后台开发
- 项目简介: 使用 WebSocket搭建线上网络聊天室 ; 支持用户注册登录 ; 支持匿名聊天; 支持群聊和私聊 ; 聊天记录保存与查看 ; 实时消息推送 ; 断线自动重连 ; 用户黑名单
- 项目实现: 使用 aiohttp处理 WebScoket连接 ; 使用 Redis存缓 session ; Celery + sqlalchemy封装为 DAO , 异步存储聊天记录 ; 函数装饰器拦截黑名单用户
2018-10 到 2018-10 基于 Scrapy + Selenium+ PhantomJS的爬虫开发项目
后台开发
- 项目简介: 使用 Scrapy框架抓取知乎网用户信息,并使用 MongoBD 数据库存储
- 项目实现: 通过频率,IP 池,cookies 池应对网站的反扒 ; 使用 Selenium+ PhantomJS避免网站加密参数 ; 使用云服务器托管 python 爬虫