第10-12章 系统设计考察点

第10-12章 系统设计考察点

 
系统设计考察点

第10章 系统设计考点

◆什么是系统设计?
◆系统设计需要掌握哪些知识?
◆如何设计和实现一个后端系统服务的设计?
 

什么是系统设计?

什么是系统设计?( System Design)
◆系统设计是一个定义系统架构、模块、接口和数据满足特定需求的过程
◆比如设计一个短网址服务、评论服务、Feed流系统、抢红包系统
◆微服务架构很多系统被按照业务拆分,需要单独设计一个系统服务
 
公司里提供一个供其他所有业务使用的一个短网址服务

系统设计的难点

中高级工程师必经之路
◆需要具备相关领域、算法的经验,有一定的架构设计能力
Feed流,推拉模型
◆熟悉后端技术组件,比如消息队列、缓存、数据库、框架
◆具备文档撰写、流程图绘制、架构设计、编码实现等综合能力
 

系统设计怎么答?

很多新手碰到这种问题完全不知道怎么回答
◆完全没有思路的(很多毕业生对这种问题完全手足无措)
有一定思路,但是回答没有重点
◆能回答上来重点,但是思路不够清晰
 

系统设计的要素

系统设计三大要素

◆使用场景和限制条件
◆数据存储设计
◆算法模块设计
 
 

如何回答系统设计题目?

按照三个要素来回答
◆问面试官:什么场景和条件下使用?
面试官上来就抛一句:如何设计一个短网址系统?
◆设计数据存储系统
◆设计算法相关模块
 

要素之一:场景和限制

什么场景使用?有哪些条件?
◆这个系统是在什么地方使用的?比如短网址系统提供给站内各种服务生成短网址
限制条件:用户估计有多少?至少要能支撑多少用户(服务)?
◆估算并发qps:峰值qps是多少?平均qpS是多少?
 

要素之二:数据存储设计

数据库的选型
◆按需设计数据表,需要哪些字段,使用什么类型?数据增长规模
◆数据库选型:是否需要持久化?使用关系型还是NoSQL?
◆如何优化?如何设计索引?是否可以使用缓存?
 

要素之三:算法模块设计

算法解决问题的核心。程序=算法+数据结构。系统=服务+存储
需要哪些接口?接口如何设计
◆使用什么算法或者模型?
◆不同实现方式之间的优劣对比,如何取舍?
 

延伸考点

如何回答不错,可能会问一些深入的问题(扩展、容错)
◆用户多了,qps高了如何处理?
◆数据存储多了不够存了如何处理?
◆故障如何处理?单点失败、多点失败、雪崩问题
 

系统设计真题解析:短网址系统设计与实现

如何设计与实现一个短网址系统?
◆什么是短网址系统?包含哪些功能(接口)
◆短网址系统的存储设计?需要存储哪些字段?
◆如何设计算法生成短网址?
 

什么是短网址系统?

TinyUrl Service
◆把一个长网址转成短网址的服务
◆比如https:/bitly.com/
◆转换之后网址的后缀不超过7位(字符或者数字)

场景和限制

使用场景:提供短网址服务为公司其他各业务服务
◆功能:一个长网址转成短网址并存储;根据短网址还原长url
◆要求短网址的后缀不超过7位(大小写字母和数字)
◆预估峰值插入请求数量级:数百;査询请求数量级:数干

数据存储设计

根据需求设计数据存储方式
◆使用Mysql即可满足
◆需要的字段有哪些?
◆如何根据查询设计索引?
 
 

算法实现设计

短网址生成算法有哪些?对比优缺点
◆两个API:long2short_url, short2long_url
 
 
 
 
 
 
 
 
 
 
 
 
◆常用算法:hash算法截取;自增序列算法
◆对比多种算法,我们采取自增序列算法实现
 

编码实现

使用 Flask框架演示本系统实现
◆代码里实现了短网址生成算法
◆数据库使用Mysql
◆计数器使用 Redis
 
 

回答重点

回答要点,最好图文并茂
◆遵守三个要素来回答
包含数据表的设计、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;">

posted @ 2021-02-12 14:39  元贞  阅读(89)  评论(0编辑  收藏  举报