一亩三分地

 找回密码 注册账号

扫描二维码登录本站


Salarytics=Salary Analytics
查询工资数据
系统自动计算每年收入

科技公司如何
用数据分析驱动产品开发
coupon code 250off 立减$250

深入浅出AB Test
从入门到精通
coupon code 250off 立减$250
游戏初创公司招聘工程师、UIUX Designer和游戏策划
坐标湾区
DreamCraft创始团队
招聘游戏开发工程师
把贵司信息放这里
查看: 3612|回复: 23
收起左侧

一同攻克系统设计与构架

    [复制链接] |试试Instant~ |技术交流
我的人缘0

分享帖子到朋友圈
puncsky | 显示全部楼层 |阅读模式
本楼: 👍   100% (6)
 
 
0% (0)   👎
全局: 👍   100% (121)
 
 
0% (0)    👎

注册一亩三分地论坛,查看更多干货!

您需要 登录 才可以下载或查看,没有帐号?注册账号

x
大家好我是 《面试官教你破解系统设计题》  https://www.1point3acres.com/bbs/thread-171320-1-1.html 的作者

一亩三分地的小伙伴们有没有兴趣一起攻克系统设计与构架?

目标是方便 1 )做系统和 2 )做管理都能够很方便地有相应的背景知识,更高效率和更省钱地做出健壮的和大规模的系统。当然,对你构架面试也会有帮助。

内容是旧金山湾区公司面试的真题与解答。

点此进入 >>> https://github.com/puncsky/system-design-and-architecture <<<

攻克的方法是,针对主流的互联网产品的系统构架和常用的理论,调研市面上的解决方案,择优录用,去繁就简,像是做幻灯片一样都过一遍,观其大略,不求甚解。参考链接在每一篇基本上都有具体列出。

大多数内容是英文的,欢迎中文翻译 :)

最后,希望集社区的力量,互通有无,一起把这件事情做到世界一流!

英文 Tg 交流群: https://t.me/system_design_and_archiecture

中文微信交流群

system-design-and-architecture.jpg



最后,因为我是一亩三分地的老用户,为了回馈地里,如果有新的进展,会持续首发在一亩三分地。


补充内容 (2019-10-10 03:04):
由于现在人数较多,需微信加 onetptp 拉你入群

评分

参与人数 20大米 +40 收起 理由
hptg1994 + 1 给你点个赞!
艾利克斯 + 3 给你点个赞!
Steadfast2Live + 2 非常感谢,很有帮助!
联氢人 + 1 给你点个赞!
Adam_Smith_ + 2 很有用的信息!
胡椒牛柳 + 3 给你点个赞!
sigmapi + 2 给你点个赞!
myhong + 2 给你点个赞!
younameit + 1 给你点个赞!
mk48 + 2 很有用的信息!

查看全部评分


上一篇:Google工程师分享的10 大类常考面试算法
下一篇:container / kubernetes 开发 深挖

本帖被以下淘专辑推荐:

我的人缘0
 楼主| puncsky 2019-10-8 17:45:28 | 显示全部楼层
本楼: 👍   0% (0)
 
 
0% (0)   👎
全局: 👍   100% (121)
 
 
0% (0)    👎
本帖最后由 puncsky 于 2019-10-8 17:50 编辑

Designing Airbnb or a hotel booking system
Requirements
  • for guests
    • search rooms by locations, dates, number of rooms, and number of guests
    • get room details (like picture, name, review, address, etc.) and prices
    • pay and book room from inventory by date and room id
      • checkout as a guest
      • user is logged in already
    • notification via Email and mobile push notification
  • for hotel or rental administrators (suppliers/hosts)
    • administrators (receptionist/manager/rental owner): manage room inventory and help the guest to check-in and check out
    • housekeeper: clean up rooms routinely
Architecture
ComponentsInventory <> Bookings <> Users (guests and hosts)
Suppliers provide their room details in the inventory. And users can search, get, and reserve rooms accordingly. After reserving the room, the user's payment will change the status of the reserved_room as well. You could check the data model in this post.
How to find available rooms?
  • by location: geo-search with spatial indexing, e.g. geo-hash or quad-tree.
  • by room metadata: apply filters or search conditions when querying the database.
  • by date-in and date-out and availability. Two options:
    • option 1: for a given room_id, check all occupied_room today or later, transform the data structure to an array of occupation by days, and finally find available slots in the array. This process might be time-consuming, so we can build the availability index.
    • option 2: for a given room_id, always create an entry for an occupied day. Then it will be easier to query unavailable slots by dates.
For hotels, syncing data
If it is a hotel booking system, then it will probably publish to Booking Channels like GDS, Aggregators, and Wholesalers.

To sync data across those places. We can
Payment & BookkeepingTo execute the payment, since we are calling the external payment gateway, like bank or Stripe, Braintree, etc. It is crucial to keep data in-sync across different places. We need to sync data across the transaction table and external banks and vendors.
Notifier for reminders / alerts
The notification system is essentially a delayer scheduler (priority queue + subscriber) plus API integrations.
For example, a daily cronjob will query the database for notifications to be sent out today and put them into the priority queue by date. The subscriber will get the earliest ones from the priority queue and send out if reaching the expected timestamp. Otherwise, put the task back to the queue and sleep to make the CPU idle for other work, which can be interrupted if there are new alerts added for today.

If you find this article helpful, please follow me on Github.
回复

使用道具 举报

我的人缘0
miaoxinhuili 2019-10-9 00:34:40 | 显示全部楼层
本楼: 👍   0% (0)
 
 
0% (0)   👎
全局: 👍   100% (47)
 
 
0% (0)    👎
谢谢分享 祝福祝福
回复

使用道具 举报

我的人缘0
森林火柴 2019-10-9 12:17:37 | 显示全部楼层
本楼: 👍   0% (0)
 
 
0% (0)   👎
全局: 👍   95% (22)
 
 
4% (1)    👎
谢谢分享,正在努力,希望可以有所贡献
回复

使用道具 举报

我的人缘0
 楼主| puncsky 2019-10-9 15:51:51 | 显示全部楼层
本楼: 👍   0% (0)
 
 
0% (0)   👎
全局: 👍   100% (121)
 
 
0% (0)    👎
本帖最后由 puncsky 于 2019-10-9 15:57 编辑

Lyft 的营销自动化平台 Symphony
获客效率问题:广告投放如何花更少的钱用更少的人得到更高回报?具体来讲,Lyft 的广告投放要服务如下特点
  • 管理基于地域的 campaign
  • 数据驱动的增长:增长必须是规模化的、可测量的、可预测的
  • 支撑起 Lyft 独特的增长模型,如图:

主要的挑战是:难以规模化管理跨地域营销中的各个环节,广告竞标、预算、素材、激励、选择受众、测试等等。下图是营销者的一天:

我们可以发现“执行”占去了大部分的时间,而更少的时间花在了更重要的“分析和决策”上。规模化意味着减少繁复的操作,让营销人员专注于分析与决策。
解决方案:自动化为了降低成本,提高做实验的效率,需要
  • 预测新用户是否对产品感兴趣
  • 多渠道优化,有效评估和分配预算
  • 方便地管理上千个 campaigns
数据由 Lyft 的 Amundsen 系统做增强学习。
自动化的部分包括:
  • 更新 bid 的关键词
  • 关掉效果不好的素材
  • 根据市场改变 referrals values
  • 找到高价值的用户 segment
  • 在多个 campaign 中共享策略
构架
技术栈:Apache Hive, Presto, ML platform, Airflow, 3rd-party APIs, UI.
具体的组成模块LTV 预测模块用户的终身价值是衡量渠道的重要标准,预算由 LTV 和我们愿意为该地区的获客付出的价格共同决定。
我们对新用户的认知有限,随着交互的增多,所提供的历史记录会更准确地预测。
一开始的特征值:

随着历史上的交互记录的积累,做出的判断就会越准确:

预算分配模块搞定了 LTV,接下来是根据价格定预算。拟合出 LTV = a * (spend)^b 形式的曲线以及周围的区间里类似参数的曲线。为了找到全局最优,需要付出一些随机性的代价。

投放模块分为两部分,一部分是调参者,一部分是执行者。调参者根据定价,设定基于渠道的具体的参数;执行者把这些参数执行到具体的渠道上。
有很多流行的投放策略,在各色的渠道中,是共通的:

总结要注意人的经验在系统中的重要性,否则会 garbage in, garbage out. 当人从繁琐的投放任务解放出来,专注于理解用户、理解渠道、理解自身要传达给受众的信息之后,就能够获得更好的投放效果——花更少的时间达到更高的 ROI。



如果这篇文章对你有帮助
在 Github 上 Follow 我 :)


回复

使用道具 举报

我的人缘0
 楼主| puncsky 2019-10-9 16:11:25 | 显示全部楼层
本楼: 👍   0% (0)
 
 
0% (0)   👎
全局: 👍   100% (121)
 
 
0% (0)    👎
本贴内容及后续更新会移动至 https://www.1point3acres.com/bbs/thread-558127-1-1.html
回复

使用道具 举报

我的人缘0
nebulaliang 2019-10-10 01:19:24 | 显示全部楼层
本楼: 👍   0% (0)
 
 
0% (0)   👎
全局: 👍   100% (7)
 
 
0% (0)    👎
微信交流群的图片下载不了, 提示:“抱歉,您没有权限下载本附件”
回复

使用道具 举报

我的人缘0
 楼主| puncsky 2019-10-10 03:04:24 | 显示全部楼层
本楼: 👍   0% (0)
 
 
0% (0)   👎
全局: 👍   100% (121)
 
 
0% (0)    👎
nebulaliang 发表于 2019-10-10 01:19
微信交流群的图片下载不了, 提示:“抱歉,您没有权限下载本附件”

由于现在人数较多,需微信加 onetptp 拉你入群
回复

使用道具 举报

我的人缘0
 楼主| puncsky 2019-10-11 10:07:19 | 显示全部楼层
本楼: 👍   0% (0)
 
 
0% (0)   👎
全局: 👍   100% (121)
 
 
0% (0)    👎
Designing typeahead search or autocomplete

Requirements
  • realtime / low-latency typeahead and autocomplete service for social networks, like Linkedin or Facebook
  • search social profiles with prefixes
  • newly added account appear instantly in the scope of the search
  • not for “query autocomplete” (like the Google search-box dropdown), but for displaying actual search results, including
    • generic typeahead: network-agnostic results from a global ranking scheme like popularity.
    • network typeahead: results from user’s 1st and 2nd-degree network connections, and People You May Know scores.

Architecture
Multi-layer architecture
  • browser cache
  • web tier
  • result aggregator
  • various typeahead backend

Result Aggregator
The abstraction of this problem is to find documents by prefixes and terms in a very large number of elements. The solution leverages these four major data structures:
  • InvertedIndex<prefixes or terms, documents>: given any prefix, find all the document ids that contain the prefix.
  • for each document, prepare a BloomFilter<prefixes or terms>: with user typing more, we can quickly filter out documents that do not contain the latest prefixes or terms, by check with their bloom filters.
  • ForwardIndex<documents, prefixes or terms>: previous bloom filter may return false positives, and now we query the actual documents to reject them.
  • scorer(document):relevance: Each partition return all of its true hits and scores. And then we aggregate and rank.

Performance
  • generic typeahead: latency <= 1 ms within a cluster
  • network typeahead (very-large dataset over 1st and 2nd degree network): latency <= 15 ms
  • aggregator: latency <= 25 ms


If you find this article helpful


follow me on Github :)



star the repo


find more interesting articles on puncsky.com





回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册账号

本版积分规则

隐私提醒:
■为防止被骚扰甚至人肉,不要公开留微信等联系方式,请以论坛私信方式发送。
■特定版块可以超级匿名:https://pay.1point3acres.com/tools/thread
■其他版块匿名方法:http://www.1point3acres.com/bbs/thread-405991-1-1.html

手机版||一亩三分地

GMT+8, 2019-11-23 01:37

Powered by Discuz! X3

© 2001-2013 Comsenz Inc. Design By HUXTeam

快速回复 返回顶部 返回列表