专栏名称: 九章算法
专业的北美IT求职经验分享、技术交流社区,帮助你找到好的IT工作。由硅谷顶尖IT企业工程师维护。提供专业的算法培训/面试咨询,官网 www.jiuzhang.com
目录
相关文章推荐
算法爱好者  ·  刚刚,OpenAI 上线 Deep ... ·  2 天前  
九章算法  ·  北美码农「找工咨询1v1」服务来了!FAAN ... ·  4 天前  
九章算法  ·  美国正在萎缩的行业!华人千万别碰! ·  5 天前  
九章算法  ·  终极版捡漏!大厂system ... ·  3 天前  
九章算法  ·  疯狂给码农“砸钱”的公司!Top3完爆大厂! ·  3 天前  
51好读  ›  专栏  ›  九章算法

如何设计一个ATM | OOD 面向对象高频面试题及解析

九章算法  · 公众号  · 算法  · 2018-07-05 07:00

正文

作者 | 文泰来老师

编辑 | Jenny
专栏 | 九章算法


Q
问题描述


如何设计一个ATM Machine?


A
解题思路


这是一道常考的OOD面向对象面试题,属于 Real-life Object Deisgn, 类似面试题型有Vending Machine 等。


1
Clarify
ATM机的Input和Output是什么?

Assumption: Input 是卡, output 是现金


Input 有什么限制吗?

Assumption: 只能是debit card


output 有什么限制吗?

Assumption: 只能是20美元的倍数


A

Output 会不足吗?

Assumption: ATM永远有足够的余额 (Bonus: 这里可以考虑如果不够的话应该怎么处理)


Input 有什么特点?

Assumption: 一张卡可能有多个账户 (Bonus: 这个不太容易想到, 没想到也没关系,我们可以先按照一个account来做)


2
Core objects
  • Debit Card

  • ATM Machine

  • Account


3
Use cases
  • Take debit card

  • Authorization / Log in

  • (Optional - 如果一张卡能有多个account就需要这个) Select account

  • Check balance

  • Deposite money

  • Withdraw money

  • Log out


4
Classes

ATM Machine

  • float balance (Optional - 如果ATM机余额有限制就需要这个)

  • Session currentSession ( Tips : 如果一个主体,它的操作是针对每一个用户的, 那么经常会考虑到加入Session这个Class。实践中如果碰到需要login/logout的主体,经常会用到Session)

    • void takeDebitCard (DebitCard card)

    • List login (String passcode)

    • void selectAccount (Account account)

    • float checkBalance ()

    • void depositeMoney (float amount)

    • float withDrawMoney (float amount)

    • void logOut ()


Session

  • DebitCard currentDebitCard

  • Account currentAccount


Account

  • float balance

    • void depositeMoney (float amount)

    • withDrawMoney (float amount)


5
Correctness

1. 增加各式的Exceptions

2. 对于ATM机,有许多种Design pattern可以适用,其中比较合适的就有我们《OOD面向对象专题》课上讲过的State Design Pattern, 大家可以自己思考有哪些合适的states。


6
总结

ATM Machine作为一道real life object的题目,做法和我们上课讲过的解法大同小异,其中值得注意的三点分别是对Session的使用;可能出现各式各样的Exception; 以及一张卡对应多个 Account的business logic。 

7
课程推荐

九章算法《OOD 面向对象专题班》,由本文作者文泰来老师主讲

免费试听内容:

  • OOD 面试中常见面试题总结、分类

  • 如何评判一次OOD面试的表现是好是坏

  • 设计模式讲解 Design Pattern - Strategy

  • 高频OOD面试题讲解 - 电梯设计

免费试听时间:

美西时间7月15日周日 13:30-15:30

美东时间7月15日周日 16:30-18:30

北京时间7月16日周一 04:30-06:30 a.m

长按二维码报名:

 
更多精彩内容
  • 回复“简历”,查看简历撰写指南,获取“简历模板”

  • 回复“冷冻期”,查看北美各大IT企业冷冻期信息和注意事项

  • 回复“Career”, 查看Caireer Fair 攻略 check list

  • 回复“薪资”,查看北美各大IT企业New Grades Engineer 薪资水平;

  • 回复“项目”,查看7-14天可以搞定的小项目推荐

  • 回复“评分”,查看系统设计评分指南

  • 回复“behavior”,查看behavior interview指南

  • 回复“晋升”,查看Engineer晋升机制 

九章算法





请到「今天看啥」查看全文