自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 数据源配置

【代码】数据源配置。

2024-04-01 20:25:25 65

原创 SpringCloud(3)——Hystrix

一、服务雪崩整个微服务系统中,有一个节点的某个接口功能出现异常情况,就有可能在高并发的情况下导致调用它的上游系统出现响应延迟,直到 tomcat 连接池耗尽,导致调用该服务节点其他正常接口都失败的现象,这就是服务雪崩现象二、服务隔离就是只允许这个接口最多能接受多少的并发,做了这样的限制后,该接口的主机就会空余线程出来接收其他请求,不会被哪个坏了的接口占用满三、Hystrix一个不错的服务隔离框架3.1 使用1)导包<dependency>

2022-03-03 12:06:45 218

原创 SpringCloud(2)——常用配置

一、eureka用户认证之前在注册中心项目的配置文件暴露过eureka的地址eureka项目的配置文件:#暴露eureka的服务地址ַeureka.client.serviceUrl.defaultZone=http://${eureka.instance.hostname}:${server.port}/eureka/服务调用方,服务提供方项目的配置文件同样配置了eureka的地址,以便启动时进行服务注册与发现,但是存在安全性问题:只要指定eureka的地址,谁都可以访问,因此需要进行

2022-03-01 12:22:24 473

原创 SpringCloud(1)——背景

一、架构演变1、传统项目 在传统项目中,我们的项目通常打成一个war,部署在tomcat中,所有的功能点都在这个war包中,为请求方提供服务。也就是 浏览器——>系统——>数据库这种模式。优点在于架构简单,部署起来方便,但是同样存在缺点:代码维护困难,当需要修改某个功能点时,可能会影响到全局。并且并发量有限。2、升级1.0当并发量变大时,单个tomcat就撑不住了,最简单方式就是加服务器,在每台服务器上都部署一套系统,通过nginx进行负载均衡。如下: ...

2022-02-23 19:51:15 940

原创 zookeeper(7)—— zk实现分布式锁

需要锁的原因:多任务去抢一个资源 多任务都需要对资源进行写操作 多任务对资源的访问是互斥的1、不使用锁在多线程的情况下会出现什么情况定义一个生成订单ID类,也就是多任务去争抢的资源public class OrderNumGenerator { //全局订单id public static int count = 0; //生成订单ID public String getNumber() { SimpleDateFormat simp

2022-02-15 13:00:46 2262

原创 zookeeper(6)—— zk服务端集群源码

服务端集群源码,同样从QuorumPeerMain的main方法入手 public static void main(String[] args) { QuorumPeerMain main = new QuorumPeerMain(); try { main.initializeAndRun(args); } catch (IllegalArgumentException e) {81 main.initializeA

2022-02-14 13:00:32 1028

原创 Docker(1) —— 环境搭建

使用VMWare安装Centos7https://blog.csdn.net/quge_name_harder/article/details/118514211

2021-07-09 10:32:39 133 1

原创 Redis(2) —— 环境搭建

使用VMWare安装Centos7软件下载地址:链接:https://pan.baidu.com/s/1nrL7qfxZI-0qXfWnmzTqiw提取码:de8s一、安装VMWare解压后,双击VMware-workstation-full-12.0.0-2985596.exe一直下一步即可安装成功后,需对虚拟机进行设置全局设置二、加载centos安装过程需设置用户名密码,自己设置记住三、修改linux系统文件登录,cd /etc/sysco.

2021-07-06 10:37:52 110

原创 Redis(1) —— 入门

一、什么是Redis一个开源、使用ANSIC语言编写、支持网络、可基于内存,也可持久化的日志型、Key-Value数据库,提供多种语言的API二、特点1〉速度快2〉键值对的数据结构服务器3〉简单稳定4〉持久化5〉主从复制6〉高可用和分布式转移7〉提供多种语言的API三、应用场景1〉缓存数据库2〉排行榜3〉计数器应用4〉社交网络5〉消息队列四、Redis值的类型前面说过Redis是个key-value的缓存数据库其中value有以下几种类型:String、ha

2021-06-24 21:23:01 82

原创 消息中间件(9)—— RabbitMQ知识点

一、日志一般存放位置Linux 上/var/log/rabbitmq/[email protected]/var/log/rabbitmq/[email protected]上C:\Users\Administrator\AppData\Roaming\RabbitMQ\log\ [email protected]:\Users\Administrator\AppData\Roaming\RabbitMQ\log\ rabbit@ XXX-sasl.log第一个是记.

2021-06-21 23:28:59 200

原创 消息中间件(8)—— 与SpringBoot集成

SpringBoot配置步骤:一、pom.xml

2021-06-21 23:11:00 235

原创 消息中间件(7)—— 队列及消息的属性

在RabbitMQ 中,生产者生产的消息先储存在队列中,然后消费者从队列中获取进行消费因此,本节来学习一下队列的相关知识一、队列种类1.1 临时队列RabbitMQ 服务器重启,这些队列就不会存在,所以称之为临时队列临时队列又分为:1)自动删除队列和普通队列在使用上没有什么区别,唯一的区别是,当消费者断开连接时,队列将会被删除注意:自动删除队列可能绑定多个消费者,当最后一个消费者断开连接才会执行删除设置属性 auto-delete 标识为 true 即可。系统声明的随机队

2021-06-18 18:49:11 270 1

原创 消息中间件(6)—— 消息拒绝

在上节学习了消费者获取消息那么当消费者获取到消息后,发现消息不应该由自己解决,或者处理时发生异常,应该怎么处理呢这就是本节学习的消息拒绝一、消息拒绝消息拒绝也有两种方式:Reject 和 NackReject一次只能拒绝一条消息,而Nack则可以一次性拒绝多条消息并且无论哪种方式,都可以使用requeue 标识如果是 false,则不重新发送,一般这个消息就会被 RabbitMQ 丢弃如果是 true,则消息发生了重新投递//Reject方式拒绝(这里第2个参数决定是否

2021-06-18 07:36:22 265

原创 消息中间件(5)—— 获取消息

上节学习消息发布时的策略,本节学习获取消息时的策略我们知道消费者会消费队列上的消息,那么消费者如何知道队列上有消息的呢最简单的方式就是一直轮询该队列(称之为拉取),也就是while(){...}的方式显然这种方式很消耗性能,不推荐使用,但是可以先看一下一、拉取1.1 消费者demopublic class GetMessageConsumer { public static void main(String[] argv) throws IOExce

2021-06-17 23:06:43 525 1

原创 消息中间件(4)—— 消息发布

前面介绍消息中间件的概念,以及几种交换器的特性也说了生产者生产消息,并发给交换器,由交换器将消息发给队列,再由绑定到队列上的消费者进行消费本节学习生产者生产消息,发布时的几种方式一、无保障在之前的学习中,通过channel.basicPublish(EXCHANGE_NAME, routekey,null, message.getBytes());发布并使用正确的交换器和路由信息,消息会被接收并发送到合适的队列中但是如果出现: 1、网络问题,2、消息不可路由,3、RabbitMQ 自

2021-06-17 22:20:05 950 1

原创 消息中间件(3)—— 交换器(Fanout、Topic)

上一篇通过代码演示了最简单的交换器--direct交换器本篇学习一下其他的交换器(Fanout、Topic)一、Fanout交换器又称为广播交换器,不处理路由键。只要是绑定到该交换器上的队列都能收到这个消息,Fanout交换机转发消息是最快的创建方式很简单,只需要指定交换器的类型即可生产者代码如下public class FanoutProducer { public final static String EXCHANGE_NAME = "fanoutLogs";

2021-06-16 12:36:09 317

原创 消息中间件(2)—— 交换器

本节主要学习生产者如何发布消息,本次使用direct交换器如图,生产者主要是和交换器互动1、准备创建连接、连接到RabbitMQ这里采用工厂模式,先创建工厂ConnectionFactory connectionFactory= new ConnectionFactory();2、指定连接的MQ地址(这里使用默认端口5672)connectionFactory.setHost("localhost");3、创建连接(TCP连接)Connection connecti

2021-06-10 14:05:35 153 1

原创 消息中间件(1)—— 入门

消息中间件(消息队列)一、概念一般认为,消息中间件属于分布式系统中一个子系统,关注于数据的发送和接收,利用高效可靠的异步消息传递机制对分布式系统中的其余各个子系统进行集成。高效:对于消息的处理处理速度快。可靠:一般消息中间件都会有消息持久化机制和其他的机制确保消息不丢失。异步:指发送完一个请求,不需要等待返回,随时可以再发送下一个请求,既不需要等待。二、优点低耦合,不管是程序还是模块之间,使用消息中间件进行间接通信。异步通信能力,使得子系统之间得以充分执行自己的逻辑而无需等待

2021-06-10 13:40:45 434 1

原创 zookeeper(5)—— zk服务端单机源码

我们在win下启动是从D:\tools\zookeeper\zookeeper-3.4.14\bin下的zkServer.cmd,打开这个脚本,可以看到其实就是运行org.apache.zookeeper.server.quorum.QuorumPeerMain这个类,先看这个类的main方法81 main.initializeAndRun(args);=>114 runFromConfig(config); //如果配置了集群,解析集群相关信息=>119 ZooKeeperServ

2021-06-04 14:04:55 156

原创 zookeeper(4)—— zk客户端源码

以zk原生客户端为例:我们在win下启动是从D:\tools\zookeeper\zookeeper-3.4.14\bin下的zkCli.cmd打开这个脚本,可以看到其实就是运行org.apache.zookeeper.ZooKeeperMain这个类一、看下ZooKeeperMain类的main方法先概况的说下这个方法执行时做了哪些事情,再看它是如何做的1、创建了一个NIO的socket连接(不然怎么连接服务端)2、创建了sendThread 线程并启动(看名字就知道,这个线程

2021-06-03 14:00:15 446 2

原创 zookeeper(3)—— zk客户端的使用

zk目前有三种客户端:原生客户端、zkClient、Curator先使用原生客户端了解一下基本操作:1、创建连接及关闭连接2、创建节点3、读取指定节点的内容4、更新节点内容5、删除指定节点//客户端的基本操作public class TestJavaApi implements Watcher{ private static final int SESSION_TIMEOUT = 10000; private static final String CONNECTI

2021-05-25 13:41:00 1355

原创 zookeeper(2)—— 了解Zookeeper

一、下载下载Zookeeper,我的版本是zookeeper-3.4.14链接:https://pan.baidu.com/s/1FKGOQWyiVzqhTzcN47QkPQ提取码:1234解压到自己的硬盘下,比如二、目录结构bin 存放系统脚本(该目录下的zkServer.cmd是win下服务器启动脚本,默认端口2181,zkCli.cmd是客户端的启动脚本)conf 存放配置文件contrib ...

2021-05-11 13:55:52 138

原创 zookeeper(1)—— 分布式系统简介

1.1 什么是分布式系统?在传统项目中,通常是将一个项目打成war包,部署在tomcat中运行。当项目越来越大时,这种方式就不太适用了。此时,会将项目分解成不同的服务,这些服务部署在不同的计算机上,彼此之间通过网络相互协调工作。总之,一个硬件或软件组织分布在不同的网络计算机上,彼此之间通过消息传递进行通信和协调的系统即为分布式系统。1.2 分布式系统特点分布性:整个项目架构在空间上是任意的。对等性:分布式系统架构中,每一个微服务都可能出现问题,这时就需要两个或以上完全相同的微服务,在一.

2021-04-21 08:01:29 132

原创 Nginx基础(5)—— https及高可用

一、https协议1.1 背景在前面的演示中,我们使用的是http协议,而在正式环境,我们通常使用https协议,来保证数据在网络中的安全这里涉及公、私钥的概念服务的提供方,这里指nginx,提供一套对应的公钥和私钥服务的使用方,这里指浏览器,在第一次访问nginx时,需要下载证书,证书中包含公钥。这样当浏览器访问服务器时,会将请求数据使用公钥进行加密,nginx服务器使用对应的私钥进行解密1.2 环境要求先查看nginx版本信息,命令:nginx -V有--with

2021-01-27 17:07:46 247

原创 Nginx基础(4)—— 常用组件

一、root声明和alias声明当我们以http://172.17.0.2:8080/a/b/c.html访问nginx时首先我们会根据172.17.0.2:8080定位虚拟主机,剩余部分/a/b/c.html,称为path再去匹配location如果匹配中/a,则称/a,为path1剩余部分/b/c.html,则称/b/c.html,为path2此时如果我们使用root声明location /a { root html/;}表示在root指定的html/目录下找.

2021-01-26 10:47:34 501

原创 Nginx基础(3)—— Location语法

一、官方描述nginx官方文档给出location语法如下: location [=|~|~*|^~] uri { .......}方括号中的四种标识符是可选项,用来改变请求字符串和uri的匹配方式uri是待匹配的请求字符串,可以是不包含正则的字符串,这种模式被称为“标准uri";也可以包含正则,这种模式被称为"正则uri"分类 标识符 描述 精确匹配 = 用于标准uri前,要求请求字符串和uri严格匹配。如果匹配成功,就停止匹配,立即执行该lo

2021-01-25 09:56:33 523

原创 Nginx基础(2)—— 安装nginx

一、nginx是什么Nginx是一款高性能的HTTP和反向代理服务器,在高连接并发的情况下,它能够支持高达50000个并发连接数的响应,内存、CPU等系统资源消耗却很低,运行很稳定二、nginx的作用1、路由功能(与微服务对应):域名/路径,进行路由选择后台服务器2、负载功能(与高并发高可用对应):对后台服务器集群进行负载3、静态服务器(比tomcat性能高很多):在mvvm模式中,充当文件读取职责三、相关概念正向代理与反向代理1、代理:客户端自己请求出现困难。客户请了一个代

2021-01-23 13:42:07 197 1

原创 Nginx基础(1)—— win7上配置环境

1、下载docker toolboxhttps://mirrors.aliyun.com/docker-toolbox/windows/docker-toolbox/2、选择好安装目录一路next到底,完成后生成三个图标:Docker Quickstart Terminal, Kitematic (Alpha), Oracle VM VirtualBox3、双击Docker Quickstart Terminal看到鲸鱼表示docker宿主机(192.168.99.100 ...

2021-01-23 09:43:33 292

原创 Java并发基础(17)—— 并发实战

一、背景并发基础学了一段时间,接下来实战一把业务背景:下载多个文档,如果使用单线程一个个下载,太慢了,我们实现一个并发框架二、业务要求可以查询进度,下载了多少个,以及有多少个成功完成后缓存一段时间,过期清理三、着手3.1 接口ITaskProcesser回想使用其他框架,如spring等,都会提供一些接口,我们开发人员只需要使用对应的接口,即可完成相应的功能。这里我们的并发框架同样提供一个接口,给开发人员实现public interface ITaskProcesser

2021-01-21 16:03:15 116

原创 Java并发基础(16)—— 类的线程安全

一、类的线程安全概念:如果多线程下使用这个类,不管如何操作,这个类总能表现出正确的行为,这个类就是线程安全的主要表现在两个方面:操作的原子性内存的可见性二、保证类的线程安全的方式2.1 栈封闭当调用类的方法时,如果变量都是在方法体内声明的,这些变量就处于栈封闭的状态,从而保证了线程安全这里涉及虚拟机,运行时会把方法和变量打包,其他线程是访问不到这个包的,自然而然线程就是安全的Public class Test{ Public void test(){ Priva

2021-01-18 15:31:19 249 3

原创 Java并发基础(15)—— 线程池

一、背景线程在系统中是一种很宝贵的资源,和数据库连接很类似创建和销毁线程,都需要耗费系统资源所以为了降低资源的消耗,提供响应的速度,省下创建和销毁线程的时间,以及便于管理线程,提出来线程池的概念二、直接手写一个线程池public class MyThreadPool { private static int defaultThreadNum = 5;// 线程池中默认线程的个数为5 private final int realThreadNum;//在构造线程

2021-01-18 13:43:02 70 1

原创 Java并发基础(14)—— 并发容器

一、背景上一节我们学习了并发容器ConcurrentHashMap在JDK1.7中的实现,而在JDK1.8中,又有了一些区别1、取消了segment数组,直接用table保存数据,锁的粒度更小,减少并发冲突的概率2、存储数据时采用了链表+红黑树的形式,纯链表的形式时间复杂度为O(n),红黑树则为O(logn),性能提升很大。 当key值相等的元素形成的链表中元素个数超过8个的时候,由链表转红黑树二、数据结构在jdk1.7中,采用segment数组和hashEntry数组而...

2021-01-18 13:21:17 118

原创 Java并发基础(13)—— 并发容器

一、背景Java为我们提供了很多容器,如常用的hashmap,hashtable,但是在多线程的情况下,hashmap,hashtable并不是好的选择Hashmap 在多线程下,会导致Entry链表形成环形数据结构,一旦形成环形数据结构,Entry的next节点永远不为空,就会产生死循环获取EntryHashtable 虽然使用synchronized来保证线程安全,但是并发量越高,效率就越低为此,java又为我们提供了ConcurrentHashMap,下面我们学习为什么Concurre

2021-01-17 17:35:14 126

原创 Java并发基础(12)—— AbstractQueuedSynchronizer

一、背景之前我们使用synchronized来控制同步,配合Object的wait()、notify()系列方法可以实现等待/通知模式而在AQS中则提供了条件Condition,对线程的等待、唤醒操作更加详细和灵活二、Condition在AQS中,可以维护多个条件队列,和同步队列比较相似,只不过条件队列时单向的如图所示当同步队列中拿到锁的节点被移除同步队列后,如果我们调用await方法的话,会根据该节点的线程构造新的节点加入等待队列当我们调用Signal方法时,会把等待队

2021-01-17 16:43:27 98

原创 Java并发基础(11)—— AbstractQueuedSynchronizer

一、独占锁获取源码在上节中,我们学习了AQS的基本概念,并手动实现了一个独占锁,以及相应的数据结构接下来我们来看一下独占锁的源码当我们采用独占式获取时,我们在示例中调用其模板方法public void lock() { //子类覆盖的是流程方法tryAcquire,这里调用父类的模板方法acquire sync.acquire(1);//模板方法 }我们来看一下acquire模板方法public final void acquire(int arg) {

2021-01-14 13:43:07 134 1

原创 Java并发基础(10)—— AbstractQueuedSynchronizer

一、背景之前我们学习了并发工具类CountDownLatch、Semaphone等,还有可重入锁ReentrantLock,读写锁ReetrantReadWriteLock等它们都提供了锁的功能,只不过在实现最基本的锁功能后,又提供了其他不同的功能而它们最基本的锁功能:都是使用AQS来实现所以本节学习一下AbstractQueuedSynchronizer是如何来实现锁功能的二、模板方法模式在学习AQS之前,我们先学习一下模板方法模式模板方法模式:一个抽象类公开定义了执行它方

2021-01-10 10:33:16 98

原创 Java并发基础(9)—— 显示锁Lock

一 、背景之前我们学习了Synchronized关键字,它是Java语言内置的特性,因此也被称为内置锁同时我们在使用Synchronized关键字时,只需要包围需要同步的代码即可,不需要我们考虑锁的获取和释放,因此也被称为隐式锁这样看来,使用Synchronized实现锁,代码很简单但是在一些其他场景下,Synchronized就满足不了我们的需求比如:获取锁可以被中断、超时获取锁、尝试获取锁,这些Synchronized都无法做到为了满足这些需求,java为我们提供了显示锁Lock

2020-12-31 15:11:40 126

原创 Java并发基础(8)—— 原子操作CAS

一、背景我们都知道在多线程环境下,num++,这个操作是不安全的,它不是原子操作在底层,这个加1的操作会被分成几个步骤:1、先获取 num2、然后执行 num + 13、然后把 num+ 1的值给 numpublic class TestInt { private volatile int num = 0; public int getNum() { return this.num; } public void..

2020-12-29 09:49:30 1142 8

原创 Java并发基础(7)—— Callable、Future和FutureTask

目录一、背景二、Callable三、Future四、FutureTask五、demo一、背景之前我们学习过线程的创建方法继承继承Thread实现Runnable接口但是这两种方式都无法获取执行结果而自从Java 1.5开始,就提供了Callable和Future,通过它们可以在任务执行完毕之后得到任务执行结果接下来,我们来学习一下二、Callable先看一下源码public interface Callable<V> { V

2020-12-28 15:39:37 86

原创 Java并发基础(6)——并发工具类

一、背景java为我们提供了很躲并发工具类,常用的有以下几种:CountDownLatchCyclicBarrierSemaphoreExchangeCallable、Future和FutureTask下面我们分别学习二、CountDownLatch之前我们学了join方法如果在A线程中,执行了B的join方法,那么A需要等待,等到B线程执行完后,才能继续执行A而CountDownLatch很像加强的join方法一组线程等待其他的线程完成工作以后,再继续执行.

2020-12-23 11:12:58 91

Hibernate所需要的jar包

Hibernate所需要的jar包,版本为hibernate-distribution-3.6.0.Final

2019-01-03

Spring和Struts整合例子

Spring和Struts整合例子,整合步骤:https://blog.csdn.net/quge_name_harder/article/details/84983570

2018-12-13

Spring和Struts整合用到的jar包

Spring和Struts整合用到的jar包,整合步骤参考:https://blog.csdn.net/quge_name_harder/article/details/84983570

2018-12-13

nexus-2.6.2.war

nexus-2.6.2.war 放到tomcat的webapp下面,建议是Tomcat6,tomcat7 会 比较慢

2018-12-11

apache-maven-3.2.1-bin

apache-maven-3.2.1-bin 的jar包,需要解压一下,里面才是

2018-12-11

Socket通讯程序

学习Socket通讯写的小程序,主要功能是实现将客户端发送的小写字母转换为大写字母

2018-10-30

传智15年Java就业班视频

传智博客,2015年,Java就业班的视频,有解密的密码。

2018-10-25

使用第三方工具将各种对象转成json格式

使用第三方工具将各种对象转成json格式,比如JavaBean对象/List或Set或Map对象

2018-09-30

web小项目:省市区三级联动(struts2+json)

web项目练手:省市区三级联动,使用了struts2+json的技术

2018-09-30

验证码小项目

在web页面中随机生成验证码,并判断与自己输入的验证码是否相等

2018-09-26

MyEclipse百度云分享

MyEclipse破解教程,内含MyEclipse以及破解工具。具体可参考https://blog.csdn.net/quge_name_harder/article/details/80547891

2018-06-02

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

TA关注的人

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