第10-12章 系统设计考察点
第10-12章 系统设计考察点
系统设计考察点
第10章 系统设计考点
◆什么是系统设计?
◆系统设计需要掌握哪些知识?
◆如何设计和实现一个后端系统服务的设计?
什么是系统设计?
什么是系统设计?( System Design)
◆系统设计是一个定义系统架构、模块、接口和数据满足特定需求的过程
◆比如设计一个短网址服务、评论服务、Feed流系统、抢红包系统
◆微服务架构很多系统被按照业务拆分,需要单独设计一个系统服务
公司里提供一个供其他所有业务使用的一个短网址服务
系统设计的难点
中高级工程师必经之路
◆需要具备相关领域、算法的经验,有一定的架构设计能力
Feed流,推拉模型
◆熟悉后端技术组件,比如消息队列、缓存、数据库、框架
◆具备文档撰写、流程图绘制、架构设计、编码实现等综合能力
系统设计怎么答?
很多新手碰到这种问题完全不知道怎么回答
◆完全没有思路的(很多毕业生对这种问题完全手足无措)
◆有一定思路,但是回答没有重点
◆能回答上来重点,但是思路不够清晰
系统设计的要素
系统设计三大要素
◆使用场景和限制条件
◆数据存储设计
◆算法模块设计
如何回答系统设计题目?
按照三个要素来回答
◆问面试官:什么场景和条件下使用?
面试官上来就抛一句:如何设计一个短网址系统?
◆设计数据存储系统
◆设计算法相关模块
要素之一:场景和限制
什么场景使用?有哪些条件?
◆这个系统是在什么地方使用的?比如短网址系统提供给站内各种服务生成短网址
◆限制条件:用户估计有多少?至少要能支撑多少用户(服务)?
◆估算并发qps:峰值qps是多少?平均qpS是多少?
要素之二:数据存储设计
数据库的选型
◆按需设计数据表,需要哪些字段,使用什么类型?数据增长规模
◆数据库选型:是否需要持久化?使用关系型还是NoSQL?
◆如何优化?如何设计索引?是否可以使用缓存?
要素之三:算法模块设计
算法解决问题的核心。程序=算法+数据结构。系统=服务+存储
◆需要哪些接口?接口如何设计
◆使用什么算法或者模型?
◆不同实现方式之间的优劣对比,如何取舍?
延伸考点
如何回答不错,可能会问一些深入的问题(扩展、容错)
◆用户多了,qps高了如何处理?
◆数据存储多了不够存了如何处理?
◆故障如何处理?单点失败、多点失败、雪崩问题
系统设计真题解析:短网址系统设计与实现
如何设计与实现一个短网址系统?
◆什么是短网址系统?包含哪些功能(接口)
◆短网址系统的存储设计?需要存储哪些字段?
◆如何设计算法生成短网址?
什么是短网址系统?
TinyUrl Service
◆把一个长网址转成短网址的服务
◆比如https:/bitly.com/
◆转换之后网址的后缀不超过7位(字符或者数字)
场景和限制
使用场景:提供短网址服务为公司其他各业务服务
◆功能:一个长网址转成短网址并存储;根据短网址还原长url
◆要求短网址的后缀不超过7位(大小写字母和数字)
◆预估峰值插入请求数量级:数百;査询请求数量级:数干
数据存储设计
根据需求设计数据存储方式
◆使用Mysql即可满足
◆需要的字段有哪些?
◆如何根据查询设计索引?
![](https://img2020.cnblogs.com/blog/1165731/202102/1165731-20210212143845401-964959545.png)
算法实现设计
短网址生成算法有哪些?对比优缺点
◆两个API:long2short_url, short2long_url
![](https://img2020.cnblogs.com/blog/1165731/202102/1165731-20210212143848924-1805902847.png)
![](https://img2020.cnblogs.com/blog/1165731/202102/1165731-20210212143849544-141820327.png)
![](https://img2020.cnblogs.com/blog/1165731/202102/1165731-20210212143849856-2056720861.png)
![](https://img2020.cnblogs.com/blog/1165731/202102/1165731-20210212143850211-1491446461.png)
![](https://img2020.cnblogs.com/blog/1165731/202102/1165731-20210212143850778-1102286075.png)
![](https://img2020.cnblogs.com/blog/1165731/202102/1165731-20210212143851390-487884582.png)
![](https://img2020.cnblogs.com/blog/1165731/202102/1165731-20210212143851754-1129369945.jpg)
![](https://img2020.cnblogs.com/blog/1165731/202102/1165731-20210212143852394-1702503364.png)
![](https://img2020.cnblogs.com/blog/1165731/202102/1165731-20210212143852889-1559108196.png)
![](https://img2020.cnblogs.com/blog/1165731/202102/1165731-20210212143853273-333406519.png)
![](https://img2020.cnblogs.com/blog/1165731/202102/1165731-20210212143853675-1200237804.png)
![](https://img2020.cnblogs.com/blog/1165731/202102/1165731-20210212143854045-483020644.png)
![](https://img2020.cnblogs.com/blog/1165731/202102/1165731-20210212143854655-512866623.png)
![](https://img2020.cnblogs.com/blog/1165731/202102/1165731-20210212143855253-1869418587.png)
![](https://img2020.cnblogs.com/blog/1165731/202102/1165731-20210212143855572-2139918549.png)
◆常用算法:hash算法截取;自增序列算法
◆对比多种算法,我们采取自增序列算法实现
编码实现
使用 Flask框架演示本系统实现
◆代码里实现了短网址生成算法
◆数据库使用Mysql
◆计数器使用 Redis
![](https://img2020.cnblogs.com/blog/1165731/202102/1165731-20210212143855872-529979901.png)
回答重点
回答要点,最好图文并茂
◆遵守三个要素来回答
◆包含数据表的设计、api的设计、算法的设计
◆图文并茂,有数据表、接口定义、流程图
如何设计一个秒杀系统
难点:如何应对高并发的用户请求
◆什么是秒杀系统?你有没有使用过?
◆如何根据我们提到的三个要素来设计秒杀系统?
◆秒杀系统涉及到哪些后端组件(你可以参考网上资料思考如何设计)
第11章 面试经验分享
Python后端面试经验分享
寒冬之下,如何自保
虽然年年都喊互联网寒冬,但是今年确实有点不一样
◆互联网红利期已过,今年爆出大量知名互联网公司裁员
◆竞争压力增加,如何提升个人竞争力?
◆居安思危,持续学习,多读经典
Python就业
Python能做什么?
◆后端职位 Python相较于PHP和Java不够多
◆Python就业面广:爬虫、运维、数据分析、后端、AI等,找准兴趣
◆重视基础,淡化语言
面试之前
面试之前如何充分准备?
◆复习基础(算法数据结构+数据库+网络是重中之重),查漏补缺
◆网上搜索意向公司面经,了解对方公司喜欢问什么?
◆重基础,没事多刷题,很多公司越来越重视算法数据结构
简历投递
广泛撒网,重点捕鱼
◆多投递和面试一些公司,争取多拿几个ofer
◆从易到难,可以先从小公司开始面试
◆了解对方所用到的技术和业务,了解面试重点
面试环节
坦然面对,友好交流
◆一般技术可能有三面(基础+项目)
◆很多公司基本都要手写代码
◆引导交流,察言观色,尽量找自己擅长的话题聊,实事求是,防止挖坑
面试之后
总结问题,查漏补缺。多复盘,多总结经验
◆总结经验
◆合理定位,面试是一件很看运气的事,面不过不代表能力不行
◆扎实的基础+强悍的编程能力可以大幅提升面试成功率
整理面试经验,写面试电子书
居安思危
工作了就稳定了?
◆关注经济环境,尽量进入公司核心业务
◆持续学习,保持职场竞争力
◆算法题不能丢下,长时间不练习手生
第12章 课程总结
课程内容回顾
课程体系(上)
◆面试技巧篇
◆编程范式篇
◆Python语言篇
◆操作系统篇
◆算法与数据结构篇
课程体系(下)
◆网络编程篇
◆系统设计篇
◆数据库篇
◆面试经验总结
◆Web框架篇
Python基础高频考点
Python语言基础考察点
◆Python特性:装饰器、生成器与协程、异常处理
◆常用内置模块:collections等模块
◆Cpython解释器:GIL,内存管理
算法与数据结构高频考点
Python算法与数据结构考察点:学会手写算法题
◆常用的内置结构∶list/ tuple/set/dict, collections模块
◆常考算法:快排、归并、堆排序等高级排序算法
◆常考数据结构:链表,二叉树,栈,队列
编程范式高频考点
编程范式:OOP
◆面向对象基础, Python类的实现
◆装饰器模式
◆单例模式手写
操作系统高频考点
操作系统一般考的是Linux
◆常用 Linux命令:top/kill/ps
◆线程和进程的区别
◆操作系统内存管理机制
网络高频考点
网络协议和网络编程基础
◆网络协议:TCP/UDP/HTTP
◆多路复用和并发编程
◆Python并发网络框架 Tornado/ Gevent/Asyncio
数据库高频考点
Mysql+ Redis是重点
◆Mysql基础和索引原理
◆SQL语句编写
◆缓存, Redis的使用和原理
Python Web框架高频考点
常见的Web框架 Django/ Flask/ Tornado至少要熟练一个
◆WSGI,不同框架对比
◆常见网络安全问题SQL注入/XSS/CSRF
◆ RESTful
系统设计高频考点
如何设计和实现一个后端系统?
◆系统设计三要素:场景限制、数据存取设计、算法实现设计
◆短网址系统、秒杀系统、评论系统
◆回答重点:图文并茂,架构设计图
重中之重
考点太多,排序重点
◆算法和数据结构,面试刷题
◆数据库(关系型+内存型)
◆网络协议和网络编程
<wiz_tmp_tag id="wiz-table-range-border" contenteditable="false" style="display: none;">