自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 【Java】集合源码 - HashMap

HashMap概述1. 类2. 属性概述基于哈希表实现了 Map 接口, 提供了所有 map 的操作无序, 且不能保证次序保持不变提供时间复杂度为常数的操作性能, 具体性能受初始容量和负载因子两个参数影响当哈希表中的元素数量超过了负载因子和哈希表容量的乘积时, 哈希表将会被rehash, 底层数组容量会被扩容, 每次扩容大小为2倍默认的负载因子 0.75 在时间和空间成本之间提供了...

2019-11-03 22:35:32 239

原创 【Java】集合源码 - LinkedList

LinkedList概述1. 类2. 属性3. 方法无参构造有参构造add() addLast() linkLast()addFirst() linkFirst()addAll()remove() unlink()indexOf()概述LinkedList 是 List 的一个实现, 底层使用双向链表, 支持 O(1) 获取头节点和尾节点底层使用双向链表, 因此插入, 删除速度较快, 查询较...

2019-10-31 21:26:34 177

原创 【Java】集合源码 - ArrayList

ArrayList1. 概述2. 类3. 属性4. 方法构造方法add()add(index)remove()removeAll()retainAll()batchRemove()indexOf()get(int)set(int, E)1. 概述ArrayList 是 List 的一个实现, 其底层使用数组来存储元素, 且支持数组动态扩容因为底层使用数组, 所以 ArrayList 的查找较...

2019-10-31 19:07:19 217

原创 【计算机网络】WebSocket 全双工通信协议

WebSocket1.概述2.WebSocket握手3.Fin分片1.概述HTTP协议的弊端:仅支持客户端发起请求,服务器回复响应, 不支持服务器主动向客户端发送消息。如果客户端想要获取服务器发送的消息,需要通过频繁的JavaScript和AJAX请求实现轮询,效率较低HTTP1.1之前一个request一个response后, HTTP连接就结束了,HTTP1.1后使用长连接, 一次HT...

2019-10-28 21:46:32 1705

原创 【Redis】对象

Redis对象概述对象数据结构type 类型encoding 编码字符串对象概述对象包含: 字符串对象, 列表对象, 哈希对象, 集合对象, 有序集合对象Redis 用基于数据结构实现的对象系统来实现数据库, 而是没有直接用数据结构对于同一种对象, 可以在不同的使用场景下使用不同的数据结构来实现, 从而优化效率Redis通过引用计数实现内存回收机制和对象共享技术Redis通过对象的访...

2019-10-23 23:20:07 140

原创 【Redis】数据结构 - 跳跃表

跳跃表概述实现优点概述跳跃表(skipList)基于有序链表实现,在链表的基础上加入多个指针,从而达到快速查找的目的。查找时间复杂度: 平均O(logN),最坏O(N)跳跃表是有序集合键的实现之一,在集合中包含元素数量较多, 或是元素成员是较长字符串时选用跳跃表。跳跃表也是集群节点中的内部数据结构。实现zskiplist 用于存储跳跃表的相关信息typedef struct...

2019-10-20 11:38:13 148

原创 【Redis】数据结构 - 字典

概述字典又称映射(map), 是一种用于保存键值对的数据结构。字典的键(key)唯一,一个键对应一个值(value),查找,删除,更新都需要通过键来操作。redis的数据库就是使用字典作为底层的新增键值对"msg"->"hello world", 执行redis命令:redis> SET msg "hello world"字典也是哈希键的底层实现之一...

2019-10-16 20:30:39 171

原创 【计算机网络】IO模型

IO模型概述同步阻塞 I/O同步非阻塞 I/OI/O 多路复用信号驱动 I/O异步 I/O五大 I/O 模型比较select poll 和 epoll概述socket 将网络中的通信抽象成 I/O 操作, 可以对 socket 像文件一样的打开, 读写和关闭。I/O 模型一般指磁盘 I/O 和网络 I/OI/O 模型共有五种,分为两类同步阻塞式 I/O (blocki...

2019-10-10 11:12:43 301

原创 【计算机网络】应用层 - HTTP协议

HTTP协议URL, URN和URIHTTP请求方法GETHTTP状态码1XX 信息2XX 成功3XX 重定向4XX客户端错误5XX服务器错误URL, URN和URIURI (Uniform Resource Identifier) : 统一资源标识符URI 是一种更高层次, 更抽象的概念, URN 和 URL 都是 URI 的子集URL(Uniform Resource Locato...

2019-10-08 10:46:16 240

原创 【计算机网络】应用层 - DNS协议

1.概述IP地址不方便记忆,可以使用域名代表IP, 但网络需要使用 IP 进行路由寻路, 且IP地址方便计算处理, 因此需要一个二者之间互相转换的系统, 因此产生了DNS。域名系统(Domain Name System)是一个将域名和IP地址相互映射的一个分布式数据库。 使用TCP和UDP的53端口。2.域名的树状结构域名的树状结构为:根顶级域名二级域名三级域名…叶子: 主...

2019-09-23 12:05:30 195

原创 【计算机网络】传输层 - TCP协议

TCP协议特点socket套接字TCP报文6个控制位特点面向连接, 使用TCP传输数据前必须建立连接,完毕后须释放连接。点对点, 每个TCP连接只能有两个端点。可靠传输, 通过TCP的超时重传和捎带确认机制保证传输的数据能够按序正确到达。流量控制和拥塞控制,在网络情况较差时可控制传输速率。双工通信, TCP连接的两端都设有发送缓存和接收缓存, 会在合适的时机处理数据。面向字节流, ...

2019-09-11 20:59:05 255

原创 【计算机网络】 传输层 - UDP协议

UDP协议特点首部特点无连接, 发送数据前不需要建立连接, 减少了开销和延时不可靠, 尽最大努力交付没有拥塞控制, 拥塞不会限制发送速率, 对实时应用有利支持一对一、一对多、多对一和多对多通信首部开销小首部首部由四个字段组成源端口 需要对方回信时选用, 不需要可全0目的端口 终点交付报文时使用长度 UDP数据报的长度, 最小为8(仅有首部)校验和 检测...

2019-09-09 19:59:31 212

原创 【计算机网络】网络层 - ICMP 协议

ICMP概述ICMP报文应用ping命令tracertICMP攻击概述ICMP(Internet Control Message Protocol) 网际控制报文协议. 是TCP/IP协议簇的一个子协议. 属于网络层使用IP的基本支持, 用来传输控制消息.功能: 检测网络是否正常工作, 遇到异常问题时的诊断.ICMP报文ICMP报文可分为两类ICMP差错报告报文ICMP询问报文...

2019-08-21 16:34:06 741

原创 【计算机网络】网络层 - ARP协议

ARP概述网络层使用IP地址传输, 但在数链层上的传输还是需要MAC地址. 但IP地址和MAC并不存在一个简单的映射关系. 他们之间的关系是动态的, 所以需要ARP协议动态维护其对应关系.已经知道一台主机的IP地址, 需要找出其物理MAC地址, 则需要使用地址解析协议ARP.过程A为了获得B的MAC地址, 首先要通过广播发送一个ARP请求包, 这个包中包含了自己的IP和MAC地址, 以及...

2019-08-20 15:34:44 607 1

原创 【计算机网络】网络层 - IP协议

IP协议IP首部IP首部版本(Version)由4bit构成, 标识IP首部的版本号版本号简称协议4IPInternet Protocol6IPv6Internet Protocol version 6首部长度(IHL)由4bit构成, 表明IP首部的大小, 单位为4字节。对于没有可选项的IP包,首部长度为5(5 * 4 = 20字节)...

2019-08-19 19:21:34 479

原创 【计算机网络】OSI七层模型和TCP/IP四层模型

OSI七层模型和TCP/IP四层模型概述OSI七层模型和TCP/IP四层模型的对应二者的差别数据封装过程数据传输过程协议栈及概念应用层传输层网络层数据链路层物理层概述ISO是国际标准化组织, 该组织对网络体系结构进行了充分的讨论, 最终制定出了OSI七层网络模型, 旨在将复杂的网络结构标准化, 规范化.虽然OSI参考模型是计算机网络协议的标准,但由于其开销太大,所以真正采用它的情况并不多。...

2019-08-16 16:06:14 2122

原创 【Redis】数据结构 - 链表

概述链表提供顺序访问方式,有高效的节点重排能力和节点增删能力。Redis由C语言实现, 但C语言没有自带链表的数据结构。因此Redis构建了自己的链表实现。Redis应用广泛, 例如列表键的底层实现之一就是链表。当一个列表建包含了数量较多的元素时,又或者列表中包含的元素都是比较长的字符串时, Redis就会使用链表作为链表建的底层实现。除链表建外,发布与订阅、慢查询、监视器等功能也用到了链...

2019-08-13 15:59:07 153

原创 【Redis】数据结构 - SDS

简单动态字符串SDS概述SDS定义兼容部分C字符串函数特性常数复杂度获取字符串长度杜绝缓冲区溢出减少修改字符串时带来的内存重新分配次数空间预分配惰性空间释放二进制安全概述Redis底层由C语言实现, 但Redis并没有直接使用C语言的字符串, 而是自己构建了一种名为 SDS ( Simple Dynamic String ) 简单动态字符串来作为其字符串的数据结构.在Redis中, C语言...

2019-08-13 11:19:04 198

原创 【Java】内存模型

内存模型概述主内存与工作内存内存间的交互操作volatile变量的规则原子性、可见性和有序性概述C/C++等语言直接使用物理硬件和操作系统的内存, 因此在不同平台上运行会产生差异, 导致一些并发访问经常出错。Java虚拟机规范中试图定义一种Java内存模型,主要目标是定义程序中各个变量的访问规则, 用来屏蔽掉各种硬件和操作系统间的内存访问差异, 让Java程序能够正常地在各个平台运行,并且避...

2019-08-08 14:42:54 114

原创 【Java】JVM类加载机制和类加载器

类加载机制和类加载器概述类的生命周期类加载的过程加载连接验证准备解析初始化初始化的条件 -- 主动使用类加载器双亲委派机制概述虚拟机把描述类的数据从Class文件加载到内存, 并对数据进行校验, 准备, 解析和初始化, 最终形成可以被虚拟机使用的Java类型, 这就是类加载机制类的生命周期如上图, 类的生命周期从这个类被加载到内存中开始, 到卸载出内存位置, 整个生命周期包括: 加载. ...

2019-08-07 19:59:04 223

原创 【Java】JVM垃圾收集器

JVM垃圾回收算法概述SerialParNewParallel ScavengeSerial OldParallel OldCMS(Concurrent Mark Sweep)G1收集器概述垃圾收集算法是垃圾回收的方法论, 垃圾回收器则是垃圾回收的具体实现。各个厂商差异较大, 这里只讨论常用的HotSpot虚拟机。HotSpot垃圾收集器可搭配使用的关系图。为了应对不同的场景和需求,需...

2019-08-06 11:07:17 159

原创 【Java】JVM垃圾回收算法

JVM垃圾回收算法哪些内存需要回收什么时候回收引用计数法Java与C++之间有一堵由内存动态分配和垃圾收集技术所围成的高墙, 墙外面的人想进去, 墙里面的人想出来。哪些内存需要回收Java运行时内存区域中,程序计数器, 虚拟机栈, 本地方法栈为线程私有, 大小在分配栈帧时基本已经确定,因此这几个区域不需要过多考虑回收问题。堆和方法区不同于上述区域, 因为只有在运行时才能确定要创建哪些对象,...

2019-08-05 17:18:06 197

原创 【Java】内存溢出异常

内存溢出异常虚拟机参数设置设置打印信息Java堆溢出虚拟机栈和本地方法栈溢出内存溢出异常即OutOfMemoryError, 在Java虚拟机规范中规定, 除程序计数器以外, 其他内存区域都有可能出现OutOfMemoryError下面就针对不同区域出现的异常进行分析.虚拟机参数设置为了能够简单模拟内存溢出异常, 需要给JVM添加堆栈大小, 打印GC堆等参数.下面是一些常用参数设置-...

2019-08-05 11:34:12 190

原创 【Java】JVM内存区域

JVM内存区域运行时数据区域程序计数器运行时数据区域Java虚拟机在执行Java程序时会把它所管理的内存划分为若干的不同的数据区域, 根据《Java虚拟机规范(Java SE 7版)》规定Java内存包括如图所示的几个运行时数据区域。程序计数器程序计数器是一块较小的内存空间,可以看做是当前线程所执行的字节码的行号指示器。 字节码解释器...

2019-06-10 20:10:23 175

原创 【Java】Serializable序列化

序列化和反序列化概念定义用途实现JDK类库SerializableserialVersionUID序列化方法概念定义序列化将对象转换为字节序列的过程反序列化将字符序列转换成对象的过程用途将内存中的对象持久化到硬盘中, 并之后能再次从磁盘中读取.如web服务器中的会话session对象都要存储在内存中, 如果某一时间段session对象过多, 则会导致服务器内存不够用的...

2019-05-31 17:50:50 382

原创 【操作系统】进程调度

在多道程序中, 调度的实质是资源的分配, 处理机调度即对处理机资源的分配。处理机调度的层次高级调度又称长程调度和作业调度,调度的对象为作业。主要用于多道批处理系统中,分时和实时系统中不设置高级调度低级调度又称进程调度和短程调度。调度的对象为进程或者内核级线程。主要的功能是根据某种算法,决定就绪队列中的哪一个进程获得处理机并分配。中级调度又称内存调度。引入的主要目的是提高内存利用...

2019-05-06 15:37:43 1362

原创 【Java web】JWTtoken登录校验

JWT (Json Web Token) 是为了网络应用环境间传递声明而执行的一种基于JSON的开放标准。JWT可以校验用户的身份,传递用户的身份信息,一般用在用户登录上。JWT token的组成头部(header){ "alg": "HS256", "typ": "JWT"}alg : 加密类型typ : JWT token的类型 alg 算法 ...

2019-05-05 21:17:23 2134

原创 【MySQL】聚簇索引和非聚簇索引

mysql普遍使用B+树做索引, 但在不同的存储引擎中对索引的实现方式不同InnoDB是聚簇索引MyISAM是非聚簇索引以一本字典为例 如果想要翻到100页, 则如果翻到了50页就继续向后翻, 如果翻到了120页就往回翻, 翻到100页即可获得第100页的内容, 这种即为聚簇索引, 即B+树的叶子节点直接存储着数据.如果想要得到index这个词, 则需要翻开前面的目录, 根据按字母排序...

2019-04-27 20:58:39 284

原创 【操作系统】线程的实现

线程的实现方式1. 内核支持线程KST(Kernel supported threads)内核支持线程同进程一样都是在内核支持下运行的, 与内核密切相关创建, 阻塞, 撤销, 切换都是在内核空间实现的内核空间中为每一个线程设置了一个线程控制块, 内核通过线程控制块对其进行控制优点在多处理器系统中内核可以同时调度同一进程中的多个线程并发执行如果进程中的一个线程阻塞了, 内核可继续...

2019-04-15 17:05:02 597

原创 【操作系统】线程

人们引入进程解决了单处理机环境下多个程序并发执行的问题, 提高了资源利用率和系统吞吐量.引入线程则是为了能够地提高程序并发执行程度,减少程序在并发时所付出的时空开销, 从而使OS具有更好的并发性线程的引入进程进程是一个可拥有资源和可独立调度和分派的基本单位, 由于进程的这两个属性, 使进程成为一个能独立运行的基本单位, 也构成了进程并发执行的基础进程并发所付出的开销创建进程, 需为其...

2019-04-14 20:32:05 294

原创 【操作系统】 经典的进程同步问题

生产者-消费者问题一组生产者和一组消费者公用一段缓冲区, 生产者不断地生产产品放入缓冲区, 只有当缓冲区未满时生产者才能放入产品,否则需要等待. 消费者不断地从缓冲区拿出产品, 只有当缓冲区非空时才能拿出产品, 否则也需等待. 由于缓冲区为临界资源, 所以需要生产者和消费者对其互斥访问.1. 利用记录型信号量解决生产者-消费者问题利用empty和full信号量分别表示缓冲区空和满的数量, 用...

2019-04-08 18:51:54 1970

原创 【操作系统】 进程同步

使用多道批处理系统不仅能有效的改善资源的利用率, 还可以显著地提高系统的吞吐量, 但同时会使系统变得更加复杂,会使程序的运行结果存在不确定性。所以必须引入进程同步机制从而保证多个程序有条不紊的并发进行。概念协调多个进程,使并发执行的程序之间按照一定规则共享系统资源,能够很好的相互合作,从而时程序的执行具有可再现性。两种形式的制约关系间接相互制约关系多个程序在并发执行,需要共享某些系统...

2019-04-08 17:17:36 1196

原创 【操作系统】进程

在多道程序环境下, 程序的执行属于并发执行, 此时他们将失去封闭性, 并具有间断性, 以及其运行结果不可再现性的特征. 因此为了程序能够并发执行, 并且可以对并发执行的程序加以描述和控制, 人们引入了进程的概念进程的定义进程是程序的一次执行进程是一个程序及其数据在处理机上顺序执行时所发生的活动进程是系统资源分配和调度的一个独立单位进程的特征动态性进程的实质是程序在多道程序系统...

2019-04-06 19:59:31 329

原创 【MySQL】事务

1. 为什么需要事务在一些复杂的数据库操作中, 需要同步地操作一些数据, 需要用到事务, 解决并发的问题. 例如银行的转账问题, 如果A向B的银行卡转账500元, 则后台数据库要执行查询A账户的余额大于500A账户余额减去500B账户余额加上500这几部要么都成功, 要么都失败.如果只成功第二条然而第三条失败, 则A的钱会不翼而飞.2. 事务的四个特性原子性事务的执行被视...

2019-03-25 19:40:27 111

原创 【MySQL】索引

1. 索引的概念索引是一张表, 表中存储着索引字段和其对应的主键, 并指向实体表的记录。在查询时, mysql如果不使用索引,则必须从第一行开始读完整个表,直到找出相关行。添加索引后,mysql能够快速找到相关的行, 大大提高mysql的检索速度,节省大部分时间。2. 索引的优缺点优点索引可以大大提高检索速度。可以给所有的mysql字段设置索引。缺点索引本身也是表,所以会占...

2019-03-21 21:46:58 113

转载 【Linux】scp ssh上传文件命令

利用ssh传输文件在linux下一般用scp这个命令来通过ssh传输文件。1、从服务器上下载文件scp username@servername:/path/filename /var/www/local_dir(本地目录)例如scp root@192.168.0.101:/var/www/test.txt 把192.168.0.101上的/var/www/test.txt 的文件下载到/...

2019-03-15 17:12:23 541

原创 【Linux】搜索命令

目录locate 数据库中搜索 whereis 搜索命令的命令find 直接搜索文件grep 字符串搜索1. locate用来查找文件或者目录, 因为locate搜索是在数据库中, 数据库存放本地所有文件的信息, 所以相较于find查询速度更快. 数据库每天自动更新一次. 所以使用locate命令查不到最新变动过的文件, 如果想要查询最新的文件情况, 可以先使用upda...

2019-03-10 10:39:15 1983

原创 【MyBatis】MyBatis-generator 三剑客

1. 作用在使用MyBatis框架时,经常要写一些基本的mapper.xml,interface和创建数据库表对应的实体类,工作重复且繁琐。使用MyBatis-generator可以根据用户所建的数据表自动生成相应的 mapper, interface和对应的实体类.2. 用法MyBatis有三种用法: 命令行, maven插件, eclipse插件。一般maven使用的最多最方便,可以...

2019-03-10 09:27:08 189

原创 【Linux】帮助命令

在linux中获取帮助文档1. man语法man 命令获取该命令的帮助文档例如输入man ls打开的帮助文档遵循vi,vim语法输入 ? 键,向前查找,如 ?-h ,将会搜索含有“-h”的行输入 / 键,向后查找,如 /-k ,将会向后搜索“-k”的行按 N或者n(下一个)来进行上一个下一个相关匹配项查看。man的级别括号里的1表示该帮助级别共有九个级别1 ...

2019-01-31 10:51:49 163

原创 【Linux】文件目录处理命令

1231231231111111111111123123111111111111111112312311111111111111111231231111111111111111123123111111111111

2019-01-30 19:37:13 209

空空如也

空空如也

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

TA关注的人

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