• 111 at November 03, 2020

    你要知道更好的,就写下来。

  • 111 at November 03, 2020

    @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

  • 111 at November 03, 2020

    我们先单独比较一下代码

    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?

  • 111 at November 03, 2020

    就是最简单的分页就行,既然容易,辛苦给一下代码?

    如果用到插件,说一下插件是什么?如果是自己写,贴一下插件的代码?

    大家还是拿代码说话。

  • 111 at November 02, 2020

    既然 java、spring 这么棒。

    写个分页查询吧,再写一下,如果解决 n + 1 问题吧。

    用什么 orm 都行。

  • 111 at November 02, 2020

    估计就是脚手架之类的。。。ror 的脚手架,都没人在生产环境用。。。java 生成一坨,更没法看了。。。

    有的人认为 java 开发 web 更高效,比 ror 高效。但如果真问他们一个具体问题怎么处理,他们会说,spring boot 是解决依赖的,不解决这个。。。然后他们依然觉得 java 更适合开发 web。。。

    反正就是不跟你说具体问题。。。

  • 新手应该如何学习 Rails at November 01, 2020

    找家好一点的公司实习吧,没必要学 web 框架这么具体的技术。

    对于本科生,会 Laravel,再学 RoR 的意义不太大了。除非对 RoR 的设计感兴趣。就是重要的不是怎么做,而是背后的原理。

    教材推荐 SaaS 软件工程:云计算时代的敏捷开发,或者 cs169

    最后,计算机有很多有趣的东西,web 开发,只是这些有趣的东西的一小部分。

  • 111 at October 31, 2020

    说以说,RoR 不行!RoR 6 个人搞一个项目,人家几十个人搞,你们吵架也吵不过,打架也打不过,ppt 也写不过人家。

  • Ruby on Rails 工程师去大厂 at October 26, 2020

    恩,是的 👍

    其实这个场景,比较合适的是 compare and set,设置之前,先查,之后掉 comap and set,失败了就重试,好处就是实现简单。

    或者那个服务把查询请求代理到我这。

  • Ruby on Rails 工程师去大厂 at October 25, 2020

    恩,是这样的。改数据的时候,数据库,要知道两次操作的先后顺序。

    比如 put(a, 1) 和 put(a, 1) 这两个操作发生的先后顺序。

    如果这两个请求先后发送到两个服务器上个,server0,server1。

    如果 server1 的时间比 server0 慢的话,用时间戳的话,顺序可能就反了,数据就是错的。

    服务器之间需要 ntp 之类的协议同步时间,这个是不准的,有可能会差 100ms(只是打比方)之类的,还不考虑时间配错了之类的。

    具体的可以看,设计数据密集型应用 里有关于时间戳的说明。

    简单来说,就是分布式场景下,使用时间戳,作为顺序是不可靠的。

  • Ruby on Rails 工程师去大厂 at October 20, 2020
    1. 首先,是人家怎么看的问题 大家可能对后端的理解不一样,或者 hr 不是很理解 RoR 的工作方式。可能工作内容 ok,但别人没理解。面试什么,主要还是面试官说的算。。。

    2. 然后分布式个人经验来说,这个还是有用的。 我们被分布式数据库坑了两次,最后是了解了实现,才解掉。 不久前才刚跟同事扯时间戳没有办法保证时序(起因是我需要调用他的服务,我的业务需要有时序保证,他建议用时间戳,我跟他解释说时间戳帮助不大)。

      分布式会影响思考和解决问题的方式。想说的是有影响,但有没有意义,是不是好的影响,这就要看情况了。

      我们招聘对分布式没硬性要求,问到的情况也不多。

  • 尝试使用 Ruby 3 调度器 at October 18, 2020

    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 感觉扛不住。

  • 传说中,一个人搞定了整整一个团队的活。

  • 哈尔滨吗?

  • 编程学习指北 at September 05, 2020

    我要努力向 Dylan 大佬看齐

  • 编程学习指北 at September 01, 2020

    好的 👌

  • 编程学习指北 at August 31, 2020

    好呀

  • 编程学习指北 at August 31, 2020

    哈哈哈,下周咋样?这周在外面😂

  • 编程学习指北 at August 31, 2020

    这不是想给 Martin 哥当马仔做准备吗🤓

  • 短链转长链,用 ws 渲染?不知道 ActionCable 性能抗的住不。

  • 在看这个的时候,conscrypt 内存又泄露了。https://github.com/google/conscrypt/issues/835

    之前漏了一次,感觉修了有一年,刚修好,又漏了。这次好在漏的比较慢。

    之前 fastjson 有安全漏洞,修了 n 次。

    google 的 package 有内存泄露,修了一年,没修干净。 阿里的 package 有安全问题,修了 4、5 次了,也不知道完全修好没。

    然后大家都认为,java 工业化做的特别好。

  • Raft 笔记 at June 26, 2020

    感谢,已更新。

  • 这家公司,据我所知,在广州 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 服务。