自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

z3jjlzt的博客

/** If this code is useful, it is written by z3jjlzt. If not good, I do not know who wrote. */

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

原创 Java多线程并发杂谈

0x000 多线程编程中的三个核心概念0x001 JMM内存模型0x001 什么是线程不安全0x010 Java解决多线程并发问题a. Java保证原子性1. 显式锁Lock方式2. 内置锁,同步Synchronized方式3. CAS(compare and swap)b. Java保证可见性c. Java保证顺序性0x011 AQS框架1. 概述2. 基本...

2018-05-24 15:23:24 413

原创 Java并发之AQS浅析

0x00 概述 Java并发工具包JUC提供了许多并发工具,如常见的ReentrantLock可重入锁,Semaphore信号量等,它们都有一个共同的父类AbstractQueuedSynchronizer,AQS框架用来构建锁和同步器,该框架底层使用了CAS。0x01 基本原理AQS类中持有一个volatile的变量state,用来表示同步状态。图中三个方法用来操作...

2018-05-22 09:35:55 217

原创 设计模式之策略模式(卷二十)

0x00 概述 策略模式目的是把算法的定义和使用分开。客户端根据需要动态选择所需要的算法。符合面向接口编程。0x01 组成部分Context:环境类,持有Strategy引用。Strategy:抽象策略类,定义方法接口。ConcteteStrategy:具体策略类。UML架构图如下: 0x10 示例代码package com.kkk.patter...

2018-02-28 10:19:03 184

原创 设计模式之状态模式(卷十九)

0x00 定义 一个对象的状态依赖于它的内部状态,且在不同的状态下对象有着不同的行为。0x01 组成部分Context:环境类,拥有多个状态的类,持有State的引用。State:抽象状态类,定义状态的行为接口。ConcreteState:具体状态类。UML架构图如下: 0x10 示例代码。 实现状态转化常用有两种方式,统一由环境类负责切换状态;以及...

2018-02-25 16:56:42 150

原创 TCP的三次握手与四次挥手

0x00 TCP简介 传输控制协议(Transmission Control Protocol)是一种面向连接的、可靠的、基于字节流的传输层通信协议。0x01 TCP固定头部结构 在tcp层的flags字段,有六个标识,SYN(建立连接)、ACK(表示响应)、FIN(关闭连接)、PSH(push数据传输)、RST(reset重置连接)、URG(urgent紧急);以及...

2018-02-24 15:08:13 155

原创 设计模式之观察者模式(卷十八)

0x00 概述 观察者模式定义了一种一对多的依赖关系,观察对象的状态发生改变时,每一个观察者都能够得到通知并做出相应的改变。也称为发布-订阅模式。0x01 组成结构Observable:被观察者,持有一个观察者对象的集合,同时具有添加观察者、移除观察者的方法,以及一个通知所有观察者的方法。ConcreteObservable:具体被观察者,包含易改变的状态。Observ...

2018-02-10 19:29:19 113

原创 设计模式之备忘录模式(卷十七)

0x00 概述 备忘录模式提供了一种类似于版本控制的功能,使得用户可以回退到特定的一个版本,常见的undo、redo就是典型的代表。 在不破坏封装的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,这样可以在以后将对象恢复到原先保存的状态。它是一种对象行为型模式,其别名为Token。0x01 组成部分Originator:原发器,通常将需要保存内部状态的...

2018-02-08 17:15:08 115

原创 设计模式之迭代器模式(卷十六)

0x00 概述 在使用聚合对象的过程中,经常会涉及到该对象的两种操作,存储对象以及遍历聚合对象。存储功能是聚合对象的基本功能,而遍历功能则可以分离出来加以复用。迭代器提供一种方法来访问聚合对象,而不用暴露这个对象的内部表示。0x01 组成部分Aggregate:抽象聚合类,负责存储和管理元素,同时有一个createIterator方法负责返回一个迭代器。ConcreteA

2018-01-31 11:40:24 132

原创 Synchronized的一些思考

前些天被问到Synchronized关键字的一些用法和区别,发现自己的理解比较浅,因此在这作一个总结。0x00 定义 synchronized是一种同步锁。采用synchronized修饰符实现的同步机制叫做互斥锁机制,它所获得的锁叫做互斥锁。每个对象都有一个monitor(锁标记),当线程拥有这个锁标记时才能访问这个资源,没有锁标记便进入锁池。任何一个对象系统都会为其创建一个互斥锁

2018-01-23 19:11:08 265

原创 设计模式之解释器模式(卷十五)

0x00 模式定义 解释器模式描述了为简单语言定义一个文法,以及如何在该语言中表示一个句子,以及如何解释这些句子。以下为简单的加减乘除的一种文法。expression ::= value | operationoperation ::= expression '+' expression | expression '-' expressionvalue ::= an i

2018-01-19 11:27:09 139

原创 设计模式之命令模式(卷十四)

通过引入一个命令类,减少发送者和接受者之间的耦合。0x00 组成部分Invoker:调用者,持有命令对象的引用。Receiver:接受者,命令的具体执行者。Command:抽象命令类,声明了执行请求的方法。ConcreteCommand:具体命令类,持有接受者,实现了处理请求的方法。架构UML图如下。 0x01 实例代码 以MOBA类游戏为例,其中键盘充当

2018-01-12 11:43:59 472

原创 设计模式之职责链模式(卷十三)

在一个系统中,一个请求可以被多个对象所处理,职责链通过类似链表的方式将多个处理对象连接在一起,客户端沿着自定义的顺序传递请求。职责链模式降低了请求的发送端和接收端之间的耦合,使多个对象都有机会处理这个请求。0x00 组成部分Handler:抽象处理者,声明处理请求的方法,同时持有下一个处理者的引用。ConcreteHandler:具体处理者,通常有多个,实现了处理请求的方法,也可以选

2018-01-11 18:51:06 208

原创 设计模式之代理模式(卷十二)

由于某些原因,客户端无法直接访问目标类或者直接访问存在困难时,通过引入一个代理对象来间接访问。目标类和代理对象需要实现相同的接口,以实现客户端使用的透明性。0x00 组成部分Subject:抽象主题类,客户端针对抽象主题类编程。Proxy:代理主题类,持有具体主题类引用,在此基础上额外添加其他操作。RealSubject:具体主题类,真正处理客户端发送的请求。结构UML图如下

2018-01-11 14:29:39 158

原创 设计模式之享元模式(卷十一)

通过使用池的技术,有效减少了大量细粒度的对象的重复生成。0x00 组织结构Flyweight:抽象享元类,声明了可以想外界提供内部状态的方法,同时还可以设置外部状态。ConcreteFlyweight:具体享元类,通常和单例模式组合使用。UnsharedConcreteFlyweight(非共享具体享元类):并不是所有的抽象享元类的子类都需要被共享,不能被共享的子类可设计为非共享具

2018-01-10 18:54:07 110

原创 设计模式之外观模式(卷十)

外观模式通过引入一个外观类来简化客户端和各个子系统之间的交互,为多个复杂的子系统提供一个统一的访问入口,降低客户端与子系统之间的耦合度。0x00 组织结构Facade:外观类,负责与客户端交互,将客户端委托的请求转交给对应的子系统处理。SubSystem:子系统,负责处理客户端的请求,可能存在多个子系统,通常子系统是多个类的集合。子系统可以直接和客户端交互,也可以和外观类交互,在它看

2018-01-10 15:31:33 136

原创 设计模式之装饰者模式(卷九)

0x00 装饰者模式定义 在不改变基础对象原有功能之上为其动态添加新的功能。0x01 组成部分Component:抽象构件,客户端直接面向它编程。Concretecomponent:具体构件,实现了最基础的功能。Decorator:抽象装饰者,持有一个抽象构件的引用。ConcreteDecorator;具体装饰类,为构件动态添加新功能。0x10 具体案例

2018-01-10 08:44:35 131

原创 设计模式之组合模式(卷八)

0x00 概述 将多个对象组合成一个整体,在该模式下,对简单对象(叶子节点)和复杂对象(树枝节点)具有相同的操作。它的组成部分如下。Component:在抽象构件中定义了叶子节点和树枝节点的共同方法。Leaf:叶子结点没有子节点,实现了抽象构建中的行为。Composite:树枝节点存在子节点,实现了对子节点的增加、删除、访问操作。0x01 示例 以电脑中文

2018-01-08 17:17:37 130

原创 2017存钱计划(python实现)

灵感来源于在微博看到的一条微博,365天存钱法,每天从1到365中任选一个数字存钱,每一天的数字都不能重复,这样一年下来就有66795元,6W多块钱对于我来说太多,那就从0.1-36.5,根据收入多寡,每天选择其中的一个数字来存,一年就有6679.5元,是一笔不少的数字。那就开始吧。考虑到之前租借的vps利用率不高,就打算用vps中安装的centos的定时任务crontab,配合上sendm

2018-01-07 13:20:18 2086

原创 设计模式之桥接模式(卷七)

桥接模式用于处理多维度变化的情况。用抽象关联取代了传统的多层继承,将类之间的静态继承关系转换为动态的对象组合关系,使得系统更加灵活,并易于扩展。0x00 组成元素Abstraction:抽象类用于定义一个维度的接口,同时还持有其他维度的引用。RefinedAbstraction:补充抽象类继承于抽象类,它实现了抽象类中的业务方法,在业务方法中还会调用Implementor的业务方法。

2018-01-07 13:17:01 120

原创 设计模式之适配器模式(卷六)

将一个类的接口和另一个类的接口匹配起来,而无须修改原来的适配者接口和抽象目标类接口。0x00 组成元素Target:目标抽象类,定义了客户端所需要的接口。Adaptee:适配者类,定义了一个需要被适配的接口。Adapter:适配器类,对Target和Adaptee进行适配。0x01 分类 类适配器模式和对象适配器模式最大的区别在于适配器和适配者之间的关系不

2018-01-07 13:15:32 131

原创 设计模式之生成器模式(卷五)

0x00 生成器概述 为客户端返回的不是一个简单的产品,而是一个由多个部件组成的复杂产品。0x01 组织结构图Director:负责复杂对象部件的构建次序,construct()方法中调用建造者对象的部件构造,完成复杂对象的建造。客户端一般只需要与指挥者进行交互。Builder:创建对象的抽象接口,包含两部分,一是buildXXX部分,负责创建复杂对象的部件;二是获取复杂

2018-01-07 13:14:19 161

原创 设计模式之原型模式(卷四)

0x00 原型模式概述 通过一个原型对象,创建(clone)出多个相似的其他对象。常见的有浅克隆(Cloneable)和深克隆( Serializable)。浅克隆和深克隆的主要区别在于是否支持引用类型的成员变量的复制,下面将对两者进行详细介绍。0x01 浅克隆 浅克隆示意图如下。 0x10 深克隆 在深克隆中,除了对象本身被复制外,对象所包含的所

2018-01-07 13:12:34 112

原创 设计模式之单例模式(卷三)

确保系统中只有唯一一个实例,当这个唯一实例创建成功之后,我们无法再创建一个同类型的其他对象,所有的操作都只能基于这个唯一实例。主要步骤 1. 构造器私有化。 2. 定义一个private私有的变量。 3. 提供一个public类方法让外界访问唯一的实例。0x00 饿汉式 饿汉式在类加载的时候就已经创建了实例,线程安全,增加了类加载时间。class Singleto

2018-01-07 13:11:13 93

原创 设计模式之工厂三兄弟(卷二)

0x00 为什么需要工厂模式 使用工厂模式的目的是使得对象的创建和使用分离。一个对象的职责有三种,对象本身所具有的职责,创建对象的职责,使用对象的职责。0x01 简单工厂模式 是其他两个工厂模式的基础。简单工厂定义:根据参数的不同返回不同的具体类的实例,创建的实例通常具有共同的父类。创建实例的方法是静态的,所以也叫静态工厂模式。优点:简化创建对象实例的步骤;使用

2018-01-07 13:09:04 215

原创 设计模式概述(卷一)

模式:在特定环境下的一套用来解决某一类重复出现的问题的解决方案。0x00 为什么需要设计模式 避免做一些重复的设计、编写一些重复的代码。0x01 设计模式的分类 设计模式可分为创建型(Creational)、结构型(Structural)、行为型(Behavioral)三种。设计模式一览表 模式类型 模式名称 使用频率 创建型

2018-01-07 13:06:36 137

原创 Hive针对distinct的优化(二)

之前一篇针对单个count(distinct xxx)的优化,本文来讲讲对多个count(distinct xxx)的优化。0x00 解决思路 优化是在之前单个count的基础上,通过使用union all以及窗口分析函数lag的结合来进行的。具体思路如下。0x01 分治法SELECT pid, c1, c2 FROM (select

2018-01-05 15:29:44 526

原创 Hive针对distinct的优化(一)

hive针对count(distinct xxx)只产生一个reduce的优化。0x00 造成的原因 由于使用了distinct,导致在map端的combine无法合并重复数据;对于这种count()全聚合操作时,即使设定了reduce task个数,set mapred.reduce.tasks=100;hive也只会启动一个reducer。这就造成了所有map端传来的数据都在一个

2018-01-05 15:27:39 4350

原创 记一次hive中遇到的坑

0x01 今天,由于公司要进行新老数据仓库的迁移,于是顺便接手了其中一部分的工作,其实大部分迁移工作都比较简单,就是把从ods层-dw层-dm层-sh展示层中涉及到旧仓库的表替换成新仓库的表,并且检查其中字段的差异性,并进行相应的操作。于是撸起袖子开工。0x02前期的进展很顺利,很快就完成了几张表的迁移,心想着按这个进度,不到一个小时就能完成了。Orz在进行到第五张表的迁

2018-01-05 15:25:56 1102

原创 虚拟机字节码执行引擎

运行时栈帧结构 每个方法从调用开始至结束,都对应一个站帧在虚拟机入栈出栈的过程。局部变量表操作数栈动态链接返回地址附加信息0x00 局部变量表 局部变量表是一组变量存储空间,存储方法参数和局部变量。Code属性中的max_locals确定了它的最大容量。局部变量表容量以变量槽(Slot)为基本单位。Slot可以复用。除了long和double使用...

2018-01-05 15:17:42 115

原创 Java内存模型与线程

计算机的运算速度与它的存储和通信子系统速度差距过大,为了压榨计算机性能,多任务处理才诞生。 内存模型是一种缓存一致性协议。Java内存模型JMM JMM屏蔽各种硬件和操作系统的内存访问差异,目的是定义各个变量(实例变量、类变量、数组对象元素,不含有局部变量,因为线程私有)的访问规则。0x00 主内存和工作内存 一些规则。所有的变量(实例变量、类变量

2018-01-05 15:13:52 103

原创 Class类文件数据结构

一次编写,到处运行。Write Once,Run Anywhere。虚拟机旨在实现与平台无关,同时,Java在成立之初就承诺在未来也会实现与语言无关。二者的基础都是虚拟机和字节码。Class文件可以以任何形式存在,如存在磁盘,通过类加载器直接生成等。Class文件采用一种类似于C中的结构体来存储数据,该伪结构体中只存在两种数据类型,无符号数和表。其中无符号数有u1,u2,u4,u8;代表1、

2018-01-05 14:27:44 609

原创 自动回收机制

自动内存管理机制 GC一般使用两种方法,引用计数和可达性分析。引用计数:简单高效,但是无法解决循环引用问题。可达性分析:从各个GC Roots向下遍历,当任一引用链都不可达时,判断为可回收对象。(可作为GC Roots:虚拟机栈中引用的对象,本地方法栈中引用的对象,方法区中的常量引用的对象,方法区中类静态属性引用的对象)0x00 四种引用。强引用Strong:类似...

2018-01-05 14:19:10 369

原创 Java内存区域

Java和C++之间存在一堵由内存动态分配和垃圾自动回收所组成的“围墙”,墙外的人想进来,墙内的人想出去。1. 对比对于C++,C程序开发人员,他们需要亲自管理内存,从内存生命周期的开始到结束。亲力亲为。Java中存在垃圾自动回收机制,不容易发生内存泄漏,但是,如果出现了问题,同时对GC原理不熟悉,排查错误将会是一项艰难的工作。2. 运行时数据区域JVM虚拟机吧内存划分

2018-01-05 11:41:36 126

原创 类加载机制

加载时机 类的生命周期。其中3、4、5统称连接(Linking)。Created with Raphaël 2.1.2开始加载(Loading)验证(Verification)准备(Preparation)解析(Resolution)初始化(Initialization)使用(Using)卸载(Unloading)结束 有且只有以下5种情况,称为主动引用,虚拟机需要立即开始类

2018-01-05 11:22:41 123

空空如也

空空如也

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

TA关注的人

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