2026-03-27 星期五
今日收获
算法题
题花了大量时间,没做出来…… 及时停止了
ASCII 码编码特点:
- 数字 < 大写字母 < 小写字母 小写比大写大 32
- 0 –> 48 A –> 65 a –> 97
int 互转 str:
int to str: to_string()
str to int:
atoi()、stoi()现在用stoi更多。atoi表示的是 ASCII to Int判断字符类型:
- 是否为数字(0-9):
int isdigit(int c);是否为字母(a-z|A-Z):isalpha(c) - 字母或数字(0-9|a-z|A-Z):
isalnum(c)标点符号():ispunct(c) - 空白字符(空格、换行符、制表符等):
isspace(c) - 大写字母(A-Z):
isupper(c)小写字母(a-z):islower(c)
- 是否为数字(0-9):
项目进度
- 完成了 LeetModel 项目的标签库数据表设计。还得是 claude-opus 4.6 啊。
- 以前写前端的时候,那些资源都是写死的,图片都是自己下载然后本地引用。
- 现在了解到,可以通过数据库存储资源路径,然后前端动态加载,更加方便更新静态资源,包括图片路径、尺寸、大小等属性
- 逻辑删除比物理删除有一个好处是:可以有历史记录,还能恢复数据,数据追踪、溯源,历史版本
skills 实践 - 没来的及
Git 经验
- git 下载仓库源码的时候,直接在仓库下载的 zip 源码没有 git 记录
- 通过 git 程序使用
git clone xxx下载的仓库才会有 git 记录
Java 并发编程
将知识点发给 ai ,让他更加深刻地讲解、扩展。死知识变活技能
并发编程三要素:
- 原子性:(不可拆分)一个或者多个操作要么全部执行成功要么全部执行失败。
- 有序性:(不乱序)程序执行顺序按照代码顺序先后执行,但是 CPU 可能会对指令进行重排序。
- 可见性:(不读脏数据)当多个线程访问同一个变量时,如果一个线程修改了变量,其他线程立即获取最新的值。
并发编程核心矛盾:多线程共享 可变数据 时,性能优化,会破坏程序原本的执行逻辑。以上是描述矛盾的核心维度。
所有线程安全问题,本质上都是这三个要素中至少一个被破坏导致的;所有并发工具(synchronized、Lock、volatile、原子类等),都是围绕保证这三个要素设计的。
原子性:在学汇编时深有体会,CPU 指令只对应一个操作,而高级编程语言指令(高度抽象)往往对应多条 CPU 指令,例如:i++。
有序性:CPU、编译器为了提升程序执行效率,会在不改变单线程执行结果的前提下,对指令进行重排序。例如:将无数据依赖的指令重叠执行,打乱执行顺序。
可见性:Java 内存模型(JMM)有主内存跟线程的工作内存的区别。与变量副本的更新相关
线程的五大状态:
线程的本质是「CPU 执行代码的最小单元」,它的一生只有一个核心目标:拿到 CPU 时间片,执行
run()方法里的代码。
- 创建状态:(连抢 CPU 的资格都没有)当用 new 操作符创建一个线程的时候。
- 就绪状态:(有资格抢 CPU,万事俱备只欠 CPU 时间片)调用 start 方法,处于就绪状态的线程并不一定马上就执行 run 方法,还需要等待 CPU 的调度。
- 运行状态:(拿到了 CPU,正在执行代码)CPU 开始调度线程,并开始执行 Run 方法。
- 阻塞状态:(主动 / 被动放弃了抢 CPU 的资格,暂时退出调度队列)线程的执行过程中可能因为一些原因进入阻塞状态,比如调用 sleep 方法,获取尝试得到一个锁等等。
- 死亡状态:(彻底失去执行资格,生命周期终结)Run 方法执行完或者执行中遇到异常。
start()和run()的区别:start()会启动新线程,让线程进入就绪状态;run()只是普通方法调用,不会启动新线程。
sleep()和wait()的区别:sleep()是 Thread 的静态方法,不会释放锁;wait()是 Object 的方法,会释放锁,必须在同步块里调用。线程阻塞结束后,不会直接进入运行状态,只能回到就绪状态,重新等待 CPU 调度。
什么是 SaaS ?
软件即服务(Software-as-a-Service),是云计算三大核心服务模式(IaaS、PaaS、SaaS)之一,也是互联网领域最主流的企业级软件交付模式。SaaS ≠ 网页,也可以是桌面软件、APP、小程序。
业内统称:SaaS 产品。对外都叫具体产品名。
特征:(云端部署 + 订阅收费 + 厂商运维)
- 软件厂商将应用统一部署在云端,用户无需本地安装、无需采购服务器、无需承担运维工作,有网络即可开箱即用
- 采用订阅制、按需付费模式,替代传统软件一次性买断的商业模式
- 厂商统一负责全量用户的版本更新、bug 修复、安全防护与数据备份
- 核心技术底座是多租户架构,一套标准化服务可支撑海量用户,同时保障不同用户的数据隔离
- 典型产品:钉钉、飞书、Salesforce、有赞等
| 服务<br />模式 | 全称 | 中文 | 类比 | 典型产品 | 核心交付物 |
|---|---|---|---|---|---|
| IaaS | Infrastructure-as-a-Service | 基础设施即服务 | 卖地皮、钢筋水泥 | 阿里云 ECS、AWS EC2 | 服务器、存储、网络等底层资源 |
| PaaS | Platform-as-a-Service | 平台即服务 | 卖毛坯房 + 装修工具 | 阿里云容器服务、Heroku | 应用开发、运行的平台环境,无需管理底层基础设施 |
| SaaS | Software-as-a-Service | 软件即服务 | 精装修成品房,拎包入住 | 钉钉、飞书、Salesforce、有赞 | 直接可用的软件功能与服务 |
SaaS 跟普通 web 网页的区别:
| 对比维度 | SaaS | 普通 Web 应用 / 网页 |
|---|---|---|
| 核心本质 | 标准化持续云端服务 | 单次 / 碎片化功能载体 |
| 商业模式 | 标配订阅制按需付费,靠用户留存续费盈利 | 免费 / 广告 / 一次性买断,无持续服务契约 |
| 核心架构 | 多租户架构,一套代码服务海量租户,数据强隔离 | 单实例 / 单用户架构,无标准化租户隔离设计 |
| 运维责任 | 厂商全包部署、更新、安全、备份全链路运维 | 仅提供基础功能,运维与风险由用户自行承担 |
| 示例 | 飞书、钉钉、Notion、腾讯会议、Zoom | 华为商城、品牌自建电商、私有化部署项目 |