V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  Karte  ›  全部回复第 7 页 / 共 9 页
回复总数  174
1  2  3  4  5  6  7  8  9  
对于枚举的验证做法:
1. 硬代码, 通过 Assert 相关断言判断
2. 通过 @Min, @Max 设定枚举边界.
3. 通过实现 `ConstraintValidator` 对类进行校验.
4. 通过代理 + 反射的方式添加自定义处理注解, 然后通过定义 `spel` 表达式确认是否校验通过.
```java
@FieldValid(spel = "#p1.field != 0")
```

用硬代码虽然会略显丑陋, 但是在新增枚举时可以不用改动代码.
而 @Min, @Max 在枚举修改后需要同步修改, 如果没有相关注释说明会存在隐性 BUG.
使用 `ConstraintValidator` 相对比较好, 因为能够自定义实现校验逻辑. 但是验证范围只能为对应类, 如果不做继承的话
无法实现复用
代理 + 反射会有略微性能损耗, 而 `spel` 表达式需要额外学习, 且有点耗费性能 (通过反射获取数据). 在多参数时需要在编译时增加 `-parameters` 否则参数名无法写入, `spel` 就无法获取到对应的对象, 校验就失败了.
为什么这人提问有种高高在上的感觉?
232 天前
回复了 ysy950803 创建的主题 Android 小米应用商店恰烂钱啊!
就这个可能是下级主管定义的, 虽然是小米公司, 但是和雷布斯没啥实际关系, 因为这种决策是不会上传到上层的. 只能说下级主管的眼界太低.
你就看你的网口速率是多少.
如果时 100Mbps 看线是几芯的, 4 芯和 8 芯线还有线材质量都会影响到网速, 如果是 8 芯线看看是不是有一条断了, 8 芯只要有一根断会降速的.
如果线没问题, 查看路由器接入的 LAN 口和电脑上的网卡最高支持速率是多少. 路由器用说明书或者购买记录直接就能查到, 主板网口直接问客服就行了.
238 天前
回复了 aiyayaya 创建的主题 云计算 ipv4 上 ipv6 问题
@allplay 他说的没错, 域名解析 IPv6 地址就是用 AAAA, v4 才是 A. 建议补习下 DNS 相关知识, 切勿误人子弟.
239 天前
回复了 jiangboyueplus 创建的主题 Java Java8 使用 easyExcel 导入 4g 大小的 csv 文件
有谁会把 9 千万条数据一起做聚合的? 分批次聚合都能解决问题.
239 天前
回复了 jiangboyueplus 创建的主题 Java Java8 使用 easyExcel 导入 4g 大小的 csv 文件
核心问题是你要拿这些数据做什么?
换 debian 吧
@MuJian 不一定是防火墙, 也可能是它的 WEB 服务只监听了 192.168.1.1/24 CIDR, 而且只应用到了 LAN 口
你可能会想旁路由设定, 这个也不太可能. 流量虽然能够转发给 OW, 但是没办法转到 2.1 的网关. 也是死路一条.
唯一的办法就是网线或者无线连接到 OW 里面, 然后用手机刷机, 你用远程工具直接操作.
tips: IOS 目前不支持被控.
UBOOT 模式可能只允许 LAN 口下的设备进行访问. 也就是其默认的防火墙设置. 这种建议寄给你重新刷, 或者找个有电脑的朋友远程刷掉.
240 天前
回复了 mengjisang 创建的主题 Java 求助 CompletableFuture 怎么取消其任务
Interrupted 会告知线程当前是否被中断, 需要在 run() 方法中判断. 如果没有判断这个通知就是无效的, 线程依旧会执行. 还有如果收到了 interrupted 中断, 建议手动再次执行 `Thread.currentThread().interrupt();`, 这样可以让上层感知到线程被中断了.
248 天前
回复了 sxiaojian 创建的主题 操作系统 多年程序员 mac 转 win
Windows, 各种奇奇怪怪的 BUG. 别转 WIN!

1. 文件路径问题. windows 用的反斜杠 (\), 这时候你想用 bash 之类的脚本执行部分路径会出问题
2. 磁盘盘符. 由于有磁盘盘符, 导致 bash 脚本需要额外增加一个 /c/xx/xx/
3. 文件占用. 这是最头疼的, 莫名其妙的文件占用, 你得一个个把所有占用的都杀了才能删除或者更新这个文件. 最主要的是你不装工具你不知道有什么程序占用着这个文件. 相比 Linux 或者 Mac, 直接替换, 不要太方便.
4. windows 11 的桌面切换有 bug. 有时候你点击桌面 1, 但是显示的还是你选择之前的桌面. 动效也拖拉的要死.
248 天前
回复了 Curiosity777 创建的主题 Java 请教一个 Java8 stream 应用问题
```java
public class StreamTest {


private List<C> initialSequence() {
var res = new ArrayList<C>();

var rand = new Random(0);
for (int i = 0; i < 10; i++) {
C c = new C();
c.setId(i);
c.setCurrent(rand.nextInt(1000));
res.add(c);
}

return res;
}

@Test
public void stream() {
List<C> sequence = initialSequence();
System.out.println("before");
output(sequence);


C finalResult = sequence.stream().reduce(new C(), (pre, now) -> {
Integer accumulative = Optional.ofNullable(pre.getAccumulative()).orElse(0);
now.setAccumulative(accumulative + now.getCurrent());
return now;
});


System.out.println("after");
output(sequence);
}

private void output(List<C> sequence) {
for (C c : sequence) {
System.out.println(String.format("id: %s, acc: %d", c.getId(), c.getAccumulative()));
}
}

static class C {

private Integer id;

private Integer accumulative;

private Integer current;

public Integer getId() {
return id;
}

public void setId(Integer id) {
this.id = id;
}

public Integer getAccumulative() {
return accumulative;
}

public void setAccumulative(Integer accumulative) {
this.accumulative = accumulative;
}

public Integer getCurrent() {
return current;
}

public void setCurrent(Integer current) {
this.current = current;
}
}

}
```

无视 reduce 的结果即可.
254 天前
回复了 Curiosity777 创建的主题 Java 请教一个数据同步的问题
如果数据是写入之后无修改, 可以记录上次其获取到的数据 id, 然后将这个 id 之后的数据再发送给他. 有效减少查全库导致性能的下降.

如果修改不大建议最好做个 snapshot. 定时生成一个 snap 节点, 然后用户通过提交上次 snap 节点获悉所有数据更新状态.
@424778940 对, 我抛弃微软拼音了, 用 RIME. 随便找个配置配置了就完全 ok, 而且也不用担心隐私泄露.
我记得连中英文标点也有 bug. 主要是这样的:
1. 设置默认设定都为英文标点
2. 关闭切换中英标点快捷键
3. 然后在中文输入的情况下有时候还是默认中文标点, 而不是原先设定的英文标点.
(Win10).
用 netty websocket 试试. 多路复用技术可以减少句柄占用.
1  2  3  4  5  6  7  8  9  
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2808 人在线   最高记录 6679   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 28ms · UTC 13:15 · PVG 21:15 · LAX 05:15 · JFK 08:15
Developed with CodeLauncher
♥ Do have faith in what you're doing.