网站前端,后端设计,系统设计常识

编程知识 更新时间:2023-04-03 22:07:40

系统设计第一次课听课笔记

 

网站分为前端和后端

前端就是大家看到的网站界面,类似美女的外表;

后端就是网站的架构设计,类似美女的内心,肚子里有多少东西,无法直接看出来。

 

后端工程师很苦逼,网站有问题,随时上马,修复问题,比如微博因为明星结婚,访问量过大,微博挂了,后端需要24小时待命。

前端只是修改网站界面,比如公司出了新产品,让用户看到新产品,属于前端,前端出问题不用立刻去修复,因为完全不影响客户访问网站,只是不漂亮罢了。后端出问题就容易出现404,无法访问的情况。

 

想生活工作平衡的就搞前端,搞后端容易没时间陪女朋友,或者哪有时间找女友,24小时陪着电脑,电脑就是女朋友。

 

 

面向web后端,

实习生不会考到系统设计。

tradeoff

soa

pull model

push model

 

数据存储系统

异步任务,消息队列

 

6

面试形式:

设计某系统,设计微博,设计Facebook,看看你能够撩到多深,多好,面向非常后端的工程师,

设计某个系统中的某某功能。比如,登录密码不能错误多少次,删除一个微博功能。标记邮件为已读功能,某个小功能。

说清楚的话还是要求对系统设计有基本概念和认知。

 

7

系统设计SD和面向对象设计OOD区别

哪种面试需要写代码?

系统设计属于吹牛扯淡的话题,一般不考代码。面向对象需要写代码,写出各种继承关系。

知识点:

OOD考class,object, method,interface,inheritance,考察电梯设计,游戏设计。角色,操作

SD考察:数据库,网址系统设计,新鲜事系统设计。

 

9

课程有配套阶梯训练的。刷题消化课程内容。

 

10

面试问题:请设计Twitter。

第一句给面试官的话是?单向关注限制的博客系统,限制140个单词。微信是双向朋友关系,微博是单向关系,你关心别人,别人不一定关注你。

什么功能,场景,用户规模,

 

系统设计没有提到任何语言,需要数据库SQL语句。刷题用什么语言随意。没有和编程语言相关的东西。算法也和编程语言没关系。

 

系统设计评分标准:

有没有可行解。

特定问题,小功能设计能够答出来。

分析能力,根据设定的难点,解决掉

权衡能力,多种选择怎么选择最好的路线。没有标准答案。

知识储备。如何。

问题4S分析法:scenario,service, storage, scale

scenario设计场景,哪些功能,设计多牛逼

service服务把大系统拆分小问题

storage存储,数据如何存储与访问。

最重要,最难的部分。

Scale升级:解决缺陷,数据非常大,处理特殊问题。

 

对于Twitter,场景是:用户量,需要承担多大访问量,日活跃用户,月活量。这两个指标看看网站,APP的活跃量,Facebook日活:14亿。还要问有哪些功能需要设计。面试官肯定会告诉你。

用户量的影响主要是并发用户数。日活次数*每个用户平均请求次数/一天多少秒 = 150M * 60/ 86400 平均每秒10万次

一般每天60次网络请求。峰值和平均值的比例,合理值,2-9之间都可以。

30万次并发的读请求,写请求。重要的是计算过程,不是结果。

QPS用处,=100,用笔记本做web服务器就行。

1k,用好的web服务器就行。

QPS = 1万,需要建设1000台web服务器集群。如何维护,每一台挂了怎么办。

qps和服务器,数据库的关系。

一台服务器承受1000很牛了。一台SQL Database承受1千

nosql数据库cassandra承受1万的QPS,设计时候就是这样设计的。

 

300 I/O per second,每秒只有30次

 

service服务把大任务分解为小任务。只是设计某个功能,可以跳过这步。用户服务,注册,登录。tweet service: post a tweet news feed timeline. ; media service: upload image upload video; friendship service:follow unfollow

按照存储方式表单分类。

router:

 

flask:Python的web framwork,最快速搭建一个网站,里面最基本的概念都懂了。

 

存储方式:数据库,文件,缓存系统。

数据库:关系,非关系数据库

文件系统和数据库系统之间的关系:数据库构建在文件系统之上的。数据库无法脱离文件系统独立存在。如果学过操作系统,里面分为文件系统和内存系统,缓存系统就是内存系统了。

最开始肯定没有数据库,如果直接最文件系统操作,会非常痛苦,因为需求非常丰富。因为需求可以是查询年龄区间的男人,如果在文件系统中做,需要在所有用户信息中查找,太慢了,不太好查找,增删查改太难。

什么样的数据适合数据库和文件系统中?

结构化数据例如姓名,性别,年龄等就适合数据库中。图片视频非结构化数据适合文件系统。

缓存系统cache不支持持久化。持久化:断电就消失了。通常用来运算结果(花很长时间计算出来的),频繁访问的适合放在缓存中。

Redis是个非关系数据库。

 

27

非关系数据库:tweet service

关系数据库:user service

media service:file system

friendship service: sql/ nosql

 

系统= 服务+数据存储

程序=算法+数据结构

 

28

考察表单内容,存储什么东西?

 

休息5分钟

news feed新鲜事系统。

新鲜事:登录朋友圈,看到的信息流,朋友发布信息的集合。

典型新鲜事情系统:Facebook,Twitter,朋友圈,RSS Reader(绝迹了,属于博客和微博之间的过度产品)。

系统核心因素:

关注,被关注。每个人看到的新鲜事不同。

 

C++写网站找抽。Java都比较少了。更多用PHP,Python,C++更适合底层开发。

新鲜事是伟大的发明。以前的博客是必须看看别人是否更新了,后来Facebook这种新鲜事情,这个就很轻松了,只要关注了,自动就推送给自己,不需要每天去刷他的博客。

信息流怎么存取,就是核心点。让大家回复,根据学生反馈,有针对性回复。从文件系统读数据库,

32

存储pull model,算法

在用户查看朋友圈时候,获取每个好友前100条tweets,合并前100条news feed。k路归并算法。

不关心时间复杂度,关心数据库读取次数和读取方式。

存储原理:

pull模型缺陷:非常慢

异步执行:创建记录,然后不管了,其他进行得到这个任务,慢慢执行。发帖后告诉用户,发帖成功,但是粉丝收到新帖子还要一段时间。

storage ;pull vs push模型朋友圈用push模型,因为大V问题。当我是大V,pull很慢,所以不可以用pull。所以会限制朋友圈人数最多5000,以前最多2000.

facebook为啥用pull模型,太复杂了,有群信息,也可以单向关注,如果用push,太麻烦了。

 

scale扩展,解决pull缺陷,最慢的部分发生在用户读请求时候。在DB访问前加入cache,cache每个用户的timeline,cache每个用户的news feed。

浪费更多存储空间disk:

push结合pull模型:普通用户仍然push。明星不用push到用户的新闻里,

 

没有很大流量,push最好。资源少,偷懒,用户发帖少,实时性要求不高用push。

用pull:资源充足,实时性要求高,用户发帖多,单向好友关系,有明星问题。

54页结束。

总结:4S是一个套路:问清楚再动手。

分析比答案重要,关注这个过程是否和谐,有道理。系统设计没有标准答案,通过分析过程展现自己的知识储备。最后一期系统设计课程。

63页PPT结束

 

认识你是我们的缘分,同学,等等,记得关注我。

 

微信扫一扫
关注该公众号

更多推荐

网站前端,后端设计,系统设计常识

本文发布于:2023-04-03 22:07:00,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/8b280c5b81644fcf2a42884fc2803c92.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:后端   常识   系统   网站

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!

  • 40168文章数
  • 14阅读数
  • 0评论数