自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(143)
  • 收藏
  • 关注

原创 【LeetCode---76】最小覆盖字串---滑动窗口

【LeetCode---76】最小覆盖字串---滑动窗口import java.util.HashMap;import java.util.Iterator;import java.util.Map;public class Solution2 { //创建两个Map,用来统计源字符串和目标字符串中各个字符的数目 Map<Character, Integer&gt...

2022-03-11 23:25:00 104

原创 【LeetCode---904】水果成篮---滑动窗口

【LeetCode---904】水果成篮---滑动窗口定义一个计数器Counter,HashMap的巧用。i是最左边的下标,j为右边的下标,j - i + 1就是这个滑动窗口的长度如果长度大于三,那么就要把最左边的那个数给删掉。因为可能有重复的情况:比如3,3,3,3,1,1,2在加入2的时候,要删除第一种果子3,那么我们就需要i一直往后移动,然后判断是否为0,如果0就删除。...

2022-03-11 22:19:00 102

原创 【计算机网络】常见的问题

长连接和短连接的区别参考博文HTTP各个版本的区别参考博文HTTP和HTTPS的区别参考博文SSL和TLS的联系与区别参考博文1参考博文2

2022-03-01 09:47:00 103

原创 【MySQL】事务、隔离级别、MVVC是怎么回事?

【MySQL】事务、隔离级别、MVVC是怎么回事?一、认识事务1、为什么要设计事务事务会把数据库从一种一致状态转换为另一种一致状态。2、事务的四个特征原子性事务是不可分割的工作单位一致性事务从一种状态转变为下一种一致的状态。提交或者回滚,不可以破坏原来的表结构。隔离性通过锁、MVVC来实现持久性事务一旦提交,结果就是永久性的,即使发生当即。数据库也能...

2022-02-23 10:16:00 73

原创 【MySQL】数据库中的哪些“锁”事

【MySQL】数据库中的哪些“锁”事在Java中,锁就是提供多线程并发访问的控制工具。那么在开发多用户、数据库驱动的应用时,最大的难点就是最大程度地利用数据库的并发访问,另外一方面就是要确保每个用户能以一致的方式读取和修改数据。一、什么是锁?锁机制用于管理对共享资源的并发访问,这里的共享资源不仅仅是一条行记录哦。InnoDB可以再数据库许多地方上锁:行记录缓冲池中的LRU列表,增删...

2022-02-22 15:37:00 22

原创 【Kill Thread Part.2-1】Java内存模型——底层原理

【Kill Thread Part.2-1】Java内存模型——底层原理一、什么是“底层原理”?本章研究的内容?1、从Java代码到CPU指令从.java文件到.class文件,然后JVM翻译成对应操作系统平台的机器指令。JVM实现会带来不同的“翻译”,不同的CPU平台的机器指令又千差万别,无法保证并发安全的效果一致。重点开始向下转移:转化过程的规范、原则2、JVM内存结构 VS...

2022-02-20 17:25:00 33

原创 【深究系列】LRU算法设计

【深究系列】LRU算法设计一、LeetCode算法题目https://leetcode-cn.com/problems/lru-cache/所谓缓存,必须要有读写两个操作,按照命中率的思路考虑,写操作+读操作的时间复杂度都需要O(1)特性要求:必须要有顺序之分,以区分最近使用的和很久没有使用的数据排序写和读操作一次搞定。如果容量满了要删除最不常用的数据,每次新访问还要把新的数据插...

2022-02-16 12:47:00 27

原创 【深究系列】实现自己的HashMap

【深究系列】实现自己的HashMap/** * * table什么时候扩容的,threshold = capacity*loadfactor * 当size>threshold时,table扩容,数组长度增加为原长度的2倍,要重新计算hash值,重新把entry放入新的table中 */public class MyHashMap { private Entry[...

2022-02-14 20:50:00 27

原创 【深究系列】手撕HashMap

【深究系列】手撕HashMap一、HashMap数据结构1、取模的数组存储一个数,100,100模10为0,那么就存放在下标为0的位置。403%10为3,放在下标为3的位置。那么如果200也进来,300也要进来,该往哪里放呢?(此时便发生了冲突)2、冲突问题通过Next指针逐渐往下添加,可以快速的找到。那么现在又遇到了新的问题,如果100,200,300,400,....

2022-02-14 18:11:00 26

原创 【Beautiful JUC Part.11】Future和Callable治理线程

【Beautiful JUC Part.11】Future和Callable治理线程一、为什么需要Future和Callable1、Runnable的缺陷线程没有返回值run方法无法抛出checked Exception这是因为run()方法在声明的时候就规定好了形式。只能通过try/catch捕获。2、Callable接口类似于Runnable,被其他线程执行的任务实现ca...

2022-02-12 21:59:00 24

原创 【Beautiful JUC Part.10】AQS 并发灵魂人物

【Beautiful JUC Part.10】AQS 并发灵魂人物一、为什么需要AQS?二、Semaphore和AQS的关系CountDownLatch和ReentrantLock也是一样的。三、AQS的认识1、AQS的比喻比喻:群面、单面安排就坐、叫号、先来后到等HR的工作就是AQS做的工作面试官不会去关心两个面试者是不是号码相同冲突了,也不想去管面试者需要一个地方坐着...

2022-02-12 20:11:00 24

原创 【Beautiful JUC Part.9】控制并发流程 线程间的协调人

【Beautiful JUC Part.9】控制并发流程 线程间的协调人一、什么是控制并发流程?控制能发流程的工具类,作用就是帮助我们程序员更容易得让线程之间合作。让线程之间相互配合,来满足业务逻辑比如让线程A等待线程B执行完毕后再执行等合作策略二、CountDownLatch倒计时门闩1、CountDownLatch类的作用CountDown的意思是倒数,而Latch的意思是...

2022-02-12 16:41:00 21

原创 【Beautiful JUC Part.8】ConcurrentHashMap等并发集合

【Beautiful JUC Part.8】ConcurrentHashMap等并发集合并发容器概览、集合类的历史、ConcurrentHashMap(重点、面试常考)CopyOnWriteArrayList、并发队列Queue(阻塞队列、非阻塞队列)一、并发容器的概览ConcurrentHashMap:线程安全的HashMapCopyOnWriteArrayList:线程安全...

2022-02-10 13:37:00 19

原创 【Beautiful JUC Part.7】fina关键字和不变性

【Beautiful JUC Part.7】fina关键字和不变性一、什么是不变性(Immutable)如果对象在被创建后,状态就不能被修改,那么它就是不可变的例如:person对象,age和name都不能再变。但是如果person对象还有其他非final的属性,就是可变的对象。具有不变性的对象一定是线程安全的,我们不需要对其采取任何额外的安全措施,也能保证线程安全。二、final关...

2022-02-10 10:02:00 23

原创 【Beautiful JUC Part.6】CAS 不可中断的典范

【Beautiful JUC Part.6】CAS 不可中断的典范一、什么是CAS运用场合:并发场景,实现不能被打断的交换操作主要思路:我认为V的值应该是A,如果是的话那我就把它改成B,如果不是A(说明被别人修改过了),那我就不修改了,避免多人同时修改导致出错。CAS有三个操作数:内存值V、预期值A、要修改的值B,当且仅当预期值A和内存值V相同时,才将内存值修改为B,否则什么都...

2022-02-09 23:13:00 21

原创 【Beautiful JUC Part.5】atomic包 一刻也不能分割

【Beautiful JUC Part.5】atomic包 一刻也不能分割一、什么是原子类不可分割一个操作是不可中断的,即便是多线程的情况下也可以保证java.util.concurrent.atomic原子类的作用和锁类似,是为了保证并发情况下线程安全。不过原子类相比于锁,有一定的优势。粒度更细:原子变量可以把竞争范围缩小到变量级别,这是我们可以获得的最细粒度的情况了,...

2022-02-09 22:43:00 35

原创 【Beautiful JUC Part.4】不可不说的“锁”事

【Beautiful JUC Part.4】不可不说的“锁”事Lock接口锁的分类乐观锁和悲观锁可重入锁和非可重入锁,以ReentrantLock为例(重点)公平锁和非公平锁共享锁和排它锁:以ReentrantReadWriteLock读写锁为例(重点)自旋锁和阻塞锁可中断锁:顾名思义,就是可以响应中断的锁锁优化一、Lock接口​ 锁...

2022-02-08 20:20:00 25

原创 【Beautiful JUC Part.3】ThreadLocal详解

【Beautiful JUC Part.3】ThreadLocal详解一、两大使用场景——ThreadLocal的用途1、典型场景1每个线程需要一个独享的对象(通常是工具类,典型需要使用的类有SimpleDateFormat和Random),比如说后端返回给前端结果的封装工具类。每个Thread内有自己的实例副本,不共享案例:后端返回前端的结果对象,每一个请求对应的是一个线程,每次请...

2022-02-07 16:41:00 30

原创 【Beautiful JUC Part.2】线程池 治理线程的最大法宝

【Beautiful JUC Part.2】线程池 治理线程的最大法宝一、线程池的重要性1、什么是池如果不使用线程池,每个任务都新开一个线程处理一个线程,直接创建当10个线程时候,for循环创建线程当任务数量上升到1000这样开销太大,我们希望有固定的数量的线程,来执行这1000个线程,这样就避免了反复创建并销毁线程所带来的开销问题。2、为什么要使用线程池?问题一:反...

2022-02-06 23:27:00 24

原创 【Beautiful JUC Part.1】建立起Java并发体系的大厦

【Beautiful JUC Part.1】建立起Java并发体系的大厦思维导图地址https://darkerg.lanzout.com/iNtK0zmosmb密码:91bb一、并发工具类的分类为了并发安全:互斥同步、非互斥同步、无同步方案管理线程、提高效率线程协作二、为了线程安全(从底层原理来分类)1、互斥同步2、非互斥同步3、结合互斥和非互斥同步4、无...

2022-02-05 18:51:00 33

原创 【Kill Thread Part.3-1】死锁的概念

【Kill Thread Part.3-1】死锁的概念一、死锁是什么1、死锁图解发生在并发中互不相让:当两个(或更多)线程(或进程)相互持有对方所需要的资源,又不主动释放,导致所有人都无法继续前进,导致程序陷入无尽的阻塞,这就是死锁。2、死锁的影响死锁的影响在不同系统中是不一样的,这取决于系统对死锁的处理能力。数据库中:检测并放弃事务JVM中:无法自动处理特点:几率...

2022-02-05 11:46:00 26

原创 【面试刷题】宽度优先搜索

【面试刷题】宽度优先搜索一、最简洁的BFS算法的通用模板1、适用于树和图的BFS模板队列建议使用new ArrayDeque不建议使用new LinkedList(链表比数组慢)//双端队列Queue<Node> queue = new ArrayDeque<>();HashMap<Node,Integer> distance = new Ha...

2022-01-31 13:52:00 29

原创 【Kill Thread Part.2-2】volatile、原子性、JMM应用

【Kill Thread Part.2-2】volatile、原子性、JMM应用一、volatile关键字详解:底层原理https://zhuanlan.zhihu.com/p/1338513471、volatile是什么volatile是一种同步机制,比synchronized或者Lock相关类更轻量,因为使用volatile并不会发生上下文切换等开销很大的行为。如果一个遍历被修饰...

2022-01-28 12:49:00 20

原创 【Kill Thread Part.1-8】双刃剑:多线程会导致的问题

【Kill Thread Part.1-8】双刃剑:多线程会导致的问题一共有哪几类线程安全问题?哪些场景需要额外注意线程安全的问题?什么事多线程带来的上下文切换?一、线程安全问题1、什么是线程安全通俗的讲:2、运行结果错误:a++多线程下出现消失的请求现象①出错代码/** * 描述: 第一种:运行结果出错 * 演示:计数不准确(减少),找出具体出错的位置 */p...

2022-01-26 16:53:00 19

原创 【Kill Thread Part.1-7】线程异常处理知多少?

【Kill Thread Part.1-7】线程异常处理知多少?Java异常体系图实际工作中,如何全局处理异常?为什么要全局处理?不处理行不行?一、线程未捕获异常UncaughtException应该如何处理?1、为什么需要UncaughtExceptionHandler?①主线程可以轻松发现异常,子线程却不行测试代码/** * 描述: 单线程,抛出,处理,有异常堆栈 *...

2022-01-26 14:37:00 24

原创 【Kill Thread Part.1-6】一网打尽线程属性

【Kill Thread Part.1-6】一网打尽线程属性什么时候我们需要设置守护线程?我们应该如何应用线程优先级来帮助程序运行?有哪些禁忌?不同操作系统如何处理优先级问题一、线程各属性概览二、线程各个属性1、线程ID从小到大/** * 描述: ID从1开始,JVM运行起来后,我们自己创建的线程的ID早已不是2. */public class Id { ...

2022-01-24 18:43:00 14

原创 【Kill Thread Part.1-5】趣解Thread和Object类中线程相关方法

【Kill Thread Part.1-5】趣解Thread和Object类中线程相关方法为什么线程通信的方法wait(),notify()和notifyAll()被定义在Object类里?而sleep定义在Thread类里?用3种方式实现生产者模式Join和sleep和wait期间线程的状态分别是什么?为什么?一、方法概览二、wait、notify、notifyAll方法详解...

2022-01-24 16:53:00 26

原创 【设计模式-创建型】简单工厂、工厂方法、抽象工厂

【设计模式-创建型】简单工厂、工厂方法、抽象工厂一、简单工厂的定义与类型定义:由一个工程对象决定创建出哪一种产品类的实例适用场景:工厂类负责创建的对象比较少,客户端(应用层)只知道传入工厂类的参数,对于如何创建对象(逻辑)不关心优点:只需要传入一个正确地参数,就可以获取所需要的对象,而无须知道其创建的细节缺点:工厂类的职责相对过重,增加新的产品,需要修改工厂类的判断逻辑,违背了开闭原则...

2022-01-21 12:52:00 17

原创 【设计模式】软件设计的七大原则

【设计模式】软件设计的七大原则一、开闭原则定义:一个软件实体如类、模块和函数应该对扩展开放,对修改关闭特点:用抽象构建框架,用实现扩展细节优点:提高软件系统的可复用性及可维护性二、依赖倒置原则定义:高层模块不应该依赖低层模块(应用层是高层,底层是一些基类),二者都应该依赖其抽象特点:抽象不应该依赖细节,细节应该依赖抽象针对接口编程,不要针对实现编程优点:可以减少类之间...

2022-01-21 11:57:00 18

原创 【Kill Thread】补充:Synchronized的作用

【Kill Thread】补充:Synchronized的作用synchronize详解,锁升级https://blog.csdn.net/lpf463061655/article/details/105149322一、Synchronized简介1、Synchronized的作用通俗易懂:能够保证在同一时刻最多只有一个线程执行该段代码,以达到保证并发安全的效果。2、Synchro...

2022-01-21 10:49:00 20

原创 【Kill Thread Part.1-4】图解线程生命周期

【Kill Thread Part.1-4】图解线程生命周期一、线程的六个状态1、New已经创建,但是还没有启动的状态。通过new Thread()创建线程猴的状态。2、Runnable从New状态调用start()方法之后,就会处于Runnable状态了。可运行状态有可能正在执行,也有可能没有执行比如说一个线程正在CPU执行任务处于运行的状态,突然CPU分配给其它线...

2022-01-20 15:18:00 27

原创 【Kill Thread Part.1-3】线程停止、中断最佳实践

【Kill Thread Part.1-3】线程停止、中断最佳实践讲解原理最佳实践:如何正确停止线程停止线程的错误方法重要函数的源码解析常见的面试问题一、涵盖内容二、原理讲解原理介绍:使用interrupt来通知,而不是强制我们只能用interrupt来通知线程,你该中断了,但是并不能强制线程中断,是否中断的决定权,在线程自己的手里。Java认为,被停止的线程本身要更清...

2022-01-19 22:16:00 48

原创 【面试刷题】分治法与二叉树

【面试刷题】分治法与二叉树一、二叉树上的分治法模板1、模板public 返回结果类型 divideConquer(TreeNode root) { if (root == null) { 处理空树应该返回的结果 } // if (root.left == null && root.right == null) { /...

2022-01-19 15:30:00 36

原创 【设计模式】UML类图

【设计模式】UML类图一、UML概念1、UML定义统一建模语言(Unified Modeling Language,缩写UML0非专利的第三代建模和规约语言2、UML2.2分类结构式图形:强调的是系统式的建模静态图(类图,对象图,包图)实现图(组件图,部署图)剖面图符合结构图行为式图形:强调系统模型汇总出发的事件活动图状态图用例图交互式图形:...

2022-01-18 23:57:00 30

原创 【Kill Thread Part.1-2】启动线程的正确姿势

【Kill Thread Part.1】启动线程的正确姿势一、start()和run()的比较1、测试代码/** * 描述:对比start和run两种启动线程的方式 */public class StartAndRunMethod { public static void main(String[] args) { Runnable runnable = ()...

2022-01-18 19:35:00 22

原创 【Kill Thread Part.1-1】实现多线程的正确姿势

【Kill Thread Part.1】实现多线程的正确姿势一、实现多线程的方法是1种还是2种还是4种?1、Oraclle官网文档正确说法:2种官方文档方法一:实现Runnable接口方法二:继承Thread类2、实现Runnable接口/** * 描述:用Runnable方式创建线程 */public class RunnableStyle implements Run...

2022-01-18 17:19:00 17

原创 【Kill Thread Part.1】线程八大核心基础知识概览

【Kill Thread Part.1】线程八大核心基础知识思维导图下载地址:https://darkerg.lanzout.com/iHchHzbfipe密码:9qom一、思维导图

2022-01-18 16:15:00 14

原创 【操作系统】存储器管理

【操作系统】存储器管理目标:确保计算机有足够的内存处理数据确保程序可以从可用内存中获取一部分内存使用确保程序可以归还使用后的程序以供其他程序使用一、存储器的层次结构二、程序的装入和链接用户程序要在系统中运行,必须先将它装入内存,然后再将其转变为一个可以执行的程序,通常要经过下面的步骤:编译:编译程序对用户源程序进行编译,形成若干个目标模块链接:有链接程序将变...

2022-01-18 14:59:00 33

原创 【面试刷题】两种排序算法

【面试刷题】两种排序算法一、快速排序1、思路步骤选取中心轴pivot。将小于Pivot,大于pivot的两个值进行交换。对pivot左半部分,pivot右半部分再次进行上述步骤。2、LeetCode-912.排序数组3、代码实现class Solution { public int[] sortArray(int[] nums) { //进行异常处理...

2022-01-13 14:34:00 17

原创 【面试刷题】字符串匹配Robin Karp算法

【面试刷题】字符串匹配Robin Karp算法一、题目LeetCode-28.实现strStr()二、实现O(n^2)的普通算法class Solution { public int strStr(String haystack, String needle) { //进行异常判断 if (haystack==null||needle==null...

2022-01-12 20:47:00 24

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除