Skip to content

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)

项目进度

  • 完成了 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 />模式全称中文类比典型产品核心交付物
IaaSInfrastructure-as-a-Service基础设施即服务卖地皮、钢筋水泥阿里云 ECS、AWS EC2服务器、存储、网络等底层资源
PaaSPlatform-as-a-Service平台即服务卖毛坯房 + 装修工具阿里云容器服务、Heroku应用开发、运行的平台环境,无需管理底层基础设施
SaaSSoftware-as-a-Service软件即服务精装修成品房,拎包入住钉钉、飞书、Salesforce、有赞直接可用的软件功能与服务

SaaS 跟普通 web 网页的区别

对比维度SaaS普通 Web 应用 / 网页
核心本质标准化持续云端服务单次 / 碎片化功能载体
商业模式标配订阅制按需付费,靠用户留存续费盈利免费 / 广告 / 一次性买断,无持续服务契约
核心架构多租户架构,一套代码服务海量租户,数据强隔离单实例 / 单用户架构,无标准化租户隔离设计
运维责任厂商全包部署、更新、安全、备份全链路运维仅提供基础功能,运维与风险由用户自行承担
示例飞书、钉钉、Notion、腾讯会议、Zoom华为商城、品牌自建电商、私有化部署项目

记录学习,分享技术