WHH

MY BLOG

工厂方法模式

定义一个用于创建对象的接口,让子类决定将哪一个类实例化。工厂方法模式让一个类的实例化延迟到其子类。工厂方法模式提供一个抽象接口来声明抽象工厂方法,而由其子类来具体实现工厂方法,创建具体的产品对象。

如图工厂方法:

阅读全文 »

使用前准备

1
pip install selenium

下载PhantomJS,ChromeDriver

使用selenium

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
from selenium import webdriver


# 通过phantomjs使用,phantomjs是无界面浏览器
def use_phantom():
# 设置代理
service_args = ['--proxy=proxy3.fn.com:8080', '--proxy-type=http']
# 设置路径
driver = webdriver.PhantomJS(executable_path="/Users/demo/SOFT/phantomjs/phantomjs-2.1.1-macosx/bin/phantomjs",
service_args=service_args)
driver.get("https://www.google.com")
# 截图
driver.get_screenshot_as_file("phantomjsGoogle.png")
driver.close()


# 使用chrome浏览器
def use_chrome():
# 获取chrome参数配置
chrome_options = webdriver.ChromeOptions()
# 使用代理
chrome_options.add_argument("--proxy-server=proxy3.fn.com:8080")
chrome_options.add_argument("--proxy-type=http")
# 设置路径
driver = webdriver.Chrome(executable_path="/Users/xuzhuo/SOFT/chromedriver/chromedriver",
chrome_options=chrome_options)
driver.get("https://www.google.com")
# 截图
driver.get_screenshot_as_file("chromeGoogle.png")
driver.close()


use_phantom()
use_chrome()
阅读全文 »

建立maven archetypes,后期快速搭建项目

创建一个空的maven项目

修改当前maven项目pom.xml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.whh.maven.archetypes</groupId>
<artifactId>quick-ssm-webapp</artifactId>
<packaging>jar</packaging>
<version>1.0.0</version>
<name>quick-ssm-webapp Maven Webapp</name>
<url>http://maven.apache.org</url>
<build>
<finalName>quick-ssm-webapp</finalName>
<pluginManagement>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-archetype-plugin</artifactId>
<version>2.4</version>
</plugin>
</plugins>
</pluginManagement>
</build>
</project>
阅读全文 »

Java设计模式

面向对象设计原则:

  • 单一职责原则:一个类只负责一个功能领域中的相应职责
  • 开闭原则:软件实体应对扩展开放,而对修改关闭
  • 里式代换原则:所有引用基类对象的地方能够透明地使用其子类的对象
  • 依赖倒转原则:抽象不应该依赖于细节,细节应该依赖于抽象
  • 接口隔离原则:使用多个专门的接口,而不使用单一的总接口
  • 合成复用原则:尽量使用对象组合,而不是继承来达到复用的目的
  • 迪米特法则:一个软件实体应当尽可能少地与其他实体发生相互作用

单一职责原则(Single Responsibility Principle, SRP):

单一职责原则是最简单的面向对象设计原则,它用于控制类的粒度大小。一个类只负责一个功能领域中的相应职责。

阅读全文 »

对于Storm,其核心概念有包括:

  • Stream 数据流
  • Spout 数据流
  • Bolt 处理数据
  • Tuple 数据单元
  • Task 运行Spout或Bolt中的线程
  • Worker 是运行这些线程中的进程
  • Stream Grouping 规定了Bolt接受何种数据类型作为输入
  • Topology 是Stream Grouping连接起来的Spout和Bolt节点网络

Tuple元组

Tuple 是Storm中使用的最基本单元、数据模型和元组。Tuple就是一个值列表,Tuple默认值类型有:integer、float、double、long、short、string、byte、binary[byte[]]。如果需要使用其他类型,需要序列化该类型。

阅读全文 »

Swagger 是一款RESTFUL接口的文档在线自动生成+功能测试功能软件。参考 官方地址

在SpringBoot中集成swagger

创建maven项目,pom.xml添加依赖

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.4.RELEASE</version>
</parent>

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>

<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>2.6.1</version>
<scope>compile</scope>
</dependency>

阅读全文 »

实时流计算

传统DBMS不是为快速连续地存放单独的数据单元而设计,而且也不支持持续处理,而持续处理是数据流应用的典型特征。一些方案采用MapReduce来处理实时数据流。但是尽管MapReduce做了实时性改进,也很难稳定地满足应用需求。这是因为Hadoop MapReduce框架为批处理做了高度优化,典型的是通过调度批量任务来操作静态数据,任务不是常驻服务,数据也不是实时流入。

实时计算流程

1、数据采集
功能上保证可以完整的收集到所有日志数据,为实时应用提供实时数据;响应时间上要保证实时性、低延迟;配置简单,部署容易;系统稳定可靠等。
目前采集数据工具有:

  • Facebook开源的Scribe
  • LinkedIn开源的Kafka
  • Cloudera开源的Flume
  • 淘宝开源的TimeTunnel
  • Hadoop的Chukwa等
阅读全文 »

在业务需求中,有时候需要使用js跨域请求。解决办法有使用jsonp和CORS。

  • jsonp利用的是在页面访问资源文件时,访问非当前域名下其他域名资源。如<img><script><form>等标签。可以利用这一特性跨域。

前端请求:

1
2
3
4
5
6
7
8
var scriptJsonP = document.createElement("script");
scriptJsonP.setAttribute("type", "text/javascript");
scriptJsonP.setAttribute("src", "http://a.com/corssOrigin/jsonp");
document.getElementsByTagName("body")[0].appendChild(scriptJsonP);

function jsonp(data){
alert(data)
}
阅读全文 »

在项目中需要在微信公众号H5中嵌入微信支付,需要先申请开通微信支付,注册商户信息。关键性信息需要如下:

  • 已经备案域名
  • 微信公众号开发id(appid)
  • 微信公众号开发密钥(secret)
  • 微信商户号(mch_id)
  • 微信商户支付密钥(apy.key)

1. 微信公众号平台配置

1.1 在微信支付中配置授权目录

该授权目录指,在该目录下才可以调用起微信支付。
调用支付页面为 http://www.xxx.com/wxpay/js_api_call 那么配置为 http://www.xxx.com/wxpay/
调用支付页面为 http://www.xxx.com/recharge/index?package=1 那么配置为 http://www.xxx.com/recharge/

1.2 配置授权域名

在设置 -> 公众号设置 -> 功能设置中,配置js接口安全域名,网页授权域名,配置这里域名时,需要下载一个txt文件到域名所在服务器根目录下。详细请参考页面详细提示。

阅读全文 »
0%