#10 楼 @zj0713001 这种函数肯定是三元表达式最好。 arg < 0 ? 0 : arg
count(1) 单次查询肯定是不能代表平均查询时间的
实际是,count(1) 单次查询是根本不能代表查询时间的。因为平日里很少很少会去查 count(1)。你用 count(1) 来做性能评判标准毫无意义。你自己想想,你写的应用里,用过多少次 count(1)?
至于你关于查询 b 的疑问,我为你谷歌了一下,解释如下: (其实 #11 楼 已经贴了,我补全一下
possible_keys 表示搜索可能用到的索引,key 表示实际选用的索引。 有一种可能是 possible_keys 为空,但是 key 不为空的情况。 这种情况下说明 mysql 无法利用索引来搜索数据,但是返回的列却是某个索引的一部分,因此可以用覆盖索引的方式优化全表扫描。 这里你 idx 包含了 p_s 和 u_t,而返回的列是 id 和 p_s,乍一眼看上去并不包含。 然而后面还有解释一句:如果你恰好用的是 InnoDB,那么索引会默认包含主键,也就是说你的索引实际上就是一个 id+p_s+u_t 的索引,完全包含了你的返回值 id+p_s,因此适用于覆盖索引的条件,也就是为什么最后 mysql 会选这个索引的原因了。
希望能帮到你。 http://dev.mysql.com/doc/refman/5.6/en/explain-output.html#explain_key
Rails 的精髓就是:能多用第三方组件的,绝对不要自己写。 回到主题。用 memcache 不是挺简单么,登录失败的时候检查 memcache 对应的值,如果没有就加上次数,如果有就更新次数。把键设置成 10 分钟过期就好了,10 分钟以后键自己消失了也就能再次登录了。
C/C++ 的块是 Scope Ruby 的块是 Block 不是一个东西。
Ruby 的 Block,根据松本菊苣的说法,更类似于匿名函数,也就是类似于 C++ 里的 lambda 表达式。 例如:
a.each { |x| puts x }
相当于
for_each(begin(a), end(a), [](char* s) { puts(s); });
Ruby 的对应语法,begin...end
,是不会像 C/C++ 那样打开新的 scope 的。
另外,花括号引出的代码会被解析成 Hash,而不是块,所以这里会报语法错误。
最后,Ruby 不提倡把方法写得很长。超过 20 行一般就要考虑拆分了。
顺便贴一下之前楼上的帖子 https://ruby-china.org/topics/26097
#45 楼 @douxiance 年轻人…… 我已经老了么 orz
好像用 Windows 开发 Rails 的人好少啊……
是需要多个线程/进程同时工作才行。 话说 Thin 是个 App Server 吧,不能当 Front Web Server 来用的吧?
3.2 的 2B 解
def first_missing_positive(nums)
tail = {}
nums.each do |v|
next if v <= 0
next if tail[v]
tail[v] = v
if tail[v-1]
tail[v] = tail[v-1]
tail[tail[v]] = v
end
if tail[v+1]
last = tail[v+1]
tail[last] = tail[v]
tail[tail[v]] = last
end
end
tail[1] ? tail[1]+1 : 1
end
拿了 80ms
3.1 的正常解
def majority_element(nums)
cnt = 0
num = nums.first
nums.each do |n|
next cnt += 1 if n == num
cnt -= 1
cnt, num = 1, n if cnt < 0
end
num
end
拿了 88ms,好像并不算太慢。如果输入数据量很大的话排序可能会比遍历慢。
就算是修改初始化数据而要重载 web server,我这感觉也就 2、3 秒的样子啊?
#7 楼 @blacktulip ?!
与 if-else 的要求应该是一样的。
只要能转换成 true / false 的都可以。
(Ruby 里应该所有的东西都能转布尔吧)
额,有多慢?
Ruby 的优点就是把珍贵的人工时间移交给电脑。 能花 1000 美金解决的电脑配置问题,绝对不要用 70000 美金来解决人工不够的问题。
所以要有 staging server。 大量锁表就老老实实停站维护咯,放在半夜没人的时候部署就行了,预告下停个十几分钟。
说了一大堆,问题在哪?要我们看什么?
先设计好表结构,再考虑代码。
#7 楼 @robot_zhang 哦哦没注意,原来是 namespace 与 model 冲突。 话说这是应该用 namespace 的场景么?不是 nested resource? 如果是 namespace 的话的确只能改 namespace 名了。 比如 MyShop::Settings 这样。 Shop/X/Account/Y的话感觉应该用nested resource。
#5 楼 @robot_zhang 搜索替换就行了。App 名出现的地方不多的。
#3 楼 @robot_zhang 其实道理也很简单。 因为他们都是常量。
应该就是你的 model class name 与顶层 namespace 冲突了。 所以结论就是不要把整个 App 命名成和某个 model 一样。
因为 133.3 和 0.1 在二进制下无法精确表示,计算时就会产生细小的误差。
client 应该是不会被 GC 的,毕竟在用。