• 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。

  • 1000 每秒的话,2 核 4g 这配置,es 感觉扛不住。

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

  • 哈尔滨吗?

  • 编程学习指北 at 2020年09月05日

    我要努力向 Dylan 大佬看齐