V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  jov1  ›  全部回复第 1 页 / 共 1 页
回复总数  20
19 天前
回复了 fakeellipse 创建的主题 深圳 深圳有啥好中医,治肾结石的
@fakeellipse #87 嗯,这些医生也开过,我感觉偏辅助用多一点,实际一点还是扩张输尿管之类的,多做跳跃爬楼这种起伏类运动,如果结石不大并且没有其他肾脏相关损伤,剩下就等自己排了,能排就排,没有必要过分担心,也不是不管它,定期复查就好了。
19 天前
回复了 fakeellipse 创建的主题 深圳 深圳有啥好中医,治肾结石的
@fakeellipse #80 因为看到有人说对着肾脏做超声波碎石次数对了会导致肾脏坏掉,我只有第一次做过,而且是掉下来后对着输尿管做的,不是直接对着肾脏,所以不确定这个说法真假,楼主也可以查查资料什么的。第二次掉下来后我选择自行排了,也和楼主一样不想手术或碎石,但是就算掉下来觉得纯中药估计不太管用,还是我第一次说的,扩张输尿管(盐酸坦索罗辛缓释胶囊),止疼,辅助一点排石中成药,这样如果真掉下来,我估计医生也开的差不多药方。
19 天前
回复了 fakeellipse 创建的主题 深圳 深圳有啥好中医,治肾结石的
@fakeellipse #80 对,忘记说了一个大前提,我是因为结石掉到输尿管才会疼,没掉下来其实没感觉的,我如果不是调下来也不知道有结石,这东西我的理解是如果还在肾脏没掉下来最后不要对着肾脏做超声波碎石,只有掉到输尿管了才建议对着输尿管做, 或者其他手术方案,而且你这个不大的话,也没引起其他问题,其实定期去复查就好了,等掉到输尿管疼了再开始处理。想让掉下来可以试试多跳或下山走楼梯,我的两次掉下来大概率是因为一次打羽毛球一次下山走楼梯不停颠簸下来的,然后不久就开始疼了。
21 天前
回复了 fakeellipse 创建的主题 深圳 深圳有啥好中医,治肾结石的
这个我刚刚经历,给楼主参考。结论就是如果结石不大可以吃药排,但是过程比较辛苦。因为会不定时很疼,还是建议去医院找医生开药,实在难受就超声波碎石之类的,单纯喝水估计难。
然后我感觉主要是吃药(扩张输尿管还有止疼),然后多喝水,多跳。
也是前几年结石当时是超声波碎石,今年 2 月份腰疼的感觉来了,我就知道是结石掉下来那种疼,忍了一个星期不行,去看急诊,ct 显示就是结石,然后也是 5mm 。
医生就开的盐酸坦索罗辛缓释胶囊,这是是扩张输尿管的,可以帮助结石往下掉,然后布洛芬止疼也不管用,开的洛芬待因片,还开了一个防止泌尿感染和 2 盒中成药类似排石颗粒那种。
我反正觉得这次不大,吃药和多喝水应该能排,然后差不多 1 个月还是快 2 个月,每天都不会不定时疼,慢慢才感觉一点点不疼了,以为自己好了。
然后又过了一段时间,感觉尿不尽,尿的时候还有点疼,最后 5 月下旬有一天终于感觉尿出来了,估计是结石卡在膀胱口了,我还以为我膀胱炎或前列腺炎了。
以上详细经历,供楼主参考,
不行,我看到这个想象了下画面,真的笑了好久 https://i.imgur.com/krir4IG.png
这个数据看起来更像是对序列化后的对象做了 toString()操作返回的字符串,肯定不是标准的 json ,即便带有类信息比如存到 redis ,使用 jackson 序列化完也应该是这样的结构,不会出现 "java.util.ArrayList"这种的
{
"@type": "com.xxx.xxx.XXX",
"ids": [
111,22
],
"name": "你好"
}
看起来线程池在业务方法里面每次创建吗,这个建议放全局,然后如果要等一批任务异步执行完,可以这样
```
List<CompletableFuture<String>> futures = inputs.stream()
.map(input -> CompletableFuture.supplyAsync(() -> process(input), executorService))
.collect(Collectors.toList());

// 等待所有任务完成并收集结果
return futures.stream().map(CompletableFuture::join).collect(Collectors.toList());
```
或者还是用线程池,但是用 CountDownLatch 等待任务执行都可以。
225 天前
回复了 bler 创建的主题 程序员 一个权限控制问题
rbac 能解决一部分垂直越权问题,也就是对于接口或其他资源的访问控制, 比如限制某人有某接口、按钮操作、什么什么的权限,但是解决不了水平越权和数据权限问题,比如大家都能看订单,有的希望按照组织架构,级别高的可以看所有子级的,这种有的方案是在对于资源记录所属组织,比如资源上增加该资源所属组织路径,/a/b, 查询时候按照这个过滤,有的是大家都有查看订单权限,如果我通过?orderId=xx 访问一个不是我的订单的详情或者什么数据,这种有些用多租户,就是需要控制数据查看的表都增加租户 id 这样的字段,进行全局 sql 拦截过滤数据,或者不合适多租户需求的业务就根据具体业务写在具体业务代码里,目前我自己是没有找到很通用的关于数据权限的模型或框架工具。
我是之前在阳朔旅拍的,中间没有加什么价格,一般额外加的钱就是选片时候,一般套餐的精修和相册都不会特别多,选片时会给你推荐,比如可以多加一些精修相片,加的多了就需要一个相册,相册呢也可以升级成更好更大的那种,类似这样的,你们自己把握就行,丰俭由人。跟楼上说的一样,提前商量好,注意别吵架,开心第一,相册后面都是压箱底了。
248 天前
回复了 chenfang 创建的主题 程序员 集群如何控制 QPS?
假设这样一个场景,你的某个业务需要调用一个第三方接口,但是第三方接口有 QPS 限制,比如 20/每秒,
但是你的服务是集群部署的,通过 guava 的令牌桶可以实现单机的 QPS 控制,比如 RateLimiter.create(20, 1, TimeUnit.SECONDS);
如果部署 3 个集群,那么 QPS 最大可能为 60/每秒,这样就超过三方接口限制。
那么这种情况可以拆分为如何将 20 合理的分配到 3 个集群上,简单点使用 xxl-job ,根据分片总数和当前分片序号,以及你需要限制的 QPS ,计算得到每个分片的大小,替换到令牌桶上就可以了。

下面这个分配总数 count 就是你程序里面要定义的 qps 了。
RateLimiter.create(count, 1, TimeUnit.SECONDS);

```
public static void main(String[] args) {
// xxl-jpb 返回集群分片信息
ShardingUtil.ShardingVO shardingVO = ShardingUtil.getShardingVo();


int totalSize = 20; //集群自己配置总的 qps
int shardingTotal = shardingVO.getTotal(); // xxl-job 返回的当前分片总数
int shardingIndex = shardingVO.getIndex(); // xxl-job 返回的当前分片序号

int count = getShardingCount(totalSize, shardingIndex, shardingTotal);
System.out.println("分片 " + shardingIndex + " 分配数量: " + count);
}

public static int getShardingCount(int totalSize, int shardingIndex, int shardingTotal) {
int baseSize = totalSize / shardingTotal; // 每个分片的基本数量
int remainder = totalSize % shardingTotal; // 余数部分

// 前 remainder 个分片分配 baseSize + 1 个元素,之后的分片分配 baseSize 个元素
return shardingIndex < remainder ? baseSize + 1 : baseSize;
}
```
253 天前
回复了 abstime 创建的主题 Java 文件上传后解压缩的问题
之前用的 hutool 另外 api 解压,windows 和 linux 都正常运行,可以试下
```
// 解压目录
File extractFile = new File(extractPath);
Extractor extractor = CompressUtil.createExtractor(
CharsetUtil.CHARSET_GBK,
FileUtil.file("d:/test/compress/test.zip"));

extractor.extract(FileUtil.file(extractFile));
// 获取目录 extractFile 下文件做其他处理。。。
```
320 天前
回复了 Vesc 创建的主题 数据库 求 SQL 优化建议
@Vesc 如果打算程序先查 B ,然后再查 A ,这个没关系,比如原来可能是这样
select
a.row1 ,a. row2
from a
join b on b.order_id = a.order_id
<where>
a.age > 18
<if test="name != null and namelength()>0">
and (a.name = 'xx' or b.name = 'xx')
</if>
</where>


那你程序就是先单独查 b 的,比如 name 是需要 ab 表都查的,,再将这个 orderIds 作为条件二次查询 a
如果 name 不为空的情况下,就先查 b ,然后返回 order_id(看你描述,ab 是通过 order_id 关联的)
select order_id
from b
where .name = 'xx'

然后
select
a.row1 ,a. row2
from a
<where>
a.age > 18
<if test="name != null and namelength()>0">
and (a.name = 'xx' or a.order_id in
<if test="orderIds != null and orderIds.size() > 0">
<foreach collection="orderIds" item="orderId" separator="," open="(" close=")">
#{orderId,jdbcType=BIGINT}
</foreach>
</if>
)
</if>

</where>
320 天前
回复了 Vesc 创建的主题 数据库 求 SQL 优化建议
@Vesc 如果打算程序先查 B ,然后再查 A ,这个没关系,比如原来可能是这样
select
a.row1 ,a. row2
from a
join b on b.order_id = a.order_id
<where>
<if test="name != null and namelength()>0">

</where>
where
那你程序无非就是先一天 sql 查询
320 天前
回复了 Vesc 创建的主题 数据库 求 SQL 优化建议
这个要看具体情况,比如你查出来的列表不需要 b ,只需要 a 的字段,可以考虑下面这两种,结合执行计划看下索引命中情况。如果 ab 联表查询慢,但是单独查 b 的情况不慢,也可以程序中先单独根据条件查符合 b 的 order_id 再执行 a 的查询

select distinct a.xx, a.xx,a.xx
from a
join b on a.order_id = b.order_id
where
a.xx = ?
and b.xx=?
或者
select a.xx, a.xx,a.xx
from a
where a.order_id in (
select order_id from b where order_id is not null
and xxx=? and xxx=?
)
346 天前
回复了 atfeel 创建的主题 程序员 大佬都在什么验证码方案?
如果用的云厂商的短信发送,我这个目前用的腾讯云,配套有相应的安全策略配置之类的,比如配置发送频率,ip 限制等,同时也提供验证码服务,就是你描述的拖动类验证码,不过要收费不是免费的,这种拦截的事情交给他们来
2024-07-03 09:21:34 +08:00
回复了 guch99999 创建的主题 Java 求教 springcloud 集成 websocket 报错 1009.
WebSocket 缓冲区小,传入数据太大,试试找的例子,构建 websocket 客户端连接的时候,配置下大小

WebSocketContainer container = new WsWebSocketContainer();
// 设置二进制消息缓冲区大小(以字节为单位)
container.setDefaultMaxBinaryMessageBufferSize(5120000);
// 设置文本消息缓冲区大小(以字节为单位)
container.setDefaultMaxTextMessageBufferSize(5120000);
// 设置会话空闲超时时间(以毫秒为单位)
container.setDefaultMaxSessionIdleTimeout(15 * 60000L);
StandardWebSocketClient client = new StandardWebSocketClient(container);
2024-04-29 09:37:30 +08:00
回复了 jov1 创建的主题 程序员 请教一个数据库或代码的唯一性设计问题
@Rickkkkkkk
@xhawk
@fuyufjh 嗯,感觉大家提供意见和参考,之前也问了 gpt ,给出的方案是类似 path 级别这样的,但是测试几个场景后还是会存在我说的那种错误判断包含的情况,试着在这基础上不断调整,感觉可以满足,这样写可以避免这种情况(1,2,2),传入(1,2,23)
select CONCAT_WS(',',ifnull(a,''), ifnull(b,''), ifnull(c,'')) as uniqueKey
from t
where t.uniqueKey = #{uniqueKey,jdbcType=VARCHAR}
or t.uniqueKey like CONCAT(#{uniqueKey,jdbcType=VARCHAR}, ',%')
or #{uniqueKey,jdbcType=VARCHAR} like CONCAT(t.uniqueKey, ',%')
if (BooleanUtils.isTrue(xx.getEnableVoice()) {
// 校验 voiceContent 是否为空
} else {
xx.setVoiceContent(null);
} 应该也可以实现 ConstraintValidator 来自定义校验规则,拓展注解之类的,只是目前是类似这样处理的
也会有类似问题,通用的用提供的注解声明,这种情况判定来动态处理验证的,我目前放在业务实现里面校验处理,因为可能还需要对数据处理,比如 enableVoice 不等于 true ,如果前端传入了 voiceContent ,后端其实还类似需要清空这个值,那么顺手可以把校验 enableVoice=true 时 voiceContent 的非空校验做了,
类似于
if (BooleanUtils.isTrue(xx.getEnableVoice()) {

}
2023-11-14 11:35:01 +08:00
回复了 lijianmin321 创建的主题 分享创造 V 站老哥太热情了, Airy 永久会员加送 9000,凑到 1 万
支持一下,希望能体验用上
关于   ·   帮助文档   ·   自助推广系统   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2677 人在线   最高记录 6679   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 28ms · UTC 09:36 · PVG 17:36 · LAX 02:36 · JFK 05:36
Developed with CodeLauncher
♥ Do have faith in what you're doing.