FeelTouch Labs
技术架构、人工智能、区块链与密码学
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
自动化Ai Agent全流程实现【设计+代码】
本文探讨了人工智能代理(AI代理)如何通过自动化复杂的业务流程来帮助企业提高效率和降低成本。AI代理具有适应性、智力、自主性和可扩展性等特点,能够处理非结构化信息、在定义参数范围内做出判断、协调多个系统或利益相关者,以及处理变量输入和异常。文章详细介绍了AI代理在文件处理、客户服务、人才招聘和财务运作等领域的应用,并提供了一个逐步实现发票处理自动化的案例。此外,文章还强调了实施AI代理自动化的优势,包括效率提升、成本降低、准确性和可扩展性的改进,并提出了实施最佳实践,如从高影响力流程开始、设计人机交互、优先原创 2025-05-14 13:15:48 · 561 阅读 · 0 评论 -
RAG之大规模解析 PDF 文档全流程实战
构建可扩展的 PDF 处理系统需要精心组合各种技术、工具和质量控制机制。通过实现类似本文所述的流程,您可以高效地从大量 PDF 文档中提取结构化数据,将非结构化内容转换为有价值的、机器可读的信息。原创 2025-05-13 22:26:30 · 505 阅读 · 0 评论 -
全球238个国家和地区的国家简称+全称【完整版】
【代码】全球238个国家和地区的国家简称+全称【完整版】原创 2025-05-07 14:10:35 · 429 阅读 · 0 评论 -
应用接入Stripe支付实战【2025版+配置+服务端+客户端+生产级+架构图+代码】
本文提供了Stripe支付接入的全流程实战,设计和实现了生产级可用方案,提前踩了所有的坑,可将开发时间由1一个月缩短至1天,大大提高研发效率。原创 2025-05-02 17:29:52 · 2309 阅读 · 1 评论 -
AI应用中基于okhttp3实现SSE技术的各种解决方案实现
SSE 是指 Server-Sent Events(服务器推送事件),是一种基于 HTTP 的、服务器向客户端单向推送数据的技术。它允许服务器实时发送数据到客户端,而不需要客户端明确地请求。SSE 主要用于实现服务器向客户端的实时更新,比如新闻更新、股票报价、实时监控等场景。SSE 的优点在于其简单性和易用性,特别适用于那些需要服务器向客户端实时推送信息的场景。虽然它与 WebSocket 相比有一些限制(比如单向通信),但对于一些应用场景而言,SSE 是一个简单而有效的选择。单向通信。原创 2024-11-20 14:33:55 · 1206 阅读 · 0 评论 -
深析Springboot服务单机到底能抗多大的并发
1s的时间到底可以正确处理响应多少http请求。原创 2024-10-18 14:40:49 · 947 阅读 · 0 评论 -
Http 实现请求body体和响应body体的双向压缩方案
有时请求和响应的body体比较大,需要进行压缩,以减少传输的带宽。原创 2024-07-03 17:55:04 · 1131 阅读 · 0 评论 -
quit unexpectedly and Cannot open all the JetBrains‘ applications
Exception Type: EXC_CRASH (Code Signature Invalid)Exception Codes: 0x0000000000000000, 0x0000000000000000Exception Note: EXC_CORPSE_NOTIFYCrash from the IntelliJ IDEA report looks similar to https://youtrack.jetbrains.com/issue/IDEA-282172Check the be原创 2024-04-22 11:29:24 · 472 阅读 · 0 评论 -
Kafka硬核干货
为了弥补性能差距,现代操作系统积极的使用主内存进行磁盘缓存,以便在访问磁盘时不进行直接I/O 同时,即使进程维护了数据缓存,数据也很可能在PageCache中重复,这会导致数据缓存两次 此外,Kafka构建在JVM之上。Kafka官网数据 在 具有 6 * 7200rpm SATA RAID-5阵列的JBOD配置上,线性写入的性能约为600MB / sec,但随机写入的性能仅为100k / sec,相差超过6000倍。Broker :Kafka 集群包含一个或多个服务器,这种服务器被称为 broker。原创 2024-03-28 01:22:20 · 1256 阅读 · 0 评论 -
Twitter 爬取Media图片、视频和封面涉及到的关键Graph SQL应用分析
核心需要解析出 extended_entities -> media -> media_url_https 和 variants。原创 2024-03-11 19:22:50 · 428 阅读 · 0 评论 -
SMTP发送邮件时抱No appropriate protocol错误分析和解决方案
Properties mailProp = mailSender.getJavaMailProperties();原创 2023-09-18 11:44:34 · 746 阅读 · 0 评论 -
Git命令全览
Git使用全部命令原创 2023-08-13 14:52:52 · 174 阅读 · 0 评论 -
Centos7下tensorflow 2.12无法找到NVIDIA Tesla T4 GPU终极解决方法
不要用太新的版本,官方一般还支持不好,参考资料也少。原创 2023-06-27 00:45:08 · 1261 阅读 · 0 评论 -
Centos下 ffmpeg Unknown encoder ‘libx264‘终极解决方法
1.Unknown encoder 'libx264'2.Unrecognized option 'crf'. Error splitting the argument list: Option not found原创 2023-06-26 01:20:03 · 1805 阅读 · 0 评论 -
为什么数据库字段出现了不期望的值2147483647
明明向数据库mysql插入了7500000000,为什么结果是2147483647?原创 2023-05-28 16:45:17 · 416 阅读 · 0 评论 -
Go test run正常运行 debug转圈卡住不执行问题原因和解决方案
这类问题并不是经常的出现,但是一旦遇到,往往令人不知所措,进而为了解决问题四处尝试,导致白白浪费时间,那么遇到这种情况,一般是什么原因?有如何解决的呢?主要有以下两类当然,笔者是在GoLand执行test的时候遇到的此类问题,也许读者会在使用idea的时候也会遇到同样问题,到我想解决思路是一致的,上面的方法也可以参考。另外,实际上笔者遇到的第二种情况更多些。原创 2023-05-28 16:07:07 · 1920 阅读 · 0 评论 -
Go 编程模式代码
程序虽然可以跑通,但是这样编程的方式并不严谨,如果我们需要强制实现接口的所有方法,那么我们应该怎么办呢?Go语言的编程器并没有严格检查一个对象是否实现了某接口所有的接口方法,这种编程模式在Go 的标准库有很多的示例,最著名的就是。接口方法,只要满足这个规模,就可以被。是一个接口,你需要实现他的一个。变量(没人用),其会把一个。9. 泛型编程 借助。原创 2023-05-24 22:11:28 · 805 阅读 · 0 评论 -
Go易错知识集
事实上,Go中的所有的自定义函数(包括声明的函数和匿名函数)都可以被视为闭包。当此预声明的iota出现在一个常量声明中的时候,它的值在第n个常量描述中的值为n(从0开始)。在加载一个代码包的过程中,所有的声明在此包中的init函数将被串行调用并且仅调用执行一次。当一个延迟调用语句被执行时,其中的延迟函数调用不会立即被执行,而是被推入由当前协程维护的一个延迟调用队列(一个后进先出队列)。后,所有在执行此函数调用的过程中已经被推入延迟调用队列的调用将被按照它们被推入的顺序逆序被弹出队列并执行。原创 2023-03-02 23:34:47 · 167 阅读 · 0 评论 -
Centos 7 成功安装PostgreSQL 14过程全记录
PostgreSQL 是一个免费的对象-关系数据库服务器(ORDBMS),在灵活的BSD许可证下发行。PostgreSQL 开发者把它念作。PostgreSQL 的 Slogan 是 "世界上最先进的开源关系型数据库"。原创 2023-02-08 21:18:57 · 469 阅读 · 0 评论 -
Go 退出协程 goroutine 场景优雅处理
超时返回时的陷阱超时控制在网络编程中是非常常见的,利用 context.WithTimeout 和 time.After 都能够很轻易地实现。time.After 实现超时控制利用 time.After 启动了一个异步的定时器,返回一个 channel,当超过指定的时间后,该 channel 将会接受到信号。启动了子协程执行函数 f,函数执行结束后,将向 channel done 发送结束信号。原创 2023-01-06 19:06:21 · 725 阅读 · 2 评论 -
Go 逃逸分析
堆内存与栈内存Go 程序会在 2 个地方为变量分配内存,一个是全局的堆(heap)空间用来动态分配内存,另一个是每个 goroutine 的栈(stack)空间。与 Java、Python 等语言类似,Go 语言实现垃圾回收(Garbage Collector)机制,因此呢,Go 语言的内存管理是自动的,通常开发者并不需要关心内存分配在栈上,还是堆上。但是从性能的角度出发,在栈上分配内存和在堆上分配内存,性能差异是非常大的。在函数中申请一个对象,如果分配在栈。原创 2023-01-06 11:52:30 · 506 阅读 · 0 评论 -
Go语言精华总结【万字长文】
在 main() 函数的 goroutine 中执行到 go running 语句时,归属于 running() 函数的 goroutine 被创建,running() 函数开始在自己的 goroutine 中执行。select 机制不是专门为超时而设计的,却能很方便的解决超时问题,因为 select 的特点是只要其中有一个 case 已经完成,程序就会继续往下执行,而不会考虑其他 case 的情况。P:Processor的缩写,一个P代表执行Go代码片段所需要的资源(上下文环境),即用户线程。原创 2023-01-05 17:46:39 · 830 阅读 · 0 评论 -
Go 互斥锁(sync.Mutex)和读写锁(sync.RWMutex)性能分析
唤醒的 goroutine 不会直接拥有锁,而是会和新请求锁的 goroutine 竞争锁的拥有。这种锁称之为 多读单写锁 (multiple readers, single writer lock),简称读写锁,读写锁分为读锁和写锁,读锁是允许同时执行的,但写锁是互斥的。读写锁的存在是为了解决读多写少时的性能问题,读场景较多时,读写锁可有效地减少锁阻塞的时间。读锁之间不互斥,没有写锁的情况下,读锁是无阻塞的,多个协程可以同时获得读锁。写锁与读锁是互斥的,如果存在读锁,写锁阻塞,如果存在写锁,读锁阻塞。原创 2023-01-05 11:41:42 · 1300 阅读 · 2 评论 -
Go内存对齐的必要性和对性能影响
如何计算结构体占用的空间可以使用 unsafe.Sizeof 计算出一个数据类型实例需要占用的字节数。Args 由 2 个 int 类型的字段构成,在 64位机器上,一个 int 占 8 字节,因此存储一个 Args 实例需要 16 字节。Flag 由一个 int32 和 一个 int16 的字段构成,成员变量占据的字节数为 4+2 = 6,但是 unsafe.Sizeof 返回的结果为 8 字节,多出来的 2 字节是内存对齐的结果。原创 2023-01-04 19:16:31 · 520 阅读 · 0 评论 -
Go 空结构体 struct{} 使用场景
事实上,对于集合来说,只需要 map 的键,而不需要值。即使是将值设置为 bool 类型,也会多占据 1 个字节,那假设 map 中有一百万条数据,就会浪费 1MB 的空间。一是节省资源,二是空结构体本身就具备很强的语义,即这里不需要任何值,仅作为占位符。在部分场景下,结构体只包含方法,不包含任何的字段。无论是 int 还是 bool 都会浪费额外的内存,因此呢,这种情况下,声明为空结构体是最合适的。因此呢,将 map 作为集合(Set)使用时,可以将值类型定义为空结构体,仅作为占位符使用即可。原创 2023-01-04 18:12:38 · 534 阅读 · 0 评论 -
Go for 和 range 的性能差别
range 在迭代过程中返回的是迭代值的拷贝,如果每次迭代的元素的内存占用很低,那么 for 和 range 的性能几乎是一样,例如 []int。但是如果迭代的元素内存占用较高,例如一个包含很多属性的 struct 结构体,那么 for 的性能将显著地高于 range,有时候甚至会有上千倍的性能差异。对于这种场景,建议使用 for,如果使用 range,建议只迭代下标,通过下标访问迭代值,这种使用方式和 for 就没有区别了。如果想使用 range 同时迭代下标和值,则需要将切片/数组的元素改为指针,才能不原创 2023-01-04 15:51:22 · 581 阅读 · 0 评论 -
Go 切片的本质与数组
数组的长度是固定的,长度是数组类型的一部分。如果超过了当前切片的容量,就需要分配新的内存,并将当前切片所有的元素拷贝到新的内存块上。因此为了减少内存的拷贝次数,容量在比较小的时候,一般是以 2 的倍数扩大的,例如 2 4 8 16 …因此很可能出现这么一种情况,原切片由大量的元素构成,但是我们在原切片的基础上切片,虽然只使用了很小一段,但底层数组在内存中仍然占据了大量空间,得不到释放。复杂度为 O(N)。切片操作并不复制切片指向的元素,创建一个新的切片会复用原来切片的底层数组,因此切片操作是非常高效的。原创 2023-01-04 14:42:55 · 663 阅读 · 0 评论 -
x-api接口鉴权架构设计和实现【万字+深度】
x-api鉴权API可以实现身份认证、流量控制等各个模块的校验,判断其请求的合法性等。原创 2022-09-16 20:30:00 · 1251 阅读 · 0 评论 -
App加速读取显示IPFS图片的解决方案和实现
对于进入Web3世界的同学来说,NFT并不是一个陌生的概念且很火,NFT基于区块链具备不可更改性,落脚到具体的NFT上就是NFT自身所对应的tokenUri的不可修改性,但是仅仅tokenUri不可修改是不够的,因为tokenUri所指向的内容才是一个具体NFT的全部表示,这其中image字段是最直观重要的。可以看出,这是一个基于IPFS网络存储的图片。值得一提的是,页可以通过这个控制台,查询对应CID的相信信息,其中最为有用的的是查询CID为目录的情况,这样可以一眼看出下面有什么文件,如下图所示。...原创 2022-07-28 01:30:12 · 801 阅读 · 0 评论 -
GoLang实现将16进制大数转换为10进制整数的解决方案
ParseUint: parsing "***": value out of range解决方案原创 2022-05-21 23:36:31 · 2101 阅读 · 0 评论 -
一场惊心动魄Go拉取Gitlab私有仓库提示exit status 128;Permission denied (publickey)问题排查和解决方案
问题背景1. 一切正常开发Go服务过程中,经过一个周末,周一回来上班执行go mod tidy 和 go get ...升级依赖库,都会报出exit status 128: git@gitlab.******.me: Permission denied (publickey).错误。在之前都是OK的。2. 通过git 与私仓进行拉取和push都是没有任何错误的3.确定被依赖库已经被正确的发布,因为其他同事可以正常更新。具体问题github.com/onsi/ginkgo/config:原创 2022-05-13 23:49:54 · 5734 阅读 · 7 评论 -
Git步步进阶---Git tag操作全解析
为什么要下这篇Git tag文章呢?虽然已经使用Git很长时间,并且自认为对Git的操作也到了掌握的相当好的程度,但是当服务端部分的开发转向Go时,突然需要进行Git tag操作的地方多了起来,因为Go module的依赖需要先打tag法release才行,那么不能游刃有余的驾驭,感觉就不爽,所以有了下文。查看tag查看本地当前分支的taggit tag需要注意的是这个只能查询本地的tag.查看远程的tag git ls-remote --tags origin需要注意的是这个只原创 2022-05-01 13:06:19 · 1268 阅读 · 0 评论 -
Support for password authentication was removed on August 13, 2021.解决方案和Git多源多帐号高效追踪实现
目录0.问题现象1. 问题原因潜在优点:2. 解决方案3.快捷提交提交代码4.高效多源多帐追踪git仓库5. 总结0.问题现象之前用用户名和密码提交代码时OK的,在2021 年 8 月 13之后需要改成token提交了,不然就会报出Support for password authentication was removed on August 13, 2021. 错误提示。更多信息如下:➜ lib git:(main) git config user.n原创 2022-04-01 15:04:03 · 1041 阅读 · 0 评论 -
基于概率实现公平有放回抽奖和无放回抽奖完整版【Java版】
目录前言基于概率无限周期抽奖有放回抽奖无放回抽奖ThreadLocalRandom 对垒RandomSecureRandom对垒Random总结前言在互联网行业中,对app进行快速迭代是实现激烈竞争中取胜的法宝,无论是常规工能还是日常运营活动,抽奖活动是一个必不可少的功能,表现形式多是对抽奖活动的变体,但是万变不离其宗,抽象到数学到中,对应的就是数学古典概率中的有放回实验和无放回实验。从抽奖的数目上来讲,进一步可分为基于概率无限周期的和基于个数有限周期的抽奖,本...原创 2022-01-04 08:30:00 · 1016 阅读 · 0 评论 -
声明一个长整形必须加L吗?是仅仅规范的问题吗?
答:不仅仅是代码规范问题,而且会导致逻辑错误。具体错误和正确对比示范案例今天是20210922号,我本意是通过取当前时间,再减去5天的毫秒数得到一个起止时间区间,也就是20210917-20210922,但是我的代码Long start2 = end - 5*24*60*1000*1000,结果是20211008号,那么问题在哪里?大家想一下原因分析很明显了,5*24*60*1000*1000;默认是整形,其7200000000已经超过了整形的表达范围溢出了,所以减去一个负的..原创 2021-09-22 17:17:50 · 465 阅读 · 0 评论 -
Ijkplayer、ExoPlayer、VLC播放器综合比较
VLC Media PlayerVLC 是VideoLAN 计划所研发的工程,最早预1996年开始,是一个完全的跨平台播放器,适合Windows、Mac OS、Linux、Android、iOS等系统,目前完全的跨平台播放器很少,VLC是最受欢迎的一种播放器;目前累计下载13亿次,是真真正正的全球播放器;VLC的整体框架是设计成一套module的管理机制,将功能分类并抽象成modules。VLC main: player的main。初始化libVLC 并加载用户界面。libVLCcore:lib原创 2021-04-21 19:55:43 · 10827 阅读 · 0 评论 -
App中WebView网页加载优化实战干货
一、背景移动App内嵌网页是实现快速开发上线,已经成为常规业务活动主流方案,但摆在面前的事实是,网页的加载性能和体验都不如Native效果好也是公认的,那么有没有一些优化可以达到或接近Native效果呢?二、业界常见方案1, 一个加载网页的过程中,native、网络、后端处理、CPU都会参与,各自都有必要的工作和依赖关系;让他们相互并行处理而不是相互阻塞才可以让网页加载更快:2,WebView初始化慢,可以在初始化同时先请求数据,让后端和网络不要闲着。3,后端处理慢,可以让服务器分tru原创 2021-03-26 19:29:51 · 1486 阅读 · 0 评论 -
一种伪随机算法Pseudo Random Distribution(PRD)的高效实现【Java版】
三、Java具体实现1. PseudoRandomDistributionModel:保存概率数据的模型四、实际实验结果对1到100的概率进行10万次实现,实验结果如下:Expect Probability:99 Real Probability:98 Gap Probability:1Expect Probability:98 Real Probability:97 Gap Probability:1Expect Probability:97 Real Probabi..原创 2021-03-19 14:58:55 · 2428 阅读 · 0 评论 -
Git步步进阶---Git修改和配置本地用户名和邮箱
git在push/push to时需要使用到user.name和user.email,切记一定要现配置好查看user.name/user.emailgit config user.namegit config user.email查看所有配置信息git config --list配置user.name/user.emailgit config user.name "...原创 2019-04-13 23:34:05 · 8446 阅读 · 1 评论 -
Google支付订阅产品遇到Reason: Accidental purchase问题原因分析和解决方案
问题现象:用户购买订阅之后,48小时之内撤销购买,一般实际上是刚购买万就会撤消,此时体现在Google后台就是如下:从上图可以看出用户实际上是有支付成功的状态的,即Charged,此时从Google后台查询状态和订阅产品到期时间都是正常的,其中acknowledgementState也是1,即完成了确认。{ "autoRenewing": true, "countryCode": "SA", "developerPayload": "", "expiryTimeMillis": "原创 2020-10-30 20:06:56 · 1775 阅读 · 0 评论