自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(46)
  • 资源 (2)
  • 收藏
  • 关注

原创 Java

1.Java基础-源码1. 常用的设计模式Proxy代理模式Factory工厂模式Singleton单例模式Delegate委派模式Strategy策略模式Prototype原型模式Template模版模式Decorator装饰器模式Observer观察者模式2. Spring5源码和层次分析Beans1.接口实例化2.代理Bean操作Context1....

2018-12-03 18:32:26 265

原创 Synchronized与J.U.C(java.util.concurrent)下的ReetrantLock区别及使用场景

通常在面试时,面试官会问到你,Java中实现同步有哪些方式(或者可以问你Java中有哪些加锁的方式?或是Java中有哪些方式可以保证线程并发安全?)此类的问题,今天谈谈相应的实现方式和使用场景。Synchronized关键字这个JVM原生语法层面的互斥锁,核心是通过使用对象锁进行实现(对象锁,简单的说在每个Java对象的对象头中的Mark Word中都会有一个Monitor对象-由C语言的ObjectMonitor实现),在对实例方法或者类方法(static方法)添加此关键字时,是通过标志位AC.

2020-08-26 12:31:41 260 1

原创 “大话”-简单工厂、工厂方法、抽象工厂模式

最近在又细读了一遍《大话设计模式》之后,对其中提到的3种工厂模式有些概念和使用上的模糊,因此结合书中讲解和码友们的资料,自我总结一下,供以后复习时参考。1. 几种工厂模式的本质:“工厂”二字,其含义是使用工厂(一个或一系列方法)去生产产品(一个或一系列类的实例)。有时候,我们常常会将生产产品的一个或一系列方法封装到一个类中,我习惯把这个类叫做“工厂类”;而被实例化的类称作“产品类”。2...

2019-05-10 10:39:01 217

原创 数据库的锁

悲观锁和乐观锁:并发控制一般采用三种方法,分别是乐观锁和悲观锁以及时间戳:乐观锁认为一个用户读数据的时候,别人不会去写自己所读的数据;----- 乐观锁就比较简单了,就是不做控制,这只是一部分人对于并发所持有的一种态度而已。----- 乐观锁一般会使用版本号机制或CAS算法实现。悲观锁就刚好相反,觉得自己读数据库的时候,别人可能刚好在写自己刚读的数据,其实就是持一种比较保守的态度...

2019-05-08 17:30:01 185

原创 重构-要点列表

《重构-改善代码的既有设计》-阅读后,在书中的重点归纳,记录一下,随时复习。如果你发现自己需要为程序添加一个特性,而代码结构使你无法很方便的达成目的,那就先重构那个程序,使特性的添加比较容易,然后再添加特性。重构前,先检查自己是否有一套可靠的测试机制。这些测试必须有自我检验的能力。重构技术就是以微小步伐修改程序。如果你犯下错误,很容易便可发现它。任何一个傻瓜都能写出计算机可以理解的代...

2019-05-08 15:23:19 141

转载 “大话”-分布式事务

分布式事务分布式事务指事务的参与者、支持事务的服务器、资源服务器以及事务管理器分别位于不同的分布式系统的不同节点之上。简单的说,就是一次大的操作由不同的小操作组成,这些小的操作分布在不同的服务器上,且属于不同的应用,分布式事务需要保证这些小操作要么全部成功,要么全部失败。本质上来说,分布式事务就是为了保证不同数据库的数据一致性。分布式事务产生的原因Service 多个节点随着互...

2019-05-06 17:23:16 136

原创 Java内存模型中,一些“天然的”先行发生(happens-before)关系

这些先行发生关系无须任何同步协助器就已经存在,可以在编码中直接使用。如果两个操作之间的关系不在此列,并且无法从下列规则中推导出来的话,他们就没有顺序性保障,虚拟机可以任意对他们进行重排序。先行发生是指Java内存模型中定义的两项操作之间的偏序关系,如果说操作A先行发生于操作B,其实就是说在操作B发生之前,操作A产生的‘影响’就能被操作B观察到。‘影响’包括了修改了共享变量的值,发送了消息...

2019-05-05 16:02:48 165

原创 Mysql数据库的四种事务隔离级别以及Spring声明式事务,事务隔离级别和传播

MySQL数据库为我们提供的四种隔离级别:① Serializable (串行化):可避免脏读、不可重复读、幻读的发生。采用锁表方式,锁外的线程只能等候。② Repeatable read (可重复读):可避免脏读、不可重复读的发生。Mysql默认隔离级别③ Read committed (读已提交):可避免脏读的发生。④ Read uncommitted (读未提交):最低级别,任何情况...

2019-04-17 16:12:15 452

原创 JVM-GC,“大话'”垃圾收集器

基于JDK1.7 update 14之后的HotSpot虚拟机的垃圾收集器。1. Serial收集器Client模式下的默认新生代垃圾收集器。单线程、单CPUSTW简单高效2. ParNew收集器Serial收集器的多线程版本,Server模式下虚拟机新生代垃圾收集器。多线程目前为止,只有前面这两种垃圾收集器能够与CMS收集器(并发,垃圾收集线程和用户线程几乎同时进行...

2019-04-17 11:39:03 130

原创 重构-Java(代码的坏味道)

1. Duplicate Code(重复代码)同一个类的两个函数含有相同的表达式-Extract Method两个互为兄弟的子类的含有相同的表达式-Extract Method,Pull Up Method,Template Pattern两个不相关的类出现Duplicate Code,对其中一个使用Extract Class2. Long Method(过长函数)把函数变小-Ex...

2019-04-15 15:53:12 501

原创 Java语言中,哪些对象可作为GC Roots?

Java语言中,哪些对象可作为GC Roots?虚拟机栈(栈帧中的本地变量表)中引用的对象;方法区中类静态属于引用的对象;方法区中常量引用的对象;本地方法栈中JNI(即一般说的Native方法)引用的对象。...

2019-04-10 11:13:09 1036

原创 MinorGC、MajorGC、FullGC的异同-自我认知

最近看JVM书籍,在GC这一章节被几种常见的GC类型困扰,根据书籍上的描述和资料查找,大致作出以下归纳,如有不对,请各位看官在评论区指正。Minor GC:从年轻代空间(包括 Eden 和 Survivor 区域)回收内存被称为 Minor GC。每次 Minor GC 会清理年轻代的内存。指发生在新生代的垃圾收集动作,因为Java对象大多都具备朝生夕死的特性,所以MinorGC非常...

2019-04-09 15:48:29 618

转载 BIO、NIO、AIO-异同

1. 同步阻塞IO(BIO)我们熟知的Socket编程就是BIO,一个socket连接一个处理线程(这个线程负责这个Socket连接的一系列数据传输操作)。阻塞的原因在于:操作系统允许的线程数量是有限的,多个socket申请与服务端建立连接时,服务端不能提供相应数量的处理线程,没有分配到处理线程的连接就会阻塞等待或被拒绝。2. 同步非阻塞IO(NIO)New IO是对BIO的改进,基于Rea...

2019-04-09 15:02:22 85

原创 Http(Hyper Text Transfer Protocol)

1. Http协议超文本传输协议,构建与TCP/IP(Internet)协议之上,默认端口号为80,处于网络体系结构的最顶层应用层上,Http协议采用的是请求/响应的工作方式。Http是无连接无状态的。无连接是指限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。无状态是指协议对于事务处理没有记忆能力,服务器不知道客户端是什么状态...

2019-04-04 12:15:47 669

原创 初识-OSGi(入门篇)

1. 什么是OSGi?OSGi的名称来源于其开源组织的名称Open Services Gateway initiative,OSGi是一个标准,它致力于提供给Java项目一个模块化的底层环境,以及一系列通用的服务(Service)。和普通的JVM程序相比,OSGi的程序天生拥有动态模块的特点,不同的模块(OSGi里称之为Bundle)有着独立的生命周期,可以独立进行安装、启动、停止、卸载的操作,...

2019-03-29 10:03:27 592 1

原创 Java设计模式-适配器模式,装饰模式,代理模式的异同

最近在学习Java的设计模式,推荐入门级的猿们阅读下《大话设计模式》这本书,语言通俗,简洁易懂。到目前为止,遇到几种比较类似的设计模式,比如“策略模式(strategy)和状态模式”、代理(proxy)和适配器(adapter)模式等。这篇文章特别把装饰器、代理和适配器这三种模式拿到这里特别拿出来做一下比较,顺便也是对学习的一个复习和总结了,文章参考了一些网上的资料。首先肯定是基础概念必...

2019-03-27 13:43:24 497

转载 Throwable的两个子类:Error/Exception(面试中异常体系和JavaError问题)

1、error和exception有什么区别error表示系统级的错误,是java运行环境内部错误或者硬件问题,不能指望程序来处理这样的问题,除了退出运行外别无选择,它是Java虚拟机抛出的。exception 表示程序需要捕捉、需要处理的异常,是由与程序设计的不完善而出现的问题,程序必须处理的问题。2、运行时异常和一般异常有何不同Java提供了两类主要的异常:runtimeE...

2019-03-25 11:05:49 5689

原创 Java之[static]关键字的作用和用法

据现在所知,我这里总共有5种用法:static修饰类的成员变量-静态变量:在我们平时的使用当中,static最常用的功能就是修饰类的属性和方法,让他们成为类的成员属性和方法,我们通常将用static修饰的成员称为类成员或者静态成员,这句话挺起来都点奇怪,其实这是相对于对象的属性和方法来说的。static修饰的成员变量和方法,从属于类。static修饰类的成员方法-静态方法:static的另一...

2019-03-22 16:54:24 116

原创 JVM调优

对于单线程情况下,无论如何抛出的都是StackOverflowError。如果要抛出OOM异常,导致的原因是不断地在创建线程,直到将内存消耗殆尽。JVM的内存由堆内存 + 方法区内存 + 剩余内存,也就是剩余内存 = 操作系统分配给JVM的内存 - 堆内存 - 方法区内存。-Xss设置的是每个线程的栈容量,也就是说可以创建的线程数量 = 剩余内存 / 栈内存。此时如果栈内存越大,可以创建...

2019-03-21 11:59:41 83

转载 JVM的符号引用和直接引用

在读《深入理解JVM虚拟机》一书的类加载机制章节中,在类加载过程中的解析中提到“符号引用转换为直接引用”,对这块的概念不是很了解,遂记录此博客。在JVM中类加载过程中,在解析阶段,Java虚拟机会把类的二进制数据中的符号引用替换为直接引用。1.符号引用(Symbolic References):符号引用以一组符号来描述所引用的目标,符号可以是任何形式的字面量,只要使用时能够无歧义的定位到...

2019-03-07 10:33:07 295

原创 深入理解volatile关键字-(volatile有什么作用?)

volatile - 被其修饰的变量所具有的特性1、保证该变量对所有线程的可见性;2、禁止指令重排序优化。

2019-02-25 14:52:37 678

原创 反射用到了哪些接口,哪些类?反射机制中可以获取private成员的值吗?

JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。要想解剖一个类,必须先要获取到该类的字节码文件对象。而解剖使用的就是Class类中的方法.所以先要获取到每一个字节码文件对应的Class类型的对象.以上的总结就是什么是反射反射就是把...

2019-02-21 17:33:13 1349

转载 Minor GC ,Full GC 触发条件

从年轻代空间(包括 Eden 和 Survivor 区域)回收内存被称为 Minor GC;对老年代GC称为Major GC;而Full GC是对整个堆来说的;在最近几个版本的JDK里默认包括了对永生带即方法区的回收(JDK8中无永生带了),出现Full GC的时候经常伴随至少一次的Minor GC,但非绝对的。Major GC的速度一般会比Minor GC慢10倍以上。下边看看有那种情...

2019-02-21 15:59:34 247

转载 Java中wait和sleep方法的区别

这两个方法来自不同的类分别是Thread和Object最主要是sleep方法没有释放锁,而wait方法释放了锁,使得其他线程可以使用同步控制块或者方法(锁代码块和方法锁)。wait,notify和notifyAll只能在同步控制方法或者同步控制块里面使用,而sleep可以在任何地方使用(使用范围)sleep必须捕获异常,而wait,notify和notifyAll不需要捕获异...

2019-02-21 09:42:46 92

原创 Gabage Collection-垃圾回收中为什么新生代的Eden:Survivor from:Survivor to = 8:1:1

新生代垃圾较多,同时使用的垃圾回收算法也是用的(复制回收)这种算法,这种算法本就是作用于存活对象少的区域。

2019-02-20 10:05:34 2384

原创 2019-Java面试总结(基础篇)

1.什么是面向对象?把数据及对数据的操作方法放在一起,作为一个相互依存的整体——对象。对同类对象抽象出其共性,形成类。类中的大多数数据,只能用本类的方法进行处理。类通过一个简单的外部接口与外界发生关系,对象与对象之间通过消息进行通信。程序流程由用户在使用中决定。(这里简单的说下,具体太复杂)简写:面向对象是程序的一种面向方式,它的程序比较集中,它有两个成员,一个是属性,一个是方法,可以更集...

2019-02-19 11:22:45 273

转载 初始-Java运行时数据区

1.程序计数器程序计数器(Program Counter Register) 是一块较小的内存空间,它可以看作是当前线程所执行的字节码的行号指示器。在虚拟机的概念模型里,字节码解释器工作时就是通过改变这个计数器的值来选取下一条执行字节码指令。每条线程都有一个独立的程序计数器。如果执行的是java方法,这个计数器记录的是正在执行的虚拟机字节码指令地址。如果是native方法,计数器为空。此内...

2019-01-16 22:55:33 87

转载 Java-GC(Gabage Collection)

首先,引入三个问题,通过这三个问题的步步深入来解决对GC的困惑:jvm怎么确定哪些对象应该进行回收jvm会在什么时候进行垃圾回收的动作jvm到底是怎么清楚垃圾对象的这里先提到JVM运行时数据区和JVM内存结构:JVM运行时数据区由程序计数器、堆、虚拟机栈、本地方法栈、方法区部分组成,结构图如下所示。JVM内存结构由程序计数器、堆、栈、本地方法栈、方法区等部分组成,结构图如下所...

2019-01-12 12:40:40 152

转载 Zookeeper学习-总结,重点问题归纳

1. ZooKeeper是什么?ZooKeeper是一个开放源码的分布式协调服务,它是集群的管理者,监视着集群中各个节点的状态根据节点提交的反馈进行下一步合理操作。最终,将简单易用的接口和性能高效、功能稳定的系统提供给用户。分布式应用程序可以基于Zookeeper实现诸如数据发布/订阅、负载均衡、命名服务、分布式协调/通知、集群管理、Master选举、分布式锁和分布式队列等功能。Zookee...

2019-01-02 11:24:17 154

原创 MySQL进阶-MySQL的优化方案

Mysql数据库的优化技术对mysql优化时一个综合性的技术,主要包括a: 表的设计合理化(符合3NF)b: 添加适当索引(index) [四种: 普通索引、主键索引、唯一索引unique、全文索引]c: 分表技术(水平分割、垂直分割)d: 读写[写: update/delete/add]分离e: 存储过程 [模块化编程,可以提高速度]f: 对mysql配置优化 [配置最大并发数m...

2018-12-30 22:12:30 176

转载 Java内存模型

经过长时间的验证和修补,在JDK1.5发布后,Java内存模型就已经成熟和完善起来了。主内存与工作内存Java内存模型的主要目标是定义程序中各个变量的访问规则,即在虚拟机中将变量存储到内存和从内存中取出变量这样底层细节。此处的变量与Java编程时所说的变量不一样,指包括了实例字段、静态字段和构成数组对象的元素,但是不包括局部变量与方法参数,后者是线程私有的,不会被共享。Java内存模型中...

2018-12-26 20:28:46 75

原创 Java消息队列-JMS

一、什么是JMSJMS是Java中的消息服务(Java Message Service),是Java关于面向中间件MOM(Message-Oriented Middleware)编程的API。即:两个应用程序之间需要进行通信,我们使用一个JMS服务,进行中间的转发,通过JMS 的使用,我们可以解除两个程序之间的耦合。二、JMS的优势异步(Asynchronous):JMS 原本就是一个异...

2018-12-21 15:10:47 89

转载 【转】Java 8中HashMap和LinkedHashMap如何解决冲突

原文来自一个java大牛的博客原文地址http://javarevisited.blogspot.jp/2016/01/how-does-java-hashmap-or-linkedhahsmap-handles.html博客讲解了Java 8中HashMap和LinkedHashMap是如何解决冲突的。文章目录什么时候会产生冲突总结相关阅读在Java 8 之前,HashMa...

2018-12-21 11:40:14 501

原创 消息队列-M.Q.

为什么会需要消息队列(MQ)?主要原因是由于在高并发环境下,由于来不及同步处理,请求往往会发生堵塞;通过使用消息队列,我们可以异步处理请求,从而缓解系统的压力。消息通道:消息通道通常以队列的形式存在,这种先进先出的数据结构无疑最为适合这种处理消息的场景。通常情况下,发布者和订阅者都会被注册到用于传播变更的基础设施(即消息通道)上。发布者-订阅者(Publisher-Subscriber...

2018-12-20 16:46:37 235

转载 MySQL的表锁、行锁

锁是计算机协调多个进程或纯线程并发访问某一资源的机制。相对其他数据库而言,MySQL的锁机制比较简单,其最显著的特点是不同的存储引擎支持不同的锁机制。MySQL大致可归纳为以下3种锁:表级锁:开销小,加锁快;不会出现死锁;锁定粒度大,发生锁冲突的概率最高,并发度最低。行级锁:开销大,加锁慢;会出现死锁;锁定粒度最小,发生锁冲突的概率最低,并发度也最高。页面锁:开销和加锁时间界于表锁...

2018-12-20 12:31:29 103 2

转载 Java动态代理

动态代理其实就是Java.lang.reflect.Proxy类动态的根据指定的所有接口生成一个class byte,该class会继承Proxy类,并实现所有指定的接口(在参数中传入的接口数组),也就是说,返回的对象可以转换类型为接口数组中的任何一个接口类型。然后再利用第一个参数的classloader将class byte加载进系统,最后生成这样一个类的对象并初始化该对象的一些值,如invoc...

2018-12-20 10:27:48 63

原创 Netty学习-组件

在Netty的学习过程中,形如SOAP协议、WSDL语言之于WebService,Netty有几个在使用时必不可少的组件。1.BootStrap/ServerBootStrap 分别对应客户端以及服务器端,用来配置整个Netty 程序,串联各个组件,一个Netty 程序也是由这部分开启;ChannelFuture channelFuture = serverBootstrap....

2018-12-19 16:19:27 134

转载 初识Netty,Java-NIO

Netty和Tomcat有什么区别?Netty和Tomcat最大的区别就在于通信协议,Tomcat是基于Http协议的,他的实质是一个基于http协议的web容器,但是Netty不一样,他能通过编程自定义各种协议,因为netty能够通过codec自己来编码/解码字节流,完成类似redis访问的功能,这就是netty和tomcat最大的不同。特点:并发高;传输快;封装好;重要结构: s...

2018-12-17 11:37:23 131

转载 【转】如何线程安全的使用HashMap

为什么线程不安全个人觉得HashMap在并发时可能出现的问题主要是两方面,首先如果多个线程同时使用put方法添加元素,而且假设正好存在两个put的key发生了碰撞(hash值一样),那么根据HashMap的实现,这两个key会添加到数组的同一个位置,这样最终就会发生其中一个线程的put的数据被覆盖。第二就是如果多个线程同时检测到元素个数超过数组大小*loadFactor,这样就会发生多个线程同时...

2018-12-02 11:18:55 159

转载 【转】Java Collection(集合)必考面试题

Arraylist 与 LinkedList 异同1. 是否保证线程安全: ArrayList 和 LinkedList 都是不同步的,也就是不保证线程安全;2. 底层数据结构: Arraylist 底层使用的是Object数组;LinkedList 底层使用的是双向链表数据结构(JDK1.6之前为循环链表,JDK1.7取消了循环。注意双向链表和双向循环链表的区别:); 详细可阅读JDK1....

2018-11-28 10:20:32 196

RocketMQ使用指南.pdf

RocketMQ开发使用和排查指南。 消息队列 RocketMQ 版是阿里云基于 Apache RocketMQ 构建的低延迟、高 并发、高可用、高可靠的分布式消息中间件。消息队列 RocketMQ 版既可为分布式 应用系统提供异步解耦和削峰填谷的能力,同时也具备互联网应用所需的海量消息堆 积、高吞吐、可靠重试等特性。

2020-08-17

Netty实战(英文原版PDF)

- Netty之父”Trustin Lee作序推荐 - 阿里巴巴中间件高级技术专家为本书中文版作序推荐 - 系统而详细地介绍了Netty的各个方面并附带了即用型的优质示例 - 附带行业一线公司的案例研究 - 极实用的Netty技术书 无论是构建高性能的Web、游戏服务器、推送系统、RPC框架、消息中间件还是分布式大数据处理引擎,都离不开Netty,在整个行业中,Netty广泛而成功的应用,使其成为了Java高性能网络编程的卓绝框架。 Netty的现Tech Lead Norman在本书中循序渐进地讲解了Netty的各个关键部分,在看完本书后,你不但可以熟练地使用Netty来构建以上系统,并且还可以避免很多常见的陷阱。 无论是想要学习Spring 5 、Spark、Cassandra等这样的系统,还是通过学习Netty来构建自己的基于Java的高性能网络框架,或者是更加具体的高性能Web或者游戏服务器等,本书都将是你的超强拍档。 本书中文版基于Netty4.1.9做了修订,希望本书能够给你带来一个接近完美的阅读体验,并能帮到你。 内容提要 本书是为想要或者正在使用Java从事高性能网络编程的人而写的,循序渐进地介绍了Netty各个方面的内容。 本书共分为4个部分:第一部分详细地介绍Netty的相关概念以及核心组件,第二部分介绍自定义协议经常用到的编解码器,第三部分介绍Netty对于应用层高级协议的支持,会覆盖常见的协议及其在实践中的应用,第四部分是几个案例研究。此外,附录部分还会简单地介绍Maven,以及如何通过使用Maven编译和运行本书中的示例。 阅读本书不需要读者精通Java网络和并发编程。如果想要更加深入地理解本书背后的理念以及Netty源码本身,可以系统地学习一下Java网络编程、NIO、并发和异步编程以及相关的设计模式。

2019-04-09

空空如也

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

TA关注的人

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