V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
yang0225
V2EX  ›  程序员

Java 工作 3 年, crud2 年,面试官问起项目中遇到什么技术难题怎么解决?

  •  1
     
  •   yang0225 · 2023-03-26 17:05:20 +08:00 · 5736 次点击
    这是一个创建于 612 天前的主题,其中的信息可能已经有所发展或是发生改变。

    工作 3 年,crud2 年,面试官问起项目中遇到什么技术难题怎么解决的,不知道怎么答起,想吸取各位大佬的在项目中遇到的一些普遍技术问题以及解决方案,来回答面试官的问题,技术栈可以 spring 到 springcloud redis 中间件 分布式之类的,让面试过程中稍微有些亮点。求求求了! crud2 年太难受了!!!

    32 条回复    2023-03-28 09:27:27 +08:00
    yangyuhan12138
        1
    yangyuhan12138  
       2023-03-26 17:21:44 +08:00
    马一个 我也头疼这个问题
    yang0225
        2
    yang0225  
    OP
       2023-03-26 17:31:58 +08:00
    @yangyuhan12138 TWlyYWl0b3dhX1lhbmdfMjI1 base64 麻了头疼啊
    pengtdyd
        3
    pengtdyd  
       2023-03-26 19:22:17 +08:00
    《 crud 能有什么技术难题》
    Saitama
        4
    Saitama  
       2023-03-26 20:48:33 +08:00
    马一个. 前端也一样,每天写点破烂 CRUD 页面。
    我觉得唯一的解法就是多看 Github 。看看那些大的开源项目都用了啥,一个一个学.
    maigebaoer
        5
    maigebaoer  
       2023-03-26 20:51:08 +08:00 via Android
    我也想知道 crud 有啥技术难点😅😅😅蹲一个
    ufo5260987423
        6
    ufo5260987423  
       2023-03-26 21:04:32 +08:00   ❤️ 1
    1 、幂等性;
    2 、如何保证数据一致性并针对性能需求调整方案;
    3 、DDD ( Domain driven design );
    4 、流程引擎;
    5 、鉴权系统和微服务之间的关系;

    我说的这些应该还算 CRUD 吧?笑。
    dode
        7
    dode  
       2023-03-26 21:06:04 +08:00
    旧系统运行维护
    LLaMA
        8
    LLaMA  
       2023-03-26 21:07:30 +08:00
    技术难题:领导太傻逼
    解决方案:润
    lessMonologue
        9
    lessMonologue  
       2023-03-26 21:12:41 +08:00
    # 6 楼说的很详细了,补充一个最近遇到的问题
    list 列表直接查 mysql ,导致 mysql 的 thread_running 飙升,怎么排查怎么解决
    orikey
        10
    orikey  
       2023-03-26 21:14:41 +08:00
    我简单聊一下。工作背景:工作两年,一年电商经验,一年数据产品经验。两家大厂经验。
    其实所有的工作 如果进行拆分的话 可以理解为:
    1 、处理输入
    2 、逻辑处理
    3 、处理输出
    那么这个地方呢 crud 主要就是在处理逻辑这个 stage 上进行的,所谓高并发 其实我个人感觉我们不妨把目光看到第一个个和最后一个 stage ,如果我们后台框架使用的是 dubbo 默认配置的网络线程池是 200 ,现在我们要面对场景的 qps 高于 200 如何进行处理呢,举个例子,我们现在对接三方直播平台,我们是一个电商,需要自动把库存信息同步给直播平台,那么我们仅仅 sku 的变动调用就大于这个这个值了,这就导致我们对外提供的其他服务别人在调用时会显示不可用,那么我们解决这个问题最简单的一个办法就是在处理输入的时候 可以实现通过布隆过滤器 根据比如店铺 id 或者商品 id ,过滤一部分数据,同时数据同步部分的逻辑直接进行异步处理,我们直接返回 true ,但是发送了一个库存处理消息出去,然后这个地方我们可以在深入,比如对消息的 offset 或者 publishtime 做监控,线上出现消息挤压我们应该提前做好对应的预案,同时我们也可以考虑进行一定程度的流量合并,比如如果库存是 6000 ~ 4000 从第一次调用的时候我们注册一个 5s 左右的定时调度任务(可以参考使用海豚调度),同时这个值加入 redsi 给一个 5s 的锁,这期间的同一个商品的库存变更不处理 5s 后由定时任务回调你,同时针对回调失败的情况自动落库,如果有海量同步失败的数据,就要继续考虑 mysql 中的数据要用 spark 或者其他方式同步一份到 hive 中,然后做 ETL 的处理 比如发消息给你的系统,然后系统中针对这种情况进行异常处理,后续在深入,比如可以在内部的这种数据平台上配置小时级别的监控,如果失败库中数据不为空并且自增 id 有变化则进行同步,并且记录最后一条同步的 mysql 记录中的自增 id 信息,然后自动进行 trigger 。
    这样的话就是一套比较完整的方案,不同平台之间的 数据同步 类场景 我们都可以使用这种思路进行思考
    godwei
        11
    godwei  
       2023-03-26 21:20:15 +08:00
    顶一顶,等大佬回复
    yao00jun
        12
    yao00jun  
       2023-03-26 22:16:01 +08:00
    顶一顶,等大佬回复
    yang0225
        13
    yang0225  
    OP
       2023-03-26 23:13:23 +08:00
    其实像我们这些长期 crud 在技术中,确实很难,真实遇到真的问题和解决方案,我发帖的意思是各位大佬们可以稍微分享下,一些比较普遍的技术问题,好在面试中没有那么哑口无言。
    yang0225
        14
    yang0225  
    OP
       2023-03-26 23:14:13 +08:00
    @orikey 感谢大佬的知识输出,要得就是这种哈哈哈
    yang0225
        15
    yang0225  
    OP
       2023-03-26 23:16:25 +08:00
    @ufo5260987423 感谢大佬输出
    tairan2006
        16
    tairan2006  
       2023-03-27 08:22:17 +08:00 via Android   ❤️ 2
    B 端 CURD 难点在于抽象,啥表单引擎流程引擎,复杂的 RBAC 设计。
    C 端的 CURD 难点在于性能,量上来了啥问题都有…
    zhoudaiyu
        17
    zhoudaiyu  
       2023-03-27 09:05:13 +08:00 via iPhone
    @lessMonologue 那么这是为啥呢
    hopelessu
        18
    hopelessu  
       2023-03-27 09:28:00 +08:00
    留眼
    tedzhou1221
        19
    tedzhou1221  
       2023-03-27 09:32:45 +08:00
    使用服务编排(或简单的流程引擎)优化复杂数据的查询
    liuxu
        20
    liuxu  
       2023-03-27 09:37:02 +08:00 via Android
    qps = 线程池数量 * 每个线程每秒处理数量

    200 线程池,每个请求 100ms ,结果是每个线程每秒处理 10 个请求,200 个线程池 pqs 为 2000

    对 qps 有要求的,最好选个处理能力强的异步框架 /语言,线程池类的框架模型可以用但不算最好的方案了
    diagnostics
        21
    diagnostics  
       2023-03-27 09:41:51 +08:00
    CRUD 最后不也得面向用户层嘛,不管用户是其他服务还是真实用户。

    - 输入
    - 统一校验框架
    - 有些查库判断,做到这一层,例如用户 ID 不存在这种,怎么去做呢?所有用户 ID 放 Redis ?可以优化
    - 逻辑处理
    - latency 是多少?给了多少资源?按利特尔定律去压测,能到这个吞吐量吗?
    - latency 能降低吗?例如主要是查库的 IO ,那就加 Redis 缓存,缓存失效问题怎么解决?缓存命中率怎么提高?
    - Redis 有缓存了,还想再优化,有资源的情况下(内存),能不能上内存缓存?关于缓存的问题又来一遍
    - 放到内存上了,怎么压缩内存(更改数据结构)避免 GC 带来的延迟了? GC 停顿怎么优化(垃圾收集器,zingJDK )
    - 回到 DB 这一层,有分页查询,那么 large page 下索引失效问题怎么解决呢? n + 1 问题如何优化呢?
    - 输出
    cnzjl
        22
    cnzjl  
       2023-03-27 09:46:10 +08:00
    遇到了难题其实并不多,比如项目集成的框架自带 shiro 鉴权,通过配置文件没法修改默认配置,最后是通过 BeanFactoryPostProcessor 解决问题;还有就是定时任务同步第三方数据,同步时间过长会锁表造成数据库卡死,这时候通过定时任务作为独立服务运行,新建数据中转表来存放数据,在数据处理完成后一次性导入到业务表中(使用 Insert into...from ),还有就是 java ,scala 混合开发编译。。。好像都是小问题
    ForkNMB
        23
    ForkNMB  
       2023-03-27 10:25:10 +08:00
    线程池参数设置是否合理,比如有个服务 CPU 飙升,就是线程数开太多了
    redis 缓存,量太大,查询太频繁,网络有波动容易触发告警,加个很短的本地缓存可以解决问题
    还有就是 redis 缓存 @Cacheable 注解失效了 断点源码发现 jackson 反序列化异常了 有人在 dto 里加了多余的 get 方法 tmd
    Transactional 注解失效 以及用了注解还是超卖的原因分析之类的
    都是 curd 仔线上问题遇到的 =_=
    Corrots
        24
    Corrots  
       2023-03-27 10:52:45 +08:00
    同感,蹲一蹲
    litchinn
        25
    litchinn  
       2023-03-27 10:53:18 +08:00
    我感觉遇到技术难题大部分时候都不是费很大劲去攻克它,而是转而寻找其他替代方案或者更改需求,选择最简单的那个。
    技术难题这东西,就像是某些知识一样,你会了之后觉得很简单,甚至感觉不值得拿出来一说,当你不会时扣脑袋也想不到那去。
    zzzmh
        26
    zzzmh  
       2023-03-27 10:59:04 +08:00
    我 7 年了,该回答不出的问题还是回答不出,就不如在自由发言的时候多讲讲自己精通的方面。问答的时候不知道就说不知道,也算是节约时间。
    yaphets666
        27
    yaphets666  
       2023-03-27 11:27:23 +08:00
    网上找开源项目,里边的难点,灵活运用成自己项目里的,不用实际上做过,理解了,懂了就可以说。像服务端,无非是,并发,可用,性能问题等等。前端,无非是 ci ,webpack ,模块化,抽象,微前端等等。还有就是遇到某个问题,通过阅读源码发现解决办法等等
    IndieCreator
        28
    IndieCreator  
       2023-03-27 18:42:43 +08:00
    这个是引入外企的面试风格,回答不一定要非常的难点,也不一定需要你自己经历的,但是要体现这几点
    1. 这个问题有点难
    2. 我处理这个难点体现了我的 ownership, 提现了我处理复杂问题的能力
    3. 我处理这个难点后有什么收获,后续再某某问题的处理中应用到了.
    dwlovelife
        29
    dwlovelife  
       2023-03-27 20:19:33 +08:00
    说几个吧目前做的项目百万用户
    dwlovelife
        30
    dwlovelife  
       2023-03-27 20:23:23 +08:00
    随便说几个吧目前做的项目百万用户
    1. 数据安全,防爬和加密等
    2. 流量裁剪, 减少重复调用 [如交易端和中台有部分接口会重复调用 比如都需要获取活动信息 能不能一次调用 下游从上游拿取]
    3. 限流,接口限流以及 RPC 接口限流
    4. MDC 全链路追踪含 RPC 调用
    5. 服务器自动扩容
    xuanbg
        31
    xuanbg  
       2023-03-27 22:18:07 +08:00
    没有遇到过什么技术难题,要不你举个例子?
    Angzk3348
        32
    Angzk3348  
       2023-03-28 09:27:27 +08:00
    插眼学习一下
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1085 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 22:27 · PVG 06:27 · LAX 14:27 · JFK 17:27
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.