- 博客(190)
- 资源 (3)
- 收藏
- 关注
原创 【第十章】引入参数对象
Introduce parameter Object介绍如果函数的参数基本上会同时出现,那么你应该讲这些参数封装到一个对象中。例子经常使用,不介绍了
2020-06-07 13:09:55
242
原创 【第十章】将查询函数和修改函数分离
Separate Query from Modifier介绍这个是非常重要的,查询就会有返回结果,你如果在查询中还有修改动作,那么这个动作就被称为副作用。这种坏处非常多例子不介绍了,这个使用较多
2020-06-07 13:03:40
281
原创 【第八章】以状态或者策略取代类型码
Replace Type Code with State/Strategy介绍这个是针对ReplaceTypeCodeWithSubclasses的优化版本例子package com.gupao.reorganizedata_8;/** * * 这个是针对ReplaceTypeCodeWithSubclasses的优化版本。 * 如果类型码会改变,或者员工类已经有子类了,那么使用子类来代替类型码就不合适了。 * 比如在此例子中类型码发生了改变(升职加薪)就非常适合ReplaceTyp.
2020-06-05 09:43:55
645
原创 【第八章】以子类取代类型码
Replace Type Code with Subclass介绍这个其实是为了多态做准备的,也是为了消除if-then-else的【replace conditional with polymorphism】例子package com.gupao.reorganizedata_8;/** * * ENGINEER SALESMAN MANAGER都是类型码,不同的类型码会有不同的行为产生, * 比如任务的分配和薪水的计算 * * 下面是一个员工和薪水的例子,每个员工都有个类型码,.
2020-06-05 09:41:57
493
原创 【第九章】引入断言
Introduce Assertion这个需要和卫语句进行区分,卫语句一般会给出一个默认值,或者直接返回,断言是不满足条件直接返回异常所以断言适合,检查参数例子 public static void main(String[] args) { Integer i = null; Assert.notNull(i,"param i can't be null"); //normal logic }...
2020-06-05 09:17:08
259
原创 【第九章】卫语句
解释卫语句就是可以单独检查的语句,一般这种语句都是很少执行的分支,一旦遇到这类分支应该直接返回,或者特殊处理。在前面博客中移除控制语句中,用return来消除其实就是卫语句的应用。条件语句所有分支都是正常行为,那么适合if-then-else只有一种情况是正常行为,其他都是不常见的情况,这些不常见的情况就应该用卫语句来检查...
2020-06-04 22:01:42
309
原创 【第九章】移除控制标记
这个其实也很好理解,我最喜欢用return进行替换移除。至于书上说的cotinue 和break 感觉新手才会犯这种错误public isXX(){ if(start == null){ return false; } if( start = 0){ return true } //normal logic}
2020-06-04 21:26:43
192
原创 【第九章】分解条件表达式
这个很简单,但是很多人却不做。每次看到一个复杂的条件,就会很难理解这个条件表达的是什么,如果将条件换成一个函数,并且将函数起一个很好的名字,那么别人看了会很舒服例子1protected static final Object[] DO_NOT_PROXY = null;if (specificInterceptors != DO_NOT_PROXY) { this.advisedBeans.put(cacheKey, Boolean.TRUE); O
2020-06-04 21:22:53
256
原创 AQS(AbstractQueuedSynchronizer)源码分析
一、LockSupport这个是AQS底层调用最频繁的类,这个类有两个重要的方法park:出于线程调度的考虑,禁用(暂停)当前线程,只要有许可可用unpark:为给定的线程提供许可证,这样给定线程就会变得可用。这两个方法都是调用的本地方法来实现的public static void park() { UNSAFE.park(false, 0L);}public static void unpark(Thread thread) { if (thread != n
2020-05-27 16:30:04
204
原创 二、subscribeOn和publishOn源码解析
一、subcribeOn1.1 测试代码CountDownLatch countDownLatch = new CountDownLatch(1);//模拟Io阻塞private String ioBlockOperator(){ try { TimeUnit.SECONDS.sleep(5); } catch (Interrupt...
2020-03-29 18:27:40
2185
原创 一、Reactor3 创建源码分析
一、代码示例Flux<String> flux = Flux.just("foo", "bar", "foobar");flux.subscribe(System.out::println);二、Flux.just方法源码追踪首先接受一下订阅者类的基本方法public interface Subscriber<T> { public void onSubsc...
2020-03-22 19:57:07
392
翻译 逻辑英语公式R1+R2
一、主谓宾1.1、主语一般是名词,一般是动作的发出者,或者是被描述的对象1.2、宾语一般也是名词,一般是主语作用到的对象。1.3、谓语如果没有谓语那么这个世界就是静态,谓语就是来让这个主语和谓语产生关系。常见的是动词1.4、定语定语一般形容词比较多,比如 “我喜欢美丽的她”。 这个美丽的就是定语,用来形容主语和宾语的。1.5、状语比如时间状语,条件状语“在今天晚上,我打游戏...
2020-02-20 09:44:55
6052
1
原创 【Spring源码分析】六、Spirng transaction分析
一、tx的解析和bean的Aop代理<tx:annotation-driven transaction-manager="transactionManager"/>针对namespace就行判断,判断是bean标签还是自定义标签(除了bean的其他标签)protected void parseBeanDefinitions(Element root, BeanDefinit...
2020-01-05 21:45:10
159
原创 【Spring源码分析】五、Spirng aop分析
一、介绍Aop肯定是通过动态代理实现的,如果有接口是通过JDK的动态代理实现,如果没有接口是通过CGLIB来实现的。二 详细分析步骤核心类AnotationAwareAspectJAutoProxyCreator他实现了BeanPostProcessor,也就是说在类的初始化前和初始化后会做一些动作,其实创建代理就是在postProcessAfterInitialization后开始创建...
2020-01-04 17:49:38
139
原创 动态代理源码分析
一、JDK动态代理//首先定义一个接口public interface IUserSave { void save();}//被代理的类public class UserSave implements IUserSave { @Override public void save() { System.out.println("save met...
2020-01-03 23:05:29
140
原创 【Spring源码分析】三、Bean的加载和循环依赖解析
一、切入点 bf = new XmlBeanFactory(new ClassPathResource("bean.xml")); User user = bf.getBean("user", User.class); user = bf.getBean("user", User.class);User.javapublic class User implements BeanF...
2020-01-02 21:12:23
135
原创 【Spring源码分析】四、ClassPathXmlApplicationContext的Bean的加载
一、介绍ClassPathXmlApplicationContext具有XmlBeanFactory的所有功能,自我感觉他就是XmlBeanFactory扩展。二、代码切入点 @Test public void testApplicationContext(){ applicationContext = new ClassPathXmlApplicationConte...
2020-01-02 21:10:32
350
原创 【Spring源码分析】二、解析及注册BeanDifinitions
上一篇文章中,大致分析了,Spring BeanFactory的类结构图,本篇文章分析如何解析配置文件和注册Bean的配置一、源码切入点private final XmlBeanDefinitionReader reader = new XmlBeanDefinitionReader(this);public XmlBeanFactory(Resource resource, BeanFa...
2019-12-12 16:16:53
240
原创 【Spring源码分析】一、BeanFactory之XmlBeanFactory
一、源码切入点 bf = new XmlBeanFactory(new ClassPathResource("bean.xml")); User user = bf.getBean("user", User.class); user = bf.getBean("user", User.class);bean.xml定义<?xml version="1.0" encoding="U...
2019-12-05 22:12:57
261
原创 第六章 类文件结构
Write Once,Run Anywhere平台无关性语言无关性(since JDK1.7)一、class文件结构1.1、源代码package com.cisco.learn.classstructure;/** * @authher: hongwzh2 * @Date: 11/26/19 * @Description: //TODO */public class T...
2019-12-02 15:02:58
148
转载 创建型模式--工厂方法
1、介绍工厂方法就是对简单工厂的补充,因为简单工厂在创建类的时候,是根据传递的参数来进行创建的,如果参数是class反射来创建还好,如果不是那么会产生大量的if else if elseif 这样的语句,设计模式一个最重要的功能就是减少这个if else。 所以工厂方法应运而生,他就是将属于相同分类的类创建封装到一个工厂接口的子类中去创建。...
2019-12-02 10:39:36
105
转载 创建型模式--简单工厂
装载一篇写的非常好的文章点这里1、介绍简单工厂最主要的就是解耦,不是通过自己去new,而是通过工厂类去new。2、代码结构那个转载的文章写得很详细了。3、好处解耦需要大量需要某个类的时候(比如100处),如果那个类需要修改构造方法,那么就需要修改100处。用工厂就很方便。基本上框架都会用这个设计模式...
2019-12-02 10:29:25
114
原创 行为型模式--状态模式
一、介绍状态模式和策略模式从UML图上看是非常相似的,但是他们之间的差别确实巨大的,状态模式强调的是我现在处于什么状态,我这个状态之后我可以做什么。我不可以做什么,而且状态之间的切换至在具体状态子类中进行切换的。他不像策略模式,具体策略是平行的,没有关系的。状态模式中各个状态是有关系的。二、代码结构介绍列举一个简单的电风扇开关例子2.1、抽象状态角色public interface St...
2019-11-28 13:54:25
117
原创 结构型模式-适配器模式
一、介绍这个模式使用场景是代码重构,有时候你需要一个类的部分功能,它不完全满足你的需求,而且你无法修改一个类(比如这个类是在jar包中),或者你不想动别人的源代码(改了后有背锅的可能),但是你又需要那个有缺陷类,这个时候适配器就闪亮登场了。二、代码结构演示2.1 接口适配器主要思想:把需要的类组合进来2.1.1、目标接口class TargetInterface { void me...
2019-11-26 15:53:57
93
原创 行为型模式-迭代模式
一、介绍某些类具有相同的行为,那么这个时候就是迭代模式的使用场景了。比如典型的集合类都需要遍历,这个时候为了做的通俗易懂,集合类中都有个方法iterator(),这个方法返回一个接口,利用这个接口就可以实现遍历。而且接口的子类最好是集合类的内部类,去实现该集合的具体遍历逻辑。二、代码结构演示2.1 抽象接口public interface Iterator<E> { ...
2019-11-26 15:32:30
141
原创 二、hive客户端命令
一、数据库1.1、查看数据库show databases;1.2、创建数据库create database if not exists myhive;//使用数据库use myhive;1.3、删除数据库drop database myhive;二、表2.1、查看表show tables;2.2、创建表CREATE TABLE IF NOT EXISTS emp...
2019-09-03 23:35:04
416
原创 一、hive介绍和安装
如果能用Sql语句操作hadoop的MR,这是多么酷的一件事版本介绍:hadoop 2.7.2hive 2.1.0centos7一、hive介绍基于hadoop的mr,就是对hadoop的job 的封装使用二、hive安装下载和配置环境变量下载.tar.gz,然后tar开#hiveexport HIVE_HOME=/opt/hive/hive-currentexport...
2019-09-03 17:22:54
118
原创 五、第一个Map Reduce例子
hadoop version 2.7.2(linux 完全集群模式)jdk 1.8maven 3.3.9运行在win10该例子来源于网络,需求:统计字母出现的次数文本文件类似这样: a b c d 字母之间有一个空格 <properties> <hadoop.version>2.7.2</hadoop.version> ...
2019-09-02 22:43:42
139
翻译 四、java api操作HDFS
hadoop版本2.7.2 ,安装在linux上运行环境idea+window10一、代码示例maven配置 <dependency> <groupId>org.apache.hadoop</groupId> <artifactId>hadoop-common</artifactId> ...
2019-09-02 14:53:36
148
原创 三、Hadoop常用配置
一、更改本地目录<property> <name>hadoop.tmp.dir</name> <value>/tmp/hadoop-${user.name}</value> <description>A base for other temporary directories.</description&g...
2019-09-01 21:08:35
202
翻译 二、HDFS常见操作
一、hdfs ui界面默认端口是50070点击Utilities—>Browse the file system二、常用命令大部分是和linux非常相似2.1 mkdirhdfs dfs -mkdir -p /apps/xxx/document/2.2 put存放/更新文件//hdfs dfs -put -f 如果存在文件强制重写hdfs dfs -put noh...
2019-09-01 21:05:20
159
原创 一、Hadoop 安装
hadoop version 2.7.2java version jdk1.8一、下载和配置环境变量官网下载地址,hadoop是基于java的,所以需要安装JDK。1.1、配置环境变量下载后直接tar到一个文件中比如我的/opt/hadoopexport HADOOP_HOME=/opt/hadoop/hadoop-currentexport PATH=$PATH:$HADOOP...
2019-08-30 21:53:57
111
原创 Kafka partition和replication
这里集群broker:s1 s 2 s3topic:test6partition:3replication:2分区分区的概念很好理解,就是数据的水平切分,比如上面的配置中把一个主题的数据分成3分进行存储,而且不同分区一般都是在不同的broker中。这个就是kafka的高扩展性。比如上面s1、s2、s3各有一个分区。副本副本的概念就是kafka的高可用性,比如s1节点宕机了,那么...
2019-07-23 22:03:37
1259
原创 Kafka在zookeeper中的存储情况
目录机构通过zkCli.sh ls命令查看[cluster, controller_epoch, controller, storm, brokers, zookeeper, admin, isr_change_notification, consumers, log_dir_event_notification, latest_producer_id_block, config]co...
2019-07-21 22:35:03
354
原创 Kafka入门
我之前用过activemq,这新公司大量使用kafka,所以我也开始学习kafka安装点击这里,我在学习storm的时候,也需要安装kafka,所以这里就省略安装了。核心概念zookeeper:类似spring cloud的eureka,zookeeper也是很多第三方工具常用的集成部分。broker:这个就是一个kafka节点producer:生产者consumer group:...
2019-07-18 20:32:11
160
原创 【Akka】入门Demo分析
最近公司用到spary+akak,然后从官网找了一个入门的例子,现在分析一下1.简单demo首先akka给我的感觉就是一个异步的发送消息的机制,如果我用java来解释,那就是重新起一个新线程,然后调用一个类的方法。//简单定义一些用到的消息类object Greeter { //#greeter-messages def props(message: String, printer...
2019-07-16 09:50:34
936
翻译 四、elasticsearch的mapping
一、介绍就像mysql,定义字段的时候,会定义类型,是否索引等信息,mapping就像mysql的scheme。二、字段类型参考文章点这里三、字段额外属性
2019-06-30 17:59:51
149
翻译 三、elasticsearch增删改查
一、新建索引put http://{{host}}:9200/liarbry二、增加document指定idput http://{{host}}:9200/liarbry/books/1{ "title":"spring boot program idea3", "user":{ "first":"hongwei", "last":"zhang" }, "pri...
2019-06-30 07:20:08
179
kafka-manager-2.0.0.2.zip
2019-07-23
spring 2.5。6 适合2.5.6以前的 以后的也推荐
2013-05-16
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅