自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Selector和Epoll区别

(1)select,poll实现需要自己不断轮询所有fd集合,直到设备就绪,期间可能要睡眠和唤醒多次交替。而epoll其实也需要调用epoll_wait不断轮询就绪链表,期间也可能多次睡眠和唤醒交替,但是它是设备就绪时,调用回调函数,把就绪fd放入就绪链表中,并唤醒在epoll_wait中进入睡眠的进程。虽然都要睡眠和交替,但是select和poll在“醒着”的时候要遍历整个fd集合,而epoll在“醒着”的时候只要判断一下就绪链表是否为空就行了,这节省了大量的CPU时间。这就是回调机制带来的性能提升。

2022-08-22 17:16:26 406 2

原创 三次握手的原理

三次握手的细节问答三次握手客户端向服务端发送SYN (SYN=1 seq=J)服务端返回SYN,ACK(SYN=1 ACK=1 ack=J+1,seq=K)客户端发送ACK(ACK=1 ack=K+1)建立连接可以两次握手吗?为什么?不可以。因为可能会出现已失效的连接请求报文段又传到了服务器端。client 发出的第一个连接请求报文 段并没有丢失,而是在某个网络结点长时间的滞留了,以致延误到连接释放以后的某个时间才到达 server。本来这是一个早已失效的报文段。但 server 收到

2022-03-02 16:58:24 248

原创 垃圾回收算法原理

首先在垃圾划分上:垃圾收集算法可以划分为 “引用计数式垃圾收集”(Reference Counting GC) 和 “追踪式垃圾收集”(Tracing GC) 两大类,这两类也常被称作“直接垃圾收集”和“间接垃圾收集”。其中追踪式垃圾收集就是上文所说的可达性分析。引用计数法有一定缺陷,因此虚拟机主流采用可达性分析而又根据分代收集理论,绝大多数对象都是朝生夕灭的,同时存活时间越长的对象,越容易继续存活下去。因此至少会把Java堆划分为新生代(Young Generation)和老年代(Old Gene

2022-02-27 15:21:58 397

原创 JVM调优

首先我们对JVM有一个清楚的认识你们的项目如何排查JVM问题通过命令来查看jmap查看JVM中各个区域的使用情况jstack查看线程运行情况,有哪些线程阻塞,有没有出现死锁jstat命令查看垃圾回收情况,例如发现了垃圾回收中出现频繁Full GC现象什么是Full GC从年轻代空间(包括 Eden 和 Survivor 区域)回收内存被称为 Minor GC,对老年代GC称为Major GC,而Full GC是对整个堆来说的为什么出现这种现象当对象或数组过大,超过一定阈值时,会直接进

2022-02-27 15:20:10 338

原创 ThreadLock详细介绍(面试工作知识点)

ThreadLockThreadLock为每一个线程提供一个局部变量,这个局部变量只有当前线程才可以使用,是线程安全的。其原理是为每一个线程分配一个对象,这是应用层面来保证的首先获取到每个线程独有的ThreadLocalMap,然后将ThreadLocal<String> var=new ThreadLocal<>();中的var当作键,并存放value。所以Thread只是起到了一个容器的作用,通过ThreadLock的set()跟 get()方法来使用 publi

2022-02-26 23:57:15 3266

原创 HashMap知识点详细整理

HashMaphashmap的底层数据结构Hashmap底层是由数组和链表结合实现的参考容量(capacity)用来作为创建map对象中Node[]数组的初始长度(容量)的参考,默认为16。可以自己指定长度,指定方式为:Map map = new HashMap<>(capacity);//capacity的值就是你要指定的长度扩容阈值(threshold)和负载因子(loadFactor)hashmap在新增元素的过程中,如果达到扩容阈值,就会扩大Node[]数组的长度其默认

2022-02-26 17:35:49 670

原创 红黑树的删除操作详解

红黑树的删除操作无子节点时,删除节点可能为红色或者黑色;1.1 如果为红色,直接删除即可,不会影响黑色节点的数量;1.2 如果为黑色,则需要进行删除平衡的操作了;只有一个子节点时,删除节点只能是黑色,其子节点为红色,否则无法满足红黑树的性质了。 此时用删除节点的子节点接到父节点,且将子节点颜色涂黑,保证黑色数量。有两个子节点时,与二叉搜索树一样,使用后继节点作为替换的删除节点,情形转至为1或2处理。例如可以:直接将D1的值赋值给D就行,然后讨论的是如何删除D1总体看来红黑树删除

2022-02-26 17:04:41 5174 4

原创 红黑树的特性和插入操作详解

红黑树的特性:(1)每个节点不是黑色就是红色。(2)根节点必须是黑色。(3)每个叶子节点(NIL)是黑色。 [注意:这里叶子节点,是指为空(NIL或NULL)的叶子节点!](4)如果一个节点是红色的,则它的子节点必须是黑色的。(5)从任一节点到其每个叶子的简单路径都包含相同数目的黑色节点。红黑树的应用红黑树的应用比较广泛,主要是用它来存储有序的数据,它的时间复杂度是O(lgn),效率非常之高。例如,Java集合中的TreeSet和TreeMap,C++ STL中的set、map,以及Linu

2022-02-26 15:46:13 528

原创 二叉搜索树的删除问题

二叉搜索树节点删除的问题分为下面几种情况1.没有子节点,直接删除2.有单个子节点,直接用子节点替换3.有两个子节点寻找后继节点,所谓后继节点是指:1.左子节点的最最右边子节点2.右子节点下的最最左边子节点然后用两者任意一个都行,代替删除节点就行例如该图下1的后继节点为7和5但是7后面仍然有节点,把7替换到1,那节点8怎么办其实现在就变成了删除节点7的递归子问题了总结而言:二叉搜索树的删除操作一共有三种情况,其中第三种情况是寻找一个后继节点,替换要删除的节点,并将问题转化为删除后继节

2022-02-26 15:05:17 635 1

原创 阻塞非阻塞和同步异步概念理解

非阻塞算法 vs 阻塞算法阻塞和非阻塞是在并发编程中常见的两个名称,其具体含义是什么呢?我们所说的 “阻塞”是指进程在发起了一个系统调用(System Call) 后, 由于该系统调用的操作不能立即完成,需要等待一段时间,于是内核将进程挂起为等待 (waiting)状态, 以确保它不会被调度执行, 占用 CPU 资源。友情提示: 在任意时刻, 一个 CPU 核心上(processor)只可能运行一个进程 。阻塞算法简单概括为:会阻塞线程,直到请求的操作可以被执行,如果不能执行就需要一直等待例如,如

2022-01-11 14:05:18 397

原创 并发与资源限制关系

并发编程中的资源限制问题单核CPU中并发能让程序更快吗并发为什么能让程序变得更快,并发是指在宏观上并行,在微观上串行简单理解多个线程并发运行,多个工人干活肯定能更早完成任务,提高速度,但真的是这样吗?首先讨论单核CPU,并发有没有好处。首先一个程序并不是一直在使用CPU进行计算,相反IO也需要大量的时间。线程A在进行IO工作时,其他线程能在这段时间利用CPU工作。例如高IO低CPU和高CPU低IO类型的工作结合起来,所用时间远小于两个串行起来运行。但是纯CPU无IO型工作时,多线程效率是低于单线

2022-01-11 12:47:01 885

原创 上下文切换理解以及减少方法

并发编程面临着上下文切换,死锁等问题。尤其在少量数据的情况下,并发可能因为线程的创建和上下文切换的开销等问题,甚至比串行执行的速度更慢。本文介绍了上下文切换的定义,以及减少上下文切换的方法。

2022-01-10 20:50:32 166

原创 死锁产生条件和解决办法

死锁死锁产生的四个条件产生死锁必须同时满足以下四个条件,只要其中任一条件不成立,死锁就不会发生。互斥条件:线程要求对所分配的资源(如打印机)进行排他性控制,即在一段时间内某资源仅为一个线程所占有。此时若有其他线程请求该资源,则请求线程只能等待不剥夺条件:线程所获得的资源在未使用完毕之前,不能被其他线程强行夺走,即只能 由获得该资源的线程自己来释放(只能是主动释放)请求和保持条件:线程已经保持了至少一个资源,但又提出了新的资源请求,而该资源 已被其他线程占有,此时请求线程被阻塞,但对自己已获得的资源

2022-01-10 19:15:58 1432

原创 深度学习常见网络结构和设计思路总结(期末复习)

该文发布的主要原因是深度学习期末开卷考试,因此整理了NN,CNN,RNN,GAN各个网络模型原理和相关知识。 并对如何设计一个神经网络提出相关讨论,以及对神经网络中损失函数,优化算法等也举例,分享大家,一起进步

2021-12-28 20:19:16 8419 1

原创 动态规划之在二叉树中使用DP

该题为在二叉树中使用动态规划,题目还是比较新颖的,也是非常有启发作用。能够对动态规划思想和树结构的掌握提供很多学习经验。

2021-12-25 14:18:57 517

原创 一类二分法的经典例题

二分法往往应用于搜索的情况,但是本题情况特殊,思路很隐藏,需要自己依托数据要求构建搜索情景。而且发现不少人都会从动态规划思路进行思考,本文也会对dp进行相应解析,并提出dp思路的缺点,有一定启迪作用

2021-12-21 20:40:28 381

原创 拓扑排序的经典例题(也可以用深度优先搜索)

本文为拓扑排序的一道经典例题,也可以用深度优先搜索进行完成,重点是对场景的分析以及对中间用到的数据以什么样的形式进行记录和保存,最后是中间过程代码的优化。

2021-12-16 16:25:25 612

原创 Future和FutureTask用法详细介绍

在并发编程中,多线程的实现有继承Thread和Runnable,因为单继承的原因我们往往舍弃掉Thread而选择Runnable同样的道理,无论是Thread还是Runnable在执行完任务之后无法获取执行结果,无法知道任务是否被完成。我们肯定要掌握功能更加强大的,尤其又是比较基础的知识,因此Future和FutureTask需要掌握与熟练运用

2021-12-10 19:58:37 319

原创 Dash docset文档加速下载方法

本文提供了Dash docset文档加速下载方法以及如何配合IntelliJ 更方便的使用步骤, Dash能让开发者能够非常方面的阅读API文档,是开发过程中给力的工具,因此下好dash的Api重要

2021-12-10 19:22:12 747 1

原创 Jredis的使用

JRedis 是一个高性能的 Java 客户端,用来连接到 Redis 分布式哈希键-值数据库。提供同步和异步的连接。本文讲述了从Maven的引到Redis的常用API,事务的开启以及Redis线程池

2021-12-10 00:11:20 3028

原创 Redis复制

Redis的复制就是我们常说的主从复制,主机数据更新后根据配置和策略,自动同步到备机的master/slaver机制,Master以写为主,Slave以读为主。本文详细讲解了redis主从复制的使用,

2021-12-09 12:20:19 629

原创 执行操作后字典序最小的字符串

执行操作后字典序最小的字符串题目,该题的思路让我感觉很新颖,非常容易抓不住重点,这需要提高更深的场景模拟能力和分析能力,分析字符串到底是怎么变换的,这样就容易进行暴力解答,再慢慢优化得到更好的解

2021-12-09 11:06:24 991

原创 并查集(947. 移除最多的同行或同列石头)

这是一道并查集的经典例题,其中也隐藏了一些陷阱,例如容易想成深度或者广度遍历,并且如何并如何查询的思路也容易绕,所有还是有一定学习价值的

2021-12-08 13:28:30 84

原创 docker修改容器配置文件的三种方法

docker容器化技术在打包生产和发布中占据着更高的地位,其高效简便很有亮点,在我们利用images创建容器之后难免会想修改其中的一部分配置,尤其在调优中,本文从修改容器配置文件的三种方法进行了讲解。

2021-12-07 16:59:03 27056 1

原创 继承能不能继承私有属性和方法

在JAVA中,子类是无法继承父类的private修饰的属性和方法的,例如父类的属性私有,子类调用必须通过public的set和get获取,这有利于在开发过程中保护父类的某种属性和方法不被覆盖

2021-12-06 15:46:28 1826 1

原创 JVM .java文件如何被加载运行

我们编写的hello world等程序仅仅是.java文件,java文件又是如何被jvm加载,通过什么样方式加载,加载到那里了呢?本文从类加载,Car car1=new Car()还有类锁,对象锁解读

2021-12-06 15:01:15 589

原创 Redis的事务(概念,用法与深度解读)

本文从Redis的事务是什么,事务执行四种情况,redis如何支持事务,Redis的事务特性对比传统ACID又有什么区别和共同点等多个方面进行解析

2021-12-06 10:23:38 743

原创 最长公共子序列(动态规划,画图解答)

本文通过画图解答一道动态规划经典题目,最长公共子序列,并在文末回顾一下动态规划的相关概念的思路,主要是最优子结构性质和子问题重叠性质。

2021-12-05 11:49:32 389

原创 Redis的持久化

Redis的持久化主要分为RDB和AOF两种方式 ,本文从rdb和aof的配置文件,策略模式和两者对比的优点和缺点等方面进行了讲述。

2021-12-04 21:29:00 66

原创 最小体力消耗路径(算法)

本题采用并查集和最短距离两种思路解答《最小体力消耗路径》,该题可以有四个方向移动,并不是每次都只能往下或者往右移动,dp解决不了,从其他思路一点点得出最短路径或者并查集,最终解决

2021-12-03 15:14:26 677

原创 邻位交换的最小次数

邻位交换的最小次数,首先找到一个比当前更大的排列,可以通过栈来简单找到。其次得到最小的交换次序,本文结合图像给出了详细的介绍,证明了这样交换的正确性

2021-12-02 19:30:35 734

原创 二维矩阵针对不同问题的遍历思路(算法)

二维数组遍历方式常常为从左上角开始,但是针对不同情节,采用其他的遍历思路往往有更好的效果,避免了暴力解题。

2021-12-01 20:42:18 800

原创 最小生成树Prim算法Java版

最小生成树Prim算法Java版算法描述:在一个加权连通图中,顶点集合V,边集合为E任意选出一个点作为初始顶点,标记为visit,计算所有与之相连接的点的距离,选择距离最短的,标记visit.重复以下操作,直到所有点都被标记为visit:在剩下的点钟,计算与已标记visit点距离最小的点,标记visit,证明加入了最小生成树。对比克鲁斯卡尔算法假设网中有n个节点和e条边,普利姆算法的时间复杂度是O(n^2),克鲁斯卡尔算法的时间复杂度是O(eloge),可以看出前者与网中的边数无关,而后

2021-11-29 12:22:46 586

原创 数据库发展概述(从SQL到NOSQL发展历程讲解)

数据库概述(从SQL到NOSQL发展历程讲解)文章目录数据库概述(从SQL到NOSQL发展历程讲解)数据库发展历程概述单机MySQL时代Memcached(缓存)+MySQL+垂直拆分例如Mybits缓存技术一级缓存二级缓存垂直拆分Mysql主从读写分离概述从库进行数据更新解决的问题为什么能提高性能存在的问题总结分表分库+水平拆分+mysql集群MyISAM和InnoDB引擎区别不支持事务的情况分表分库分区什么是表分区?表分区与分表的区别表分区有什么好处?MySQL的扩展性瓶颈今天面临的挑战大数据时代的3

2021-11-28 20:44:14 1657

原创 迪杰斯特拉(Dijkstra)(详细讲解+Java源码)

迪杰斯特拉算法兼具动态规划和贪心思想贪心思想例:A能到达的各点中,AC距离最小那么无论后续怎么变化,再找任何其他路径,A到C的距离都不可能小于A->x->C,因为A->x的距离已经大于A->C了所有我们也不用再考虑C节点了,C已经是最小距离了动态规划思想现在有A->B A->C A->D如果A->C的距离是三个中最小的一个,那么A->B->C,A->D->C 都是大于A->C这是上面论述过的但是我们无法保证A-&.

2021-11-28 10:58:05 519

原创 并查集(例子+画图+Code详细解析)

并查集文章目录并查集什么是并查集根据具体场景深入理解背景介绍题目分析解题代码并查集的经典案例-克鲁斯卡尔算法克鲁斯卡尔算法简介具体的操作过程为:**两个核心问题**完整版代码代码结果输出什么是并查集举个例子简单理解,就是相同血缘的人组成了一个个家族(不考虑家庭伦理剧!)两个人都没有家族但是血缘相同,那么他们俩成立一个家族如果某人和某个家族的人有血缘关系,就把他加入该家族如果我们发现两个不同家族的人有人血缘相同,就把两个家族合并为一个家族最后得到的情况是,各个家族真的没有血缘关

2021-11-27 11:33:09 972

原创 垃圾收集概述和垃圾收集算法(超详细介绍)

文章目录为什么我们还要去了解垃圾收集和内存分配哪些内存需要回收不需要回收的需要回收的方法区的回收回收废弃常量回收“不再被使用的类”什么时候回收回收死去的对象如何判断对象死了引用计数算法存在的问题可达性分析算法可作为GC Roots的对象的种类引用引用的传统定义缺陷改进强引用软引用弱引用虚引用垃圾收集算法如何理解追踪式垃圾是间接收集追踪式收集和后文中的分代理论,标记-清处算法等联系分代收集理论为什么要分代分成哪几代GC名称辨析如何处理跨代引用问题标记-清除算法标记-复制算法概述优点缺点后续改进新的比例-App

2021-11-27 11:11:59 840

原创 注解和反射(全方面解析)

前言:注解和反射是一切框架的底层本文很多是学习狂神视频时做的笔记,感谢狂神,也有加入了自己的理解和思考,希望作为一个整理,也能对大家有所帮助。注解(java.Annotation)什么是注解1.不是程序本身,可以对程序作出解释2.可以被其他程序(如编译器等)读取内置注解@Override 重写@Deprecated 指这段代码过时了@SuppressWarning(“all”) 抑制编译时候的警告信息,需要一个参数元注解@Targetclass learn extends O

2021-11-26 14:23:58 508

原创 堆排序(思路详细介绍)

文章目录概述完全二叉树介绍构建最小堆比较思路遍历思路测试整体代码输出结果概述堆排序算法的时间复杂度为nlog2n,最坏最好情况下都是nlog2n,空间复杂度为o(1),是不稳定的排序算法。完全二叉树介绍通过下图映射关系,可以知道数组中元素索引和满二叉树具体位置的对应关系构建最小堆比较思路比较顺序-不断和子节点进行比较如果比子节点都小就停止否则相互替换,继续和底部子节点比较,直到没有子节点 // parent*2+1 parent*2+2 public static

2021-11-25 13:12:25 577

原创 分治算法(用例子说明)

文章目录分治法思想例题-所有可能的满二叉树题目描述解题思路代码归并排序快速排序分治法思想分治法,字面意思是“分而治之”,就是把一个复杂的1问题分成两个或多个相同或相似的子问题,再把子问题分成更小的子问题直到最后子问题可以简单地直接求解,原问题的解即子问题的解的合并。代表例子有快速排序和归并排序。例题-所有可能的满二叉树题目描述所有可能的满二叉树满二叉树是一类二叉树,其中每个结点恰好有 0 或 2 个子结点。返回包含 N 个结点的所有可能满二叉树的列表。 答案的每个元素都是一个可能树的根结点。

2021-11-25 10:35:03 386

空空如也

空空如也

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

TA关注的人

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