自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

西木风落

在饱经沧桑的路上,独行如我

  • 博客(214)
  • 资源 (4)
  • 收藏
  • 关注

原创 打印字符的所有排列组合

给定一个字符串,输出字符串中字符的所有排列组合 public static void permutation(char[] str, int i) { if (i >= str.length) return; if (i == str.length - 1) { System.out.println(Str...

2019-11-07 23:22:41 1018

原创 RocketMq源码解读(四)事务消息发送

上一章内容,介绍了RocketMQ的普通消息发送,本章内容主要介绍发送事务消息。一、事务消息的发送实例public class TransactionProducerTest { public static void main(String[] args) throws MQClientException, InterruptedException { //...

2019-10-31 21:05:25 380

原创 RocketMq源码解读(四)消息发送

前两章内容中,介绍了Producer的启动过程,然后是如何创建topic,本章内容将主要集中在如何发送消息到broker一、消息的投递消息的投递分为普通消息的投递和事务消息的投递public class DefaultMQProducer extends ClientConfig implements MQProducer{ // 所有的实际操作委托给这个实现 ...

2019-10-30 21:29:32 486

原创 RocketMq源码解读(四)Topic创建

上一章内容介绍了MQ Producer如何启动,并且向所有的broker注册Group的过程,本章内容主要集中在如何创建消息的topic。一、topic的创建方法public class DefaultMQProducer extends ClientConfig implements MQProducer{ // 所有的实际操作委托给这个实现 protected...

2019-10-30 20:56:58 1986

原创 背包问题——Java算法求解

背包问题描述:背包的容量为V,现在有N类物品,第i类物品的重量是weight[i],价值是value[i],那么往该背包里装东西,怎样装才能使得最终包内物品的总价值最大。这里装物品主要由三种装法:1、0-1背包:每类物品最多只能装一次2、多重背包:每类物品都有个数限制,第i类物品最多可以装num[i]次3、完全背包:每类物品可以无限次装进包内采用动态规划方法求解:用dp[N]...

2019-10-27 23:16:17 272

原创 RocketMq源码解读(三)Producer启动

本章主要介绍RocketMq的消息格式和消息的发送一、RocketMQ的消息格式在RocketMq中,每一个消息被封装为Message,有属性topic,flag,扩展字段和消息内容。public class Message implements Serializable{ private String topic; private int flag; ...

2019-10-24 21:37:09 325

原创 RocketMq源码解读(二)

本章主要介绍的内容有:消息过滤服务filterSrv一、什么是filterSrv1、filtersrvfiltersrv是RocketMQ中的消息过滤服务,是介于consumer和broker之间的代理。主要作用是在consumer端定义好filter过滤规则,动态编译成class,根据定义的规则,从broker拉取消息,然后将拉取到的满足过滤条件的消息返回给consumer。所以整体...

2019-10-24 15:41:13 238 1

原创 RocketMq源码解读(一)

nameserver作为替换早期版本zookeeper的轻量级实现,它只实现了zk的一致性+发布订阅。NameSrv的一致性是通过每个Broker、Consumer、Producer定时心跳同步的,存在短暂的弱一致性。发布订阅时,Broker会与每一个NameSrv保持TCP连接,上传topic信息,自身的健康状态,filter信息等,Consumer和Producer也会与每一台NameSrv保...

2019-10-19 17:48:45 572

原创 java中的并发阻塞队列ArrayBlockingQueue/LinkedBlockingQueue

本章主要介绍Java中ArrayBlockingQueue/LinkedBlockingQueue阻塞队列。一、阻塞队列的基本特点阻塞队列和普通队列ArrayList/LinkedList主要的不同点,在于阻塞添加:当队列元素存满时,会阻塞加入元素的线程,直到队列不满时才会重新唤醒; 阻塞删除:当队列元素为空的时候,会阻塞删除元素的线程,直到队列中有元素后才会被唤醒。Java中,A...

2019-10-07 17:47:21 274

原创 Java中的锁(七)

本章主要介绍Java中的计数器CountDownLatch。一、CountdownLatch的基本概念countdownLatch也叫闭锁,与cyclicBarrier一样,也是在jdk1.5中的并发包引入的。CountDownLatch内部会维护一个初始值为线程数量的计数器,主线程执行await方法,如果计数器大于0,则阻塞等待。当一个线程完成任务后,计数器值减1。当计数器为0时,表示所...

2019-10-06 22:39:03 210

原创 Java中的锁(六)

本章会针对同步屏障CyclicBarrier的使用和底层实现做介绍。一、CyclicBarrier基本概念CyclicBarrier,意思就是可以循环使用的屏障,在concurrent包下,该工具类可以做到让一组线程到达一个屏障点的时候被阻塞,直到最后一个线程到达才开启屏障,继续往下执行。CyclicBarrier有两个构造函数:CyclicBarrier(int partie...

2019-10-05 23:13:31 96

原创 Java中的锁(五)

本章主要介绍Java中semaphore的使用和底层实现原理。一、semaphore的基本概念semaphore又叫信号量,在Java1.5中引入,是用来控制同时访问共享资源的线程数量,通过协调各个线程,以保证合理的使用资源。semaphore底层是通过AQS实现线程管理的,提供两个构造函数,实现公平和非公平共享信号量。//非公平信号量,同时可以允许多少线程(许可)进行访问,和线程等...

2019-10-05 19:15:24 156

原创 Java中的锁(四)续

上一章中说到了AbstractQueuedSynchronizer,其内部有一个ConditionObject类,包含了Condition接口的实现。五、Condition接口condition相对于wait和notify,更加灵活,可以用多个condition实例对一个lock控制,通过condition可以更精细的控制多线程的休眠和唤醒。condition接口提供的方法:publ...

2019-10-02 21:48:07 156 1

原创 spring启动错误Singleton bean creation not allowed while the singletons of this factory are indestruction

一、问题描述最近在使用线程池做spring的任务Test时,启动服务抛出异常:Singleton bean creation not allowed while the singletons of this factory are in destruction (Do not request a bean from a BeanFactory in a destroy method imple...

2019-09-27 14:28:30 78802 6

转载 Java中的锁(三)

本章主要内容集中在CAS无锁和对应的常见CAS封装实现。一、无锁的概念无锁是一种乐观策略,对于加锁的并发编程,总认为每次访问共享资源会冲突,所以必须对每一次数据操作做加锁。而无锁认为访问共享数据时,不会有冲突,无需加锁,发现冲突后,会用CAS技术来保证线程数据的安全性,所以CAS是无锁策略的关键实现。二、什么是CASCAS全称是Compare And Swap,包含3个参数V...

2019-09-25 00:26:49 133

原创 java中的锁(二)

本章主要深入讲解synchronized关键字。一、synchronized关键字的使用synchronized关键字是JVM层面实现的锁,常见的使用方式有: 修饰实例方法,作用于当前实例加锁,进入同步代码前要获得当前实例的锁。 修饰静态方法,作用于当前类对象加锁,进入同步代码前要获得当前类对象的锁。 修饰代码块,指定加锁对象,对给定对象加锁,进入同步代码库前要获...

2019-09-22 23:54:22 421

原创 java中的锁(一)

1、锁的作用 在java中,多线程在获取资源的时候,如何保证资源获取的有序性和占用形,是通过锁来控制的。2、锁的设计思路在设计思路上,锁分为乐观锁和悲观锁。乐观锁:每次拿数据的时候都认为别人不会修改,所以不会上锁;更新数据的时候,判断一下别人有没有更新,采取在写时先读出当前版本号,然后加锁操作(比较跟上一次的版本号,如果一样则更新),如果失败则要重复读-比较-写的操作。 悲...

2019-09-21 16:36:04 1678

原创 KafKa消息中间件

什么是kafkakafka核心组成kafka leader选举kafka isr扰动kafka Rebalancekafka脑裂

2019-08-31 15:19:42 800

原创 深入理解jvm(四)

基于前面三篇关于jvm的理解,再次进一步研究jvm的其它特性:一、什么是JVMJVM(Java Virtual Machine),Java虚拟机,它是JRE的一部分,通过在实际的计算机上仿真模拟各种计算机功能来实现的。JVM的内部体系结构分为三部分:类装载器(ClassLoader)子系统,运行时数据区,和执行引擎。类加载器:每一个JVM都有一个类加载器子系统,负责将程序加载到JVM中...

2019-08-18 20:49:26 548

原创 MySQL存储引擎

mysql 存储引擎

2019-07-17 00:05:03 417

原创 fabric-java-sdk 1.4 开发区块链应用程序

一、搭建fabric测试网络搭建环境可以参考Fabric环境搭建二、利用fabric-java-sdk开发应用程序pom文件引入:<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.or...

2019-07-11 14:32:28 1952

原创 Hyperledger fabric 1.0 从零开始(二)

介绍完fabric的相关概念后,现在开始搭建一个测试网络,并且尝试自己配置一个网络。参考文献:https://www.ibm.com/developerworks/cn/cloud/library/cl-lo-hyperledger-fabric-practice-analysis/index.html...

2019-06-06 17:38:07 200

原创 Hyperledger fabric 1.0 从零开始(一)

一、fabric的主要网络结构二、fabric 1.0中的基本概念Fabric 的共识过程包括 3 个阶段:背书、排序和校验。1. 背书在背书( endorsement )阶段中,背书节点对客户端发来的交易预案进行合法性检验,然后模拟执行链码得到交易结果,最后根据设定的背书逻辑判断是否支持该交易预案。如果背书逻辑决定支持交易预案,它将把预案签名后发回给客户端。客户端通常...

2019-06-03 15:59:58 332

原创 MySQL实战——Schema与数据类型优化

1. 如何选取Schema的数据类型MySql支持的数据类型非常多,选择正确的数据类型对于获取高性能至关重要。数据类型的选取原则:1) 更小的通常更好。更小的数据类型通常更快,因为占用更小的磁盘空间、内存和CPU缓存,并且处理需要的CPU周期更少; 2)简单就好。简单的数据类型通常需要更少的CPU周期,比如,整型比字符串代价更低,内建的日期类型比字符串存储日期和时间更好; 3)尽量避免...

2019-05-26 22:09:33 326

原创 Http 长连接、短连接、长轮询、短轮询、webSocket

一、长连接、短连接在Http 1.0的时候,规定客户端与服务器只会保持短暂的连接,浏览器每次请求数据都要建立一个连接,服务器完成请求后立即断开TCP连接。在Http 1.1后,支持持续连接,在请求关闭连接前客户端与服务端都保持连接,实质是保持这个通信管道,之后便可以对其进行复用。HTTP的长连接和短连接,本质上都是说的TCP连接。TCP连接是一个双向的通道,它是可以保持一段时间不关闭的...

2019-05-07 22:15:53 733

原创 java 的SPI机制

Java--SPI机制SPI是Service Provider Interface的简写,是JDK内置的一种服务提供发现机制,主要针对厂商或者插件的。SPI的接口是Java核心库的一部分,是由引导类加载器(Bootstrap Classloader)来加载的,SPI的实现类是由系统类加载器(System ClassLoader)来加载的。引导类加载器在加载时无法找到SPI的实现类,因为双亲...

2019-03-24 22:52:34 464

原创 Java文件读取

常见的文件读取方式:public class ReadFile{ public void readFileByBytes(String fileName){ File file = new File(fileName); InputStream in = null; try{ in = new FileInputStream(file); int ...

2019-03-24 16:49:38 155

原创 java内存模型(一)

在介绍Java内存模型之前,我们回顾一下计算机的内存模型,因为Java很多的并发操作和计算机的内存模型息息相关。一、计算机硬件内存模型现代CPU的运算速度远远高于物理内存的读写速度,但处理器在运算的过程中,又避免不了与内存的读写交互,所以很多时候会出现处理器要等待内存数据读写完成后才能进行下一步运算。为了提高处理器的运算速度,现在的计算机系统为处理器添加了一层读写速度接近CPU运算速度的缓...

2019-03-24 15:44:34 137

原创 全链路压测

1、为什么要全链路压测有时候,单个系统的也测并不能准确的表达出全链路的性能,尤其是QPS 比较高的场景;如果不进行全链路压测,只要链路中一个系统挂掉,就会引起整个链路的崩溃。全链路压测,一方面能够各个服务知道自己的承压极限在哪;另一方面,让各个系统能够明确优化目标并找出性能瓶颈,同时对于一些特殊环节可以通过临时增加公有云的方式来提高整体的性能;2、全链路压测的难题1) 涉及的系统太多,...

2019-02-22 14:04:39 3275 3

原创 MySQL面试全帮手

系统总结分析了MySQL面试要求,希望对大家有用。参考信息: https://juejin.im/post/5c6b9c09f265da2d8a55a855

2019-02-19 16:55:33 346

原创 Java8 新特性指导手册

java8有很多新的特性,这些特性给coding带来了很多便利。接下来会介绍一下java8的新特性使用。// 1、lambda表达式public void test0() { List&lt;String&gt; list = Arrays.asList("a", "bg", "cc"); Collections.sort(list, new Comparator&...

2019-01-29 15:48:30 258

原创 九种跨域方式实现原理(完整版)

同源策略是一种约定,它是浏览器最核心也最基本的安全功能,如果缺少了同源策略,浏览器很容易受到XSS、CSFR等攻击。所谓同源是指"协议+域名+端口"三者相同,即便两个不同的域名指向同一个ip地址,也非同源。当协议、子域名、主域名、端口号中任意一个不相同时,都算作不同域。不同域之间相互请求资源,就算作“跨域”。

2019-01-27 21:16:15 454 1

原创 高并发下文章点击量设计

游客或者会员在点击文章的时候,需要对文章的点击量做一个计数统计。考虑到点击量计数的准确性,有以下几个需求:用户可以不需要登录 每当用户点击文章的详情页面,这个文章的点击量+1 用户能实时看到文章点击量,也就是用户点击后能及时看到+1 点击量最终保存在数据库中,最终一致性 作者在后台编辑文章然后保存时,如果这期间有点击量的增加,保存文章时不能覆盖掉这段时间的增量 需要对用户去重处理,也...

2019-01-13 19:08:39 2839

原创 CLH、MCS锁的原理及实现

一、背景1.1 SMP(Symmetric Multi-Processor)对称多处理器结构,它是相对非对称多处理技术而言的、应用十分广泛的并行技术。在这种架构中,一台计算机由多个CPU组成,并共享内存和其他资源,所有的CPU都可以平等地访问内存、I/O和外部中断。虽然同时使用多个CPU,但是从管理的角度来看,它们的表现就像一台单机一样。操作系统将任务队列对称地分布于多个CPU之上,从而极大地...

2019-01-11 19:43:45 1460

原创 springboot自定义properties配置文件

springboot虽然免除了绝大部分的配置文件设置,但是对于一些特定情况,还是有定义配置文件的需要。一、配置文件的格式SpringBoot可以识别.yml和.properties两种格式的配置文件。如果是自带classpath下的application.properties和application.yml,这两种都可以被SpringBoot自动识别并加载。

2018-12-20 15:04:01 2460 1

原创 java 逃逸分析

在编译期间,JIT 会对代码做很多优化,其中有一部分优化的目的就是减少内存堆分配的压力,其中一项重要的技术叫做逃逸分析。通过逃逸分析,HotSpot 编译器能够分析出一个新的对象的引用的使用范围,从而决定是否要将这个对象分配到堆上。 方法逃逸 逃逸分析基本行为就是分析对象动态作用域:当一个对象在方法中被定义后,它可能会被外部方法调用,例如作为调用参数传递到其他方法中,称为方法逃逸。 ...

2018-12-16 16:12:13 339 1

原创 spring boot 整合JSP后无法跳转JSP页面

最近在研究项目向spring boot迁移,但因为原来的展示页面采用比较老旧的JSP,所以页面没动。正常启动spring boot项目后,跳转jsp页面,出现了application has no explicit mapping for /error, so you are seeing this as ...错误。网上给出了三种问题可能出现的原因,并给出了解决办法:1、确定jsp页面跳...

2018-12-12 10:45:52 6042 1

原创 Java中的锁(四)

基于前面讲解的CAS内容,本章主要内容是Lock以及Lock的常见实现加锁原理和方式。一、Lock接口Java1.5以后官方在concurrent包下引入了Lock接口和其对应实现。Lock接口是显示的锁,加锁和解锁都需要手动实现,接口内容有:public interface Lock { void lock(); //可中断获取锁,在获取锁的过程中可中断,syn...

2018-12-06 20:18:46 329

原创 高并发场景设计(一)缓存设计

什么是缓存缓存的定义:用于存储数据的硬件或软件的组成部分,以使得后续更快访问相应的数据。典型的应用场景:有cpu cache, 磁盘cache等。缓存的使用随着客户端请求量的增加,以及服务对响应时间要求的提升,单纯的依赖数据库DB已不能满足需求,尤其是对于多读写少的场景,可以将一部分数据存入缓存,利用内存读写的速度远远高于磁盘或者DB的读写速度,提升系统整体的吞吐量。缓存的设计常遇...

2018-12-04 23:11:09 682

原创 高并发场景设计(三)——服务限流

为什么要服务限流对于分布式高并发场景下,通过应用缓存和服务降级,能够应对很大部分并发量突增的情景,为什么还要服务限流呢?对于一些稀缺资源(秒杀、抢购)、写服务(如评论、下单)、频繁的复杂查询(评论的最后几页)等,缓存和降级并不能完全解决,需有一种手段来限制这些场景的并发/请求量,即限流。限流的目的是通过对并发访问/请求进行限速,或者一个时间窗口内的的请求进行限速,一旦达到限制速率则可以拒绝...

2018-11-25 22:51:19 468

可直接运行的Java web jar 镜像

可以直接运行的Javaweb jar 镜像。先加载.tar压缩包为镜像,然后运行命令: docker run -d myapp:v1.0 -p 8088:8088 /bin/bash

2021-01-24

consumer.start.pdf

AA test consumer.start.pdf

2019-11-08

java -五子棋

界面人性化,五子棋算法经典,是参考很多文献后的结果

2013-09-17

Alarm.java

能获取系统当前时间,并在面板中画出了始终的动态走动图;可以实现闹钟的设置可取消任务,闹钟响后,可以选择stop功能。

2013-08-01

空空如也

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

TA关注的人

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