- 博客(145)
- 资源 (18)
- 收藏
- 关注
原创 Squaretest 自动生成Mock单元测试
今天来介绍一款工具Squaretest,它是一款自动生成单元测试的插件,为什么会用到它也是因为最近公司上了代码质量管控的指标,会考评各个项目的单元测试覆盖率,以及sonar扫描出来的各种问题,很多老项目老代码,或者着急交付的项目,单元测试严重缺失,覆盖率只有5%不到,所以几个小伙伴这几天就在疯狂的堆单元测试,3个人堆了2天才堆到30%,于是我也来上手帮忙写了两个,写到第二个的时候就发现,这个活不应该是人干的,要去看原来的代码,然后根据逻辑写各种Mock,感觉是有迹可循的东西,所以就查了下,发现果然有插件帮我
2020-12-11 17:41:05 41974 18
原创 Jenkins + Docker 自动化微服务发布平台实战
论述近几年一直很流行CI/CD自动化构建发布平台,各大公司也都在搞比较适合自己业务的CI/CD平台,他不仅能够节省时间提升发布效率,同时也能够降低发布风险,因为以前都是会有人工介入为发布增加了很多不确定性,有了CI/CD平台能够更好的管控发布规范。今天我们来简单的介绍下比较基础班的CI/CD平台的搭建,前期准备:git上有一个springboot项目有一台linux服务器,本文使用的是centos7.3系统Jenkins篇第一步:安装JDK// 移出旧版本JDKyum remove -y
2020-10-24 08:52:28 1722
原创 采用Nginx的limit模块实现限流
先说一下背景,为什么要做限流? 一个系统吞吐量通常由QPS(TPS)、并发数两个因素决定,每套系统这两个值都有一个相对极限值,在应用场景访问压力下,只要某一项达到系统最高值,系统的吞吐量就上不去了,如果压力继续增大,系统的吞吐量反而会下降,原因是系统超负荷工作,上下文切换、内存等等其它消耗导致系统性能下降。也就是并发越高,系统的处理能力就会越低,TPS也就越低,这样对于用户体验来讲是十分不友好的...
2020-04-27 13:38:00 1937 1
原创 三个类告诉你MyBatis是如何用动态代理实现的
今天来讲一下mybatis的实现原理,我们都知道mybatis是使用动态代理的方式实现的一套ORM框架,那么他是怎么实现的呢?在回答这个问题之前,我们先来捋一下mybatis框架的使用流程,一般我们会把他跟spring一起结合使用,spring容器来统一管理所有对象,使用mybatis时首先要进行几个配置。dao的包路径(也就是接口对象的包路径)xml文件的路径我们都知道使用mybat...
2020-02-22 16:35:07 6902 4
原创 CPU连续飙升的背后是 “道德的沦丧” 还是 “人性的泯灭”
最近负责的一个老项目CPU时不时的就会飘到90%以上,然后宕掉,这个项目是一个汽车类的商城支持在线下单预约试驾等功能,咨询品牌方说是做了一波投放,但是没有提前通知我们,看了一波日志其实请求量也不是特别大。 我们的系统是部署在阿里云上的,下面是简单的系统机构图: 理论上按照这个配置没理由cpu利用率没理由飙升这么高,以至于品牌方和PM频繁收到阿...
2019-12-27 19:09:05 11158 11
原创 是什么导致了Spring Aop失效了?
使用Spring Aop遇到的问题 我们在做一些统一操作的功能时,经常会使用到Spring的Aop技术,比如要在每个方法进入前做点什么事情,结束后做点什么事情,这个时候我们就会想到用到Aop去做,详细的使用方法这里就不展开了,默认大家都会用,如果不会用没有概念的话,可能没办法看懂下面的问题场景,这边主要面向的是对Spring和Aop有过实战的同学,好,题外话不说,看下面几种Aop...
2019-07-09 14:41:53 11983 3
原创 解决jdk1.7 不支持TLS1.2的问题
这个问题是在生产环境调整之后出现的,因为之前是好使的,后来又一天突然不好使了,观察日志发现代码抛异常,感觉是没有连接上服务器,但是其他环境是好使的,有点疑惑,分析后发现可能是ssl的协议问题,所以观察了下Nginx的配置,发现运维伙伴基于公司的安全机制,将ssl_protocols从 TLSv1.2 TLSv1.1 TLSv1.0; 调整成了TLSv1.2 TLSv1.1; 然后查了下资料,发现j...
2018-07-31 23:12:07 19040 3
原创 Spring+SpringMvc的手写版(PS:只是闲来无事写的简化版,仅供大家理解Spring+SpringMvc的运作原理)
最近手头正好有些时间,想着写点什么好呢?后来看到了一篇帖子说面试的时候有面试官问他能不能手写一套SpringMvc出来,不拉不拉的….不多说了。所以想着就写写试试,捋了捋思路,无非就是三点(大神勿喷!): 1. 实例化 2. 注入 3. url映射连起来说就是对加了@Controller、@Service注解的对象进行实例化,然后对这些对象中的某些加了@Autowired注解的属性进行依赖注入
2017-08-31 20:10:39 8549
原创 A.CTable开源框架Mybatis增强自动创建表/更新表结构/实现类似hibernate共通的增删改查-mybatis-enhance-actable
mybatis-enhance-actable-1.3.1.RELEASE不用再为mybatis无法自动创建表,不提供基本的增删改查而苦恼啦!有了A.CTable这将不再成为你苦恼的理由,而且学习简单,只要进行简单的配置,然后稍微看下源码注解就可以上手了,最新版本集成了tk.mybatis能够更好的支持日常的CUDR。
2017-07-07 20:19:29 27253 22
原创 实现阿里云MySQL数据库实时同步到AWS的MySQL数据库
通过上述步骤,我们成功实现了阿里云MySQL数据库到AWS MySQL数据库的实时数据同步。这个过程涉及到了多个技术组件,包括Canal、Kafka、Confluent和Kafka Connect JDBC,每个组件都有自己的配置要求和使用方法。但是,只要我们遵循上述步骤和配置方法,就可以顺利实现数据同步。
2024-01-05 11:18:21 937
原创 Kafka实战:消息队列系统的构建与优化
如果设置为非0值,比如5(毫秒),则生产者会等待5毫秒,让更多的消息有机会加入到当前的批量中,如果在这5毫秒内,新的消息到来,那么它们就会被加入到批量中一起发送;如果5毫秒过去了,新的消息还没有到来,那么生产者就会发送当前的批量。通常情况下,Kafka生产者会尽可能地将多个消息打包成一个批量,然后一次性发送给broker,这样可以提高网络传输的效率。但是,如果在一个批量被发送前,新的消息一直没有到来,那么这个批量就会一直等待,导致延迟。所以,如果生产的消息非常大,或者产生的速度非常快,那么可能会在。
2023-12-29 11:05:19 579
原创 HTTP 原理
HTTP是一个无状态的协议。无状态是指客户机(Web浏览器)和服务器之间不需要建立持久的连接,这意味着当一个客户端向服务器端发出请求,然后服务器返回响应(response),连接就被关闭了,在服务器端不保留连接的有关信息.HTTP 遵循请求(Request)/应答(Response)模型。客户机(浏览器)向服务器发送请求,服务器处理请求并返回适当的应答。所有 HTTP 连接都被构造成一套请求和应答。传输流程1:地址解析如用客户端浏览器请求这个页面:http://localhost.com:8080/inde
2022-12-05 14:48:35 395 1
原创 Redis这一篇就够了
概述什么是RedisRedis(Remote Dictionary Server) 是一个使用 C 语言编写的,开源的(BSD许 可)高性能非关系型(NoSQL)的键值对数据库。Redis 可以存储键和五种不同类型的值之间的映射。键的类型只能为字符串,值 支持五种数据类型:字符串、列表、集合、散列表、有序集合。与传统数据库不同的是 Redis 的数据是存在内存中的,所以读写速度非常快, 因此 redis 被广泛应用于缓存方向,每秒可以处理超过 10万次读写操作,是已 知性能快的Key-V
2021-05-20 14:39:29 1380
原创 是什么导致了CommunicationsException, druid version 1.1.16
CommunicationsException, druid version 1.1.16, jdbcUrl : jdbc:mysql://rm-xxxxxxxxxxx.mysql.rds.aliyuncs.com:3306/db_xxxxx_prod?useSSL=false&useAffectedRows=true&useUnicode=true&characterEncoding=UTF-8, testWhileIdle true, idle millis 5
2021-04-21 11:21:02 5913 3
原创 开源框架mybatis-enhance-actable.1.1.0.RELEASE新版本迭代
五年前作为一名工作一年的程序渣的我,开始了思考,为了降低重复性及含金量低的技术工作,我准备结合自己的痛点写一个小插件,因为当时对mybatis和hibernate都有接触,总结分析后,觉得mybatis的灵活性更大未来前景广泛,而且入门难度最低,但同时**在当时**他的缺陷也很明显。首先他不具备跟hibernate一样的自动建表能力,表结构稍有变化需要,准备sql脚本,然后去改自己的实体类,这种过程是很无聊的,而且万一上生产忘记执行某个sql脚本,或用了错误的脚本就尴尬了,毕竟人做的事情不如机器做的靠谱
2020-05-27 21:58:33 2825 3
原创 Jedis3.0以上版本关闭连接时遇到的坑
在高并发场景业务日志频发出现jedis如下异常信息redis.clients.jedis.exceptions.JedisException: Could not return the resource to the pool at redis.clients.util.Pool.returnBrokenResourceObject(Pool.java:103) at redis.clien...
2020-03-19 14:03:08 2023
原创 商城拍卖活动设计方案 瞬时并发高可用
然后是看下我们的小程序页面其实很简单的,就登陆成功后到列表页开始倒计时,然后点击详情,倒计时结束,进入拍卖中的倒计时,需要交保证金,交完保证金,去竞价即可,活动时间结束,谁拍到了就去付尾款。接口层部分做了如下8个接口,当然还有8个数据维护的接口这里就不列举了,就是针对表数据的一个增删改查,后面看DB设计即可知晓,流程没有画的特别详细但是主要流程都写了。这边设计的后台数据维护功能是一个拍卖活动下,可以配置多个单位级的拍卖商品,是一对多的关系。4. 拍卖阶段叫价(最后一秒有人出价会延时5分钟)
2019-10-22 15:53:04 6874 1
原创 网站访问突然变慢一系列解决思路
1. 首先看下机器的CPU资源是否过高,如果CPU资源过高会导致网站响应变慢,如果是那么需要看下哪个服务占用了CPU的资源,然后详细排查过高的原因1) 通过top命令找出占用CPU高的PID2) 通过ps aux | grep pid 可以进一步确定这个pid运行的是什么服务3)查看线程列表ps -mp pid -o THREAD,tid,time,观察这个服务的哪几个线程占用了CPU...
2019-05-16 22:15:20 8751
原创 开源框架springboot-mybatis-wr-separation实现springboot+mybatis读写分离
最近做springboot+mybatis的项目想要用到读写分离,查了一圈发现大家都是自己写的,没用通用现成的读写分离架构,因此就写了一个比较简单好用的小插件,来帮助大家简单的实现读写分离的功能,项目已开源并已经上传到maven中央仓库,欢迎提出宝贵意见,共同改进。springboot-mybatis-wr-separation介绍springboot-mybatis-wr-separa...
2019-05-16 13:23:22 6340 1
原创 手机浏览器唤起支付宝并打开指定页面
支付宝的红包功能让一批人先富了起来,很多大大小小的网站都嵌入了领红包的脚本一点就直接唤起了支付宝,并且打开领红包的页面,那么这个功能是怎么实现的呢?支付宝提供了专门的接口通过scheme启动,scheme可以理解为一种特殊的URI,格式与URI相同,具体使用如下:支付宝客户端的标准scheme为:alipays://platformapi/startapp?appId=如果是某些运营页...
2019-04-28 11:42:17 49240 5
原创 编写简单的Web容器TomDog(揭Web容器面纱)
从事Java Web编程的朋友都知道,一个web应用的组成必须要有web.xml,因为这个是web应用程序的入口,通常我们会选择一种Web容器来发布我们的Web项目,比如Tomcat、Weblogic等容器服务程序。这些程序都遵从一个标准的Web工程标准,他们启动时都会去主动读取指定位置的web.xml文件,web.xml中的各个节点都是既定的标准,Web容器会去按照规则读取配置信息将各种Cl...
2018-10-12 15:29:12 6278
原创 一段代码引发对泛型的重新认识
故事背景:小伙伴在开发一个导出功能时在处理数据结构的过程中,产生了一个诡异的数据结构,在一个List<String>这个类型的变量中,他的值列表却不是我们认为的String类型,而是String和Double的混合数据,由于他的业务复杂,我这边根据他代码的基本思想写出了如下demo代码。public static void main(String[] args){ List&...
2018-08-31 11:12:20 5837
原创 springmvc架构和springboot架构通用的引入配置方式
当我们在写一些插件或者通用功能时,可能会把他们打成jar包,如果是给web项目使用时,可能会出一个部署文档,比如要配置一些什么配置用来支持我们这个jar包里面的功能,这里建议这些可配置的参数在我们jar包中的引入方式使用@Value("${wechat.appid}")这个对于不同架构方式下都可以很容易的配置出来,下面举了三个常见的例子:1. 使用了spring的项目需要配置xml的项目在注...
2018-08-07 16:02:05 6415
原创 大型商城活动防刷限流方案
最近负责的一个某品牌手机的官方商城,他们要发售一款新手机,以往都是各个渠道一起发售,但是本次决定官网首发10000台,这样一来其他渠道的消费者都会被引流到官网来(天猫/京东/苏宁/线下),其庞大的流量并发可想而知,原有的功能实现肯定无法承载这种体量,因此我们全面优化了预售功能,分别按照以下几个点来操作:1. 页面静态化(动态数据全部通过js异步获取,并且需要控制异步请求的数量,页面缓存到CDN)2...
2018-02-08 22:10:17 8664
原创 AOP的应用之分布式锁
大家在做分布式多节点等系统的开发中为了保证某些业务操作场景的原子性操作,一定会用到锁的概念,传统的synchronized无法满足分布式多节点的系统,所以大家都会用Redis实现分布式锁,怎么实现我这里就先不多说了大家百度一下可以查到一大堆。但还是要简单的说一下主要就是使用redis的setnx(key,value)方法配合del(key)方法,也就是在第一个请求进来的时候执行这个方法,会将一
2018-01-31 12:49:23 7500
原创 开源插件ACTable已经打包放到Maven中央仓库啦!
开源插件ACTable(基于Mybatis自动建表、并支持共通CUDR)上线啦!由于很多小伙伴在使用actable的时候都不得不下载源码,然后在本地install打包然后使用,所以最近我抽空,将其打包放在了maven中央仓库上,因此包的结构有所调整,引入方式如下:pom.xml中引入<dependency> <groupId>com.gitee.sunchenbin.mybatis.acta
2017-11-13 18:02:02 7679 3
原创 如何将jar包上传到Maven中央仓库
最近actable的部分功能已经完善了,一些小伙伴已经在使用了,但是由于没有放到远程仓库,导致使用的小伙伴都需要自己将代码取下来,然后install,这样不太好,所以最近就规划了下包结构,上传到了maven中央仓库中,以下是上传步骤。1.创建工单1.1 https://issues.sonatype.org/secure/Dashboard.jspa新建一个账号,登录后选择Create Issue,
2017-11-13 14:23:18 19345 14
原创 SpringMvc通过自定义注解在方法的参数中注入数据
说一个场景,有时候我们做后台业务的时候,经常需要取session中存储的用户信息,所以免不了一直需要写下面这一段又长又无聊的代码:MemberCommand memberCommand = (MemberCommand) request.getSession().getAttribute(SessionAttr.MEMBER_DETAIL);那么怎么避免这个事情呢,下面我们就来通过一个自定义注解@M
2017-09-01 14:21:14 18648 1
原创 自定义注解@NeedLogin登录校验
今天介绍的是一个关于登录校验的自定义注解,之前有过一篇写如果自定义注解的博文:Java中的自定义注解那么这次讲一个经常会出现的场景下,会使用到的注解,一般我们无论是开发后端系统还是前端系统,都会有用户的概念,那么很多业务场景下我们都需要去校验当前访问者是否已经登录了,举个例子,如果是一个商城系统访问者要访问用户个人中心,那么请求发出到服务器后程序一定会先去校验是否登录了,如果没有登录让他跳到去登录的
2017-08-22 11:23:04 11224
原创 Ajax异步提交List对象,SpringMvc如何接收?
Springmvc的一个问题一直被广大开发者所诟病,就是在list对象的转换上一直并不是特别好用,网上很多解决方法关于不同的表单提交方式这里就不多说了,只介绍下ajax方式提交list对象的方法。比如你要通过ajax传递下面一段数据到controller:var json = [{'id':1,'name','aaa'},{'id':2,'name','bbb'},{'id':3,'name','c
2017-08-16 13:46:38 11246 1
原创 微信卡券功能JAVA版(PS : 其实无关乎什么语言拉 :) )
关于微信卡券的流程大家可以参考下微信官方文档http://mp.weixin.qq.com/wiki/9/4f455120b50741db79b54fde8896b489.html 其中的“微信卡券接口”——>“微信卡券接口说明”了解下什么是卡券,怎么玩的这里不再多做赘述,可以使用测试帐号按照“微信卡券接口说明”中的步骤,从获取token到创建卡券设置白名单,然后是投放卡券,卡券领取及核销等流程,
2017-03-17 14:07:43 15025 6
原创 request.getHeader("user-agent")为null
今天一大早来,发现日志文件大小暴增,艰难的打开一部分查看之后发现,一直在报空指针的错误,所以检查了下代码,发现String ua = ((HttpServletRequest) request).getHeader(“user-agent”).toLowerCase();这段话一直报错,马上就反应过来((HttpServletRequest) request).getHeader(“user-age
2017-03-01 13:25:48 16779 3
原创 访问使用https协议的网址时,浏览器地址栏没有显示“安全锁”的标志的问题
这种问题造成的原因,首先要检查的是,使用的SSL证书是否过期,查看方式很简单,F12浏览器开发者模式,切换到Security选项,然后会看到一个View certificate的按钮,点一下就会弹出这个 网址使用的SSL证书的详细信息了,其中包括了证书的有效期开始时间和结束时间,如果是由于过期了那么只要续费延期就可以解决这个问题。那么还有一种情况,明明SSL证书没有过期,但地址栏就是显示感叹号,而
2017-02-23 17:52:00 16911 1
原创 org.apache.commons.net.util.Base64的encodeBase64String方法的坑
今天在做汽车之家接口数据调用时,发现一个问题,由于对方服务器有身份验证,需要根据一定的格式将相关信息加密然后转成Base64然后放到http请求的header中。我在实际操作中遇到奇怪问题,明明加密后的字符串是错的,可对方的iis服务却能收到这个错误的请求,尽管不会通过身份验证,这时返回错误代码是401,标识没有权限,其实就是身份验证失败。但修改代码后,确认了加密后的字符串的正确性,可对方iis服务
2017-01-17 15:56:50 39079
原创 JAVA8新特性(访问接口的默认方法)
访问接口的默认方法还记得第一节中的formula例子么,接口Formula定义了一个默认方法sqrt可以直接被formula的实例包括匿名对象访问到,但是在lambda表达式中这个是不行的。 Lambda表达式中是无法访问到默认方法的,以下代码将无法编译: 复制代码 代码如下:Formula formula = (a) -> sqrt( a * 100);Built-in Functional
2016-09-26 17:46:46 7213
原创 JAVA8新特性(Lambda 表达式)
Lambda 表达式首先看看在老版本的Java中是如何排列字符串的: 复制代码 代码如下:List names = Arrays.asList(“peter”, “anna”, “mike”, “xenia”); Collections.sort(names, new Comparator() { @Override public int compare(String a,
2016-09-26 17:35:19 6665
原创 JAVA8新特性(接口的默认方法)
一、接口的默认方法Java 8允许我们给接口添加一个非抽象的方法实现,只需要使用 default关键字即可,这个特征又叫做扩展方法,示例如下: 复制代码 代码如下:interface Formula { double calculate(int a); default double sqrt(int a) { return Math.sqrt(a); }}
2016-09-26 17:25:11 6555
原创 关于java中的BigDecimal类型,新手常见问题汇总
首先BigDecimal是一个不可变类型,什么是不可变类型呢?当一个普通类 (class) 的实例不能被修改时,我们便称之为「不可变类」(immutable class)。这样的类在实例化时便需要提供其所有的值,而在之后的运行中便绝不可更改。比如大家可能都知道的 Java 中已有的一些不可变类型,String (string 的字符串联很没效率,对吧), BigInteger, 和 BigDe
2016-09-02 21:01:03 9423 1
原创 postgresql的一个简单的sql
首先是有两个表,一个是用户信息表,一个是用户登录日志表,用户信息表中有一个字段upgrade_time,是一个同步数据时间,每天如果用户登录,会将当前时间与upgrade_time时间去做比较,如果时间差在一天以内,那么不做同步,超过一天的话调用接口同步会员数据,并将upgrade_time更新成同步数据的时间。然后是用户登录日志表,这个表很简单,用户登录一次,就会插入一条数据,并记录当前登录的时
2016-08-26 14:57:16 6088
原创 Mybatis 实现共通的增删改查
基于之前写的一套SpringMvc+Mybatis+Maven开源框架,实现了通过配置model层注解的方式,在项目启动的时候自动创建更新表结构。如果没看过的可以看下那篇文章的博客地址:Mybatis自动创建表/更新表结构/动态建表这本身是一个类似于hibanete的功能,因此,为了更加适合使用hibanete的同学,再次增加共通的CRUD方法,用于对基本表的增删改查,不需要使用代码生成器工具或者自
2016-08-13 10:08:03 8961
商城拍卖活动后端源代码java
2022-12-20
图片文件转换工具 v 1.4
2022-12-20
B+树聚簇索引 精讲开发培训
2022-12-19
mongdb 开发规范精讲 精华部分
2022-12-19
rocketmq 开发规范 精讲 精华部分
2022-12-19
redis开发规范 精讲 精华部分
2022-12-19
企业 技术岗能力模型-开发类
2022-12-19
东华大学 组织行为学 期末大作业 答案
2022-06-07
spring-cloud-project.zip
2020-06-11
Mybatis_BuildTable_V0.2
2016-06-25
新闻发布系统
2013-01-10
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人