V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Geo200
V2EX  ›  职场话题

面试官说 APP 热修复和热更新不是一个东西

  •  
  •   Geo200 · 2021-12-27 08:45:49 +08:00 · 6186 次点击
    这是一个创建于 1063 天前的主题,其中的信息可能已经有所发展或是发生改变。

    某券商面试,介绍了自己在 react-native 做的热更新工作时,也使用了 [热修复] 的描述,但面试官直接说我这个不是热修复,只有原生的实现才是热修复。个人一直认为这两个词是可以混用的,而且热修复一词,只要不需要重新下载 APP 我觉得都可以认为是 [热修复] ,不知道是我知识有盲区还是面试官故意踩我,求指导

    29 条回复    2021-12-28 16:56:17 +08:00
    chaselen
        1
    chaselen  
       2021-12-27 08:54:27 +08:00
    不是一回事? 😅
    Innovatino
        2
    Innovatino  
       2021-12-27 08:58:48 +08:00   ❤️ 3
    面试官有病,咬文嚼字没话找话
    AilF
        3
    AilF  
       2021-12-27 09:07:51 +08:00   ❤️ 1
    在我的理解中,这两个就是一回事 😂
    x86
        4
    x86  
       2021-12-27 09:09:34 +08:00   ❤️ 14
    你问他,你爸是不是你爹
    yuan925
        5
    yuan925  
       2021-12-27 09:16:09 +08:00   ❤️ 6
    面试管说的没错,不算踩你。
    修复一般是指 fix ,更新是指 feature 发布,完全不是一会事,使用的技术也不一样。
    比如 iOS 热修复,一般是脚本( js 、lua 等)动态运行 runtime 特性来修复线上原生 bug ;而热更新,是指基于框架( rn 、weex 等)来发布新功能。
    说是一会事的,你觉得用 rn 可以来修复原生 bug 么?底层实现都不一样。
    meteor957
        6
    meteor957  
       2021-12-27 09:18:53 +08:00
    直接跟他说英文。以前碰到过跟我 bb 重排和回流的区别的,
    Geo200
        7
    Geo200  
    OP
       2021-12-27 09:29:28 +08:00
    @yuan925 有点道理,可以理解版本发布是热更新、改 bug 是修复,但如果使用框架开发的场景,针对某个 bug 而发布的版本是热更新还是热修复呢?
    nightmarks
        8
    nightmarks  
       2021-12-27 09:32:16 +08:00 via iPhone   ❤️ 1
    不做线上版本发布工作的人一般不会知道这些,就是个版本号的区别而已,说实话有点咬字眼
    cnrting
        9
    cnrting  
       2021-12-27 09:35:41 +08:00 via iPhone
    应该说 fix 属于 update 的一种吧
    louiswang002
        10
    louiswang002  
       2021-12-27 09:36:16 +08:00 via iPhone
    就像 jspatch 和 react native 的区别一样吧
    jackbrother
        11
    jackbrother  
       2021-12-27 09:37:31 +08:00
    @yuan925 那用热修复的方式去新增功能呢?
    louiswang002
        12
    louiswang002  
       2021-12-27 09:39:06 +08:00 via iPhone
    @Geo200 我觉得面试官问的方向有点问题,应该针对这两个技术的细节,而不是扣字眼
    whenov
        13
    whenov  
       2021-12-27 09:47:53 +08:00
    @yuan925 fix=修复,update=更新,feature=特性
    whenov
        14
    whenov  
       2021-12-27 09:48:37 +08:00
    update = fix + feature
    yuan925
        15
    yuan925  
       2021-12-27 09:50:23 +08:00
    @jackbrother 这种方式是不可取的。一般热修复都是根据原生代码,翻译成脚本语言来 fix 某个 bug ,代码量小,非常的不直观。用来开发新功能,工作量会成指数级的增加,可维护性也差。
    yuan925
        16
    yuan925  
       2021-12-27 10:01:38 +08:00
    一个个都在扣字眼真没必要,中文翻译也是描述不准备的。
    app 开发动态代码下发,用于 bugfix 和跨平台开发,完全就是两种技术,这也是面试管想问的,不要搞错重点了。
    sunny352787
        17
    sunny352787  
       2021-12-27 10:17:12 +08:00   ❤️ 2
    我这边做游戏的,热更新和热修复还真就是两回事

    比如我们用的 Unity 开发,原生使用 C#代码,通过第三方库的形式可以引入 lua 脚本

    有一部分普通的逻辑使用 lua 开发,例如 UI 之类的,会一直用 lua 写下去,后面更新也一直用 lua 提交,这个我们叫热更新

    而另一部分比较核心的对性能要求比较高的代码使用 C#原生开发,线上出现错误的时候通过一些临时打补丁的方式可以做一些修复但会影响性能,等到下一次发包的时候会在 C#层面将这部分代码修改掉同时移除之前的临时补丁,这种临时补丁的方式我们就叫热修复

    我估计可能面试官想要的是类似这种的说法吧
    murmur
        18
    murmur  
       2021-12-27 10:35:21 +08:00
    热修复是修 java 部分?
    zerofancy
        19
    zerofancy  
       2021-12-27 10:45:02 +08:00 via Android
    在我的理解里,两者确实不是一回事。
    安卓原生用 java(或 Kotlin 开发),语言本身是没有动态特性的,热修复是 hook 了 classloader 使得能够优先加载后来下发的类。
    whistleryz
        20
    whistleryz  
       2021-12-27 10:53:22 +08:00
    显然面试官对这方面是有研究的,只不过面试水平可能有待提高,本着问题而不是交流的方式跟你聊,让面试的同学聊的不开心了。
    zerofancy
        21
    zerofancy  
       2021-12-27 10:54:32 +08:00 via Android   ❤️ 1
    准确定义说不出,但绝非正常发版。
    我记得有个老哥分享在改动代码重新部署比较困难的情况下利用了网页上某个 xss 漏洞去紧急修复隐藏页码上某个元素大概可以算“热修复”。
    GoodRui
        22
    GoodRui  
       2021-12-27 13:05:26 +08:00 via iPhone
    @yuan925 Windows 更新有话要说
    hahaayaoyaoyao
        23
    hahaayaoyaoyao  
       2021-12-27 14:31:40 +08:00 via Android   ❤️ 1
    @zerofancy 你在说我吗?
    shyangs
        24
    shyangs  
       2021-12-27 14:39:47 +08:00
    直接說英文, 避免溝通障礙.

    補丁和修正檔是不是一個東西.
    shyling
        25
    shyling  
       2021-12-27 14:51:09 +08:00
    感觉意思是热修复用的手段比较临时,魔法。。下次上线会用正常代码重写一次。

    热更新就是上的正常代码。
    mxT52CRuqR6o5
        26
    mxT52CRuqR6o5  
       2021-12-27 14:56:48 +08:00
    如果是 native 的那种热修复,只有价值高的 app 才值得去做热修复吧,毕竟修复起来成本也高
    小厂价值低 app 可能很难接触这种技术
    jackbrother
        27
    jackbrother  
       2021-12-28 09:41:41 +08:00
    @yuan925 我也知道不可取,但技术是用来解决问题的,热更新和热修复只是一种行为的描述,且并不应该代表具体的技术实现。
    libook
        28
    libook  
       2021-12-28 11:35:45 +08:00   ❤️ 1
    热更新和热修复都是跟目的有关,更新就是更新,修复就是修复,跟原生非原生没有任何关系;如果说从目的出发,增加或修改功能可以用热更新,修复 bug 可以用热修复,就比较清晰了。

    类似的,比如“前端”和“后端”的概念,说跑在服务器上的是后端,跑在终端设备上的是前端,那么 APP 的 View 层和 Controller 层是不是也可以被当做前端和后端呢?以及服务器上 SSR 的部分是不是也可以称作为前端的一部分呢?以及 BFF 这种边界产物究竟属于哪一端。

    软件架构的的魅力之一就是任何概念都是可以套用在任何类似的场景下的,只有对概念理解不深的人才会借一个具体的案例当做定义。
    gearkey
        29
    gearkey  
       2021-12-28 16:56:17 +08:00 via Android
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1889 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 16:17 · PVG 00:17 · LAX 08:17 · JFK 11:17
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.