V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  vvtf  ›  全部回复第 1 页 / 共 1 页
回复总数  17
108 天前
回复了 JinTianYi456 创建的主题 Java RedissonClient, 这种 lock 风格有隐患吗?
public final class RLockCloseable implements AutoCloseable {

private RLock lock;
private boolean locked;

public RLockCloseable(RLock lock) {
Objects.nonNull(lock);
this.lock = lock;
}

public static RLockCloseable of(RLock lock) {
return new RLockCloseable(lock);
}

public static void ifLocked(RLock lock, Consumer<Void> fn) {
try (RLockCloseable _lock = new RLockCloseable(lock)) {
if (_lock.tryLock()) {
fn.accept(null);
}
}
}

public boolean tryLock() {
// or use isHeldByCurrentThread
return locked = lock.tryLock();
}

public void close() {
if (locked) lock.unlock();
}

}


// usage
//1.
try (RLockCloseable lock = redisson.getLock("key")) {
if (lock.tryLock()) {
// TODO
}
}

//2.
RLockCloseable.ifLocked(redisson.getLock("key"), _t -> {
// TODO
});
intel nuc x15.
108 天前
回复了 cy18 创建的主题 硬件 求推荐高性价比大屏幕笔记本
要不看下 intel nux x15. 硬盘和内存自己装. i7, rtx3070, 2.5k, 7k.
136 天前
回复了 8629 创建的主题 Java 请教下 Java 热替换代码的技术
1. 通过 Agent 拿到 Instrumentation
2. 通过 Instrumentation#redefineClasses 替换类即可.
159 天前
回复了 dtgxx 创建的主题 问与答 flink 去重问题请教
if (value.toLowerCase().indexOf("a") > -1)
这个判断是我的测试代码,
你可以改成你的 json 方式判断.
159 天前
回复了 dtgxx 创建的主题 问与答 flink 去重问题请教
2 种思路,
1 是使用滑动窗口, 窗口大小为 24h,
然后去重;

2 是记录一个上次 a 出现的时间, 如果大于 24h 就重新计算, 小于 24h 就跳过.

下面是方法 1 的代码:
ds
.windowAll(TumblingProcessingTimeWindows.of(Time.hours(24)))
.process(new ProcessAllWindowFunction<String, String, TimeWindow>() {
private static final long serialVersionUID = 1L;

@Override
public void process(ProcessAllWindowFunction<String, String,
TimeWindow>.Context ctx,
Iterable<String> values, Collector<String> out) throws Exception {
boolean repeat = false;
for (String value : values) {
if (value.toLowerCase().indexOf("a") > -1) {
if (repeat) {
continue;
}
repeat = true;
}
out.collect(value);
}

}
})
.print();
163 天前
回复了 vvtf 创建的主题 程序员 请教一个 IP 代理访问问题
@defunct9
我试了 alias,
但是在 HTTP 服务获取到的 IP 地址始终是 31
179 天前
回复了 leiuu 创建的主题 程序员 maven 使用体验很痛苦
gradle 和 npm 的包管理是我见过最恶心的.只讨论包管理.
186 天前
回复了 shadow1949 创建的主题 程序员 SQL 苦手来请教各位大佬了。
# 5 天, 因为去掉周末, 所以倒推 7 天, 10 天倒推 14 天
select
avg(num)
from table_name
where `date`>date_sub({someday},interval 7 day)
and `date`<={someday} and weekday(`date`)<5;

# 10 天
select
avg(num)
from table_name
where `date`>date_sub({someday},interval 14 day)
and `date`<={someday} and weekday(`date`)<5;
```java

interface Rule<T extends S> {

T run(T... args);

default boolean enabled() {
return true;
}

default boolean async() {
return false;
}

}

@Order(0)
@Component
class RuleA implements Rule<SomeA> {

T run(T... args) {
// TODO
}

boolean async() {return true;}

}

@Component
class RuleChain {
@Autowired
private List<Rule> rules;

static ExecutorService pool = xxxx;

public void run(T... args) {

rules.stream().filter(Rule::enabled).filter(Rule::async).forEach(rule -> pool.execute(rule.run()););
rules.stream().filter(Rule::enabled).filter(rule -> !rule.async()).forEach(Rule::run);

}

}

```
我一直用 eclipse,
目前的工作机器是 8c32g 的,
eclipse 一个工作空间共有项目 82 个;(单模块,多模块,web 项目,flink 等);内存占用 4.5g;
使用起来完全流畅;
@FaneLau 我还是 7.0.21.
207 天前
回复了 SilenceLL 创建的主题 程序员 请教一下此场景下的数据如何存储和计算
我觉得修改历史数据不能直接修改那一刻的数据, 而是根据一个算法在最后增加一个和当前逻辑一样的变更数据;
就如 git 一样;
比如以前的数据是:
时间 /对象 /操作(依赖上一条)/结果
220701/A/+1/1
220702/A/+1/2
220703/A/-3/-1

那么现在是需要把
220701/A/+1/1
这一条数据改成
220701/A/+2/2
其实可以理解成是增加了 1
可以在后面增加一个
220704/A/+1/0
因为最后的节点是
220703/A/-3/-1
所有算出来结构是+1/0

大概思路是这样, 比如要聚合的话也可以做到;
这样做的好处历史可追溯;且不可变;
坏处是需要看业务需求是否满足;
比如我在 220704 查询 220702 的数据, 是返回 2, 还是返回 3,(+1).

如上.
**后续还需要根据这 N 个字符串快速得到位置**
这句话看不懂, 找到位置有啥意义? 位置放的也是字符串....
不过你的字面需求可以用一下代码试试:

int index = 0;
map<string, int> map;
string[] arr;
for ( str : strings) {
string key = md5(str);
int val = map.putIfAbsent(key, index);
if (null != val) {
continue;
}
arr[index ++] = str;
}


// get index by string
return map.get(md5(str));
1. ck 对硬件有要求;内存要求高;
2. 集群副本的话数据量太大 zk 又是一个炸弹; (推荐单节点 zk;)
3. qps 不会很高;
4. 不支持事务;不支持更新删除;(虽然有 update 和 delete 的 dml, 但是这个 ck 离线处理的;)
但是做 olap 报表分析确实不错;
217 天前
回复了 helee9199 创建的主题 Java 请教一下大佬.我们这个情况应该如何设计
@helee9199 不需要 copy 了再调整,
调整的东西分 2 种:
1. 核心通用调整, 比如是 X 里面某个核心功能有 bug, 这时修改 X 即可, 然后 A 的依赖版本修改一下;
2. 定制化调整, 比如 A 的某个表多一个字段, 只需改 A 即可;
其实你也可以理解成上面 @tramm 所说的.
A 或者 B 其实就是一个插件, 默认是在 X 里面实现的.
A 或者 B 可以重写或者替换;
220 天前
回复了 helee9199 创建的主题 Java 请教一下大佬.我们这个情况应该如何设计
我们是 X 是通用的; 有一个额外的组件是基于 jsr269 实现可以函数级别的定制化;
A 是基于 X 的, 也就是 dependency X 的. 所以如果 A 需要修改某个功能就修改某个函数即可; 不会修改 X; 增加功能也只需在 A 的项目里增加;
如果 X 出现 bug 了修改了 X 的代码, 再在 A 里面修改一下依赖即可;
这样每个项目的个性需求都是独立的没有影响;
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   广告投放   ·   实用小工具   ·   4466 人在线   最高记录 5497   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 56ms · UTC 01:28 · PVG 09:28 · LAX 17:28 · JFK 20:28
Developed with CodeLauncher
♥ Do have faith in what you're doing.