• gallifrey
    置顶
    2021-12-27
    @Override protected Long calculateNewPrice(Long totalAmount, Long shopAmount, Long quota) { // 计算使用优惠券之后的价格 Long newPrice = convertToDecimal(shopAmount * (quota.doubleValue()/100)); log.debug("original price={}, new price={}", totalAmount, newPrice); return newPrice; } 作者看一下这个DiscountTemplate类的实现逻辑有问题,newPrice只是该商户的折扣完的价格,总价是totalAmount - shopAmount + newPrice ; 不知理解是否正确

    作者回复: 还真是,我这数学就是体育老师都教不出来!想当年做营销中心的时候就搞出了个全店5折的bug。同学你算数一定是正经老师教的,思路清晰理解到位。 话说极客的评论置顶功能怎么玩,编辑大大,帮我把这条置顶。要让童鞋们看看,小学数学基础对以后写代码的指导意义有多大。一个程序员的一生,就是和bug抗争的一生,没有搞过几个P0 bug就像没挂过科一样,这个人生是不完整的。 我作为程序员的人生特别的完整。看了这个评论的同学们,你想自己家孩子也搞几个P0被3.25年终奖泡汤吗?不你不想,那就从我做起,赶紧的给娃的私教奥数补习班报起来

    共 6 条评论
    12
  • Layne
    2021-12-24
    回答下思考题: 1.利用注册中心的方式; 2.利用API网关的方式; 3.利用类似nginx这种做VIP的负载均衡方式。

    作者回复: 非常不错,使用nginx、keepalive做vip是挺常用的方案,省钱又简单

    
    10
  • Geek_a6bab1
    2021-12-28
    老师您好,请教一个问题。我现在有一个比较久的springboot项目,需要升级到cloud项目,每个服务对应了一个数据库。现在碰到的问题是,把用户表拆出来以后,再别的服务就不能通过join去关联用户信息了。对于该问题一般在分布式项目中是怎么处理的?

    作者回复: 在业务里将join用户表的操作替换成通过后台api调用,获取用户服务信息。不过用户是基础数据,查询量比较巨大,实践里最好做一层数据异构,比如上一些主搜服务挡在DB前面。我打一个比方,就像做商品中心,如果商品表以前都是join获取商品数据,现在微服务化之后就把商品数据异构到了opensearch(根据自己公司技术栈选择主搜中间件选型),然后让业务方接入open search,对时效性要求很高的服务才通过对外暴露api做表查询

    共 2 条评论
    9
  • peter
    2021-12-24
    请教两个问题:问题1:jpa本身不是具体的ORM框架,而是对ORM框架的一个封装,对吗?问题2:jpa只能用hibernate吗?能用mybatis吗?

    作者回复: orm可以理解为一个“理念”或者“口号”,在关系型DB和对象之间构建一层映射。jpa是一种“ORM规范”,它没有实现ORM,只是定义了一组持久化API的规范,我在项目中用的spring官方推荐的spring-data-jpa(底层hibernate实现)才是jpa规范的具体实现,像openjpa、toplink这些都是jpa的实现。mybatis你可以理解为半自动或者手动挡的ORM框架,它本身并不是jpa的实现,你可以了解一下mybatis-plus,比mybatis好用一些。

    
    6
  • 找工作
    2022-03-11
    姚老师在讲主线的时候穿插了很多干货,以前看了很多次设计模式,但是就连最简单的工厂模式是啥都没记住。姚老师一句:工厂方法会将子类转为顶层接口返回。直接道出了核心!

    作者回复: 设计模式最大的用处,就是在面试环节哇咔咔! 要是评选最滥竽充数的设计模式,我推选facade

    共 2 条评论
    5
  • 大明猩
    2022-01-14
    看了老师写的代码,感觉自己这几年白学了,写不出来这么好的代码啊!

    作者回复: 这个托是专业的!

    
    3
  • 杨逸林
    2022-01-06
    老师怎么不用 Spring MVC 自带的记录请求体打印的内容来打印 @RequestBody 修饰的内容呢?这样一个个写 log.info JSON.toJSONString不累吗。 ```java @Bean public CommonsRequestLoggingFilter logFilter() { CommonsRequestLoggingFilter filter = new CommonsRequestLoggingFilter(); filter.setIncludeQueryString(true); filter.setIncludePayload(true); filter.setMaxPayloadLength(10000); filter.setIncludeHeaders(false); filter.setAfterMessagePrefix("REQUEST DATA : "); return filter; } ``` application.yml ```yml logging: level: org: springframework: web: filter: # 打开请求体的日志 CommonsRequestLoggingFilter: debug ``` 或者在 logback 里面配置也是一样的。 这样就能看到请求体里面的内容了,它最终会转成 CacheXXWrapper,从已缓存的内容里面读。
    展开

    作者回复: 后面我们会转成使用openfeign来发起远程调用,feign组件有一个同样的功能课程里会讲到

    
    3
  • martin
    2021-12-30
    老师,请教一个问题,AbstractRuleTemplate 已经实现了 RuleTemplate 接口,为什么 MoneyOffTemplate 还要重复写 implements RuleTemplate 呢? public abstract class AbstractRuleTemplate implements RuleTemplate {} public class MoneyOffTemplate extends AbstractRuleTemplate implements RuleTemplate {}

    作者回复: 啊哈,我抄作业的时候顺带拿过来了,同学很细心,这段可以去掉

    共 3 条评论
    3
  • 6点无痛早起学习的和...
    2021-12-28
    有一个问题,目前已经 1 年半的 Java 业务开发经验,看源码的时候,需要跟着动手写吗?还是看源码梳理业务逻辑不用跟着动手写。 如果要跟着动手写,那是不是主要写业务逻辑处理部分,实体类这些就没有必要去重复写了,直接 cv?

    作者回复: 一年半已经是中忍级别了,实体类啥的就直接copy过来吧,么的问题的

    共 2 条评论
    3
  • kimoti
    2021-12-24
    修炼外功就是写业务逻辑代码,修炼内功就是算法,计算机底层原理,操作系统……

    作者回复: 每到面试的时候,内功心法都会大幅提升

    
    3