马太效应的牺牲品
其实就是污染当前的作用域,
本来你的作用域里面只有这几行代码,定义了哪些变量,清清楚楚,但是你 load 了以后相当于在这个作用域了多了几行代码,结果就是,你 load 里面定了一个方法,和这个作用域里的方法重名了,导致某些变量和预期不一致,比如本来应该继承来的方法,有可能被 load 进来的方法名给覆盖了
语言只是工具,你随便招一个愿意转的让他转 ruby 就好了,毕竟大部分招 ruby 开发的岗位 其实招的的是并不是 ruby 开发 而是 ruby 使用者
https://3cwork.com/discussions/12759 下给了 薪资范围为:8k-15k
知道怎么 自动给 PR 添加标签吗,我看到有自动给 issue 添加 label 的,但是不知道 PR 行不行
写了个 benchmark,如果只判断存在的话 present 最慢。 判断完存在还要做别的事的话,present? 其实是最快的。因为 exists any 需要额外 hit 数据库,所以 present 基本上好用一些,只判断存在性而不做其他操作的情况很少。
Benchmark.ips do |x|
x.report("present?") do
10000.times do
obj = Employee.where.not(deleted_at: nil)
obj.present?
end
end
x.report("any?") do
10000.times do
obj = Employee.where.not(deleted_at: nil)
obj.any?
end
end
x.report("exists?") do
10000.times do
obj = Employee.where.not(deleted_at: nil)
obj.exists?
end
end
x.report("present? and pluck id") do
10000.times do
obj = Employee.where.not(deleted_at: nil)
obj.present?
obj.pluck(:id)
end
end
x.report("any? and pluck id") do
10000.times do
obj = Employee.where.not(deleted_at: nil)
obj.any?
obj.pluck(:id)
end
end
x.report("exists? and pluck id") do
10000.times do
obj = Employee.where.not(deleted_at: nil)
obj.exists?
obj.pluck(:id)
end
end
x.compare!
end
Error starting userland proxy: listen tcp 0.0.0.0:80: bind: address already in use 看样子你本机的 80 端口已经被别的服务给占用了
投了简历 没有回应,感觉像是雾件
ruby 最开始就是 matz 自己玩的语言,被别人拿来做生产工具 他也没想到
那个 是 In deamand 不是需求量大,而是岗位少,做的人更少的必然结果,要说流行,国内 golang 怎么也不可能超过 java php 的
真讨厌,付费 + 邀请好友,我既没有钱,也没有朋友
问一下 ruby 的工作是全栈 还是前后端分离的
我差点以为是招聘帖,白激动了一下午
签合同是和哪个单位签
假设你有一个 children 方法,可以返回当前节点的所有子节点
def descendants
children.each_with_object(children.to_a) {|child, arr|
arr.concat child.descendants
}.uniq
end
# 假设当前借点是root 调用方法就是 root.descendants,这里返回的对象是AR数组,所以可以继续调用rails的方法
其实这里你没有必要自己做 有一个 gem acts_as_tree 帮你做这个功能
或者你觉得在内存里面做这个不是很效率,如果你用的是 PGSQL 的话,也可以直接用 WITH RECURSIVE 方法来把查询的事交给数据库去做
#
def descendants(*fields)
subfields = fields.map { |e| "tablename.#{e}" }
ApplicationRecord.connection.execute("
WITH RECURSIVE descendants(#{fields.join(',')}) AS (
SELECT #{fields.join(',')} FROM tablename WHERE id = #{id}
UNION
SELECT #{subfields.join(',')} FROM tablename JOIN descendants ON tablename.parent_id = descendants.id
)
SELECT * FROM descendants;
")
end
# 传入的参数是你需要返回的字段,假设你用parent_id 去表示你的employee 的父子关系 ,这个方法返回的数组,所以不能调用rails的方法
规范主要是为了风格统一,让后来的人能够更轻易的理解代码,所以一套项目里面只要一套规范就好了,
按天领,黑的漂亮啊,难道工资是日结的吗
def itoa(num)
arr = (1...2*num).map do |e|
i = e > num ? 2 * num - e : e
end
arr.shift
arr.cycle
end
arrr = itoa 5
counter = 0
str = "*"
puts str
loop do
counter += 1
puts str * arrr.next
break if counter == 20
end
str = '*
**
***
****
*****
****
***
**
*
'
puts str
拿去用吧,清晰明了。绝对不存在看不懂的问题
to_s = lambda { |x| x + 1}
b = [1,2,3].map(&to_s)
p b
因为 A 开头的单词会排在列表前面
不行,下划线在 ruby 里面代替可被忽略的参数,用来让你的代码更具有可读性 但是你可以
[1,2,3].map {|_| _+1}
[1,2,3].map(&:to_s)
不加班的公司配不上我
http://www.10tiao.com/html/262/201707/2651375318/1.html 你看看这个,国外的程序员工资做的统计,结果一样是不喜欢跳槽的员工 工资相对于喜欢跳槽的员工的工资的一半
如果能完美的代替 C++ go 肯定能火起来的,可惜 GO 在一些很底层的地方,没有进行足够的抽象。好处是你上手的,你开发的很快。但是当你成为一个老手,你的开发速度和刚开始的时候,生成的还是一样快
跳槽加薪快,是因为程序员会成长,工作内容在老板眼里却没有变化。大部分老板觉得不主动给员工加薪是最符合团队利益的,团队里面工资是有一个结构,加薪的话,要维持结构稳定,大多数调整是全部都加。员工不提加薪,老板就是纯赚的。员工主动离开岗位,老板再招一个,那增加的成本也只是单个人的成本而不是整个公司运营的成本
招人哪有那么困难,两个月都招不到人,多半是老板仗着自己懂点技术所以看不起面试者的工作内容,心里想法“不就是干个啥啥啥 的怎么还要那么多钱”,结果钱少活多别人才不愿意来啊,愿意来的又通不过你们老板考核,所以才 2 个月都招不到人。 你女朋友也是啥都不懂,别人都不愿意去做,就让你去,这不是为了自己工作顺心,把男友往火坑里推么。我觉得她智商有问题,估计结婚以后也不会少坑你
-1 以后就和下标一样了 读起来更容易懂
拆数组的时候根本没有用到数组元素
(0..a.size-1).map { |index| a[0,index+1].join("/")}
以此贴为例 1713 次阅读,23 次回复。 说明什么?说明根本不存在“一般”找喷点先喷为敬,事实是一般人都是看完默默的撤。沉默的是大多数,回帖的才是特殊情况。
所谓杠精很多是幸存者偏差导致的的错误认知,大家都懒得理你才是冰冷现实里的残酷真相。
在这样一个比例下面,即使某些人回帖喷楼主,也不能证明他就是杠精。因为作为读者,每个人的视角都不一样的,
一部《红楼梦》,经学家看见'易',道学家看见淫,才子看见缠绵,革命家看见排满
很可能别人恰好看到你的错误,而你却因为他没看到你对的地方觉得就觉得他是杠精。
回帖动机是一个更重要的原因,在网络这个匿名的地方,喷人的代价和现实中相比微乎其微,而捧臭脚的好处也变得微乎其微,你可能觉得为什么网络上会有这么多人和你看法不一致,其实现实中也基本是这个比例,不过当你面对面交流的时候,别人如果不同意你,更多情况的时候倾向于敷衍你