自定义博客皮肤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并发编程】AQS(5)——ConditionObject
原力计划

这篇文章是AQS系列的最后一篇文章,也是非常重要的一篇,因为这篇文章将引入并发编程中非常重要的一个概念:条件变量。在聊条件变量之前我想先聊聊管程(monitor),下面是对管程的描述:在并发程序中,管程是一种同步结构,它不仅允许线程拥有互斥和等待条件变化的能力,其还可以告诉其他线程条件是否满足。管程是由一个互斥量和多个条件变量构成,一个条件变量实质上是一个等待条件的容器。在再次获得互斥量执行任...

2020-04-29 21:31:59 203 2

原创 【Java并发编程】AQS(4)——共享锁的获取与释放
原力计划

今天来说下共享锁的获取与释放,建议大家在看这篇文章之前,先将我写的关于独占锁的文章看一下,其中涉及了许多重复的方法,在这篇文章中就不会再次讲解了。好了,我们先来看共享锁的获取吧一. 共享锁的获取在AQS中共享锁的获取一共有三个方法,今天主要讲第一个 acquireShared:不响应中断获取锁 acquireSharedInterruptibly:响应中...

2020-04-10 01:14:57 198 7

原创 【Java并发编程】AQS(3)——独占锁的释放

今天主要讲AQS中对独占锁的释放,如果大家把昨天“独占锁的获取”看完了,今天这篇文章将会很轻松!AQS在独占模式下,对锁的释放只有release方法,而release方法其实就做了两件事:释放锁和唤醒后继Node(准确讲是Node中的线程,后面为了方便统一称为Node)。下面我们直接看源码吧

2020-04-05 17:33:46 962 5

原创 【Java并发编程】AQS(2)——独占锁的获取

今天是4月4日,清明节第一天,互联网一片灰白,大家都在缅怀逝者,致敬英烈。所以今天我也没有过多的娱乐,一天都在鼓捣这篇文章。今天这篇主要说说AQS独占锁的获取。AQS中对独占锁的获取一共有三个方法,今天主要说第一个 acquire:不响应中断获取独占锁 acquireInterruptibly:响应中断获取独占锁 tryAcquireNanos:响应中断+超时获...

2020-04-04 22:34:58 966 13

原创 【Java并发编程】AQS(1)——并发三板斧

自己定的目标不能一开始就垮了啊,明天就放假了,所以赶紧开始更新Java并发编程系列的第一篇文章(准确来说是第二篇,因为前面还写过一篇FutureTask源码解读),也是AQS系列的第一篇文章。其实关于AQS系列的早就写好了,但是一直在反复修改而没有发上来,原因是我希望自己的文章是有信息有价值的。作为一名面向搜索引擎编程的软件工程幼狮,我每天也会接触许多无用信息,所以秉着爱护网络,人人有责的理念,对...

2020-04-03 23:52:29 278 7

原创 【生活】聊聊近况

今天早上,一位大学时期的朋友发来微信告诉我他工作上的变动,于是乎电话和他聊了许久。可能是毕业时发生在他身上的某些事,导致他毕业后做了一些我不太认同的决定与事情,之前有很多次想点出来,但碍于没有合适的时机,所以也就没多说什么,当然,最主要的原因应该还是没酒,哈哈哈有点跑远了,今天主要还是想聊聊最近的近况以及后面三个月的打算,为啥是三个月呢,因为还有三个月我就进入职场一年啦,嘎嘎嘎,但是感觉...

2020-03-28 21:40:08 261 8

原创 【设计模式】动态代理

其实这篇文章已经写完很久了,但是最近沉迷于JUC源码,所以一直放在草稿箱没有发。这几天把AQS以及相关的子类撸了一遍,写了几篇JUC源码解读,准备发到公号上面来,于是乎决定把草稿箱的这篇文章先解决了我上一篇文章已经通过代购的例子讨论了静态代理模式,也知道了它不满足开闭原则,扩展性差的缺点,因此,衍生出了动态代理。动态代理分两种,一种是基于接口的,也是jdk本身支持的,还有一种是基于类的,...

2020-03-28 14:44:31 141 6

原创 【系统设计】如何设计一个牛X的系统?这三点很重要

还记得去年年初,一个不知道知网为何物的翟"博士",使得中国教育界开始决定好好的抓抓毕业生质量,本来还准备最后一个学期浪一浪的我,不得不把大部分的学习时间都花在了改论文和“吐槽”翟天临上! 修改论文的间隙,我无意间发现了极客时间这个app,里面正好有我一直想学的计算机网络课程,而且课程介绍也是说得天花乱坠,感觉学完这门课自己就可以当黑客了,于是立马下了单。学完发现,咦,...

2020-03-19 11:20:21 176 2

原创 【设计模式】 静态代理

本来是想直接写动态代理的,但是后来想想,要写就写完整吧,而且我相信很多人其实对静态代理的理解也不是很深刻,包括写这篇文章之前的我。大家一定都听过,艺术源于生活,其实,计算机中的许多思想也是通过生活而来,所以,像计算机领域中的代理模式,肯定也是能在生活中找到映射的。我想了很久,觉得生活中的代购是最能反映代理模式的,所以我决定用代购来让大家理解代理模式(或者让大家了解了解代购)一....

2020-03-10 21:35:32 117 2

原创 【Java并发编程】FutureTask源码解读

最近在学习netty,其中讲到了异步回调,而Netty中的异步回调继承并扩展了JdK中FutureTask相关的API,所以索性又把FutureTask源码看了一遍,看完就觉得两个字:????????!于是决定写篇文章梳理梳理。最近要做的东西太多了,唠嗑概念啥的不多讲了,直接开撕源码吧!​一. FutureTask简介我们都知道,Java中生成线程两种最常见的方式是继承Thread,和...

2020-03-09 17:06:47 161 2

原创 【Java基础】静态内部类与普通内部类的区别

今天接到一个需求,是将公司的一些统计数据文件内容解析出来后,通过mq发给用户运营平台,给公司的大佬看,这个还是很简单,半个小时就码完了,但自测完后突然发现怎么建了这么多DTO(data transform object)!因为统计文件有很多不同类型,我针对每个类型都建了相应的DTO,因为这个DTO在其他业务也用不上,而且以后文件类型还有增加的话,那DTO也会增加,仅仅因为这单个小功能产生这么多利用...

2020-02-25 18:51:43 118

原创 【系统设计】秒杀系统的设计思路

这篇文章是前几天写在我的公众号 "程序员进阶之路” 里面的,今天同步贴在博客里。 还记得校招刚开始的时候,作为一个非科班、无实习经验、手上只有一个后台管理项目的渣渣来说,那面试真是一个酸爽,各种猛锤吊打啊。但是最后,自己还是拿到了几个offer?是什么原因呢?是上天可怜我了吗?有可能,但其中还有一个重要原因就是我在校招后期花了一个星期,囫囵吞枣的跟着视频完成了一个秒杀项目,这...

2020-02-08 11:43:34 339

原创 理解javabean、pojo、po、bo、vo、dto等

JavaBean: JavaBean更多的是一种规范,也即包含一组set和get方法的Java对象。Pojo(plian ordinary java object)纯的传统意义的java对象,除了对于属性一般实现了JavaBean的标准(最基本的Java Bean只有属性加上属性的get和set方法),另外还可以包含一些简单的业务逻辑(方法)可以额转化为PO、DT...

2019-07-28 10:31:01 178

原创 RockletMQ高并发项目——分布式事务之消息最终一致性事务(消息支付)

一. 分布式事务概念说到分布式事务,就会谈到那个经典的”账户转账”问题:2个账户,分布处于2个不同的DB,或者说2个不同的子系统里面,A要扣钱,B要加钱,如何保证原子性?一般的思路都是通过消息中间件来实现“最终一致性”:A系统扣钱,然后发条消息给中间件,B系统接收此消息,进行加钱。但这里面有个问题:A是先update DB,后发送消息呢?还是先发送消息,后update D...

2019-05-10 15:36:48 240

原创 RockletMQ高并发项目——下订单与库存的乐观锁机制、分库分表介绍

关于乐观锁的概念介绍摘自https://www.cnblogs.com/sheseido/p/5038562.html,特此声明! 一.下订单与库存的乐观锁机制 乐观锁,大多是基于数据版本 Version 记录机制实现。何谓数据版本?即为数据增加一个版本标识,在基于数据库表的版本解决方案中,一般是通过为数据库表增加一个 “version” 字段来实现。读取...

2019-05-09 10:59:00 405

原创 RockletMQ高并发项目——Hystrix断路器之降级、限流、批量请求合并

在微服务架构中,我们将系统分成了一个一个单元,各个单元应该通过服务注册与订阅的方式进行一个相互依赖,每一个单元在不同的进程中去运行,依赖通过远程调用的方式运行,这样就会产生一些问题,比如网络延迟、自身系统故障、请求急剧增加导致任务挤压、线程资源无法释放,这些很可能会导致系统瘫痪,甚至影响到一些核心业务。一. 降级我们具体来实现下:在父工程RocketP...

2019-05-08 15:38:09 109

原创 RockletMQ高并发项目——Dubbo 整合以及接口测试

整个项目的一个流程如下图所示:首先我们需要创建一个Maven父工程RocketParent,然后再创建三个子模块order(服务调用者),store(服务提供者),storeapi(服务提供者api接口)我们来看下order的pom文件,application.properties,com.yy.orider.config.database包下的dubbo配置文件&l...

2019-05-07 21:18:10 179

原创 RockletMQ高并发项目——Zookeeper环境搭建

zookeeper是目前主流的分布式协调框架,主要用于实现集群节点间的协调工作,zookeeper在很多优秀的开源框架中广泛应用,比如hadoop/kafka等结构,一共是三个节点(zk服务器集群规模不小于3个节点,但也不要太多,因为节点之间的同步复制会影响性能,我们可以使用多个集群)首先更改主机名与IP[root@localhost /]# vim etc/hos...

2019-04-30 22:40:40 134 2

原创 RocketMQ ——踩坑

1.MQClientException: No route info of this topic, TopicTest1在客户端的 Producer 运行起来准备发送消息时抛异常如下“ No route info of this topic ” ,原因是因为Producer 没有正确连接到 Name Server自己没有在防护墙中开启此Broker 端口,所以导致客户端 Produce...

2019-04-26 21:44:16 333

原创 RocketMQ——单主部署、一主一从部署、双主双从部署

一.RocketMQ单机部署Hosts添加信息我们首先进入/etc/hosts来添加信息vim /etc/hosts添加信息如下:上传解压安装包通过XFTP工具将apache-rocketmq.tar.gz传到/usr/local/software然后添加/usr/local/apache-rocketmq目录,再将apache-rocketmq....

2019-04-24 11:12:33 1461

转载 redis——集群

本文转自https://www.jianshu.com/p/b35d778fa529和https://www.cnblogs.com/lykxqhh/p/5690923.html一. 虚拟槽哈希分布1.1 槽(slot)概念Redis Cluster中有一个16384长度的槽的概念,他们的编号为0、1、2、3……16382、16383。这个槽是一个虚拟的槽,并不是真...

2019-04-23 11:36:49 79

原创 redis ——主从复制与哨兵

一. 主从复制主从复制:主节点负责写数据,从节点负责读数据,主节点定期把数据同步到从节点保证数据的一致性1.1 主从结构一主一从:用于主节点故障转移从节点,当主节点的“写”命令并发高且需要持久化,可以只在从节点开启AOF(主节点不需要),这样即保证了数据的安全性,也避免持久化对主节点的影响 一主多从:针对“读”较多的场景,“读”由多个从节点来分担,但节点越多,主节点...

2019-04-22 15:22:40 88

转载 redis——redis.conf文件参数说明

本文转自https://blog.csdn.net/tiantiandjava/article/details/72831529 特此申明!1. 备释当配置中需要配置内存大小时,可以使用 1k, 5GB, 4M 等类似的格式,其转换方式如下(不区分大小写):1k =< 1000 bytes1kb =< 1024 bytes1m =< 1000000 bytes...

2019-04-20 14:24:47 928

原创 redis——持久化之RDB、AOF

一 概述目前持久化的方式有两种:快照;写日志快照是把数据备份;写日志则是把操作过程记录下来,当我们需要恢复数据时,我们就把当时的操作重新执行一遍AOF就是把过期的,没有用的,以及可以优化的命令进行化简,化简成一个很小的AOF文件。1、redis也提供了两种持久化的方式,分别是RDB(RedisDataBase)和AOF(AppendOnlyFile)。2、RD...

2019-04-19 18:52:28 89

原创 redis——Jedis、慢查询、发布订阅、bitmap

一 Java客户端JedisJedis是Redis官方推荐的面向Java的操作Redis的客户端,而RedisTemplate是SpringDataRedis中对JedisApi的高度封装。SpringDataRedis相对于Jedis来说可以方便地更换Redis的Java客户端,比Jedis多了自动管理连接池的特性,方便与其他Spring框架进行搭配使用如:SpringCache。...

2019-04-18 20:31:18 127

原创 redis——基本概述、数据结构

一 基本概述、(1)redis基本命令的时间复杂度如下:可以看到,keys命令是一个比较重的命令,所以在开发环境中我们一般不使用(因为redis是单线程的,如果你keys一个一百万的命令,可能就会在这个命令上耗费10秒,那后面所有的命令都会需要等10秒钟)(2)下图是redis的数据结构与内部编码数据结构是对外呈现的,而数据结构的底层就是内部编码,可以看到...

2019-04-18 16:13:26 62

原创 redis——安装、三种启动方式

一. 安装redis进入opt目录下创建一个soft文件夹,输入下面命令下载rediswget http://download.redis.io/releases/redis-3.0.7.tar.gz然后对下载来的包进行解压:tar -xvf redis-3.0.7.tar.gz为了方便我的管理和升级,我们会在当前目录下建立一个软连接redis:ln -...

2019-04-18 10:21:58 102

原创 十次方——SpringCloud之Hystrix、Zuul

一. 熔断器Hystrix1.1 为什么要使用熔断器在微服务架构中通常会有多个服务层调用,基础服务的故障可能会导致级联故障,进而造成整个系统不可用的情况,这种现象被称为服务雪崩效应。服务雪崩效应是一种因“服务提供者”的不可用导致“服务消费者”的不可用,并将不可用逐渐放大的过程。​ 如果下图所示:A作为服务提供者,B为A的服务消费者,C和D是B的服务消费者。A不可用引起了B的不可用,...

2019-04-10 21:28:01 116

原创 十次方——SpringCloud之Eureka、Feign

1 SpringCloud简介1.1 什么是SpringCloudSpring Cloud是一系列框架的有序集合。它利用Spring Boot的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册、配置中心、消息总线、负载均衡、熔断器、数据监控等,都可以用Spring Boot的开发风格做到一键启动和部署。Spring并没有重复制造轮子,它只是将目前各家公司开发的比较...

2019-04-09 21:14:41 95

原创 十次方——JWT之admin登录与删除user用户

首先在tensquare_common包中导入jwt的jar包然后再在tensquare_common的util包下写个jwt的工具类package util;import io.jsonwebtoken.Claims;import io.jsonwebtoken.JwtBuilder;import io.jsonwebtoken.Jwts;import io.jsonwebt...

2019-04-02 16:50:24 315

原创 十次方——加密与初识JWT

一. BCrypt密码加密任何应用考虑到安全,绝不能明文的方式保存密码。密码应该通过哈希算法进行加密。有很多标准的算法比如SHA或者MD5,结合salt(盐)是一个不错的选择。 Spring Security提供了BCryptPasswordEncoder类,实现Spring的PasswordEncoder接口使用BCrypt强哈希方法来加密密码。BCrypt强哈希方法 每次加密的结...

2019-03-29 20:20:42 253

原创 十次方——RabbitMQ之用户注册

一 用户注册1.1 需求分析注册账号,用手机号注册,填写后发送短信验证码,填写短信验证码正确方可注册成功。我们这里所做的实际上就是消息生产者。1.2 代码生成(1)使用代码生成器生成用户微服务代码 tensquare_user(2)拷贝到当前工程,并在父工程引入。(3)修改Application类名称为UserApplication(4)修改ap...

2019-03-26 15:18:52 792

原创 十次方——RabbitMQ之介绍

一 RabbitMQ简介1.1 消息队列中间件消息队列中间件是分布式系统中重要的组件,主要解决应用耦合,异步消息,流量削锋等问题实现高性能,高可用,可伸缩和最终一致性[架构]使用较多的消息队列有ActiveMQ,RabbitMQ,ZeroMQ,Kafka,MetaMQ,RocketMQ。其使用场景为:异步处理,应用解耦,流量削锋和消息通讯四个场景。1.2 什...

2019-03-26 10:31:44 131

原创 十次方——ElasticSearch

一 ElasticSearch简介Elasticsearch是一个实时的分布式搜索和分析引擎。它可以帮助你用前所未有的速度去处理大规模数据。ElasticSearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。Elasticsearch是用Java开发的,并作为Apache许可条款下的开放源码发布,是当前流行的企业级搜索引...

2019-03-22 15:35:03 184

原创 十次方——MongoDB

一 简介1.1 什么是MongoDBMongoDB 是一个跨平台的,面向文档的数据库,是当前 NoSQL 数据库产品中最热门的一种。它介于关系数据库和非关系数据库之间,是非关系数据库当中功能最丰富,最像关系数据库的产品。它支持的数据结构非常松散,是类似JSON的BSON格式,因此可以存储比较复杂的数据类型1.2 MongoDB的特点MongoDB 最大的特点是他支...

2019-03-22 15:30:15 132

原创 十次方——Redis、SpringCache

一. redis我们看下面这个操作每一次用户调用这个方法,都会去数据库取数据,如果短时间内很多用户多次调用这个方法,将会对数据库造成很大压力。所以,如果一段时间内,我们查询的数据在数据库中没有变化,而用户又要在这段时间内多次查询,我们就可以在用户第一次查询时将数据放入redis中,下次用户查询时就直接去redis中查,这样就可以减少数据库的压力。redis容器的建立看我...

2019-03-22 15:27:41 96

原创 十次方——父工程子模块、公共模块

一 父工程(project)首先我们先看下整个项目的一个目录我们先创建一个带有pom.xml文件的父工程tensquare_parent(即maven工程),我们可以把tensquare_parent中的src删掉,只留下pom文件,我们来看下pom文件中的parent和dependencies红色1是我们当前使用spingboot最基础的一个jar包。红色2是S...

2019-03-22 15:23:27 176

原创 十次方——Linux部分

本文主要介绍十次方项目linux部分的内容以前我们开发都是按照MVC分层开发,比如你负责service层,我负责dao层,所以当时喜欢写接口,各层通过调用接口来进行解耦。但现在微服务的兴起,我们都是按一个一个服务来开发(所以可以不写接口),如下图,mysql,mq,redis,我们写的某一功能的业务代码,都是微服务,我们需要把微服务制作成镜像,再把镜像做成容器。那么容器和微服务的关系...

2019-03-22 15:18:42 289

转载 IDEA中如何使用debug调试项目 一步一步详细教程

本文转自 https://www.cnblogs.com/chiangchou/p/idea-debug.html 特此申明!在现在的开发中,我们经常采用Debug来追踪代码的运行流程,通常在程序运行过程中出现异常,启用Debug模式可以分析定位异常发生的位置,以及在运行过程中参数的变化。通常我们也可以启用Debug模式来跟踪代码的运行流程去学习三方框架的源码。  所以学习下如何在I...

2019-03-08 13:51:27 872 1

转载 什么是环境变量?为什么java要配置环境变量?

本文是将https://blog.csdn.net/qq_37872792/article/details/80642985与https://blog.csdn.net/Pre_waist_L/article/details/79696507两篇文章总结而成,此外,大家还可以参考这篇博文https://blog.csdn.net/mylittleone/article/details/7965...

2019-03-04 16:56:09 3694 3

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