Java
浮生(FS)
擅长领域Java开发所需各种框架技术,7年以上的商城项目(3C/汽车/服饰/电器)、电商运营平台自动化、后端OMS、WMS实战经验,擅于提供各种业务场景的技术解决方案;具备丰富的团队管理经验和架构能力。
展开
-
是什么导致了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 · 5882 阅读 · 3 评论 -
Squaretest 自动生成Mock单元测试
今天来介绍一款工具Squaretest,它是一款自动生成单元测试的插件,为什么会用到它也是因为最近公司上了代码质量管控的指标,会考评各个项目的单元测试覆盖率,以及sonar扫描出来的各种问题,很多老项目老代码,或者着急交付的项目,单元测试严重缺失,覆盖率只有5%不到,所以几个小伙伴这几天就在疯狂的堆单元测试,3个人堆了2天才堆到30%,于是我也来上手帮忙写了两个,写到第二个的时候就发现,这个活不应该是人干的,要去看原来的代码,然后根据逻辑写各种Mock,感觉是有迹可循的东西,所以就查了下,发现果然有插件帮我原创 2020-12-11 17:41:05 · 41848 阅读 · 18 评论 -
开源框架mybatis-enhance-actable.1.1.0.RELEASE新版本迭代
五年前作为一名工作一年的程序渣的我,开始了思考,为了降低重复性及含金量低的技术工作,我准备结合自己的痛点写一个小插件,因为当时对mybatis和hibernate都有接触,总结分析后,觉得mybatis的灵活性更大未来前景广泛,而且入门难度最低,但同时**在当时**他的缺陷也很明显。首先他不具备跟hibernate一样的自动建表能力,表结构稍有变化需要,准备sql脚本,然后去改自己的实体类,这种过程是很无聊的,而且万一上生产忘记执行某个sql脚本,或用了错误的脚本就尴尬了,毕竟人做的事情不如机器做的靠谱原创 2020-05-27 21:58:33 · 2818 阅读 · 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 · 2017 阅读 · 0 评论 -
CPU连续飙升的背后是 “道德的沦丧” 还是 “人性的泯灭”
最近负责的一个老项目CPU时不时的就会飘到90%以上,然后宕掉,这个项目是一个汽车类的商城支持在线下单预约试驾等功能,咨询品牌方说是做了一波投放,但是没有提前通知我们,看了一波日志其实请求量也不是特别大。 我们的系统是部署在阿里云上的,下面是简单的系统机构图: 理论上按照这个配置没理由cpu利用率没理由飙升这么高,以至于品牌方和PM频繁收到阿...原创 2019-12-27 19:09:05 · 11150 阅读 · 11 评论 -
商城拍卖活动设计方案 瞬时并发高可用
然后是看下我们的小程序页面其实很简单的,就登陆成功后到列表页开始倒计时,然后点击详情,倒计时结束,进入拍卖中的倒计时,需要交保证金,交完保证金,去竞价即可,活动时间结束,谁拍到了就去付尾款。接口层部分做了如下8个接口,当然还有8个数据维护的接口这里就不列举了,就是针对表数据的一个增删改查,后面看DB设计即可知晓,流程没有画的特别详细但是主要流程都写了。这边设计的后台数据维护功能是一个拍卖活动下,可以配置多个单位级的拍卖商品,是一对多的关系。4. 拍卖阶段叫价(最后一秒有人出价会延时5分钟)原创 2019-10-22 15:53:04 · 6867 阅读 · 1 评论 -
java中通过包名获取该包下的所有class
前面做的在mybatis通过注解自动创建更新表结构的项目,其中在spring加载完毕之后需要去获取所有实体类的class,用来获取实体类属性上的注解,进而分析表结构达到创建修改表结构的目的。所以就需要一个功能,通过包名获取该包下的所有class,那么直接贴代码:package com.sunchenbin.store.utils;import java.io.File;import原创 2016-07-15 19:00:48 · 18846 阅读 · 0 评论 -
关于java中的BigDecimal类型,新手常见问题汇总
首先BigDecimal是一个不可变类型,什么是不可变类型呢?当一个普通类 (class) 的实例不能被修改时,我们便称之为「不可变类」(immutable class)。这样的类在实例化时便需要提供其所有的值,而在之后的运行中便绝不可更改。比如大家可能都知道的 Java 中已有的一些不可变类型,String (string 的字符串联很没效率,对吧), BigInteger, 和 BigDe原创 2016-09-02 21:01:03 · 9420 阅读 · 1 评论 -
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 · 6553 阅读 · 0 评论 -
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 · 6664 阅读 · 0 评论 -
JAVA8新特性(访问接口的默认方法)
访问接口的默认方法还记得第一节中的formula例子么,接口Formula定义了一个默认方法sqrt可以直接被formula的实例包括匿名对象访问到,但是在lambda表达式中这个是不行的。 Lambda表达式中是无法访问到默认方法的,以下代码将无法编译: 复制代码 代码如下:Formula formula = (a) -> sqrt( a * 100);Built-in Functional原创 2016-09-26 17:46:46 · 7206 阅读 · 0 评论 -
org.apache.commons.net.util.Base64的encodeBase64String方法的坑
今天在做汽车之家接口数据调用时,发现一个问题,由于对方服务器有身份验证,需要根据一定的格式将相关信息加密然后转成Base64然后放到http请求的header中。我在实际操作中遇到奇怪问题,明明加密后的字符串是错的,可对方的iis服务却能收到这个错误的请求,尽管不会通过身份验证,这时返回错误代码是401,标识没有权限,其实就是身份验证失败。但修改代码后,确认了加密后的字符串的正确性,可对方iis服务原创 2017-01-17 15:56:50 · 39069 阅读 · 0 评论 -
request.getHeader("user-agent")为null
今天一大早来,发现日志文件大小暴增,艰难的打开一部分查看之后发现,一直在报空指针的错误,所以检查了下代码,发现String ua = ((HttpServletRequest) request).getHeader(“user-agent”).toLowerCase();这段话一直报错,马上就反应过来((HttpServletRequest) request).getHeader(“user-age原创 2017-03-01 13:25:48 · 16771 阅读 · 3 评论 -
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 · 11240 阅读 · 1 评论 -
自定义注解@NeedLogin登录校验
今天介绍的是一个关于登录校验的自定义注解,之前有过一篇写如果自定义注解的博文:Java中的自定义注解那么这次讲一个经常会出现的场景下,会使用到的注解,一般我们无论是开发后端系统还是前端系统,都会有用户的概念,那么很多业务场景下我们都需要去校验当前访问者是否已经登录了,举个例子,如果是一个商城系统访问者要访问用户个人中心,那么请求发出到服务器后程序一定会先去校验是否登录了,如果没有登录让他跳到去登录的原创 2017-08-22 11:23:04 · 11216 阅读 · 0 评论 -
解决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 · 19010 阅读 · 3 评论 -
一段代码引发对泛型的重新认识
故事背景:小伙伴在开发一个导出功能时在处理数据结构的过程中,产生了一个诡异的数据结构,在一个List<String>这个类型的变量中,他的值列表却不是我们认为的String类型,而是String和Double的混合数据,由于他的业务复杂,我这边根据他代码的基本思想写出了如下demo代码。public static void main(String[] args){ List&...原创 2018-08-31 11:12:20 · 5834 阅读 · 0 评论 -
Java中的自定义注解
说起注解来,大家第一想到的肯定是@Controller、@Service、@Autowired、@Resources、@ResponseBody、@Transactional等,当然还有很多,例举的这些都是大家非常熟悉的。使用过的人都知道,通过注解减少了我们很多冗余的代码量,用起来也很舒服,本文揭开注解的神秘面纱,自己动手写一个自定的注解。前几天我写了一套Mybatis根据在实体类上配置注原创 2016-07-03 18:12:46 · 8047 阅读 · 0 评论 -
jdk1.6下使用sardine和jackrabbit-webdav的问题
前几天,客户给了一个服务器地址和用户名密码,让把上面的文件,download到另一台服务器上,我查了下,发现该服务器使用文件协议是webdav,什么鬼。。。以前用的都是sftp或者ftp…所以百度了下。然后得到的结果就是使用sardine.jar或者jackrabbit-webdav.jar。这两种方式我更倾向于sardine,因为他的写法相对简单,代码量比jackrabbit-webdav会少一些原创 2016-03-07 10:55:23 · 8263 阅读 · 0 评论 -
try {}里有一个return语句,那么紧跟在这个try后的finally {}里的code会不会被执行,什么时候被执行,在return前还是后?
一般人都会回答在return之前执行,但是更详细的我觉得应该是在return中执行的。例如: public class Test {public static void main(String[] args) {System.out.println(new Test().test());}static int test(){int x =原创 2013-04-08 10:23:26 · 6824 阅读 · 1 评论 -
初识jdbc
首先建立java项目根据你使用的后台数据库选择jdbc.jar包,如果是oracle的话应该是ojdbc6.jar,如果是sqlserver的话是sqljdbc.jar ,如果是使用的mysql数据库的话使用mysql-connector-java.jar包当然这些jar包的版本可能相对老一些了,可以选择新使用。jar包放入项目中之后还要在属性中进行导入进来,否则不可用。 本篇原创 2013-05-10 09:10:16 · 6786 阅读 · 0 评论 -
设计模式及各大原则简介
简介项目开发中发现问题、解决问题这个过程中会出现很多问题,比如重复出现、某个问题的遗留,这些问题的本质就是设计模式。今天记录设计模式的知识点。内容在java以及其他的面向对象设计模式中,类与类之间主要有6种关系,他们分别是:依赖、关联、聚合、组合、继承、实现。它们的耦合度依次增强。依赖关系:对于两个相对独立的对象,当一个对象负责构造另一个对象的实例,或者依赖另一原创 2014-05-15 17:36:26 · 6640 阅读 · 0 评论 -
POI实现java导出Excel功能
POI实现java导出Excel功能原创 2014-09-11 13:53:38 · 6759 阅读 · 0 评论 -
java中使用poi实现导入Excel
java中使用poi实现导入Excel原创 2014-09-11 14:54:18 · 5911 阅读 · 0 评论 -
Tomcat负载均衡原理详解及配置(Apache2.2.19+Tomcat7.0.12)
结构图使用Tomcat的童鞋们注意了。为了增加tomcat的性能和稳定性,我们一般采用balance和session同步机制。 下图列出了我们常用也是最简单的解决方案。说明1 balance负载均衡我们一般采用Apache proxy和Apache+mod_jk方式所使用软件:Apache2.2.19 http://httpd.apache.org/dow转载 2014-12-15 18:14:23 · 5238 阅读 · 0 评论 -
自定义EL表达式,将对象转成json格式,关键代码
做javaweb开发的最常用的一个东西el表达式,这个东西是个很好用的东西,但有些时候我们处理复杂的字符串操作,就有些相形见绌了,这个时候就需要用自定义的方法去实现更多简洁方便的事情。下面自定义一个将对象转成json字符串的自定义el表达式用来讲解这个自定义的过程:ElFunctions.javaimport net.sf.json.JSONObject;public class ElFuncti原创 2015-12-18 16:58:22 · 19203 阅读 · 0 评论 -
关于CookieUtile的相关代码
关于CookieUtile的相关代码public class CookieUtil{ /** * 根据name获得cookie * * @param request * @param name * @return */ public static Cookie getCookie(HttpServletRequest req原创 2015-12-15 12:57:44 · 6448 阅读 · 0 评论 -
java获取客户端的ip地址
有时候我们需要根据系统的业务,做一些事情,比如,我这里有一个商城,今天有一件商品促销,限每个ip只能购买一件,那么我们就需要记录用户下单的ip,好的下面我直接贴出来代码。/** * 获得客户端ip地址 * * @param request * @return 获得客户端ip地址 */ public final static String getClientIp(Http原创 2015-12-15 12:36:04 · 5826 阅读 · 0 评论 -
java中split的坑,用的时候一定要小心
有的时候总觉得split很好用,屡试不爽,但他偶尔也会给你一点小惊喜。1.一些特殊业务场景,对自己拼接出来的字符串使用split分割,假设我们已经知道了这个长度,也许我们会这么写。String ids = "1,2,3,";// 对,你没有看错,我故意这么写的,根据我们的设想这里一定是四个值拼接的,即时有空字符串,使用split神器也可以成功分割出长度为4的数组。// 所以我这么写了。Strin原创 2015-12-07 13:19:05 · 31473 阅读 · 7 评论 -
InputStream需要被多次使用的解决方案
先把需求甩出来,我有两台SFTP服务器A、B,我需要从A中取出一批文件,上传到B中的目录①并且要备份到目录②,所以从A中我会得到一批InputStream。这个时候,为了效率我可能会close掉这个到A的连接,这里如果close掉了,那么这个流就消失了。还有假设我没有close掉A连接,那么当我将InputStream给put到B的目录①之后,继续put到B的备份目录②,这个时候你会发现,文件确实都原创 2015-12-03 09:31:43 · 9142 阅读 · 0 评论 -
sftp文件上传和读取
java中针对sftp服务器进行文件上传和读取的操作,代码如下:public class SftpUploadAndReadFile{ private ChannelSftp sftpClient; private SFTPUtils sftp = new SFTPUtils(); private final String原创 2015-11-26 14:41:28 · 15620 阅读 · 1 评论 -
JAVA反射机制的应用场景(注:菜鸟勿喷~~)
欢迎使用Markdown编辑器写博客本Markdown编辑器使用StackEdit修改而来,用它写博客,将会带来全新的体验哦:Markdown和扩展Markdown简洁的语法代码块高亮图片链接和图片上传LaTex数学公式UML序列图和流程图离线写博客导入导出Markdown文件丰富的快捷键这里写代码片快捷键加粗 Ctrl + B 斜体 Ctrl + I 引用原创 2015-09-28 17:33:05 · 9773 阅读 · 0 评论 -
java中使用XStream实现将对象转为xml格式字符串或者将xml格式的字符串转换为对象==
我们经常会有需求,比如调用别人的接口,别人会返回给你json或者xml格式的数据,然后我们要转换为相应的对象供我们自己使用; 也有的时候是别人的调我们的接口,让我们提供xml格式的数据或者json格式的数据,json的话这里都不说了,很好处理,甚至springMvc本身就很容易支持。 下面只介绍xml和对象彼此转换首先我们需要引入的jar包:xstream-1.4.8.jar下面直接贴代码,代码原创 2016-01-05 09:47:04 · 11729 阅读 · 0 评论 -
CompressUtils相关代码,java中文件压缩或解压已经文件的基本操作等方法
java中一些场合我们需要,对上传的压缩包中的内容进行处理,这个时候就用到了解压操作,还有压缩的操作等等,这里直接贴一下代码,以备今后自己可能会用到,还有共享给需要的小伙伴们。import java.io.BufferedInputStream;import java.io.BufferedOutputStream;import java.io.File;import java.io.File原创 2015-12-21 12:28:12 · 7871 阅读 · 0 评论 -
Java中通过jsch来连接远程服务器执行linux命令
有时候你可能需要通过代码来控制执行linux命令实现某些功能。针对这类问题可以使用JSCH来实现,具体代码如下:public class CogradientImgFileManager{ private static final Logger log = LoggerFactory.getLogger(CogradientImgFileManager.class); priva原创 2016-03-04 10:51:02 · 13509 阅读 · 2 评论 -
String中intern的方法
首先查看官方API那个的解释:———————————————————————————————————————internpublic String intern()返回字符串对象的规范化表示形式。 一个初始时为空的字符串池,它由类 String 私有地维护。 当调用 intern 方法时,如果池已经包含一个等于此 String 对象的字符串(该对象由 equals(Ob转载 2013-04-03 13:30:37 · 6468 阅读 · 0 评论