阅读视图

发现新文章,点击刷新页面。

JUC下CountDownLatch多线程读取数据

什么是countDownlatch

CountDownLatch是一个同步工具类,它通过一个计数器来实现的,初始值为线程的数量。每当一个线程完成了自己的任务,计数器的值就相应得减1。当计数器到达0时,表示所有的线程都已执行完毕,然后在等待的线程就可以恢复执行任务。

方法详解

CountDownLatch(int count):count为计数器的初始值(一般需要多少个线程执行,count就设为几)。
countDown(): 每调用一次计数器值-1,直到count被减为0,代表所有线程全部执行完毕。
getCount():获取当前计数器的值。
await(): 等待计数器变为0,即等待所有异步线程执行完毕。
boolean await(long timeout, TimeUnit unit): 此方法与await()区别:

  1. 此方法至多会等待指定的时间,超时后会自动唤醒,若 timeout 小于等于零,则不会等待
  2. boolean 类型返回值:若计数器变为零了,则返回 true;若指定的等待时间过去了,则返回 false

CountDownLatch应用场景

  1. 某个线程需要在其他n个线程执行完毕后再向下执行
  2. 多个线程并行执行同一个任务,提高响应速度

实际案例

实现在无多条件查询的接口下完成多条件查询,即批处理调用接口查询,为了保证获取的性能问题,此处需要使用此技术。
前提是该接口支持该数量级的qps。

List<String> ids = new ArrayList<>(Arrays.asList("陈", "王", "李"));
List<String> nameList = Collections.synchronizedList(new ArrayList<>());
CountDownLatch countDownLatch = new CountDownLatch(ids.size());
for (String s : ids) {
    ThreadPoolUtil.execute(() -> {
        // 此处方法为调用外部接口,根据姓氏条件模糊查询用户列表,获取包含此姓氏的所有名字列表(假设没有多条件查询下)
        List<String> exhibitionDetailsSplit = SignUtil.advancedQueryMultipleConditions(s);
        nameList.addAll(exhibitionDetailsSplit);
        countDownLatch.countDown();
    });
}
try {
    countDownLatch.await();
} catch (InterruptedException e) {
    log.error("exception: {}", e.getMessage());
}

ThreadPoolUtil工具类

@Slf4j
public class ThreadPoolUtil {

    private static ExecutorService executor = Executors.newCachedThreadPool();

    public static void execute(Runnable task) {
        try {
            executor.execute(task);
        } catch (Exception e) {
           log.error("线程池异常:{}", e.getMessage());
        }
    }

    public static void shutdown() {
        executor.shutdown();
    }
}

SadTalker让图片说话

SadTalker

西安交通大学开源了人工智能SadTaker模型,通过从音频中学习生成3D运动系数,使用全新的3D面部渲染器来生成头部运动,可以实现图片+音频就能生成高质量的视频。内含多个踩坑的解决办法,值得玩一玩。

功能

可以根据一张图片、一段音频,合成面部说这段语音的视频。图片需要真人或者接近真人。目前项目已经支持stable diffusion webui,可以SD出图后,结合一段音频合成面部说话的视频(抖音常见的数字人)

环境准备

SadTalker相关软件和程序

  1. 安装Python3.8
  2. 配置ffmpeg环境
  3. 切换阿里pip源
pip config set global.index-url https://mirrors.aliyun.com/pypi/simple
  1. 解压SadTalker.zip启动webui.bat

Arthas线上诊断

场景

遇到个线上问题,调用三方接口报错:“请求需要使用token认证;请检查请求Header中是否填了正确的Authorization”。
该问题很明显是token填写格式问题,由于是商店应用本地调试需要更改很多配置,所以线上调试会更快。

Arthas

线上服务器执行

curl -O https://arthas.aliyun.com/arthas-boot.jar
java -jar arthas-boot.jar

之后会列出服务器正在运行的jar程序

[INFO] Found existing java process, please choose one and input the serial number of the process, eg : 1. Then hit ENTER.
* [1]: 22023 xxx.jar
  [2]: 18084 xxx2.jar
  [3]: 21167 org.apache.catalina.startup.Bootstrap

假如报错的为程序1,输入1后回车

此时为终端输入模式,输入如下命令定位该问题,之后将会解释下命令内容和给出命令文档:

watch com.rawchen.tools.PooledHttpUtils getData -x 2 -b -s -n 5

此时终端为监听模式,只要再次触发com.rawchen.tools.PooledHttpUtils包下的getData方法,将会准备输出该方法中的入参,出参,抛出异常,类中字段值。至多5条。

Press Q or Ctrl+C to abort.
Affect(class count: 1 , method count: 1) cost in 82 ms, listenerId: 4
▌

最后得到的数据:

method=com.rawchen.tools.PooledHttpUtils.getData location=AtExit
ts=2024-03-22 11:21:05; [cost=6.452475626433412E10ms] result=@ArrayList[
    @Object[][
        @String[621d8594dc],
        @HttpConfig[headers=[Authorization: Beareru-eeharKx8hpbaLPojKdKJcak3FcK8F5l9W014Kw20j], cookies=null],
        null,
    ],
    @ApiController[
        log=@Logger[Logger[com.rawchen.alipan.controller.ApiController]],
        parentFileId=@String[root],
        apiUrl=@String[https://api.baidu.com],
        apiUrlV3=@String[https://api.baidu.com/v3],
        oauthTokenUrl=@String[https://baidu.com/token],
        openApiUrl=@String[https://baidu.com],
        refererURL=@String[https://baidu.com],
        passwordFileName=@String[pwd],
        appId=@String[5dde4e1bdf9e4966b387ba58f4b],
    ],
    @ArrayList[
        @PanFile[PanFile{fileId='621d85af96156951062f4cb4ad0b06fb5', type='folder', name='测试文件夹1', parentFileId='621d8594dc9e9ad3b63e47d9b599edbb04', createdAt='2022-03-01T02:32:15.410Z', fileExtension='null', size=0, url='null', previewUrl='null', encrypted=false}],
        @PanFile[PanFile{fileId='621d85b6c6f56dac771645f2b413b39ae', type='folder', name='测试文件夹2', parentFileId='621d8594dc9e9ad3b63e47d9b599edbb04', createdAt='2022-03-01T02:32:22.717Z', fileExtension='null', size=0, url='null', previewUrl='null', encrypted=false}],
    ],
]

分析

由此便可知问题了,可以看出请求头出现Authorization为Bearer后加token,拼接时出现少空格情况。因为我们统一在common层做的处理,此时才知道是引入的common为旧版依赖,所以代码有缺陷导致的。

总结

其实这只是Arthas最基础的线上方法观测功能,还有很多例如方法监测、线上调试、JVM运行状态、线程堆栈、反编译、解决冲突等。可以查看Arthas官方文档

dashboard

monitor

profiler

用户案例

https://github.com/alibaba/arthas/issues?q=label%3Auser-case

原理分析

attach连接JVM、实现应用代码隔离类隔离、支持OGNL
https://blog.csdn.net/lym152898/article/details/131345547

可期

AI生成摘要:2023年匆匆忙忙过去,2024年已经过去一个月。作者回顾了自己在过去一年半中所经历的压力、情绪、热爱和自由,以数码照片的方式记录下这些经历。尽管日常工作重复,但作者探索了户外活动、阅读、摄影、运动等新的兴趣爱好。在思考过去和未来之际,作者意识到生活中的细节和热爱是写作的灵感来源。展望2024年,作者希望生活丰富多彩有条有理,并制定了周更博客、徒步旅行、学习新技术和影视后期制作的计划。

说明

  匆匆忙忙的2023之后才发现2024已经过去1个月了。博客尘封了多久我也记太清楚。才回过头去看已是大半年了,提起笔,不对敲着键盘,才发现再也找不到在大学时候研究学习各种好玩的技术,参加各种好玩的比赛,并记录下这些好玩的事情,结识了一个又一个朋友...踟躇很久才决定了,总结一下202207-202312吧,也算是毕业工作后一年半首次总结。

  在这一年半中有过压力,有过EMO,有过每个人都经历过的怅惘,也有过把山海拍遍的热爱和自由。但不管怎样,很多难以忘记的这些星星点点,我都将它以数码照片方式存印。正是这些关于挚友、阅读、运动、旅行、关于失而复得喜悦,关于冥思苦想的明悟,纵横交织。看了本书,名字是《云边有个小卖部》,有句是:货架上满载着岁月和夕阳。我们都是被行程选择的赶路人,面对湖光山色,还是值得贪恋几许的吧。也许我们终点一致,也肯定一致,但是我们何时到达,会遇到什么谁也不知道。

  我感觉写总结应该还挺有意义的,它不像是工作总结一样毫无感情。我再想为什么想写这个话题呢,我从业的是互联网软件开发,对于经常爱逛科技博文的应该或多或少知道阮一峰博客。得空就会看看有什么新科技,偶然间看到一个仓库:这个仓库收集国内网友的2023年个人总结 ,从其他博主文章中也能收获很多,互联网上每个人都是一个小点点,我们想逃离中心化的大平台,博客的意义,就是这其中的一座座灯塔吧,照亮每一个逃离的旅行者。

回顾

  但如果要说 2023 年有哪些变化,我第一反应是开始喜欢户外,其它的是日复一日的工作,然后摸鱼,甚至于这篇文章都是我在春节放假前最后一个工作日摸鱼时写的,感觉摸鱼对于写作效率的提升是有很大帮助的。
以及:
还是会在某个深夜开始 emo,然后睡不着觉,胡思乱想。
还是会在漫无目的的刷完手机后开始假装自责
还是会在每天习惯背着笔记本电脑回家让它躺着

但真就这样么?我尝试在回忆的原野上捕捉一只只断线的风筝,偶尔还是能看到一些被风吹断线后,飘散在地上的零散纸片
开始用Kindle阅读器看点喜欢的书籍了。
喜欢上了摄影航拍,在海边公园悠闲的听歌跑步
每周一次的羽毛球,让身体畅快淋漓
每周一山一海,逃离城市里的生活

茫然惊醒,原来 24 年已经过去了一个月,我好像一直在虚度光阴,回过头来,晚霞依旧笼罩在这座城市,我也逐渐意识到,只有真正热爱生活,去挖掘,体会生活中的那些细节,写出来的文字自然而然就会有真情实感。我也时常会去想,如果我现在60岁,如果我23岁那年毕业后出来做了旅行博主...如果我23岁那年毕业后出来开了咖啡店...如果我23岁那年毕业后出来...
但是没有如果,我只能尽量追寻我的方向,现实与理想永远是一个鸿沟。

预期

2024我的愿望是:让生活多姿多彩有条有理
2024我的计划是:周更、开始重装徒步、学习互联网新技术、学习影视后期与航拍技巧

最近买的goods

JBLGO3

20230714
音质非常Nice,低音很有感觉,颜值高续航给力。

七彩虹战斧RTX4060Ti

20230629
比较新的显卡,2023年5月18日发布。性能挺强,属于中端显卡,比3060TI显卡提升10%左右。支持DLSS3。
3100多入的。

适马56F1.4

20230512
大光圈下也很锐,几乎无紫边和畸变。适用于我的半画幅相机。等效85mm了,适用拍摄半身人像。







XBOX Series

20230421
操作手感不错。

小米手环8

20230419
磁吸式充电,拆卸式表带设计很方便。屏幕比前一代大了很多。

换电池

给红米K40 AirPods2换新电池
感觉设备满血复活。

鹿雁科考线-我又来啦

深圳漂亮的海边很多,这里也应该被人记住。溪谷、山野、丛林、草甸、沙滩、礁石、大海满足你对山和海的所有憧憬。

山海径

一条鲜为人知的登山看海路线,一条风景超级无敌美丽的山海径,延绵的七娘山山脉超五星的无敌海景。漫步高山草甸行摄山海间眺望最美风景。沿着山脊阶梯往下有5个观景台,每个观景台景色各不相同。

上次去的时候留有遗憾,山上都是雾。再次去就能感受景色真的太美啦。

徒步的下半场是杨梅坑,《美人鱼》拍摄地位于杨梅坑鹿嘴山庄,电影取景的“人鱼洞”是必打卡的地方,陡峭的悬崖加上激流的海浪。真的有几分巴厘岛佩尼达的感觉。在这里,登高俯瞰参差的海岸,超级无敌干净的海水岸边被海浪冲刷的岩石。

线路情况

杨梅坑-鹿嘴山庄-鹿雁径-鹿嘴山庄-杨梅坑
徒步路程约8公里,爬升600米上山,难度★★,风景:★★★★★。需要准备徒步鞋、速干衣裤、双肩包、防晒用品、防晒帽、防晒衣、雨伞/雨衣、零食等。

香港麦理浩径 - 只有徒步才能看到的风景

麦理浩劲

除了中环尖沙咀、维多利亚港,除了城市商场你还知道哪些香港不一样的风景呢?
香港麦理浩劲,听说是全球20大最美徒步地,也只有到了才知道。
咸水湾露营,水确实咸,沙滩野猪出没是真的。
​前两段难度不高,风景绝美。

线路情况

莲塘口岸-西贡-咸田湾-塔门岛

徒步路程约15公里,爬升300米,难度★★,风景:★★★★★。需要准备徒步鞋、速干衣裤、双肩包、防晒用品、防晒帽、防晒衣、雨伞/雨衣、零食等。

​如果想去一定要在天气好的时候。期待下一次出发。

第一次去HK只能说泰棒啦

终于来赴香港的约了,下次坐叮叮车去海边看日落。

攻略

办理港澳通行证就不用说了,一般在户籍所在地办理,在深圳的话有居住证也可以网上预约办理。
进关口前买张八达通,那边几乎地铁公交小店基本通用。可以兑换几百港币。需提前开启漫游,买个境外流量包,移动好像28一天。香港最方便的交通工具还是地铁,其它有大巴、叮叮车、地铁、天星小轮、的士这几种。

去哪

旺角 尖沙咀 星光大道 铜锣湾 维多利亚港 中环...

摄影:尼康Z30+适马56F1.4

徒步山海径-杨梅坑,打卡星爷美人鱼拍摄地

深圳漂亮的海边很多,这里也应该被人记住。溪谷、山野、丛林、草甸、沙滩、礁石、大海满足你对山和海的所有憧憬。

山海径

一条鲜为人知的登山看海路线,一条风景超级无敌美丽的山海径,延绵的七娘山山脉超五星的无敌海景。漫步高山草甸行摄山海间眺望最美风景。沿着山脊阶梯往下有5个观景台,每个观景台景色各不相同。

徒步的下半场是杨梅坑,《美人鱼》拍摄地位于杨梅坑鹿嘴山庄,电影取景的“人鱼洞”是必打卡的地方,陡峭的悬崖加上激流的海浪。真的有几分巴厘岛佩尼达的感觉。在这里,登高俯瞰参差的海岸,超级无敌干净的海水岸边被海浪冲刷的岩石。

线路情况

杨梅坑-鹿嘴山庄-鹿雁径-鹿嘴山庄-杨梅坑
徒步路程约8公里,爬升600米上山,难度★★,风景:★★★★★。需要准备徒步鞋、速干衣裤、双肩包、防晒用品、防晒帽、防晒衣、雨伞/雨衣、零食等。

比较可惜的是那天鹿雁径上山后就只剩下雾了,下次再去吧。

PhotoShop 2023 Beta AI处理 & 安装破解

距离Adobe软件公司首次将图像编辑及数字绘画软件Photoshop推出到大众面前已经过去35年,最近该公司又再次书写了属于Photoshop的历史新篇章。

  最近,Adobe 宣布 Photoshop(Beta)迎来更新,新增「创意填充(Generative Fill)」功能,生成式AI绘图由Adobe Firefly提供支持,Adobe的创意生成AI模型系列。
这个版本让用户可以以非破坏性的方式进行图像组合和生成。这一创新功能将为用户带来更加灵活和创造性的体验,让您的创作变得更加自由和多样化。

  生成计算都是云端处理,不用考虑本地机器图形处理器性能,Photoshop(Beta)测试版目前不太稳定,如果出现联网问题,无法使用AI功能,需要开启梯子。目前仅支持Windows11系统,Mac还要等等。该版本是一个令人兴奋的发展,它有可能改变我们使用图像编辑软件的方式。然而,它是否能满足所有用户的需求,还需要进一步的测试和反馈。

实测创成式填充

原图

三种生成填充效果选择

生成taxi出租车

去除出租车

安装教程

1.下载Adobe Creative Cloud安装,会提示登录,选择创建账户,用Gmail邮箱注册(其他邮箱账号都不行!!!),国家/地区选美国。
https://www.adobe.com/cn/lead/creativecloud/business.html

2.账号创建完成,首次登录会有Adobe服务弹窗,一定要取消勾选AGS,之后等待安装。

3.安装后进入主页,点击左侧导航进入Beta应用程序,找到PhotoShop(Beta)版本,点击试用安装

4.安装完成后点击菜单文件里的退出Creative Cloud,打开AdobeGenP激活工具,点击Search,搜索本机Adobe未激活产品
下载: AdobeGenP.zip

5.搜索完成,点击Parch,打上激活补丁即可去除7天试用限制

星际飞船 Starship · SpaceX BFR“超重型”火箭

“You want to wake up in the morning and think the future is going to be great - and that's what being a spacefaring civilization is all about. It's about believing in the future and thinking that the future will be better than the past. And I can't think of anything more exciting than going out there and being among the stars.”
“您想在早晨醒来,并认为未来将是美好的-这就是航天文明的全部意义所在。这是关于相信未来,并认为未来会比过去更好。我想不出要去那里和在星空之中更令人兴奋。”

— SPACEX的ELON MUSK


BFR超级火箭

Starship 于 2023 年 4 月 20 日首次使用其超重型助推器从德克萨斯发射升空。虽然这艘近 400 英尺高的飞行器飞行了三分多钟——实现了前所未有规模火箭的几个里程碑——但星际飞船在发射过程中也失去了多个引擎,对地面基础设施造成严重破坏,最终未能在发射后到达太空。火箭开始翻滚并在空中被摧毁。

Starship 是 SpaceX 开发的 SpaceX BFR“超重型”火箭的完全可重复使用的第二级和航天器。它是一种长期载货和载客航天器,也是 BFR 运载火箭第二级和综合有效载荷部分。该火箭总高度约120米,由底部70米高、配备了33台“猛禽”发动机的“超重型推进器”和顶部50米高的飞船船舱"星舰"组成,这个首次发射成本约30亿美元的“巨无霸”被美国媒体认为是人类史上运载能力最大的火箭。

19年开始关注SpaceX,之前写过一篇文章 你相信1小时能到达世界任何角落吗。如果将火箭代替飞机跨国航行,并实现多级回收,将为地对地运输带来无限可能。众所周知,马斯克对登录火星有很强的执念,他创造SpaceX最主要的目标就是要实现人类的火星移民。可以说,Starship的此次发射也是为将来登录火星做准备的。

马斯克曾公开声称,一旦Starship试验成功,就将启动规模化生产。如果以每年建造100艘,那在10年内就能打造一个由1000艘Starship组成的太空舰队,有望将10万人送到火星。

梦想总是要有的,万一实现了呢。

最后,就让我们畅想一下人类大规模移民火星的那一天吧!

星舰炸了仍是成功

SpaceX及其创始人马斯克都认为,这算是一次成功的试射。该领域专家也认同这样的说法。这次发射也获得中国舆论关注,其中夹杂着喝彩与嘲讽。有网友评价道,“成功上不了热搜,失败了肯定可以”。尽管没能按该计划进行,但SpaceX的创始人马斯克祝贺SpaceX团队进行了“一次激动人心的试射”,并表示这为“几个月后的下次试射”提供了经验。在星舰发射前,马斯克就表示指望首飞就成功是不理智的,只希望不要在发射台发生爆炸。SpaceX的工程师蒂斯(Kate Tice)也说,没损坏发射台本来就是“我们唯一的愿望”。

马斯克的39页火星计划 making_life_multiplanetary-2017.pdf
成为星际物种 making_life_multiplanetary_transcript_2017.pdf

❌