自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Owen Fang的博客

Java学习总结

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

原创 Spring Cloud技术总结

微服务架构我们为什么选择Spring Cloud?Spring Cloud是微服务化得综合性解决框架,提供服务治理Eureka,容错Hystrix,客户端负载均衡Ribbon,配置中心Config,基于Ribbon和Hystrix的声明式服务调用组件Feign,网关Zuul,消息总线Bus等。对于第一次接触微服务架构的团队或者架构人员不足的团队能够快速搭建起整个微服务架构。微服务架构的基础...

2019-06-07 23:38:22 495

原创 Redis技术总结 — 数据结构和算法篇

数据结构Redis 所有的数据结构都是以唯一的 key 字符串作为名称,然后通过这个唯一 key 值来获取相应的 value 数据。不同类型的数据结构的差异就在于 value 的结构不一样。String(字符串)Redis 的字符串是动态字符串(SDS Simple Dynamic String),是可以修改的字符串,内部结构实现上类似于 Java 的 ArrayList,采用预分配冗...

2019-05-11 21:12:18 484

原创 Redis技术总结 — 哨兵和集群篇

为什么需要哨兵和集群?前面一篇文章中介绍的单机部署架构有两个个问题如果主节点因为故障不能提供服务,需要人工将从节点晋升为主节点,同时还要通知应用方更新主节点地址 单机的内存,CPU,硬盘会限制redis使用基于哨兵的redis架构能解决第一个问题,基于集群的redis架构能解决这两个问题。Sentinel(哨兵)在主节点不可用的情况下,sentinel能自动的完成故障发现和故障...

2019-04-29 23:40:49 369

原创 Redis技术总结 — 基础篇

Redis简介Redis是一种基于键值对的NoSQL数据库,redis的值支持string,hash,list,set,zset,Bitmaps,HyperLogLog,GEO等。Redis常作为分布式系统架构中的缓存,也可做简单的消息队列服务。效率高的原因数据存放在内存中 C语言编写 单线程架构:1.基于epoll的I/O多路复用技术非阻塞I/O(类似于java NIO) 2.单...

2019-04-22 23:59:23 235

原创 java进程CPU高分析

JVM导致系统CPU高的常见场景内存不足,JVM gc频繁,一般会伴随OOM。 JVM某个线程死循环或者递归调用。定位和解决1.内存不足,gc频繁可参考我的这遍文章解决。https://blog.csdn.net/moranzi1/article/details/886702042.JVM某个线程死循环或者递归调用。这种情况关键是找到导致CPU高的线程。然后根据具体线程具体分析为什...

2019-04-16 21:50:59 936

原创 JVM内存溢出分析

我们在使用java开发程序的过程中,一定会碰到到内存溢出异常(java.lang.OutOfMemoryError)。下面我来看一下出现内存溢出的原因和解决办法。1.启动参数内存值设定的过小。调整JVM启动参数,-Xmx JVM使用的最大内存,运行过程中超过这个内存就会报内存溢出异常,-Xms JVM初始内存,启动的时候就占用的内存。如果机器内存够就加机器内存。2.代码问题我们重点...

2019-04-16 20:35:54 1241

原创 RocketMQ技术总结

RocketMQ基本概念Producer : 消息生产者,生产者的作用就是将消息发送到 MQ。Consumer : 消息消费者,消费 MQ 上的消息的应用程序Consumer Group : 消费者组,消费同一类消息的多个 consumer 实例组成一个消费者组。Topic : 消息的逻辑分类,比如说你有订单类的消息,也有库存类的消息,就用不同的Topic进行分类。Offset...

2019-04-07 23:24:57 969

原创 kafka技术总结

1.kafka基本概念topic:一个topic可以认为是一类消息。生产者发消息之前都需要设置topic。producers:将消息写入到kakfa服务端的称之为生产者。producers将消息发布到指定的Topic中,同producer也能决定将此消息归属于哪个partition。Broker:一个独立的Kafka服务器被称为broker,所有的broker组成一个kafka集群。...

2019-03-25 23:49:14 387

原创 Netty技术总结(二)

前面的一篇文章我们了解了Netty一些基础知识,这篇文章我们来讨论一下Netty的相关的一些概念。1.长连接和短连接Netty底层使用的Socket通信,Socket使用的TCP通信。Netty的长连接和短连接是基于TCP长连接和短连接实现的。长连接: 所谓长连接,指在一个TCP连接上可以连续发送多个数据包,在TCP连接保持期间,如果没有数据包发送,需要双方发检测包以维...

2019-03-10 21:04:36 1414

原创 Netty技术总结(一)

1.Netty Demo代码下面是Netty服务端代码,可以先大致阅读下代码,后面我们将对照着这个代码我们来看看Netty有哪些组件以及他们各自的作用是什么。public class ServerTest { /** * 服务端口 */ private int port=9999; /** * 开启服务的方法 */ ...

2019-03-07 23:28:17 429

原创 Storm技术总结

1.storm基本原语spout : 消息源,不停的发送消息到集群中,我们主要的代码实现。bolt : 消息处理节点,可以过滤,集合等,我们主要的代码实现。topology : 整体的分布式计算结构,由多个spout和多个bolt组成。tuple : 一次消息传递的基本单元,消息都封装为tuple,通过spout发送的集群。整体数据流向为从固定数据源读取数据(比如kafk...

2019-02-21 23:19:22 5059

原创 分布式系统常见问题总结(四)- 应用间通信

Hessian分布式系统间通信的常见方式有两种,一种是消息通信,比如JMS,RocketMQ等,一种是RPC远程调用。我们先来看一下通信的基础知识,然后主要来看一下RPC远程调用,消息通信大家可以参考我的下一篇文章——分布式常见问题总结(五)- 消息队列。

2018-01-20 23:24:35 3402

原创 分布式系统常见问题总结(五)- 消息队列

1.消息队列解决什么问题?a.异步处理,对于一些实时性要求不是很强的业务(短信,邮件)可以用消息队列来异步处理,提高系统响应效率。b.应用耦合,减少应用的耦合性,比如订单系统和库存系统之间通过消息队列分离开来,即使库存系统暂时不可用,也不影响订单系统的使用。c.流量削锋,秒杀系统等并发量比较高的情况,为了防止系统卡死,可利用消息队列来排队。如果队列过长,还可以控制不再写入队列。

2018-01-02 22:59:47 914

原创 分布式系统常见问题总结(三)- 一致性协议和算法

1.一致性协议和算法2PC协议:两阶段提交协议3PC协议:Paxos算法:ZAP协议:2.远程通信

2017-12-17 21:29:52 2370

原创 分布式系统常见问题总结(二)

1.网络IO实现方式分布式系统间的通信的基础是网络IO,不同的技术都会有自己不同的实现,但是通信原理是基于下面三种通信方式:BIO,NIO,AIO。首先BIO,NIO,AIO都是基于socket套接字来通信的,socket是传输层协议TCP/UDP的具体实现。BIO:同步阻塞IO,每一个Socket使用一个线程来通信。阻塞表现在,主线程调用write()方法后,不能做其他事情,阻塞了,

2017-12-10 00:00:08 2451

原创 分布式系统常见问题总结(一)

1.分布式扩容问题。一致性Hash2.Session问题。3.数据库读写分离,数据复制延迟的问题。4.事务的问题5.数据水平拆分后,一个表中的数据(比如用户信息等)在不同的数据库里的问题。SQL路由,自增字段,主键唯一,分页等问题。6.应用之间的通信问题。

2017-12-03 20:55:58 6219

原创 分布式基础

分布式本身内容很多,每一部分都单独可以写一本书,我们这里先从总的架构方面来学习一下分布式的知识。先看一下下面的架构图,我们来简单的解释一下每一块的作用。1.CDN服务器和反向代理CDN服务器和反向代理的基本原理都是缓存,CDN部署在网络提供商的机房,反向代理部署在网站的中心机房。首先CDN服务器和反向代理服务器缓存着用户的一些数据,当用户请求到达时首先到达CDN服务器,因为CDN部

2017-11-13 21:32:20 466

原创 垃圾收集器与内存分配策略

知识点:1.垃圾回收的主要区域是哪个区域?2.判断对象已死的算法?3.有哪些垃圾收集算法?4.有哪些垃圾收集器?5.内存分配与回收策略。1.垃圾回收的主要区域是哪个区域?垃圾回收的主要区域是Java堆和方法区,因为程序计数器,虚拟机栈,本机方法栈随线程而生随线程而灭,这几个区域的内存分配 和回收都具备确定性,方法结束或者线程结束,内存自然就跟着回收了,这几个

2017-11-05 22:26:14 216

原创 Java 内存区域与内存溢出异常

知识点:1.JVM运行时数据区域以及内存溢出异常原因。2.对象的创建过程。1.JVM运行时数据区域以及内存溢出异常原因。a.程序计数器程序计数器是线程独有的,一个线程JVM会分配一个。它的作用是记录线程执行字节码的位置,我们知道对于单内核的系统,各个线程会不停的切换的,程序计数器会记录线程的执行位置。这个区域不会出现OutOfMemoryError的异常。b

2017-10-18 22:11:46 299

原创 Java - 并发知识点提纲

并发编程需要学习的内容1.Runnable2.Thread3.Executor 控制线程4.Callable 希望线程有返回值5.sleep 希望线程+休眠6.优先级 setPriority() getPriority()7.让步 yield()8.守护线程(后台线程) setDaemon()

2017-08-19 15:03:05 321

原创 Effective Java - 方法

这一章节的内容没有很难的地方,都是一些我们在日常编码过程中需要注意的地方,可以有效的减少Bug出现的概率。我们来一起简单的看一下。1.检查参数的有效性。在编写方法和构造器的时候,我们需要考虑它的参数有哪些限制。需要把限制写在文档中,并且在这个方法体的开头处,通过显示的检查来实施这些限制。这样可以提高程序的健壮性。2.必要时进行保护性拷贝。如果你想要你的对象是不可变的

2017-08-06 20:29:33 231

原创 Effictive Java - 注解

知识点:1.注解优先于命名模式。2.坚持使用Override注解。3.用标记接口定义类型。学习这几节之前,可以先学习一下前面的注解基础。我们来简单的看一下下面几点内容。1.注解优先于命名模式。JUnit最早的版本,测试的方法需要统一用test作为开头。这就是一种典型的命名模式。测试只会执行test作为开头的方法。这种方式并不是很好,有了注解以后我们应该用

2017-08-06 20:01:09 294

原创 注解 - 注解基础

在学习Effictive Java注解几节的内容之前,我们先看一下Java注解的基础知识。1. Java的内置注解。2. 定义注解和元注解。3. 怎么使用注解。4. 自定义注解实现依赖注入。1. Java的内置注解。a.@Override这个我们非常熟悉,子类覆盖父类的方法是需要在子类方法上添加这个注解。如果你的方法拼写错误,编译器就会报错。

2017-08-03 00:01:45 456

原创 Effective Java - 枚举

1. 用enum代替int常量。2. 用实例域代替序数。3. 用EnumSet代替位域。4. 用EnumMap代替序数索引。1. 用enum代替int常量。与int常量相比,枚举简单易读,也更加的安全,功能更加强大。在我们日常的编码过程中要有用枚举来替代常量的意识。2. 用实例域代替序数。枚举是有顺序的,我们可以通过ordinal()来得到序号,

2017-07-25 22:40:35 215

原创 枚举 - 枚举基础

在学习枚举和注解章节之前,我们先来看一下枚举和注解的基础知识。1.枚举类的方法。2.枚举的简单使用。 public static > T valueOf(Class enumType, String name) { T result = enumType.enumC

2017-07-25 00:00:32 512

原创 Effictive Java - 泛型

知识点:1.请不要在新代码中使用原生态类型。2.消除非受检警告。3.列表优先于数组。4.优先考虑泛型,优先考虑泛型方法。1.请不要在新代码中使用原生态类型。Java.1.5版本以后就增加了泛型。为什么不要使用原生态类型:a.泛型提供了安全性和表述性方面的优势,看下面代码,从代码我们就可以知道这个是String的List,并且如果你向里面保存其它的类型,编译直

2017-07-23 13:51:11 338

原创 泛型 - 泛型基础

知识点:1.泛型的出现2.泛型基础(泛型方法,泛型类,泛型接口,无限制通配符类型,擦除)3.Set, Set, Set的区别在学习泛型这一章之前,我们应该先了解一下泛型基础。可以帮助大家理解这一章节的内容。1.泛型的出现泛型指的是参数化类型。什么叫参数化类型,我们来简单的看一下,看下面代码,两个方法,第一个方法只有a是形参,第二个方法类型和a都是形参。T可以

2017-07-17 22:50:37 242

原创 类和接口 - 优先考虑静态成员类

知识点:1. 四种嵌套类。2. 什么情况下该用哪种嵌套类。1. 四种嵌套类嵌套类,定义在另一个类的内部的类。四中嵌套类如下:a.静态成员类b.非静态成员类c.局部类d.匿名类a.静态成员类看下面代码,Inner就是静态成员类,定义在类内部,用static修饰,静态成员类内部可以访问外层类的静态成员。class Stat

2017-07-09 22:18:11 319

原创 类和接口 - 20,21

知识点:1.类层次优于标签类。2.函数对象表示策略。1.类层次优于标签类。这节简单的总结一下,这一节的标签类并没有很好的利用Java面向对象的理念,把过多的东西放在一个类里面。利用类层次来优化标签类,代码可读性更强。算是一种重构代码的方式,当我们看到这种标签类的时候,就应该想到类层次优化。2.函数对象表示策略。这节我简单的总结一下,看下面代码,Com

2017-07-09 22:03:20 207

原创 类和接口 - 17,18,19节

知识点:1.要么为继承而设计,并提供文档说明,要么禁止继承。2.接口优于抽象类。3.接口只用于定义类型。1.要么为继承而设计,并提供文档说明,要么禁止继承。这节内容,我们简单的说一下,在设计一个类的时候,如果你想要这个类被继承,就要提供详细的文档说明,如果不想要这个类被继承就禁止继承。禁止继承的方式:a. 把类声明为finalb. 把构造器变成私

2017-07-09 18:36:41 166

原创 类和接口 - 13,14,15,16节

知识点:1.使类和成员的可访问性最小化。2.在公有类中使用访问方法。3.使可变性最小化。4.复合优先于继承。1.使类和成员的可访问性最小化。

2017-07-09 13:43:53 207

原创 对于所有对象都通用的方法 - 考虑实现Comparable接口

知识点:1.什么情况下要实现Comparable接口。2.Java类库中实现了Comparable的类。1.什么情况下要实现Comparable接口。首先compareTo没有在Object中申明,他是Comparable接口的一个方法。如果你的类有内在的排序关系,你就可以考虑实现这个接口。好处就是,你的这个类就可以与需要依赖于这个接口的集合实现一起使用。比如Trees

2017-07-08 21:01:00 288

原创 对所用对象的通用方法 - toString(), clone()

知识点:1.建议所有子类都覆盖toString()方法。2.Object, Integer, String的toString()方法。3.怎么实现clone方法。4.深clone和浅clone。5.拷贝构造器代替clone。1.建议所有子类都覆盖toString()方法。覆盖toString()方法的好处就是,我们可以从toString()方法中很方便知道对象的

2017-07-08 18:46:16 353

原创 对于所有对象都通用的方法 - 覆盖equals时总要覆盖hashCode

知识点:1.hashCode的规范2.为什么要覆盖hashCode3.hashCode的写法4.Java类库中的hashCode方法1.hashCode的规范a.应用程序执行的时候,如果equals方法的比较操作所用到的信息没有被修改,那么对于这个对象的多次调用,hashCode的值应该是不变的。b.如果对象的equals相等,hashCode也必须相等

2017-07-06 22:36:12 465

原创 对于所有对象都通用的方法 - 覆盖equals时请遵守通用约定

知识点:1.哪些情况下不需要覆盖equals方法。2.什么情况下需要覆盖equals方法。3.覆盖equals方法需要遵守的约定。4.写equals方法的诀窍。5.写equals方法的告诫。6.Java类库中的equals方法。

2017-07-03 23:21:03 365

原创 设计模式 - 监听器模式

知识点:1.观察者模式为了解决什么问题?2.观察者模式的组成部分。3.简单的代码实现。1.观察者模式为了解决什么问题?现在这里有个实际的问题,微博用户A,B,C,D。用户B,C,D需要当用户A发了微博以后去评论。怎么用观察者模式来解决这个问题了?观察者模式能在A发布微博以后,提醒B,C,D 用户A发来一篇微博,你们可以去评论了。2.观察者模式的组成部分。

2017-07-01 23:09:47 751

原创 设计模式 - 不可变模式

不可变模式

2017-07-01 22:59:29 445

原创 创建和销毁对象 - 避免使用终结方法

这一节我简单的介绍一下,不花过多时间在上面,原因是先阶段来说,用的是在太少,碰见的概率几乎为0.除非是作为安全网,或者为了终止非关键的本地资源,否则不要使用终止方法。题外话:后面我自己觉得不重要的章节,我只做简单的总结,不会花太多时间在这些章节上面。

2017-07-01 22:50:03 280

原创 创建和销毁对象 - 消除过期的对象引用

Java是通过垃圾回收机制来销毁对象回收内存的,但并不是我我们不需要考虑内存回收问题,如果一个废弃对象的引用一直没有被销毁,垃圾回收器会忽略掉这个对象。下面几种情况在使用的时候要多多注意:1.只是类自己管理内存,我们就应该警惕内存泄露的问题。如书中栈的例子,弹出元素后,元素已经没用了,但它的引用却还是在栈里面。垃圾回收器是不会回收这个对象的。2.使用缓存的时候要注意

2017-07-01 20:31:07 288

原创 创建和销毁对象 - 避免创建不必要的对象

我们知道无用的对象只会影响程序的效率,都知道要避免创建不必要的对象,怎么避免才是关键。这节给了以下情况下我们要注意避免,当然不仅限书中提到了,我们应该在平时的编码过程中有意识的注意到这一点:1. 重用不可变对象a. 看下面代码, "stringette" 本身就是一个String对象,有重复创建了一个s 对象。(关于Java String的详细讲解,我会在后面的文章中介绍)Stri

2017-07-01 12:11:39 342

空空如也

空空如也

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

TA关注的人

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