你要知道更好的,就写下来。
@ywjno 完整的代码我贴出来了,你看看有没有问题? (根据 https://ruby-china.org/topics/40526#reply-364233 做了更改)
import org.nutz.*;
import xxx.xxx.models.Shop;
import java.util.*;
@Inject // nutz 自带注解,不依赖 spring
Dao dao
List<Shop> shops = dao.query(Shop.class, Cnd.orderBy().desc("shopName"), new Pager(1, 20));
RoR + kaminari
shops = Shop.page(1).per(20).order(shop_name: :DESC)
还有这个 name DESC 最好用一个常量
ruby 用 keyword。
var 是 Java 10 出来的东西,差 4 个月就是 3 年前的出的版本,难道你写 ruby 现在还在用快 3 年前的版本么
工业界,多数的项目,都是用 java 8 吧? https://www.jrebel.com/blog/2020-java-technology-report
我们先单独比较一下代码
RoR + kaminari
shops = Shop.page(1).per(20).order('name DESC')
var shops = dao.query(Shop.class, Cnd.orderBy().desc("shopName"), new Pager(1, 20));
另外,除了代码,还要 import 依赖,Dao,Shop,Cnd,Pager。dao 还要 Autowired 一下,这个 "shopName" 最好用一个常量。
另外 var 是 java 11 的语法吧?现在绝大多数都用的是 8 吧?或者你用的是 kotlin?
就是最简单的分页就行,既然容易,辛苦给一下代码?
如果用到插件,说一下插件是什么?如果是自己写,贴一下插件的代码?
大家还是拿代码说话。
既然 java、spring 这么棒。
写个分页查询吧,再写一下,如果解决 n + 1 问题吧。
用什么 orm 都行。
估计就是脚手架之类的。。。ror 的脚手架,都没人在生产环境用。。。java 生成一坨,更没法看了。。。
有的人认为 java 开发 web 更高效,比 ror 高效。但如果真问他们一个具体问题怎么处理,他们会说,spring boot 是解决依赖的,不解决这个。。。然后他们依然觉得 java 更适合开发 web。。。
反正就是不跟你说具体问题。。。
找家好一点的公司实习吧,没必要学 web 框架这么具体的技术。
对于本科生,会 Laravel,再学 RoR 的意义不太大了。除非对 RoR 的设计感兴趣。就是重要的不是怎么做,而是背后的原理。
教材推荐 SaaS 软件工程:云计算时代的敏捷开发,或者 cs169。
最后,计算机有很多有趣的东西,web 开发,只是这些有趣的东西的一小部分。
说以说,RoR 不行!RoR 6 个人搞一个项目,人家几十个人搞,你们吵架也吵不过,打架也打不过,ppt 也写不过人家。
恩,是的
其实这个场景,比较合适的是 compare and set,设置之前,先查,之后掉 comap and set,失败了就重试,好处就是实现简单。
或者那个服务把查询请求代理到我这。
恩,是这样的。改数据的时候,数据库,要知道两次操作的先后顺序。
比如 put(a, 1) 和 put(a, 1) 这两个操作发生的先后顺序。
如果这两个请求先后发送到两个服务器上个,server0,server1。
如果 server1 的时间比 server0 慢的话,用时间戳的话,顺序可能就反了,数据就是错的。
服务器之间需要 ntp 之类的协议同步时间,这个是不准的,有可能会差 100ms(只是打比方)之类的,还不考虑时间配错了之类的。
具体的可以看,设计数据密集型应用 里有关于时间戳的说明。
简单来说,就是分布式场景下,使用时间戳,作为顺序是不可靠的。
首先,是人家怎么看的问题 大家可能对后端的理解不一样,或者 hr 不是很理解 RoR 的工作方式。可能工作内容 ok,但别人没理解。面试什么,主要还是面试官说的算。。。
然后分布式个人经验来说,这个还是有用的。 我们被分布式数据库坑了两次,最后是了解了实现,才解掉。 不久前才刚跟同事扯时间戳没有办法保证时序(起因是我需要调用他的服务,我的业务需要有时序保证,他建议用时间戳,我跟他解释说时间戳帮助不大)。
分布式会影响思考和解决问题的方式。想说的是有影响,但有没有意义,是不是好的影响,这就要看情况了。
我们招聘对分布式没硬性要求,问到的情况也不多。
Goroutine 用的是 M:N 这个线程模型,可搜到很多介绍比如这个 User-level threads....... with threads. - Paul Turner - Google
为啥不直接用线程做并发(1:1)?因为线程切换不够高效,可以参考下这个 Measuring context switching and memory overheads for Linux threads。
一个线程只能利用一个 cpu,这个是没错的。但更重要的是,一个线程(scheduler)要跑多个 Goroutine。
1000 每秒的话,2 核 4g 这配置,es 感觉扛不住。
传说中,一个人搞定了整整一个团队的活。
哈尔滨吗?
我要努力向 Dylan 大佬看齐
好的 👌
好呀
哈哈哈,下周咋样?这周在外面
这不是想给 Martin 哥当马仔做准备吗
短链转长链,用 ws 渲染?不知道 ActionCable 性能抗的住不。
在看这个的时候,conscrypt 内存又泄露了。https://github.com/google/conscrypt/issues/835
之前漏了一次,感觉修了有一年,刚修好,又漏了。这次好在漏的比较慢。
之前 fastjson 有安全漏洞,修了 n 次。
google 的 package 有内存泄露,修了一年,没修干净。 阿里的 package 有安全问题,修了 4、5 次了,也不知道完全修好没。
然后大家都认为,java 工业化做的特别好。
感谢,已更新。
这家公司,据我所知,在广州 ruby 圈,口碑非常好。
他们用 ruby 非常早,一定程度上可以说是他们把 ruby 带到了广州。
记得在广州,茶余饭后,大家时不时会说起武师傅的传闻
声明: 以上仅个人看法,有些也是听说的,也有夸张的成分,大家要是感兴趣,还是具体了解一下比较好。
招聘一定程度也是开发者面试公司。
我消化下,感谢。
感觉第二种应该就没办法了
感谢分享,
想请教楼主一个问题:
redis 多线程了,那单个 client 的请求,redis 还能保证处理和返回的时序性吗?
就是同一个 client,发给 redis 指令顺序是什么,redis 处理的书序就应该是什么,并且以同样的顺序返回。
我在 Stack Overflow 上也问了,不过没人回我 https://stackoverflow.com/questions/62097897/will-redis-6-guarantee-client-requests-order
换个技术栈啊,比如 Go、Java 啥的。RoR 很多好玩的东西都没得玩。
信炮哥,无 bug
鉴于 Ruby GIL 的机制,上面的情况,同一个进程内,如果有重的耗费 CPU 的动作执行期间,可能会导致这段期间这个进程无法响应普通的 HTTP 请求,从而堵塞正常的 Web 服务。
这个地方没太看明白,想请教一下。
看 无人知晓的 GIL 里说,
Ruby 有一个 time thread,会给其他线程标记中断,被标记中断的线程,在执行完一个方法的时候,会调用 vm_call0_body
这个方法,如果有被中断,就会让给其他人执行。
我理解像 +
执行完,都会执行 vm_call0_body
这个方法。如果一个线程想一直占着 CPU 的话,除非是调用 C 方法。
不过也有一种情况,有多个后台任务在执行,打满线程池,就会堵塞正常的 Web 服务。