V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  nieyuanhong  ›  全部回复第 1 页 / 共 2 页
回复总数  21
1  2  
2025 年 11 月 11 日
回复了 Cbdy 创建的主题 Java Java 25 后的时代:像写 Python 一样写 Java
groovy: 喵喵喵?
记得有小编写过一个报道, 每天网站要处理几十万条数据, 程序员手上都磨出了老茧
2025 年 5 月 12 日
回复了 Rust2015 创建的主题 Java 安装 jabba,提示
@nieyuanhong 这不好好的?
2025 年 5 月 12 日
回复了 Rust2015 创建的主题 Java 安装 jabba,提示
2025 年 4 月 2 日
回复了 lidinghui 创建的主题 分享创造 互联网嘴替-AI 代怼,杠精克星一键生成暴击话术
啊? 只支持硅基流动?
2025 年 4 月 2 日
回复了 woodfizky 创建的主题 电动汽车 小米 SU7 高速碰撞爆燃报告
@needpp 外企可以维权, 国内企业也有铁拳. 大家都有美好的未来.
2025 年 3 月 29 日
回复了 4ra1n 创建的主题 Java 有没有什么思路对 Fat Jar 进行瘦身
甚至都可以不用到 agent, 直接重定义类加载器, 记录所有加载的类. 甚至可以直接在类加载器里开一个 zip 边记录边去重后往里边塞用到的类. 如果还想优化, 甚至可以记录方法调用(可以使用 javassist 向方法插入记录代码, 然后使用 butebuddy 运行时替换类的字节码, 比传统的 agent 应该简单一些), 把没用到的方法也剪掉. 但就算这样还是有个问题, 如何保证所有用到的类/方法被调用一遍了呢?
2024 年 12 月 17 日
回复了 Chelseawin 创建的主题 职场话题 今天过生日,但开会也被警告了........
每天下班打开 boss 直聘开刷呗, 骑驴找马
不退押金? 直接洗衣机空调全给他卖了, 马桶砸了, 下水道全用水泥堵了, 玩的就是一手鱼死网破.
2024 年 8 月 29 日
回复了 javak 创建的主题 Java Java hello world 确实就要占用 30M
dO yOu GuYs NoT hAvE mEmOrY?
这段代码应当改为
```java
CallSite applyAsInt = LambdaMetafactory.metafactory(
lookup.in(Phone.class),
"applyAsInt",
methodType(ToIntFunction2.class),
methodType(int.class, Phone.class, int.class, int.class),
getSum,
methodType(int.class, Phone.class, int.class, int.class)
);
```
因为调用 metafactory 方法时, 方法内部初步生成的 Lambda 字节码会被作为 lookup.in(Phone.class)的内部类加载, 加载时, 会调用方法 java.lang.invoke.InnerClassLambdaMetafactory#generateInnerClass, 具体逻辑形如
```java
//jdk21
return caller.makeHiddenClassDefiner(lambdaClassName, classBytes, Set.of(NESTMATE, STRONG), lambdaProxyClassFileDumper)
.defineClass(!disableEagerInitialization, classdata);
```
在 defineClass 中逻辑形如
```java
//jdk21
Class<?> lookupClass = lookup.lookupClass();
ClassLoader loader = lookupClass.getClassLoader();
//...
```
这里的第一句 lookup.lookupClass() 获取的就是 metafactory 的第一个参数 lookup.in(Phone.class)中的 Phone.class, 如果用原始的 lookup 的话, 会获取到 Object.class, 显然 Object 的 classloader 会找不到 Phone.class, 但是可以找到其他和它位于同个 classloader 中的类, 比如 String.class.
@gzlt 感谢感谢,辛苦了
这个历史聊天记录可以找回来吗?感觉上次对答状态很好,但是关了之后聊天记录找不到了。
2023 年 4 月 10 日
回复了 Ujob2022 创建的主题 酷工作 赴日 IT!自研、派遣招聘大量 IT 技术者!
@LcDraven 当然啦,现在行情就是在缅北分块打包再运往世界各地。
这个直接跟踪源码就理解了,比如 windows 下默认 gbk ,其他系统可能默认 utf-8 ,这些字符集都有一个重解析的问题。
具体来说就是解析时,有些 byte 组合是没有对应的字符的,而有些 byte 组合直接不符合编码标准,所以这些组合会被解析后映射到乱码字符。
这样经过转换为字符又转回数组,长度和值当然会不一样了。
要想保证这样两次解析不破坏信息,建议的方式是指定字符集解析为 iso8859-1 ,而为什么要选它呢?因为它仅有的 256 个字符和 byte 的 256 个值是严格一一对应的,这样无论如何互转,都不会产生映射混乱。

楼主可以自己试一试。

```java
var a1 = new byte[64];
new Random().nextBytes(a1); // 获取一些随机 byte 以供测试
System.out.println("a1:" + Base64.getEncoder().encodeToString(a1));
var tmp = new String(a1, StandardCharsets.ISO_8859_1);
System.out.println("a2:" + Base64.getEncoder().encodeToString(tmp.getBytes(StandardCharsets.ISO_8859_1)));

```
@GTim 如果 Lombok 不够,比如需要运算符重载,元编程,扩展方法,那就上 manifold https://github.com/manifold-systems/manifold
2022 年 12 月 18 日
回复了 iSNN 创建的主题 Java Java 怎么去掉这些奇怪的字符
感觉列举的例子有点少,你需要分析 abc 后边的奇怪字符的 ASCII 码,确定这些奇怪字符的码位范围,范围确定后就好办了,直接正则移除掉。当然如果奇怪的字符包括标点符号和英文字母以及汉字的话,就只能从前端找办法了。
Spirng bean 默认全局单例,也就是所有线程都共享一份 A 的实例,你如果在一处改了`param: B`,那所有线程下的成员变量`param: B`当然都会改变。
简单的做法就是用一个`Map`,以线程为键,`param: B` 为值,存放所有线程的`param: B`。
最后在 getter 和 setter 做下线程判断,就 OK 了。
2020 年 6 月 4 日
回复了 NUT 创建的主题 Java 一个 jvm 怎么同时运行多个 jar 包,有什么方案吗?
导出 war 包用 tomcat 部署?
1  2  
关于   ·   帮助文档   ·   自助推广系统   ·   博客   ·   API   ·   FAQ   ·   Solana   ·   4719 人在线   最高记录 6679   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 40ms · UTC 09:58 · PVG 17:58 · LAX 01:58 · JFK 04:58
♥ Do have faith in what you're doing.