自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Apollo的博客

研究过视觉算法的JAVA后端工程师!

  • 博客(26)
  • 资源 (4)
  • 收藏
  • 关注

原创 线程与线程池创建详解

前言近期面试时被问得比较多的线程池,现在进行一个总结1.创建线程方式java有以下四种创建多线程的方式(具体可参考https://blog.csdn.net/jinxinxin1314/article/details/105695860)1:继承Thread类创建线程2:实现Runnable接口创建线程3:使用Callable和FutureTask创建线程4:使用线程池,例如用Executor框架创建线程Callable和Runnable都可以应用于executors。而Thread类

2021-02-27 15:20:34 858 2

原创 同步/异步/阻塞/非阻塞 IO

前言对于NIO以及同步异步的理解不是很深刻,对知识点进行了一下梳理,同时推荐一篇不错的文章!https://blog.csdn.net/twt936457991/article/details/89668350Q1:同步/异步/阻塞/非阻塞 IO 的区别?同步和异步是通信机制,阻塞和非阻塞是调用状态。同步同步 IO 是用户线程发起 IO 请求后需要等待或轮询内核 IO 操作完成后才能继续执行。异步异步 IO 是用户线程发起 IO 请求后可以继续执行,不等待内核 IO 操作的完成,当内核 IO

2021-02-25 11:00:52 1026

原创 volatile的可见性和有序性以及对比syncronized

引言面试京东的时候对这个知识点有点遗忘,现在进行一下总结。JMM(Java内存模型)在 JDK1.2 之前,Java 的内存模型实现总是从主存(即共享内存)读取变量,是不需要进⾏特别的注意的。⽽在当前的 Java 内存模型下,线程可以把变量保存本地内存(⽐如机器的寄存器)中,⽽不是直接在主存中进⾏读写。这就可能造成⼀个线程在主存中修改了⼀个变量的值,⽽另外⼀个线程还继续使⽤它在寄存器中的变量值的拷⻉,造成数据的不⼀致。volatile的可见性jvm知道这个变量是使用volatile修饰,那么他

2021-02-24 22:03:45 408

原创 ArrayBlockingQueue源码详解

阻塞队列插入方法:add(E e) : 添加成功返回true,失败抛IllegalStateException异常offer(E e) : 成功返回 true,如果此队列已满,则返回 false。put(E e) :将元素插入此队列的尾部,如果该队列已满,则一直阻塞删除方法:remove(Object o) :移除指定元素,成功返回true,失败返回falsepoll() : 获取并移除此队列的头元素,若队列为空,则返回 nulltake():获取并移除此队列头元素,若没有元素则一

2021-02-20 19:31:10 664 1

原创 SpringIOC的深入理解

SpringIOC要了解控制反转( Inversion of Control ), 我觉得有必要先了解软件设计的一个重要思想:依赖倒置原则(Dependency Inversion Principle )。什么是依赖倒置原则?假设我们设计一辆汽车:先设计轮子,然后根据轮子大小设计底盘,接着根据底盘设计车身,最后根据车身设计好整个汽车。这里就出现了一个“依赖”关系:汽车依赖车身,车身依赖底盘,底盘依赖轮子。这样的设计看起来没问题,但是可维护性却很低。假设设计完工之后,上司却突然说根据市场需求的变动,要我们

2021-02-19 12:21:11 1278 1

原创 TCP滑动窗口

TCP滑动窗口参考https://blog.csdn.net/yao5hed/article/details/81046945https://blog.csdn.net/ligupeng7929/article/details/79597423https://blog.csdn.net/h2604396739/article/details/85239439概述滑动窗口实现了TCP流控制。首先明确滑动窗口的范畴:TCP是双工的协议,会话的双方都可以同时接收和发送数据。TCP会话的双方都各自维护一

2021-02-18 15:15:21 1784

原创 synchronized锁升级及锁优化

一、锁升级在1.6之前java中不存在只存在重量级锁,这种锁直接对接底层操作系统中的互斥量(mutex),这种同步成本非常高,包括操作系统调用引起的内核态与用户态之间的切换。线程阻塞造成的线程切换等。因此在jdk 1.6中将锁分为四种状态:由低到高分别为:无锁状态、偏向锁状态、轻量级锁状态、重量级锁状态。1. 偏向锁。什么是偏向锁呢?为什么要引入偏向锁呢?​ 偏向锁是如果一个线程获取到了偏向锁,在没有其他线程竞争的情况下,如果下次再执行该同步块时则只需要简单判断当前偏向锁所偏向的对象是否

2021-02-17 23:03:08 1301

原创 MySQL索引-B+树

索引是一种数据结构,用于帮助我们在大量数据中快速定位到我们想要查找的数据。索引最形象的比喻就是图书的目录了。注意这里的大量,数据量大了索引才显得有意义,如果我想要在 [1,2,3,4] 中找到 4 这个数据,直接对全数据检索也很快,没有必要费力气建索引再去查找。索引在 MySQL 数据库中分三类:B+ 树索引Hash 索引全文索引我们今天要介绍的是工作开发中最常接触到的 InnoDB 存储引擎中的 B+ 树索引。要介绍 B+ 树索引,就不得不提二叉查找树,平衡二叉树和 B 树这三种数据结构。

2021-02-14 21:23:39 1288 2

原创 线程的六种状态以及sleep/wait/yield/join的区别

一.线程通常有五种状态:新建状态(New):新创建了一个线程对象。就绪状态(Runnable):线程对象创建后,其他线程调用了该对象的start()方法。该状态的线程位于可运行线程池中,变得可运行,等待 获取CPU的使用权。运行状态(Running):就绪状态的线程获取了CPU,执行程序代码。阻塞状态(Blocked):阻塞状态是线程因为某种原因放弃CPU使用权,暂时停止运行。直到线程进入就绪状态,才有机会转到运行状态。5.死亡状态(Dead):线程执行完了或者因异常退出了run()方法,该线程

2021-02-13 14:03:41 1667 1

原创 互斥锁、自旋锁、读写锁、悲观锁、乐观锁的应用场景

前言在编程世界里,「锁」更是五花八门,多种多样,每种锁的加锁开销以及应用场景也可能会不同。如何用好锁,也是程序员的基本素养之一了。高并发的场景下,如果选对了合适的锁,则会大大提高系统的性能,否则性能会降低。所以,知道各种锁的开销,以及应用场景是很有必要的。接下来,就谈一谈常见的这几种锁:正文多线程访问共享资源的时候,避免不了资源竞争而导致数据错乱的问题,所以我们通常为了解决这一问题,都会在访问共享资源之前加锁。最常用的就是互斥锁,当然还有很多种不同的锁,比如自旋锁、读写锁、乐观锁等,不同

2021-02-10 10:04:56 1708

原创 MySQL的可重复读、幻读及实现原理

目录一、事务的隔离级别二、mysql怎么实现的可重复读举例说明MVCC的实现MVCC逻辑流程-插入MVCC逻辑流程-删除MVCC逻辑流程-修改MVCC逻辑流程-查询三、幻读快照读和当前读四、如何解决幻读事务隔离级别有四种,mysql默认使用的是可重复读,mysql是怎么实现可重复读的?为什么会出现幻读?是否解决了幻读的问题?一、事务的隔离级别Read Uncommitted(未提交读)在该隔离级别,所有事务都可以看到其他未提交事务的执行结果。读取未提交的数据,也被称之为脏读(D

2021-02-08 23:30:53 5735 1

原创 PriorityQueue优先级队列用法

用法先说结论,JAVA中默认是小根堆,即小的在堆顶(poll时小的出去)接下来看下默认的最小堆写法PriorityQueue<Integer> queue = new PriorityQueue<Integer>(new Comparator<Integer>(){ @Override public int compare(Integer o1, Integer o2){ return o1 < o2 ? -1 : 1; // 最小优先队列,直接 re

2021-02-08 12:58:26 6358

原创 十大经典排序算法总结

十种常见排序算法可以分为两大类:非线性时间比较类排序:通过比较来决定元素间的相对次序,由于其时间复杂度不能突破O(nlogn),因此称为非线性时间比较类排序。线性时间非比较类排序:不通过比较来决定元素间的相对次序,它可以突破基于比较排序的时间下界,以线性时间运行,因此称为线性时间非比较类排序。各排序算法复杂度及稳定性:相关概念稳定:如果a原本在b前面,而a=b,排序之后a仍然在b的前面。不稳定:如果a原本在b的前面,而a=b,排序之后 a 可能会出现在 b 的后面。时间复杂度:1.时

2021-02-07 23:40:50 19827 1

原创 冒泡排序

冒泡排序算法原理比较相邻的两个元素,如果前者比后者大(反之倒序),则交换。对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。针对所有的元素重复以上的步骤。持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。例:给出数列{9,6,1,3,5}先排数字9,以此比较与交换 然后是数字6 数字1比3小,3比5小 ,所以5不动以此类推1,3不动代码:#include<iostream>void Bubble_

2021-02-07 23:32:34 9933

原创 快速排序的时间复杂度和空间复杂度

我们来分析一下快速排序法的性能。快速排序的时间性能取决于快速排序递归的深度,可以用递归树来描述递归算法的执行情况。如图9‐9‐7所示,它是{50,10,90,30, 70,40,80,60,20}在快速排序过程中的递归过程。由于我们的第一个关键字是50,正好是待排序的序列的中间值,因此递归树是平衡的,此时性能也比较好。空间复杂度,主要是递归造成的栈空间的使用,最好情况,递归树的深度为logn其空间复杂度也就为 O(logn),最坏情况,需要进行n‐1递归调用,其空间复杂度为O(

2021-02-07 22:43:18 15687

原创 狂神说SpringBoot最全笔记

目录狂神说SpringBoot01:Hello,World!狂神说SpringBoot02:运行原理初探狂神说SpringBoot03:yaml配置注入狂神说SpringBoot04:JSR303数据校验及多环境切换狂神说SpringBoot05:自动配置原理狂神说SpringBoot06:自定义starter狂神说SpringBoot07:整合JDBC狂神说SpringBoot08:整合Druid狂神说SpringBoot09:整合MyBatis狂神说SpringBoot10:Web开

2021-02-07 10:52:56 25563 7

原创 HashMap初始容量为什么是2的n次幂及扩容为什么是2倍的形式?

前言逛了一圈发现大家对于这个问题的回答写的都比较散乱,简而言之两点原因:1.为了保证得到的新的数组索引和老数组索引一致2.rehash时的取余操作,hash % length == hash & (length - 1)这个关系只有在length等于二的幂次方时成立,位运算能比%高效得多论述1.为了保证得到的新的数组索引和老数组索引一致。HashMap的初始容量是2的n次幂,扩容也是2倍的形式进行扩容,是因为容量是2的n次幂,可以使得添加的元素均匀分布在HashMap中的数组上,减少has

2021-02-07 00:37:12 15461 7

原创 Spring依赖注入与自动装配

Spring依赖注入与自动装配首先推荐狂神说的Spring讲义1.Beans.xml作用简而言之,我们通过在beans.xml中进行配置,将各种类交给spring来管理。2.依赖注入推荐狂神说Spring03:依赖注入(DI)这要从控制反转说起,控制反转是一种通过描述(XML或注解)并通过第三方去生产或获取特定对象的方式。在Spring中实现控制反转的是IoC容器,其实现方法是依赖注入(Dependency Injection,DI)。所谓的IoC,一句话搞定 : 对象由Spring 来创建 ,

2021-02-06 12:32:49 13828 1

原创 Redis分布式锁详解

一、分布式简介什么是分布式,用最简单的话来说,就是为了较低单个服务器的压力,将功能分布在不同的机器上面;就比如:本来一个程序员可以完成一个项目:需求->设计->编码->测试但是项目多的时候,一个人也扛不住,这就需要不同的人进行分工合作了这就是一个简单的分布式协同工作了;二、分布式锁首先看一个问题,如果说某个环节被终止或者别侵占,就会发生不可知的事情这就会出现,设计好的或者设计的半成品会被破坏,导致后面环节出错;这时候,我们就需要引入分布式锁的概念;何为分布式锁?

2021-02-05 12:45:01 16925 1

原创 JAVA-高频面试题汇总:堆和栈

前言为了让小伙伴们更好地刷题,我将所有leetcode常考题按照知识点进行了归纳。高频题汇总:JAVA-高频面试题汇总:动态规划JAVA-高频面试题汇总:字符串JAVA-高频面试题汇总:二叉树(上)JAVA-高频面试题汇总:二叉树(下)JAVA-高频面试题汇总:回溯JAVA-高频面试题汇总:堆和栈接下来还会进行其他模块的总结,有一起在准备暑期实习的JAVA后端的伙伴可以一起交流!小编微信: Apollo___quan目录反转链表(剑指)反转链表 II两个链表的第一个公共节点(

2021-02-03 23:45:49 13914 2

原创 Linux非root用户安装JDK

前言假期在家连接学校服务器,想在服务器上安装JDK跑java程序,于是做了教程供大家参考。1.下载JDK1.8压缩包如果不知道怎么把包传给Linux,可以先把包放到QQ邮箱中转站,然后服务器上网页下载即可。链接:https://pan.baidu.com/s/1GzsuB9llYi0buMlrmr2JHg提取码:xsle2.解压得到文件夹在同一路径下打开控制台,输入以下指令解压:tar -zxvf jdk-8u151-linux-x64.tar.gz得到jdk文件夹3.设置环境变量

2021-02-03 18:57:15 16233 1

原创 字节、位与二进制表示

前言仅针对JAVA,总结几个知识点。字节与位1字节(byte)= 8位(bit)每个bit位非0即1,即二进制表达中的0或1,0001中每个“0”和“1”即为位。JAVA常见基本类型:byte 1字节short 2字节int 4字节long 8字节char 2字节(C语言中是1字节)可以存储一个汉字float 4字节double 8字节其中以int为例,int类型存储的最大的数不是232,而是-231~(231-1),因为正数最高位为0

2021-02-03 14:47:50 22751 3

原创 leetcode高频题汇总-目录

前言随着行业不断内卷,手撕leetcode已是进入大厂必备的条件。笔者网罗了大量BAT等一线互联网大厂笔试面试题,对高频题做出了分类总结,题量大约两百题,涵盖了剑指与TOP100。每道题的题目都提供了 原题链接 与 最佳题解,算法熟练度极其重要,大家参考我的博客反复练习即可! 同时小编在组建实习笔试互助群,帮助各位笔试机考时能够组队通关,下方留下了小编微信二维码,有需要的请联系! 小编微信: Apollo___quan专栏目录:JAVA-高频面试题汇总:动态规划JAVA-高频面试题汇总:字

2021-02-03 09:46:44 16861 4

原创 JAVA-高频面试题汇总:数组(下)

前言为了让小伙伴们更好地刷题,我将所有leetcode常考题按照知识点进行了归纳。高频题汇总:JAVA-高频面试题汇总:动态规划JAVA-高频面试题汇总:字符串JAVA-高频面试题汇总:二叉树(上)JAVA-高频面试题汇总:二叉树(下)JAVA-高频面试题汇总:回溯JAVA-高频面试题汇总:链表JAVA-高频面试题汇总:数组(上)JAVA-高频面试题汇总:数组(下)接下来还会进行其他模块的总结,有一起在准备暑期实习的JAVA后端的伙伴可以一起交流!小编微信: Apollo___qua

2021-02-03 09:36:47 16135 5

原创 JAVA-高频面试题汇总:数组(上)

前言为了让小伙伴们更好地刷题,我将所有leetcode常考题按照知识点进行了归纳。高频题汇总:JAVA-高频面试题汇总:动态规划JAVA-高频面试题汇总:字符串JAVA-高频面试题汇总:二叉树(上)JAVA-高频面试题汇总:二叉树(下)JAVA-高频面试题汇总:回溯JAVA-高频面试题汇总:链表JAVA-高频面试题汇总:数组(上)接下来还会进行其他模块的总结,有一起在准备暑期实习的JAVA后端的伙伴可以一起交流!小编微信: Apollo___quan目录二维数组中的查找(剑指)

2021-02-02 22:48:37 16692 3

原创 JAVA-高频面试题汇总:链表

前言为了让小伙伴们更好地刷题,我将所有leetcode常考题按照知识点进行了归纳。高频题汇总:JAVA-高频面试题汇总:动态规划JAVA-高频面试题汇总:字符串JAVA-高频面试题汇总:二叉树(上)JAVA-高频面试题汇总:二叉树(下)JAVA-高频面试题汇总:回溯JAVA-高频面试题汇总:链表接下来还会进行其他模块的总结,有一起在准备暑期实习的JAVA后端的伙伴可以一起交流!小编微信: Apollo___quan目录反转链表(剑指)反转链表 II两个链表的第一个公共节点(剑

2021-02-01 21:13:30 19616 4

SpringMVC狂神说最全笔记

根据SpringMVC狂神说公众号做的笔记,把他做成了md方便大家阅读

2021-01-29

MyBatis狂神说最全笔记

根据狂神说狂神说狂神说视频复现的一模一样的笔记

2021-01-24

狂神说Spring5最全笔记

根据狂神说狂神说Spring5视频复现的一摸一样的笔记

2021-01-13

空空如也

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

TA关注的人

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