b*******n 发帖数: 847 | 1 interview 迟到了20分钟,只问了一道oo题,open end discussion。其实应该挺简单
,但答得不咋地,发上来给大家讨论造福后人吧~
假设有如下class: Account,Campain, TargetingCritierion,Logger. 前三个
class包含account,campain,和target的相关信息,后面的logger class用来输出前
三个class的信息。以下是初始code,问在class设计上有什么可以改进的地方,怎么改
进,怎么进一步改进,等等
class Account
attr_accessor :id, twitter_handle
end
class Campaign
attr_accessor :id, :name, :budget, :account
end
class TargetingCriterion
attr_accessor :targeting_type, :targeting_value
end
class Logger
def log(object)
case object.class.name
when "Campaign"
log_text(object.name " (" + object.id + ")")
log_text(object.budget)
log_text(object.account_id)
when "TargetingCriterion"
log_text(object.targeting_type)
log_text(object.targeting_value)
when "Account"
log_text(object.id)
log_text(object.twitter_handle)
end
end
end |
p*****2 发帖数: 21240 | |
b*******n 发帖数: 847 | 3 二爷,我压根不知道这是Ruby,我当时还在心说这是神马语言。。。
只不过能看懂大概意思就行了,coding用c++
【在 p*****2 的大作中提到】 : LZ是Ruby大拿呀
|
p*****2 发帖数: 21240 | 4
是店面吗?T店面经常性的不考察算法和数据结构,净考察乱七八糟的东西。比较郁闷
。
【在 b*******n 的大作中提到】 : 二爷,我压根不知道这是Ruby,我当时还在心说这是神马语言。。。 : 只不过能看懂大概意思就行了,coding用c++
|
J****3 发帖数: 427 | |
f*******t 发帖数: 7549 | |
R***Z 发帖数: 1167 | 7 请问都有哪些常见的“乱七八糟”的东西?是OO, OS knowledge之类的?
【在 p*****2 的大作中提到】 : : 是店面吗?T店面经常性的不考察算法和数据结构,净考察乱七八糟的东西。比较郁闷 : 。
|
b*******n 发帖数: 847 | 8 是电面,二爷才说,我早点知道就好了,sign~
【在 p*****2 的大作中提到】 : : 是店面吗?T店面经常性的不考察算法和数据结构,净考察乱七八糟的东西。比较郁闷 : 。
|
b*******n 发帖数: 847 | 9 啥事duck typing?
【在 f*******t 的大作中提到】 : 估计想考duck typing
|
p*****2 发帖数: 21240 | 10
知道也没法准备呀。你最后怎么做的?
【在 b*******n 的大作中提到】 : 是电面,二爷才说,我早点知道就好了,sign~
|
|
|
b******7 发帖数: 92 | 11 几个类的数据直接暴露在外面,可见性、一致性的控制得不到保证
log类设计得不好,打印函数不应集中在log类中,也不好做访问控制
用c++的话,可仿照ostream重载<<的方法,对每个类重载一个写log方法
friend Logger & operator<<(Logger & log, const Account & acc);
friend Logger & operator<<(Logger & log, const Campaign & ca);
...
用java的话,增加logable接口
interface logable{
public void printLog(Logger log);
}
Account、Campaign等实现这个接口 |
z****e 发帖数: 54598 | 12 ruby和scala比较适合twitter这种公司 |
x*****0 发帖数: 452 | |
b*******n 发帖数: 847 | 14 我答的和你前面几点差不多,但你后面重载的那个方法我没答出来,我回答的是在每个类
里实现输出自己的变量的函数,然后由log类调用,但interviewer给的答案是在每个类里
直接调用log类的函数输出.我当时还挺不理解的,但你这样一说我觉得他想要的可能就
是你下面这个重载的方法.
【在 b******7 的大作中提到】 : 几个类的数据直接暴露在外面,可见性、一致性的控制得不到保证 : log类设计得不好,打印函数不应集中在log类中,也不好做访问控制 : 用c++的话,可仿照ostream重载<<的方法,对每个类重载一个写log方法 : friend Logger & operator<<(Logger & log, const Account & acc); : friend Logger & operator<<(Logger & log, const Campaign & ca); : ... : 用java的话,增加logable接口 : interface logable{ : public void printLog(Logger log); : }
|
b*******n 发帖数: 847 | 15 早点知道至少有心理准备啊,不至于全身心的准备coding结果措手不及
【在 p*****2 的大作中提到】 : : 知道也没法准备呀。你最后怎么做的?
|