- 博客(161)
- 资源 (4)
- 收藏
- 关注
原创 线程知识总结
1、Java中实现多线程有几种方法 继承Thread类; 实现Runnable接口; 实现Callable接口通过FutureTask包装器来创建Thread线程; 使用ExecutorService、Callable、Future实现有返回结果的多线程(也就是使用了ExecutorService来管理前面的三种方式)。 2、如何停止一个正在运行的线程 1、使用退出标志,使线程正常退出,也就是当run方法完成后线程终止。 2、使用stop方法强行终止,但是不推荐这个方法,因为stop和suspend及res
2020-09-12 13:08:36
370
原创 ssm整合实现图书的增删查改
ssm整合实现图书的增删查改 项目架构图 1.添加项目依赖,通过maven来创建 <dependencies> <!--Junit--> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12<
2020-08-29 16:12:52
798
原创 线程池
线程池 首先Executor这个接口是把线程定义和执行分开,主要来做线程的执行接口,在它下面有一个整个的线程池的生命周期,它里面的方法都给他定义全的接口ExecutorService。ThreadPoolExecutor,把线程池作为一个执行的单元,他有七大参数。 1.corePoolSoze:核心线程数; 2.maximumPS:最大线程数; 3.keepAliveTime:生存时间; 4.TimeUnit:生存的时间的单位; 5.BlockingQueue: 任务队列; 6.ThreadFactory:
2020-07-13 14:37:38
223
原创 基于Vue实现的网页音乐播放器
基于Vue现实网页音乐播放器 该音乐播放器是由父组件和子组件相结合通过axios获取音乐的相关属性,将其显示在界面,通过点击实现相应的操作。 这是搜索页面 这是关于音乐界面 这是推荐歌单界面 这是最新音乐界面 这是最新MV界面 这是MV界面 这是音乐列表界面 代码代码较多,给出部分代码,如果需要下载,我已经上传。 App.vue 父组件: <template> <...
2020-05-01 20:50:35
13003
11
原创 栈(数据结构)
栈(Stack): 1.栈是一个先入后出的有序队列 2.栈是限制线性表中元素的插入和删除只能在线性的同一端的一种特殊线性表,允许插入和删除的一端为变化的一端,为栈顶,另一端为固定的一端为栈底 3.最先放入栈中的元素在栈底,最后放入的元素在栈顶,而删除元素刚好相反,最后放入的元素最先删除,最先放入的元素最后删除。 实现栈的思路分析 1.使用数组来模拟栈 2.定义一个top来表示栈顶,初始化为-1 3.入栈的操作,当有数据加入到栈时,top++;stack[top]=data; 4.出栈的操作,intvalue
2021-07-21 21:04:25
310
原创 链表(数据结构)
链表 链表是有序的列表 1.链表是以节点的方式来存储,是链式存储 2.每个节点包含data域,next域指向下一个节点 3.链表的各个节点不一定是连续储存。 4.链表分带头节点的链表和没有头节点的链表,根据实际的需求来确定。 添加(创建) 1.先创建一个head的头节点,作用就是表示单链表的头 2.后面我们每添加一个节点,就直接添加到链表的最后 按添加的顺序: public class SingleLinkedListDemo { public static void main(String[] a
2021-07-21 21:02:23
307
1
原创 队列(数据结构)
队列: 不完美的: public class ArrayQueueDemo { public static void main(String[] args) { ArrayQueue arrayQueue = new ArrayQueue(3); char key = ' '; Scanner scanner = new Scanner(System.in); boolean loop = true; whil
2021-07-21 21:01:07
282
原创 数组(数据结构)
线性结构: 主要特点是数据元素之间存在一对一的线性关系 线性结构分为顺序存储结构和链式存储结构,顺序表的存储元素是连续的 链式存储的线性表称为链表,链表中的存储元素不一定是连续的,元素节点中存放数据元素以及相邻元素的地址信息 线性结构常见的有:数组,队列,链表,栈 非线性结构: 包括:二维数组,多维数组,广义表,树结构,图结构 稀疏数组: 一个数组大部分元素为0,或者为同一个值的数组时,可以使用稀疏数组来保存该数组 稀疏数组的处理方法是: 1)记录数组一共有几行几列,有多少个不同的值。 2)把具有不同
2021-07-21 20:57:52
190
原创 BIO
Java BIO 基本介绍 Java BIO 就是传统的 java io 编程,其相关的类和接口在 java.io BIO(blocking I/O) : 同步阻塞,服务器实现模式为一个连接一个线程,即客户端有连接请求时服务器端就需要启动一个线程进行处理,如果这个连接不做任何事情会造成不必要的线程开销,可以通过线程池机制改善(实现多个客户连接服务器). Java BIO 工作机制 对 BIO 编程流程的梳理 服务器端启动一个 ServerSocket,注册端口,调用accpet方法监听客户端的S
2021-05-11 17:52:32
171
原创 BIO、NIO、AIO介绍
I/O 模型基本说明 I/O 模型:就是用什么样的通道或者说是通信模式和架构进行数据的传输和接收,很大程度上决定了程序通信的性能,Java 共支持 3 种网络编程的/IO 模型:BIO、NIO、AIO 实际通信需求下,要根据不同的业务场景和性能需求决定选择不同的I/O模型 I/O模型 Java BIO 同步并阻塞(传统阻塞型),服务器实现模式为一个连接一个线程,即客户端有连接请求时服务器端就需要启动一个线程进行处理,如果这个连接不做任何事情会造成不必要的线程开销 Java NIO Java NIO : 同
2021-05-11 17:20:46
220
原创 Nginx学习笔记
Nginx学习笔记 一、Nginx介绍 Nginx的特点: 稳定性极强, 7*24小时不间断运行 提供了非常丰富的配置实例 占用内存小,并发能力强 二、Nginx的安装 2.1、安装Nginx docker-compose.yml version: '3.1' services: nginx: restart: always image: daocloud.io/library/nginx:latest container_name: nginx ports:
2021-02-12 11:23:14
220
原创 Redis中的数据结构
Redis中的数据结构 前言 Redis是一个高性能的分布式内存数据库,在国内外个大互联网公司中都有着广泛的使用,即使是一些非互联网公司也有着非常重要的使用场景。 Redis提供了五种主要的数据类型,它提供了强大且实用的功能,然而实际开发中,有大多数的开发者仅仅只会使用简单的 Redis String的 Get和Set,下面将回顾Redis五大对象,以便能够在实战中游刃有余。 String(终究是我扛下来所有) Hash(存储对象我也行) List(栈和队列我都行) Set(标签系统我在行) Sort S
2020-11-04 17:07:40
197
原创 Bean的生命周期
Bean的生命周期 前言 在我们没有使用Spring框架之前,创建对象一般都是使用new关键字进行创建,当然除了new关键字外,还有 运用反射手段,使用Class类的newInstance方法 或者 Constructor类中的newInstance方法 使用clone方法 使用反序列化(ObjectInputStream) 一旦对象不再被使用的时候,将有可能被JVM垃圾回收器进行回收。 但是在Spring通过IOC容器进行管理之后,Bean 的生命周期就变得更加复杂了,下图展示了Bean的构造过程
2020-11-04 17:05:15
170
原创 垃圾回收相关算法
垃圾回收相关算法 标记阶段:引用计数算法 在堆里存放着几乎所有的Java对象实例,在GC执行垃圾回收之前,首先需要区分出内存中哪些是存活对象,哪些是已经死亡的对象。只有被标记为己经死亡的对象,GC才会在执行垃圾回收时,释放掉其所占用的内存空间,因此这个过程我们可以称为垃圾标记阶段。 那么在JVM中究竟是如何标记一个死亡对象呢?简单来说,当一个对象已经不再被任何的存活对象继续引用时,就可以宣判为已经死亡。 判断对象存活一般有两种方式:引用计数算法和可达性分析算法。 引用计数算法(Reference Count
2020-10-14 08:37:45
238
原创 DevTools实现SpringBoot项目热部署
使用DevTools实现SpringBoot项目热部署 前言 最近在开发的时候,每次改动代码都需要启动项目,因为有的时候改动的服务比较多,所以重启的次数也就比较多了,想着每次重启等待也挺麻烦的,就打算使用DevTools工具实现项目的热部署 热部署是什么 大家都知道在项目开发过程中,常常会改动页面数据或者修改数据结构,为了显示改动效果,往往需要重启应用查看改变效果,其实就是重新编译生成了新的Class文件,这个文件里记录着和代码等对应的各种信息,然后Class文件将被虚拟机的ClassLoader加载。 而
2020-10-10 15:37:50
320
原创 方法区
方法区 前言 这次所讲述的是运行时数据区的最后一个部分 从线程共享与否的角度来看 ThreadLocal:如何保证多个线程在并发环境下的安全性?典型应用就是数据库连接管理,以及会话管理 栈、堆、方法区的交互关系 下面就涉及了对象的访问定位 Person:存放在元空间,也可以说方法区 person:存放在Java栈的局部变量表中 new Person():存放在Java堆中 方法区的理解 《Java虚拟机规范》中明确说明:“尽管所有的方法区在逻辑上是属于堆的一部分,但一些简单的实现可能不会选择去进行
2020-10-09 12:33:42
384
原创 堆
堆 堆的核心概念 堆针对一个JVM进程来说是唯一的,也就是一个进程只有一个JVM,但是进程包含多个线程,他们是共享同一堆空间的。 一个JVM实例只存在一个堆内存,堆也是Java内存管理的核心区域。 Java堆区在JVM启动的时候即被创建,其空间大小也就确定了。是JVM管理的最大一块内存空间。 堆内存的大小是可以调节的。 《Java虚拟机规范》规定,堆可以处于物理上不连续的内存空间中,但在逻辑上它应该被视为连续的。 所有的线程共享Java堆,在这里还可以划分线程私有的缓冲区(Thread Local A
2020-10-09 12:21:56
204
原创 本地方法栈
本地方法栈 Java虚拟机栈于管理Java方法的调用,而本地方法栈用于管理本地方法的调用。 本地方法栈,也是线程私有的。 允许被实现成固定或者是可动态扩展的内存大小。(在内存溢出方面是相同的) 如果线程请求分配的栈容量超过本地方法栈允许的最大容量,Java虚拟机将会抛出一个stackoverflowError 异常。 如果本地方法栈可以动态扩展,并且在尝试扩展的时候无法申请到足够的内存,或者在创建新的线程时没有足够的内存去创建对应的本地方法栈,那么Java虚拟机将会抛出一个outofMemoryError
2020-10-09 11:23:34
216
原创 虚拟机栈
虚拟机栈 虚拟机栈概述 由于跨平台性的设计,Java的指令都是根据栈来设计的。不同平台CPU架构不同,所以不能设计为基于寄存器的。 优点是跨平台,指令集小,编译器容易实现,缺点是性能下降,实现同样的功能需要更多的指令。 有不少Java开发人员一提到Java内存结构,就会非常粗粒度地将JVM中的内存区理解为仅有Java堆(heap)和Java栈(stack)?为什么? 首先栈是运行时的单位,而堆是存储的单位 栈解决程序的运行问题,即程序如何执行,或者说如何处理数据。 堆解决的是数据存储的问题,即数据怎么放,
2020-10-09 11:21:15
230
原创 程序计数器
程序计数器 介绍 JVM中的程序计数寄存器(Program Counter Register)中,Register的命名源于CPU的寄存器,寄存器存储指令相关的现场信息。CPU只有把数据装载到寄存器才能够运行。这里,并非是广义上所指的物理寄存器,或许将其翻译为PC计数器(或指令计数器)会更加贴切(也称为程序钩子),并且也不容易引起一些不必要的误会。JVM中的PC寄存器是对物理PC寄存器的一种抽象模拟。 它是一块很小的内存空间,几乎可以忽略不记。也是运行速度最快的存储区域。 在JVM规范中,每个线程都有它自
2020-10-09 11:05:10
7053
1
原创 运行时数据区概述及线程
运行时数据区概述及线程 前言 本节主要讲的是运行时数据区,也就是下图这部分,它是在类加载完成后的阶段 当我们通过前面的:类的加载-> 验证 -> 准备 -> 解析 -> 初始化 这几个阶段完成后,就会用到执行引擎对我们的类进行使用,同时执行引擎将会使用到我们运行时数据区 也就是大厨做饭,我们把大厨后面的东西(切好的菜,刀,调料),比作是运行时数据区。而厨师可以类比于执行引擎,将通过准备的东西进行制作成精美的菜品 内存是非常重要的系统资源,是硬盘和CPU的中间仓库及桥梁,承载着操
2020-10-09 11:03:07
176
原创 类加载子系统
类加载子系统 概述 完整图如下 如果自己想手写一个Java虚拟机的话,主要考虑哪些结构呢? 类加载器 执行引擎 类加载器子系统作用 类加载器子系统负责从文件系统或者网络中加载Class文件,class文件在文件开头有特定的文件标识。 ClassLoader只负责class文件的加载,至于它是否可以运行,则由Execution Engine决定。 加载的类信息存放于一块称为方法区的内存空间。除了类的信息外,方法区中还会存放运行时常量池信息,可能还包括字符串字面量和数字常量(这部分常量信息是Class文
2020-10-09 10:59:46
206
原创 JVM与Java体系结构
JVM与Java体系结构 前言 作为Java工程师的你曾被伤害过吗?你是否也遇到过这些问题? 运行着的线上系统突然卡死,系统无法访问,甚至直接OOMM! 想解决线上JVM GC问题,但却无从下手。 新项目上线,对各种JVM参数设置一脸茫然,直接默认吧然后就JJ了 每次面试之前都要重新背一遍JVM的一些原理概念性的东西,然而面试官却经常问你在实际项目中如何调优VM参数,如何解决GC、OOM等问题,一脸懵逼。 大部分Java开发人员,除会在项目中使用到与Java平台相关的各种高精尖技术,对于Java技术的
2020-10-09 10:47:48
1353
原创 mysql
mysql 学习: 一、为什么要学习数据库 二、数据库的相关概念 DBMS、DB、SQL 三、数据库存储数据的特点 四、初始MySQL MySQL产品的介绍 MySQL产品的安装 ★ MySQL服务的启动和停止 ★ MySQL服务的登录和退出 ★ MySQL的常见命令和语法规范 五、DQL语言的学习 ★ 基础查询 ★ 条件查询 ★ 排序查询 ★ 常见函数 ★ 分组函数 ★ 分组查询 ★
2020-09-27 17:01:37
265
原创 ElasticSearch7.6.x
ElasticSearch7.6.x ElasticSearchClientConfig package com.example.demo.config; import org.apache.http.HttpHost; import org.elasticsearch.client.RestClient; import org.elasticsearch.client.RestHighLevelClient; import org.springframework.context.annotation.B
2020-09-26 13:33:53
173
原创 zookeeper
1.概述 Zookeeper是一个开源的分布式的,为分布式应用提供协调服务的 Apache 项目。 ZooKeeper is a centralized service for maintaining configuration information, naming, providing distributed synchronization, and providing group services. All of these kinds of services are used in some for
2020-09-24 12:46:37
190
原创 springcloud了解(3)
Spring Cloud 封装了 Netflix 公司开发的 Eureka 模块来实现服务注册和发现(请对比Zookeeper)。 Eureka 采用了 C-S 的设计架构。Eureka Server 作为服务注册功能的服务器,它是服务注册中心。 而系统中的其他微服务,使用 Eureka 的客户端连接到 Eureka Server并维持心跳连接。这样系统的维护人员就可以通过 Eureka Server 来监控系统中各个微服务是否正常运行。SpringCloud 的一些其他模块(比如Zuul)就可以通过 Eu
2020-09-20 15:07:16
103
原创 maven学习笔记
1.解压部署Maven核心程序 ①检查JAVA_HOME环境变量 C:\Windows\System32>echo %JAVA_HOME% D:\DevInstall\jdk1.7.0_07 ②解压Maven的核心程序 将apache-maven-3.2.2-bin.zip解压到一个非中文无空格的目录下。例如:D:\DevInstall\apache-maven-3.2.2 ③配置环境变量 M2_HOME D:\DevInstall\apache-maven-3.2.2 path D:\DevIns
2020-09-20 13:26:00
205
原创 AJAX
简介 AJAX = Asynchronous JavaScript and XML(异步的 JavaScript 和 XML)。 AJAX 是一种在无需重新加载整个网页的情况下,能够更新部分网页的技术。 Ajax 不是一种新的编程语言,而是一种用于创建更好更快以及交互性更强的Web应用程序的技术。 在 2005 年,Google 通过其 Google Suggest 使 AJAX 变得流行起来。Google Suggest能够自动帮你完成搜索单词。 Google Suggest 使用 AJAX 创造出动态性
2020-09-14 19:31:07
164
原创 Swagger
Swagger简介 前后端分离 前端 -> 前端控制层、视图层 后端 -> 后端控制层、服务层、数据访问层 前后端通过API进行交互 前后端相对独立且松耦合 产生的问题 前后端集成,前端或者后端无法做到“及时协商,尽早解决”,最终导致问题集中爆发 解决方案 首先定义schema [ 计划的提纲 ],并实时跟踪最新的API,降低集成风险 Swagger 号称世界上最流行的API框架 Restful Api 文档在线自动生成器 => API 文档 与API 定义同步更新 直接运行,在线测试AP
2020-09-13 15:24:58
429
原创 Springcloud了解(2)
Springcloud官网说明 SpringCloud,基于SpringBoot提供了一套微服务解决方案,包括服务注册与发现,配置中心,全链路监控,服务网关,负载均衡,熔断器等组件,除了基于NetFlix的开源组件做高度抽象封装之外,还有一些选型中立的开源组件。 SpringCloud利用SpringBoot的开发便利性巧妙地简化了分布式系统基础设施的开发,SpringCloud为开发人员提供了快速构建分布式系统的一些工具,包括配置管理、服务发现、断路器、路由、微代理、事件总线、全局锁、决策竞选、分布式会话
2020-09-12 16:01:41
278
原创 SpringCloud了解(1)
1、什么是SpringCloud Spring cloud 流应用程序启动器是基于 Spring Boot 的 Spring 集成应用程序,提供与外部系统的集成。Spring cloud Task,一个生命周期短暂的微服务框架,用于快速构建执行有限数据处理的应用程序。 2、什么是微服务 微服务架构是一种架构模式或者说是一种架构风格,它提倡将单一应用程序划分为一组小的服务,每个服务运行在其独立的自己的进程中,服务之间相互协调、互相配合,为用户提供最终价值。服务之间采用轻量级的通信机制互相沟通(通常是基于HTT
2020-09-12 16:01:00
280
原创 docker(5)
Docker 容器数据卷 命名的容器挂载数据卷,其它容器通过挂载这个(父容器)实现数据共享,挂载数据卷的容器,称之为数据卷容器 DockerFile解析 总结: 从应用软件的角度来看,Dockerfile、Docker镜像与Docker容器分别代表软件的三个不同阶段, Dockerfile是软件的原材料 Docker镜像是软件的交付品 Docker容器则可以认为是软件的运行态。 Dockerfile面向开发,Docker镜像成为交付标准,Docker容器则涉及部署与运维,三者缺一不可,合力充当Dock
2020-09-11 15:59:55
213
原创 Linux一些相关问题
Linux篇 1、绝对路径用什么符号表示?当前目录、上层目录用什么表示?主目录用什么表示? 切换目录用什么命令? 答案: 绝对路径: 如/etc/init.d 当前目录和上层目录: ./ …/ 主目录: ~/ 切换目录: cd 2、怎么查看当前进程?怎么执行退出?怎么查看当前路径? 答案: 查看当前进程: ps 执行退出: exit 查看当前路径: pwd 3、怎么清屏?怎么退出当前命令?怎么执行睡眠?怎么查看当前用户 id?查看指定帮助用什么命令? 答案: 清屏: clear 退出当前命令: ctrl+c
2020-09-10 19:35:54
551
原创 docker(4)
Docker docker镜像 UnionFS(联合文件系统) UnionFS(联合文件系统):Union文件系统(UnionFS)是一种分层、轻量级并且高性能的文件系统,它支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下(unite several directories into a single virtual filesystem)。Union 文件系统是 Docker 镜像的基础。 镜像可以通过分层来进行继承,基于基础镜像(没有父镜像),可以制作各种具体
2020-09-10 18:49:33
169
原创 docker(3)
Docker 容器命令 OPTIONS说明(常用):有些是一个减号,有些是两个减号 –name=“容器新名字”: 为容器指定一个名称; -d: 后台运行容器,并返回容器ID,也即启动守护式容器; -i:以交互模式运行容器,通常与 -t 同时使用; -t:为容器重新分配一个伪输入终端,通常与 -i 同时使用; -P: 随机端口映射; -p: 指定端口映射,有以下四种格式 ip:hostPort:containerPort ip::containerPort hostPort:containerPort co
2020-09-10 13:17:11
166
原创 docker(2)
Docker 查看centos的版本 docker架构图 docker的组成 1.镜像 Docker 镜像(Image)就是一个只读的模板。镜像可以用来创建 Docker 容器,一个镜像可以创建很多容器。 2.容器 Docker 利用容器(Container)独立运行的一个或一组应用。容器是用镜像创建的运行实例。 它可以被启动、开始、停止、删除。每个容器都是相互隔离的、保证安全的平台。 可以把容器看做是一个简易版的 Linux 环境(包括root用户权限、进程空间、用户空间和网络空间等)和运行在其中的应
2020-09-09 16:35:10
269
原创 docker(1)
docker为什么会出现 一款产品从开发到上线,从操作系统,到运行环境,再到应用配置。作为开发+运维之间的协作我们需要关心很多东西,这也是很多互联网公司都不得不面对的问题,特别是各种版本的迭代之后,不同版本环境的兼容,对运维人员都是考验 Docker之所以发展如此迅速,也是因为它对此给出了一个标准化的解决方案。 环境配置如此麻烦,换一台机器,就要重来一次,费力费时。很多人想到,能不能从根本上解决问题,软件可以带环境安装?也就是说,安装的时候,把原始环境一模一样地复制过来。开发人员利用 Docker 可以消除
2020-09-09 14:00:11
234
原创 mybatisPlus(3)
代码生成器 生成基本的springboot框架代码,节省时间 package com.example.demo; import com.baomidou.mybatisplus.annotation.DbType; import com.baomidou.mybatisplus.annotation.FieldFill; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.
2020-09-09 12:59:14
291
原创 mybatis-plus(2)
乐观锁 乐观锁 : 故名思意十分乐观,它总是认为不会出现问题,无论干什么不去上锁!如果出现了问题,再次更新值测试 悲观锁:故名思意十分悲观,它总是认为总是出现问题,无论干什么都会上锁!再去操作! 乐观锁实现方式: 取出记录时,获取当前 version 更新时,带上这个version 执行更新时, set version = newVersion where version = oldVersion 如果version不对,就更新失败 乐观锁:1、先查询,获得版本号 version = 1 -- A up
2020-09-08 17:00:54
194
hahaCloudMusic.zip
2020-05-01
基于Vue的简易版音乐播放器
2020-05-05
spring源码解析.xmind
2020-07-05
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅