jonssonyan's Website

保持热爱,奔赴山海。

前言

之前我分享了我去香港办卡的经历:我用一天速通了中银香港、汇丰、众安、蚂蚁 ,就是为了跑通全球收款做准备,因为 stripe 只能绑定本地的银行卡,比如我注册 stripe 是地点是香港,所以也需要绑定香港的银行卡。

内地收款

我们先看下在中国内地如何收款的,线上收款方式最常见的就是微信和支付宝,但是需要有公司作为实体去申请,个人是申请不了的。这时候就出现了很多第三方支付,可以使用个人身份入驻,还有一种是挂机程序通过监听支付成功的通知来手动发起回调请求,但是这些都是不可靠的(我曾经使用过某第三方支付,跑路后余额变成了欢乐豆),并且微信和支付宝在全球覆盖并不广泛,国外更流行使用万事达和 VISA 卡。

全球收款

阅读全文 »

前言

最近去了一趟香港,1 天时间开户了 5 个银行账户,上午线下开户了中银香港(当场拿到实体卡),下午在线上开户了中银香港、汇丰、众安、蚂蚁,期间踩了不少坑。

我做了一些 AI 产品: 新产品:HairTry,一款 AI 发型设计工具,收款使用的 stripe,提现需要绑定银行卡,国外大部分服务都是不支持内地的银行卡,而且鉴于我 stripe 注册地的是香港,所以这时候办港卡是再合适不过了。

准备

在去香港之前我计划是开户四家银行,两家传统银行和两家虚拟银行,分别是中国银行(香港)、汇丰银行、ZA Bank (众安) 、蚂蚁银行,强烈建议大家多开户几个防止回来之后才发现用不了,血亏。

阅读全文 »

前言

感谢 Kimi K2,让穷人也用上了 Claude Code。

Claude Code 发布以来,编程能力是目前公认最强的,但是对国内不太友好,封控严重,国内一封一大片,我也在一直观望,否则秒封白折腾。

但是 7 月 11 号晚上 月之暗面发布 Kimi K2,总参数 1T,支持 Anthropic API,价格还便宜,可以替换 Claude Code 的默认模型,实现国内无痛用上 Claude Code,

Claude Code:https://www.anthropic.com/claude-code

阅读全文 »

舔狗日记已开源~,传送门: 《新作品《舔狗日记》:在爱的剧本里,我们都是自己的主角》

GitHub:https://github.com/jonssonyan/dog-diary

前言

大家好。

今年 3 月份一个朋友和我说他有一个需求,就是不知道每天吃什么,我是不是可以开发一个推荐美食的网站?这样他就不需要每天纠结吃什么了,甚至可以直接生成菜谱,参照菜谱自己动手做饭。

阅读全文 »

现在很多企业都在用 AI 给业务赋能,网上充斥着各种名词,Agent、LLM、RAG、MCP、Function Call,看的眼花缭乱,本文会将它们比作是一台电脑的各个组成部分,通俗的给大家讲清楚这几个是什么?它们之间的联系是什么?

LLM(语言模型)- CPU

LLM 全称叫 Large Language Model(大语言模型),例如:ChatGPT、Claude、Gemini 等,这个是最常见的,大家应该第一个接触 AI 产品就是这些。2022 年 11 月 30 日 OpenAI 发布 ChatGPT,最初是的交互形式就是在网页上和大模型进行聊天。

后来人们想让 AI 扮演指定的角色,就出现了“提示词”(Prompt),人们不想每次都要告诉 AI 它需要扮演的角色,就出现了”系统提示词“(System Prompt),再后来人们将自己的提示词分享出来,就出现了“GPT 商店”,将自己写好提示词的 Chat 分享出来。例如:写作助手、编程专家。

RAG(检索增强生成)- 磁盘/内存

阅读全文 »

Mac 配置开发环境非常简单,只需要安装 brew 包管理工具,就可以一键搭建开发环境,而且 terminal 就像是 linux 下一样,非常适合开发。brew 源可能网络不太稳定,建议安装 Shadowrocket,感受丝滑的安装体验。

我平时写 java、python、golang、node.js 比较多。我需要安装 JDK、miniconda、golang、nvm。另外 还需要安装一些辅助开发工具,比如:git、chrome、postman、vscode,最后 JetBrains IDE 是必不可少的。

java

1
brew install --cask temurin21

java –version

阅读全文 »

前言

最近因为个人需求,需要对番茄小说 App 进行抓包,因为番茄小说网页版功能不全,并且 App 自己也进行了一些防护,导致抓包难度提升了一个台阶。最终花了2小时验证了两种方案,抓到了所有想要到的请求。

抓包软件

Web 抓包很简单,F12 就可以看到所有请求,然而 App 抓包需要使用到专业的抓包工具,我推荐一些常用的抓包软件

  • Windows/Mac:Charles / Proxyman / Wireshark
  • Android:Packet Capture
  • IOS:Stream
阅读全文 »

“舔狗”,这个带着自嘲色彩的网络词汇,精准地击中了无数人的内心。我们在笑声中自嘲,却又在深夜里默默品味那份酸楚。

“舔狗”一词早已存在多年,但直到我观看了《喜剧之王单口季》中付航的脱口秀,才获得了新的灵感。他的一句“在舔狗的剧本里,舔狗才是主角,你杀青了!”深深触动了无数人。

以下是舔狗日记的网站主页

舔狗日记:https://dog.jonssonyan.com

在浏览器中输入网址,访问网站首页,你可以随机阅读一条日记。你可以复制日记内容,也可以为你喜欢的日记点赞。

阅读全文 »

jvm内存模型

  • 元空间(Metaspace):JDK1.8之后取代PermGen(永久代),存储类元数据,包括类的结构、方法、常量池、字段信息、静态变量等,不再使用JVM 堆内存,而是直接使用本地内存(也就是操作系统的内存)。因此Metaspace可以扩展到更大的内存空间,而不受堆内存限制。
  • 堆(Heap):堆分为年轻代(Young Generation)和 老年代(Old Generation)。
  • 栈(Stack):每个线程都有一个私有的栈,栈中存储的是栈帧。栈帧包含:局部变量表(存储方法的参数、局部变量、返回值等),操作数栈(执行方法的计算和操作), 动态链接(方法调用时的符号引用),方法返回地址(用于标识方法执行完毕后返回的地址)。
  • 本地方法栈(Native Stack):与栈类似,但是它存储的是 Native 方法(即由 Java 调用的本地方法)的相关信息。
  • 程序计数器(PC Register):每个线程都有一个独立的程序计数器,用于记录当前线程执行的 字节码指令的地址。在多线程环境下,JVM 使用该寄存器来追踪线程执行的位置。

类加载器

启动类加载器(Bootstrap ClassLoader)<-扩展类加载器(Extension ClassLoader)<-系统类加载器(System ClassLoader)< -自定义类加载器(Custom ClassLoader)

  1. 启动类加载器(Bootstrap ClassLoader)

    作用:负责加载JRE(Java Runtime Environment)中的核心类库,通常是JDK中的rt.jar(包含了所有的核心Java类,如java.lang.*包中的类)。

    实现:启动类加载器是由本地代码实现的,因此它是JVM中的最顶层加载器,并且通常是一个由C++编写的本地类加载器。它并不是java.lang.ClassLoader类的子类。

    职责:加载JDK内部的核心类,像java.lang.Object、java.lang.String、java.util.* 等。

  2. 扩展类加载器(Extension ClassLoader)

    作用:负责加载JRE中的扩展库,即ext目录中的类库。扩展库通常位于$JAVA_HOME/lib/ext目录下,或者是由java.ext.dirs系统属性指定的路径。

    实现:扩展类加载器是由 ClassLoader 类的子类 URLClassLoader 实现的,并且它会依赖于启动类加载器。

    职责:加载扩展 JDK 类库(比如 javax.、org.xml. 等)。

  3. 系统类加载器(System ClassLoader)

    作用:也叫做应用类加载器,负责加载应用程序的类路径(classpath)中指定的类。

    实现:系统类加载器是ClassLoader类的一个实例,它通过读取classpath中指定的路径加载类文件。通常这些类是我们在项目中开发的类。

    职责:加载应用程序中的类,通常由-classpath或-cp参数指定,或者是CLASSPATH环境变量指定的路径。

  4. 自定义类加载器(Custom ClassLoader)

    作用:开发者可以自定义类加载器以满足特定的需求。通常情况下,自定义类加载器可以扩展ClassLoader类,并重写findClass和loadClass方法来实现自定义的类加载行为。

    实现:自定义类加载器通常用于动态加载某些特定路径下的类,或者在特殊环境下加载类,例如,JSP的动态加载、插件机制、Web容器的类加载等。

    职责:通过重写类加载的逻辑来满足特定应用的需求,如加载特定路径的类、支持热部署等。

阅读全文 »

Redis 现在用的地方非常多,特别是在高性能、高并发系统中应用非常广泛,消耗资源少,能够实现的功能很多。

数据结构

基本数据类型

  • String:字符串
  • Hash:K->V
  • List:有序列表
  • Set:去列表
  • Sorted Set/ZSet:去重有序列表,按照 score 排序
  • Bitmap(Redis>2.2):位存储,可应用于统计用户信息,活跃,不活跃!登录,未登录!打卡,不打卡!两个状态
  • Geo(Redis>3.2):地理位置
  • HyperLogLog(Redis>2.8):基数统计,可应用于注册 IP 数,每日访问 IP 数,页面实时UV,在线用户数,共同好友数等,存在 0.81% 标准错误的近似值
  • Stream(Redis>5.0):流,消息队列和实时数据处理

String底层数据结构

阅读全文 »

消息队列一般在大型系统中使用比较多,特别是流量比较大的系统,小系统引入消息队列反而是一种累赘,可以使用 Redis List 数据结构模拟简单的队列,成本更低。

消息队列使用场景:解耦(例如:系统之间通讯)、异步、削峰

以下是常见消息队列 ActiveMQ、RabbitMQ、RocketMQ、Kafka 之间的对比

特性 ActiveMQ RabbitMQ RocketMQ Kafka
单机吞吐量 万级,比 RocketMQ、Kafka 低一个数量级 同 ActiveMQ 10 万级,支撑高吞吐 10 万级,高吞吐,一般配合大数据类的系统来进行实时数据计算、日志采集等场景
topic 数量对吞吐量的影响 topic 可以达到几百/几千的级别,吞吐量会有较小幅度的下降,这是 RocketMQ 的一大优势,在同等机器下,可以支撑大量的 topic topic 从几十到几百个时候,吞吐量会大幅度下降,在同等机器下,Kafka 尽量保证 topic 数量不要过多,如果要支撑大规模的 topic,需要增加更多的机器资源
时效性 ms 级 微秒级,这是 RabbitMQ 的一大特点,延迟最低 ms 级 延迟在 ms 级以内
可用性 高,基于主从架构实现高可用 同 ActiveMQ 非常高,分布式架构 非常高,分布式,一个数据多个副本,少数机器宕机,不会丢失数据,不会导致不可用
消息可靠性 有较低的概率丢失数据 基本不丢 经过参数优化配置,可以做到 0 丢失 同 RocketMQ
功能支持 MQ 领域的功能极其完备 基于 erlang 开发,并发能力很强,性能极好,延时很低 MQ 功能较为完善,还是分布式的,扩展性好 功能较为简单,主要支持简单的 MQ 功能,在大数据领域的实时计算以及日志采集被大规模使用

RocketMQ 和 Kafka 用的比较多,对 Java 程序员比较友好,Kafka 支持的吞吐量大,经常在大数据场景下使用。

阅读全文 »

下载源码

安装好JDK后,源码目录下面有src.zip文件,这个文件就是JDK的源码

搭建调试环境

新建Maven工程,包含以下文件

  • source:源码文件夹(手动新建)
  • test:单元测试文件夹(手动新建)
  • Main.java:主函数(自带)
阅读全文 »

可用于代理(加速)任何 HTTP 请求,实测可以给 Docker 镜像仓库加速

本文介绍我最近写的新作品:使用 Cloudflare Workers/Pages 搭建 HTTP 反向代理,代码已经全部开源在 GitHub,按照 README 里面的脚本搭建就可以了,非常简单。

GitHub:https://github.com/jonssonyan/cf-workers-proxy

支持任何 HTTP 请求代理,可用与镜像仓库国内加速。支持对请求进行 URL 过滤,User-Agent 过滤,IP 黑白名单,地区黑白名单,Nginx 伪装/302 重定向。

需要注意的是,建议自用,如果反代请求量太大,账号可能被官方风控,建议大家设置 IP 白名单,配合其他过滤条件。

阅读全文 »

本博客之前的图床是 mdnice,但是最近 mdnice 开始收费了,不开会员图床容量只有 100 MB,毕竟是第三方,担心图床突然哪天突然失效。之前没有用博客本地图床是因为博客部署在国外服务器上,虽然用了 CDN,但是使用国内网络,如果没梯子并且文章中有图,网页可能会加载缓慢。

如今没有稳定的图床,只能放在博本地,可以对图片进行压缩,让图片加载速度更快,200 KB 的图片可以压缩为 60 KB,而且肉眼看不出来图片差别。

难点是博客中使用 mdnice 图床的图片比较多,格式为 https://files...png ,手动下载,压缩,替换路径,费时费力。

具体的实现方案是使用 Python 正则匹配文章中 url 的值,使用 requests 下载图片至本地,使用 pngquant 将图片进行压缩并覆盖原图片,最后替换掉文章中的 url 为压缩之后图片的路径。

阅读全文 »
0%