V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  mind3x  ›  全部回复第 2 页 / 共 41 页
回复总数  801
1  2  3  4  5  6  7  8  9  10 ... 41  
2022-12-04 22:37:44 +08:00
回复了 mind3x 创建的主题 程序员 我又来每天一种不同的语言写 Advent of Code 2022 了
@mascteen
@netabare
没什么成就,接触平时用不到的语言,杀时间。
2022-12-04 20:06:42 +08:00
回复了 mind3x 创建的主题 程序员 我又来每天一种不同的语言写 Advent of Code 2022 了
@44670 这翻译腔,我怀疑你是 ChatGPT >_<
2022-11-24 01:32:24 +08:00
回复了 bthulu 创建的主题 .NET List<Apple>不能赋值给 List<object>吗?
C#居然协变逆变还是针对具体容器类型的……
2022-11-23 04:27:33 +08:00
回复了 Tokyo101 创建的主题 Android 三星 S22, Pixel 7 Pro 选哪个?
@chenyx9 反正 Pixel 1 到 6 都不能开微信支付宝的指纹
2022-11-19 19:07:00 +08:00
回复了 v2e0xAdmin2 创建的主题 Android 刷 Pixel Experience 还是 买 pixel
@v2e0xAdmin2 现在 Pixel 用国内 app 也没啥问题,虽然我一般把国内 app 都专门另装在小米上。

但我坚持用了 Nexus 和 Pixel 系列这么多年,也觉得越来越没意思了。
2022-11-19 17:09:41 +08:00
回复了 hxysnail 创建的主题 程序员 有大佬熟悉高并发技术吗?有空进来交流一下
看来国内真是人均手写 raft 的水平啊
2022-11-18 00:18:18 +08:00
回复了 movq 创建的主题 程序员 为什么 Java 父类构造函数调用被重写的方法会调用到子类的
@geelaw 多谢指出,确实不写 C++好多年了。
2022-11-17 23:50:13 +08:00
回复了 movq 创建的主题 程序员 为什么 Java 父类构造函数调用被重写的方法会调用到子类的
写了 20 多年 Java ,也写过 JVM ,我来尝试解释一下。

首先 Java 这个行为和 C#是一样的:在子类尚未完成初始化时,父类的构造函数就已经能调用在子类中重载的函数。这意味着不注意的话很容易跑出 NPE 和别的毛病来。这个问题在 stackoverflow 上也经常有人问。

要理解这个行为,可以看一下 JVM spec 里对 invokevirtual 这个字节码的解释: https://docs.oracle.com/javase/specs/jvms/se9/html/jvms-6.html#jvms-6.5.invokevirtual

注:invokevirtual 是 JVM bytecode 调用在 class 中定义的 virtual 函数时所使用的指令。

简单的说,调用虚方法时,查找的是当前实例(this)的类的方法表,也就是你的 Child 的方法表。

这里 Java 和 C++的区别是,C++的虚函数表(vtable)的建立,在逻辑上是动态的,相当于每一层实例构造完以后,更新一次 vtable 。当然实际上 C++编译器不会这么没效率,就把构造函数里调用的函数当作非虚函数在编译期直接 resolve 完事。

而 Java 的类的方法表就那么一张,每个类在加载验证 link 完成以后,方法表就在那里不动了。而基类构造函数的调用是在初始化实例时动态发生的,调虚方法时查的表也是 Child 的表,自然会调用到 Child 中重载的函数,即使此时 Child 的数据成员并未初始化。

这样做在逻辑上确实有难以理解的地方:Child 整个实例都还没处于一个合法的状态,其方法就被调用了。

但是,C++这种做法也有其局限性:确实有场景是需要基类能在构造函数里调用子类重载的虚函数,只要子类的实现不依赖子类的数据成员即可。打个比方:

class Bike {
Bike () {
frontWheel = makeWheel();
rearWheel = makeWheel();
}
Wheel makeWheel();
}

class TitaniumBike {
Wheel makeWheel() {
return new TitaniumAllyWheel();
};
}

这样子类就可以正确产生一辆拥有钛合金狗眼(划掉)轮子的自行车。这里不讨论此种设计模式的优劣,只是举个例子。我本人反正是不会这么写。
2022-11-15 16:27:05 +08:00
回复了 movq 创建的主题 程序员 有没有 Java 大佬分析这是什么错误
@movq 啊,是的,javac 也推导不了,因为加上 `reversed` 以后,之前的类型信息就丢了。我用 javac 试的时候忘记加`reversed`了。
2022-11-15 00:56:22 +08:00
回复了 movq 创建的主题 程序员 有没有 Java 大佬分析这是什么错误
更正一下,看起来不是 javac 的问题。你原本的代码 javac 编译是没问题的,是 IntelliJ 自身的类型推导有问题。我的版本是 2022.2.3 Ultimate.
2022-11-15 00:49:09 +08:00
回复了 movq 创建的主题 程序员 有没有 Java 大佬分析这是什么错误
所以 V2EX 的 markdown 应该怎么用 [掀桌]
2022-11-15 00:48:32 +08:00
回复了 movq 创建的主题 程序员 有没有 Java 大佬分析这是什么错误
javac 的类型推导比较残,不知道你这里的 a 是 int[]类型。解决办法是告诉它:

```lang=java
Arrays.sort(boxTypes, Comparator.<int[]>comparingInt(a -> a[1]).reversed());
```

这也相当于
```lang=java
Arrays.sort(boxTypes, Comparator.comparingInt(a -> ((int[])a)[1]).reversed());
```
2022-10-10 21:18:23 +08:00
回复了 hepin1989 创建的主题 程序员 gRPC 跑分分享(2022-10-02 bench results)
按照惯例,让我来加一句:『加上数据库查询以后……』

(注:是友军)
2022-09-15 14:00:11 +08:00
回复了 yazinnnn 创建的主题 Java loom 在 quarkus 中的基本应用
@Jirajine 20 年前的书就这么译了
2022-09-14 23:56:11 +08:00
回复了 yazinnnn 创建的主题 Java loom 在 quarkus 中的基本应用
@Jirajine 就是 fiber ,很早就这么叫了。20 年前 Win32 SDK 里就有 https://docs.microsoft.com/en-us/windows/win32/api/winbase/nf-winbase-createfiber ,当然 Win32 的 fiber 比较原始,需要用户代码自己主动 yield 。
2022-09-13 16:59:27 +08:00
回复了 TigerJie 创建的主题 程序员 下单了华为 MateBook E Go
搜了一下 Geekbench ,全网通版用的 8cx Gen2 大概性能将近 M1 的 40%,性能版的 Gen3 勉强到 M1 的一半,确实差距还很大。
但胜在便宜 xD
2022-09-05 00:54:02 +08:00
回复了 yodhcn 创建的主题 程序员 [ Linux ] inotifywatch 如何正确地监听重命名或移动事件?
2022-08-18 20:39:37 +08:00
回复了 magese 创建的主题 程序员 为什么公司的人写代码都无视 IDE 的警告提示?
不是你有强迫症,而是这一行的从业人员 90%以上并不适合干这一行 [摊手]
2022-08-15 16:21:29 +08:00
回复了 storyxc 创建的主题 宽带症候群 中国电信偷偷给家宽限速
一般都是扁线的问题
2022-08-05 21:01:42 +08:00
回复了 edis0n0 创建的主题 程序员 我认为手机 64GB 内存对我够用了
@233373 是的
1  2  3  4  5  6  7  8  9  10 ... 41  
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   4307 人在线   最高记录 6543   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 45ms · UTC 10:13 · PVG 18:13 · LAX 03:13 · JFK 06:13
Developed with CodeLauncher
♥ Do have faith in what you're doing.