自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

java线程池

java中使用的线程池

  • 博客(72)
  • 资源 (2)
  • 问答 (1)
  • 收藏
  • 关注

原创 react hooks + typescript + sass 开发的H5移动端组件库

CP Design使用 React hooks Typescript 开发的一个 H5 移动端 组件库其中包括了下图中的27个基础组件:CP Design Mobile(github地址:https://10086xiaozhang.github.io/CP-DESIGN)特性基于 CP Design 移动设计规范。规则化的视觉样式配置,适应各类产品风格。使用 TypeS...

2020-04-09 17:56:29 1023

原创 记录一次高并发项目的优化重构过程

前言最近有幸接触过一个并发很高的项目,其实这个项目是一个接单任务的平台,用户群体很大,大概有300w用户到500w用户左右,每到凌晨的时候,我们的任务就会更新为全新的。因此流量最大的点就是凌晨那一个小时,因为我们的任务并不是无限多的,需要抢做的,类似秒杀场景,而凌晨高的原因是因为价格高,因此用户大都会积累到这个时间点来做任务。我这边测试过我们每秒的qps大概高峰有10000左右,这个是最高峰的时...

2019-11-30 16:15:15 495

原创 mq如何防止消息重复消费

如果我们项目使用了mq的话,那么我们就会在意这几个问题,一个是消息丢失、一个是消息堆积、一个就是消息重复消费。我们可不希望一个用户下单,我们发送两个单给他,这个时候我们就应该考虑这个消息重复消费的问题。前面俩个问题我们已经在前面两章讲过了。而重复消费其实有点类似我们经常说的幂等性。什么是幂等性呢?就是用户对于同一操作发起的一次请求或者多次请求的结果是一致的,不会因为多次点击而产生了副作用。举...

2019-11-09 15:55:59 7405

原创 mq消息堆积解决方案

上一篇我们主要说如何防止mq的消息丢失,这一篇主要是讲如何处理消息堆积。其实好多时候消息堆积的解决方法都是因业务而议的。而我们这边也是通过发现生产环境出现了问题,而进行排查的,然后解决的。当然每个项目的业务场景不一样。然后解决方式也不一样,但是基本上都是在这方面解决的。首先我们得知道为什么会产生消息堆积?1、消息发送的速率远远大于消息消费的速率。2、消费者出现了问题,导致无法消费。其实基...

2019-11-09 14:26:56 15963

原创 如何防止rabbitmq消息丢失

在我们使用mq的时候,我们发现了他的好处以及便捷性,但是mq中经常也会出现一些问题,比如mq的消息丢失、消息堆积、消息重复消费之类的问题,好在这些问题都有解决方法,而我们本节主要说的就是mq的消息丢失问题首先我们要知道什么时候会丢失消息,在mq中总共有三个环节会丢失消息一、生产者弄丢了数据如果我们的生产者在中途传输过程出现问题导致了消息的丢失。这个时候我们应该怎么做,mq中提供了两种方式来防...

2019-11-09 13:46:15 2849 2

原创 Tomcat假死原因排查

tomcat假死?为什么会假死呢,可能大多数人不会碰到这个问题,如果出现问题,重启服务器就好了,可是如果这个问题没有解决的话,那么就可能会存在相应的隐患,如果你的用户量多,那么必然你的请求量就高,这样假死的发生频率就会越来越高。而刚好我们线上也出现了这个问题,就是tomcat假死,是如何知道假死的呢开始我们的服务器报警预告无法访问某些接口发,报502的错误,由于我们的项目是通过nginx进行负...

2019-10-25 11:18:45 3631

原创 Gson的日常使用

在web项目中,我们现在使用最多的数据格式就是json,因此项目中会经常进行json与我们bean进行相互转换,目前使用比较多的就是阿里的fastjson以及谷歌的gson,我们本篇介绍的就是谷歌的这个解析json的工具。我们这边使用mavne来进行管理我们的jar包,因此我们只需要在pom里面引用相应的依赖 <dependency> <groupId>co...

2019-10-25 10:50:16 349

原创 CAS5.2x单点登录(十五)---------cas server开启restful验证

我们之前说过的cas访问都是通过我们前端页面进行登录的,但是我们可不可以通过接口来进行各种票据的校验,当然,cas为我们提供了这种方式,即通过restful接口来进行登录。1、首先是引入依赖&amp;lt;dependency&amp;gt; &amp;lt;groupId&amp;gt;org.apereo.cas&amp;lt;/groupId&amp;gt; &amp;lt;artifactId&amp;gt;cas-

2019-01-09 20:16:47 5311 3

原创 CAS5.2x单点登录(十四)---------cas集群部署

之前我们说过使用jpa或者redis来存储tgt,本以为到这一步的时候寄已经完成了cas的集群部署,但是测试了一下发现并没有成功。后面发现原来是session还没有共享。对于集群部署我们需要解决的就是session共享的问题,而session共享有好多种方式,当然最常用的就是redis,而我们这里也使用redis来共享session。这里分为两步来做。第一步:tgt的redis缓存,这个可以...

2019-01-03 20:22:02 3600 4

原创 CAS5.2x单点登录(十三)---------使用jpa进行存储ticket

我们上节已经说了如何使用redis来存储ticket,当然cas提供的方式有好多种,比如我们这节要将的jpa方式,其实如果是针对于需要持久化的ticket就可以使用这种方式。下面我们就说一下如何使用jpa来存储ticket。首先第一步还是引入相应的依赖&amp;lt;dependency&amp;gt; &amp;lt;groupId&amp;gt;org.apereo.cas&amp;lt;/groupId&amp;gt; ...

2018-12-21 10:47:28 1611 1

原创 CAS5.2x单点登录(十二)---------使用redis进行存储ticket

之前我们已经说过了cas的基本操作,我们cas中连个比较重要的东西一个是tgt一个就是st,而我们也知道cas默认的tgt以及st是存储在内存中的。但是假如我们需要部署cas的集群的话,那么这种方式显然不能达到我们的要求。因此参考cas的文档我们可以看到关于cas对我们提供的几种存储ticket的方式而对于我们集群我们通常用的最多的就是使用redis来进行操作。我们这节也将会使用redis来...

2018-12-20 19:49:14 4170 2

原创 sql优化之in与exists

在我们开发过程中,初期可能不会去太关注我们自己写的sql语句的效率怎么样,因为总是觉得可以拿取到数据就算是ok了,可能也会注意一下你的sql执行的时间,但是在开发的过程中因为数据量的原因,其实你不去了解一下sql的一些优化的手段其实是无法感知你的sql的效率问题。我之前博客也写过一篇关于sql的优化一些需要注意的点,而我们本节主要是针对in与exists的区别以及什么时候使用in,什么时候使用ex...

2018-09-19 20:05:02 7266 2

原创 CAS5.2x单点登录(十一)---------.net客户端对接cas

上一篇我们已经说过了java整合cas的过程及代码配置。而我们这篇就以.net来讲解,因为这两个比较特殊,目前我对接了这么多种语言的客户端,也就是java、.net在有证书的过程会出现问题,主要是我们自己生成的证书,如果是公网证书其实是不会有问题的,但是我们也要说下我们自己生成的证书下如何整合.net 这边我们也会分两部分来讲解: 1、http下的cas整合.net 2、https下的cas...

2018-08-25 16:56:28 1693

原创 CAS5.2x单点登录(十)---------java客户端对接cas

好久没有写cas的文章了,最近也是比较忙,还是就是懒,我们之前讲的篇幅主要是基于cas服务端的,如果搭建好服务端后,没有把cas的客户端整合进来就等于没有用,接下来我们这篇文章我们会讲客户端如何接入cas,这边我们会以java和.net来说,因为这两个客户端接进来的问题会比较多,而其他语言比如python、go、php、node这些客户端接进来是没有这些问题,只要跟着文档的配置就ok了。j...

2018-08-25 16:02:26 3837 7

原创 线程池ThreadPoolExecutor源码解析

什么是多线程?多线程是为了使得多个线程并行的工作以完成多项任务,以提高系统的效率。线程是在同一时间需要完成多项任务的时候被实现的。其实如果学过操作系统的同学的话就知道,其实我们操作底层中的cpu是以时间片的方式供这些线程使用,其实实时每次只有一个线程去使用cpu,但是时间片的间隔很小,所以让人以为是并行的。什么时候需要使用多线程?其实使用多线程的场景很多,比如你有好多任务需要做,假...

2018-07-31 20:04:50 220

原创 ReentrantLock与AbstractQueuedSynchronizer源码解析

在我们开发过程中,经常要和多线程打交道,多线程其实也是面试过程中必须问的问题,其实为什么会要使用多线程,这个大家可以百度下就清楚了。我们今天讲的这个ReentrantLock其实是对于同步(安全)的问题而产生的。大家应该都知道synchronized吧,他的作用业很简单,其实就是为了防止多线程下操作数据导致一些列问题,在1.5之前,其实都是基于这个synchronized的,而在jdk5的时候就推...

2018-07-30 21:15:20 370

原创 spring security------过滤器源码解析(二)

我们上篇已经解析过了前三个过滤器的源码,这篇将会去解析之前剩下的几个类 - BasicAuthenticationFilter - RequestCacheAwareFilter - SecurityContextHolderAwareRequestFilter - AnonymousAuthenticationFilter 废话不多说,直接进入主题吧BasicAuthe...

2018-07-21 18:01:36 658

原创 spring security------过滤器源码解析(一)

之前我们讲过了spring security的基本用法,我们应该也能大致了解他的作用,这里在重复一遍他的作用认证,也就是去确认这个用户在我们系统中是否存在。授权,这个可能有点混淆,但是总的来说就是用户是否有权限操作某个接口 对于第二个大家应该知道在security中有个叫hasrole的东西,也就是我们可以控制接口的权限,当我们为某个接口设置了admin的角色的权限时候,这时候只有这个用...

2018-07-21 16:44:16 1732

原创 rabbitmq-----Routing和topic模式

前几篇已经说了mq的基本用法,也分别使用了普通的java写法和spring boot基于注解的方法去实现了mq的接收消息。我们上一节的最后给大家说过,有一个叫routingKey的东西,好像我们暂时还没有使用过。本节讲的这两种模式都会使用到routingKey来实现我们的mq消费。Routing模式听这个名称就知道这个模式和路由有关,我们上一篇说的广播的模式这种方式有点缺少灵活性,他只是广...

2018-07-01 13:20:50 17141 3

原创 rabbitmq-----发布订阅模式

上篇我们已经讲过了工作模式和简单模式的用法。而这节我们就要开始讲一下后面三种的第一种,在我们平常开发中,其实用的比较多的是后面的这三种。发布订阅模式:英文叫Publish/Subscribe,发布订阅模式也称为广播模式,在exchange下属于fanout模式。广播,大家应该都知道吧,在mq中,其实就是一个生产者对应n个消费者,可能仔细的人就会发现我们的工作模式也是一对多的,那么这两者有什么关...

2018-06-30 12:51:31 5587

原创 rabbitmq-----简单模式与工作模式

上篇我们已经介绍过了mq的安装以及基本使用,这节我们主要要讲一下mq的使用。在mq中我们会讲解他的5中工作模式:简单模式工作模式发布订阅模式,也称为广播路由模式主题模式 接下来的几个篇章我们会着重讲一下如何使用这5中模式。以及这5种模式的使用场景。mq中的几个专业术语1、生产者:负责生产消息的。通常用字母 P 表示。 2、 队列就像存放商品的仓库或者商店,是生产商品...

2018-06-30 12:01:21 2644

原创 mysql数据库的sql优化

前言我们在做项目的时候,必须会跟数据库打交道,其实好多程序员做的最多的也就是数据库的crud,但是即使是crud,好多人也不会在意自己的sql写的好坏,如果能让我们数据库发挥出最大的性能,那么就要涉及到我们数据库的优化,其实数据库优化,并不是去优化数据库,只是优化我们的sql语句,或者建立索引等,更高级的可能就要设计到分表分库,主从同步等。而我们本篇博客主要会针对于数据库的sql的调优,这个也...

2018-06-16 22:45:28 316

原创 rabbitmq-----mq的简介以及安装

rabbitmqRabbitMQ是一个消息代理。它的核心思想非常简单:接收并转发消息。你可以把它想象成一个邮局:当你把邮件丢进邮箱时,你非常确定邮递员先生会把它送到收件人手中。在这个比喻中,RabbitMQ就是邮箱、邮局和邮递员。 RabbitMQ和邮局的主要区别是它处理的不是纸张。它接收、存储并转发二进制数据块,也就是message,消息。rabbitmq作用应用解耦流量削...

2018-06-10 15:47:44 526

原创 spring boot-----------------Spring缓存注解

Spring缓存注解  缓存大家应该不会陌生吧,像大家熟知的redis、memcached都是现在所流行的用与缓存数据的nosql,叫nosql的原因在于他们不是像我们jpa那样将数据存到磁盘中,他们主要是将数据存到内存中,然后我们访问数据的时候直接从内存加载出来,通过这样的方法来提高我们程序的运行效率。至于redis等他们具体如何运转的我就不一一介绍了.。   如果我们做web开发的话,那...

2018-06-09 23:43:45 5020

原创 spring cloud------oauth2资源中心的搭建以及几个重要的类

我们上篇博客已经说了如何搭建oauth2的认证中心,我们知道oauth2由两个部分组成,一个认证中心,另一个就是资源中心,而我们本节就是基于资源中心来搭建的。 资源大家应该都知道什么吧,在我们web中就是数据,但是我们不可能拦截数据,在我们后台中我们都是通过接口去访问数据的,所以我们这边的资源中心可以理解为针对于接口,也就是通过对接口的保护从而保护达到对资源数据的保护。直接进入主题吧。 在oa...

2018-06-09 14:19:37 3754

原创 spring cloud------oauth2认证中心搭建

oauth2: OAuth 2.0关注客户端开发者的简易性。要么通过组织在资源拥有者和HTTP服务商之间的被批准的交互动作代表用户,要么允许第三方应用代表用户获得访问的权限。 至于oauth2具体的理解可以参考阮一峰的关于oauth的博客,那篇博客将的很同事易懂,我这边就不细讲这个了, 在oauth2中有几种授权模式: 1、授权码模式 2、密码模式 3、客户端模式 4、简易模式 5、...

2018-05-27 14:14:46 3016

原创 spring cloud------spring security简单使用二

上一篇博客是基于内存存用户信息的,但是在我们实际的开发中是不可能通过这种方式的,在实际开发中对用户的账号和密码有各种各样的处理,同时还会对用户的权限也有各种各样的处理。 而本节会讲一下如何对用户密码进行加密以及如何获取权限等 在上一节中我们看到有一个这样的方法@Autowired public void configureGlobal(AuthenticationMan...

2018-05-27 13:09:07 992

原创 spring cloud------spring security简单使用一

spring security的简单原理:使用众多的拦截器对url拦截,以此来管理权限。但是这么多拦截器,笔者不可能对其一一来讲,主要讲里面核心流程的两个。首先,权限管理离不开登陆验证的,所以登陆验证拦截器AuthenticationProcessingFilter要讲;还有就是对访问的资源管理吧,所以资源管理拦截器AbstractSecurityInterceptor要讲;但拦截器里面的...

2018-05-27 12:42:33 4922

原创 spring boot系列------自定义注解

自定义注解,可能大家听起来要点陌生,但是作为一个web开发人员来说相比就不那么陌生吧。在我们java开发中我们经常能见到这些注解:常见的注解:jdk自带的注解:1、@Override注解 用于重写父类的方法 或者是写接口实现类时用到该注解。 2、@Deprecated注解 用于表示该方法是一个过期的方法。 3、 @suppressWarnings注解 表示该方法在编译...

2018-05-27 12:14:59 8463

转载 Consul使用

1 Consul简介Consul 是 HashiCorp 公司推出的开源工具,用于实现分布式系统的服务发现与配置。与其他分布式服务注册与发现的方案,Consul的方案更“一站式”,内置了服务注册与发现框 架、分布一致性协议实现、健康检查、Key/Value存储、多数据中心方案,不再需要依赖其他工具(比如ZooKeeper等)。使用起来也较 为简单。Consul...

2018-05-19 13:01:18 801

原创 spring cloud---------- gateway网关

一提网关的时候,可能大家第一个想到的就是我们网络中的网关,其实在微服务体系中网关的作用是什么的明显的,网关负责统一接收所有请求,然后根据不同的规则进行转发到不同的服务。使用网关能够统一的管理请求日志、进行权限控制、过滤等,这样就能避免在每个单体应用中做重复的工作。如果在没有网关之前的时候,可以看到架构是这样的的:虽然有点小简单(ps有些功能没有画进去)。这样的话就会发现我们去每一个服务没有...

2018-05-06 14:00:40 8749 1

原创 CAS5.2x单点登录(九)---------cas服务端的退出源码解析以及客户端保存session及销毁session源码的解析

上一节已经说了如何解决cas客户端集群的单点退出的方法,但是由于大家对源码还不够了解,所以没有写代码上去,而我们这篇博客就是基于上篇来进一步讲解。 cas服务端的退出源码: 首先我们要找到这个jar包,因为我们是基于maven来管理这些包的,所以可以找到如下的这个包cas-server-core-logout,然后打开这个目录结构是如下所示的结构 我们一看代码并不是很多,就这区区几行,那...

2018-05-06 12:36:44 4137 21

原创 CAS5.2x单点登录(八)---------客户端集群单点退出方式

上篇博客已经说了单点退出是怎么实现的,同时也留下了隐患,就是在集群下的客户端可能出现退出概率有效。而导致这个结果的就是因为我们客户端无法根据服务端传过来的st来找到相应的session,所以就无法清空。在最早之前,我们没有考虑到集群和分布式的时候,我们是这样来使用cas和客户端的交互 我们通过cas提供的客户端核心包来进行cas服务器和cas客户端的通信。而在一系列的校验通过后,cas会为客...

2018-05-06 11:45:15 3679

原创 spring cloud---------- Ribbon负载均衡

在过去的时代,互联网病不普及,那时候的应用的流量是很低的,所以普通的应用都能抗住,但是现在这个全名都普及的互联网时代就不一样了。我们就拿淘宝来举例子吧,如果他只有一个服务器的话,那么他早倒闭了,这么多流量一起访问,啥服务器都扛不住,扛不住就直接蹦了,那么他的损失将是巨大的。而负载均衡也因此而出现,他的出现就是为了解决一个服务器压力过大而导致程序崩掉。 如果我们做程序的话,如果不是新手,那么至少应...

2018-04-27 22:37:55 572

原创 CAS5.2x单点登录(七)-------------单点退出

单点登出产生的原因前几篇我们已经讲了如何搭建单点登录以及他的服务注册等,我们也清楚单点登录的目的是为了不用频繁的去登录,基本上有单点登录的地方就有单点登出,因为这两个感觉是绑定在一起的。我们知道cas单点登录成功后,cas会为我们每个客户端生成一个session,然后再次访问这个客户端的接口的时候,我们客户端引入的cas的jar包会去判断,这个接口是否有session,如果没有的话就继续判断下...

2018-04-22 12:38:07 6854 4

原创 spring cloud------ hystrix熔断机制

在spring cloud微服务架构中熔断机制是必不可少的一个重要功能点。我们先了解一下什么是熔断,熔断是怎么产生的? 一、熔断产生的原因 雪崩效应:是一种因服务提供者的不可用导致服务调用者的不可用,并将不可用逐渐放大的过程。 比如我们去访问一个服务的时候,发现这个服务崩了,然后我们一直在访问,后面的也一直排队等访问,但是我们有没有成功,导致后面所有的请求在排队,就越来越多的请求等...

2018-04-15 16:12:36 19087

原创 mongodb操作以及在spring boot中的操作

什么是mongodbmongodb:MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。他支持的数据结构非常松散,是类似json的bson格式,因此可以存储比较复杂的数据类型。Mongo最大的特点是他支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。...

2018-04-15 14:58:23 1140

原创 i++与++i区别

i++是先比在加的, ++i是先加载在比 i++ 返回原来的值,++i 返回加1后的值。

2018-04-01 16:23:27 197

原创 spring cloud-----consul服务注册中心

我们知道在spring boot中有一套服务注册中心的机制Eureka,他的作用是: Eureka是Netflix开发的服务发现框架,SpringCloud将它集成在自己的子项目spring-cloud-netflix中,实现SpringCloud的服务发现功能。 为什么要使用Eureka,因为在一个完整的系统架构中,任何单点的服务都不能保证不会中断,因此我们需要服务发现机制,在某个节点中断...

2018-04-01 15:53:06 3451 1

原创 spring cloud------搭建github配置中心

在之前我们写配置的时候,很难统一的去管理一些配置,碰到重复的就是复制,导致最后修改的时候特别麻烦,之后陆陆续续出现了好多种管理配置文件的工具,比如携程开源的阿波罗配置中心,以及最近比较火的confd配置中心还有git配置中心,使用配置中心来管理我们的配置文件的好处就是简单明了,配置好统一管理,重复的可以放在一起,增加也很方便。而spring cloud有一套非常方便的管理配置文件的地方他可以兼容这...

2018-04-01 14:07:42 1579

dom4j的jar包

解析xml文件以及生成xml文件的jar包,能够快速的解决xml文件的读取与写入,根据元素直接定位

2017-10-12

C# 用户登录界面与ACESS数据库编辑

C# 用户登录界面与ACESS数据库编辑.zip

2014-03-24

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

TA关注的人

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