09 2021 档案

数据结构——5、树——5、图
摘要:2.3图 2.3.1图的概念 究竟什么是图呢?大家先来想一想咱们常用的互联网产品。 微信中,许许多多的用户组成了一个多对多的朋友关系网,这个关系网就是数据结构当中的图(Graph)。 再举一个栗子,咱们在用百度地图的时候,常常会使用导航功能。比如你在地铁站A附近,你想去的地点在地铁站F附近,那么导航 阅读全文

posted @ 2021-09-30 10:07 夜萤火虫和你 阅读(292) 评论(0) 推荐(0)

数据结构——5、树——4、二叉堆
摘要:1.1.1 *二叉堆* 二叉堆本质上是一种完全二叉树,它分为两个类型: \1. 最大堆:最大堆任何一个父节点的值,都大于等于它左右孩子节点的值。 \2. 最小堆:最小堆任何一个父节点的值,都小于等于它左右孩子节点的值。 二叉堆的根节点叫做堆顶。 最大堆和最小堆的特点: 最大堆的堆顶,是整个堆中的最大 阅读全文

posted @ 2021-09-30 10:06 夜萤火虫和你 阅读(71) 评论(0) 推荐(0)

数据结构——5、树——4、红黑树
摘要:1.1.1 *红黑树* 1.1.1.1 *二叉查找树* 要学习红黑树,先要学习二叉查找树 二叉查找树(BST)具备什么特性呢? 1.左子树上所有结点的值均小于或等于它的根结点的值。 2.右子树上所有结点的值均大于或等于它的根结点的值。 3.左、右子树也分别为二叉排序树。 1.1.1.1.1 *查找* 阅读全文

posted @ 2021-09-29 10:06 夜萤火虫和你 阅读(79) 评论(0) 推荐(0)

数据结构——5、树——3、B+树
摘要:1.1.1 *B+树* 1.1.1.1 *B+树实现细节是什么样?* 1.1.1.2 *B+树的特征* 一个m阶的B+树具有如下几个特征: 1、 有k个子树的中间节点包含有k个元素(B树中是k-1个元素),每个元素不保存数据,只用来索引,所有数据都保存在叶子节点。 2、 所有的叶子结点中包含了全部元 阅读全文

posted @ 2021-09-29 10:05 夜萤火虫和你 阅读(165) 评论(0) 推荐(0)

数据结构——5、树——2、B-树/B树
摘要:1.1.1 *B-树/B树* 1.1.1.1 *索引为什么使用树结构* 要弄明白B+树,先要弄明白B-树,B-树就是B树,中间的横线不是减号 1、数据库索引为什么要使用树结构进行存储? 树的查询效率高,并且可以保持有序 2、为什么没有使用二叉查找树树来实现? 二叉查找树查询的时间复杂度是O(logN 阅读全文

posted @ 2021-09-28 10:24 夜萤火虫和你 阅读(238) 评论(0) 推荐(0)

数据结构——5、树——1、二叉树
摘要:1.1.1 *二叉树* 1.1.1.1 *二叉树特点* 1、 每个节点最多有两个子树,所以二叉树不存在度小于2的节点 2、 左子树和右子树是有顺序的,次序不能任意颠倒 3、 即使树中某节点只有一个子树,也要区分它是左子树,还是右子树 1.1.1.2 *二叉树代码* 考察是否会写递归:即在方法中调用自 阅读全文

posted @ 2021-09-28 10:22 夜萤火虫和你 阅读(212) 评论(0) 推荐(0)

数据结构——4、散列表
摘要:1.1.1 *散列表* 散列表,即哈希表,这种数据结构提供了key和value的映射关系,在jdk中也叫做entry,只要给出一个key,就能查找出相应的value,查找的时间复杂度接近于O(1) 散列表本质上也是一个数组,数组是根据角标来查找元素的,散列表是根据key来查找元素的,且key以str 阅读全文

posted @ 2021-09-27 10:15 夜萤火虫和你 阅读(192) 评论(0) 推荐(0)

数据结构——3、栈和队列
摘要:1.1.1 *栈和队列* 1.1.1.1 *结构图* 数组和链表可以看成数据存储的物理结构 栈和队列可以看成数据存储的逻辑结构,可以利用数组进行实现,也可以利用链表进行实现 栈:先入后出,包括栈底和栈顶 不管是出栈还是入栈,时间复杂度都是O(1) 队列:先入先出,包括队头和队尾 循环队列:用数组的方 阅读全文

posted @ 2021-09-27 10:14 夜萤火虫和你 阅读(284) 评论(0) 推荐(0)

数据结构——2、链表
摘要:1.1.1 *链表* 1.1.1.1 *内存中的链表结构* 链表是一种在物理上非连续、非顺序的数据结构,由若干node节点组成 链表包括单向链表和双向链表 单向链表包括两部分:存放数据的变量data;指向下一个节点的指针next 链表的第一个节点被称为头结点,最后一个节点被会成为尾节点,尾节点的ne 阅读全文

posted @ 2021-09-27 10:13 夜萤火虫和你 阅读(217) 评论(0) 推荐(0)

数据结构——1、数组
摘要:1.1.1 *数组* 1.1.1.1 *内存中的数组结构* 数组是:有限个相同类型的变量所组成的有序集合,数组中的每一个变量被称为元素 数组的一个特点:在内存中顺序存储 数组在内存中是如何进行顺序存储的 内存是由一个一个连续的内存单元组成的,每一个内存单元有自己的地址,数组中的每一个元素,都存储在内 阅读全文

posted @ 2021-09-24 09:54 夜萤火虫和你 阅读(208) 评论(0) 推荐(0)

Java——http——2、三次握手和四次挥手
摘要:1.1.1 *三次握手和四次挥手* TCP 三次握手就好比两个人在街上隔着50米看见了对方,但是,因为雾霾等原因不能100%确认,所以,要通过招手的方式,相互确定对方是否认识自己。 我们看到这个过程中一共是四个动作,招手–点头微笑–招手–点头微笑。其中连续进行了2个动作,先是点头微笑(回复对方),然 阅读全文

posted @ 2021-09-23 10:26 夜萤火虫和你 阅读(312) 评论(0) 推荐(0)

java——http——1、http的连接过程
摘要:1.1.1 *TCP连接的过程* 输入一个网址之后客户端服务端之间发生了什么……推荐《图解HTTP》 当你在浏览器中输入一个网址,浏览器的处理过程如下: 1、浏览器查找该域名的 IP 地址 2、TCP建立连接 3、浏览器根据解析得到的IP地址向web服务器发送一个 HTTP 请求:三次握手 4、服务 阅读全文

posted @ 2021-09-22 10:47 夜萤火虫和你 阅读(1012) 评论(0) 推荐(0)

Java——ConcurrentHashMap
摘要:1.1 *ConcurrentHashMap* 1.1.1 *ConcurrentHashMap的并发度是什么?* ConcurrentHashMap把实际map划分成若干部分来实现它的可扩展性和线程安全。这种划分是使用并发度获得的,它是 ConcurrentHashMap类构造函数的一个可选参数, 阅读全文

posted @ 2021-09-18 11:01 夜萤火虫和你 阅读(1505) 评论(0) 推荐(0)

Java——HashMap——3、高并发下的HashMap
摘要:1.1.1 *高并发下的HashMap* 1.1.1.1 *rehash操作* 随着操作的不断执行, 哈希表保存的键值对会逐渐地增多或者减少, 为了让哈希表的负载因子(load factor)维持在一个合理的范围之内, 当哈希表保存的键值对数量太多或者太少时, 程序需要对哈希表的大小进行相应的扩展或 阅读全文

posted @ 2021-09-18 10:59 夜萤火虫和你 阅读(207) 评论(0) 推荐(0)

Java——HashMap——2、HashMap的工作原理
摘要:1.1.1 *HashMap的工作原理* HashMap是键值对key-value形式双列集合。它的底层存储原理是哈希表。为了简明描述哈希表(数组+链表),我画了一个图 1)E*代表一个Node节点,每个Node节点就是我们理解的一个key-value的mapping映射。 2)每个Node除了保存 阅读全文

posted @ 2021-09-18 10:57 夜萤火虫和你 阅读(272) 评论(0) 推荐(0)

java——HashMap——1、基础
摘要:1.1.1 *概念* 对于 HashMap 及其子类而言,它们采用 Hash 算法来决定集合中元素的存储位置。当系统开始初始化 HashMap 时,系统会创建一个长度为 capacity 的 Entry 数组(即key-value数组),默认capacity长度是16, 这个数组里可以存储元素的位置 阅读全文

posted @ 2021-09-18 10:55 夜萤火虫和你 阅读(51) 评论(0) 推荐(0)

锁——5、atomic类
摘要:Atomic使用了cas机制,避免了volatile修饰的成员变量不是原子性的,count++问题 **一、示例 ** 1、多线程示例 2、添加synchronized同步锁 这段代码不是线程安全的,所以最终的自增结果可能会小于200 如果加上同步锁,代码如下: 加了同步锁之后,count自增的操作 阅读全文

posted @ 2021-09-17 10:53 夜萤火虫和你 阅读(195) 评论(0) 推荐(0)

锁——4、volitail变量锁
摘要:由此展开,大家可以了解下线程内存和堆内存的差别 一、java内存模型 了解volatile关键字之前,先要了解java的内存模型 Java内存模型简称JMM(Java Memory Model),是Java虚拟机所定义的一种抽象规范,用来屏蔽不同硬件和操作系统的内存访问差异,让java程序在各种平台 阅读全文

posted @ 2021-09-17 10:40 夜萤火虫和你 阅读(122) 评论(0) 推荐(0)

锁——3、Reentrantlock
摘要:一、ReenTrantLock是可重入锁 可重入锁的特点 可重入锁又名递归锁,是指在同一个线程在外层方法获取锁的时候,在进入内层方法会自动获取锁。 谁等的时间最长,谁就先获取锁 ReenTrantLock的特点: 1.ReenTrantLock可以指定是公平锁还是非公平锁。而synchronized 阅读全文

posted @ 2021-09-16 10:20 夜萤火虫和你 阅读(223) 评论(0) 推荐(0)

锁——2、synchronized锁
摘要:一、synchronized为什么性能低 1、Java1.6之前效率低:线程阻塞和唤醒的代价较高,用户态到内核态的切换,花费时间 2、JDK 1.6 之后,synchronized 做了性能优化,性能已经与其他显式锁基本没有差距了 二、synchronized的优化 优化即随着锁的竞争进行升级: 从 阅读全文

posted @ 2021-09-16 10:18 夜萤火虫和你 阅读(220) 评论(0) 推荐(0)

锁——1、基础
摘要:1、锁的分类: 轻量级锁中,默认自旋10次 死锁: 1、什么是死锁? 两个或多个线程因相互等待而被永远阻塞(挂起)的情况。 2、死锁的原因 导致死锁的原因有多种。线程分析器可检测到因不正确使用互斥锁而导致的死锁。这种类型的死锁在多线程应用程序中比较常见。 3、以下条件成立时,具有两个或多个线程的进程 阅读全文

posted @ 2021-09-16 10:16 夜萤火虫和你 阅读(53) 评论(0) 推荐(0)

导航