自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(90)
  • 资源 (16)
  • 收藏
  • 关注

原创 软件设计的哲学

《A Philosophy of Software Design》全书围绕一个词:复杂度 complexity。复杂性来源于,1 依赖,2 阴暗 obscurityDeep module, 信息隐藏,不同层次的抽象。简单说,一个类应该做很多,但是对外抽象却很简单。从而降低模块之间的依赖。命名,注释,代码风格约定。都能帮助别人很容易读懂,降低认知成本。如果别人能很容易读懂你的代码,那就是好代码。如果别人不容易读懂,你自己觉得再清晰,也不行。一定要用读者的角度写代码,降低代码阴暗程度。.

2020-08-28 16:26:02 590

原创 简单记录一下Github OAuth认证过程

Github 既是认证服务器,也是资源服务器。在Github上注册OAuth App:注意Callback URL 填写,后面有用到。http://localhost:8080/connect/github得到token:Client IDae73**************78Client Secret6380*******************************51f79授权,浏览器打开:https://github.com/login/oauth/authorize?c

2020-06-09 15:42:32 829

原创 什么是架构?

架构刚开始学习感觉很抽象,那到底什么才是架构?“分解简化”想象如果要修建一座房子,怎么做?买砖,瓦,水泥,窗户,门。挖地基,砌墙安装窗户,安装门封顶,铺瓦。接下来,想一下,要建多大的房子?用来做生意,还是居住?买多少砖,买多大的门窗,买几个?多久能修建完成?总之有很多的问题需要考虑。这些需求就是对架构的约束。有功能性的需求,比如确定要盖三层,有几个阳台,车库等。还有非功能性的需求...

2019-10-14 11:03:05 450

原创 我来说说封装

封装,面向对象的三大特性:隐藏对象的属性和实现细节,仅对外提供公共访问方式。对于一个面向对象中的类而言,类内部的私有属性和方法对外不可见,外界能访问的只有公共方法。方法可见不可见不是重点,重点是类封装了它的实现细节。类的使用者无需关心类内部具体的实现细节,直接使用类的公共方法即可。对于一个模块而言,模块封装了内部实现的细节。使用者使用公共的API即可。对于一个服务而言,同样的道理...

2019-07-11 10:40:09 226

原创 我来说说重构是啥

最近看了一遍《重构2》,使用JavaScript描述的,中间描述了很多种重构方法。重点:目的只有一个:可维护性这本书成功地说服了我这一点:软件质量属性中,可维护性最重要。目前,软件越来越庞大,逻辑越来越复杂。以前写程序重在算法,使用最小的CPU和内存,尽可能快的计算结果。时代在变,性能固然重要,但是可维护性更重要,因为相对于硬件成本,人力成本更高。对于可维护性差的软件,以后修改的成本会更高...

2019-07-10 14:35:52 226

原创 后台服务调用的身份认证

后台服务之间调用常用的几种身份认证方式:用户名密码直接放到请求内容中。请求格式可以是key-value pairs,XML,JSON。Paypal使用这种方式。例如:username=xxx&password=xxx&request=xxxHTTP Basic认证。将用户名密码经过Base64编码放到HTTP请求头。例如:Authentication: Basic ...

2019-06-25 09:54:19 1208

原创 事件驱动API:WebHooks vs WebSockets vs HTTP Streaming

《Designing Web APIs》第二章讲到事件驱动API的几种方式。WebHooks: HTTP回调通知。 用于服务对服务的实时事件通知。优点:服务对服务,使用HTTP协议。缺点:不能跨防火墙,不能用在浏览器端,失败重试机制(三次重试:立即,1分钟后,5分钟后),安全(如何验证回调源)。WebSockets:基于TCP的双向连接。用于浏览器和服务器之间的实时双向通信。优点...

2019-06-24 14:43:37 2478

原创 REST vs RPC vs GraphQL

《Designing Web APIs》第二章讲到请求-响应API的几种方式。REST: 常用在类似于CRUD操作的API上。优点:标准的方法名称,参数格式和状态码。缺点:网络负载大,常常需要多次HTTP请求。RPC:常用在暴露一些动作的API上。优点:易理解,网络负载小,性能好。缺点:难以发现,有限的标准,容易导致功能暴露。GraphQL:常用在需要灵活查询的API上。...

2019-06-24 13:59:00 263

原创 HTTPS 密码套件组成部分

一个Cipher Suite包含以下4部分:Authentication,用于验证证书签名Encryption,用于加密传输到数据,使用对称密钥Handshake,用于交换对称密钥,基于非对称密钥Hashing,用于计算消息到散列值,保证消息一致性,防止中途被修改。例如 TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256表示基于TLS协议Handshak...

2019-05-29 09:40:04 3574

原创 curl POST如何查看响应的Header

curl -I 这样其实发送是HEAD请求。下面这样发送POST请求(-X POST),同时指定Basic认证用户名密码(-u ‘andy:andy’),同时指定数据类型(-H ‘Content-Type: application/json’),以及发送的数据(–data ‘xxxx’)。同时将response的Header打印到控制台(-D -)。curl 'http://127.0.0....

2019-03-08 14:44:42 6269

原创 RabbitMQ Exchange类型

摘抄自 Spring in Action 5th。Default—A special exchange that’s automatically created by the broker. It routes messages to queues whose name is the same as the message’s routing key. All queues will autom...

2019-02-26 10:58:46 176

原创 REST中更新操作使用PUT,还是PATCH?

RESTful 使用POST来创建一个资源,使用PUT或者PATCH来更新一个资源。区别是:– PUT用来整体更新一个资源,所以请求中必须包含完整的资源信息。如果缺少部分信息,会导致这部分数据被更新为NULL。– PATCH则是部分更新。仅更新提供的字段,请求中缺少的字段仍保持不变。...

2019-02-22 14:15:13 8163

原创 内部IP泄漏的问题

PCI Security 扫描报告有内部IP泄漏的问题。调查后发现,HTTP 1.0的请求,请求头部Host为空,同时有HTTP 302 重定向的情况下,Jetty无法判断重定向的URL中主机名,从而使用本机IP。下面的请求,指定使用HTTP 1.0,同时故意将 Host 设置为空,可以揭示这个问题:andyhan@ML:% curl https://www.xxx.com/ssss -I ...

2019-02-19 10:12:13 3348

原创 JSONP遇到CROB

跨站请求使用到了JSONP,最近由于安全问题,给所有HTTP Response都添加了 Header:X-Content-Type-Options: nosniff导致浏览器发生如下的警告,JSONP数据加载失败。Cross-Origin Read Blocking (CORB) blocked cross-origin response http://xxx?callback=callb...

2019-02-14 14:10:41 1645

原创 消息驱动和事件驱动的一点点区别

**消息驱动,**A发送一个消息到消息队列,B收到该消息。A很明确这个消息是发给B的。通常是点对点模式。**事件驱动,**A发出一个事件,B或者C收到这个事件,或者没人收到这个事件,A只会产生一个事件,不会关心谁会处理这个事件 。通常是发布订阅模式。...

2019-02-03 10:44:18 5607 1

原创 记一次JVM CPU使用率很高的原因

产品上出现CPU使用率超过98%,报警。top命令查看,应用进程的CPU使用率为388%。正确的步骤应该是,通过 “top -Hp #PID” 查看具体哪些线程占用率CPU。找到对应的PID,然后转换成16进制,再再jstack线程堆栈中查找对应线程。使用jstack查看线程堆栈,找到所有RUNNABLE线程。这个提供的信息比较少。通过jmap 做堆转储。使用jvisualvm分析dump文...

2018-12-04 14:36:59 1781

原创 Java读写HBase简单例子

几个概念:表 Table。 表由行和列组成。行 Row。每行都由 Row Key 来标识。列族 ColumnFamily。表由列族组成。列限定符 Qualifier。也就是列,每个列族由多个列组成。列可以动态创建单元格。通过行,列族和列限定符定位一个单元格时间戳 。每个单元格都有多个版本。创建表的时候需要指定表的名字,以及所有的列族。插入数据到HBase时,需要指定表,...

2018-11-15 16:00:45 6119 2

原创 分层? Layers or Tier

Layers:模块模式,将系统分块,以便关注分离,独立开发和维护。Tiers:分配模式或者C&C模式,将软件的各个构件逻辑分组。主要针对运行时。

2018-10-29 14:13:35 236

原创 在mac上恢复windows上备份的SQLServer数据库

数据库备份文件为~/data/sqlserver/secureback.bakMac上docker运行sqlserver:docker run -it -e SA_PASSWORD=Active#123 -e SQLSERVER_DATABASE=test -e SQLSERVER_USER=test -e SQLSERVER_PASSWORD=test -p 1433:1433 --nam...

2018-09-29 16:27:08 1423

原创 Inside JVM笔记

JVM包括三部分: 1. 类加载器系统。加载,连接(校验,准备,解释),初始化。类加载器:Bootstrap(/jre/lib) -> Extension(/jre/lib/ext) -> System (classpath) 2. 存储区域。五部分:方法区,Heap,堆栈,PC寄存器,Native方法堆栈。 3. 执行引擎。解释器,JIT,垃圾回收器内存泄漏原因: ...

2018-09-13 16:42:15 155

原创 反模式 Phantom logging

Phantom logging这种反模式几乎在所有项目中都能找到。在这种反模式下,我们会生成log 消息,但是不会不会将他写入日志文件。看下面的例子:logger.debug ("one log message" + param_1 + "text" + param_2);尽管我们把log的级别设置为INFO,但是上面的例子中,还是会组装log消息。如果debug和trace级别的log数...

2018-09-13 14:21:45 151

原创 RabbitMQ最简单例子

主要步骤:创建Exchange创建Queue使用RoutingKey绑定Exchange到Queue向Exchange发送消息,需要设置消息的RoutingKeyExchange收到消息后根据RoutingKey绑定转发消息到Queue从Queue读取消息Maven依赖:<dependency> <groupId>org.springfra...

2018-09-12 13:47:02 281

原创 JMS与AMQP比较

1.平台JMS只针对Java编程语言。AMQP多技术平台。2. 消息模型。JMS支持两种消息模型,点对点,发布订阅模型。 AMQP支持多种交换类型,direct,topic,fanout,headers。消息路由算法依赖于exchange的类型。3. 消息数据类型JMS支持 StreamMessage,MapMessage,TextMessage,ObjectMessage和...

2018-09-11 16:33:16 652

原创 优化JDBC

一,FetchSize。默认fetchsize是10行,如果查询结果包括100行,应用与数据库之间会有10次网络交互。但是如果FetchSize设置很大,可能会导致OutOfMemoryError PreparedStatement.setFetchSize(100); JdbcTemplate.setFetchSize(100);二,Statement VS PreparedStatem...

2018-09-10 11:16:40 1270

原创 事务隔离级别

Read Uncommitted, 事务B会读取到事务A未提交的脏数据 Read Committed, 不会读取到未提交的脏数据。事务A两次读取可能会不同, Repeatable Read,可以保证单条数据每次读取都相同。但是事务A两次读取一定范围内的数据,由于事务B插入了新的数据,导致该范围内数据可能不同。 Serializable,在所有级别都加锁,包括读,写,范围。...

2018-09-07 11:38:58 106

原创 SpringMVC 5 与 Jetty 9 的配置

pom.xml<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...

2018-09-05 16:37:34 1050

原创 Linux查询目录下子目录总大小的命令

du -sh * | sort -nr-s 显示每个输出的总计 -h 人工读取的方式-n 按数字排序 -r 倒序[deploy@lvamswebqa01 ~]$ du -sh * |sort -nr284M build_space164M scratch96K cacerts.20160923...

2018-07-30 13:49:48 5100

原创 记录一下Security扫描的问题

Session Fixation SessionID 需要登陆后更新。Cookie Security: Cookie not Sent Over SSL Cookie 需要Secure标志。Cookie Security: Persistent Cookie Cookie 不能有expires,否则Cookie会被浏览器存储在磁盘上。Cache Management: Sessio...

2018-07-27 14:04:54 3523 2

原创 验证HTTPS站点是否在JDK信任列表

由于需要和第三方站点集成,对方如果修改了HTTPS证书,会导致HTTPS网络连接失败,所以需要提前验证一下对方的证书是否在我们的信任列表。第三方站点: https://secure.touchnet.com:8700/首先查看对方站点的证书: openssl s_client -showcerts -connect secure.touchnet.com:8700将对方站点的证书保存...

2018-05-02 11:14:01 976

原创 Cassandra入门

Cassandra要解决的问题就是伸缩(web-scale)。没有中心节点(masterless),对应于CAP理论,Cassandra属于AP几个概念 节点(node) 集群(cluster,ring) 数据中心 复制因数 Gossiper:节点之间相互通知自己状态。Cassandra重要特性:没有单点故障,数据在多个节点上有多个拷贝。可以调节的一致性,允许多种粒度的读...

2018-04-17 09:09:17 380

原创 Redis 反模式

《Seven NoSQL Databases in a week》关于Redis 的笔记。1. 数据量大于内存 数据不能全部放入内存,性能会有很大影响。2. 使用关系型数据 这需要多次操作并且在应用端JOIN。而且Redis不支持关系数据库的ACID。3. 连接管理。 打开的连接必须要关闭。如果使用连接池,也需要确保连接正常关闭。4. 安全 Redis应该运行在一个安全...

2018-04-16 11:02:56 171

原创 Neo4j反模式

《Seven NoSQL Databases in a week》关于Neo4j的笔记。1. 不要把neo4j 当作关系数据库使用 关系数据库关心的是数据如何存储。而不关心数据如何查询。所以在使用nosql之前,建模很重要。Neo4j关注的是节点,以及节点之间如何关联。2. 第一次在关键任务中使用Neo4j3. 将关系存储在节点内部,即一个实体内部嵌套其他实体,这样会导致节点数据很大...

2018-04-13 16:00:37 420

原创 Neo4j 简单入门

Neo4j 是一个图数据库,主要包括节点和关系。节点和关系都可以包含属性。安装下载Neo4j:https://neo4j.com/artifact.php?name=neo4j-community-3.3.5-windows.zip 解压后运行:D:\Tools\neo4j-community-3.3.5\bin>neo4j.bat console2018-04-13 0...

2018-04-13 15:28:12 36977

原创 软考高级论文如何“吹”

首先说一下需要避免那些问题:字数不够字迹潦草跑题纯理论,背书一样,没有结合项目项目太假接下来说说格式: 【摘要】 20xx年x月到20xx年x月,我参与了xxx项目,该项目主要是xxx,在该项目中我担任xxx(注,必须是项目经理,系统架构师,系统分析师),负责xxx。针对于#论文主题#,我采取了xxx等措施,取得了良好的效果。20xx年系统上线,得到了客户的好评。【正文...

2018-03-27 14:26:53 10186 1

原创 命令式编程 vs 函数式编程 vs 反应式编程

命令式编程 存在潜在的阻塞。函数式编程 避免处理数据的中间状态。可以方便的处理数据流。反应式编程 多种方式使用数据流,合并,过滤和转换等。 抽象层次更高,关注于如何把小的方法连接起来,而不是方法内部如何实现的 。 另外,异步非阻塞可以帮助管理调度,让我们关注于“发生了什么”,框架会负责“什么时候发生”。...

2018-03-26 15:38:05 1022

原创 使用反应式spring-webflux

本文使用spring-boot 2.0。 Maven依赖需要导入:<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-webflux</artifactId></dependency...

2018-03-26 14:43:17 784

原创 Gulp笔记

要点:gulp和gulp-cli是分开的。gulp-cli调用本地gulp,本地gulp会运行Gulpfile.js首先确保nodejs,npm,gulp-cli安装:$ node --version$ npm --version$ npm install -g gulp-cli$ gulp --version初始化项目:D:\test\gulp>npm init添加开发依赖gulp到...

2018-02-08 16:26:16 167

原创 去除磁盘写保护

运行命令 diskpart在diskpart里面执行下面命令,列出所有磁盘:list vol选择需要去除写保护的磁盘select vol 3去除写保护att vol clear readonly

2018-02-05 16:24:11 3164

原创 RabbitMQ支持的4种Exchange

Direct Exchange 默认方式。通过Routing Key将消息从Exchange转发到QueueTopic ExchangeRouting Key可以包含 * 或者 #,来匹配QueueFanout Exchange不需要Routing Key。将消息发给所有QueueHeaders Exchange不适用Routing Key。通过消息头部转发。Bindi

2018-02-05 15:56:32 245

原创 使用Curator操作ZooKeeper

我使用的zookeeper-3.4.11,所以添加dependency的版本号是2.x.x。 org.apache.curator curator-recipes 2.12.0基本用法,创建CuratorFramework。start方法会尝试连接zookeeper。其他的新建,读,更新,删除操作一看就能明白。public static void main(String

2018-01-12 14:38:08 252

The Full Stack Developer Your Essential Guide to the Everyday Skills...

“The Full Stack Developer Your Essential Guide to the Everyday Skills Expected of a Modern Full Stack Web Developer” Excerpt From: Chris Northwood. “The Full Stack Developer.” iBooks.

2019-01-21

Kafka Streams in Action (Manning, 2017, MEAP Edition)

MEAP Edition, Manning Early Access Program, Kafka Streams in Action, Version 4  PART 1: GETTING STARTED WITH KAFKA STREAMS PART 2: KAFKA STREAMS DEVELOPMENT PART 3: ADMINISTERING KAFKA STREAMS PART 4: ADVANCED CONCEPTS WITH KAFKA STREAMS

2017-09-30

Java NIO 中英文版+Pro Java 7 NIO.2

包含三本关于 Java NIO的书, Java NIO (中文版).pdf Java NIO (英文版).pdf Pro Java 7 NIO.2.pdf 。。。。。。。。。。。

2017-09-22

Angular权威教程中文高清完整版(2017.04)

Angular权威教程中文高清完整版,非扫描。 人民邮电出版社,2017.4 内 容 提 要 本书堪称Angular 领域的里程碑式著作,涵盖了关于Angular 的几乎所有内容。对于没有经验的人,本书平实、通俗的讲解,递进、严密的组织,可以让人毫无压力地登堂入室,迅速领悟新一代Web 应用开发的精髓。如果你有相关经验,那本书对Angular 概念和技术细节的全面剖析,以及引人入胜、切中肯綮的讲解,将帮助你彻底掌握这个框架,在自己职业技术修炼之路上更进一步。本书的读者对象为所有想要理解和学习Angular 的前端开发人员。

2017-09-19

Selenium Testing Tools Cookbook第二版英文版

Selenium Testing Tools Cookbook Second Edition Over 90 recipes to help you build and run automated tests for your web applications with Selenium WebDriver.

2017-09-15

Mastering Selenium WebDriver [2015]

Mastering Selenium WebDriver Increase the performance, capability, and reliability of your automated checks by mastering Selenium WebDriver. Copyright © 2015 Packt Publishing

2017-09-15

Angular4权威教程 (ng-book.2.Angular.4.r60.2017.4)

angular4权威教程英文版 ng-book The Complete Book on Angular 4 The in-depth, complete, and up-to-date book on Angular 4. Become an Angular 4 expert today.

2017-09-15

Apress.Pro.RESTful.APIs.Design.Build.and.Integrate (2017)

Apress.Pro.RESTful.APIs.Design.Build.and.Integrate.with.REST.JSON.XML.and.JAX-RS.148422664X.pdf (2017)

2017-09-11

2017年系统分析师真题

2017年系统分析师真题,包括 1. 2017年上半年系统分析师上午真题及答案解析.pdf 2. 2017年上半年系统分析师考试真题(案例分析).pdf 3. 2017年上半年系统分析师考试真题(论文).pdf

2017-09-05

Spring_ Microservices in Action 英文版

Summary Spring Microservices in Action teaches you how to build microservice-based applications using Java and the Spring platform. Purchase of the print book includes a free eBook in PDF, Kindle, and ePub formats from Manning Publications. About the technology Microservices break up your code into small, distributed, and independent services that require careful forethought and design. Fortunately, Spring Boot and Spring Cloud simplify your microservice applications, just as the Spring Framework simplifies enterprise Java development. Spring Boot removes the boilerplate code involved with writing a REST-based service. Spring Cloud provides a suite of tools for the discovery, routing, and deployment of microservices to the enterprise and the cloud. About the Book Spring Microservices in Action teaches you how to build microservice-based applications using Java and the Spring platform. You'll learn to do microservice design as you build and deploy your first Spring Cloud application. Throughout the book, carefully selected real-life examples expose microservice-based patterns for configuring, routing, scaling, and deploying your services. You'll see how Spring's intuitive tooling can help augment and refactor existing applications with micro services. What's Inside Core microservice design principles Managing configuration with Spring Cloud Config Client-side resiliency with Spring, Hystrix, and Ribbon Intelligent routing using Netflix Zuul Deploying Spring Cloud applications About the Reader This book is written for developers with Java and Spring experience. About the Author John Carnell is a senior cloud engineer with twenty years of experience in Java. Table of contents Welcome to the cloud, Spring Building microservices with Spring Boot Controlling your configuration with Spring Cloud configuration server On service discovery When bad things happen: client resiliency patterns with Spring Cloud and Netflix Hystrix Service routing with Spring Cloud and Zuul Securing your microservices Event-driven architecture with Spring Cloud Stream Distributed tracing with Spring Cloud Sleuth and Zipkin Deploying your microservices

2017-09-04

历年系统架构设计师考试试题分类精解(综合知识篇)

历年系统架构设计师考试试题分类精解(综合知识篇)

2017-08-28

Git教程 中文版

Git教程,中文教程

2017-08-21

Pragmatic 101 Design Ingredients to Solve Big Tech Problems 2013 pdf

Pragmatic 101 Design Ingredients to Solve Big Tech Problems 2013 pdf

2013-10-17

rails-best-practices-091024015011-phpapp01.pdf

Rails Best Practices

2010-12-14

空空如也

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

TA关注的人

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