- 博客(180)
- 资源 (11)
- 收藏
- 关注

原创 Spring使用POI实现Excel导入导出
本次项目实践基于SSM框架,简单封装了Excel批量导入导出功能,从实战角度,详细介绍了项目excel导入导出详细实现过程
2017-04-13 18:13:57
26463
14
原创 SpringBoot集成原生rocketmq-client
RocketMq提供了原生maven包:rocketmq-client,SpringBoot利用注入的方式可以很好的集成Rocket原生maven包。本文通过自定义jar包的形式对rocketmq-client进行封装,这样便于后期对消息队列的统一控制,包括client升级,幂等处理,日志打印,灰度处理等等。...
2022-08-05 10:40:59
2072
1
原创 ThreadPoolExecutor 源码解读
线程池大家都不陌生,但每次谈起又有陌生的感觉,归根结底是因为对它了解的不够深入,所以本文希望通过源码阅读的方式带给大家更深入的理解。
2022-03-10 15:08:06
596
原创 全局异常处理:Assert+枚举+自定义异常
业务开发过程中涉及大量的异常处理,通常采用@ControllerAdvice搭配@ExceptionHandler来处理各种异常,但是抛出异常的过程任然避免不了大量的if...else判断,刚好今天看到一篇文章(为什么不建议用try catch处理异常?)采用自定义Assert+枚举+自定义异常的方式优雅的解决了该问题,现整理实现思路:...
2022-03-04 18:46:57
2770
2
原创 【项目中的设计模式】策略模式
设计模式意在解决功能开发中的共性问题,小编希望通过【项目里的设计模式】系列文章为大家解读项目中是如何应用设计模式解决实际问题的,同时欢迎各网友提出自己的见解,共同成长提高。
2022-01-23 22:53:34
616
原创 Springboot配置kafka无服务正常启动
SpringBoot配置kafka服务,如果服务异常会导致系统无法正常启动,解决该问题可以应用Spring的@Conditional注解为Kafka的配置类添加条件注解,具体实现如下:import org.springframework.beans.factory.support.BeanDefinitionRegistry;import org.springframework.context.annotation.Condition;import org.springframework.cont
2020-09-22 18:57:09
2516
1
原创 Atlas源码解读(1)图数据库JanusGraph
Aparche Atlas是Hadoop数据治理与元数据框架,提供了高效数据查询与分类系统,同时支持数据审计与数据血缘关系的建立。小编认为随大数据发展,数据结构与类型将越来越复杂,元数据治理与数据关系建立将是完成数据挖掘,实现人工智能的重要前提。 Atlas收集大数据组件元数据通过集成构件kafka传输至底层数据处理构件JanusGraph,J...
2019-09-04 15:11:02
4013
2
原创 BindingResult,MessageSource与@Valid实现接口封装
程序级别接口返回值,异常和Error通常需要统一编码,本文以项目应用为前提,应用Spring中集成的MessageSource实现国际化,并应用BingdingResult和@Valid实现属性统一校验。实现步骤如下: 1. 根据约定建立messages.properties,与application.properties同级。responseMsg.map....
2019-06-21 17:55:19
1133
原创 java并发--高效缓存
最近阅读《java并发编程实战》第5章中提到的一步步建立高效可伸缩缓存代码,若有所思。 缓存是最容易引起并发问题的场景之一,因为缓存的内容经常为可变状态,而作用域又相对较大。解决并发问题最简单粗暴的方式就是加锁,但这样会降低执行效率,多线程执行到同步代码区,只能等自己活得锁的情况下才能继续执行。我们看下代码: 作者先使用泛型技术提供了一个可伸缩的...
2019-04-11 21:16:45
445
原创 python 爬虫实践
爬虫是python最重要的一个应用场景,用户可以根据自己的需要通过爬虫从网站上获取数据。 爬虫按照爬取内容可以氛围通用爬虫和聚焦爬虫两类,通用爬虫是获得网页本身即可,最典型的应用是百度快照;聚焦爬虫则是获取网页元素内容,解析后存储做分析使用。 爬虫世界主要解决以下几个问题: 1. 如何爬取? 爬虫具备三大特征:统一的ur...
2019-02-20 18:20:27
518
原创 人生苦短,我用python
python是一种动态的,面向对象的解释型脚本语言,他的代码风格“优雅”,“明确”,“简单”;更重要的是它于现在流行的数据分析,人工智能扯上了联系,因此受到广大编程爱好者的喜爱。此时,大家戏称:“人生苦短,我用python”。目录【python特性】【python如何学】【数据爬虫】【数据分析】【机器学习】【总结】【python特性】 ...
2019-02-20 12:02:26
467
原创 秒杀业务设计
秒杀因其流量大,并发高,成为最经典的业务之一,并发的根源在于数据库,通常采用缓存+队列的方式减少数据库访问,降低访问速度。有幸接触到一个秒杀业务代码,采用redis+mq的方式实现,现整理流程如下: 1. 数据库设计 秒杀业务的商品和订单单独设表,不要和正常商品和商品订单混合一起。表格数据足够少,才能保证查询和写入速度。订单表将用户id和商品id设置为唯...
2018-10-29 19:53:37
717
1
原创 Elasticsearch基本原理
ES作为高度可伸缩的全文搜索与分析引擎,经常被用作大量数据的复杂搜索与分析业务。本博文以问题方式展示ES的基础特性,并简单介绍底层算法实现。 1. ES搜索速度为什么会特别快? 简单来说就是使用了使用了Lucene的倒排索引技术,首先以分词的形式将文档分解成单词+文章号【频率】+位置的形式,借用网上例子: 文章1的内容为:...
2018-10-09 16:10:40
908
原创 Spring Boot 运行原理
Spring Boot的优势在于内置大量习惯性的配置,便于与第三方集成,即“习惯优于配置”,让项目能够快速运行起来,下面我们就探究下Spring Boot自动集成配置的原理。 Spring Boot关于自动配置的jar包位于spring-boot-autoconfigure-*.jar中, spring boot的启动类中通常使用组合注解@Sprin...
2018-08-14 18:08:16
3502
原创 通过ssh访问linux文件
使用java代码链接Linux服务器,无非使用SSH借用用户名密码进行链接,ganymed jar包提供了ssh的连接方式,下面我们借助Ambari开源项目代码,使用实例获得hadoop的一些配置文件并使用xml工具类进行解析。 pom文件内容,引入ganymed和文本处理类commons-lang3:<?xml version="1.0" encodin...
2018-07-17 12:03:00
1949
原创 zk+curator监听器机制实现分布式高可用
curator是开源zookeeper客户端,与原生zk client相比,抽象层次更高,功能更加丰富。监听器在分布式中主要应用于服务注册,也是很多开源项目中客户端请求服务的必选技术应用,它不仅可以减少客户端无限for循环导致的服务端流量问题,通过zk的天生分布式能力提供高可用特性。 curator的监听采用3种Watcher机制来监听节点变化: 1. Pa...
2018-06-04 18:07:01
3784
原创 jersey与spring mvc通信报错:JSON parse error: Illegal character ((CTRL-CHAR, code 31)): only regular white
大家熟悉的RESTful风格代码大都是httpClient,Jersey在开源项目中常用。 Jersey RESTful WebService框架是一个开源的、产品级别的JAVA框架,支持JAX-RS API并且是一个JAX-RS(JSR 311和 JSR 339)的参考实现 Jersey不仅仅是一个JAX-RS的参考实现,Jersey...
2018-05-31 19:16:09
19847
6
原创 装饰器模式应用--动态规则引擎
装饰器模式应用于动态功能添加,将功能实现分布于不同的组件,代码扩展能力强。 先从网上寻找示例,为英雄联盟里面的英雄添加技能,类图如下: 左侧Hero与BindMonk就是简单的接口与实现类关系,右侧Skills代码:public class Skills implements Hero{ private Hero hero; ...
2018-04-16 19:11:19
2744
2
原创 spring-boot使用itext与jfree导出pdf报表
报表在项目开发中经常使用,itext是生成报表的java组件,对比于之前使用的poi,itext侧重于pdf格式报表,并结合jfreechar制作图表,能够为用户多样化显示数据。本文结合项目应用案例使用进行描述。 首先用一张图来显示生成的报表样式: 1. pom文件导入itext引用 <!-- https://mvnrepository.com...
2018-02-11 14:20:13
4964
6
原创 ES 按照每隔几分钟,几小时,几天统计折线图
公司应用es有一段时间,今天接触了一个相对复杂的业务,针对每隔几分钟,几小时,几天进行统计折线图,具体逻辑如下图: 如图,系统必须要支持查询,每小时(每隔10分钟),每日(每隔4小时统计),每周(每隔1日),每月(每隔5日)进行统计,找到最大值显示到折线图上。 首先4张图像使用term聚合,每张图像上有两条线,表示cpu和内存,也属于term聚合方式,整
2018-01-08 14:49:42
8370
3
原创 hadoop 集群安装(三) hbase安装
继上篇博客介绍《hadoop集群安装(二)HA部署》后,本节介绍在hadoop集群安装HBase。 1.下载解压文件到制定目录: wget http://apache.fayea.com/hbase/stable/hbase-1.2.2-bin.tar.gz2、配置主要修改conf目录下的三个文件:hbase-env.sh、hbase-site.xml、re
2017-12-23 15:16:35
558
1
原创 hadoop 集群安装(二) HA部署
继上篇博客《Hadoop安装(一)zookeeper集群安装》后,我们已经搭建了hadoop所需要的免密码通信环境,以及高可用zookeeper集群,下面进入hadoop的高可用安装部署: 1. 下载解压hadoop文件 : tar -zxvf hadoop-2.7.4.tar.gz 2. 配置hadoop-2.7.4/etc/hadoop
2017-12-22 10:21:28
477
1
原创 Hadoop安装(一)zookeeper集群安装
本教程使用liunx系统centos 7.0,hadoop2.7.4,zookeeper 3.4.10版本,jdk 1.8。hadoop部署4个节点,2个nameNode节点,4个dataNode节点。zookeeper部署3个节点。 一、修改4台服务器名称 1.vim/etc/sysconfig/network ETWORKING=y
2017-12-22 09:59:09
658
1
原创 ES报错“Result window is too large”参悟大数据思维
ES在数据搜索上提供了强大支持,但其耗费内存代价也是巨大的。因为第一次使用ElasticSearch,在做分页的时候没有注意,分页插件显示了最后一页,今天做压测,单台es的数据达到2亿数据,每页显示20条的情况下需要500万页。 直接点第500万页的时候出现了“Result window is too large”报错,搜索一下网络,原来ES设置了默认最大窗口数量index.
2017-12-06 13:41:30
1098
1
原创 springboot配置kafka与原生kafka配置
搭建kafka要注意版本问题,本教程使用的kafka版本是kafka_2.11-0.11.0.2.tgz;首先看下spring-boot链接kafka的使用。 1. 添加pom依赖 org.springframework.boot spring-boot-starter-web 1.5.8.RELEASE--> org.apache.kafka kafka
2017-12-06 13:15:33
26929
6
原创 方便快捷的HTTP匹配
Http中常用到添加白名单,现在的业务是针对每一个ip配置不同的匹配规则来达到权限控制,这样,针对同一个ip在不能出现重复规则。 因为用户输入的内容是复杂的,允许单个输入ip,也允许输入ip地址段,因此,需要提供一个工具类来匹配该ip是否已经存在。 整体思想,讲用户输入的所有ip和ip段放入list集合中,在工具类调用时,将单个ip存放入list中,地
2017-12-05 09:59:11
513
1
原创 Hadoop整体感知
认识一门新技术首先从该技术解决什么问题开始,探讨该技术为解决问题提供了什么特性,是如何实现该特性的,最后探讨在真是环境的应用。 1. 为什么会有hadoop? 随着公司业务发展,数据会逐渐增多,格式也越来越复杂,而这些数据是存在潜在价值的,当数据量达到P级别时,传统数据库就会在存储和计算的平衡上趋于瓶颈。hadoop就是为解决该类问题而诞生的。
2017-10-21 17:17:41
496
2
原创 2017年年度总结
转眼一年又过去了,勤奋的程序猿在今年的奋斗史上又留下了光辉的一笔!仅以简陋的笔录记录下自己的成长旅程。 【项目】 作为程序猿,项目在我们的生活中扮演着举足轻重的角色,尽管大多数我是作为开发者的角色,但也经常站在管理者的角读思考问题: 1. 要善于使用工具,从开始建项,到数据库设计,产品设计,产品实现,后期
2017-08-28 11:48:21
1115
16
原创 httpclient学习与短信应用实践
Http协议是在web开发中用到最多的协议了!访问我们发布的web服务都是通过js显式进行访问,但有时候为了访问安全,我们不能暴露访问的url地址及其登录信息,这时候,通过后台来实现post和get请求则是必须的了,最常见的应用就是短信发送,邮件服务等。 首先练习一下client的使用://上传文件到指定url地址 public static String doUpl
2017-08-24 10:59:48
543
8
原创 过滤器实现单一用户登录
单一系统的登录要保证同一时间内不允许pc,app,微信同时登录,在一个时间内只保留最后一次登录状态。这样的设计是我们容易忽略的。下面通过过滤器的方式进行实现: 首先在web.xml文件中添加: LoginFilter com.test.filter.LoginFilter LoginFilter /ssl/*
2017-08-23 20:52:03
1058
5
原创 ActiveMQ支持协议
上节提到ActiveMQ支持多种协议,下面分析一下,ActiveMQ各个协议的特点以及该协议在什么情况下使用,使用所应用的接口。 常见的协议配置信息: 1. TCP协议:TCP协议保证broker与client的高稳定性通信。使用openwire序列化字节流,促使网络上的传输效率和数据快速交互。应用接口为16161
2017-07-31 21:21:35
1571
8
原创 从ActiveMQ认识JMS
随着分布式系统的规模和复杂度提高,往往会出现如下问题:(1)系统间同步通信,客户端发出调用后,必须等到服务对象完成处理并返回结果后才能继续执行;(2)服务端和客户端强耦合,后端一旦出现故障,前台将会牵扯进来;(3)客户的一次调用只能发送给单独目标对象。在这样的环境下,面向消息的中间件就应运而生了。 1. 什么是消息中间件?有什么特点? 很容易理解,消息
2017-07-31 18:56:31
440
9
原创 spring源码解读(1)-容器基本实现
学习spring源码对理解spring的执行流程,如何更好的发挥spring的功能有很大的指导作用。下面针对spring加载bean容器学习spring的执行流程。 spring通过调用xml配置文件,解析并加载Bean,xmlBeanDefinitionReader则是整个资源加载的切入点: spring从xmlBeanReader读取
2017-07-25 21:23:04
715
25
原创 spring实现可动态修改时间定时任务
前端时间开发接触了一个开源框架jeecg,里面封装了spring与quartz整合的定时任务实现方式。因为之前尝试过单纯使用quartz来实现定时任务,遇到一些问题,比如,无法通过spring注入的方式添加自己的注入类。 首先了解一下,定时任务有三种技术实现方式:java自带的Timer类,可以让程序保持一定频度执行,但是无法按照某个时间执行;quartz,一个功能强大的
2017-07-21 16:49:25
27932
28
原创 msql优化--索引优化
关于数据库优化指标主要为:响应时间,扫描行数,返回行数。对于响应时间,主要体现在服务器级别,服务器性能,网络响应速度等;索引主要为了减少扫描行数;根据limit来限制返回行数。 常用的索引有:B-Tree索引,哈希索引,空间索引,全文索引。除此之外,按照数据存储方式可以分为聚集索引和非聚集索引。【索引类型】B-Tree索引
2017-07-14 18:14:48
1098
22
原创 spring-Aop应用日志处理
上文讲解了sping Aop的基础概念与实现逻辑,本文从实践出发介绍sping进行aop配置并实现日志打印过程。 环境介绍:spring4.0 release版本,前端使用spring mvc框架。 1. 定义注解拦截器/** * 自定义注解 拦截service */@Componentpublic class LogIntercepto
2017-06-16 09:52:57
799
13
原创 Spring-AOP概论
AOP是OOP的一种实现,将业务代码进行隔离,降低逻辑代码之间的耦合度,提高代码复用率,经常用在日志处理,权限控制,事务处理,Struts2的过滤器拦截器等。我们首先通过学习动态代理认识AOP原理,然后进行AOP概念的论述。 下面代码通过实现InvocationHandler接口实现代理控制接口:public class LogProxy implements Invoca
2017-06-15 21:16:34
488
10
原创 JVM--java类文件结构
据说分析java类结构对日后的编码优化有很大的帮助,同时它也是我们理解java虚拟机类加载,内存分配,解析的基础,就和小伙伴们一起探讨学习了一番! 先来张大图做个导向: 1. 我们首先要搞明白.class文件是咋来的,为啥要有.class文件? 我们知道在JDK里面执行一
2017-06-09 17:55:28
579
16
原创 小小加密应用
日前,大家在公司讨论一个很激烈的问题,原来有个小黑客在网上通过模拟ip和post请求,不断访问发送短信的接口,要知道,发送短信这个功能是接入第三方平台来完成的!每一条短信的发送就代表着流量和短信条数的流失,造成金钱的浪费。经过两天的试验,大神简单设计了一个算法,暂时解决了该问题,也跟大神学习一下: 首先发送短信的功能是用阿里云的服务实现的,它首先提供了一个风险拦截系统!也做
2017-05-15 20:24:06
992
11
原创 java基础--IO
数据在计算机内存储转换必须要用到IO操作,了解IO操作机制,对我们编码时针对文件操作,提高系统性能,磁盘存储,数据网络传输等都有很大的帮助。 (1) java的IO流的概念是数据从源头到达目的存储地的有序数列,正是这些输入输出流实现了java的输入输出。 分类:我们最熟悉的要数字节流和字符流了,按照计算机的二进制存储规则,字节流是操作8位二进制位,字符
2017-04-30 20:59:02
730
15
Compile Linux Kernel on CentOS7 – Linux Hint.pdf
2020-08-21
秒杀业务实现
2018-10-29
软件需求说明书模板
2018-09-04
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人