爬取oss库

前言

2025年底公司有个老系统要下线,里面攒了几年的培训素材(视频、音频、文档、图片,几万条记录)都躺在 OSS 上,需要全部爬下来再转存到新的 OSS。量不小,单个视频还有好几个G的,直接写个 for 循环 requests 下载肯定歇菜,于是写了一个比较健壮的爬取脚本。完整代码在:

https://github.com/anTtutu/anttu.code.learn.python/tree/master/oss_download

这篇把思路和关键代码整理下。

1、难点在哪

先说清楚这个活的难点,也是写脚本时所有设计的出发点:

……

阅读全文

docker build的一些问题

前言

2024年国内无法访问docker hub了,且国内的一些公共镜像提供服务组织陆续关停服务。 因23年开始陆续每年有重要项目要上线,很少有时间静下心来写问题东西,这里简短记录下最近编译个开源组件的os镜像的一些问题和解决方案

1、docker hub无法访问问题

可以用国内一些云厂商的代理或者加速地址。
https://github.com/dongyubin/DockerHub 比如道客就提供了一个,这里不是说只有道客提供,只是正好用道客的加速成功拉取了ubuntu的镜像就以道客举例 https://github.com/DaoCloud/public-image-mirror

……

阅读全文

Kubernetes学习路径与实用工具箱:从架构到可跑的样例

前言

k8s 概念多,刚上手容易懵。其实核心就两件事:把容器跑起来,让别人访问到。这篇整理一条最短的学习路径,再把自己用下来觉得顺手的工具列一下,工具装对了能少走很多弯路。

1、架构

控制平面管「应该是什么样」,节点负责「实际是什么样」:

控制平面(Control Plane)                     工作节点(Node x N)
├── kube-apiserver    ← 一切操作的入口         ├── kubelet        ← 管本机容器生命周期
├── etcd              ← 集群的数据库           ├── kube-proxy     ← 管 Service 转发
├── kube-scheduler    ← 决定 Pod 落在哪个节点   └── 容器运行时      ← containerd
└── kube-controller-manager ← 维持期望状态

用 k8s 做的所有操作,本质都是告诉 apiserver 一个期望状态,然后控制器发现差距、往那个方向收敛。理解了这个,Deployment、ReplicaSet、HPA 就都好懂了。

……

阅读全文

GraalVM与Native Image详解:原理、Spring Boot样例与编译/运行镜像选型

前言

Java 应用启动慢、吃内存、还要预热,放在 Serverless 和弹性伸缩的场景里很难受。GraalVM 的 Native Image 用 AOT 编译解决了这个问题:毫秒启动、内存省一半、连 JVM 都不要了。代价是反射要登记、构建要等几分钟、生态要适配。这篇把原理讲清、把 Spring Boot 3 的样例跑通,重点记录一下我在容器化时踩坑最多的部分:编译镜像和运行镜像怎么选。

……

阅读全文

OpenJDK厂商选型:从Oracle JDK到BellSoft Liberica,那些容易被忽略的差异点

前言

JDK 8 时代「装个 JDK」没得选,Oracle JDK 一把梭。2019 年 Oracle 改了授权之后,生产环境陆续迁到 OpenJDK 系的发行版上。但「都是 OpenJDK」不等于完全一样,加密策略、字体这些细节差异,我是迁完之后在生产上才碰到的,记录下。

1、Oracle JDK 和 OpenJDK 什么关系

  • 2006 到 2019:Sun/Oracle 开源了 OpenJDK,但 Oracle JDK(商业授权)和它并存,细节上有一些差距
  • 2019 年 1 月:Oracle 宣布 JDK 8u211 之后以及 JDK 11 起商用要收费,这是大家迁 OpenJDK 的分水岭
  • 现在:Oracle JDK 17+ 又恢复免费(NFTC 协议),但条款写明下个 LTS 发布后旧 LTS 可能转回收费,企业不太敢把命脉押在这种条款上

代码层面 Oracle JDK 和 OpenJDK 已经高度同源,差异不到 1%。选型的差异主要在:谁构建、谁维护、免费支持多久。

……

阅读全文

技术选型详解:Go、Python、Node+Vue、UniApp、Java 各自的适用场景与侧重点

前言

经常有朋友问新项目该用什么语言。没有「最好的语言」,只有合不合适,同一个业务用不同栈做,成本差出几倍很正常。这篇把五种常见技术栈放一起,说说各自擅长什么、不擅长什么、什么场景该用它,最后给几个组合搭配的建议。

1、Go:云原生和高并发服务

擅长:微服务/API 网关、中间件(消息队列、注册中心)、CLI 工具、DevOps 基建(Docker/K8s 本身就是 Go 写的)、高并发 IO 密集服务。

……

阅读全文

mvnd结合idea使用

前言

2021年看到apache新出了mvnd这么一个项目,属于maven的子项目,但是介绍是maven加强版,超过maven和gradle的速度,是maven的2~10倍,当时体验了下,还不错,但是一直没法配合idea使用,所以暂时搁置没记录下来。2024年升级了下idea,最近无意发现可以配置mvnd命令并且结合插件maven helper无缝使用,编译和打包速度确实快,而且跟原始maven使用体验一样。

……

阅读全文

SpringBoot接入Thymeleaf完整指南:语法速查、布局复用与可运行样例

前言

Thymeleaf 是 Spring 官方文档里默认的模板引擎,最大的卖点是原生 HTML 模板:模板文件不经过引擎也能直接用浏览器打开看排版,设计稿改改就能当模板用。FreeMarker 那套见 接入指南 和 语法详解,这篇给 Thymeleaf 同样的一套。

1、引入依赖

1
2
3
4
5
6
7
8
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>

模板默认放 classpath:/templates/,后缀 .html。

……

阅读全文

SpringBoot接入FreeMarker完整指南:依赖、配置与可运行样例

前言

FTL 模板语法在 FreeMarker常用语法与指令详解里整理过了,这篇解决另一半问题:怎么把 FreeMarker 接进 SpringBoot。依赖、配置、渲染、全局变量,配一套能直接跑的样例。

1、引入依赖

1
2
3
4
5
6
7
8
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-freemarker</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>

starter 会自动带上 freemarker 核心包和 FreeMarkerAutoConfiguration,不加任何配置就能跑。

2、目录结构

src/main/java
  └── com.example.demo
      ├── DemoApplication.java
      └── controller/PageController.java
src/main/resources
  ├── application.yml
  ├── static/                  # 静态资源(css/js)
  └── templates/               # 模板默认目录(classpath:/templates/)
      ├── index.ftl
      ├── user/
      │   └── detail.ftl
      └── common/
          ├── header.ftl
          └── footer.ftl

约定就三条:模板放 classpath:/templates/,后缀 .ftl,Controller 返回视图名不带后缀。

……

阅读全文

FreeMarker FTL语法速查:从插值到宏的完整笔记

前言

FreeMarker 在老项目和邮件模板、报表模板场景里依然大量存在。FTL 语法细节多、容易忘,这篇按「输出 → 运算 → 流程控制 → 集合 → 指令 → 宏」的顺序整理成速查笔记。

基本原则:所有标签必须闭合,否则 FreeMarker 无法解析。注释格式 <#-- 注释内容 -->,不会输出。

一、字符输出

${emp.name?if_exists}            <#-- 变量存在输出,否则不输出 -->
${emp.name!}                     <#-- 同上 -->
${emp.name?default("xxx")}       <#-- 变量不存在,取默认值xxx -->
${emp.name!"xxx"}                <#-- 同上 -->

常用内建函数:

……

阅读全文

最近文章

分类

标签

其它