某券商面试,介绍了自己在 react-native 做的热更新工作时,也使用了 [热修复] 的描述,但面试官直接说我这个不是热修复,只有原生的实现才是热修复。个人一直认为这两个词是可以混用的,而且热修复一词,只要不需要重新下载 APP 我觉得都可以认为是 [热修复] ,不知道是我知识有盲区还是面试官故意踩我,求指导
1
chaselen 2021-12-27 08:54:27 +08:00
不是一回事? 😅
|
2
Innovatino 2021-12-27 08:58:48 +08:00 3
面试官有病,咬文嚼字没话找话
|
3
AilF 2021-12-27 09:07:51 +08:00 1
在我的理解中,这两个就是一回事 😂
|
4
x86 2021-12-27 09:09:34 +08:00 14
你问他,你爸是不是你爹
|
5
yuan925 2021-12-27 09:16:09 +08:00 6
面试管说的没错,不算踩你。
修复一般是指 fix ,更新是指 feature 发布,完全不是一会事,使用的技术也不一样。 比如 iOS 热修复,一般是脚本( js 、lua 等)动态运行 runtime 特性来修复线上原生 bug ;而热更新,是指基于框架( rn 、weex 等)来发布新功能。 说是一会事的,你觉得用 rn 可以来修复原生 bug 么?底层实现都不一样。 |
6
meteor957 2021-12-27 09:18:53 +08:00
直接跟他说英文。以前碰到过跟我 bb 重排和回流的区别的,
|
7
Geo200 OP @yuan925 有点道理,可以理解版本发布是热更新、改 bug 是修复,但如果使用框架开发的场景,针对某个 bug 而发布的版本是热更新还是热修复呢?
|
8
nightmarks 2021-12-27 09:32:16 +08:00 via iPhone 1
不做线上版本发布工作的人一般不会知道这些,就是个版本号的区别而已,说实话有点咬字眼
|
9
cnrting 2021-12-27 09:35:41 +08:00 via iPhone
应该说 fix 属于 update 的一种吧
|
10
louiswang002 2021-12-27 09:36:16 +08:00 via iPhone
就像 jspatch 和 react native 的区别一样吧
|
11
jackbrother 2021-12-27 09:37:31 +08:00
@yuan925 那用热修复的方式去新增功能呢?
|
12
louiswang002 2021-12-27 09:39:06 +08:00 via iPhone
@Geo200 我觉得面试官问的方向有点问题,应该针对这两个技术的细节,而不是扣字眼
|
14
whenov 2021-12-27 09:48:37 +08:00
update = fix + feature
|
15
yuan925 2021-12-27 09:50:23 +08:00
@jackbrother 这种方式是不可取的。一般热修复都是根据原生代码,翻译成脚本语言来 fix 某个 bug ,代码量小,非常的不直观。用来开发新功能,工作量会成指数级的增加,可维护性也差。
|
16
yuan925 2021-12-27 10:01:38 +08:00
一个个都在扣字眼真没必要,中文翻译也是描述不准备的。
app 开发动态代码下发,用于 bugfix 和跨平台开发,完全就是两种技术,这也是面试管想问的,不要搞错重点了。 |
17
sunny352787 2021-12-27 10:17:12 +08:00 2
我这边做游戏的,热更新和热修复还真就是两回事
比如我们用的 Unity 开发,原生使用 C#代码,通过第三方库的形式可以引入 lua 脚本 有一部分普通的逻辑使用 lua 开发,例如 UI 之类的,会一直用 lua 写下去,后面更新也一直用 lua 提交,这个我们叫热更新 而另一部分比较核心的对性能要求比较高的代码使用 C#原生开发,线上出现错误的时候通过一些临时打补丁的方式可以做一些修复但会影响性能,等到下一次发包的时候会在 C#层面将这部分代码修改掉同时移除之前的临时补丁,这种临时补丁的方式我们就叫热修复 我估计可能面试官想要的是类似这种的说法吧 |
18
murmur 2021-12-27 10:35:21 +08:00
热修复是修 java 部分?
|
19
zerofancy 2021-12-27 10:45:02 +08:00 via Android
在我的理解里,两者确实不是一回事。
安卓原生用 java(或 Kotlin 开发),语言本身是没有动态特性的,热修复是 hook 了 classloader 使得能够优先加载后来下发的类。 |
20
whistleryz 2021-12-27 10:53:22 +08:00
显然面试官对这方面是有研究的,只不过面试水平可能有待提高,本着问题而不是交流的方式跟你聊,让面试的同学聊的不开心了。
|
21
zerofancy 2021-12-27 10:54:32 +08:00 via Android 1
准确定义说不出,但绝非正常发版。
我记得有个老哥分享在改动代码重新部署比较困难的情况下利用了网页上某个 xss 漏洞去紧急修复隐藏页码上某个元素大概可以算“热修复”。 |
23
hahaayaoyaoyao 2021-12-27 14:31:40 +08:00 via Android 1
@zerofancy 你在说我吗?
|
24
shyangs 2021-12-27 14:39:47 +08:00
直接說英文, 避免溝通障礙.
補丁和修正檔是不是一個東西. |
25
shyling 2021-12-27 14:51:09 +08:00
感觉意思是热修复用的手段比较临时,魔法。。下次上线会用正常代码重写一次。
热更新就是上的正常代码。 |
26
mxT52CRuqR6o5 2021-12-27 14:56:48 +08:00
如果是 native 的那种热修复,只有价值高的 app 才值得去做热修复吧,毕竟修复起来成本也高
小厂价值低 app 可能很难接触这种技术 |
27
jackbrother 2021-12-28 09:41:41 +08:00
@yuan925 我也知道不可取,但技术是用来解决问题的,热更新和热修复只是一种行为的描述,且并不应该代表具体的技术实现。
|
28
libook 2021-12-28 11:35:45 +08:00 1
热更新和热修复都是跟目的有关,更新就是更新,修复就是修复,跟原生非原生没有任何关系;如果说从目的出发,增加或修改功能可以用热更新,修复 bug 可以用热修复,就比较清晰了。
类似的,比如“前端”和“后端”的概念,说跑在服务器上的是后端,跑在终端设备上的是前端,那么 APP 的 View 层和 Controller 层是不是也可以被当做前端和后端呢?以及服务器上 SSR 的部分是不是也可以称作为前端的一部分呢?以及 BFF 这种边界产物究竟属于哪一端。 软件架构的的魅力之一就是任何概念都是可以套用在任何类似的场景下的,只有对概念理解不深的人才会借一个具体的案例当做定义。 |
29
gearkey 2021-12-28 16:56:17 +08:00 via Android
屁
|