- 博客(34)
- 资源 (3)
- 问答 (3)
- 收藏
- 关注
原创 Maven插件的作用
plugin></plugin>作用:主要是进行代码编译的,可以指定使用具体的JDK版本进行编译JAVA代码。通常,该插件默认下 主动安装。
2023-09-08 21:27:58
1346
原创 Idea官方使用手册
对于Idea工具使用,大家可以参考官方时候手册,现在把连接地址送给大家:添加链接描述https://www.jetbrains.com/help/idea/pro-tips.html#coding-assistanceidea工具使用手册
2021-01-23 12:56:22
574
原创 idea中基本设置功能
idea中基本设置功能(properties和忽略文件)properties如何设置自动提示功能不同的idea版本properties自动提示或许不同。本人使用的2020.2版本idea。使用properties文件时,对于第三方jar的参数有的不支持自动提示功能,这样会影响开发效率。主要通过如下方式设置:file------>settings-----FileTypes,在FileNamesPatterns中添加*.properties。如下图展示:上图设置即可。设置忽略提交服务器资源文
2021-01-23 12:51:47
383
原创 Dubbo框架学习-负载均衡
负载概述dubbo中的负载均衡机制主要有4种方式,分别是随机,轮训,最少连接数,一致性hash。其中默认情况下,dubbo采用随机方式进行负载。dubbo中的负载均衡就是从多个Invoker列表中选择一个可执行的Invoker。集群中的每一个provider都是一个Invoker。consumer根据Invocation,url,List三个参数,采用不同的算法进行选择。集群类图dubbo中
2017-12-07 10:49:49
593
1
原创 Redis学习--JedisCluster源码解读
JedisClusterJedisCluster是针对RedisCluster的JAVA客户端,它封装了java访问redis集群的各种操作,包括初始化连接,请求重定向等操作。具体内部实现原理主要有如下两个方面: 1.1. JedisCluster初始化时,所有的集群连接信息都是封装在JedisClusterInfoCache这类中。 1.2. JedisClusterInfoCache类
2017-11-30 14:32:21
1136
原创 HashMap底层存储原理
HashMap在日常工作中使用场景非常多,程序员都知道是HashMap是线程非安全的,但是底层是以什么方式存储的?本人仔细研读了一下源码,也只是掌握了核心的存储功能,并没有把全部代码看明白,但是对于理解hashMap的存储结构完全够了。存储结构hashmap底层是以数组方式进行存储。将key-value对作为数组中的一个元素进行存储。key-value都是Map.Entry中的属性。其中将key
2017-11-29 15:01:26
17161
4
原创 Dubbo框架学习-重要概念理解
ProxyFactoryProxyFactory是代理工厂,在dubbo中主要有两个作用,我们可以通过源码来分析接口作用@SPI("javassist")public interface ProxyFactory { /** * create proxy. * 针对Client端,创建服务端接口的代理对象,例如DemoService的代理对象 * 一个Inv
2017-11-23 00:22:25
517
原创 Spring学习-InitializingBean,ApplicationContextWare
Spring这个框架断断续续用了几年,但是很多其中的机制并没有完全理解透彻,现在抽出时间系统整理一下相关知识点,也是为自己的技术进行总结!InitailizingBean这个接口 InitailizingBean中只有一个方法,就是afterPropertiesSet。该方法是指Spring容器在启动后主动调用该接口的方法。如果一个Bean实现了InitializingBean,则该方法会在容器
2017-11-22 17:49:15
2019
原创 Nginx学习-初步理解
请求方式Nginx是一款高性能的web服务器,能够同时处理大量的并发请求,主要是得益于Nginx的master-worker进程模式和异步机制。 master-worker模式 nignx服务器对于接收到的每一个请求,都会有主进程master生成一个工作进程(worker process)处理。工作进程读取到这个客户端请求事件后,调用后端的I/O进行处理。对于worker的进程数量,肯定不是
2017-11-21 16:40:06
615
原创 JVM原理之JVM调优
调优性能关注点* 吞吐量*:吞吐量是考察垃圾收集器重要的性能指标之一,指不考虑垃圾回收引起的停顿时间,应用程序能够支撑最大请求的指标。延迟: 缩短垃圾收集引起的应用程序停顿时间,避免应用程序发生抖动。内存占用:垃圾收集器流畅运行所需要的内存数量。这三个指标一般很难保证同等重要,任何一个性能的提升都会以其中一个或者两个为代价。基本命令行选项开启GC日志,开启GC日志对生产应用性能影响比较小
2017-11-21 14:31:40
321
原创 多线程并发-synchronized
同步方式synchronized同步方式主要有3种,简单介绍如下: 1.1. synchronized同步普通方法,锁是当前对象实例。 1.2. synchronized同步静态方法,锁是当前类的Class对象。 1.3 synchronized同步代码块,锁是代码块中的括号里的对象。同步原理synchronized在JVM中是使用Monitor对象来实现对方法和代码块的同步。只是各自实
2017-11-14 09:54:41
1743
原创 Dubbo源码分析-config
Spring的关系dubbo中扩展了spring的schema,其中dubbo的schema文件名称位dubbo.xsd,在META-INF目录下面。dubbo.xsd中定义了dubbo中配置文件各种标签。每一种标签最终都是被解析成一个对应的Bean。Spring在遇到dubbo.xsd命名空间时,回调spring.handlers文件中的DubboNamespaceHandler类。该类初始
2017-11-11 23:27:12
273
原创 Rocketmq分布式事物消息
Rocketmq源码中关于分布式事物消息的实现并没有完全开源,本人是基于3.4.6分析。其中的类是TransactionMQProducer。源码分析TransactionMQProducer是发送分布式事物消息的核心基础类,其中sendMessageInTransaction是主要发送方法。该方法的核心步骤主要有3步。 1.1. producer发送一条prepared消息至broker.
2017-11-09 19:07:56
902
原创 JVM原理之内存分配参数
调优目标应用程序的请求量很大时,容易造成频繁的full gc。full gc频繁会导致java应用出现停顿。JVM调优主要从年轻代,老年代,永久代等方面去调整参数,同时需要掌握JVM内存管理机制,设置符合自己应用的参数值。JVM参数-最大堆内存JVM最大堆内存是指年轻代与老年代的大小之和,是应用程序中堆大小的上限。在JVM中,通过-Xmx参数设置堆的最大值。在应用程序中,通过Runtim
2017-10-31 19:42:24
679
原创 JVM原理之运行时数据区
JVM虚拟机1. JVM在运行时主要包含java堆,方法区,程序计数器,JVM栈,本地方法栈。其中JAVA堆和方法区归所有线程共有,而JVM栈和程序计数器归线程私有。程序计数器程序计数器主要是执行线程中的指令,在多核环境中,线程需要进行切换。线程获得CPU的执行后要恢复到原来的执行位置,这就是需要程序计数器保存当前线程执行位置。每个线程都有自己独立的计数器。如果线程正在执行一个JAVA方法,则
2017-10-31 11:33:34
405
原创 Oracle索引原理
索引原理oracle中的索引与mysql中的索引不一样,oracle中索引是存储了索引列的值以及rowid值。而mysql索引分为聚集索引,非聚集索引。其中聚集索引只能有一个。oracle中索引的主要分为根,茎,叶子三部分。索引列值都是存放在叶子节点上,茎只是存放了叶子节点的相关信息。oracle中的索引反应的是逻辑结构,不是物理结构。索引创建的时候,是先创建叶子节点,然后再创建茎,最后创建根
2017-10-23 17:17:18
2131
2
原创 Rocketmq-push消息消费
Push方式消费消息在Rocketmq中,consumer消费方式有2种,一种是Pull方式消费,一种是push方式消费。Pull方式是consumer主动去broker方式去拉取消息;而push方式是broker主动推送消息,但是push方式的底层实质是异步去broker上拉取消息,然后主动推送给consumer。大致流程如下:后续会逐步详细分析这个过程
2017-10-22 18:41:11
1086
原创 JVM原理之垃圾收集
垃圾收集作用JVM堆中存在大量的垃圾对象,如果长时间不收集,容易造成内存溢出或者内存泄露。垃圾收集可以减少堆的可用空间。频繁的GC行为会造成应用程序的停顿,造成用户体验较差,吞吐量减少。确定回收对象引用计数器:为每个对象设置一个引用计数器,当该对象被引用时,计数器加1,没有任何引用时,计数器减1。当计数器为0时,即没有任何对象引用这个对象,即可回收。这种方式简单粗暴,不能解决两个对象互相引用
2017-10-22 17:21:23
219
原创 设计模式之观察者模式
第一次学习观察者模式已经是六七年以前,那个时候只是机械的去理解。也知道JAVA中AWT和SWING中使用了观察者模式。但是没有真正去理解透(当然,现在也可能没有真正理解透,但是比那个时候要好很多)。后面陆续也看过几次,都没有真正去思考观察模式的设计理念。现在有时间了,再重新学习了一遍,发现又领悟到不少,再此记录一下本人的学习心得。欢迎各位大拿,拍砖!!观察者模式概念顾名思义,多个观察者关注同一个被
2017-09-06 18:45:26
192
原创 Zookeeper客户端ZkClient
ZkClient简介ZkClient是github上开源的一个zookeeper客户端。它对原生的zookeeper客户端API进行了封装,内部实现了session重连,Watcher反复注册,极大降低了开发人员使用zookeeper的难度。创建会话zkClient提供了7个构造方法来创建zookeeper会话。原生的zookeeper客户端API创建会话是异步过程,而zkClient将创建会
2017-09-06 12:30:39
1523
原创 zookeeper中的ZAB协议理解
ZAB协议ZAB协议是专门为zookeeper实现分布式协调功能而设计。zookeeper主要是根据ZAB协议是实现分布式系统数据一致性。zookeeper根据ZAB协议建立了主备模型完成zookeeper集群中数据的同步。这里所说的主备系统架构模型是指,在zookeeper集群中,只有一台leader负责处理外部客户端的事物请求(或写操作),然后leader服务器将客户端的写操作数据同步到所有
2017-08-25 17:33:37
19650
11
原创 CAP和BASE理论理解
分布式系统都是基于CAP/BASE理论进行设计的。CAP/BASE在分布式系统设计过程中提供了最基本的也是最重要的原则。 正确的理解CAP/BASE能够更好的指导分布式系统的设计,当然了只有经历了大量的分布式系统实战,才能更加深刻的理解CAP/BASE理论。CAPCAP是一致性(Consistency),可用性(Availability),分区容错性(Partition tolerance)的缩
2017-08-24 16:50:43
4649
原创 LockSupport使用
LockSupport功能LockSupport在JDK中主要提供了线程的阻塞和唤醒功能。提供了更高级别的同步功能。阻塞方法主要是以park开头的各种方法,唤醒线程的方法只有unpark一个方法。LockSupport中的 park和unpark方法提供的线程阻塞和唤醒功能,避免了Object中已经废弃方法suspend和resume引起的死锁问题。阻塞方法park方法的执行与获得的执行许
2017-08-08 14:56:42
319
原创 ConcurrentLinkedQueue学习
队列的概念队列是一种先进先出的基于结点的数据结构,进入队列时间长的元素称之为队头,即head。进入队列时间最晚的元素称之为队尾,即tail。每次插入新的元素都是从队列的尾部插入。每次从队列中获取元素都是从头元素获取。在JAVA中普通的队列Queue是线程非安全的数据结构,每次只有一个线程进行操作时才是安全的。然而,ConcurrentLinkedQueue属于线程安全的队列,支持多个线程并
2017-08-07 13:54:25
261
原创 AbstractQueuedSynchronizer深度学习(独占锁)
概念AbstractQueuedSynchronizer简称AQS,即抽象队列同步器。AQS是JAVA并发编程的核心基础类。所有的并发都是基于AQS进行扩展。AQS内部采用FIFO队列进行线程并发的管理。 类AQS采用模板方法进行设计,可以让更多的子类去扩展自己需要的功能。AQS主要提供两种模式并发模型: 1. 独占模式:任何时刻只能有一个线程获得当前执行锁定 2. 共享模式:任何时刻可以有多
2017-08-02 23:00:45
297
原创 生产者消费者(singlAll和await误用)
Conidition中的SinglAll和await理解使用Condition的SinalAll和await()方法写了一个生产者和消费者程序,没想到出现的问题每次不一样,仔细分析了一下,自己没有深刻理解这两种方法原理,造成程序编写有问题 Condition主要是负责线程间通信与Object中方法类似,但是比起Object类中的方法要灵活很多,接口中定义的方法主要如下: 1. await(
2017-07-25 21:03:06
447
原创 Volatile并发理解
Volatile作用在java中主要用来修饰成员变量和类变量。其中,使用volatile修饰的变量在多线程环境中对所有多线程都是可见的。即,其中一个线程修改了volatile修饰的变量值,则其他线程能够立即得到最新修改的值。对于这个方面的理解,可以从并发编程模型(CPU,缓存,内存)和JAVA内存模型两个方面分析。并发编程模型现在的服务器都是多核的,而应用的都是发生在多线程环境中,那么在多核服务器中
2017-07-07 00:01:29
328
原创 Redis持久化学习
redis作为当今最火热的nosql数据库,无论在互联网领域还是在传统金融,电信等领域都是备受推崇!作为一名IT从业者,去理解掌握redis的背后的设计理念对于灵活使用redis还是非常有必要的。RDB与AOF可以同时运行,redis在启动时,如果发现开启aof,则会优先加载aof文件。RDB持久化原理:RDB持久化每次都是全量存储,保存某一个时刻的所有数据快照。保存RDB时,父进程fork出
2017-05-04 17:50:19
264
原创 rocketmq总体理解
rocketmq的文章在网络上有大量的文章分析,而且分析的非常不错。本人此处发表rocket文章只是学习过程中的心得体会,可能分析不是很准确,希望有缘人指出其中问题,日后改正!rocketmq总体架构从上图中可以看出,rocketmq主要分为四大部分,分别为nameserver,broker,produer,consumer。其中每一个部分都可以集群部署。nameServe
2017-04-24 11:17:46
627
原创 ThreadLocal工作原理
ThreadLocal原理1.threadLocal官方解释是线程本地变量意思。从实际应用来看,Threadlocal主要存储关键资源等(例如:Session,Connection)。ThreadLocal内部通过ThreadLocalMap进行存储,其中key是threadlocal,value是存储的资源对象。ThreadLocalMap是ThreadLocal的静态内部类,ThreadL
2016-09-06 19:25:17
310
原创 JAVA泛型详解(上)
欢迎使用Markdown编辑器写博客本Markdown编辑器使用StackEdit修改而来,用它写博客,将会带来全新的体验哦:Markdown和扩展Markdown简洁的语法代码块高亮图片链接和图片上传LaTex数学公式UML序列图和流程图离线写博客导入导出Markdown文件丰富的快捷键快捷键加粗 Ctrl + B 斜体 Ctrl + I 引用 Ctrl
2016-08-21 16:41:52
329
原创 注解Annotation学习基础篇
1.Annotation是什么? 注解是JDK5新增的,主要为程序增加元数据。Annotation是一种接 口,主要用来对JAVA应用程序元素设置元数据。需要通过JAVA反射技术获得Annotation对象,根据Annotation对象实例获取程序元素上的元数据信息即Annotation信息。 2.如何定义Annotation? 定义注解Annotation
2016-08-12 16:12:14
351
原创 RedisTemplate设计理解
Spring对于redis的集成很大程度上方便了开发人员操作redis的各种数据。屏蔽了对于底层redis连接的获取,释放。Spring-data-redis主要集成了jedis第三方客户端的操作。redis中主要有5种数据类型,分别为String,List,Set,Map,sort set.每一种数据结构在spring中都封装成一个操作接口。类图如下:上述5个接口定义了redis操作行为,主要
2016-04-09 12:11:56
1497
SqlSessionTemplate注入sqlSessionFactoryBean疑问?
2016-12-28
oracle是否必须在有图形界面下的主机才能安装?
2015-10-24
Centos6.7中安装oracle11g,遇到dispaly设置问题?
2015-10-24
TA创建的收藏夹 TA关注的收藏夹
TA关注的人