- 博客(57)
- 收藏
- 关注
原创 虚拟机类加载机制
Java虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这个过程被称作虚拟机的类加载机制。
2021-02-28 11:13:41 218
原创 并发编程线程基础
进程是代码在数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位。线程则是进程的一个执行路径,一个进程中至少有一个线程,进程中的多个线程共享进程的资源,线程是CPU分配的基本单位。
2021-02-23 22:58:48 222 1
原创 垃圾收集与内存分配
Java内存运行时区域的各个部分,其中程序计数器、虚拟机栈、本地方法栈等区域的内存分配和回收都具备确定性,当方法结束或者线程结束时,内存自然就跟随着回收了。而Java堆和方法区则有着很显著的不确定性:一个接口有多个实现类,程序究竟会创建哪些对象,创建多少个对象,这部分内存的分配和回收是动态的。垃圾收集器所关注的正是这部分内存该如何管理。
2021-02-23 16:13:26 206
原创 Redis的持久化
Redis把所有数据都存储在内存中,以提高数据的访问速度。但这样带来的后果是数据在系统断电之后就会丢失,这对于想把Redis用作数据库而不仅仅是缓存的用户来说是不愿意看到的。所以为了防止数据丢失,进行持久化是必要的。Redis提供了RDB持久化、AOF持久化和RDB-AOF混合持久化等多种持久化方式。
2021-02-14 11:34:47 117
原创 Redis的使用场景
Redis的数据结构主要有字符串(string),散列(hash),列表(list),集合(set),有序集合(sort set),HyperLogLog,位图,流,通过灵活使用,可以实现许多功能。
2021-02-13 21:17:28 262
原创 自定义springboot整合ftpclient启动器starter
整合FtpClient和commons-pool2的启动器sprig-boot-starter。
2021-02-05 14:16:26 339
原创 mysql执行计划 explain命令
MySQL会解析查询,并创建内部数据结构(解析树),并对其进行各种优化,包括重写查询、决定表的读取顺序、选择合适的索引等。使用EXPLAIN关键字可以模拟优化器执行SQL查询语句,从而知道MySQL是如何处理我们的SQL语句的。分析查询语句或表结构的性能瓶颈。
2021-01-26 20:50:29 97
原创 Nginx内部进程模型
1. mater 和 workerMaster进程:master进程负责管理worker进程,并负责读取配置文件和判断文件语法的工作;是主进程,且只有一个。Worker进程:worker进程有多个,它负责处理请求;worker的进程数量由管理员自己定义;
2021-01-22 10:01:34 129
原创 RabbitMQ高级特性
1. 消息的可靠投递RabbitMQ整个消息投递的路径为:producer —> rabbitmq broker —> exchange —> queue —> consumer。作为消息的发送方,希望杜绝任何消息丢失或投递失败的场景。RabbitMQ提供了两种方式用来控制消息的投递可靠性,confirm模式和return模式。消息从producer到exchange则会返回一个comfirm
2021-01-21 13:29:57 136
原创 RabbitMQ基础入门
一. 消息中间件概述1. 什么是消息中间件MQ全称为Message Queue,消息队列是应用程序和应用程序之间的通信方法。消息中间件是基于队列与消息传递技术,在网络环境中为应用系统提供同步或异步、可靠的消息传输的支撑性软件系统为什么使用MQ在项目中,可将一些无需即时返回且耗时的操作提
2021-01-21 09:43:11 129
原创 Web应用认证授权
一. 概述1.什么是认证认证,简单的来说就是判断用户或者访问者的身份。当你访问服务器时,你需要证明你的身份,有没有资格访问资源,输入账号和密码登录的过程就是认证。
2021-01-18 21:44:00 1076
原创 spring自定义响应 | excel
spring框架通过HttpMessageConverter实现序列化与反序列化,默认的请求响应处理格式是Json,这里通过自定义的方式,实现响应excel格式。
2020-12-11 20:08:44 293
原创 图的最短路径(Dijkstra | Floyd)
1. Dijkstra算法从起始点开始,采用贪心算法的策略,每次遍历到始点距离最近且未访问过的顶点的邻接节点,直到扩展到终点为止。
2020-11-19 22:35:18 1100
原创 最小生成树
一个有 n 个结点的连通图的生成树是原图的极小连通子图,且包含原图中的所有 n 个结点,并且有保持图连通的最少的边。 最小生成树可以用kruskal(克鲁斯卡尔)算法或prim(普里姆)算法求出。在一给定的无向图G = (V, E) 中,(u, v) 代表连接顶点 u 与顶点 v 的边(即),而 w(u, v) 代表此边的权重,若存在 T 为 E 的子集(即)且为无循环图,w(T) 最小,则此 T 为 G 的最小生成树。最小生成树其实是最小权重生成树的简称。在很多场景下有应用,例如:网络G表示.
2020-11-18 17:33:59 4754
原创 拓扑排序
对一个有向无环图(Directed Acyclic Graph简称DAG)G进行拓扑排序,是将G中所有顶点排成一个线性序列,使得图中任意一对顶点u和v,若边<u,v>∈E(G),则u在线性序列中出现在v之前。通常,这样的线性序列称为满足拓扑次序(Topological Order)的序列,简称拓扑序列。简单的说,由某个集合上的一个偏序得到该集合上的一个全序,这个操作称之为拓扑排序。给定一个有向图,通过拓扑排序得到图的顶点序列,在图中,如果B顶点有边指向A顶点,则在序列中A排在B后面。即一个.
2020-11-17 21:59:03 140
原创 深度优先与广度优先搜索算法
1. 深度优先搜索算法Depth First Search.其过程简要来说是对每一个可能的分支路径深入到不能再深入为止,而且每个节点只能访问一次.深度优先遍历图的方法是,从图中某顶点v出发:(1)访问顶点v;(2)依次从v的未被访问的邻接点出发,对图进行深度优先遍历;直至图中和v有路径相通的顶点都被访问;(3)若此时图中尚有顶点未被访问,则从一个未被访问的顶点出发,重新进行深度优先遍历,直到图中所有顶点均被访问过为止。2. 广度优先搜索算法Breadth First Search。在搜索时,如
2020-11-15 22:08:30 603
原创 树_查并集
目录1.简单实现2.优化实现3.路径压缩4.代码实现并查集是一种树型的数据结构 ,并查集可以高效地进行如下操作:1. 查询元素p和元素q是否属于同一组2. 合并元素p和元素q所在的组1.简单实现定义数组int[] UF, 数组下标表示值value,而数组存储的值UF[i] 表示所在的分组。2.优化实现为了提升算法的性能,我们仍然定义数组int[] UF, 数组下标表示值value,而数组存储的值UF[i] 表示该 i 结点的父结点所在索引。当UF[i] - i 时, i 为小组的根节点。
2020-11-14 11:49:01 216
原创 B树 B+树
目录1. B树2. B+树1. B树1970年,R.Bayer和E.mccreight提出了一种适用于外查找的树,它是一种平衡的多叉树,称为B树(或B-树、B_树)。一棵m阶B树,是一棵平衡的m路搜索树。它或者是空树,或者是满足下列性质的树:1、根结点至少有两个子女;2、每个非根节点所包含的关键字个数 j 满足:m/2 - 1 <= j <= m - 1;3、除根结点以外的所有结点(不包括叶子结点)的度数正好是关键字总数加1,故内部子树个数 k 满足:m/2 <= k &l
2020-11-14 10:12:08 687
原创 2-3查找树 红黑树
目录一. 2-3查找树1. 概述2. 插入方法一. 2-3查找树1. 概述为了保证查找树的平衡性,我们需要一些灵活性,因此在这里我们允许树中的一个结点保存多个键。确切的说,我们将一棵标准的二叉查找树中的结点称为2-结点(含有一个键和两条链),而现在我们引入3-结点,它含有两个键和三条链。2-结点和3-结点中的每条链都对应着其中保存的键所分割产生的一个区间。2-3树其每个非叶节点都有两个或三个子女,而且所有叶都在统一层上。2-3树不是二叉树,其节点可拥有3个孩子。不过,2-3树与满二叉树相似。高为h的
2020-11-12 23:41:13 214
原创 索引优先队列
目录1. 优先队列2. 索引优先队列的用途3. 算法原理4. 代码实现1. 优先队列对于普通队列,我们只能遵循先进先出的原则访问,元素在队列尾追加,而从队列头删除。在优先队列中,元素被赋予优先级。当访问元素时,具有最高优先级的元素最先删除。优先队列具有最高级先出 (first in, largest out)的行为特征。采用堆来维护,这样每次入队或出队,只需维持堆结构,就可以实现按优先级出队。public class MaxPriorityQueue<T extends Comparabl
2020-11-10 16:25:16 363
原创 排序(7)堆排序
1.堆的定义堆是计算机科学中一类特殊的数据结构的统称,堆通常可以被看做是一棵完全二叉树的数组对象。特性:它是完全二叉树,除了树的最后一层结点不需要是满的,其它的每一层从左到右都是满的,如果最后一层结点不是满的,那么要求左满右不满。它通常用数组来实现。如果一个结点的位置为k,则它的父结点的位置为[k/2],而它的两个子结点的位置则分别为2k和2k+1。.每个结点都大于等于它的两个子结点。这里要注意堆中仅仅规定了每个结点大于等于它的两个子结点,但这两个子结点的顺序并没有做规定,跟我们之前学习的二叉查
2020-11-09 23:14:15 119
原创 链表中快慢指针的应用
快慢指针中的快慢指的是移动的步长,即每次向前移动速度的快慢。例如可以让快指针每次沿链表向前移动2,慢指针每次向前移动1次。一.寻找链表中间位置快指针的移动速度是慢指针移动速度的2倍,因此当快指针到达链表尾时,慢指针到达中点。代码实现:while (fast&&slow){ if (fast->next==NULL) return slow ->data; else if (fast->next!= NULL && fa
2020-11-06 14:15:09 138
原创 排序(1-6)冒泡 选择 插入 希尔 归并 快速 排序
总结了几个常见排序目录一. 冒泡排序二. 选择排序三. 插入排序四. 希尔排序一. 冒泡排序冒泡排序(Bubble Sort),是一种计算机科学领域的较简单的排序算法。 它重复地走访过要排序的元素列,依次比较两个相邻的元素,如果顺序(如从大到小、首字母从Z到A)错误就把他们交换过来。走访元素的工作是重复地进行直到没有相邻元素需要交换,也就是说该元素列已经排序完成。 这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端(升序或降序排列),就如同碳酸饮料中二氧化碳的气泡最终会上浮到顶端.
2020-10-30 15:39:33 322
原创 Java程序员珍藏书单
之前羊哥写过一份java程序员珍藏书单,我整理了一下电子资源,这里分享一下。仅供交流学习使用。推文链接:https://mp.weixin.qq.com/s/OislKcvk-YSFstIl2PcrbA链接:https://pan.baidu.com/s/1bX1zMqgx6Jw4CObu-pO9oQ 提取码:jwxe1.Java基础篇书单《Java编程思想》《深入理解Java虚拟机:JVM高级特性与最佳实践》《Head First 设计模式》《Effective java》《Java核.
2020-10-23 13:39:44 173 2
原创 ElasticSearch的安装 | docker-compose
1. 安装elasticsearch&kibanadocker-compose.ymlversion: '3.1'services: elasticsearch: image: daocloud.io/library/elasticsearch:6.5.4 restart: always container_name: elasticsearch ports: - 9200:9200 kibana: image: daocloud.i
2020-10-21 22:53:35 144
原创 Redis集群的搭建 | docker
主要内容一. redis主从架构1. docker-compose.yml 文件2. 从节点配置二. 哨兵1. 配置文件sentinel.conf2. 修改docker配置一. redis主从架构为了解决大量请求对单台redis造成的巨大压力,我们可以利用主从结构搭建多台redis,master负责读写请求,而slave负责读,从而分担请求的压力。1. docker-compose.yml 文件redis1为master,redis2,redis3为slaveversion: '3.1'ser
2020-10-17 16:44:30 135
原创 Redis个人学习笔记 | Linux Docker
主要内容一. Redis简介一. Redis简介redis是一款高性能的NOSQL系列的非关系型数据库
2020-10-16 17:07:40 93
原创 Nginx反向代理服务器简单入门
1. 什么是Nginx?Nginx(“engine x”)是一款是由俄罗斯的程序设计师Igor Sysoev所开发高性能的 Web和 反向代理 服务器,也是一个IMAP/POP3/SMTP 代理服务器。其特点是占有内存少,并发能力强,事实上nginx的并发能力在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户有:百度、京东、新浪、网易、腾讯、淘宝等。2. 安装及配置- 基于docker-compose的简单安装在/opt/docker_nginx/下新建docker-compos
2020-10-13 23:10:50 118
原创 Docker continuous integration 持续集成的实现
CI 持续集成:编写代码时完成一个功能后,立马提交代码到Git仓库中,将项目重新构建并测试。这样可以快速发现错误。防止代码偏离主题。Ⅰ. 搭建Gitlab服务器1.虚拟机环境创建一个全新的虚拟机,并且至少指定4G运行内存。Linux系统为CentOS72.安装docker及docker-composehttps://blog.csdn.net/sabot_v/article/details/1087355703.使用docker-compose.yml文件安装gitlab进入/.
2020-09-23 16:49:17 152
原创 Docker的安装及简单入门
1.Docker的安装步骤安装依赖包yum -y install yum-utils device-mapper-persistent-data lvm2设置阿里镜像源yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo安装高速缓存yum makacache fast安装docker服务yum -y install docker-ce
2020-09-22 17:53:55 124
原创 一次完整的软件工程课程设计
目录引 言1 可行性分析1.1 技术可行性分析1.2 经济可行性分析1.3 社会可行性分析2 需求分析2.1 功能需求2.1.1 系统用例图2.1.2 用例规约2.1.3 领域对象模型2.1.4 状态图2.2 非功能需求2.2.1可靠性需求2.2.2安全性需求2.2.3开发性需求2.2.4性能需求2.3 数据库概念结构设计2.3.1数据实体描述及E-R图2.3.2数据库概念模型3 总体设计3.1 系统架构设计3.2 功能模块设计3.3 系统流程图设计3.4 系统类图设计3.4.1边界类图3.4.2控制类图3
2020-07-30 08:54:54 56814 22
原创 Java - - ArrayList 源码解析
ArrayListArrayList是一个数组队列,相当于动态数组。与Java中的数组相比,它的容量能动态增长。继承父类 : AbstractList<E>实现的接口有 List<E>, RandomAcces, Cloneable, java.io.Serializablepublic class ArrayList<E> extends AbstractList<E> implements List<E>, Rand
2020-07-15 09:33:08 102
原创 软件工程知识汇总
文章目录软件生命周期模型软件危机需求分析数据流图实体联系图(E-R图)数据字典流程图盒图判定树判定表白盒测试黑盒测试类图用例图时序图状态图软件维护项目管理参考资料软件生命周期模型软件生命周期模型是描述软件开发过程中各种活动如何执行的模型。主要有:瀑布模型、原型模型、增量模型、螺旋模型。1.瀑布模型优点:规范,文档驱动 。为项目提供了按阶段划分的检查点。它提供了一个模板,这个模板使得分析、设计、编码、测试和支持的方法可以在该模板下有一个共同的指导。当前一阶段完成后,只需要去关注后续阶段。缺点:系统
2020-07-02 17:56:36 732 1
原创 有那么一份友谊
倘若说起在交友这一条路上,我是幸运的,有属于自己的小姐妹团。另外,和你认识了那么久还能“无话不说”,这是我感觉我更加幸运的原因,因为认识了你,有别于其他友情的存在,带给我极大的不同。最近特别喜欢“来日方长”这个词。来日方长,喜欢的一切都还能好久好久! 高三的有一天,忘记了是因为考试成绩不好还是对考试答题不太满意,我只记得你后面问我话的场景。我一个人站在走廊那里发呆,你路过的时候停住了脚步问...
2020-05-16 12:46:09 328 1
原创 C++之程序的内存模型
C++程序在执行时,将内存大方向划分为4个区域代码区:存放函数体的二进制代码,由操作系统进行管理的全局区:存放全局变量和静态变量以及常量栈区:由编译器自动分配释放, 存放函数的参数值,局部变量等堆区:由程序员分配和释放,若程序员不释放,程序结束时由操作系统回收不同区域存放的数据,赋予不同的生命周期, 给我们更大的灵活编程代码区: 存放 CPU 执行的机器指令 代码区是共...
2020-04-30 14:04:34 379
原创 C++之乱七八糟瞎指针
int * p = NULL;空指针int * p;野指针int * p = 0X1100;cout << *p; //错误,没有访问权限const int * p = &a; 常量指针;指向可以改,但指向对象的值不能改 const int * p = &a; *p = 20; //错误,不能修改 p = &b; //正确,指向可以改...
2020-04-28 19:07:18 172
原创 mybatis的简单CRUD操作
查询所有-FindAllDao接口 /** * @param:null * @return: List<User> * @description:获取所有用户 */ List<User> findAll();IUserDao.xml <!-- 配置查询所有操作 --> <select...
2020-04-20 09:10:35 109
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人