100道Rails考试题

1、Cache 有哪几种?Page caching 如果有类似这样的code Welcome <%= username %> 第一次登录的人是render的,然后cache了,第二个人登录了,那不是直接读cache,页面就是跟前一个人一样的了?怎么回事?
解法:
页面、动作、片段缓存,Rails默认提供了片段缓存,如果想使用页面缓存或动作缓存,要把actionpack-page_caching或actionpack-action_caching添加到Gemfile中。

2、安全问题。怎么破 XSS 和 CSRF攻击
解法:
对于XSS:首先说说什么是XSS(Cross-site scripting),跨站脚本攻击,攻击者在客户端注入可执行代码。
对策:
过滤恶意输入非常重要,但是转义 Web 应用的输出同样也很重要。
过滤恶意输入白名单比黑名单要有效,特别是在需要显示未经过滤的用户输入时(例如前面提到的的搜索表单的例子)。使用 escapeHTML() 方法(或其别名 h() 方法),把 HTML 中的字符 &、"、< 和 > 替换为对应的转义字符 &、"、< 和 >。

对于CSRF:Cross Site Request Forgery,跨站请求伪造。通俗理解:攻击者盗用当前用户身份,发请当前用户的恶意请求:如邮件,银行转账等。

对策:首先,根据 W3C 的要求,应该适当地使用 GET 和 POST HTTP 方法。其次,在非 GET 请求中使用安全令牌(security token)可以防止应用受到 CSRF 攻击。

3、遇到网站很慢,怎么调试1. 假如code是对的 2. 假如是code可以优化,怎么找
4、验证电子邮件格式
/^[a-zA-Z0-9._-]+@[a-zA-Z0-9-]+.[a-zA-Z.]{2,5}/

5、resources :users 会创建哪些路由
users/index
users/new
users/edit
users/create
users/update
users/destroy

6、已知str=”abcdef”, str[0]=? ?如何输出字符“a”
str.split(//).first

7、 [‘a1′,’a3′,’a2′,’a5′,’a4′,’a10′].sort=?
["a1", "a10", "a2", "a3", "a5"]

8、如何为一个已存在的类添加实例方法和类方法

9、require, load,autoload和require_dependency的区别是什么

  • require
module Log 
  def class_type
    "This class is of type: #{self.class}"
  end
end

class TestClass 
  include Log 
end

tc = TestClass.new.class_type
puts tc #This class is of type: TestClass
  • load
module Log
  def class_type
    "This class is of type: #{self.class}"
  end
end

class TestClass
  extend Log
  # ...
end

tc = TestClass.class_type
puts tc  # This class is of type: TestClass
  • Require
    Require 方法允许你载入一个库并且会阻止你加载多次。当你使用 require 重复加载同一个library时,require方法 将会返回 false。当你要载入的库在不同的文件时才能使用 require 方法。下例将演示 require 的使用方式。
    文件 test_library.rb 和 test_require.rb 在同一个目录下。
# test_library.rb
puts " load this libary "
# test_require.rb
puts (require './test_library')
puts (require './test_library')
puts (require './test_library')
# 结果为
#  load this libary 
# true
# false
# false

10、如何根据URL获取rails项目的controller和action
11、User.find(10) 和 User.find_by_id(10)的区别。
find_by_id找出第一条记录

12、user = User.first; user.name = ‘wangwei’, 如何查看user name被设置为’wangwei’之前的值。

13、”中国 2013″.size= ”中国 2013″.bytesize=?
size 字符数
bytesize 字节数

14、yield self 的用法, 写个例子
所有的"方法(methods)"隐式跟上一个"块(block)"参数。

块参数也可以明确给定,形式就是在参数前面加一个"&",比如 def fn(arg1, arg2, &block) end,其中的 &block 就是明确给定的块参数。

块参数的动作,可以通过调用 call() 方法执行,还可以用 yield 来执行 —— yield 其实就是一个语法糖。

所以以下几种写法常常是等价的:

#method receives an invisible block argument
def foo1()
    yield 1
end

#specify it explicitly
def foo2(&block)
    yield 1
end

#yield is equal to block.call
def foo3(&block)
    block.call(1)    
end

#function call
foo1 {|x| puts x}    # => 1
foo2 {|x| puts x}    # => 1
foo3 {|x| puts x}    # => 1

15、rails 三种工作环境的区别(development, testing, and production)
开发、测试、生产

16、Rails是什么
web开发框架

  • 多约定、少配置
  • DRY

17、什么是重构?

18、Active Record是什么?
Active Record是MVC中的M(模型),负责处理数据和业务逻辑,AR负责创建和使用需要持久存入数据库中的数据。
Active Record实现了AR模式,是一种对象关系映射系统。

更新

一次更新多个属性时使用这种方法最方便,如果想批量更新多个记录,可以使用类方法update_all

User.update_all "max_login_attempts = 3, must_change_password = 'true'"

19、什么数据验证
在存入数据库之前,AR还可以验证模型,模型验证有很多方法,可以检查属性值是否不为空,是否是唯一的、没有在数据中出现过,等等。

把数据存入数据库之前进行验证是十分重要的步骤,所以调用save和update方法时会做数据验证。验证失败时返回false,此时不会对数据库做任何操作,这两个方法都有对应的爆炸方法(save!和update!)。爆炸方法要严格一些,如果验证失败,抛出ActiveRecord::RecordInvalid异常,下面举个简单的例子:

class User < ApplicationRecord
  validates :name, presence: true
end

user = User.new
user.save
user.save!

下面这个模式是什么意思?

/\A[+-]?\d+\z/

20、什么是严格验证?
还可以采用严格验证,当对象无效时抛出ActiveModel::StrictValidationFailed异常。

21、什么是条件验证?
有时,只有满足特定条件时做验证才说的通,条件可通过:if和:unless选项指定,这两个选项的值可以是符号、字符串、Proc或数组。

:if选项指定何时不做验证,使用:unless选项。

4.5 条件验证

有时,只有满足特定条件时要验证才说的通,条件可通过:if和:unless选项指定,这两个选项的值可以是符号、字符串、Proc或数组。

22、什么是自定义验证,举个例子?
如果内置的数据验证辅助方法无法满足需求,可以选择自己定义验证使用的类或方法。

4.6.1 自定义验证类
自定义的验证类继承自ActiveModel::Validator,必须实现validate方法,其参数是验证的记录,然后验证这个记录是否有效,自定义的验证类通过validates_with方法调用。

23、怎么处理验证错误,举个例子?
除了前面介绍的valid?和invalid方法之外,Rails还提供了很多方法用来处理errors集合,以及查询对象的有效性。

24、什么是Active Record回调?
ActiveModel::Errors的实例包含所有的错误,键是每个属性的名称,值是一个数组,包含错误消息字符串。

errors[]用于获取某个属性上的错误消息,返回结果是一本由属性所有错误消息字符串组成的数组,每个字符串表示一个错误消息。如果字段上没有错误,则返回空数组。

25、对象的生命周期是什么?
在Rails应用正常运作期间,对象可以是被创建、更新和删除,AR为对象的生命周期提供了钩子,使我们可以控制应用及其数据。

26、什么是条件回调?

27、什么是事务回调?
28、什么是关联回调?
29、什么是Active Record 关联

30、为什么使用关联?
31、关联的类型有哪些?
32、什么是单表继承?
33、什么是Active Record查询接口?
34、条件查询有哪些方法?
35、排序的方法有哪些?
36、怎么选择特定字段?
37、怎么选择限量和偏移量
38、怎么分组?
39、什么是having方法
40、什么是条件覆盖
41、什么是空关系
42、什么是只读对象
43、怎么在更新时锁定记录
44、怎么联结表
45、什么叫及早加载关联
46、什么是作用域?
47、什么是动态查找方法?
48、enum宏是什么,怎么用?
49、理解方法链是什么,怎么用?
50、如何检查对象是否存在?
51、怎么用EXPLAN命令
52、Rails布局和视图渲染的各组件之间如何写作?
53、如何创建响应?
54、上传文件的视图代码怎么写?
55、如何使用日期和时间的表单辅助方法?
56、什么是请求伪造防护?
57、什么是请求和响应对象?
58、什么是HTTP身份验证
59、数据流和文件下载如何做?
60、什么是日志过滤?
61、异常处理如何做?
62、如何自定义资源路由?
63、什么是非资源式路由?
64、如何加载核心扩展?
65、I18n的工作原理
66、如何发送邮件?
67、Active Job的作用
68、Rails缓存存储器是什么?
69、对条件GET请求的支持
70、缓存键是什么?

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 211,639评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,277评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,221评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,474评论 1 283
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,570评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,816评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,957评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,718评论 0 266
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,176评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,511评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,646评论 1 340
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,322评论 4 330
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,934评论 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,755评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,987评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,358评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,514评论 2 348

推荐阅读更多精彩内容

  • 一、心得体会1、今天完成了什么? Rails guide 4 170页 5个小时 重看了镐头书看了第一部分 1个小...
    柳辉阅读 353评论 0 1
  • 模型 一、Active Record 基础介绍Models,数据库持久性以及Active Record模式 Act...
    廖马儿阅读 6,507评论 0 2
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,633评论 18 139
  • 一、心得体会 1、我完成了什么? 今天主要看了Rails guides 5的Active Record的3、4、5...
    柳辉阅读 266评论 0 0
  • 一、心得体会1、今天完成了什么今天主要完成了Rails100道考试题的7道 2、今天收获了什么 Rails的缓存有...
    柳辉阅读 382评论 0 0