自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(95)
  • 资源 (2)
  • 问答 (1)
  • 收藏
  • 关注

原创 抽象类、接口、内部类

抽象类抽象方法和抽象类抽象方法和抽象类必须使用abstract修饰符来定义,有抽象方法的类只能被定义为抽象类,抽象类里可以没有抽象方法;规则如下:抽象类与抽象方法必须使用abstract修饰符来修饰,抽象方法不能有方法体;抽象类不能被实例化。即使抽象类里不包含抽象方法,这个抽象类也不能创建实例;抽象类可以包含成员变量、方法(普通方法和抽象方法都可以)、构造器、初始化块、内部类(接口、...

2018-12-02 16:09:27 2127

原创 Spring使用WebSocket、SockJS、STOMP实现消息功能

WebSocket概述WebSocket协议提供了通过一个套接字实现全双工通信的功能。除了其他的功能之外,它能够实现Web浏览器和服务器之间的异步通信。全双工意味着服务器可以发送消息给浏览器,浏览器也可以发送消息给服务器。使用Spring的低层级WebSocketAPI按照其最简单的形式,WebSocket只是两个应用之间通信的通道。位于WebSocket一端的应用发送消息,另...

2018-07-12 21:29:22 33070 10

原创 Spring中使用Redis

Redis简介Redis是一种特殊类型的数据库,它被称为key-value存储。实际上,key-value存储与哈希Map有很大的相似性。可以不大夸张的说,它们就是持久化的哈希Map。安装Redis我是用Docker来安装和使用数据库的,Docker用起来还是特别舒服的!安装Docker我下载的windows版的,官网下载https://docs.docker-...

2018-07-09 10:49:42 5095

原创 Spring发送邮件

概要Spring Email抽象的核心是MailSender接口。MailSender的实现能够通过连接Email服务器实现邮件发送的功能。 Spring自带了一个MailSender的实现也就是JavaMailSenderImpl,它会使用JavaMail API来发送Email。开启邮箱SMTP服务以网易126邮箱为例,QQ、163都差不多的步骤! ...

2018-07-08 22:24:29 3647

原创 Spring Security(二)拦截请求

拦截请求在第一篇中,我们看到一个特别简单的Spring Security配置,在这个默认的配置中,会 要求所有请求都要经过认证。

2018-06-20 20:39:04 23919 2

原创 并发工具类

Lock在Lock中声明了四个方法来获取锁:lock()unlock()tryLock()tryLock(long time, TimeUnit unit)lockInterruptibly()1、lock()、unlock()lock():获取锁,如果锁已被其它线程获取,则进行等待;unlock():释放锁;/** * @author yangdong * @date 2021-05-10 * 简单使用lock()方法,由于Lock发生异常不会自动释放锁,因此我们一定要在 f

2022-02-11 16:49:56 752

原创 Mysql高级(视图、存储过程、触发器)

视图视图相当于把查询结果转化成一个新表(虚拟存在的表),以后可以在这个新表上查询;数据库中只存放视图的定义,而不存放视图对应的数据,这些数据仍存放在原来的基本表中。所以一旦基本表中发生数据变化,从视图中查询出的数据也就随之改变了;1、创建或者修改视图创建视图的语法为:CREATE [OR REPLACE]VIEW view_name [column_list...]AS select_statement示例:#加上OR REPLACE参数,如果已经存在该视图,则可以直接替换该视图#

2022-02-09 21:06:02 790

原创 Kafka入门使用

Kafka是一个分布式消息队列,因其可水平扩展和高吞吐率而被广泛使用!kafka的安装与使用(Windows)1、运行zookeeper,下载与安装可见:https://blog.csdn.net/z1790424577/article/details/1066607642、下载kafka,地址为:https://kafka.apache.org/downloads下载完成并解压缩后,打开控制台进入kafka安装目录输入如下命令启动kafka:kafka-server-start.bat .\c

2022-02-09 19:59:00 13586 1

原创 线程安全、锁

锁是一种工具,用于控制对共享资源的访问;Lock和synchronized,这两个是最常见的锁,它们都可以达到线程安全的目的,但是在使用上和功能上又有较大的不同;Lock并不是用来提代synchronized,而是当使用synchronized不合适或不满足要求的时候,来提供高级功能的;为什么synchronized不够用?效率低:锁的释放情况少,视图获得锁时不能设定超时、不能中断一个正在视图获取锁的线程;不够灵活:加锁和释放的时机单一,每个锁仅有单一的条件;锁的分类乐观锁和悲观锁1、

2022-01-12 17:04:40 798

原创 二叉树、2-3-4树、红黑树、B Tree树、哈希表

二叉树每个子节点只有两个节点的树二叉查找树(二叉搜索树):就是一颗二叉树,他的左节点比父节点要小,右节点比父节点要大。他的高度决定的查找效率常见操作:1、查找(红黑树通用)查找每个节点我们从根节点开始查找,步骤:查找值比当前值大,则搜索右子树查找值等于当前值,停止查找,返回当前节点查找值比当前值小,则搜索左子树2、插入要插入节点,必须先找到插入节点位置。依然是从根节点开始比较,小于根节点的话就和左子树比较,反之与右子树比较,直到左子树为空或者右子树为空,则插入到相应为空的位置3、

2021-04-03 15:40:53 770

原创 Mysql高级(锁、日志)

应用优化1.1 使用连接池对于访问数据库来说,建立连接的代价是比较昂贵的,因为我们频繁的创建关闭连接,是比较耗费资源的,我们有必要建立 数据库连接池,以提高访问的性能。减少对MySQL的访问避免对数据进行重复检索在编写应用代码时,需要能够理清对数据库的访问逻辑。能够一次连接就获取到结果的,就不用两次连接,这样可以大大减少对数据库无用的重复请求。比如 ,需要获取书籍的id 和name字段 , 则查询如下: select id , name from tb_book;之后,在业务逻辑中有需要获

2021-03-24 10:02:39 260

原创 Mysql高级(事务、索引)

BTREE结构BTree又叫多路平衡搜索树,一颗m叉的BTree特性如下:树中每个节点最多包含m个孩子。除根节点与叶子节点外,每个节点至少有[ceil(m/2)]个孩子(ceil表示向上取整)。若根节点不是叶子节点,则至少有两个孩子。所有的叶子节点都在同一层。每个非叶子节点由n个key与n+1个指针组成,其中[ceil(m/2)-1] <= n <= m-1以5叉BTree为例,key的数量:公式推导[ceil(m/2)-1] <= n <= m-1。所以 2 &l

2021-03-23 16:36:46 553

原创 深入学习zookeeper(二)

ZooKeeper使用案例配置中心案例工作中有这样的一个场景: 数据库用户名和密码信息放在一个配置文件中,应用读取该配置文件,配置文件信息放入缓存。若数据库的用户名和密码改变时候,还需要重新加载缓存,比较麻烦,通过ZooKeeper可以轻松完成,当数据库发生变化时自动完成缓存同步。设计思路:连接zookeeper服务器读取zookeeper中的配置信息,注册watcher监听器,存入本地变量当zookeeper中的配置信息发生变化时,通过watcher的回调方法捕获数据变化事件重新获取配置

2021-03-18 11:00:05 854

原创 Redis由浅入深详细解析(二)

事务redis事务就是一个命令执行的队列,将一系列预定义命令包装成一个整体(一个队列)。当执行时,一次性按照添加顺序依次执行,中间不会被打断或者干扰;事务的基本操作1、开启事务命令:multi作用:设定事务的开启位置,此指令执行后,后续的所有指令均加入到事务中;2、执行事务命令:exec作用:设定事务的结束位置,同时执行事务。与multi成对出现,成对使用;3、取消事务命令:discard作用:终止当前事务的定义,发生在multi之后,exec之前;事务的注意事项1、加入事务的命

2021-03-13 22:18:50 552

原创 Redis由浅入深详细解析(一)

Redis的下载与安装(Windows)下载地址:https://github.com/MSOpenTech/redis/tags解压缩即可使用!Redis基本操作信息添加功能:设置 key,value 数据;命令:set key value范例:set name yd信息查询功能:根据 key 查询对应的 value,如果不存在,返回空(nil);命令:get key范例:get name清除屏幕信息功能:清除屏幕中的信息;命令:clear退出客户端

2021-03-10 21:54:36 300

原创 语法糖

什么是语法糖java 编译器把 *.java 源码编译为 *.class 字节码的过程中,自动生成和转换的一些代码;注意:以下代码的分析,借助了 javap 工具,idea 的反编译功能,idea 插件 jclasslib 等工具。另外,编译器转换的结果直接就是 class 字节码,只是为了便于阅读,给出了 几乎等价 的 java 源码方式,并不是编译器还会转换出中间的 java 源码,切记;默认构造器public class Candy1 {}编译成class后的代码:public cla

2021-01-12 15:58:06 190

原创 JVM之垃圾回收

对象已死吗垃圾收集器在对堆进行回收前,

2021-01-08 09:45:00 365

原创 JVM之类文件结构

类文件结构类型名称数量U4magic(魔术)1U2minor_version(次版本号)1U2major_version(主版本号)1U2constant_pool_count(常量个数)1cp_infoconstant_pool(常量池表)constant_pool_count-1U2access_flags(类的访问控制权限)1U2this_class(类名)1U2super_class(父类名)1U

2021-01-07 17:10:03 95

原创 JVM内存结构、Java内存模型、Java对象模型

运行时数据区域程序计数器(Program Counter Register)程序计数器是一块较小的内存空间,它可以看作是当前线程所执行的字节码(.class 文件)的行号指示器。由于 Java 虚拟机的多线程是通过线程轮流切换并分配处理器执行时间的方式来实现的,在任何一个确定的时刻,一个处理器都只会执行一条线程中的指令。因此,为了线程切换后能恢复到正确的执行位置,每条线程都需要有一个独立的...

2021-01-06 17:24:25 393

原创 LocalDate、LocalTime、LocalDateTime

概述JDK 8中增加了一套全新的日期时间API,这套API设计合理,是线程安全的。新的日期及时间API位于 java.time 包中,下面是一些关键类:LocalDate:表示日期,包含年月日,格式为 2019-10-16LocalTime:表示时间,包含时分秒,格式为 16:38:54.158549300LocalDateTime:表示日期时间,包含年月日,时分秒,格式为 2018-09-06T15:33:56.750DateTimeFormatter:日期时间格式化类Instant:时间戳

2020-07-23 15:45:18 350

原创 Git基础(二)

创建与合并分支版本回退里已经知道,每次提交,Git都把它们串成一条时间线,这条时间线就是一个分支。截止到目前,只有一条时间线,在Git里,这个分支叫主分支,即master分支。HEAD严格来说不是指向提交,而是指向master,master才是指向提交的,所以,HEAD指向的就是当前分支。 首先,我们来创建dev分支,然后切换到dev分支上。如下操作:git checkout 命令加...

2020-07-11 11:53:50 73

原创 Git基础(一)

1:git初始化—-git init$ git init 该命令将创建一个名为 .git 的子目录,这个子目录含有你初始化的 Git 仓库中所有的必须文件,这些文件是 Git 仓库的骨干。2: 把文件添加到版本库中新建文件test.txt,添加内容:This is a test! 使用 git add 命令将文件添加到暂存区里面去git add test.txt ...

2020-07-11 11:53:24 88

原创 Object克隆方法解析

克隆方法的由来问题一:什么是克隆(clone)方法答: 创建并返回此对象的一个副本——按照原对象,创建一个新的对象(复制原对象的内容)。问题二:已经存在new关键字和反射技术都可以创建对象,为什么还需要一个Object的clone方法呢?答:必然是new关键字和反射技术,存在一些弊端。new关键字和反射创建对象的弊端:通过new和反射可以创建内容一模一样的对象。但是,创建对象之后,通过...

2020-07-11 11:48:53 1081 1

原创 服务端Socket

使用ServerSocketServerSocket类包含了使用Java编写服务器所需的全部内容。在Java中,服务器程序的基本生命周期如下:public static void main(String[] args) throws IOException { ServerSocket server = new ServerSocket(port); while (true) {...

2020-07-11 11:47:02 160

原创 Spring Cloud(七)Spring Cloud Config统一管理微服务配置

为什么要统一管理微服务配置?对于传统的单体应用,常使用配置文件管理所有配置。例如一个Spring Boot开发的单体应用,可将配置内容放在application.yml文件中。如果需要切换环境,可设置多个Profile,并在启动应用时指定spring.profiles.active={profile}。然而,在微服务架构中,微服务的配置管理一般有以下需求:集中管理配置:一个使用微服务架构...

2020-07-11 11:42:03 113

原创 Spring Cloud(一)概述

分布式与集群的区别分布式:一个业务分拆多个子业务,部署在不同的服务器上 集群:同一个业务,部署在多个服务器上 例如: 小饭店原来只有一个厨师,切菜洗菜备料炒菜全干。后来客人多了,厨房一个厨师忙不过来,又请了个厨师,两个厨师都能炒一样的菜,这两个厨师的关系是集群; 为了让厨师专心炒菜,把菜做到极致,又请了个配菜师负责切菜,备菜,备料,厨师和配菜师的关系是分布式; 一个配菜师也忙不过来了...

2020-07-11 11:41:34 97

原创 Maven命令学习

site<build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-site-plugin</artifactId> <version>3.4</version> </plugin> </plugins&g

2020-07-11 11:36:07 245

原创 Tomcat服务器配置

Tomcat 服务器配置Tomcat 服务器的配置主要集中于 tomcat/conf 下的 catalina.policy、catalina.properties、context.xml、server.xml、tomcat-users.xml、web.xml 文件;server.xmlserver.xml 是tomcat 服务器的核心配置文件,包含了Tomcat的 Servlet 容器(Ca...

2020-07-11 11:02:28 485

原创 Tomcat启动流程

Lifecycle由于所有的组件均存在初始化、启动、停止等生命周期方法,拥有生命周期管理的特性, 所以Tomcat在设计的时候, 基于生命周期管理抽象成了一个接口 Lifecycle ,而组件 Server、Service、Container、Executor、Connector 组件 , 都实现了一个生命周期的接口,从而具有了以下生命周期中的核心方法:init():初始化组件start(...

2020-07-11 11:02:11 1474

原创 Tomcat基础了解

Tomcat整体架构我们知道如果要设计一个系统,首先是要了解需求,我们已经了解了Tomcat要实现两个核心功能:处理Socket连接,负责网络字节流与Request和Response对象的转化;加载和管理Servlet,以及具体处理Request请求;因此Tomcat设计了两个核心组件连接器(Connector)和容器(Container)来分别做这两件事情。连接器负责对外交流,容器负...

2020-07-11 11:02:00 370

翻译 堡垒机与跳板机

跳板机跳板机属于内控堡垒机范畴,是一种用于单点登陆的主机应用系统。2000年左右,高端行业用户为了对运维人员的远程登录进集中管理,会在机房里部署跳板机。跳板机就是一台服务器,维护人员在维护过程中,首先要统一登录到这台服务器上,然后从这台服务器再登录到目标设备进行维护。但跳板机并没有实现对运维人员操作行为的控制和审计,使用跳板机过程中还是会有误操作、违规操作导致的操作事故,一旦出现操作事故很难快速定位原因和责任人。此外,跳板机存在严重的安全风险,一旦跳板机系统被攻入,则将后端资源风险完全暴露无遗。同时,

2020-06-15 14:47:50 394

原创 深入学习zookeeper(一)

什么是zookeeperzookeeper官网:https://zookeeper.apache.org/zooKeeper由雅虎研究院开发,是Google Chubby的开源实现,后来托管到Apache,于2010年11月正式成为Apache的顶级项目。zookeeper应用场景zooKeeper是一个经典的分布式数据一致性解决方案,致力于为分布式应用提供一个高性能、高可用,且具有严格顺序访问控制能力的分布式协调存储服务:维护配置信息;分布式锁服务;集群管理;生成分布式唯一ID;维

2020-06-10 10:55:05 1278

原创 Fork/Join介绍

Fork/Join框架介绍Fork/Join框架自JDK 7引入。Fork/Join框架可以将一个大任务拆分为很多小任务来异步执行。 Fork/Join框架主要包含三个模块:线程池:ForkJoinPool;任务对象:ForkJoinTask;执行任务的线程:ForkJoinWorkerThread;Fork/Join原理-分治法ForkJoinPool主要用来使用分治法(Div...

2020-04-26 15:08:29 387

原创 JDK8新特性之Optional类与Stream流

集合处理数据的弊端import java.util.ArrayList;import java.util.Collections;public class Test { public static void main(String[] args) { // 一个ArrayList集合中存储有以下数据:张无忌,周芷若,赵敏,张强,张三丰 // 需求:1...

2020-04-24 17:32:52 773 1

原创 JDK8新特性之Lambda表达式

Lambda表达式介绍使用匿名内部类存在的问题:当需要启动一个线程去完成任务时,通常会通过Runnable 接口来定义任务内容,并使用Thread 类来启动该线程。传统写法,代码如下:public class Demo01LambdaIntro { public static void main(String[] args) { new Thread(new Run...

2020-04-24 10:40:15 320

原创 应用监控

简介Spring Boot提供了运行时的应用监控和管理的功能。我们可以通过http、JMX、SSH协议来进行操作。审计、健康及指标信息将会自动得到。Endpoints列举一些主要的endpoints : 敏感信息访问限制根据上面表格,鉴权为false的,表示不敏感,可以随意访问,否则就是做了一些保护,不能随意访问。endpoints.mappings.sensitiv...

2019-06-12 10:34:44 2376

原创 Spring Boot企业级开发(三)异步消息

异步消息异步消息主要目的是为了系统与系统之间的通信。所谓异步消息即消息发送者无须等待消息接收者的处理及返回,甚至无须关心消息是否发送成功。 在异步消息中有两个很重要的概念,即消息代理和目的地。当消息发送者发送消息后,消息将由消息代理接管,消息代理保证消息传递到指定的目的地。 异步消息主要有两种形式的目的地:队列(queue)和主题(topic)。队列用于点对点式的消息通信;主题用于发布/订...

2019-06-12 10:33:03 246

原创 Spring Boot的数据访问(四)Cache与Redis

缓存(Cache)简介当我们需要重复地获取相同的数据的时候,我们一次又一次的请求数据库或者远程服务,导致大量的时间耗费在数据库查询或者远程方法的调用上,导致程序性能的恶化,这便是缓存要解决的问题。实战1:新建Spring Boot项目,添加依赖JPA、Web和Cache,并导入数据库驱动 2:配置属性 application.properties//数据源...

2019-06-12 10:31:32 240

原创 Spring Boot的数据访问(三)事务

简介使用Spring Boot默认的配置就能满足我们绝大多数需求。实战1:新建Spring Boot项目,添加依赖JPA和Web,并导入数据库驱动 2:配置属性 application.properties//数据源spring.datasource.driver-class-name=com.mysql.jdbc.Driverspring.datasource.u...

2019-06-12 10:30:45 147

原创 Spring Boot的数据访问(一)Spring Data JPA、Spring Data REST

Spring Data概述Spring Data项目是Spring用来解决数据访问问题的一揽子方案,Spring Data是一个伞形项目,包含了大量关系型数据库及非关系型数据库的数据访问解决方案:Spring Data为我们使用统一的API来对上述的数据存储技术进行数据访问操作提供了支持。这是Spring通过提供Spring Data Commons项目来实现的,它是上述各种Spring ...

2019-06-12 10:28:38 353

Spring+SpringMVC+Mybatis整合(XML方式)

最简单的Spring+SpringMVC+Mybatis整合(XML方式),没有多余的代码,简单明了。有非常详细的注释

2019-03-01

Oracle学习笔记

Oracle数据库最新版本为Oracle Database 12c。Oracle数据库12c 引入了一个新的多承租方架构,使用该架构可轻松部署和管理数据库云。此外,一些创新特性可最大限度地提高资源使用率和灵活性,如Oracle Multitenant可快速整合多个数据库,而Automatic Data Optimization和Heat Map能以更高的密度压缩数据和对数据分层。这些独一无二的技术进步再加上在可用性、安全性和大数据支持方面的主要增强,使得Oracle数据库12c 成为私有云和公有云部署的理想平台。

2018-07-12

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

TA关注的人

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