byte-wrangler's blog

LeetCode 刷题常见技巧

写在前面 最近在 LeetCode 上刷了不少题,慢慢摸索出了一些套路。整理了一份思维导图,把常见的算法技巧都归纳了一下。 算法技巧大纲 算法大纲 ├── 链表技巧 │ ├── 虚拟头节点(需要返回新链表的时候用) │ ├── 链表分解 │ └── 快慢指针 │ ├── 数组 │ ├── 快慢指针 │ │ ├── 滑动窗口(长短子串问题) │ │ └──...

《Java 并发与多线程》

一、多线程基础 1. 并发带来的挑战 (1)上下文切换 CPU 通过时间片轮转算法来循环执行线程任务,需要切换任务时,在切换前会保存上一个任务的状态,以便下次切换回这个任务时,可以再加载这个任务的状态。所以任务从保存到再加载的过程就是一次上下文切换。 减少上下文切换的方法: 无锁并发编程 CAS 算法 使用最少线程 使用协程 (2)死锁 概念:一组进程中的每一...

《Java 面向对象》

一、面向对象 1. 对面向对象的认知 面向过程:遇到一个问题时,将解决问题的方法拆分成一个个函数和数据,然后按一定的顺序执行完。这是一个具体的、流程化的过程。 📝 举例:洗衣服的流程 先加洗衣粉 → 再加水 → 再把衣服扔进洗衣机 → 洗衣机洗衣 → 再烘干 面向对象:将解决问题的方法模型化、抽象化成对象。然后给这些对象赋予属性和方法,并让对象来执行这些操作。 ...