• 请教一下 redis 报警设置在百分之 40,这感觉有点低啊,为啥不弄高点?

  • 感谢,我知道 Erlang 为了利用多核 CPU 有一系列的优化,有绑定 CPU、spin、sleep 线程之类的。但我没深入研究过 😂,对硬件了解的比较少 😂

    不过凭感觉,Ruby Actor 应该是有优化空间的。当然,能利用多核,已经是非常大的一步了。

  • 请教几个问题,还没看过 Reactor,不知道理解的对不对 😂

    这个 benchmark,要是 reactor 可以"绑定"到 cpu core 上,是可以成倍提升的?

    Ruby 在调度(Ruby Reactor 是不是直接用系统线程调度的?)reactor 的时候,其实会有,一开始 reactor1 在 cpu0 上跑,然后跑着跑着,跑到 cpu1 上了这种情况?

    而且随着 reactor/thread 的增加,这种情况会变多。

  • 一直没找到比较好的 rust 学习资料,尝试写过一个小的 project,不过后来放弃了 😂

  • Ruby 3 Fiber 变化前瞻 at 2020年11月17日

    java 有个 redis 的客户端,就是单线程 + 异步 io。

    thread 和 fiber 有不同的适用场景。fiber 没办法抢占式调度,最后还得借助系统线程。

  • 111 at 2020年11月13日

    我对我说的那些话做个总结吧。。。

    RoR 比 Java + IDE + Package 生产力更高

    那两个 query 的例子,就是为了说明,Java 没有很好的东西处理这些常见的问题。所以需要花人力解决,所以生产力不高。

    @rfactor

    还有张口闭口 IDE 提示、手写 SQL 的,这些是编程入没入门的问题吧。

    我在说生产力。。。举例能证明我的观点就够了。。。

    如果是超大型微服务的项目(业务域内核心几十个系统),我不知道现在 RoR 在这方面怎么样

    @fengkuok 是想说,这个场景下,Java 是一个选择,RoR 不一定行。

    我的回复意思是,RoR 缺少实践,可能不行。但和生产力没啥关系。

    为什么我们两个能聊下去?

    大公司(有很多内部系统的公司),你的服务要依赖很多不稳定的其他服务和代码,并且要提供稳定的服务。用 Ruby,没有相应的支持(背书),要自己搞。背后隐藏来很多奇奇怪怪的东西。

    关于楼主说的这件事

    这是楼主他们公司的事,我就是看个热闹。我不了解他们的具体情况,没发言权。

    不过可以说一点,人力成本对小公司挺重要的,大公司,人力成本就没那么重要了。

    *** 我只是说生产力问题,只针对下面这句罢了。***

    感觉像讲故事,最近用 spring boot 做了一个小项目,在 idea 强大的智能完成加持下,感觉也不比 rails 效率低多少,但静态语言带来的安全感让写代码的心智负担降低很多。

    最后,脱离场景(不了解情况)谈技术没有任何意义。

  • RoR 通过约定,降低复杂度。Spring 把复杂度都暴露给开发者了。有些 Java 的不便利,Ruby 里面就没有。

    估计要习惯一下,习惯了就好。

  • 111 at 2020年11月09日

    恩,是的。

    用不用 java 或者 spring 要看场景,每个人的认知都不一样,无关对错,个人选择罢了。

    单说 web/API 开发。

    如果是大公司,团队选择技术栈,那么我会选 java 和微服务。 如果是小公司:RoR 或者 Phoenix。 如果是个人项目:我会选 RoR。

  • 111 at 2020年11月09日

    这个是我个人的看法 😂 ,我觉得参考价值不大。。。

    不过确实没听过大公司,用 RoR 做微服务 😂

  • 111 at 2020年11月09日

    超大型微服务的项目

    我没研究过,但现在让我选的话,我不会用 RoR,因为觉得 RoR 缺少微服务方面的实践。

    RoR 搞微服务的话,需要一些探索。Java 和 Go 这种,更稳妥一些。

  • 111 at 2020年11月09日

    n + 1 这个问题,我自问自答吧。

    Java Spring 要解决这个问题,我手写 sql,同时有两个变量保存,还要把变量的关联关系对应上。。。

    大体是

    List<User> users = userMapper.findById(1024);
    List<Book> books = bookMapper.selectMutiByUserId(users);
    
    return presentUserWithBooks(users, books);
    

    (最好应该加 transaction)

    当然,这些代码并不是全部,首先是要写 selectMutiByUserId 这条 sql。

    presentUserWithBooks 也要改,要把 user 和他的 books 对应上。。。

    往快了说,我需要至少 30min。。。

    如果是 RoR,2min 搞定,测都不用测。

    user = User.includes(:books).find(1024)
    return present_user_with_books(user)
    
  • 111 at 2020年11月09日

    我主要是针对这句话

    感觉像讲故事,最近用 spring boot 做了一个小项目,在 idea 强大的智能完成加持下,感觉也不比 rails 效率低多少,但静态语言带来的安全感让写代码的心智负担降低很多

    举的例子,也是开发中比较常见的,也是想说明,RoR web/API 开发这个场景下,开发效率会高很多。

    技术栈对软件开发进度的影响,这个是另一个问题。这个问题本身想说明白就很难。比如,反复修改花费的时间这块要不要算,这个大家就有不同的理解。

    单单

    RoR web/API 开发这个场景下,开发效率比 Java Spring 高很多

    这个观点想说明白已经很难了。。。就算是有了具体例子。。。

    所以,关于“技术栈对软件开发进度的影响”,我觉得我还是保持沉默比较好。

  • 错过了。。。大佬们有没有 ppt 或者录像啥的? @xiaoronglv @luikore

    跪求

  • 111 at 2020年11月05日

    恩,是的,IDE 有很多强大的功能。

  • 111 at 2020年11月05日

    额。。。麻烦先看下前后文。

    我是说 IDE @Data 默认是不能提示的。。。路由也是。

    RoR 没 IDE,是因为多数的时候,不需要。编辑器的自定补全,差不多就够用了。

    RoR 和 IDE 的关系是,不用 IDE 大家也能很高效的写代码,但如果有更强大的补全,自然是有帮助的。

    Java 和 IDE 的关系是,如果没有 IDE,几乎是写不了代码。。。至少,我只有写 java 的时候,才会去用 IDE。

    RoR/Ruby + 编辑器效率多数的时候 >= Java + IDE。

  • 111 at 2020年11月04日

    项目中的模型的属性和方法

    属性,用了 @Data,IDE 可以提示吗?反正我的没提示,你要是知道话,我刚好学习下。

    controller 中的方法,route 中的路径

    RoR controller 之间不会相互调用,不需要知道有哪些方法。。。

    路径有命令行 rake routes 打印所有路径。

    java spring 如果想知道有哪些路由,是怎么搞的?这个我确实不知道,想学些下。

  • 111 at 2020年11月04日

    比起代码的健壮性,ROR 的这点简洁不值一提。

    这句话,你是想说 RoR 更简洁?

    跟你聊的就是 RoR 和 Java 系列的开发效率高的问题。那段代码,还真扯不出健壮性问题。。。

    你想聊健壮性,可以在达成“RoR 更简洁”这个基础下,我们继续聊。

    IDE 自动引入

    还是要按快捷键的,如果要使用鼠标操作的话,就跟麻烦了。。。重名了,还得选。。。IDE 只不过让自动引入变的不那么麻烦罢了。

    用 rails 基本上就别考虑用 IDE 了。。。

    因为用不着。

    这个 List<Shop> shops = dao.query(Shop.class, Cnd.orderBy().desc("shopName"), new Pager(1, 20)); 需要 IDE 提示,这个 shops = Shop.page(1).per(20).order(shop_name: :DESC) 编辑器就够了。

    RoR 之所以 IDE 不流行,是以为没有 IDE 大家写的也挺 happy。IDE 对 Java 来说才是必需品。

    所以 IDE + JAVA 这一套更适合打工人

    恩,是的,Java 创造了更多的岗位,从这个角度看,确实如此。

  • 111 at 2020年11月03日

    少了一行,一开始没看出来,不好意思。

    star 还是算了吧😂

  • 111 at 2020年11月03日

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

  • 111 at 2020年11月03日

    @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 2020年11月03日

    我们先单独比较一下代码

    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 2020年11月03日

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

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

    大家还是拿代码说话。

  • 111 at 2020年11月02日

    既然 java、spring 这么棒。

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

    用什么 orm 都行。

  • 111 at 2020年11月02日

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

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

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

  • 新手应该如何学习 Rails at 2020年11月01日

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

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

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

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

  • 111 at 2020年10月31日

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

  • Ruby on Rails 工程师去大厂 at 2020年10月26日

    恩,是的 👍

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

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

  • Ruby on Rails 工程师去大厂 at 2020年10月25日

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

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

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

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

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

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

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

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

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

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

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

  • 尝试使用 Ruby 3 调度器 at 2020年10月18日

    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。