自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(83)
  • 资源 (3)
  • 收藏
  • 关注

原创 设计模式最优实践—管道模式

设计模式

2021-12-13 01:23:58 606

原创 设计模式最优实践—策略模式

什么策略模式策略模式就是定义一组策略,分别在不同的类中封装,每种策略可以根据当前的场景互相替换,策略的之间的变化是独立的。比如我们要从杭州到上海,可以根据自身的情况,来选择是乘坐火车、汽车、高铁,这些出行方式就是不同的策略。合适使用策略模式当代码中的if else 超过3层情况,是时候考虑使用策略模式的代替了,好的代码是符合单一职责和开闭原则的。怎么使用策略模式第一步,定义策略接口,包括3个方法:1、获取策略方法2、是否执行策略逻辑,这个后面方便管理3、处理策略逻辑的方法.

2021-12-12 22:41:53 274

原创 Spring Bean 生命周期

2021-01-17 22:55:49 157

原创 spring Bean 作用域

2021-01-10 22:45:46 130

原创 spring Ioc 依赖来源

2021-01-03 22:25:06 92

原创 spring ioc 注入学习笔记

2020-12-27 23:06:08 81

原创 业务开发常见错误100例

2020-06-12 22:09:38 260

原创 HTTP压测工具Wrk 介绍和使用

介绍wrk是一款简单的HTTP压测工具,托管在Github上,https://github.com/wg/wrk.wrk 的一个很好的特性就是能用很少的线程压出很大的并发量. 原因是它使用了一些操作系统特定的高性能 io 机制, 比如 select, epoll, kqueue 等. 其实它是复用了 redis 的 ae 异步事件驱动框架. 确切的说 ae 事件驱动框架并不是 redis 发明的, 它来至于 Tcl的解释器 jim, 这个小巧高效的框架, 因为被 redis 采用而更多的被大家所熟知.

2020-05-12 15:30:28 975

原创 线上问题定位处理的工具Arthas

前言在使用Arthas之前,当遇到 Java 线上问题时,如 CPU 飙升、负载突高、内存溢出等问题,你需要查命令,查网络,然后 jps、jstack、jmap、jhat、jstat、hprof 等一通操作。最终焦头烂额,还不一定能查出问题所在。而现在,大多数的常见问题你都可以使用Arthas轻松定位,迅速解决,及时止损,准时下班。1、Arthas 介绍Arthas是Ali...

2020-04-22 11:12:53 277

原创 异步执行一组任务等待所有任务执行完成的2种方式

private static ThreadPoolExecutor threadPool = new ThreadPoolExecutor(5, 10, 60, TimeUnit.SECONDS, new ArrayBlockingQueue<>(1000), new ThreadFactoryBuilder().setNameFormat("metrix-pool...

2020-04-18 21:53:58 888

原创 Spring 声明式事务中常见的坑点

背景我们在业务代码中经常使用数据库的事务,及spring 声明式事务@Transcational, 但也经常遇到事务不生效的情况,总结起来主要是踩到下面的几个坑去了。一、配置不正确导致方法上的事务没生效,需要确认@Transctional注解标记的方法必须是public的,并且是通过spring注入的Bean进行调用的,不能在本方法中直接调用。二、异常处理不正确导致事务虽然生效...

2020-03-23 10:47:57 2304

原创 springboot 中异步调用 使用@Async

一、背景对于一些的耗时的且与处理结果业务不是紧密关联的,我们采用异步调用的方式处理。一般我们会手动创建一个线程池,来执行这个耗时的异步任务。其实spring 已经提供了一个注解来帮我们干了这件事了二、使用方式使用方式就是很简单了1、在启动类中加入@EnableAsync 是异步调用 @Asyncz注解生效2、在需要异步执行的方法上加上@Async,也可以在类上面加,表示该类中的...

2020-03-14 22:07:40 201

转载 GitHub上最牛逼的10个Java项目

以下文章来源于阿飞的博客,作者阿飞的博客1. CS-Notesstar:92.1k 介绍:技术面试必备基础知识、Leetcode、计算机操作系统、计算机网络、系统设计、Java、Python、C++ ;地址:https://cyc2018.github.io/CS-Notes;其中,算法包括:剑指 Offer 题解、Leetcode 题解、算法、笔试面试题库。数据库包括:数据库系...

2020-03-01 17:28:17 8278

原创 去if-else化 (二),利用充血枚举类型

充血枚举类型——Rich Enum Type 模式的优势: 不难发现,这其实就是 enum 枚举类型和 Strategy Pattern 策略模式的巧妙结合运用; 当需要增加新的通知方式时,只需在枚举类 NOTIFY_TYPE 增加一个值,同时在策略接口 NotifyMechanismInterface 中增加一个 by 方法返回对应的策略实现; ...

2020-02-19 15:32:37 1047

原创 重试工具库二:AOP 结合 guava retryer 实现接口自动重试

上一篇文章中介绍了Retryer 强大的工具库,以及创建方式。重试工具库一: Guava-Retrying。本篇文章我们通过面向切面结合guava的这个强大的工具类,来实现只需要添加一行注解即可的自动重试机制。注解:@Target(ElementType.METHOD)@Retention(RetentionPolicy.RUNTIME)public @interface R...

2020-02-09 22:47:42 674 2

原创 重试工具库一: Guava-Retrying

在我们的开发中,api接口调用异常是经常会遇到的,任何接口都会有不同概率的异常情况,对于可以重入的接口,为了避免偶发性异常造成的服务的不可用,重试机制就非常有必要了.Guava-Retryiny 是一个非常灵活的重试组件,包含多种重试策略,扩展很方便。一、maven依赖<dependency> <groupId>com.github.rholder</g...

2020-02-09 22:39:14 1501

原创 垃圾回收的优化

回收发生在哪里JVM内存区域中:程序计数器、虚拟机栈、本地方法这个3个区域是线程私有的,堆和方法区则是线程共享的。那么垃圾回收重点关注的是堆和方法区。堆中是对对象的回收,方法区是对常量和类的回收。...

2020-02-03 09:35:37 162

原创 HTTP 连接池的使用

一、HTTP 的长短连接问题HTTP1.0 当时用的还是短连接的方式,就是每次的请求都要建立一次TCP连接,创建TCP连接和关闭TCP的连接都是耗时的过程。HTTP1.1 则对HTTP1.0做了很大的改进,默认使用的是长连接的方式。减少了建立连接和关闭连接的消耗。二、httpClient 的使用后端发送HTTP请求,一般使用的是apache里面的这个jar包 <dep...

2020-02-01 11:35:56 1074

原创 线上问题定位—cpu飚高

服务器CPU突然告警,如何定位是哪个服务进程导致CPU过载,哪个线程导致CPU过载,哪段代码导致CPU过载?步骤一、找到最耗CPU的进程工具:top方法: 执行top -d 1-c,每秒刷新一次,显示进程运行信息列表 键入P(大写p),进程按照CPU使用率排序 图示:如上图,最耗CPU的进程PID为1802步骤二:找到最耗CPU的线程工具:top...

2020-01-28 13:45:36 2676

原创 多线程-锁优化

一、Synchronized同步锁的优化Synchronized 在JDK1.5 之前是JVM实现一种内置锁,是基于底层的操作系统的Mutex Lock 实现的,所以会带来用户态和内核态的切换问题。JDK1.6 对锁的升级优化:针对java对象头,引入了分级锁的机制。1、当一个线程获取锁时,首先对象锁将成为一个偏向锁,这样的优化了一个线程重复获取锁导致的用户态和系统内核态的切换问题。2、当...

2020-01-28 13:06:32 193

原创 深入理解Java 泛型原理和使用场景

泛型是什么泛型即参数化类型,就是将原来的具体的类型参数化。就像方法变量参数,类型也定义成类型参数,在传入和调用的时候传入具体的类型。看看下面的例子,有没有什么问题? List arrayList = new ArrayList(); arrayList.add("hello"); arrayList.add(1); for (int i...

2019-12-21 23:03:06 591

原创 Java8 新特性LocalDate 线程安全的时间处理类

Java8 新特性中推出了日期处理类LocalDate,实在是太方便了,主要用到是下面的3个类。java.time.LocalDate ->只对年月日做出处理java.time.LocalTime ->只对时分秒纳秒做出处理java.time.LocalDateTime ->同时可以处理年月日和时分秒优点:除了使用起来更加简单和灵活,主要是传统的时期处理类Da...

2019-11-06 14:23:11 4572

原创 多线程解决耗时的调用

多线程处理耗时操作的demo。耗时操作包括DB查询和请求接口。import java.util.List;import java.util.concurrent.Callable;import java.util.concurrent.ExecutorService;import java.util.concurrent.FutureTask;import java.util....

2019-11-05 12:42:47 550

原创 超实用的IntelliJ IDEA 插件

今天介绍一个IDEA的几个插件,IDEA强大的插件库,能够开发带来极大的效率提升1、Free Mybatis pluginmybaits 插件,按照这个这边插件,可以通过mapper接口直接跳转到对接的xml 中的sql 语句,不用在CRTL + F 查找 了,是不是很方便。安装后的效果:Mapper 接口文件;对应的.xml文件:...

2019-08-20 09:31:13 174

原创 解决Maven 打包时的编译错误

一、背景最近有个项目需要提供一个HSF服务,服务接口写好,还要打一个客户端的依赖jar,这个通过aone 平台利用maven打的jar包,由于我自己的项目JDK版本和Java编译器版本都是1.8,所以没有问题,但是现在需要打一个jdk1.7版本的依赖包,报错如下:二、错误分析JAVA_HOME 的版本是1.7 ,但是编译器额版本是1.8,所以导致错误。三、解决方案升级JAV...

2019-05-27 21:54:36 2578

原创 jar 包依赖冲突排查和解决方案

1、何为依赖冲突Maven是个很好用的依赖管理工具,但是再好的东西也不是完美的。Maven的依赖机制会导致Jar包的冲突。举个例子,现在你的项目中,使用了两个Jar包,分别是A和B。现在A需要依赖另一个Jar包C,B也需要依赖C。但是A依赖的C的版本是1.0,B依赖的C的版本是2.0。这时候,Maven会将这1.0的C和2.0的C都下载到你的项目中,这样你的项目中就存在了不同版本的C,这时Mav...

2019-04-10 10:41:19 2526

原创 去if-else化(一),利用工厂模式

if-else是平时写代码中最常用的一种写法,当我们代码量小的时候用来做条件判断是再简单不过的了。当需要判断的情况逐渐增加的时候,上面的代码可能会变的难以维护。这个是在进阶高级开发的路上,应该逐步培养起这种前瞻意识,下面就介绍如何重构这样的代码。 public void test(String str) { if (str.equals("a")) { ...

2019-01-24 14:46:19 605

原创 Java 8 流Stream 的基本使用

一、简介Java 8 API添加了一个新的抽象称为流Stream,可以让你以一种声明的方式处理数据。Stream使用一种类似用SQL语句从数据库查询数据的直观方式来提供一种对Java集合运算和表达的高阶抽象。Stream API可以极大提高Java程序员的生产力,让程序员写出高效率、干净、简洁的代码。这种风格将要处理的元素集合看作一种流,流在管道中传输,并且可以在管道的节点上进行处...

2018-12-11 13:38:35 421

转载 CPU和load 和使用率的介绍

转自:https://www.cnblogs.com/yunxizhujing/p/9382396.html1. 什么是Cpu的Load使用uptime、top或者查看/proc/loadavg都可以看到CPU的load统计,这里有三个值,分别代表1分钟、5分钟和15分钟的CPU Load情况。大部分人认为这三个数值越小说明比较好,如果越高说明系统可能存在问题或负载过高了。...

2018-11-10 15:22:50 290

原创 git pre-commit hook failed 解决办法

一、 git commit -m 'xxx' 出现问题今天在上传项目的时候在commit阶段遇到一个问题,无论是在Sourcetree上传还是用命令git commit -m 'xxx'都报了一下错误:husky &gt; npm run -s precommit (node v8.12.0)husky &gt; pre-commit hook failed (add --no-ver...

2018-11-06 15:56:23 21822 4

转载 hive分区(partition)简介

一、背景1、在Hive Select查询中一般会扫描整个表内容,会消耗很多时间做没必要的工作。有时候只需要扫描表中关心的一部分数据,因此建表时引入了partition概念。2、分区表指的是在创建表时指定的partition的分区空间。3、如果需要创建有分区的表,需要在create表的时候调用可选参数partitioned by,详见表创建的语法结构。二、技术细节1、一个表可以拥...

2018-09-27 15:18:51 16885

原创 Postman 同步浏览器的登录状态

在做接口测试时,经常会用到postman,用它来测试post接口特别方便,但是需要登录的接口就会被跳转到登录页面去了。可用Postman Interceptor 插件来帮我们完成浏览器的登录同步,具体安装步骤如下:一、先安装Postman Interceptor(Chrome商店搜索)二、点击chrome上相应图标,点击Postman Chrome app三、打开上面的开关,会自动同步你的浏览器的...

2018-07-10 19:52:52 6371

原创 IDEA 用鼠标控制缩放大小

快捷键:command + 鼠标滚动

2018-06-21 17:43:45 9037

转载 IntelliJ IDEA For Mac 快捷键

http://www.cnblogs.com/wxd0108/p/5295017.htmlMac键盘符号和修饰键说明⌘ Command⇧ Shift⌥ Option⌃ Control↩︎ Return/Enter⌫ Delete⌦ 向前删除键(Fn+Delete)↑ 上箭头↓ 下箭头← 左箭头→ 右箭头⇞ Page Up(Fn+↑)⇟ Page Down(Fn+↓)Home Fn + ←End F...

2018-06-01 14:25:10 289

原创 MAC 环境下安装JDK

在mac电脑上开发java,需要配置java环境变量,mac不同于windows系统。不过呢,配置流程也相对简单。首先查看,电脑上是否装了jdk。在终端输入  java -version如果没有安装过jdk会提示 需要安装jdk。2jdk下载地址是如下网址,我下的jdk8http://www.oracle.com/technetwork/java/javase/downloads/jdk8-dow...

2018-05-12 16:23:17 434

原创 《Effective Java》第二章 对于所有对象都通用的方法

接下来继续讲第二章,第8-12条。第8条:覆盖equals时请遵守通用约定equals 时Object类的一个非final方法,一般是表示类的实例对象是否相同,也就是对象的地址是否相等。但是某些时候却要重写Object.equals方法。即类需要有“逻辑相等”,也就是值类,这都需要重写equals方法。这样这个类的实例可以用做Map的key中。有一种值类就不需要重写equals,就是单例模式的类,...

2018-05-11 19:39:05 315

原创 《Effective Java》第一章 创建和销毁对象

Java经典书籍《Effective Java(第二版)》相信大家都看过,此书共有78条关于编写高质量Java代码的建议,这里是通俗易懂地讲解,会持续全部更新完78条,希望大家每天读一篇,一起学完这78条,相信可以写出高质量代码。今天先看第一章的1到7条。第1条:考虐用静态工厂方法代替构造器用静态工厂方法就是类提供一个公有的静态共有方法,它就是一个返回类实例的方法;如下面所示: public...

2018-05-10 22:14:08 363

转载 Java7 ConcurrentHashMap 原理及源码分析

ConcurrentHashMap 和 HashMap 思路是差不多的,但是因为它支持并发操作,所以要复杂一些。整个 ConcurrentHashMap 由一个个 Segment 组成,Segment 代表”部分“或”一段“的意思,所以很多地方都会将其描述为分段锁。注意,行文中,我很多地方用了“槽”来代表一个 segment。简单理解就是,ConcurrentHashMap 是一个 Segment...

2018-03-18 20:45:52 215

转载 HashMap实现原理及源码分析

最近在看HashMap源码,发现一篇讲hashMap原理的文章,讲的很透彻,记录下来。原文地址:https://www.cnblogs.com/chengxiao/p/6059914.html哈希表(hash table)也叫散列表,是一种非常重要的数据结构,应用场景及其丰富,许多缓存技术(比如memcached)的核心其实就是在内存中维护一张大的哈希表,而HashMap的实现

2018-03-11 13:31:50 179

原创 RocketMQ单实例的搭建

先说明一下我的安装环境:1、jdk1.8  2、git这里 git 可用可不用,主要是用来直接下载 github 上的源码。也可以选择自己到github 上下载,然后上传到服务器上。以git操作为示例。git clone https://github.com/alibaba/RocketMQ.git ##从github上下载RocketMQ开源项目cd RocketMQ ##进入文件夹...

2018-03-06 15:25:51 581

java面试大全

java面试知识点大全、包括基础知识、数据结构、算法、jvm、并发、多线程技术、数据库技术、常用框架spring、分布式技术、缓存技术等等

2018-04-19

java规范的代码编写

java代码规范,包括变量命名,编写规范、漂亮代码的所有正确的规范

2015-07-22

Java ee课件

hibenrante课件,详细讲解了hibernate的开发流程和关键技术

2015-06-14

空空如也

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

TA关注的人

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