40+经常问到的Ruby on Rails面试问题和答案[2023]
Ruby on Rails可能是最著名的Ruby框架。它的使用简便性、MVC架构、社区和可扩展性是其受欢迎的原因。
一些使用Ruby on Rails的大公司有GitHub、Dribble、Shopify、Airbnb、Etsy、Kickstarter、Twitch和Zendesk等。
如果你是一个中级或高级的Ruby on Rails工程师,了解你可能在下一次面试中遇到的问题的性质是一个明智的举动。
如果你没有准备,面试可能会让人感到害怕。然而,如果你准备充分,你的信心会提高,你可能有幸在你梦寐以求的公司中获得一个新的角色。
这些是一些常见的Ruby on Rails面试问题及其答案。
Ruby on Rails是什么?
Ruby是一种具有简单语法的面向对象的编程语言。
Ruby on Rails是一个开发人员用来创建Web应用程序的Ruby框架。
讨论Ruby on Rails的优点
- 比其他语言更少的代码:使用Rails,你可以用很少的代码实现很多功能。
- 丰富的库和Gem:存在大量的库和Gem来提高Ruby on Rails应用程序的功能。
- 易于学习:Ruby on Rails的代码看起来就像英语一样简单。
- 庞大的社区。
讨论Ruby on Rails的限制
- 与Django和Node.js相比,Rails的运行速度和性能较低。
- 某些Gem的文档有限。
- Ruby on Rails是有偏见的,这限制了开发人员的灵活性。
Rails控制器是什么?
它是Ruby on Rails应用程序的逻辑中心。Rails控制器管理、协调和监控用户、模型和视图之间的所有交互。
Rails的Active Record是什么?
Active Record是一种对象关系映射(ORM)技术。这个Ruby代码层在代码逻辑和数据库之间运行。在你写Ruby代码之后,你运行“迁移”来对数据库进行更改。
MVC是什么,它是如何工作的?
模型-视图-控制器(MVC)架构模式将业务逻辑与输入和呈现逻辑分离。
- 模型:处理Rails应用程序的所有数据逻辑。
- 视图:这是用户查看的应用程序的一部分。
- 控制器:像一个桥梁或经纪人,允许模型和视图进行通信。
Ruby on Rails中的操作控制器是什么?
操作控制器是MVC模式中的C(控制器)。操作控制器接收传入的请求,理解请求的意义,并产生适当的输出。
Rails中的rake是什么?
rake是Ruby on Rails和Ruby应用程序的任务运行器。Rails有预定义的rake任务,用于执行测试、运行迁移和创建数据库。
Ruby on Rails中的yield是什么?
yield是一个关键字,用于在方法内调用一个块。yield可以传递给块的参数数量没有限制。在这种情况下,块是一种没有名称的方法,可以作为额外的参数传递给其他方法。
Ruby on Rails中的垃圾回收是什么?
垃圾回收是控制计算机程序使用的内存的过程。Ruby on Rails跟踪程序正在使用的对象,而不是程序员。开发人员可以专注于逻辑和约定,而不必担心内存分配。
垃圾回收在Rails应用程序中的作用是什么?
它释放您机器上的内存,以便其他进程可以执行。垃圾回收通过删除程序执行后留下的不可访问对象来实现这一目标。
什么是资产管道?
在Ruby on Rails中,Asset Pipeline提供了一个框架,用于压缩和合并CSS和JavaScript资源。该框架允许将Rails应用中的所有资源与其他gems中的资源自动组合在一起。
区分动态脚手架和静态脚手架
脚手架是生成Rails应用的主要部分的过程。
静态脚手架明确输入一个命令,以在相应的字段中生成所需的数据。要完成静态脚手架,必须运行迁移。
动态脚手架在运行时生成内容和用户界面。这个过程可以用来在Rails应用中创建、修改和删除操作。
什么是类库?
类库包括Ruby on Rails中的域,线程编程和数据类型是这些域的例子。类库允许开发人员创建代码抽象,从而在应用程序的不同元素中使用相同的逻辑。
描述Rails中的多态关联
多态关联是一种Active Record关联的类型。多态意味着一个对象可以有多种形式。在Rails上下文中,多态关联允许您定义一个可以与其他模型相关联或属于其他模型的单个模型,而无需编写重复的代码。
什么是Ruby中的字符串插值?
字符串插值是在字符串对象中添加引用其他值的占位符。使用加法运算符是插入值的最简单方法。
考虑以下示例:
name = “Titus”
puts “Hello ” + name
输出将为:
Hello Titus
什么是对象关系模型(ORM)?
ORM是数据库和面向对象程序之间的桥梁。在Rails中,对象关系指的是将类映射到数据库中的表。
解释Rails迁移
迁移帮助开发人员方便地对数据库模式进行更改。开发人员可以在受控环境中管理数据库模式的发布和回滚。这种方法可以避免管理单独的SQL脚本来定义更改。
解释Rails中的命名约定
– 类和模块:使用MixedCase但无下划线。类和模块中的名称以大写字母开头。
– 数据库表:数据库表的名称应为复数和蛇形命名。
– 变量:声明变量的字母应为小写和蛇形命名,用下划线分隔它们。
– 模型:使用MixedCase来指定模型,并确保名称为单数形式。
– 控制器:控制器名称为复数形式。
字符串和文本在Rails中的区别是什么?
:string适用于存储最多255个字符的短文本。可以在名称、用户名、电子邮件、密码和标题等方面使用它。
:text适用于长描述。博客文章的评论或商店描述的完美例子。
解释跨站请求伪造(CSRF)
跨站请求伪造(CSRF)是一种在线攻击,攻击者利用受身份验证的用户代表其执行某些操作。
Rails要求开发人员向ApplicationController中添加“protect_from_forgery”以避免CSRF攻击。应用程序始终需要CSRF令牌来验证用户。
解释Rails中的mixin是什么
一个mixin提供了一种受控的方式来向类中添加功能。一个类由许多不同的mixin组成。使用mixin可以避免使用多重继承。
在Ruby中load和require的用途是什么?
require()用于导入库/宝石
load()用于执行一段代码块
在Ruby on Rails中,回调和观察者有什么区别?
Rails观察者用于当一个方法与对象的生命周期没有直接关联时。它们的生命周期很长,可以在任何时候附加或分离。
回调只能在对象的生命周期的特定实例调用。这些实例的示例包括更新、创建和验证。回调只在短时间内生效。
Ruby中的Harnesses和Fixtures是什么?
Fixtures是指一种组织要测试的数据的方式。它们可以在以.yml为扩展名的文件中创建。
Harnesses是运行Rails测试的环境或测试运行器。Fixtures是在Harnesses中设置的。
extend和include有什么区别?
“Include”将一个实例方法添加到一个类中。因此,通过类方法可以访问该代码。
“Extend”将模块中定义的实例方法添加到扩展的类中。
Ruby中的gems和plugins是一样的吗?
Gems是打包的Ruby应用程序,需要进行安装。它们是通用的,并且不依赖于Rails的功能。
Ruby on Rails中的插件是与您的Rails应用程序一起部署的。它们修改或添加了Rails的核心功能。
什么是rail observers?
Rails观察者提供了一种机制,其中一个对象在其状态更改时通知其他对象。它适用于一对多的关系,这样当一个对象更改时,所有依赖对象都会被通知并自动更改。
用于创建迁移的命令是什么?
bin/rails db:migrate
展示如何在Ruby中定义类变量、实例变量和全局变量
- 类变量:可以在其类的任何地方使用。类的派生类也可以访问它们。它们以@@开头。
- 实例变量:用于特定于创建的对象实例的本地作用域中。它们可能因对象而异。它们以@开头。
- 全局变量:在程序的任何地方都可以访问。以$开头。
Ruby演示目录中的Rakefile扮演什么角色?
Rakefile有助于测试和打包Rails代码。该文件定义了执行测试或演示应用程序功能的任务。
Rails中的sweeper是什么?
Sweeper在缓存中充当终止者。它们同时充当半过滤器和半观察者,并为这两个角色实现了回调。”expire_cache”查找需要过期并清除的所有缓存片段。
过滤器是什么?
这些是在控制器执行操作之前或之后的方法。这样的方法是继承的,并且只要在ApplicationController中设置它们,它们就会在您的应用程序接收到的每个请求中运行。
在Rails中区分重定向和渲染
渲染用于渲染模板,然后将其作为响应发送给客户端。此模板然后生成浏览器将显示的页面。
重定向:发送新的HTTP请求到不同的URL。这个动作将客户端重定向到不同的控制器或动作。当您想要更改浏览器上客户端看到的URL时,此方法非常有用。
调用super()和super call之间的区别
- Super:发送消息给当前对象的父对象,以调用所调用方法的所有参数。
- super():不向父对象发送任何参数。
Procs和Blocks之间的区别是什么?
- Blocks:由do/end语句或花括号括起来的代码片段。每次调用方法时都会创建和执行它们。
- Procs:将代码块绑定到一组局部变量。可以在不同的上下文中调用此代码,并仍然可以访问这些变量。
puts和print语句之间的区别是什么?
当我们想在屏幕上打印一些内容时,我们使用puts。例如,
puts "Hello World!!!"
将Hello World!!!打印到屏幕上。
当我们不想在控制台上添加新行时,我们使用print。
print "Hello World!!!"
输出Hello World!!!,但不会在控制台上添加新行。
什么是动态查找器?
动态查找器允许开发人员在不使用原始SQL查询的情况下搜索其数据库中的记录。它们使用find_by_
关键字,然后跟随要搜索的属性。
解释Rails如何实现ajax
- 触发器(例如提交表单或点击按钮)被初始化。
- 将触发器数据发送到服务器中的处理程序。
- 服务器端处理程序处理数据并将HTML发送到Web客户端。
- 客户端的JavaScript处理程序接收HTML内容并更新当前页面。
解释Dig、Float和Max
- 使用Dig方法,您可以从嵌套的哈希或数组中提取值。
- Float是表示具有浮点精度的实数的Ruby数据类型。
- Max是可与数组和哈希一起使用的方法。它返回集合中的最大值。
array = [2, 9, 4, 7, 3]
maximum = array.max
控制台将输出9,因为它是最大的数字。
结论
以上是您在下一个Ruby on Rails面试中可能会遇到的一些问题。如果您是一个全面发展的软件工程师,请检查这些链接。在参加下一个面试之前,请确保您了解Rails工程师的工作描述。