自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

catalinaLi的博客

Whereas I was blind, now I see.

  • 博客(37)
  • 资源 (2)

原创 应对大并发

高并发是我们现在老生常谈的内容了,这里我们以秒杀为例,来聊聊怎么应对大并发。一、秒杀带来的问题在高并发秒杀的情况下,一般会有以下问题:1、高并发比较火热的秒杀在线人数都是10w起的,如此之高的在线人数对于网站架构从前到后都是一种考验。2、超卖任何商品都会有数量上限,如何避免成功下订单买到商品的人数不超过商品数量的上限,这是每个抢购活动都要面临的难题。二、解决办法每当我们提到...

2019-04-02 10:43:33 57

转载 (转载)JAVA并发编程(八):并发容器(CopyOnWriteArrayList)

Copy-On-Write简称COW,是一种用于程序设计中的优化策略。其基本思路是,从一开始大家都在共享同一个内容,当某个人想要修改这个内容的时候,才会真正把内容Copy出去形成一个新的内容然后再改,这是一种延时懒惰策略。从JDK1.5开始Java并发包里提供了两个使用CopyOnWrite机制实现的并发容器,它们是CopyOnWriteArrayList和CopyOnWriteArraySe...

2019-01-09 11:08:11 81

原创 JAVA并发编程(七):并发容器(ConcurrentHashMap)

我们上节讲了HashMap,实际上HashMap并不是线程安全的,在并发插入元素的时候有可能出现环形链表,让下一次读操作出现死循环。解决的办法就是使用线程安全的容器,除了Collections提供的synchronizedMap同步容器外,实际上我们还可以选择性能更好的juc提供的同步容器。一、分段锁Segment概述分段锁Segment是ConcurrentHashMap很重要的一个...

2018-10-23 10:33:49 101

原创 深入理解HashMap

HashMap是我们使用非常多的Collection,它是基于哈希表的 Map 接口的实现,以key-value的形式存在。今天我们来深入了解一下这个集合的底层原理。众所周知,HashMap是一个用于存储Key-Value键值对的集合,每一个键值对也叫做Entry。这些个键值对(Entry)分散存储在一个数组当中,这个数组就是HashMap的主干。这个数组在首次使用时进行初始化,每...

2018-10-19 09:52:54 135

原创 Java设计模式之单例模式的究极版写法

单例模式可能是后端学习者接触到的第一种设计模式,可是单例模式真的有那么简单吗?在并发模式下会出现什么样的问题?在学习了前面的并发知识后,我们来看看究极版的单例模式应该怎么写。一、单例模式第一版我们最初接触到的单例模式一般就是懒汉模式与饿汉模式。我们先来看看怎么写://懒汉模式public class Singleton { private Singleton() {} ...

2018-10-11 09:39:21 94

原创 解析Vue.js的MVVM模式

近年来前端一个明显的开发趋势就是架构从传统的 MVC 模式向 MVVM 模式迁移。在传统的 MVC 下,当前前端和后端发生数据交互后会刷新整个页面,从而导致比较差的用户体验。因此我们通过 Ajax 的方式和网关 REST API 作通讯,异步的刷新页面的某个区块,来优化和提升体验。一、MVP模式我们以前使用JQuery操作Dom的模式就是遵循了MVP模式,我们来看一下M...

2018-08-31 11:48:20 1102

转载 (转载)Java设计模式之代理模式

设计模式是语言的表达方式,它能让语言轻便而富有内涵、易读却功能强大。代理模式在Java中十分常见,有为扩展某些类的功能而使用静态代理,也有如Spring实现AOP而使用动态代理,更有RPC实现中使用的调用端调用的代理服务。代理模型除了是一种设计模式之外,它更是一种思维,所以探讨并深入理解这种模型是非常有必要的。 本文转载自Java的三种代理模式浅析JAVA设计模式之代理模...

2018-08-29 11:31:05 115

原创 JAVA并发编程(六):线程本地变量ThreadLocal与TransmittableThreadLocal

我们知道有时候一个对象的共享变量会被多个线程所访问,这时就会有线程安全问题。当然我们可以使用synchorinized 关键字来为此变量加锁,进行同步处理。从而限制只能有一个线程来使用此变量,但是加锁会大大影响程序执行效率,此外我们还可以使用ThreadLocal来解决对某一个变量的访问冲突问题。一、ThreadLocal 概述当使用ThreadLocal维护变量的时候 它...

2018-08-28 09:50:36 4392 2

原创 JAVA并发编程(五):创建线程的第三种方式:实现Callable接口

众所周知创建线程的方式有两种:1.继承Thread类。2.实现Runnable接口。从jdk1.5开始,提供了另一种创建线程的方式。今天我们就来看看这第三种方式:实现Callable接口一、Callable与Runnable我们直接来看一个使用Callable创建线程的例子/* * 一、创建执行线程的方式三:实现 Callable 接口。 相较于实现 Runnab...

2018-08-27 11:00:00 338

转载 (转载)JAVA并发编程(四):线程池的使用

如果并发的线程数量很多,并且每个线程都是执行一个时间很短的任务就结束了,这样频繁创建线程就会大大降低系统的效率,因为频繁创建线程和销毁线程需要时间。那么有没有一种办法使得线程可以复用,就是执行完一个任务,并不被销毁,而是可以继续执行其他的任务?在Java中可以通过线程池来达到这样的效果。今天我们就来详细讲解一下Java的线程池。本文转载自Java并发编程:线程池的使用一、J...

2018-08-27 10:59:23 88

原创 JAVA并发编程(三):同步的辅助类之闭锁(CountDownLatch)与循环屏障(CyclicBarrier)

jdk1.5的concurrent包为我们提供了很多有用的辅助类,今天我们来学习一下一、闭锁CountDownLatchCountDownLatch是一个同步工具类,用来协调多个线程之间的同步。它的作用是,在完成某些运算时,只有其他所有线程的运算全部完成,当前线程的运算才继续执行。 CountDownLatch类只提供了一个构造器:public CountDown...

2018-08-25 13:59:40 107

原创 JAVA并发编程(二):理解CAS机制

也许大家已经听说过,锁分两种,一个叫悲观锁,一种称之为乐观锁。Synchronized就是悲观锁的一种,也称之为独占锁,加了synchronized关键字的代码基本上就只能以单线程的形式去执行了,它会导致其他需要该资源的线程挂起,直到前面的线程执行完毕释放所资源。而另外一种乐观锁是一种更高效的机制,它的原理就是每次不加锁去执行某项操作,如果发生冲突则失败并重试,直到成功为止,其实本质上不...

2018-08-19 14:14:50 128

原创 JAVA并发编程(一):理解volatile关键字

Java中volatile这个热门的关键字,在面试中经常会被提及,在各种技术交流群中也经常被讨论:volatile关键字在java多线程中有着比较重要作用,volatile主要作用是可以保持变量在多线程中是实时可见的,是java中提供的最轻量的同步机制。一、JAVA内存模型概述在了解volatile关键字之前,我们先来认识一下Java的内存模型。 Java线程之间的通信由...

2018-08-15 10:16:56 108

原创 小白学SpringCloud(六):服务降级(Hystrix)

在微服务架构中,我们将系统拆分为很多个服务,各个服务之间通过注册与订阅的方式相互依赖,由于各个服务都是在各自的进程中运行,就有可能由于网络原因或者服务自身的问题导致调用故障或延迟,随着服务的积压,可能会导致服务崩溃。为了解决这一系列的问题,断路器等一系列服务保护机制出现了。 一、Hystrix简介Netflix提供了一个叫Hystrix的类库,它实现了断路器模式。在微服务...

2018-08-06 09:48:13 3020 2

原创 小白学SpringCloud(五):路由网关(Zuul)

在微服务的架构下,各个服务一般会有各自的网络地址,在这样的情况下外部客户端的调用可能会形成杂乱无章的局面。这时候我们就可以使用微服务网关Zuul这个组件,我们让所有的客户端请求全部请求Zuul,再由Zuul统一的去请求各个服务。一、Zuul简介Zuul是Netflix开源的微服务网关,他可以和Eureka,Ribbon,Hystrix等组件配合使用。Zuul组件的核心是一系...

2018-07-10 18:24:54 724

原创 小白学SpringCloud(四):消息总线(Spring Cloud Bus)

Spring Cloud Bus 将分布式的节点用轻量的消息代理连接起来。它可以用于广播配置文件的更改或者服务之间的通讯,也可以用于监控。上篇我们有说到Spring Cloud为我们提供了在不重启项目的情况下切换配置的功能,就要用到它,让我们来看看怎么实现的吧。一、安装MQSpring Cloud Bus支持常见的Rabbitmq、kafka、Activemq等。我们这...

2018-07-02 14:59:13 1720

原创 小白学SpringCloud(三):统一配置中心(config)

在分布式系统中,每一个功能模块都能拆分成一个独立的服务,一次请求的完成,可能会调用很多个服务协调来完成。如果我们每个服务都有一个独立的配置的话,这样很不方便我们维护。Spring Cloud中为我们提供了一个config组件为我们解决了这个问题,并且更改了配置并不需要我们重启。一、Config概述同Eureka一样,config也分为server端和client端,我们先来...

2018-06-15 15:51:39 452

原创 小白学SpringCloud(二):服务间的调用

SpringCloud服务间的调用有两种方式:RestTemplate和FeignClient。不管是什么方式,他都是通过REST接口调用服务的http接口,参数和结果默认都是通过jackson序列化和反序列化。一、Ribbon简介在说这两种方式之前,我们先来简单的看一下Ribbon。 Ribbon is a client side load balancer ...

2018-06-05 10:15:11 3894

原创 小白学SpringCloud(一):服务的注册与发现(Eureka)

一、引言首先我们先引用Dubbo官网的一段话单一应用架构 当网站流量很小时,只需一个应用,将所有功能都部署在一起,以减少部署节点和成本。 此时,用于简化增删改查工作量的 数据访问框架(ORM) 是关键。垂直应用架构 当访问量逐渐增大,单一应用增加机器带来的加速度越来越小,将应用拆成互不相干的几个应用,以提升效率。 此时,用于加速前端页面开发的 Web框架(MVC) ...

2018-06-01 10:28:57 753

原创 如何在同一台电脑上使用github和gitlab

换了工作后使用的是gitlab,这样对github的使用会有影响。为了解决这个问题,搜了很多资料后完美解决。现在把它记录下来。前言在同一台电脑上使用github和gitlab,主要的思想就是使用不同的仓库时,切换成不同的账号。不同账号的sshKey分别对应github和gitlab。接下来跟着我看看怎么做吧^_^一、生成ssh密钥这里我们要做的事情就是分别对...

2018-04-27 10:15:05 965

原创 笔记:使用hexo,如果换了电脑怎么更新博客

最近换了工作,忙着熟悉业务,好久没写博客了。换了新环境,好多东西都要重装。Hexo博客就是其中之一,这里我从万能的知乎上找了一个感觉很赞的方法,现在把文章搬运过来。话不多说,我们快来看看他是怎么做吧。一、引言其实,Hexo生成的文件里面是有一个.gitignore的,所以它的本意应该也是想我们把这些文件放到GitHub上存放的。但是考虑到如果每个GitHub Pag...

2018-04-26 16:31:35 1382 1

原创 微信开发之微信网页授权获取openid

不知觉间已经接触了几次微信支付开发,而要进行微信支付就需要用户的唯一标识:openid。还记得第一次获取用户openid的时候就踩了很多坑。这两天又接触了一下,想着索性就把他记录下来,也便于以后查阅一、准备工具不管开发什么,官方的文档应该是第一个想到的这里把官方文档贴出来:微信网页授权文档 除此之外,我们还需要一个内网穿透的工具在开发环境下让微信能访问到我们的域名。我使用的是...

2018-02-26 16:42:03 3226 2

原创 使用IDEA搭建第一个SpringBoot程序

近来在研究SpringBoot的使用,现在把使用IDEA搭建一个SpringBoot的HelloWorld程序记录下来新建一个SpringBoot环境打开你的IntelliJ IDEA,然后选择Create New Project。如图,我们要选择一个Spring Initializr 之后我们填入自己的Group与Artifact(项目名字)后选择Next 由于我们

2018-01-27 17:39:21 120

原创 使用JSONP解决ajax跨域

在日常开发中,不免遇到跨域的问题。在这里我们介绍使用Jsonp来解决ajax跨域的问题 什么是跨域?跨域,指的是浏览器不能执行其他网站的脚本。它是由浏览器的同源策略造成的,是浏览器施加的安全限制。简单的理解就是开发时当客户端所在的工程与服务端的ip不同或者端口不同时进行请求,就产生了跨域,进而不能请求数据。什么是JSONP?官方的说法是:JSONP(JSON wit

2018-01-08 16:48:29 154

原创 ActiveMQ从入门到实践

一、什么是ActiveMQ首先我们应该先了解J2EE中的一个重要规范:JMS(The Java Message Service)Java消息服务。而JMS的客户端之间可以通过JMS服务进行异步的消息传输。它主要有两种模型:点对点和发布订阅模型。点对点的模型特点::每个消息只有一个消费者(Consumer)(即一旦被消费,消息就不再在消息队列中)。发送者和接收者之间在时间上没有依赖性,也就是说当发

2017-12-22 15:04:43 107

原创 Java设计模式之策略模式

在开发中我们会使用很多中间件,开发过程当然是单机配置,可是上生产环境的时候如何快速切换到集群配置,总不能修改代码吧,这里我们就可以结合Spring来使用策略模式。一、什么是策略模式?在开发中常常遇到这种情况,实现某一个功能有多方式,我们可以根据不同的条件选择不同的方式来完成该功能。最常用的方法是将这些算法方式写到一个类中,在该类中提供多个方法,每一个方法对应一个具体...

2017-12-18 15:19:59 107

原创 Vue.js小白入门,搭建开发环境

最近Vue.js的热度持续上升,甚至有标题说2017再不会Vue.js就out了。而作为一个不排斥前段的后端码农来说,当然也要跟得上时代。近来准备放下手中的DOM操作,来一次Vue.js从入门到放弃。现将环境搭建过程记录下来。环境准备Node.js Javascript的运行时环境npm Node.js下的包管理工具webpack 前端资源模块化管理和打包工具vue-cli 脚手架构建工具

2017-11-27 17:01:28 2760

原创 走进Redis:Redis的安装、使用以及集群的搭建

今天学习了淘淘商城中的redis的使用,在这里把它记录下来。一、Redis的安装Redis的安装是很简单的,安装之前我们需要c语言的编译环境。如果没有gcc需要在线安装。yum install gcc-c++。安装步骤:第一步:redis的源码包上传到linux系统。 第二步:解压缩redis。tar -zxvf redis-3.0.0.tar.gz 第三步:编译。进入redis源码目录。ma

2017-11-06 17:56:59 163

原创 Nginx初探究:安装与简单使用

在学习淘淘商城的过程中接触到了nginx,今天就把使用它的过程记录下来,作为留存。一、什么是NginxNginx是一款高性能的http服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器。由俄罗斯的程序设计师Igor Sysoev所开发,官方测试nginx能够支支撑5万并发链接,并且cpu、内存等资源消耗却非常低,运行非常稳定。应用场景http服务器。Nginx是一个http服务可以

2017-10-31 17:00:58 239 1

原创 记录:mysql中的case when|on duplicate key update|重复插入返回主键的用法

在平时的开发中不免接触到数据库,这里记录一些平时开发中遇到的细节问题,与大家共勉。mysql中的条件控制:case函数在操作数据库的开发中不免遇到一些类似if else的判断,这时候就用到了Case函数,首先我们用网上用了好多次的例子来看看它的用法:case when sex = '1' then '男' when sex = '2' then '女' else '其他'

2017-09-27 16:30:53 1150

原创 Dubbo初体验:远程服务调用和管控台的搭建

Dubbo是一个阿里巴巴的分布式服务框架。虽然在很久以前阿里停止更新了,但是还是有很多公司在使用它。Dubbo致力于提供高性能和透明化的RPC远程服务调用方案以及SOA服务治理方案。通过他我们可以非常容易地通过Dubbo来构建分布式服务。哦,对了。好像最近阿里又开始更新了。Dubbo的架构 调用关系说明:服务容器负责启动,加载,运行服务提供者。服务提供者在启动时,向注册中心注册自己提供的服务

2017-09-06 15:49:21 194

原创 小白从头到脚搭建zookeeper集群的过程

zookeeper的字面意思为动物园管理员,正如他的名字,各个子系统能正常为用户提供统一的服务。并且还可以作为Dubbo的注册中心来使用。今天进行了一番centos的安装到zookeeper集群的搭建,也遇到不少坑。特此记录下来搭建过程。环境准备VMware Workstation 11 centos 6.4镜像jdk-7u67-linux-x64.tar.gzzookeeper-3.

2017-09-04 16:09:33 161

原创 详解jdbcTemplate和namedParameterJdbcTemplate

我们开发DAO层时用的最多的就是ORM框架(Mybatis,hibernate)了。在有些特殊的情况下,ORM框架的搭建略显笨重,这时最好的选择就是Spring中的jdbcTemplate了。本文对jdbcTemplate进行详解,并且会对具名参数namedParameterJdbcTemplate进行讲解。jdbcTemplate讲解jdbcTemplate提供的主要方法:execute方法:

2017-08-24 17:55:21 1103

原创 Spring中的ApplicationContextAware接口的使用

最近在看项目代码时发现一个类在项目各个地方都能进行调用,仔细研究后发现这个类实现了ApplicationContextAware这个接口,这个接口可以很方便的获取到Spring的上下文applicationContext。现在就跟我来一起看看如何使用吧。使用方法我们先新建一个测试类AppCache,在这个类中我定义了一个静态的DictService属性。而DictService类我也提前写好了,里

2017-08-23 17:52:42 1291

原创 记录:使用IDEA搭建Maven+SSM的过程

前言 IntelliJ IDEA被认为是当前 Java 开发效率最快的 IDE 工具。份额已经逐渐超越Eclipse。一直使用Eclipse的我也不禁想尝尝鲜,之前简单的使用它搭建了一下SSM环境,现在把他记录下来。新建一个Maven项目打开IDEA,选择新建一个项目 如图:首先我们选择一个maven Project,然后要创建模板勾选Create from archetype。由于我们

2017-08-15 16:11:09 341

原创 Hexo骚操作:主题配置|搜索|评论|统计|图床

前言 相信各位在看过上一篇blog手把手教你使用hexo搭建属于你的个人博客后已经初步搭建了属于自己的博客,不过细心的你可能已经发现这样的博客还是缺点什么,现在就来说说Hexo的骚操作:添加主题、统计、评论、SEO等等等等。 承接上篇最后说过的:根目录下的_config.yml叫做站点配置文件,主题下文件夹的_config.yml叫做主题配置文件。好了,现在进入正题,今天我们要对Hexo进行

2017-08-14 17:02:18 610

原创 手把手教你使用hexo搭建属于你的个人博客

前言 每当看到别人精美的个人博客时,不知你是否有一点点的羡慕。别急,现在我就来手把手教你搭建自己的个人博客。 在技术日趋成熟的今天,有着很多种快速生成博客的框架:Hexo,Jekyll,Wordpress等等。今天我们就用Hexo来带着大家完成自己的博客 什么是Hexo?Hexo官网中说是这么描述的:A fast, simple & powerful blog framework

2017-08-11 16:14:08 6784 4

redis-3.0.0.gem

淘淘商城搭建redis集群时安装ruby脚本运行所需要的一个包

2017-11-01

redis-3.0.0.gem

淘淘商城搭建redis集群时安装ruby脚本运行所需要的一个包

2017-11-01

空空如也

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