- 博客(118)
- 资源 (2)
- 收藏
- 关注

原创 服务端埋点系统设计
一、介绍所谓“埋点”,是数据采集领域(尤其是用户行为数据采集领域)的术语。指的是针对特定用户行为或事件进行捕获、处理和发送的相关技术及其实施过程。 埋点的技术实质,是先监听软件应用运行过程中的事件,当需要关注的事件发生时进行判断和捕获。本博只是简单演示如何实现埋点采集信息,至于后续信息如何使用,不关注,常见的,有MQ处理、Spark&Hbase,等处理方式。二、实现过程大致思路:采集...
2020-04-07 18:27:03
3715
1

原创 Spring Cloud(二):服务注册与发现Eureka
1、介绍对于微服务的治理而言,其核心就是服务的注册和发现。在SpringCloud 中提供了多种服务注册与发现组件:Eureka,Consul,Zookeeper。官方推荐使用Eureka。 说明:Eureka是Netflix开源的一款提供服务注册和发现的产品,它提供了完整的Service Registry和Service Discovery实现。也是springcloud体系中最重...
2018-06-25 22:50:50
16965
1
原创 设计模式之责任链模式
职责链上的处理者负责处理请求,客户只需要将请求发送到职责链上即可,无须关心请求的处理细节和请求的传递,所以职责链将请求的发送者和请求的处理者解耦了。
2022-05-07 16:18:38
435
原创 设计模式之策略模式
简介策略模式定义了一系列算法,并将每个算法封装起来,从而使得它们可以相互替换。策略模式的使用的算法对客户端是无感知。场景需要设计一个接口,为一系列实现类提供统一的方法,多个实现类实现该接口。策略模式的决定权在用户,系统本身提供不同算法的实现。策略模式多用在决策系统中,外部用户只需要决定用哪个算法即可。运用背景审核系统接收业务系统提交的审核数据,根据入参里面的审核类型字段,决定是进行初审、复审、终审具体某一个操作。审核类型枚举类@Getterpublic enum AuditTypeEnum
2022-05-05 11:08:08
461
原创 记一次SimpleDateFormat时间格式定义引发的线上问题
SimpleDateFormat 的一个小小的时间格式问题,竟然导致生产bug。
2022-05-01 15:03:45
754
原创 服务限流实战
一、服务为什么限流 <Connector port="8080" maxThreads="150" minSpareThreads="25" maxSpareThreads="75" acceptCount="100" /> 二、服务限流怎么做三、限流典型算法四、防止重放技术方案实现五、令牌桶算法技术方案实现...
2021-10-20 18:10:35
502
原创 推荐一款导出神器EasyExcel
前言数据导出excel,一般有jxl,poi,在这两者中,poi性能更优。今天推荐一款性能更优,更强大的工具EasyExcel,提供了各种便捷的API,以及定制化功能。可以EasyExcel是一个基于Java的简单、省内存的读写Excel的开源项目。在尽可能节约内存的情况下支持读写百M的Excel。(官方说明)实例分别定义两个接口,一个使用Apache POI的方式进行导出,另一个使用EasyExcel组件导出;数据样本分别是百量级别、千量级别、万量级别,从而观察两者组装数据的时间,导出exc
2021-08-18 16:44:40
488
原创 记一次述职答辩总结
一、 述职前的准备1、 材料的准备材料的收集整理自上次晋升(或者入职公司)后所参与的项目。如果是参与的项目比较多,可以精简2-3个项目。但是其中,必须包括一个主导的项目。对于主导项目至少展开2-3页PPT,涉及到项目的背景、流程、架构技术、绩效成果、项目难点(包括解决方案)。对于其他项目,业绩的输出,也需要体现在PPT中,可以一页PPT,但是不能不写,否则评委以为你就干了一个项目。(务必)统计项目中一些常见的指标,比如:提升了多少效率、达到了多少指标。如果涉及到项目的改造/
2021-05-31 11:33:05
921
原创 玩转SpEL
一、概述Spring表达式语言全称为“Spring Expression Language”,缩写为“SpEL”。是一个支持查询,并在运行时操纵一个对象图功能、是一门强大的表达式语言。SpEL是单独模块,只依赖于core模块,可以被独立使用、运行。二、作用一、基本表达式字面量表达式、关系,逻辑与算数运算表达式、字符串连接及截取表达式、三目运算、正则表达式、括号优先级表达式;二、类相关表达式:类类型表达式、类实例化、instanceof表达式、变量定义及引用、赋值表达式、自定义..
2020-12-29 17:30:23
1123
原创 Easy Rules 配置文件外置-Mysql
一、场景前一篇,介绍了Easy Rules作为Java一款轻量级的规则引擎,使得研发更加注重于纯业务开发,提高开发效率。这一篇,主要是围绕,规则配置数据,外置于数据库Mysql的实现。二、思路1、Mysql存储新建表t_biz_rule、t_biz_rule_compose分别存储规则定义、规则组合定义2、构建RulesMysql中的Rule、RuleCompose转换成RuleDefinition对象定义Rules注册工具类Helper,为每个RuleCompose注册3、定
2020-12-25 14:46:49
4010
12
原创 Java规则引擎easy rules
场景简单点描述,easy rules就是为了干掉if…else…语句。Easy Rules可以把业务逻辑抽象出来,使得业务开发更加顺畅、维护迭代更加快捷,代码更加清晰;有点策略模式的味道。功能轻量级框架,基于API方式支持基于POJO和注解方式开发支持创建组合规则支持使用表达式语言(MVEL/SpEL)名词描述name:规则名称,唯一性description:说明描述priority:优先级Facts:事实Conditions:条件Actions:执行动作案例背景定义
2020-12-21 20:28:49
4927
3
原创 基于spring-security快速实现图形验证码、token验证
验证码(图形、短信、邮箱)、token机制对于系统的安全性已经是老生常谈;本文将结合spring-security快速实现Google图形验证码、token的安全性校验。技术储备1、UserDetailsService接口/** * Core interface which loads user-specific data. * <p> * It is used throughout the framework as a user DAO and is the strategy us
2020-12-12 15:57:27
1653
原创 统一处理登陆用户信息
在使用各种权限框架的时候,如:apache-shiro、sping-security等,可以分别使用对应的context获取principal信息;常见的操作是在一个抽象类或者单独的service统一处理。本篇文章,基于shiro框架,使用方法注解的方式,获取对应的登陆用户principal信息。技术储备1、HandlerMethodArgumentResolver接口。/** * Strategy interface for resolving method parameters into arg
2020-12-12 14:03:12
472
1
原创 json序列化按顺序输出
一、背景如今凭借Diamond和Apollo的开源使用,编程更加动态化,配置化。博主就遇到一个这样的问题,即:后端控制前端某个附件的显示文案,由于附件类型也不多十几个左右,而且每个附件的显示文案均不同。采用数据库形式有点大材小用,而且每次数据库IO也耗时。故采用Apollo动态配置化使用,即使后续PM针对附件变更,也可动态上下线,而不用修改代码,发布项目。二、过程配置好了,博主打算用JSON来接受Apollo的配置,然后匹配附件Code,进行数据填充。简单的案例Demo如下:public
2020-09-24 19:50:21
2288
原创 基于丝袜哥的knife4j,您值得拥有!
一、介绍Knife4jknife4j是为Java MVC框架集成Swagger生成Api文档的增强解决方案。参考文档swagger配置二、基础搭建1、pom依赖 <io.swagger.version>1.5.21</io.swagger.version> <swagger2.version>2.9.2</swagger2.version> <knife4j.version>2.0.2</knife4j.ve
2020-06-01 17:16:27
1204
原创 controller返回string类型和bean的序列化、乱码
@Bean public HttpMessageConverter<String> responseBodyConverter() { return new StringHttpMessageConverter(StandardCharsets.UTF_8); } @Bean public ObjectMapper getObjectMapper() { ...
2020-04-21 17:22:35
1789
原创 记一次Mac环境下修改数据库的sql_mode
一、业务场景在mac环境下,由于通过SQL查询,使用到了group by,而且by多个字段。例如:select a,b,c from table group by a,b 。发现执行SQL报错了。Expression #5 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'table.a' ...
2020-03-31 12:42:35
2730
1
原创 解决Mysql 'max_allowed_packet' variable 异常
在SQL操作的时候报错如下Mysql You can change this value on the server by setting the max_allowed_packet' variable. Packet for query is too large (7012 > 2048). You can change this value on the server by set...
2020-03-15 12:01:14
1241
原创 Mac home 目录下创建文件夹
一、背景mac 是基于unix, 自带就有home目录,但是为空。home目录的默认所属用户是root wheel,mac默认的root账号所属用户是root admin。二、操作过程1、修改/etc/auto_master文件,目的是屏蔽/home目录的保护# Automounter master map+auto_master # Use directory s...
2020-02-25 16:13:58
5026
4
原创 SpringBoot MultipartResolver的坑
背景在使用springBoot上传文件的时候,我们会用到MultipartResolver。我看通过源码可以看到@Configuration@ConditionalOnClass({ Servlet.class, StandardServletMultipartResolver.class, MultipartConfigElement.class })@ConditionalOnPr...
2019-10-11 11:03:47
10793
8
原创 基于LoggingEvent的报警starter项目
引言SpringBoot的一大优势就是提供了开箱即用的Starter,使得我们开发变得简单,我们不需要过多的关注框架的配置。举个例子,spring-boot-starter-jdbc这个starter的存在,使得我们只需要在SpringBootApplication运用程序下用@Autowired引入DataSource的bean就达到了Bean的装配,SpringBoot会自动创建DataSo...
2019-09-12 22:36:18
1148
1
原创 二、elasticSearch整合kibana和logstash
一、回顾elasticSearch配置完成以后二、下载安装kibana2.1:下载wget https://artifacts.elastic.co/downloads/kibana/kibana-7.0.0-x86_64.rpmwget https://artifacts.elastic.co/downloads/kibana/kibana-7.0.0-x86_64.rpm2.2...
2019-04-24 15:22:01
1900
原创 一、elasticsearch基础
一、下载安装1.1、下载wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.0.0-x86_64.rpmwget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.0.0-x86_64.rpm1.2、安装...
2019-04-22 20:02:24
1455
原创 如何实现merge request功能
一、业务背景现如今的需求版本开发迭代中,由于协同合作研发的必要性,如何有效的解决协同研发带来的项目管理问题,最终提高员工的效能,是十分迫切,亟待解决的。二、准备工作版本控制:gitHub研发工具:idea用户角色:master、developer三、实施方案3.1、远程仓库3.1.1、建立一个项目 merge_test3.1.2、建立一个master分支(主分支)3.2、for...
2019-04-19 17:07:11
8183
原创 四、binlog与canal的藕断丝连
一、Canal的介绍名称:canal [kə’næl]译意: 水道/管道/沟渠语言: 纯java开发定位: 基于数据库增量日志解析,提供增量数据订阅&消费,目前主要支持了mysql二、binLog主备原理mysql主备复制实现从上面来看,复制分成三步:master将改变记录到二进制日志(binary log)中(这些记录叫做二进制日志事件,binary log event...
2019-01-31 17:14:59
1824
原创 三、binlog与kafka良配
一、Zookeeper1.1、下载zkwget http://mirrors.hust.edu.cn/apache/zookeeper/zookeeper-3.4.10/zookeeper-3.4.10.tar.gztar -zxvf zookeeper-3.4.10.tar.gz 1.2、制定配置文件cd zookeeper-3.4.10/confcp zoo_sample.cf...
2019-01-31 16:20:27
2739
原创 二、binlog的主从复制
1、复制原理1.1、Master将数据改变记录到二进制日志(binary log)中,也就是配置文件log-bin指定的文件,这些记录叫做二进制日志事件(binary log events)1.2、Slave通过I/O线程读取Master中的binary log events并写入到它的中继日志(relay log)1.3、Slave重做中继日志中的事件,把中继日志中的事件信息一条一条的在本...
2019-01-30 20:55:53
3311
原创 一、binlog的简介
1、日志类型:Error Log、General Query Log、Binary Log、Slow Query Log。分别是错误日志、一般查询日志、二进制日志、慢查询日志。错误日志:记录错误日志信息;一般查询日志:记录前端查询语句,SQL Statement;二进制日志:记录了数据库的改动,比如新建表、数据记录变更等。两个非常重要的功能:复制、恢复。慢查询日志:记录了慢SQL Sta...
2019-01-30 14:24:21
1982
原创 Nginx负载均衡策略
Nginx提供的负载均衡策略有2种:内置策略和扩展策略。内置策略为轮询(默认),加权轮询,Ip hash,第三方。一、热备如果你有2台服务器,当一台服务器发生事故时,才启用第二台服务器给提供服务。服务器处理请求的顺序:AAAAAA突然A挂啦,BBBBBBBBBBBBBB…upstream mysvr { server 127.0.0.1:7878; server 192.168.1...
2019-01-25 17:12:39
1547
原创 Nginx配置详解篇
找出nginx的配置文件nginx.configwhereid nginxnginx的配置文件如下:########### 每个指令必须有分号结束。##################user administrator administrators; #配置用户或者组,默认为nobody nobody。#worker_processes 2; #允许生成的进程数,默认为1#...
2019-01-24 22:16:02
1512
原创 Nginx基础概念篇
一、概念Nginx(engine X)是一款轻量级web服务器/反向代理服务器/电子邮件(IMAP/POP3)代理服务器。1.1、名称解析反向代理:代理服务器接受了从Internet上的请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给Internet上请求的连接的客户端。反向代理服务器并没有保存任何网页的真实数据,所有的静态网页或者CGI程序,都保存在内部的Web服务...
2019-01-24 21:52:35
1516
原创 巧妙的设计签到
一、背景由于需要做项目的返利,需要设计一个签到功能项。得到如下需求点:1、连续签到记录连续签到的天数,根据连续签到的天数,获取对应的相应的奖励;2、记录每月的签到情况根据签到情况,大致可以分析用户对项目的使用情况。二、设计方案考虑到连续签到,设置两个个字段,signCount(连续签到数),modified(修改时间,格式:yyyy-MM-dd)。当用户签到的时候,判断一下,今天...
2018-12-12 22:15:52
1509
2
原创 域名解析
背景腾讯云一台服务器,以及万网一个域名,例如:abc.com;三个项目,一个前端项目;两个后端服务项目,一个web项目端口号:8090,另一个admin项目端口号:8081。目的解析域名abc.com,并且初始化二级域名m.abc.com(手机mobile)以及admin.abc.com(项目后台),以及abc.com SSL https访问安装。步骤一、域名解析二、添加记录注...
2018-12-09 23:26:46
1197
原创 Spring的重试机制
一、背景:在项目开发中,RPC(Remote Procedure Call)即远程服务调用,必不可缺。既然存在远程服务的调用,那么必然存在服务方不可用的问题。比如,网络的抖动、服务上线。二、方案:在调用方采用retry重试机制,并且全局采用一个探针机制。即,如果重试次数达到了一定的阀值,将会开启探针。并且接下来的请求将不会调用RPC,对调用方的请求产生熔断,不至于因为服务方的服务不可用,造成...
2018-12-03 14:50:31
1658
原创 搞定mysql,创建用户及分配权限
最近在搞otter的数据库数据同步(整理好发布),其中涉及到mysql的用户权限问题,故整理如下:mysql的安装方式详情见:https://blog.youkuaiyun.com/ruben95001/article/details/80795533一、控制台登陆mysql报错“Access denied for user ‘root’@’localhost’”解决方案:重置root密码...
2018-09-14 18:45:08
5424
原创 Spring Cloud(九):配置中心Config
一、背景随着时间的推移,以往的单点部署项目,渐渐的转变为多点,分布式集群部署。接踵而来的是配置文件的凌乱部署,某一个基础服务的配置变更,都将造成服务的重新部署。二、概述Spring Cloud Config为分布式系统中的外部配置提供服务器和客户端支持。服务器存储后端的默认实现使用git,因此它轻松支持标签版本的配置环境,以及可以访问用于管理内容的各种工具。很容易添加替代实现,并使...
2018-07-29 17:24:32
2590
原创 Centos下yum快速安装各环境
一:JDK的安装 1.1:检查系统中Java的所有版本的安装listyum list java* 1.2:选择一个版本的安装例如1.8yum install java-1.8.0-openjdk* -y1.3:使用命令检查是否安装成功java -version二:Maven的安装 2.1:下载Maven的包wget http://repos.fed...
2018-06-24 22:44:12
2691
SpringCloud下载
2017-09-12
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人