30天修炼完成Ruby精选面试题!
我决定从学习Ruby on Rails开始着手!鼓励自己在短期间内专心学习与产出知识,为转职奠定良好的基础。
A.首先:找寻方向,决定主题
我想很多人的状况都跟我一样:想学新的东西、甚至是想转进入新的行业,但又不知道该如何入门。
我以自身的情境为例,假设我从什么都不懂的情况下出发,如何在一年后,成为能够面试成功的Ruby Junior Developer?
后来我受到启发,我决定从「最常被问到的面试题目」着手,我把学习新知识,和自己的旅行经验做连接,如同在地球上探索未知的地方一样,把题目当作地图上的地标一般的扩展知识。
如果我能成功做到的话,相信能鼓励更多台湾朋友勇于挑战自己,勇于尝试,接触更多有趣好玩的信息领域!
B.其次:分配技术写作的时间
身为马拉松跑者,我相信铁人赛就好像跑马拉松一样,比赛的身体、心理调适,是从几个月前就开始,做好充足的准备,才能大幅降低断赛的机率。
1.把写文章的生活规律化
这是我从第一个Coach(生涯教练)身上学到的,要把时间Block下来,专心做好手头上的事。我每天早上九点到下午三点到一个会令自己专心的地方技术文章写作。(还要记得规律运动、还有适时地让眼睛离开电脑休息一下喔!)
2.熟悉IT邦的技术文章发布流程
我在8月到9月这段时间,先练习文章发布,包含使用Markdown语法、草稿与Tag、截图功能上传的功能熟悉。
如同去健身房锻炼肌肉一样,一开始感到不习惯与不舒适(第一个不调节的是:我发的文章会出现轮播在站点首页,也太害羞了吧!如果文章乱写或写错的话会很羞耻的)之类的心理调适。
我也开始看Ruby on Rails项目的在线教学课程,并练习修改一些项目功能,练习调节有bug时的焦虑不耐烦(现在已经接受这是工程师的日常了~拨头发~~)以及练习自己找解答、找不出来也要练习提问与求助。
C.做好准备功夫,然后按照计划,坚持下去(vmwork)!
工欲善其事,必先利其器。任何有自己的电脑的地方就是办公桌,而在自己的网站的地方就是实验场。
1.架好环境
有一个自己的Github帐号,自己的blog和一个可以实作动态功能的网站,就像信息时代的个人名片一样,都是一个优秀工程师基本的工具。有可以自己实作测试代码的地方是很重要的,活学活用,才能了解自己到底有没有弄懂热腾腾学到的新观念与工具!
2.立马开始,坚持到底。
用行动证明一切:)我们来解题吧!
Ruby经典面试题目#01
什么是类别?What is a Class?
类别(Class)能够建立物件实体(Object instance),接收数据(data),并利用方法(method)和数据互动。
以上概念对于程序新手来说,应该会很模糊。我们要了解类别(Class),就必须知道Ruby是一款面向对象程序语言(Object-Oriented Programming,OOP)。
而Ruby的世界里,几乎所有东西都是物件(Object)。包含数值(Numeric,整数与浮点数),布尔值(True or False),字串(String),符号(Symbol,代表固定值),数组(Array),哈希(Hash),范围(Range)到模块(Module)与类别(class)。
每个物件(Object)就像一台小型的机器一样,可以「接收数据」、「处理数据」,并「传递数据」给其他的物件。
面向对象程序语言利用「可重复性」的概念来使软件功能更易于维护。例如,类别(class)具有继承(inheritance)的能力,让子类别直接继承父类别的特性。
举个class的例子试试看,并用.superclass查询父类别,了解继承关系:
class World #建立类别名称「世界」
end
class Country < World #建立「国家」继承了「世界」类别
end
tw = Country.new #建立一个新国家:番薯岛
p tw.class # tw的类别
p tw.class.superclass # tw的的类别(Country)的父类别
p tw.class.superclass.superclass # tw的的类别(Country)的父类别(World)的父类别
在当我们把以上的代码在irb跑出来,会出现:
Country #tw的类别:显示为Country
World #Country的父类别:显示为World
Object #World的父类别:显示为Object
虽然上面的代码好像拗口令,但如果以盖大楼为例就会很直观了:
tw是一楼,Country是二楼,World是三楼,Object是顶楼。
层层上推之后,到了顶楼tw.class.superclass.superclass,输出了Object,
证明从tw,到Country到World都是物件(Object)呢!
这就是Ruby的世界观:)
就算到了顶楼层Object,我们还可以继续下楼梯,用.class往回推实验下去,了解Contry的类别:
p tw.class.superclass.class #World的类别
p tw.class.superclass.class.superclass #World的类别(Class)的父类别
p“-----break-----”
p tw.class.superclass.class.superclass.class #Module的类别
p tw.class.superclass.class.superclass.superclass #Module的父类别
代码显示出来的结果如下:
Class # world的类别是Class
Module # Class的父类别是Module
“-----break-----”
Class # Module的类别是Class
Object # Module的父类别。是。物。件!万物皆物件!众生平等~~
从「模块是类别的父类别」这里,我们还可以发现,类别(Class)与模块(Module)有深厚的关系。那明天的文章就写这个吧~灵感都想好了!嘻嘻。
回到「什么是类别?」
类别(Class)能够建立物件实体(Object instance),接收数据(data),并利用方法(method)和数据互动。
那我们就来用类别、物件、实体变数,和方法,写一个开赛宣言吧!
class TingIsIronman
def initialize
@message =“I'm going to write 30 IT articles in 30 days.”#定义实体变数(instance variable)@message
end
def method
puts @message.gsub(“write”,“create”)#定义方法:`.gsub`,可以取代字串
end
end
object = TingIsIronman.new #建立物件实体(Object instance)
object.method #利用方法和数据互动(xcsjbj)
#=> I'm going to create 30 IT articles in 30 days.
第一天的练习就到这里:)希望能继续解题下去!