自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Docker 文件映射

在创建Docker容器时,想要与本地路径进行映射共享文件,使用docker run -v指令,例如我需要将本地的的/root/code路径映射到容器内的/data/code路径,使用如下指令,冒号前为宿主机路径,冒号后为容器路径,其中xxx为镜像完整路径docker run -it -v /root/code:/data/code xxx /bin/bash常用的创建容器并设置文件映射和端口映射如下:docker run -it -v /root/code:/data/code -p 36001:

2021-01-16 17:41:46 47301 1

转载 GO 互斥锁(Mutex)原理

文章目录1. 前言2. Mutex数据结构2.1 Mutex结构体2.2 Mutex方法3. 加解锁过程3.1 简单加锁3.2 加锁被阻塞3.3 简单解锁3.4 解锁并唤醒协程4. 自旋过程4.1 自旋条件4.2 自旋的优势4.3 自旋的问题5. Mutex模式5.1 normal模式5.2 starvation模式6. Woken状态7. 为什么重复解锁要panic8. 编程Tips8.1 使用defer避免死锁8.2 加锁和解锁应该成对出现1. 前言互斥锁是并发程序中对共享资源进行访问控制的主要手段

2020-12-18 13:22:54 23010 3

原创 Golang 面向对象(封装、继承、多态)

前言Go语言并不像Java那样有类的概念,以及extends这样的关键字,但是可以用其特有的数据结构来实现类似面向对象的特性。主要有结构体实现封装,组合实现继承,接口实现多态。当然,Go语言还有其特有的类型判断与断言。文章目录前言一、结构体实现封装二、组合实现继承三、接口实现一、结构体实现封装在Go语言中,我们可以对结构体的字段进行封装,并通过结构体中的方法来操作内部的字段。如果结构体中字段名的首字母是小写字母,那么这样的字段是私有的,相当于private字段。外部包裹能直接访问,如果是在名的首字母

2020-12-15 17:38:48 21512 1

原创 Golang 数组(切片)的值传递与引用传递

Go语言中函数的参数都是按值进行传递的,即使参数是指针,也是指针的一个副本。习惯上把指针的函数参数称之为地址传参,即引用传递,而非指针的函数参数称为值传参地址传参在大对象上效率比值传参好,在内部相当于用指针地址赋值,而不用复制整个对象文章目录一、数组的值传递二、数组的引用传递三、切片的引用传递一、数组的值传递Golang数组作为参数传入函数时,进行的是值传递,这里与Java数组的引用传递是不同的,示例如下package mainimport "fmt"func main() { ar.

2020-12-13 20:32:52 28483 14

原创 Golang错误处理机制(error 与 panic)

文章目录一、概述二、error三、panic一、概述Go语言并没有像Java那样的try catch finally 的处理机制,而是提供了其特有的错误处理机制。在Go语言中,错误或异常分为error和panic两种,error一般是程序员可预知的,会进行合适的处理,例如检测输入是否合法等。而panic是程序员无法预知的异常,例如空指针或数组越界等。二、errorGo 提供了两种创建error的方法,分别是:errors.Newfmt.Errorfpackage mainimport (

2020-12-08 22:19:55 4244 2

原创 单点登录(三)—— 单点登出原理手写实现

单点登出原理我们想实现单点登出,首先会想到在当前应用下把Session销毁即可,但是仔细一想,这样的话,是不能实现把与之共享一个token的应用的Session销毁,这条路不行。那既然所有的应用登录都需要...

2020-02-11 18:47:54 1570 1

原创 单点登录(二)—— 单点登录(CAS核心)原理手写实现

一、本地模拟跨域配置在Windows系统盘下找到如下路径的文件,修改任意hosts文件打开任意一个文件添加如下所示本地映射域名二、项目整体工程创建建立如下图所示父工程及子模块(创建Maven项目并添加web项目支持)三个子模块Maven依赖如下<dependencies> <dependency> <groupId>...

2020-02-10 20:38:23 1049

原创 单点登录(一)—— 单点登录及常见解决方案原理(CAS、oauth2、JWT)

背景在企业发展初期,企业使用的系统很少,通常一个或者两个,每个系统都有自己的登录模块,用户用不同的账号即可登录,很方便。但随着企业的发展,用到的系统随之增多,用户在操作不同的系统时,需要多次登录,而且每个系统的账号都不一样,这对于用户来说,很不方便。于是,就想到是不是可以在一个系统登录,其他系统就不用登录了呢?这就是单点登录要解决的问题。概念单点登录英文全称Single Sign On...

2020-02-06 20:52:10 21810 3

原创 Java 接入支付宝网页支付(SpringBoot + IDEA + 内网穿透 + 沙箱配置 )

一、支付宝沙箱环境配置首先登陆支付宝开放平台官网(前蚂蚁金服开放平台),登陆并填写相关信息后点击页面最下方提交入驻申请提交申请后进入如下页面并点击开发者中心然后进入如下页面并点击研发服务这里要简单提一下对称加密和非对称加密对称加密即通过一个密匙来加密和解密,常见的如MD5加密,这样就会存在一定安全问题非对称加密即存在一个公钥和私钥,它们是成对存在的,公钥进行加密,私钥进行解密,...

2020-01-28 19:18:16 7980 4

原创 Spring Cloud Netflix(六)—— Zuul(API网关、Zuul实现路由)

一、API网关原先IOS、Android、PC客户端调用服务的地方,需要多个URL地址,有订单的、商品的、用户的。微服务化后就必须有统一的出入口,这种情况下,API Gateway就出现了。API Gateway很好的解决了微服务下调用、统一接入等问题。作为UI端(即IOS、Android、PC客户端用户界面),在展示页面时可能需要从多个微服务中聚合数据,而且服务的划分位置结构可能会有所改变如...

2019-12-21 20:06:06 326

原创 Spring Cloud Netflix(五)—— Hystrix 熔断器(服务熔断、服务降级)

一、Hystrix 概述

2019-12-21 17:10:25 657

原创 Spring Cloud Netflix(四)—— Feign 负载均衡、切换负载均衡算法

一、Feign简介Feign是一个声明式WebService客户端.使用Feign能让编写WebService客户端更加简单。Feign基于Ribbon实现,是Ribbon的Java社区版,即面向接口编程,使用时只需定义一个接口,然后在上面添加注解即可。Feign旨在使编写Java Http客户端变得更容易前面在使用Ribbon + RestTemplate时,利用RestTemplate对...

2019-12-19 21:11:53 1439

原创 Spring Cloud Netflix(三)—— Ribbon 负载均衡、自定义负载均衡算法

一、Ribbon简介Ribbon是Spring Cloud Netflix的一个组件,是一套客户端负载均衡工具。Ribbon会自动帮助你基于某种规则(简单轮询、随机连接等),也可以实现自定义的负载均衡算法。...

2019-12-18 19:30:58 590

原创 Spring Cloud Netflix(二)—— Eureka服务注册与发现、Eureka集群搭建

一、Eureka简介Eureka是Netflix开发的服务发现框架,本身是一个基于REST的服务。SpringCloud将它集成在其子项目spring-cloud-netflix中,以实现SpringCloud的服务发现功能。有了服务发现与注册,只需要使用服务的标识符,就可以访问到服务,而不需要修改服务调用的配置文件了,功能类似于Dubbo推荐的注册中心Zookeeper二、Eureka原理...

2019-12-16 22:24:29 342

原创 Spring Cloud Netflix(一)—— 父工程及生产者与消费者模块搭建

一、Spring CloudSpringCloud, 基于SpringBoot提供了一套微服务解决方案,包括服务注册与发现,配置中心,全链路监控,服务网关,负载均衡,熔断器等组件,除了基于NetFlix的开源组件做高度抽象封装之外,还有一些选型中立的开源组件。SpringCloud利用SpringBoot的开发便利性,巧妙地简化了分布式系统基础设施的开发,SpringCloud为开发人员提供了...

2019-12-15 18:10:20 270

原创 JVM重点知识整理(JDK、JVM组成、运行时数据区、类加载器与双亲委派机制、沙箱安全机制、垃圾回收机制、Native、OOM的调优、JMM)

一、JDK体系结构JRE:Java Runtime Environment ,即Java运行环境,包括Java虚拟机和Java程序所需的核心类库等,如果想要运行一个开发好的Java程序,计算机中只需要安装JRE即可。JDK:Java Development Kit ,即Java开发工具包,JDK是提供给Java开发人员使用的,其中包含了java的开发工具,也包括了JRE。所以安装了JDK,就...

2019-11-24 00:35:32 356

原创 SpringBoot 整合 Shiro 实现登录验证即权限下放、关于Permission

Shiro简介Apache Shiro是一个强大且易用的Java安全框架,执行身份验证、授权、密码和会话管理。Shiro三个核心组件:Subject:即“当前操作用户”。但是,在Shiro中,Subject这一概念并不仅仅指人,也可以是第三方进程、后台帐户(Daemon Account)或其他类似事物。它仅仅意味着“当前跟软件交互的东西”。Subject代表了当前用户的安全操作,Secur...

2019-11-15 17:11:19 874

原创 SpringBoot 中使用 Spring Security 实现权限授权与认证

Spring Security 简介Spring Security是一个能够为基于Spring的企业应用系统提供声明式的安全访问控制解决方案的安全框架。它提供了一组可以在Spring应用上下文中配置的Bean,充分利用了Spring IoC,DI(控制反转Inversion of Control ,DI:Dependency Injection 依赖注入)和AOP(面向切面编程)功能,为应用系统...

2019-11-13 00:49:16 1426 1

原创 SpringBoot整合Mybatis

一、创建一个SpringBoot项目,并连接测试用数据库二、 导入Maven依赖<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web...

2019-11-12 13:30:43 215

原创 SpringBoot整合Druid数据源、SpringBoot使用JDBC连接数据库

使用JDBC连接数据库导入Maven依赖<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> ...

2019-11-12 13:24:50 904

转载 Java 基本类型和包装类型的区别

Java 的每个基本类型都对应了一个包装类型,比如说 int 的包装类型为 Integer,double 的包装类型为 Double。基本类型和包装类型的区别主要有以下 5 点。1. 包装类型可以为 null,而基本类型不可以别小看这一点区别,它使得包装类型可以应用于 POJO 中,而基本类型则不行。POJO 是什么呢?这里稍微说明一下。POJO 的英文全称是 Plain Ordinary...

2019-10-18 00:36:44 910

原创 抽象工厂模式

在看抽象工厂模式之前我们先看一下工厂模式,关于简单工厂模式和工厂方法模式,可参考https://blog.csdn.net/baolingye/article/details/101179682抽象工厂模式之间的关系可用下图来解释,一个超级工厂下有多个子工厂,每个子工厂能生产不同的产品,但产品之间又属于不同的产品族下面举一个例子,我们用代码来实现一个工厂模式代码实现手机产品接口:...

2019-10-17 12:59:20 137

原创 MySQL锁(lock和latch、锁的粒度、InnoDB锁的类型、一致性非锁定读、一致性锁定读)

什么是锁锁是数据库系统区别于文件系统的一个关键特性。锁机制用于管理对共享资源的并发访问,提供数据的完整性和一致性。虽然现在数据库系统做的越来越类似,但是有多少种数据库,就可能有多少种锁的实现方式。对于MyISAM引擎,其锁是表锁设计,并发情况下读没有问题,但是并发插入时的性能相对较差。InnoDB存储引擎锁的实现和Oracle数据库非常类似,提供一致性的非锁定读、行级锁支持。行级锁没有相关...

2019-10-11 17:49:53 1548

转载 Zookeeper简介、角色、设计目的、核心、原理、Watch触发器

Zookeeper简介Zookeeper是一个分布式的,开放源码的分布式应用程序协调服务,它是Google的Chubby一个开源的实现,它们都是分布式锁的实现者。Zookeeper是Hadoop和Hbase的重要组件。Zookeeper 分布式服务框架是Apache Hadoop 的一个子项目,它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。...

2019-10-09 21:16:04 362

原创 事务的四种隔离级别

数据库事务的隔离级别有4种,由低到高分别为Read uncommitted 、Read committed 、Repeatable read 、Serializable 。在事务的并发操作中可能会出现脏读,不可重复读,幻读。具体可参照该篇博客https://blog.csdn.net/baolingye/article/details/102231803Read uncommitted读未...

2019-10-06 15:48:48 464

原创 脏读(脏数据、脏页)、不可重复读、幻读

一、脏读(读到未提交的数据)在理解脏读之前,需要理解脏数据的概念。脏数据是指事务对缓冲池中行记录的修改,并且还没有提交。注意脏数据和脏页是完全不同的两种概念,脏页指的是在缓冲池中已经被修改的页,但是还没有刷新到磁盘中,即数据库实例内存中的页和磁盘中的页的数据不一致。脏页的读取是非常正常的,脏页是数据库实例内存和磁盘异步造成的,这并不影响数据的一致性,脏页最终会被刷新到磁盘中。脏读指的是在不...

2019-10-06 15:19:12 3453

原创 用户线程与内核线程、线程池及其工作原理

一、用户线程与内核线程用户线程(ULT):指不需要内核支持而在用户程序中实现的线程,其不依赖于操作系统的核心,应用进程利用线程库创建、同步、调度和管理线程函数来控制用户线程。另外,因为用户线程是由应用进程利用线程库创建和管理,不依赖于操作系统核心,不需要进行用户态与核心态的切换,速度快,操作系统的内核不知道多线程的存在,因此一个线程阻塞将使得整个进程包括其所有线程阻塞内核线程(KLT)...

2019-10-05 16:48:35 1734

转载 MySQL索引背后的数据结构和算法原理、索引优化

摘要本文以MySQL数据库为研究对象,讨论与数据库索引相关的一些话题。特别需要说明的是,MySQL支持诸多存储引擎,而各种存储引擎对索引的支持也各不相同,因此MySQL数据库支持多种索引类型,如BTree索引,哈希索引,全文索引等等。为了避免混乱,本文将只关注于BTree索引,因为这是平常使用MySQL时主要打交道的索引,至于哈希索引和全文索引本文暂不讨论。文章主要内容分为三个部分。第一部分...

2019-10-04 13:02:03 205

原创 JDK1.7中HashMap死环问题及JDK1.8中对HashMap的优化源码详解

一、JDK1.7中HashMap扩容死锁问题我们首先来看一下JDK1.7中put方法的源码我们打开addEntry方法如下,它会判断数组当前容量是否已经超过的阈值,例如假设当前的数组容量是16,加载因子为0.75,即超过了12,并且刚好要插入的索引处有元素,这时候就需要进行扩容操作,可以看到resize扩容大小是原数组的两倍,仍然符合数组的长度是2的指数次幂我们再进入resize方法如下...

2019-10-02 13:30:30 902 2

原创 HashMap底层数据结构、HashMap是怎样将数组初始容量的长度转化为2的整数次幂的、为什么数组的长度必须是2的指数次幂、为什么加载因子是0.75、为什么链表长度大于等于8时转成了红黑树

一、HashMap底层数据结构JDK1.7及之前:数组+链表JDK1.8:数组+链表+红黑树关于HashMap基本的大家都知道,但是为什么数组的长度必须是2的指数次幂,为什么HashMap的加载因子要设置为0.75,为什么链表长度大于等于8时转成了红黑树?HashMap添加元素分析当添加元素时,会通过哈希值和数组长度计算计算下标来准确定位该元素应该put的位置,通常我们为了使元素时分...

2019-09-29 16:03:52 1150 1

原创 简单工厂模式(静态工厂模式)、工厂方法模式

一、工厂模式作用:实现创建者和调用者分离分类:简单工厂模式:用来生产同一等级结构中的任意产品(对于增加新的产品,需覆盖现有代码)工厂方法模式:用来生产同一等级结构中的固定产品(支持增加任意产品)抽象工厂模式:围绕一个超级工厂创建其他工厂工厂模式满足三个原则:开闭原则:一个软件的实体应当扩展开放,对修改关闭依赖倒转原则:只针对接口编程,不针对实体编程迪米特法则:只与你直接的朋...

2019-09-23 00:35:17 365

原创 单例模式的五种实现方式(饿汉式、懒汉式、DCL懒汉式、静态内部类式、枚举单例)、优缺点比较

单例模式的五种实现方式,分别为:饿汉模式、懒汉模式、DCL懒汉式、静态内部类单例、枚举单例,下面一一介绍每种方式一、饿汉式饿汉模式,可以想象一个很饿的人,需要立马吃东西,饿汉模式便是这样,在类加载时就创建对象,由于在类加载时就创建单例,因此不存在线程安全问题//懒汉式public class SingletonDemo1 { //私有化构造器 private Singlet...

2019-09-21 14:29:29 2755 5

原创 Java实现二叉树的前序、中序、后序查找、删除结点

请编写前序查找,中序查找和后序查找的方法,分别使用三种查找方式,查找 num = 5 的节点我们一这样一棵二叉树为例一、前序查找实现思路:先判断当前节点的num是否等于要查找的,如果相等,则返回当前节点如果不相等,则判断当前节点的左子节点是否为空,如果不为空,则递归前序查找如果左递归前序查找找到节点则返回该节点,否则继续判断当前节点的右子节点是否为空,如果不为空,则继续右递归前序...

2019-09-19 00:00:07 427 1

原创 几种数据结构的分析、树、二叉树前序、中序、后序遍历(Java实现)

一、为什么需要树这种数据结构1. 数组存储方式的分析优点:通过下标方式访问元素,速度快。对于有序数组,还可使用二分查找提高检索速度缺点:如果要检索具体某个值,或者插入值**(按一定顺序)**会整体移动,效率较低2. 链式存储方式的分析优点:在一定程度上对数组存储方式有优化(比如:插入一个数值节点,只需要将插入节点,链接到链表中即可, 删除效率也很好)缺点:在进行检索时,效率仍然较低,...

2019-09-18 18:23:52 600

原创 数据结构——单链表节点的增删改查

单链表节点的增删改查场景所需的实体类class Person{ int num; //编号 String name; //姓名 int age; //年龄 Person next; //下一个节点 public Person() { } public Person(int num, String name, int age) { ...

2019-09-03 13:21:51 464

原创 SpringBoot 模板引擎、Thymeleaf语法详解

一、模板引擎前端交给我们的页面,是html页面。如果是我们以前开发,我们需要把他们转成jsp页面,jsp好处就是当我们查出一些数据转发到JSP页面以后,我们可以用jsp轻松实现数据的显示及交互等。jsp支持非常强大的功能,包括能写Java代码,但是,SpringBoot项目默认是以jar的方式,不是war,第二,我们用的还是嵌入式的Tomcat,所以,他现在默认是不支持jsp的。既然不支持js...

2019-09-01 21:16:39 418

原创 SpringBoot 静态资源映射的两种方式

一、webjars方式映射静态资源文件我们之前使用Maven构建一个Web项目时,在main目录下会存在一个webapp的目录,我们以前都是将所有的页面或静态资源导在这个目录下,但现在使用SpringBoot项目我们应该将静态资源文件放在哪里呢?SpringBoot默认的打包方式是jar(Java归档),那么这种方式SpringBoot能不能来给我们写页面呢?当然是可以的,但是SpringBo...

2019-08-31 22:33:52 5330

原创 SpringBoot自动配置原理

SpringBoot自动配置原理要了解SpringBoot自动配置原理,我们首先从一个SpringBoot主配置类入手run方法中传入了一个被@SpringBootApplication注解的类,@SpringBootApplication标注在一个类上说明该类是一个SpringBoot项目的主配置类,也就是该项目的入口我们点进@SpringBootApplication注解发现@Sp...

2019-08-30 18:01:49 244

原创 SpringMVC执行原理

SpringMVC执行原理SpringMVC框架以请求为驱动,围绕一个中心Servlet分派请求和其他功能。其核心类是DispatcherServlet,其顶层实现是Servlet接口我们通过一张图来了解一下SpringMVC的执行流程,图中实线表示SpringMVC框架提供的技术,不需要开发者实现,虚线表示需要开发者实现流程说明:请求者发出请求到DispatcherServlet...

2019-08-29 00:00:45 184

原创 数据结构——队列

一、队列简介队列是一个有序列表,可以用数组或是链表来实现。遵循先入先出的原则。即:先存入队列的数据,要先取出。后存入的要后取出示意图:(使用数组模拟队列示意图)二、数组实现队列队列本身是有序列表,若使用数组的结构来存储队列的数据,则队列数组的声明如下图, 其中 maxSize 是该队列的最大容量因为队列的输入、输出分别是从前后端来处理的,因此需要两个变量fro...

2019-08-23 14:25:46 255

空空如也

空空如也

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

TA关注的人

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