- 博客(55)
- 资源 (5)
- 收藏
- 关注
原创 通用HTTP测试工具开发详解
声明:原创文章,转载请注明出处。https://www.jianshu.com/p/a30e2a77f62a##一、背景由于最近题主在做一些分布式测试工具的开发,想分享一些思路或者想法出来。具体的产品可见,小米分布式测试平台 (一)- 初识 Pecker。因为涉及公司的项目以及保密性,故只分享一些这种工具的开发思路。HTTP协议无论在公司内网或者公司外网来讲,尤其重要。但对其进行性能压测...
2018-10-28 17:44:21
691
转载 小米分布式测试平台 (一)- 初识 Pecker
转载自:https://mp.weixin.qq.com/s?__biz=MzU0OTQxNTA4Nw==&mid=2247483830&idx=1&sn=5b80f1a2335cfdc093ba799c1009d0b2&chksm=fbb17076ccc6f960cf892c0c7a1c801d7c7d3f558d9b9d9f16a8137c948576ab...
2018-09-05 14:13:53
1252
原创 SpringBoot入门-整合H2测试Mybits DAO
本文代码地址:https://github.com/hawkingfoo/java-web一、概述上一节中,我们分享了SpringBoot快速整合Mybits的方法。本节中我们将在web项目中引入H2数据库相关的操作。即SpringBoot通过整合MyBatis访问H2数据库。二、快速整合H21、修改pom.xml,添加依赖 <parent> ...
2018-07-27 14:04:51
4357
原创 SpringBoot入门-Mybatis通过注解批量插入/删除
本文代码地址:https://github.com/hawkingfoo/java-web一、概述我们在写Mapper的时候,经常会通过注解的方式来写SQL语句,像下面这样。这要求我们传递的参数为一个具体的对象。@Insert("INSERT INTO student (name, sex, addr) VALUES (#{name}, #{sex}, #{addr})")int...
2018-07-27 14:02:53
10749
6
原创 Java多线程3-Thread简介
一、线程生命周期线程的状态有NEW、RUNNABLE、RUNNING、BLOCKED和TERMINATED五个状态。如下图所示: NEW:当我们new一个Thread对象后,在没有执行start方法之前,这仅仅是一个普通的Java对象。可以说线程处于NEW状态。RUNNABLE:当执行start方法后,JVM会创建一个线程并进入RUNNABLE状态,等待操作系统的调度。RUNNIN...
2018-07-17 21:58:50
349
原创 Java线程上下文-ThreadLocal的那些事
声明:原创文章,转载请注明出处。https://www.jianshu.com/p/6341cfa5c3cd一、概述ThreadLocal: 通常被称作线程本地变量或者线程本地存储。其含义是ThreadLocal为变量在每个线程中都创建一个副本,则每个线程可以访问自身内部的副本变量。 概念总是抽象而且晦涩的,我们从两个例子说起。1、对象间/方法间跨层传递如下图,有个多层调...
2018-07-15 22:25:29
7086
原创 Java实现FIFO/LRU缓存
一、概述在学操作系统的时候,会接触到页面缓存调度算法。缓存不可能是无限大的,所以会涉及到一些置换策略,来保证缓存的命中率。常见的有:FIFO、LRU、LFU、OPT策略等。1、缓存置换算法**FIFO:**First In First Out,先进先出,和队列保持一致。最先进来的最早出去。LRU:*Least Recently Used,最近最少使用。总是淘汰最近没有使用的。其...
2018-07-07 22:18:47
1242
原创 Java定时线程池停止超时任务
一、背景题主最近遇到一个问题,本来通过ScheduledExecutorService线程池定时调度一个任务。奈何不知道为啥跑了2个多月,其中一个任务Hang住了,那定时的任务则出现了问题。关于定时线程池,好多人任务设置好频率(比如1Min),它会按照这个间隔按部就班的工作。但是,如果其中一次调度任务卡住的话,不仅这次调度失败,而且整个线程池也会停在这次调度上。我们先从一个例子试着复现...
2018-07-04 15:40:08
8091
2
原创 延迟加载单例模式(IoDH)引发的NoClassDefFoundError
一、问题背景最近题主发布在公司的SDK遇到了一个Bug。有关单例模式的,什么问题呢? 我们先回想下,单例模式怎么写。(https://www.jianshu.com/p/f71fabb46233)简而言之: - 私有的构造方法 - 提供一个静态可以获取实例对象的方法其分类可大致分为: - 非延迟加载(饿汉) - 延迟加载(懒汉等)问题: 题主使用的是:initializ...
2018-07-04 14:39:13
2728
1
原创 30分钟学透设计模式5-从代理模式到AOP
声明:原创文章,转载请注明出处。https://www.jianshu.com/p/99122ea61f2f 设计模式系列: 30分钟学透设计模式1-单例模式的前世今生 30分钟学透设计模式2-随处可见的Builder模式 30分钟学透设计模式3-使用最多的Iterator模式 30分钟学透设计模式4-最简单的面向接口编程-简单工厂模式 30分钟学透设计模式5...
2018-06-29 16:28:28
340
原创 30分钟学透设计模式4-最简单的面向接口编程-简单工厂模式
声明:原创文章,转载请注明出处。https://www.jianshu.com/p/39609c79c646 设计模式系列: 30分钟学透设计模式1-单例模式的前世今生 30分钟学透设计模式2-随处可见的Builder模式 30分钟学透设计模式3-使用最多的Iterator模式 30分钟学透设计模式4-最简单的面向接口编程-简单工厂模式一、概述1、...
2018-05-11 14:58:25
296
原创 30分钟学透设计模式3-使用最多的Iterator模式
设计模式系列: 30分钟学透设计模式1-单例模式的前世今生 30分钟学透设计模式2-随处可见的Builder模式 30分钟学透设计模式3-使用最多的Iterator模式一、栗子先从一个简单的栗子说起,有一个ArrayList需要遍历,通常怎么去做呢?List&amp;lt;String&amp;gt; list = new ArrayList&amp;lt;String&amp;gt;(...
2018-03-20 18:29:13
283
原创 30分钟学透设计模式2-随处可见的Builder模式
设计模式系列: 30分钟学透设计模式1-单例模式的前世今生 30分钟学透设计模式2-随处可见的Builder模式 30分钟学透设计模式3-使用最多的Iterator模式一、概述Builder模式:主要用于复杂对象的构建,通过使用该模式可以有效地减少构造函数或方法传入的参数数量。 这对于有很多配置项的来初始化的对象非常适用。通俗的讲,builder模式是一步步...
2018-01-18 22:00:55
340
原创 Anconda使用及整合到Pycharm
1、说明anconda可以用来管理python的各种环境,尤其是python2和python3这种。2、使用查看当前安装的环境: conda info -e创建一个python34的环境,指定python 版本为3.4 conda create --name python34 python=3.4安装好后,激活这个环境 activate python34退出这个环
2018-01-14 21:21:43
12206
原创 每天一算法:遗传算法
一、概述遗传算法(Genetic Algorithm)遵循自然界“适者生存、优胜劣汰”的原则,是一类借鉴生物界自然选择和自然遗传机制的随机化搜索算法。二、算法流程1、基因编码对一些个体的基因做一个编码操作,描述出这些基因的结构。根据常识,在生物的每个细胞中,都存在相同的一套染色体(chromosome),即DNA组合的聚合体。 因此,我们可以将这些染色体由数字0和
2018-01-14 21:19:47
1613
原创 SpringBoot入门-快速设置拦截器并实现权限验证
本文中的代码详见:https://github.com/hawkingfoo/springboot-interceptor一、概述拦截器的使用场景越来越多,尤其是面向切片编程流行之后。那通常拦截器可以做什么呢? 之前我们在Agent介绍中,提到过统计函数的调用耗时。这个思路其实和AOP的环绕增强如出一辙。那一般来说,场景如下:函数增强:比如对一个函数进行参数检查,或者结果过
2018-01-14 21:09:20
5370
原创 Java字节码4-使用Java-Agent实现一个JVM监控工具
Java字节码系列 Java字节码1-Agent简单上手 Java字节码2-instrument初体验 Java字节码3-使用ByteBuddy实现一个Java-Agent Java字节码4-使用Java-Agent实现一个JVM监控工具 本系列代码可见:https://github.com/hawkingfoo/demo-agent一、概述在前面几节当中,
2017-12-06 18:31:16
6189
3
原创 30分钟学透设计模式1-单例模式的前世今生
设计模式系列: 30分钟学透设计模式1-单例模式的前世今生 30分钟学透设计模式2-随处可见的Builder模式 30分钟学透设计模式3-使用最多的Iterator模式一、概述单例模式:是一种对象创建模式,用于产生一个对象的实例。可以确保系统中一个类只产生一个实例。好处: - 对于频繁使用的对象,可以省略创建对象所花费的时间。 - 由于new操作次数的...
2017-12-03 22:17:01
400
原创 SpringBoot入门-快速整合Mybatis
一、概述上一节中,我们分享了SpringBoot快速建立一个web项目,本节中我们将在web项目中引入数据库相关的操作。即SpringBoot通过整合MyBatis访问数据库。二、快速整合Mybatis1、修改pom.xml,添加依赖 <parent> <groupId>org.springframework.boot</groupId> <artifactId
2017-11-30 18:43:57
544
原创 SpringBoot入门-快速搭建web服务
一、介绍Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。通过这种方式,Spring Boot致力于在蓬勃发展的快速应用开发领域(rapid application development)成为领导者。二、优点如果我们要Spring写一个HelloWorl
2017-11-21 23:04:47
2105
原创 Mockito入门及配合Junit进行单元测试
一、背景最近一段时间在给写的框架补单元测试。发现有一些方法做单元测试不好做,主要是其内部依赖了许多外部环境,如Zookeeper、DB、Http请求等等。 如果为了这些单元测试单独去搞一套环境,很是费事。再者代码每天在Jenkins上跑单元测试,环境不一定相通。如果您面临上述相同的问题,可以继续向下看。 二、一个例子2.1 需要做单元测试的代码假设我们有下面这样一个类,其中的isAdmin方法主
2017-11-17 14:08:29
938
原创 我的Chrome插件 - 持续更新
1、Stylish官网:https://userstyles.org/ 这个插件主要是通过安装一些主题来改变一些网站的主题。1.1 谷歌搜索插件1.2 简书浏览插件1.3 轻百度插件
2017-11-12 21:20:12
583
原创 gitbook使用教程
一、gitbook editor编辑book1、下载gitbook editor2、编辑图书采用Markdown语法书写book。二、生成HTML文档1、安装nodejs2、安装gitbooknpm install -g gitbook-cli查看gitbook是否安装成功:gitbook -V3、生成文档并预览进入到图书目录,Windows一般在C:\Users\userName\GitBook\
2017-11-12 21:18:06
973
原创 Docker入门
1、概念Dockerfile:一个文本格式的配置文件,可以使用Dockerfile快速构建自定义镜像。镜像:用来构建这个环境的模板。通过同一个镜像,可以构造出很多独立但运行环境一样的容器。容器:一套程序运行的虚拟环境。关系: 2、常用命令 功能 命令 查看Docker信息 docker info 查看容器列表 docker ps 运行docker容器(centos
2017-11-12 21:15:30
260
原创 使用IntelliJ idea开发Spring MVC服务
1、环境清单Intellij idea 2017.1.1 UltimateJDK 1.8.0_121Maven 3.5.0Jetty 9.2.21.v20170120Spring 4.3.8.RELEASE具体代码请参照:https://github.com/hawkingfoo/webDemo2、环境配置分别按照上面的清单,下载并配置好IDE、JDK、Maven和Jetty。3、Mav
2017-11-12 21:13:31
4693
1
原创 Java多线程2:线程池的使用
一、线程池的使用1、单线程线程池public class SingleThread { public static void main(String[] args) { ExecutorServic eexecutor = Executors.newSingleThreadExecutor(); for (inti = 0; i < 5; i++) {
2017-11-12 21:07:59
267
原创 Java多线程1:创建的三种方式以及比较
1、继承Thread类public class ThreadA extends Thread { // 直接继承Thread,并覆盖其run()方法 @Override public void run() { System.out.println("ThreadA"); }}2、实现Runnable接口 Java为单亲继承,一个类只能唯一继承另一
2017-11-12 21:05:00
219
原创 Java并发系列6-Fork/Join框架
一、介绍1、Fork/Join框架是Java7提供了的一个用于并行执行任务的框架, 是一个把大任务分割成若干个小任务,最终汇总每个小任务结果后得到大任务结果的框架。Fork:把一个大任务切分为若干子任务并行的执行。 Join:合并这些子任务的执行结果,最后得到这个大任务的结果。 上图中,上部的Task依赖于下部的Task执行,只有当各个子任务执行完成后,才能得到Task0的返回结果。2、原理
2017-11-12 21:03:04
282
原创 Java反射使用总结
一、概述反射:指程序可以访问,检测和修改它本身状态或行为的一种能力,并能根据自身行为的状态和结果,调整或修改应用所描述行为的状态和相关的语义。也就是可以获取正在运行的Java对象。反射作为Java中一个强大的工具,不仅可以很方便创建灵活的代码,而且对一些其他第三方代码可以进行增强。 其主要功能主要有: 1、可以判断运行时对象所属的类 2、可以判断运行时对象所拥有的成员属性和方法 3、生成动态
2017-11-12 20:55:23
284
原创 Java字节码3-使用ByteBuddy实现一个Java-Agent
Java字节码系列 Java字节码1-Agent简单上手 Java字节码2-instrument初体验 Java字节码3-使用ByteBuddy实现一个Java-Agent Java字节码4-使用Java-Agent实现一个JVM监控工具 本系列代码可见:https://github.com/hawkingfoo/demo-agent一、概述在前面两节中,我
2017-11-09 21:59:05
12639
5
原创 Java字节码2-instrument初体验
Java字节码系列 Java字节码1-Agent简单上手 Java字节码2-instrument初体验 Java字节码3-使用ByteBuddy实现一个Java-Agent Java字节码4-使用Java-Agent实现一个JVM监控工具 本系列代码可见:https://github.com/hawkingfoo/demo-agent一、概述在上一节中Jav
2017-11-08 18:08:44
3036
1
原创 Java字节码1-Agent简单上手
Java字节码系列 Java字节码1-Agent简单上手 Java字节码2-instrument初体验 Java字节码3-使用ByteBuddy实现一个Java-Agent Java字节码4-使用Java-Agent实现一个JVM监控工具 本系列代码可见:https://github.com/hawkingfoo/demo-agent一、概述Java Age
2017-10-27 17:15:03
4658
2
原创 Java序列化高级
在上一节Java序列化基础中,介绍了JDK自带的序列化方式。本节,将介绍一些常见的序列化框架。1、XML和JSONXML和JSON是两种常见的数据传输格式,由于Json格式使用场景更广,序列化体积小的优点,以下将重点介绍Json序列化以及反序列化。添加Maven依赖,使用FastJson作为序列化工具,其他的还有Jackson、Gson等Json序列化工具。<dependency> <gr
2017-10-27 14:31:58
254
原创 Java序列化基础
1、序列化概念序列化:把对象转换为字节序列的过程。 反序列化:把字节序列恢复为对象的过程。对象的序列化主要有两种用途 - 把对象的字节序列永久地保存到硬盘上,通常存放在一个文件中; - 在网络上传送对象的字节序列。在很多应用中,需要对某些对象进行序列化,让它们离开内存空间,入住物理硬盘,以便长期保存。 当两个进程在进行远程通信时,彼此可以发送各种类型的数据。无论是何种类型的数据,都会以二进制
2017-10-27 14:24:44
507
原创 RPC-01-架构
1、简介RPC全称是Remote Procedure Call,它是一种进程间通信方式。允许像调用本地服务一样调用远程服务,它的具体实现方式可以不同,例如Spring的HTTP Invoker,Facebook的Thrift 二进制私有协议通信。RPC概念术语在上世纪80年代由Bruce Jay Nelson提出,在他的论文中对RPC进行了如下总结。 - 简单:RPC概念的语义十分清晰和简单,这
2017-07-03 09:36:21
439
原创 RPC-02-Thrift
1、概述Thrift是一个软件框架,用来进行可扩展且跨语言的服务的开发。它结合了功能强大的软件堆栈和代码生成引擎,以构建在 C++, Java, Python, PHP, Ruby, Erlang, Perl, Haskell, C#, Cocoa, JavaScript, Node.js, Smalltalk, and OCaml 等等编程语言间无缝结合的、高效的服务。 Thrift最初由fac
2017-07-03 09:35:38
514
原创 IntelliJ Idea 远程调试Java服务
1、背景在很多情况下,服务端程序部署在远程,某部分逻辑出现问题时,不停地对代码修改,增加log查出问题根源。但是,有些服务启动时间较长、不断的打包、上传、测试会令人非常头疼。因此,可以使用远程调试的方式对远程部署的服务调试。2、准备idea IDE、远程服务源码远程服务测试客户端3、部署图由于是对源码进行调试,源码经编译后运行在远程服务器上,并且在本地Idea IDE中打开源码。在Idea连
2017-07-03 09:34:06
19798
10
原创 Java常用命令及性能调优工具
1、Linux命令1.1 top命令 top命令的输出可以分为上下两部分:系统统计信息和进程统计信息。系统统计信息: - 第一行:任务队列信息。等同于uptime命令。20:30:40 up 71 days, 21:36, 1 user, load average: 0.15, 0.16, 0.13系统当前时间、系统运行时间、当前登录用户数。load average表示系统的平均负载(1分钟
2017-07-03 09:32:59
1861
1
原创 Apache Jmeter进阶-RPC服务压测
在上一节Apache Jmeter入门中,我们简单介绍了Jmeter的使用方法。 本节中,我们将着重介绍Jmeter压测,以Thrift RPC为例子进行讲解。1、准备我们依然采用Thrift RPC这节中的RPC服务作为服务端程序并运行。2、Jmeter测试类编写2.1 Jmeter测试类简介新建一个普通的Java工程添加JMeter Maven依赖。<dependency> <g
2017-07-03 09:31:24
1527
2
原创 Apache Jmeter入门
1、简介Apache JMeter是Apache组织开发的基于Java的压力测试工具。用于对软件做压力测试,它最初被设计用于Web应用测试但后来扩展到其他测试领域。 它可以用于测试静态和动态资源例如静态文件、Java小服务程序、CGI脚本、Java 对象、数据库, FTP服务器, 等等。 JMeter 可以用于对服务器、网络或对象模拟巨大的负载,来在不同压力类别下测试它们的强度和分析整体性能。
2017-07-03 09:30:42
454
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人