自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

IT小小鸟~~

我以为我在搬砖,其实是在建造天堂...

  • 博客(174)
  • 收藏
  • 关注

原创 RabbitMQ 升级到 3.8 后,消息触发重新排队和投递?

原本我们线上用的 RabbitMQ 版本为 3.3.5,是比较老的版本了。升级到 3.8.27 后,出现了奇怪的 bug。部分消息无法消费,再不断触发重新投递。来说说我们线上的配置开启消息应答机制(Message Confirm),也就是手动确认。消费者必须回应 basic_ack,Broker 才会删除消息。这也是保证消息不丢失的基本操作。开启预取(basic_qos)由于 RabbitMQ 会将指定数量的消息(perfetch_count)预取到消费者。线上通常建议加上此配置,RabbitMQ 默认

2022-07-03 15:10:29 2434 1

原创 做对这 10 点,让你的 Redis 性能更上一层楼

Redis 作为内存数据库,虽说已经足够快了。但是,做对这 10 点,可以让你的 Redis 性能更上一层楼!

2022-03-04 23:20:16 1326 2

原创 一条 Redis 命令是如何执行的?

阅读本文大约需要 19 分钟Hello 大家好,我是虎珀!今天跟大家分享「一条 Redis 命令是如何执行的?」,想要用好 Redis,了解它的内部原理必不可少。只有熟悉 Redis 的内部执行原理,在开发时,我们就能考虑到 Redis 每一个执行步骤,做到胸有成竹。注:本文源码基于 Redis 6.201 Redis 模块与架构首先,我们来「拆解」Redis。当我们熟悉 Redis 的模块时,定位问题才能直击本质。先问大家一个问题,你对「 Redis 」的架构认识是怎样的?这里我总..

2022-02-28 01:08:29 1734

转载 四种常见的 POST 提交数据方式

原文链接https://imququ.com/post/four-ways-to-post-data-in-http.html 感谢作者分享^_^四种常见的 POST 提交数据方式HTTP/1.1 协议规定的 HTTP 请求方法有 OPTIONS、GET、HEAD、POST、PUT、DELETE、TRACE、CONNECT 这几种。其中 POST 一般用来向服务端提交数据,本文主要讨论 POST

2017-03-20 00:24:54 1268

转载 非 root 下安装 MySQL 5.6

假设你的home目录为/home/workmysql-server 安装下载mysql.tar.gz wget http://dev.mysql.com/get/Downloads/MySQL-5.6/mysql-5.6.17.tar.gz下载cmake [5.5及以上的版本需要用cmake进行安装]cmake 官网下载 http://cmake.org/cmake/resources/so

2017-02-25 12:46:49 1765

转载 Python 虚拟环境:Virtualenv

原文virtualenvvirtualenv用于创建独立的Python环境,多个Python相互独立,互不影响,它能够: 1. 在没有权限的情况下安装新套件 2. 不同应用可以使用不同的套件版本 3. 套件升级不影响其他应用安装sudo apt-get install python-virtualenv使用方法virtualenv [虚拟环境名称] 如,创建ENV的虚拟环境virtuale

2016-10-21 10:56:36 760

转载 使用 Docker 一步搞定 ZooKeeper 集群的搭建

原文链接背景原来学习 ZK 时, 我是在本地搭建的伪集群, 虽然说使用起来没有什么问题, 但是总感觉部署起来有点麻烦. 刚好我发现了 ZK 已经有了 Docker 的镜像了, 于是就尝试了一下, 发现真是爽爆了, 几个命令就可以搭建一个完整的 ZK 集群. 下面我简单记录一下使用 Docker 搭建 ZK 集群的一些步骤.镜像下载hub.docker.com 上有不少 ZK 镜像, 不过为了稳定起见

2016-09-16 08:35:01 12456 4

原创 MySQL 复杂查询

记录一些自己不常用的 SQL 查询语句。 例子:现有一张老员工表 staff,员工信息包括姓名,部门,薪水以及等级,公司将新员工放入数据库中的另一张表 newStaff。现在我需要我们查询哪一个部门的哪位员工薪水最高。join 查询简单分析一下,两张表,我们要一起查询获得结果首先会用到连接查询,其次需要知道是哪一个部分的,我们要按照部门来聚合,会用到 group by,条件是最高的一位,简单使

2016-09-02 02:01:30 2066

原创 实现一个 O(1) 查找的 LRU Cache

前几天百度面试,当时让实现一个 LRU Cache,要求 O(1) 完成查找。后来发现这个也可以用在自己简易的 key-value 数据库项目中。简单来说 LRU 是内存管理的一种算法,淘汰最近不用的页。O(1) 时间完成查找,那除了 hash 别无选择。LRU 用双向链表实现即可。数据结构选择好了,查找我们用 hash 通过 key 得到链表节点的位置,然后更新 LRU 链表即可。简单说下自己的项

2016-09-01 19:13:19 3001 1

转载 分布式锁的三种实现方式

写在前面在进行大型网站技术架构设计以及业务实现的过程中,多少都会遇到需要使用分布式锁的情况。那么问题也就接踵而至。分布式锁zk和memcached以及redis三者都能实现,同样是分布式锁,三者的区别何在?各自适用什么场景?Zookeeper1、实现原理:基于zookeeper瞬时有序节点实现的分布式锁,其主要逻辑如下(该图来自于IBM网站)。大致思想即为:每个客户端对某个功能加锁时,在zooke

2016-08-17 21:05:34 5963

转载 高并发的核心技术-幂等的实现方案

一、背景 我们实际系统中有很多操作,是不管做多少次,都应该产生一样的效果或返回一样的结果。 例如: 前端重复提交选中的数据,应该后台只产生对应这个数据的一个反应结果。 我们发起一笔付款请求,应该只扣用户账户一次钱,当遇到网络重发或系统bug重发,也应该只扣一次钱; 发送消息,也应该只发一次,同样的短信发给用户,用户会哭的; 创建业务订单,一次业务请求只能创建一个,创建多个就会出大问题

2016-08-17 20:27:41 1376

转载 如何在数据库事务提交成功后进行异步操作

问题业务场景业务需求上经常会有一些边缘操作,比如主流程操作A:用户报名课程操作入库,边缘操作B:发送邮件或短信通知。业务要求操作A操作数据库失败后,事务回滚,那么操作B不能执行。(失败后也可以重新进行自调度)操作A执行成功后,操作B也必须执行成功如何实现普通的执行A,之后执行B,是可以满足要求1,对于要求2通常需要设计补偿的操作一般边缘的操作,通常会设置成为异步的,以提升性能,比如发送MQ

2016-08-05 10:10:29 3038

原创 PHP 入门学习笔记(一)

PHP 变量变量以 $ 符号开始,后面跟着变量的名称。变量名是区分大小写的($y 和 $Y 是两个不同的变量)。PHP 和 python 一样是一门弱类型语言,不用声明类型。PHP 会根据变量的值,自动把变量转换为正确的数据类型。local:局部作用域,一般在函数内部定义。global:全局作用域,在所有函数外部定义的变量,拥有全局作用域。除了函数外,全局变量可以被脚本中的任何部分访问,要在一个

2016-07-28 11:41:27 773

原创 ibatis 使用入门

简介 iBatis 是apache 的一个开源项目,一个O/R Mapping 解决方案,iBatis 最大的特点就是小巧,上手很快。如果不需要太多复杂的功能,iBatis 是能够满足你的要求又足够灵活的最简单的解决方案,现在的 iBatis 已经改名为 Mybatis 与 Hibernate 相比 iBatis 是一个半自动化的 ORM 框架,它没有像 Hibernate 一样将对象和表映射

2016-07-27 14:56:55 3505

转载 【Java并发编程】之二十:并发新特性—Lock锁和条件变量(含代码)

原文链接简单使用Lock锁    Java 5中引入了新的锁机制——java.util.concurrent.locks中的显式的互斥锁:Lock接口,它提供了比synchronized更加广泛的锁定操作。Lock接口有3个实现它的类:ReentrantLock、ReetrantReadWriteLock.ReadLock和ReetrantReadWrite

2016-07-25 15:10:43 601

原创 Java CountDownLatch 和 CyclicBarrier 使用

CountDownLatch 和 CyclicBarrierCountDownLatch 和 CyclicBarrier 适用场景都是某一个任务想要往下执行必须依靠其他任务的执行完毕才可以。 举个例子:工人干活,工人完工之后,老板才能检查。CountDownLatchCountDownLatch 是设定一个计数器,当其它任务通过 countDown() 方法将计数器值减为 0 时触发阻塞在 a

2016-07-24 16:51:50 540

原创 Java 锁机机制——浅析 Synchronized

剖析 SynchronizedSynchronized 介绍Synchronized 方面的文章网上有很多了。它主要是用来进行同步操作。也被称为重量级的锁,它的同步包括:对于普通方法同步,锁是当前实例对象对于静态方法同步,锁是当前类的 Class 对象对于方法块同步,锁是 Synchronized 括号里的对象那么如何理解锁是“对象”。Java 编程语言中号称一切皆对象。当我们 new 一个

2016-07-23 17:54:31 9271 1

转载 MySQL 乐观锁和悲观锁

原文出处 mysql悲观锁总结和实践 mysql乐观锁总结和实践感谢作者分享悲观锁最近学习了一下数据库的悲观锁和乐观锁,根据自己的理解和网上参考资料总结如下:悲观锁介绍(百科): 悲观锁,正如其名,它指的是对数据被外界(包括本系统当前的其他事务,以及来自外部系统的事务处理)修改持保守态度,因此,在整个数据处理过程中,将数据处于锁定状态。悲观锁的实现,往往依靠数据库提供的锁机制(也只有数据库层提

2016-07-22 11:22:31 987

转载 Java开发必须掌握的线上问题排查命令

转自 Java开发必须掌握的线上问题排查命令作为一个合格的开发人员,不仅要能写得一手还代码,还有一项很重要的技能就是排查问题。这里提到的排查问题不仅仅是在coding的过程中debug等,还包括的就是线上问题的排查。由于在生产环境中,一般没办法debug(其实有些问题,debug也白扯。。。),所以我们需要借助一些常用命令来查看运行时的具体情况,这些运行时信息包括但不限于运行日志、异常堆栈、堆使用情

2016-07-19 16:51:41 1831

转载 深入浅出CGlib——打造无入侵的类代理

原文链接CGlib是什么? CGlib是一个强大的,高性能,高质量的Code生成类库。它可以在运行期扩展Java类与实现Java接口。 当然这些实际的功能是asm所提供的,asm又是什么?Java字节码操控框架,具体是什么大家可以上网查一查,毕竟我们这里所要讨论的是cglib, cglib就是封装了asm,简化了asm的操作,实现了在运行期动态生成新的class。 可能大家还感觉不到

2016-07-18 16:05:30 1416

原创 Mock 模拟测试简介及 Mockito 使用入门

Mock 是什么 mock 测试就是在测试过程中,对于某些不容易构造或者不容易获取的对象,用一个虚拟的对象来创建以便测试的测试方法。这个虚拟的对象就是mock对象。mock对象就是真实对象在调试期间的代替品。简单的看一张图我们在测试类 A 时,类 A 需要调用类 B 和类 C,而类 B 和类 C 又需要调用其他类如 D、E、F 等,假如类 D、E、F 构造很耗时又或者调用很耗时的话是非常不便于...

2016-07-18 11:19:58 76862 10

原创 JVM 常见参数设置和分析

打印 GC 日志这里以 IDEA 为例:菜单栏: Run -> Edit Configurations -> VM options 添加 -XX:+PrintGCDetail写个简单的测试程序package VM;/** * Created by andy.wwh on 2016/7/16. */public class TestPrintGcDetails { public

2016-07-16 16:20:15 4654 1

转载 Java深度历险(一)——Java字节代码的操纵

原文链接 在一般的Java应用开发过程中,开发人员使用Java的方式比较简单。打开惯用的IDE,编写Javaz代码,再利用IDE提供的功能直接运行Java 程序就可以了。这种开发模式背后的过程是:开发人员编写的是Java源代码文件(.java),IDE会负责调用Java的编译器把Java源代码编译成平台无关的字节代码(byte code),以类文件的形式保存在磁盘上(.clas

2016-06-27 16:15:13 793

转载 事务的传播行为(讲得比较好)

文章一:我们都知道事务的概念,那么事务的传播特性是什么呢?(此处着重介绍传播特性的概念,关于传播特性的相关配置就不介绍了,可以查看spring的官方文档) 在我们用SSH开发项目的时候,我们一般都是将事务设置在Service层 那么当我们调用Service层的一个方法的时候它能够保证我们的这个方法中执行的所有的对数据库的更新操作保持在一个事务中,在事务层里面调用的这些方法要么全部成功,要么

2016-06-22 20:15:06 20994 4

原创 设计模式 —— 动态代理(Dynamic Proxy)

动态代理(Dynamic Proxy)静态代理的缺点: 静态代理是有缺点的,看下图。我们为每个类实现代理,但代理的内容却可能是相同的,比如一个项目中的日志代理,对象缓存代理等等。为每个类实现代理大大提高了代码量,可能会变得难以控制。动态代理: 用一句话来简单概述:动态代理按功能固定代理类,动态的更换 代理类中的被代理对象。静态代理不固定代理类,为每个被代理对象创建代理类。例子: 给两

2016-06-21 10:30:22 968

转载 理解Java对象序列化

原文地址 理解Java对象序列化感谢作者分享:)理解Java对象序列化关于Java序列化的文章早已是汗牛充栋了,本文是对我个人过往学习,理解及应用Java序列化的一个总结。此文内容涉及Java序列化的基本原理,以及多种方法对序列化形式进行定制。在撰写本文时,既参考了Thinking in Java, Effective Java,JavaWorld,developerWorks中的相关文章和其它网络

2016-06-19 16:55:00 593 2

原创 设计模式 —— 代理模式(Proxy Pattern)

代理模式(Proxy Pattern)概念: 定义:代理模式 为另一个对象提供一个替身或占位符以控制这个对象的访问。代理模式很好理解,在生活中也很常见。举个简单的例子,我们自己能做很多事情(动作),比如写作业,出去玩等。当我们和父母在家的时候,同学叫我们出去玩,父母先收到消息,然后忽略掉出去玩的信息。如果同学叫我们去写作业,父母接收到后在传达给我们。此时父母就是我们的代理,并且对我们 资源 进

2016-06-02 10:11:26 849

原创 设计模式 —— 状态模式(State Pattern)

状态模式(State Pattern) 概念:状态模式 允许对象在内部状态改变时改变它的行为,对象看起来好像修改了它的类 在软件设计中,我们经常会遇需要编写有很多状态的程序。最简单的如乘坐电梯程序,当我们要坐电梯时需要判断电梯的状态,只有当电梯处于当前楼时我们才能乘坐,当电梯不在当前楼层时我们要按下按钮等待电梯到来。在平时一般都通过 if…else 或者 switch 判断状态后处理,这种固定

2016-06-01 01:08:42 4248

原创 设计模式 —— 组合模式(Composite Pattern)

组合模式(Composite Pattern)概念: 定义:组合模式 允许你将对象组合成树型结构来表现“整体/部分”层次结构。组合能让客户以一致的方式处理个别对象以及对象组合。在大多数情况下,我们可以忽略对象组合和个别对象之间的差别。 在日常生活中我们经常会遇到树型结构的问题,比如典型的公司管理,上司管理不同的下属,下属也可能属于某个部门的上司。组合模式可以模糊简单元素和复杂元素的概念,客户

2016-05-31 15:33:20 760

原创 设计模式 —— 迭代器模式(Iterator Pattern)

迭代器模式(Iterator Pattern)概念: 定义:迭代器模式 提供一种方法顺序访问一个聚合对象中的各个元素,而又不暴露其内部的表示。 迭代器模式是一种简单常见的设计模式,在我们使用编程语言中的集合容器都会有迭代器。组成:Aggregate(抽象聚合):共同的接口供所有的聚合使用。ConcreteAggregate(聚合):持有一个对象的集合,并实现 createIterator 方

2016-05-30 23:06:06 748

原创 设计模式 —— 模板方法模式(Template method Pattern)

模板方法模式(Template method Pattern)概念: 模板方法模式 在一个方法中定义一个算法的 骨架,而将一些步骤延迟到子类。模板方法使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤。组成:templateMethod(模板方法):定义了某个算法的模板顺序或一组步骤,其中任何步骤都可以是抽象的,由子类来实现。primitiveOperation1(抽象步骤方法):

2016-05-30 11:20:15 649

转载 设计模式(九)外观模式Facade(结构型)

原文:设计模式(九)外观模式Facade(结构型)感谢作者博文^_^设计模式--外观模式Facade(结构型):1. 概述     外观模式,我们通过外观的包装,使应用程序只能看到外观对象,而不会看到具体的细节对象,这样无疑会降低应用程序的复杂度,并且提高了程序的可维护性。例子1:一个电源总开关可以控制四盏灯、一个风扇、一台空调和

2016-05-30 01:52:44 595

原创 设计模式 —— 适配器模式(Adapter Pattern)

适配器模式(Adapter Pattern)概念: 定义:适配器模式 将一个类的接口,转换成客户期望的另一个接口。适配器让原本接口不兼容的类可以合作无间。组成:Client:客户端,直接操控适配器。 Target(目标接口):适配器实现的目标接口。 Adapter:适配器,当被调用时委托给被适配者。 Adaptee:被适配者,适配器所有的请求都委托给自己。注:上图是对象适配器模式,在支持

2016-05-30 01:13:15 630

原创 设计模式 —— 命令模式(Command Pattern)

命令模式(Command Pattern)概念: 概述:在软件设计中,我们经常会遇到某些对象发送请求,然后某些对象接受请求后执行,但发送请求的对象可能并不知道接受请求的对象是谁,执行的是什么动作。此时可通过 命令模式 来实现,让发送者和接受者完全的松耦合,这样可大大增强程序的灵活性。 定义:命令模式 将“请求”封装成对象,以便使用不同的请求,队列或者日志来参数化其他对象。命令模式也支持可撤销的

2016-05-29 18:34:53 9369 1

转载 使用 hsdis 查看 JIT 生成的汇编代码

原文:使用hsdis查看jit生成的汇编代码 感谢博主分享背景 JVM 有 HotSpot引擎可以对热代码路径进行有效的 JIT优化,大幅度提升计算密集代码的性能。默认一个方法至少被调用10k次以上才可能被JIT优化。查看JIT工作情况 Java代码public class VolatileBarrierExample { long a; volatile long v

2016-05-26 16:02:10 2399

原创 设计模式 —— 单例模式(Singleton)

单例模式(Singleton)概念: 单例模式 确保一个类只有一个实例,并提供一个全局访问点。经典单例:public class Singleton { private static Singleton uniqueInstance; //构造函数设定为 private,避免被创建 private Singleton() {} public static Sing

2016-05-24 14:18:02 588

原创 设计模式 —— 抽象工厂模式(Abstract Factory)

抽象工厂模式(Abstract Factory)上一篇文章中的工厂模式仅仅产生食物,如牛奶、糖。但如果不同城市的奶和糖加工制造和口味都是不同的。普通的工厂模式就无法满足了,此时我们来看 抽象工厂模式概念: 提供一个创建 一系列 相关或相互依赖对象的接口,而无须指定它们具体的类。组成:AbstractFactory:抽象工厂ConcreteFactory:具体工厂AbstractProdu

2016-05-24 02:30:05 651

原创 设计模式 —— 工厂模式(Factory Pattern)

工厂模式(FactoryPattern)概念: 工厂模式 定义了一个创建对象的接口,但由子类决定要实例化的类是哪一个。工厂方法让类把实例化推迟到子类。组成:工厂模式由 Product 和 Factory 组成。抽象产品(Product):所有产品实现的接口 具体产品(ConcreteProduct):被工厂创建的具体产品 抽象工厂(Creator):所有工厂的抽象类 具体工厂(Concr

2016-05-24 01:25:23 616

原创 设计模式 —— 装饰器模式(Decorator Pattern)

装饰器模式(Decorator Pattern)概念 装饰器模式 允许向一个现有的对象添加新的功能,同时又不改变其结构。装饰者可以在所委托被装饰者的行为之前或之后加上自己的行为,以达到特定的目的。组成装饰器模式由组件和装饰者组成。抽象组件(Component):需要装饰的抽象对象。 具体组件(ConcreteComponent):是我们需要装饰的对象 抽象装饰类(Decorator):内含

2016-05-23 11:46:16 8788 1

原创 设计模式 —— 观察者模式(Observer Pattern)

观察者模式(Observer Pattern)概念 观察者模式:定义了对象之间的一对多个关系,这样一来,当一个对象改变状态时,它的所有依赖者都会收到通知并自动更新。组成图片来源wiki观察者模式由 主题 和 观察者 组成。接口主题类(Subject):主题接口,对象使用该接口成为观察者,主题是有状态的对象。 具体主题类(ConcretSubjectA):该类主要实现了 notifyObser

2016-05-23 10:01:27 632

空空如也

空空如也

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

TA关注的人

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