- 博客(384)
- 资源 (19)
- 收藏
- 关注
原创 我的CSDN 4096创作纪念日
我高中时候语文都是属于偏差的那种,作文也是很普通的水平,而且我性格偏内向,很长一段时间都不怎么会表达(高考的时候800字的作文都不知道怎么写)。但坚持写博客10年多,给我一个主题(前提是我熟悉的),我坐下来很容易写几千字,而且还能保证质量部那么水,反思10年前和现在的变化,我总结是有两方面的因素让我改变这么多,一是疯狂阅读,二就是持续写作。阅读主要是输入,看到别人如何总结和表达,以及汲取更多的信息。
2024-04-01 07:54:59 2410 4
原创 关于ffmpeg height not divisible by 2的错误
例如,如果有一个奇数宽度的视频帧,最右边会有一个无法形成完整块的列像素。的特殊之处在于,它会确保计算出的宽度或高度是偶数,这是为了满足某些视频编码器的要求,它们需要偶数的分辨率尺寸。这对于编码像H.264这样的视频时特别重要,因为(如前所述)这些编码器使用基于块的编码算法,其要求块的尺寸(通常是16×16像素或其它偶数尺寸)能够完全适应视频帧的尺寸。解决方案当然很简单,那就是将分辨率强行指定成偶数即可,在当我思索难道要放弃-1这个好用的自适应参数,在指定宽为1280时,自己去计算出一个高来的时候。
2024-03-17 16:40:50 596
原创 使用Certbot解决https证书自动更新的问题
实际上确实就这么简单,这一步中certbot会解析你的nginx配置,然后申请相应域名的证书,并修改nginx配置文件将证书配置写入,然后还会触发nginx的reload让证书生效,这时候你的网站https就已经在使用新的https证书了,打开chrome浏览器你就可以看到类似的证书声明。,还有几个其他的域名用做小工具之类的,之前一直使用阿里云免费https证书,一次申请可以用一年,但现在阿里云免费证书缩短到3个月了,而我又有好几个域名,导致我每隔几周就必须重新申请配置一次https证书,很麻烦。
2024-03-10 12:32:08 855
原创 XINDOO的2023年总结
这篇文章是我的第十年年终总结,本来想很正式的写,由于元旦偷懒,春节又特种式狂奔四个城市给自己和妹妹订婚,横跨几千公里,几乎一半的假期都在路上。我23年的年终总结难产至今,最后赶在2月结束前开始动笔。
2024-02-27 21:56:24 1406 8
原创 Spring Cache简明教程
Spring Cache是Spring框架提供的一个抽象层,专注于提供一种透明的方式来添加缓存功能到Spring应用程序中。它不是一个具体的缓存实现,而是提供了一套创建和管理缓存的标准,并能够与多种缓存实现无缝集成,例如Ehcache、Caffeine、Redisson等。本文详细介绍了Spring Cache的使用和注意事项。Spring Cache作为Spring框架提供的缓存抽象,允许通过声明式注解轻松地在应用中集成缓存,以此提升性能和减少开发时间。Spring Cache不是缓存实现。
2024-01-29 22:34:51 1085
原创 如何正确使用缓存来提升系统性能
本文讨论了使用缓存提升系统性能的实践,包括确定数据是否适合缓存、优化缓存配置以及缓存命中率的重要性。同时,文章还探讨了处理缓存引起的数据一致性问题的策略,旨在帮助读者有效地管理缓存,以提升系统效率并降低相关风险。
2023-12-14 08:22:28 1377 1
原创 Java CompletableFuture使用示例
总结下本文,Future尽管有用,但在功能上还是相对简单。不仅提供了获取执行结果的能力,它还增添了异常处理、手动完成、链式操作、结果组合和回调等强大功能。异常处理: 利用和handle方法,可以简化异常处理流程,使其更加直观和易于管理。手动设置结果允许我们在任意时间点手动设置结果,增加了灵活性。链式操作: 通过链式操作,我们可以将不同的异步操作以流水线的方式串联起来,编写复杂的并发逻辑变得更加简单。结果组合和allOf方法能够将多个的结果合并,为我们提供了更多处理异步操作结果的方式。
2023-12-03 20:50:45 1115
原创 软件开发中的抓大放小vs极致细节思维
而反观支付宝替换Oracle数据库的事,他们处理的是金融相关的数据,也就是和钱相关的数据,比如给你少算一分钱,这不是一分钱的问题,而是信任的问题,一旦出问题公司可能就黄了,所以他们出问题的成本是非常高的。首先,我作为研发,大部分情况下的决策都是“不做”,因为做了会显著增加我的工作量,软件开发过程中也存在二八定律,80%的功能只占开发时间的20%,而剩余20%的功能需要额外投入80%工作量。这仿佛是个无解的哲学问题,下面我给出我对这个问题的答案,仅仅是一份我自己的观点,大家也可以在评论区探讨下。
2023-11-25 22:21:18 7624 4
原创 OpenAI Assistants-API简明教程
以上就是Assistants-API整体的开发流程,了解了这些流程后,大家可以很容易构建出像ChatGPT-Plus的私人助理。当然Assistants-API目前还是在beta阶段,有很多功能不完善,比如不支持流式返回、不支持图片生成、不支持插件调用……,甚至run的状态还需要轮询来获取……。另外我在写本文demo的时候,发现Retrivel的文本内容召回成功率非常低,导致账单计算成功率很低(也可能是我给的文本格式的问题)。
2023-11-19 22:36:49 2771 2
原创 OpenAI的多函数调用(Multiple Function Calling)简介
就在上周,OpenAI在开发者大会上,升级了函数调用的功能,在新的gpt-3.5和gpt-4模型中,可以在单轮对话中调用多个函数了,而且在python SDK中也提供了并发函数调用相关的接口,无疑这将大幅减少大语言模型和现实世界之间交互的开发复杂度,接下来就让我用一个具体的示例,带你了解下OpenAI的新特性。这里额外说下,上面的三个函数调用是串行调用,如果每个函数都比较耗时的话,会增加整体的调用时长,而在最新的assistant api中增加了并行执行函数的api,这个我们放到下篇文章中讲解。
2023-11-18 22:22:27 2007 1
原创 ffmpeg视频截取时DTS乱序导致无法截取的问题
因为原始视频不是连续录制,所以就有一定的概率出现A视频的末尾和B视频的开始拼接在同一个m3u8中的可能。在这种情况下,A视频末尾一帧的DTS和B视频首帧的DTS肯定是不连续的,截取时就会报"DTS 0 < 1986554 out of order",最终截取失败。开始以为是hls中的视频片段有问题,后来和同事一起排查发现,所有失败的情况下,执行ffmpeg命令截取时都会报。,顺着这个信息我们发现但凡失败的,都是我们在m3u8里拼接了另外一个视频的部分片段导致的。
2023-11-04 18:02:19 748
原创 如何使用ffmpeg制作透明背景的视频
数字人的视频我是使用的腾讯智影生成带绿幕的视频,要实现透明背景,有个很关键的信息需要知道,不是所有的视频格式(视频编码)都支持透明背景,首先我们最常用的mp4就是不支持(不管是h264还是h265)都不支持,目前支持透明背景的只有少部分视频编码,比如google的vp9(webm)格式,上图中我用就是webm+vp9编码的视频。另外一个问题是webm的格式也并不普及,比如腾讯智影导出只支持mp4,像剪映甚至final cut pro这样专业的剪辑软件都无法编辑导出透明背景的webm格式。
2023-10-28 22:08:12 2681 11
原创 Java21虚拟线程实践
虚拟线程是一种轻量化的线程封装,由jvm直接调度和管理。反之普通的线程其实是调用的操作系统的能力,对应的是操作系统级的线程。相对虚拟线程来说操作系统级的线程持有成本很高,而且受操作系统调度和管理的。实际在普通多线程情况下,如果出现IO阻塞,这个线程就必须得跟着阻塞,这个线程对应的操作系统就被阻塞,而他却持有大量的内存。另外,要处理大量的IO就得新建更多线程,而大量的线程会在操作系统切换时因上下文切换导致大量的CPU被浪费。
2023-09-24 20:14:15 7011 7
原创 spring-kafka中ContainerProperties.AckMode详解
本文是一个深入讨论如何通过优化 Kafka 的消费者确认模式来提升 I/O 密集型系统性能的案例研究。首先分享了一个实际的性能问题,通过改变一行代码中的 Kafka 消费者确认模式配置,系统性能提升了几十倍。这引出了文章的主题:Spring-Kafka 中的七种确认模式(包括两种手动确认模式和五种自动确认模式)的详细介绍和比较。作者不仅解释了每种确认模式的工作原理,还提供了关于何时以及如何选择适合的确认模式的实用建议。这篇文章是那些需要处理大量 I/O 操作,特别是使用 Kafka 的开发人员、架构师的
2023-09-15 23:17:22 1032 3
原创 如何在地图上寻找最密集点的位置?
举个简单例子,给定一个点,如果其他某个点距这个点距离近,密度值就高,反之就远,这个点到其他所有点的密度和求平均就是这个点最终的密度值,这里我们可以直接选用距离的倒数来当成核函数,不过这个核函数是线性的,最终结果和我求平均值差异不大。但我们实际在线上使用的时候,遇到了两个特殊的case。前人也是这么想的,于是就有了很多非线性核函数,而我最终使用了高斯核,调整好核函数的带宽后,其他点带来的密度值也会随着距离,以正态分布的方式衰减如下图,举例越远纵轴的坐标值越低,图中的sigma就是我们核函数的里的带宽。
2023-08-26 21:36:44 587
原创 IO密集型服务提升性能的三种方法
在面对IO密集型系统性能优化时,我们可以通过三种主要的方式来进行:批处理、缓存和多线程。这三种方式各有其优点和适用场景。批处理可以通过减少网络IO次数,显著减少网络传输的延迟时间,从而提升系统性能。但是,它需要我们仔细分析和设计我们的数据处理流程,才能找到合适的批处理策略。缓存则是通过存储频繁访问的数据,减少了对慢速存储(如磁盘或网络)的访问,从而提升性能。但是,使用缓存时需要考虑数据的一致性问题,以及如何选择合适的缓存淘汰策略。
2023-08-12 20:26:17 561
原创 职场中的基本归因错误和自利归因
在评价他人时,避免陷入基本归因错误有个简单的方法,就是换位思考,把自己带入ta的位置,看是否依旧取得同样的结果,如果结果相同那大概可以确定其实是外部环境导致的,而不是其能力和动机的问题。不过换位思考也是一件很难的事,有些事你曾经没有做过或者经历过情况下,会低估事情的复杂度和难度,这也是很多时候一件事自上而下说很简单,自下而上说很难的原因。避免自利归因对个人来说其实更难,因为这是一种思维误区,光靠自身是很难跳出来的,还得依靠外部的帮助,只能说遇到事情首先要压制住自己反驳的欲望,寻求其他人的意见。
2023-07-23 20:08:31 363
原创 使用javax.validation.constraints校验参数合法性
尽管提供了丰富的基础注解,但有时我们还需要进行一些特定的校验操作。这时,我们可以通过自定义注解和校验器来实现这些需求。以下是一个示例,展示了如何创建一个自定义注解@Password首先,创建自定义注解@PasswordString message() default "密码必须包含至少一个大写字母、一个小写字母和一个数字";Class <?Class <?然后,创建自定义校验器=.*[a-z])(?=.*[A-Z])(?} }最后,在需要校验的字段上添加自定义注解@Password。
2023-07-02 20:53:51 2773
原创 Java Optional:让你的代码更优雅
Optional 是一个简单的容器类,用于封装可能为空的值。它可以帮助我们避免使用显式的 null 检查,并提供一种更声明式的方法来处理可能为空的值。通过使用 Optional,我们可以更容易地编写可读、可维护的代码,并减少潜在的 NullPointerException。
2023-06-24 16:28:26 456
原创 如何使用ChatGPT提升自己的“码”力?
ChatGPT是功能强大的工具,用于代码评审、优化、释义、解决方案、生成、设计模式和架构建议,以及学习新知识。虽无法完全替代人类,但可提高工作效率。注意其局限性,结合其他工具和人工审查使用。对初级工程师有用,优化代码和学习工具,提供广泛知识和指导。掌握ChatGPT的使用方法,更好应对技术挑战,不被取代。
2023-05-28 21:18:46 10977
原创 使用ffmpeg拼接两张图片
通过本篇文章的介绍,我们了解了使用FFmpeg拼接两张图片的方法。可以看到出来,使用ffmpeg将两张图片拼接在一起还是相当简单的。希望这篇文章能够对大家有所帮助,如果您有任何疑问或者建议,欢迎在评论区留言。
2023-05-03 21:45:25 2339 1
原创 ThreadPoolExecutor——高效处理并发任务的必备良器
ThreadPoolExecutor是Java中用于管理线程池的一个类,它能够创建和管理线程池,以提高应用程序的性能和可靠性。它具有灵活的线程池管理、高效的任务处理和可靠的异常处理等特点。尤其适用于任务量大、执行时间长、任务类型多样的应用场景,例如Web服务器、数据库连接池、文件处理等。通过合理地设置线程池参数、处理任务和异常、监控和调优线程池,可以提高应用程序的性能和可靠性,避免任务丢失或线程池崩溃的问题。
2023-05-01 16:36:05 2448
原创 从CPU的视角看 多线程代码为什么那么难写!
本文从CPU和内存的发展历程出发,分析了多线程编程中数据一致性和线程安全问题的产生原因。为了解决这些问题,编程语言中引入了各种关键词和工具,合理使用这些工具能在关键操作上保证线程安全,提高代码运行速度。
2023-04-29 10:29:17 1756
原创 使用ffmpeg缩小视频体积的几种方式
随着视频制作的普及,视频文件的体积也越来越大,给存储和传输带来了很大的困扰。为了解决这个问题,我们可以使用FFmpeg这个强大的工具来缩小视频的体积。本文将介绍三种常用的方法:调整视频的分辨率、调整视频的码率和使用更高效的视频编码格式。
2023-04-16 19:46:37 7073
原创 Linux parallel 命令使用手册
GNU Parallel是一个强大的并行计算工具,可以帮助您加速命令行作业的执行,提高系统资源利用率,以及处理大量的数据和作业。总之,GNU Parallel是一个非常有用的工具,可以帮助您更好地管理和处理数据,提高工作效率和准确性。如果您需要处理大量的数据和作业,或者需要利用多个CPU核心和计算机节点来执行作业,那么GNU Parallel是一个非常好的选择。GNU Parallel是一个强大的并行计算工具,可以帮助您加速命令行作业的执行,提高系统资源利用率,以及处理大量的数据和作业。
2023-04-09 22:43:44 3932
原创 为什么说过早优化是万恶之源?
作为一名在IT领域摸爬滚打多年的工程师,我深有体会地认识到过早优化是软件开发中的一大陷阱。在软件开发的初期,我们可能会过于关注代码的性能问题,而忽略了代码的可读性、可维护性和可扩展性。这种做法可能会导致代码的复杂性增加,降低代码的可读性和可维护性,甚至可能会浪费大量的开发时间和资源。在软件开发过程中,我们应该避免过早优化,而是优先考虑代码的可读性、可维护性和可扩展性。当需要进行性能优化时,应该在代码的基础上进行优化,通过分析性能瓶颈、优化算法和数据结构等方法来提高代码的性能和效率。
2023-04-02 17:11:15 19327 8
原创 人工智能未来是否会取代人类程序员?
当然,换个视角思考,人工智能的进步也在推动程序员工作的变化。人工智能可以帮助程序员完成一些重复和耗时的任务,从而提高工作效率和产出,比如像Github推出的CoPilot,据说在某些场景下可以提升60%的编码速度。但是,程序员的工作内容并不仅仅是编写代码。这个话题在近期来引起了很大讨论,尤其是当GPT4发布后,其展现出来的能力让很多岗位的从业者战战兢兢,比如像程序员,甚至有大佬跳出说三年 AI一定会取代程序员。综上,尽管人工智能在某些方面具有威胁,但作为一个整体,人工智能很难完全替代人类程序员。
2023-03-19 21:27:33 1174
原创 深入理解Spring的事件通知机制
Spring的事件通知机制是一种灵活方便的组件通讯方式,在不同的业务场景中都有广泛的应用。通过本文的介绍,我们可以了解到Spring事件通知机制的原理、使用方法和代码示例,以及将其与其他Spring组件集成的一些技巧。希望这篇文章能够帮助大家更深入地理解Spring框架。
2023-03-19 08:34:46 610
原创 Linux xargs命令介绍
Linux 中的 `xargs` 命令是一个非常有用的命令行工具,可以将一些参数集合传递给其他命令作为参数,并利用指定的命令进行处理。它可以帮助我们批量处理文件,执行一些需要多个参数的命令,并且支持并发操作。
2023-03-18 21:28:13 3116
原创 Java高并发之CyclicBarrier简介
CyclicBarrier 是一种非常有用的同步工具,它可以让多个线程在一个屏障点处等待,直到所有线程都到达该点后,才能继续执行。CyclicBarrier 可以用于协调多个线程的执行,以便它们可以在某个点上同步执行。CyclicBarrier 还支持可重用、回调函数和额外操作等高级用法,可以满足各种同步需求。
2023-03-12 21:58:09 410
原创 Java中使用HashMap时指定初始化容量性能一定会更好吗?
一些Java编程老手在做CodeReview时,都会告诉其他人,使用HashMap时建议指定容量大小,原因是指定容量后,代码性能会更好一些。后来随着阿里Java开发手册在业内广为传播,这一点早已深入人心,我自己也早已习惯在使用HashMap时指定容量大小。但我今天突发奇想,想知道指定容量和不指定容量时性能究竟有多少的差异,测试部分测试数据的结果让我大跌眼睛,有些情况下指定容量的性能还比不指定容量时差!!
2023-02-04 23:45:14 748
原创 如何用ffmpeg截取视频片段&截取时间不准确的坑
之前在工作中,有遇到需要程序化截取视频片段的场景,这里使用ffmpeg命令行就可以很容易实现,这里也记录下我们使用过程中遇到的坑,希望对大家也有所帮助。这里的参数-c:v copy指的是复用原始视频的编码格式,如果想切换视频编码也可以直接指定,比如(关于修改视频和音频编码的问题,后续会继续出一篇博客)。这里需要注意的是。
2023-01-31 00:19:06 6606 4
原创 XINDOO的2022年年终总结
已经好几个月没有认认真真写一篇博客了,借着年底静下心来认认真真写一篇年终总结,这也是我人生中第10篇的年终总结了。先看下去年立的flag,不用想去年立的flag一个都没完成。首先1 算是勉强及格;2 redis的博客一篇没写;3 一行代码没写;4 立flag时带的人因公司调整 run了(你懂得);5 不要问我什么时候结婚,问就是明年。如果用一句话概括下过去的一年,那就是,当然我也知道在这样的大环境下,我的状态虽然不算太好,但也算还可以的了,希望大家在2023年能有更美好的工作和生活吧。
2022-12-31 21:16:27 8900 15
原创 使用ffmpeg将视频转成HLS(m3u8)格式
HLS (HTTP Live Streaming)是苹果推出的视频流协议,HLS格式的视频包含一个m3u8文本文件,以及众多的.ts的视频片段,而m3u8文本文件的作用就是将这些ts片段索引起来。这里有个坑,当我用上面命令行生成hls视频后,我发现每个ts的时长不是我指定的2s,而是10s。查阅资料后发现,ts切片的大小严格依赖于原始视频的GOP大小,因为必选保证一个ts内至少包含一个GOP,否则这个ts分片就无法使用。这个参数的作用就是让视频GOP大小为2s,这样就能保证ts分片大小是我们想要的2s了。
2022-11-14 10:03:33 4982
原创 用ffmpeg将视频转成gif动图
今天分享一个我制作表情包的技巧。现在视频编辑的门槛已经非常低了,只要装个剪映稍微学一下,很容易就能把你想要的内容剪出来,真的是有手就行。但是视频剪出来的视频是无法直接用做表情包的,只有gif格式的动图才是真正可以用的表情包。我这里分享一些用ffmpeg来生成gif动图的命令行示例,助力大家生产出更多有趣的表情包。是不是相当简单。
2022-10-30 22:12:15 7872
原创 在Springboot HandlerInterceptor中获取GET和POST请求参数
当然上游请求的时候可以在请求参数里带上他们的业务来源,我们直接根据业务来源路由即可,实际上最开始我们也是这么做的。说一个最近工作中遇到的事,我们系统因为业务发展的问题,针对不同用户群体做了两套系统(B系统和S系统),底层基础功能一样,但偏上层的业务有差异,最近我们想将底层基础功能提供一个统一的入口,所以就新起了一个类似业务网关的服务,把两个系统的接口封装一层,提供一个统一的接口出去,然后B业务的请求转发的B系统,S业务的请求转发到S系统。幸运的是,我们自己其实可以通过请求中的id信息来判断出是哪个业务的。
2022-10-22 18:20:19 5498 5
原创 做得好 vs 做得快?
今天聊一个有意思的话题,假如老板让你做个新的系统,你是选择先把功能做起来至于扩展性和可靠性以后再考虑,还是设计一个非常牛逼的系统架构,可以满足未来很多年的发展。前一段时间,某个CSDN技术交流群里有个小伙伴问用户系统怎么设计,然后就有另外的小伙伴上来就给了很高大上的建议,什么用户、角色、权限、分库分表…… 都给考虑了,算算人力,没几个月做不出来。然后我以半开玩笑的口吻说:别搞那么复杂,先用一个用户表,再加上权限和角色字段区分就可以了,,没有什么问题是加一个字段解决不了的,如果有就再加一个字段。
2022-10-07 19:41:57 5090 27
workflow.zip
2019-08-19
《OpenCL异构计算》全书所有插图及实现代码
2013-04-19
红黑树 red-black
2013-04-19
acm Hdoj 离线版 1000-3000题 可搜索查找
2012-10-07
算法导论 第三版英文版 有索引
2012-07-02
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人