#5 楼 @towonzhou C 是比 B 低还是高?可以改成使用 [category, number]
二元组来排序,地下层就取负数
#77 楼 @astaxie
#78 楼 我还是说清楚点... gcc 编译器 -O2
的优化程度一般般,你可以试试 -O3
, 如果是 clang 还可以 -O4
. -Og
的意思是加入了调试符号,作用是让编译出来的 C 程序跑得更慢点。
C / ObjC / C++ 程序员基本不会上 Go 这条船的:没有动态加载能力,没有 macro, 没有 generic type, 没有 typed exception, 不支持手动内存管理,欠缺抽象能力,没有消息 dispatch 能力,不支持函数式的 idiom, 代码里面大量 if (err != nil)
, 编译器做不了跨 obj file 分析,运行时能力太弱,GC 太挫,缺少丰富的 literal 语法... Go 代码其实是很底层的,直接 1:1 映射到 assembler, 比起 C 的唯一优势是有字符串...
sort_by {|f| f.start_with?('B') ? -f[1..-1].to_i : f.to_i}
#21 楼 @astaxie 准确点说,是这个框架没有签名 cookie 支持,如果用了这个框架,cookie 就应该只用来存 session identifier 和存与用户身份不相干的信息。使用时如果不知道这一点就很危险。另外就是你的 sessionid 不支持 secure (https only) 的设定,利用 dns 污染进行 session hijack 也是可能的,不适合用来做电子商务收钱等安全性要求比较高的网站。
#29 楼 @astaxie 如果服务器跑在 nginx 后面,通过 tcp 连接信息得来的 ip 都是同样的,如果用户用了代理,看到的 remote ip 都是同样的。按照你的计算方式,相同 ip, 同一时间的请求,就会存在 csrf token 撞车的情况。然后攻击者使用某个流行的 proxy 去访问你的网站来获取一个 token, 那么通过这个 proxy 的用户都有比较大的机会和攻击者的 token 撞车,攻击者在他的伪造表单里自动更新这个 token 坐等鱼上钩。你最后就只能寄希望在 nanotime 上了...
解决很简单,增加一段随机字符串即可。
最后,因为你没有防止篡改 cookie 的手段,你的 csrf 不该放 cookie 而应该存在 session store 里 (你的情况就是 文件/数据库/redis/内存了), 或者继续把 csrf 放 cookie 里,把签名附上也可以。
要挑刺是还可以给你提很多 issue 的 (flash 写成 falsh 就不提了...) ...
https://github.com/astaxie/beego/blob/master/session/session.go 都是服务器端 session, 没找到签名 session 啊
关于 csrf https://github.com/astaxie/beego/blob/master/controller.go#L307 token 的生成方法是 sha1(key + ip : nanotime) : nanotime 对吧?不直接用随机字符串的话 总是存在可预测的隐患的。
c 和 go 的对比代码是两年前的... https://github.com/luikore/performance_evaluation/tree/master/chello 现在 go 比那时快很多了,但别忘了现在 clang 都能开 -O4
了
测的太 hello world 了 你可以模板里加些拼接看看
还有就是 beego 很多地方都在偷工减料... 例如 cookie session 里根本就没签名,作者好像没理解 CSRF 在里面用了固定字符串...
(我测过 C 比 go 快 10 倍左右...)
后缀语法一览:
r
有理数i
虚数f
frozen string由于现在可以用有理数和虚数字面量,就不推荐 require 'mathn'
了,没必要而且会影响特化指令的速度
def
返回 symbol 超赞,现在可以这样写了 (DRY, explicit, 少个 closure 三者兼得):
before_filter def require_login
...
end
或者这样写 (python decorator style):
before_filter \
def require_login
...
end
然后访问 modifier 可以这么写:
private def _foo
...
end
特化 attr_reader 但不特化 attr_writer 可以这么写
attr_writer def foo
@foo ||= 'foo'
end
btw 关于这个 ||=
matz 有个 proposal ONCE{}
但不确定要不要加
爱怎么玩怎么玩...
{
def foo
end => def bar
end
}
用粘滞键把 ctrl/cmd 卡住就默认新标签页了
ruby 不需要接口规范,只需要 API -- 因为支持传 block
我觉得和 gemset 应该无关吧,rbenv 应该也可以 bundle install -j8
我发现喜欢就是设计用来 +分 的,想要以后能找到,需要收藏
你是想怎么整? @user
可以自动完成,还是被 @
的人可以看到提醒?