自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(55)
  • 收藏
  • 关注

原创 开发小记 - 用函数式编程优化代码可读性,减少一半行数

前言本文主要是记录一下用lambda 表达式优化代码的经历,篇幅不长,算是分享我觉得不错的一个小技巧。话不多说,直接进入正题。正文我们先来看这么一段代码:@Componentpublic class ConfigCacheHelper { private...

2020-03-05 00:00:00 519 1

原创 传统 Spring MVC 集成 Prometheus

前言春节前的两个星期,本人研究了Spring Boot 应用集成Prometheus + Grafana实现监控告警功能。Spring Boot Actuator 模块 详解:健康检查,度量,指标收集和监控SpringBoot 微服务应用集成Prometheus + ...

2020-02-28 00:00:00 2517 2

原创 微服务核心架构梳理

原文链接:https://blog.tengshe789.tech/2018/12/08 / 微服务核心架构梳理在公司学习了将近一个月。一个月内,从 0 开始开始接触分布式微服务架构,给了我不小的收获。今天,我来从头到尾梳理一下,有关微服务架构的核心内容。阅读本文你将看...

2020-02-26 00:00:00 423

原创 【开发笔记】Java 中 AES 加密时报错:Illegal key size or default parameters

Java中使用AES对称加密后,请求报错:Caused by: java.lang.RuntimeException: java.security.InvalidKeyException: Illegal key size or default parameters ...

2020-02-17 00:00:00 341

原创 这几个关于Spring 依赖注入的问题你清楚吗?

前言本章的内容主要是想探讨我们在进行Spring 开发过程当中,关于依赖注入的几个知识点。感兴趣的读者可以先看下以下问题:@Autowired, @Resource, @Inject 三个注解的区别当你在使用@Autowired时,是否有出现过Field inje...

2020-02-03 00:00:00 903

原创 向您生动地讲解Spring AOP 源码(3)

前言往期文章:Spring IoC - Spring IoC 的设计Spring IoC - IoC 容器初始化 源码解析Spring IoC - 依赖注入 源码解析向您生动地讲解Spring AOP 源码(1)向您生动地讲解Spring AOP 源码(2)在上一章向您生动地讲解Spring AOP 源码(2)中,作者介绍了【如何获取对应 Bean 适配的Advisors 链】。...

2020-01-22 10:21:46 184

原创 向您生动讲解Spring AOP 源码(2)

前言往期文章:Spring IoC - Spring IoC 的设计Spring IoC - IoC 容器初始化 源码解析Spring IoC - 依赖注入 源码解析向您生动地讲解Spring AOP 源码(1)在上一章向您生动地讲解Spring AOP 源码(1)中,作者介绍了【开启AOP自动代理的玄机】和【自动代理的触发时机】。在本章中,作者会向您介绍,Spring AOP ...

2020-01-22 10:21:10 194

原创 代码以外的生存之道

愿所有自强不息、孜孜不倦地持续自我改进的开发人员都能在代码之外,找到自己的最佳生存之道。前言最近刚刚读完了一本书,深受启发,想和各位程序员同道分享一二,也强烈建议大家去阅读一下。这本书叫做 《软技能:代码以外的生存之道》,本章的名字也截选与此。这本书虽说是一名程序员所写,但是通篇没有一行代码。但这确是一本我步入这个行业以来,读过最棒的有关程序员的书籍,因为他讲了作为一名软件工作者,在...

2020-01-22 10:20:31 282

原创 向您生动地讲解Spring AOP 源码(1)

前言在Spring AOP - 注解方式使用介绍(长文详解)中,作者介绍了Spring AOP 注解方式的使用方式。算是给咱们的Spring AOP 源码分析开了个头,做了一点知识点的铺垫。在开始学习Spring AOP的源码之前,如果你还没有学习过Spring IoC的源码,最好先去学习下Spring IoC。Spring IoC - Spring IoC 的设计Spring IoC ...

2020-01-22 10:18:58 213

原创 Spring AOP - 注解方式使用介绍(长文详解)

前言之前的源码解析章节,本人讲解了Spring IOC 的核心部分的源码。如果你熟悉Spring AOP的使用的话,在了解Spring IOC的核心源码之后,学习Spring AOP 的源码,应该可以说是水到渠成,不会有什么困难。但是直接开始讲Spring AOP的源码,本人又觉得有点突兀,所以便有了这一章。Spring AOP 的入门使用介绍:包括Spring AOP的一些概念性介绍和配置使...

2020-01-22 10:17:53 986

原创 微服务杂谈 - 为什么大公司一定要使用微服务

作者:飒然Hang,《Java工程师修炼之道》作者原文地址 https://www.rowkey.me/blog/2019/05/30/msa/前言这几年在Java工程师招聘时,会看到很多人的简历都写着使用了Spring Cloud做微服务实现,使用Docke...

2020-01-22 00:00:00 331

原创 [纯干货] 如何用Spring 原生注解 快速实现策略模式+工厂模式

前言这阵子在做项目组重构的工作,工作中的一部分就是就目前代码库中与企业交互的逻辑抽离出来,单独做一个微服务,实现企业交互逻辑的关注点分离。在这里面我很自然而然的就用到了策略模式 + 工厂模式的方式,包装内部实现细节,向外提供统一的调用方式,有效的减少if/else的业务代码,使得代码更容易维护,扩展。之前看过一些文章,是使用自定义注解+自动BeanProcessor的方式来实现,个人感觉有...

2020-01-21 14:30:41 639

原创 Spring Bean 生命周期 (实例结合源码彻底讲透)

前言本篇文章主要是要介绍如何在Spring IoC 容器中 如何管理Spring Bean生命周期。在应用开发中,常常需要执行一些特定的初始化工作,这些工作都是相对比较固定的,比如建立数据库连接,打开网络连接等,同时,在结束服务时,也有一些相对固定的销毁工作需要执行。为了便于这些工作的设计,Spring IoC容器提供了相关的功能,可以让应用定制Bean的初始化和销毁过程。Spring Be...

2020-01-21 14:30:01 381

原创 Spring IoC - 依赖注入源码解析

前言上一篇文章中,我们介绍了Spring IoC 的容器初始化过程 - IoC 容器初始化本篇文章中,我们继续介绍Spring IoC 依赖注入的过程和源码解读。还是如之前一样,为大家梳理一下步骤流程,以便于大家能在心里有个大概的脉络,更容易读懂源码,更容易抓住重点。主要内容:beanName 解析转换手动注册Bean检测双亲容器检测依赖初始化(递归)★ 创建singleto...

2020-01-21 14:28:49 127

原创 Spring IoC - 依赖注入源码解析

前言上一篇文章中,我们介绍了Spring IoC 的容器初始化过程 - IoC 容器初始化本篇文章中,我们继续介绍Spring IoC 依赖注入的过程和源码解读。还是如之前一样,为大家梳理一下步骤流程,以便于大家能在心里有个大概的脉络,更容易读懂源码,更容易抓住重点。主要内容:beanName 解析转换手动注册Bean检测双亲容器检测依赖初始化(递归)★ 创建singleto...

2020-01-21 14:22:48 352

原创 Spring IoC - IoC 容器初始化 源码解析

前言本章主要内容是由以下部分组成,Spring 中容器初始化入口以最经典的ClassPathXmlApplicationContext 为例,讲解Spring IoC 的容器初始化过程在学习源码的过程当中,我想强调两点:一定要学会抓重点,归纳核心类、核心方法、核心步骤。理解类、变量、方法名的命名,Spring 源码的命名是很讲究的,很多时候是自解释的一定要学会看Java do...

2020-01-21 14:21:12 239

原创 Spring IoC - Spring IoC 的设计

前言本文为解读Spring IoC 模块源码的开篇介绍。介绍Spring IoC 的相关概念与设计。What is IoC控制反转(Inversion of Control,缩写为IoC),是面向对象编程中的一种设计原则,可以用来减低计算机代码之间的耦合度。其中最常见的方式叫做依赖注入(Dependency Injection,简称DI),还有一种方式叫“依赖查找”(Dependency...

2020-01-21 14:20:34 250 1

原创 Spock in Java 慢慢爱上写单元测试

前言最近小组里面引进了Spock这个测试框架,本人在实际使用了之后,体验非常不错,本篇文章一是为了巩固输入的知识,二是为了向大家推广一下。在了解学习Spock测试框架之前,我们应该先关注单元测试本身,了解我们常见的单测痛点,这样才能更好地去了解Spock这个测试框架是什么,我们为什么要使用它,能解决我们什么痛点。现在让我们开始吧。关于单元测试我们写代码免不了要测试,测试有很多种,对于J...

2020-01-21 14:19:55 758 1

原创 微服务设计学习(一)关于微服务和如何建模服务

前言随着互联网在21世纪初被大规模接入,互联网由基于流量点击赢利的单方面信息发布的Web 1.0业务模式,转变为由用户主导而生成内容的Web 2.0业务模式。因此,互联网应用系统所需处理的访问量和数据量均疾速增长,后端技术架构也因此面临着巨大的挑战。Web 2.0阶段的互联网后端架构大多经历了由All in One的单体式应用架构渐渐转为更加灵活的分布式应用架构的过程,互联网开发架构开始追求...

2020-01-20 09:55:33 561

原创 你为什么要看源码?如何看源码?

前言本文主要内容摘自加多大神的《Java并发编程之美》的前言内容,讲了为什么要看源码和如何看源码,讲的很精炼。这部分是属于源码学习方面的方法论,所以单独摘录下来并且总结。为什么要看源码?我们在做项目的时候一般会遇到下面的问题:不知道如何去设计。比如刚入职场时,来一个需求需做概要设计,不知如何下手,不得不去看当前系统类似需求是如何设计的,然后仿照去设计。设计的时候,考虑问题不周全。相比职...

2020-01-20 09:54:45 564

原创 Java 容器 - 一文详解HashMap

Map 类集合Java Map类集合,与Collections类集合存在很大不同。它是与Collection 类平级的一个接口。在集合框架中,通过部分视图方法这一根 微弱的线联系起来。(在之后的分享中,我们会讨论到Collections 框架的内容)Map类集合中的存储单位是K-V键值对,就是 使用一定的哈希算法形成一组比较均匀的哈希值作为Key,Value值挂在Key上。Map类 的...

2020-01-20 09:52:34 210

原创 Spring源码 - FactoryBean 应用拓展(附源码解析)

前言在学习Spring Core中IOC容器时,你肯定会接触到BeanFactory这个Spring中最基础的IOC容器。这个应该是大家学习Spring源码时最先接触到的类了。Spring中还存在这一个FactoryBean类,两者拼写上十分相似,并且使用频率都十分得高。在一些Spring面试题,也会问你这两者有什么区别。这里先说结论:BeanFactory:Spring中的IoC容器,所...

2020-01-20 09:51:28 154

原创 Spring Boot 微服务应用集成Prometheus + Grafana 实现监控告警

前言关键词:Prometheus; Grafana; Alertmanager; SpringBoot; SpringBoot Actuator; 监控; 告警;在前一篇Spring Boot Actuator 模块 详解:健康检查,度量,指标收集和监控中,我们学习了...

2020-01-20 00:00:00 424

原创 JMH - Java 微基准测试工具

前言“If you cannot measure it, you cannot improve it”.在日常开发中,我们对一些代码的调用或者工具的使用会存在多种选择方式,在不确定他们性能的时候,我们首先想要做的就是去测量它。大多数时候,我们会简单的采用多次计数的方式来测量,来看这个方法的总耗时。但是,如果熟悉JVM类加载机制的话,应该知道JVM默认的执行模式是JIT编译与解释混合执行...

2020-01-19 12:23:35 236

原创 Java 基础 - 并不神奇的泛型

前言前阵子给公司新人培训Java 基础相关的一些点,系统整理了一下泛型相关的知识点。特来分享一下。希望能让一些对泛型不熟悉的同学完全掌握Java 泛型的相关知识点。开始之前,先给大家来一道测试题。List<String> strList = new ArrayList<String>();List<Integer> integerList = new A...

2020-01-19 12:20:56 112

原创 IntelliJ IDEA 超实用使用技巧分享

前言工欲善其事​ 必先利其器最近受部门的邀请,给入职新人统一培训IDEA,发现有很多新人虽然日常开发使用的是IDEA,但是还是很多好用的技巧没有用到,只是用到一些基本的功能,蛮浪费IDEA这个优秀的IDE。 同时,在这次分享之后,本人自己也学习到了一些新的使用技巧,所以借着这次机会,一起分享出来。希望可以帮到一些人。基于的 IDEA 版本信息:IntelliJ IDEA 2018....

2020-01-19 12:19:53 305

原创 Java 容器 - 集合世界的fail-fast机制 和 CopyOnWriteArrayList 源码详解

前言知识点概览:容器中的设计模式从Arrays.asList() 看集合与数组的关系集合世界中的 fail-fast 机制什么是 fail-fast 机制ArrayList.sublist() 有什么坑?foreach 循环里为什么不能进行元素的 remove/add 操作?集合世界中的 fail-safe 机制copy-on-write 机制Cop...

2020-01-19 12:14:53 254

原创 Java 容器 - 详细剖析 List 之 ArrayList, Vector, LinkedList

前言知识点概览:ArrayList 与 LinkedList对比ArrayList 中的 RandomAccess 接口 是什么?LinkedList 中的 Deque 接口 是什么?老调常谈 之 ArrayList 扩容机制ArrayList 与 Vector 对比ArrayList 与 LinkedList对比底层数据结构:ArrayList 底层使用的Obj...

2020-01-19 12:13:43 161

原创 Java 多线程 - CAS

前言记录在学习线程安全知识点中,关于CAS的有关知识点。线程安全是指:多个线程不管以何种方式访问某个类,并且在主调代码中不需要进行同步,都能表现正确的行为。常见的线程安全实现方法分为不可变对象、线程互斥同步、非阻塞同步、线程本地存储等方案,本文要讲的就是非阻塞同步中的核心CAS.非阻塞同步从处理问题的方式上说,互斥同步属于一种悲观的并发策略。随着硬件指令集的发展,我们可以采用**基于冲...

2020-01-19 12:11:57 121

原创 Java 多线程 - 锁优化(轻量级锁、偏向锁原理及锁的状态流转)

前言为了进一步改进高效并发,HotSpot虚拟机开发团队在JDK1.6版本上花费了大量精力实现各种锁优化。如适应性自旋、锁消除、锁粗化、轻量级锁和偏向锁等。(主要指的是synchronized的优化)。适应性自旋 (自旋锁)为了让线程等待,我们只需要让线程执行一个忙循环(自旋),这项技术就是所谓的自旋锁。引入自旋锁的原因是互斥同步对性能最大的影响是阻塞的实现,管钱线程和恢复线程的操作都需要转...

2020-01-19 12:11:16 355

原创 Java 多线程 - Java 内存模型

前言注:这里提到的是Java内存模型,是和并发编程相关的,不是JVM内存结构(堆、方法栈这些概念),这两个不是一回事,别弄混了。Java 内存模型Java内存模型(Java Memory Model ,JMM)就是一种符合内存模型规范的,屏蔽了各种硬件和操作系统的访问差异的,保证了Java程序在各种平台下对内存的访问都能得到一致效果的机制及规范。目的是解决由于多线程通过共享内存进行通信时,...

2020-01-19 12:08:42 130

原创 Zookeeper学习系列【三】Zookeeper 集群架构、读写机制以及一致性原理(ZAB协议)

前言同学们,在上一章中,我们主要讲了Zookeeper两种启动模式以及具体如何搭建。本章内容主要讲的是集群相关的原理内容,第一章可以当做是Zookeeper原理篇的基础部分,本章则是Zookeeper原理篇进阶部分,有关于Zookeeper集群的读写机制、ZAB协议的知识解析。本篇的内容主要包含以下几点:Zookeeper 集群架构**Zookeeper 读写机制 **ZAB协议关于...

2019-05-12 18:24:20 732

原创 Zookeeper学习系列【二】Zookeeper 集群章节之集群搭建

前言同道们,好久不见,上一章中,我主要讲了Zookeeper的一些基础的知识点。数据模型 + 原语集 + Watches机制。本章内容主要讲的是集群搭建相关的知识。本篇的内容主要包含以下几点:Zookeeper 运行模式Zookeeper 搭建一、Zookeeper 运行模式Zookeeper 有两种运行模式,单点模式和集群模式。单点模式(standalone mode)- ...

2019-05-12 17:23:35 133

原创 【开发小记】 Java 线程池 之 被“吃掉”的线程异常(附源码分析和解决方法)

前言今天遇到了一个bug,现象是,一个任务放入线程池中,似乎“没有被执行”,日志也没有打。经过本地代码调试之后,发现在任务逻辑的前半段,抛出了NumberFormatException,但是代码外层没有try-catch,导致这个异常被吃掉。这个问题解决起来是很简单的,外层加个try-catch就好了,但是这个异常如果没有被catch,线程池内部逻辑是怎么处理这个异常的呢?这个异常最后会跑到...

2019-04-24 23:40:07 836

原创 Zookeeper学习系列【一】 教会你Zookeeper的一些基础概念

前言最近加入了部门的技术兴趣小组,被分配了Zookeeper的研究任务。在研究过程当中,发现Zookeeper由于其开源的特性和其卓越的性能特点,在业界使用广泛,有很多的应用场景,而这些不同的应用场景实际上底层的原理都是差不多的,只要你真正理解了Zookeeper的一些基础概念和机制,就能够触类旁通。于是乎,在第一次和项目小组内成员分享过Zookeeper作为服务注册中心的原理和客户端demo...

2019-04-20 08:19:17 282

原创 【开发笔记】Spring + websocket 实现服务端推送消息(附几个坑)

背景原先采用ajax轮询的方式,去更新推送信息。但是如果你目标的数据对于一次请求来说,只是一个很小的值,那采用轮询的方式就会很浪费带宽。现在尝试用websocket实现产生推送信息时实时推送给前端。Spring 4.0的一个最大更新是增加了websocket的支持。websocket提供了一个在web应用中的高效、双向的通讯,需要考虑到...

2018-04-19 10:15:23 212

原创 Java爬虫(八)-- httpClient进阶:HTTPS和证书认证(原理总结篇)

一、前言本篇文章承接上一篇,对应讲述一些我在接触SSL协议、证书认证时学到的一些原理性知识。因为本身不是科班出身,网络方面很多对我来说都是新知识,特在此记录一下。二、HTTPSHTTPS = HTTP + SSL/TLS 协议,即加密过后的HTTP通信。它其实还是HTTP协议,只是在外面加了一层,SSL 是一种加密安全协议,引入SSL的目...

2018-04-05 03:50:11 516

原创 Java爬虫(八)-- httpClient进阶:HTTPS和证书认证(原理总结篇)

一、前言本篇文章承接上一篇,对应讲述一些我在接触SSL协议、证书认证时学到的一些原理性知识。因为本身不是科班出身,网络方面很多对我来说都是新知识,特在此记录一下。二、HTTPSHTTPS = HTTP + SSL/TLS 协议,即加密过后的HTTP通信。它其实还是HTTP协议,只是在外面加了一层,SSL 是一种加密安全协议,引入SSL的目的是为了解决HTTP协议在不可信网络中使用明...

2018-04-04 18:08:54 4529 2

原创 Java爬虫(七)- httpClient进阶: https 和 证书认证(讲故事篇)

一、前言本篇风格会偏向讲故事,来记录整个发现问题,解决问题的过程。具体的知识点总结放在后一篇。前段阵子被分配了一个工单,要求抓取另一个险企B的数据。想着应该不会比上一家A麻烦了,险企A抓取数据过程中有几次请求是跨域的,很多数据都是由ajax动态请求到的,要分析js代码,模拟请求。稍微观察了一下险企B的页面源代码,发现所有操作除了表单提交,其他都是get请求。而且模拟登录时不需要输验证码...

2018-04-04 08:57:38 4999 1

原创 Java爬虫(七)-- httpClient进阶: https 和 证书认证(讲故事篇)

一、前言本篇风格会偏向讲故事,来记录整个发现问题,解决问题的过程。具体的知识点总结放在后一篇。前段阵子被分配了一个工单,要求抓取另一个险企B的数据。想着应该不会比上一家A麻烦了,险企A抓取数据过程中有几次请求是跨域的,很多数据都是由ajax动态请求到的,要分析js代码,模拟请求。稍微观察了一下险企B的页面源代码,发现所有操作除了表单提交,...

2018-04-04 05:47:21 646

空空如也

空空如也

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

TA关注的人

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