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、缓存键是什么?