漫漫编程路
文章平均质量分 85
汇集个人程序之路上的工作经验以及技术点。
java/C#/javascript/hadoop/jquery/mysql/oracle/mongodb/nodejs
浮生(FS)
擅长领域Java开发所需各种框架技术,7年以上的商城项目(3C/汽车/服饰/电器)、电商运营平台自动化、后端OMS、WMS实战经验,擅于提供各种业务场景的技术解决方案;具备丰富的团队管理经验和架构能力。
展开
-
Redis这一篇就够了
概述什么是RedisRedis(Remote Dictionary Server) 是一个使用 C 语言编写的,开源的(BSD许 可)高性能非关系型(NoSQL)的键值对数据库。Redis 可以存储键和五种不同类型的值之间的映射。键的类型只能为字符串,值 支持五种数据类型:字符串、列表、集合、散列表、有序集合。与传统数据库不同的是 Redis 的数据是存在内存中的,所以读写速度非常快, 因此 redis 被广泛应用于缓存方向,每秒可以处理超过 10万次读写操作,是已 知性能快的Key-V原创 2021-05-20 14:39:29 · 1338 阅读 · 0 评论 -
是什么导致了Spring Aop失效了?
使用Spring Aop遇到的问题 我们在做一些统一操作的功能时,经常会使用到Spring的Aop技术,比如要在每个方法进入前做点什么事情,结束后做点什么事情,这个时候我们就会想到用到Aop去做,详细的使用方法这里就不展开了,默认大家都会用,如果不会用没有概念的话,可能没办法看懂下面的问题场景,这边主要面向的是对Spring和Aop有过实战的同学,好,题外话不说,看下面几种Aop...原创 2019-07-09 14:41:53 · 11824 阅读 · 3 评论 -
网站访问突然变慢一系列解决思路
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 · 8687 阅读 · 0 评论 -
开源框架springboot-mybatis-wr-separation实现springboot+mybatis读写分离
最近做springboot+mybatis的项目想要用到读写分离,查了一圈发现大家都是自己写的,没用通用现成的读写分离架构,因此就写了一个比较简单好用的小插件,来帮助大家简单的实现读写分离的功能,项目已开源并已经上传到maven中央仓库,欢迎提出宝贵意见,共同改进。springboot-mybatis-wr-separation介绍springboot-mybatis-wr-separa...原创 2019-05-16 13:23:22 · 6311 阅读 · 1 评论 -
手机浏览器唤起支付宝并打开指定页面
支付宝的红包功能让一批人先富了起来,很多大大小小的网站都嵌入了领红包的脚本一点就直接唤起了支付宝,并且打开领红包的页面,那么这个功能是怎么实现的呢?支付宝提供了专门的接口通过scheme启动,scheme可以理解为一种特殊的URI,格式与URI相同,具体使用如下:支付宝客户端的标准scheme为:alipays://platformapi/startapp?appId=如果是某些运营页...原创 2019-04-28 11:42:17 · 47612 阅读 · 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 · 6256 阅读 · 0 评论 -
一段代码引发对泛型的重新认识
故事背景:小伙伴在开发一个导出功能时在处理数据结构的过程中,产生了一个诡异的数据结构,在一个List<String>这个类型的变量中,他的值列表却不是我们认为的String类型,而是String和Double的混合数据,由于他的业务复杂,我这边根据他代码的基本思想写出了如下demo代码。public static void main(String[] args){ List&...原创 2018-08-31 11:12:20 · 5814 阅读 · 0 评论 -
springmvc架构和springboot架构通用的引入配置方式
当我们在写一些插件或者通用功能时,可能会把他们打成jar包,如果是给web项目使用时,可能会出一个部署文档,比如要配置一些什么配置用来支持我们这个jar包里面的功能,这里建议这些可配置的参数在我们jar包中的引入方式使用@Value("${wechat.appid}")这个对于不同架构方式下都可以很容易的配置出来,下面举了三个常见的例子:1. 使用了spring的项目需要配置xml的项目在注...原创 2018-08-07 16:02:05 · 6389 阅读 · 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 · 18715 阅读 · 3 评论 -
大型商城活动防刷限流方案
最近负责的一个某品牌手机的官方商城,他们要发售一款新手机,以往都是各个渠道一起发售,但是本次决定官网首发10000台,这样一来其他渠道的消费者都会被引流到官网来(天猫/京东/苏宁/线下),其庞大的流量并发可想而知,原有的功能实现肯定无法承载这种体量,因此我们全面优化了预售功能,分别按照以下几个点来操作:1. 页面静态化(动态数据全部通过js异步获取,并且需要控制异步请求的数量,页面缓存到CDN)2...原创 2018-02-08 22:10:17 · 8628 阅读 · 0 评论 -
AOP的应用之分布式锁
大家在做分布式多节点等系统的开发中为了保证某些业务操作场景的原子性操作,一定会用到锁的概念,传统的synchronized无法满足分布式多节点的系统,所以大家都会用Redis实现分布式锁,怎么实现我这里就先不多说了大家百度一下可以查到一大堆。但还是要简单的说一下主要就是使用redis的setnx(key,value)方法配合del(key)方法,也就是在第一个请求进来的时候执行这个方法,会将一原创 2018-01-31 12:49:23 · 7479 阅读 · 0 评论 -
开源插件ACTable已经打包放到Maven中央仓库啦!
开源插件ACTable(基于Mybatis自动建表、并支持共通CUDR)上线啦!由于很多小伙伴在使用actable的时候都不得不下载源码,然后在本地install打包然后使用,所以最近我抽空,将其打包放在了maven中央仓库上,因此包的结构有所调整,引入方式如下:pom.xml中引入<dependency> <groupId>com.gitee.sunchenbin.mybatis.acta原创 2017-11-13 18:02:02 · 7649 阅读 · 3 评论 -
如何将jar包上传到Maven中央仓库
最近actable的部分功能已经完善了,一些小伙伴已经在使用了,但是由于没有放到远程仓库,导致使用的小伙伴都需要自己将代码取下来,然后install,这样不太好,所以最近就规划了下包结构,上传到了maven中央仓库中,以下是上传步骤。1.创建工单1.1 https://issues.sonatype.org/secure/Dashboard.jspa新建一个账号,登录后选择Create Issue,原创 2017-11-13 14:23:18 · 19304 阅读 · 14 评论 -
SpringMvc通过自定义注解在方法的参数中注入数据
说一个场景,有时候我们做后台业务的时候,经常需要取session中存储的用户信息,所以免不了一直需要写下面这一段又长又无聊的代码:MemberCommand memberCommand = (MemberCommand) request.getSession().getAttribute(SessionAttr.MEMBER_DETAIL);那么怎么避免这个事情呢,下面我们就来通过一个自定义注解@M原创 2017-09-01 14:21:14 · 18594 阅读 · 1 评论 -
Spring+SpringMvc的手写版(PS:只是闲来无事写的简化版,仅供大家理解Spring+SpringMvc的运作原理)
最近手头正好有些时间,想着写点什么好呢?后来看到了一篇帖子说面试的时候有面试官问他能不能手写一套SpringMvc出来,不拉不拉的….不多说了。所以想着就写写试试,捋了捋思路,无非就是三点(大神勿喷!): 1. 实例化 2. 注入 3. url映射连起来说就是对加了@Controller、@Service注解的对象进行实例化,然后对这些对象中的某些加了@Autowired注解的属性进行依赖注入原创 2017-08-31 20:10:39 · 8520 阅读 · 0 评论 -
自定义注解@NeedLogin登录校验
今天介绍的是一个关于登录校验的自定义注解,之前有过一篇写如果自定义注解的博文:Java中的自定义注解那么这次讲一个经常会出现的场景下,会使用到的注解,一般我们无论是开发后端系统还是前端系统,都会有用户的概念,那么很多业务场景下我们都需要去校验当前访问者是否已经登录了,举个例子,如果是一个商城系统访问者要访问用户个人中心,那么请求发出到服务器后程序一定会先去校验是否登录了,如果没有登录让他跳到去登录的原创 2017-08-22 11:23:04 · 11102 阅读 · 0 评论 -
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 · 11199 阅读 · 1 评论 -
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 · 27054 阅读 · 22 评论 -
微信卡券功能JAVA版(PS : 其实无关乎什么语言拉 :) )
关于微信卡券的流程大家可以参考下微信官方文档http://mp.weixin.qq.com/wiki/9/4f455120b50741db79b54fde8896b489.html 其中的“微信卡券接口”——>“微信卡券接口说明”了解下什么是卡券,怎么玩的这里不再多做赘述,可以使用测试帐号按照“微信卡券接口说明”中的步骤,从获取token到创建卡券设置白名单,然后是投放卡券,卡券领取及核销等流程,原创 2017-03-17 14:07:43 · 14928 阅读 · 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 · 16588 阅读 · 3 评论 -
访问使用https协议的网址时,浏览器地址栏没有显示“安全锁”的标志的问题
这种问题造成的原因,首先要检查的是,使用的SSL证书是否过期,查看方式很简单,F12浏览器开发者模式,切换到Security选项,然后会看到一个View certificate的按钮,点一下就会弹出这个 网址使用的SSL证书的详细信息了,其中包括了证书的有效期开始时间和结束时间,如果是由于过期了那么只要续费延期就可以解决这个问题。那么还有一种情况,明明SSL证书没有过期,但地址栏就是显示感叹号,而原创 2017-02-23 17:52:00 · 16746 阅读 · 1 评论 -
org.apache.commons.net.util.Base64的encodeBase64String方法的坑
今天在做汽车之家接口数据调用时,发现一个问题,由于对方服务器有身份验证,需要根据一定的格式将相关信息加密然后转成Base64然后放到http请求的header中。我在实际操作中遇到奇怪问题,明明加密后的字符串是错的,可对方的iis服务却能收到这个错误的请求,尽管不会通过身份验证,这时返回错误代码是401,标识没有权限,其实就是身份验证失败。但修改代码后,确认了加密后的字符串的正确性,可对方iis服务原创 2017-01-17 15:56:50 · 38858 阅读 · 0 评论 -
JAVA8新特性(访问接口的默认方法)
访问接口的默认方法还记得第一节中的formula例子么,接口Formula定义了一个默认方法sqrt可以直接被formula的实例包括匿名对象访问到,但是在lambda表达式中这个是不行的。 Lambda表达式中是无法访问到默认方法的,以下代码将无法编译: 复制代码 代码如下:Formula formula = (a) -> sqrt( a * 100);Built-in Functional原创 2016-09-26 17:46:46 · 7178 阅读 · 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 · 6642 阅读 · 0 评论 -
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 · 6527 阅读 · 0 评论 -
关于java中的BigDecimal类型,新手常见问题汇总
首先BigDecimal是一个不可变类型,什么是不可变类型呢?当一个普通类 (class) 的实例不能被修改时,我们便称之为「不可变类」(immutable class)。这样的类在实例化时便需要提供其所有的值,而在之后的运行中便绝不可更改。比如大家可能都知道的 Java 中已有的一些不可变类型,String (string 的字符串联很没效率,对吧), BigInteger, 和 BigDe原创 2016-09-02 21:01:03 · 9342 阅读 · 1 评论 -
postgresql的一个简单的sql
首先是有两个表,一个是用户信息表,一个是用户登录日志表,用户信息表中有一个字段upgrade_time,是一个同步数据时间,每天如果用户登录,会将当前时间与upgrade_time时间去做比较,如果时间差在一天以内,那么不做同步,超过一天的话调用接口同步会员数据,并将upgrade_time更新成同步数据的时间。然后是用户登录日志表,这个表很简单,用户登录一次,就会插入一条数据,并记录当前登录的时原创 2016-08-26 14:57:16 · 6062 阅读 · 0 评论 -
Mybatis 实现共通的增删改查
基于之前写的一套SpringMvc+Mybatis+Maven开源框架,实现了通过配置model层注解的方式,在项目启动的时候自动创建更新表结构。如果没看过的可以看下那篇文章的博客地址:Mybatis自动创建表/更新表结构/动态建表这本身是一个类似于hibanete的功能,因此,为了更加适合使用hibanete的同学,再次增加共通的CRUD方法,用于对基本表的增删改查,不需要使用代码生成器工具或者自原创 2016-08-13 10:08:03 · 8907 阅读 · 0 评论 -
springMvc中获取通过注解获取properties配置文件
springMvc的项目中,通过注解@Value获取properties配置文件中的配置,使用该注解必须引入的包:spring-beans-4.1.4.RELEASE.jar下面是需要在spring的配置文件中配置的内容beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www原创 2016-08-13 10:03:29 · 16213 阅读 · 3 评论 -
关于使用Maven对项目进行install成功后得到的jar仍然是旧的的问题
分享一个最近遇到的关于maven的问题,使用maven对项目进行install的时候,明明日志显示install成功了,但是运行还是感觉代码没有变,jar包反编译之后发现还是旧的代码,而如果把旧的jar删掉重新打包,就可以,为什么呢!这是最近同事遇到的一个问题,后来调查发现,他为了测试这个功能,更改了本地的系统时间,而旧的jar的时间比现在的系统时间要大的多,所以maven的打包规则,原创 2016-08-04 14:14:16 · 13132 阅读 · 0 评论 -
java中通过包名获取该包下的所有class
前面做的在mybatis通过注解自动创建更新表结构的项目,其中在spring加载完毕之后需要去获取所有实体类的class,用来获取实体类属性上的注解,进而分析表结构达到创建修改表结构的目的。所以就需要一个功能,通过包名获取该包下的所有class,那么直接贴代码:package com.sunchenbin.store.utils;import java.io.File;import原创 2016-07-15 19:00:48 · 18788 阅读 · 0 评论 -
Java中的自定义注解
说起注解来,大家第一想到的肯定是@Controller、@Service、@Autowired、@Resources、@ResponseBody、@Transactional等,当然还有很多,例举的这些都是大家非常熟悉的。使用过的人都知道,通过注解减少了我们很多冗余的代码量,用起来也很舒服,本文揭开注解的神秘面纱,自己动手写一个自定的注解。前几天我写了一套Mybatis根据在实体类上配置注原创 2016-07-03 18:12:46 · 8016 阅读 · 0 评论 -
Nginx之页面缓存
1.指令说明proxy_cache_path语法:proxy_cache_path path [levels=number] keys_zone=zone_name:zone_size [inactive=time] [max_size=size]; 默认值:None 使用字段:http 指令指定缓存的路径和一些其他参数,缓存的数据存储在文件中,并且使用代理url原创 2016-07-02 19:13:06 · 14904 阅读 · 2 评论 -
Nginx之读写分离
1.实验拓扑 需求分析,前端一台nginx做负载均衡反向代理,后面两台httpd服务器。整个架构是提供BBS(论坛)服务,有一需求得实现读写分离,就是上传附件的功能,我们上传的附件只能上传到Web1,然后在Web1上利用rsync+inotify实现附件同步,大家都知道rsync+inotify只能是主向从同步,不能双向同步。所以Web1可进行写操作,而Web2只能原创 2016-07-01 21:51:41 · 19129 阅读 · 2 评论 -
Nginx之URL重写
1.URL重写模块(Rewrite)摘要这个模块允许使用正则表达式重写URI(需PCRE库),并且可以根据相关变量重定向和选择不同的配置。如果这个指令在server字段中指定,那么将在被请求的location确定之前执行,如果在指令执行后所选择的location中有其他的重写规则,那么它们也被执行。如果在location中执行这个指令产生了新的URI,那么location又一次确定原创 2016-07-01 16:46:56 · 14623 阅读 · 0 评论 -
Mybatis自动创建表/更新表结构/动态建表
该项目已经重新抽取形成独立的插件,方便不同项目使用详情轻看这篇博客中介绍的内容: 这里写链接内容最近有小伙伴问我mybatis有没有自动创建表结构的功能,因为他们之前一直使用hibernate用习惯了,理所当然的认为,在实体类上配置下注解或者写写映射文件,系统启动后就可以自动创建表。我只能很遗憾的告诉他,mybatis并没有这个功能,看他兴致阑珊的样子,我只能安慰他,就算没有这功能,我们可以自己开原创 2016-06-27 09:56:53 · 52208 阅读 · 13 评论 -
Nginx之负载均衡
注,大家可以看到,由于我们网站是发展初期,nginx只代理了后端一台服务器,但由于我们网站名气大涨访问的人越来越多一台服务器实在是顶不住,于是我们加了多台服务器,那么多台服务器又怎么配置代理呢,我们这里以两台服务器为案例,为大家做演示。1.upstream 负载均衡模块说明案例:下面设定负载均衡的服务器列表。1234567原创 2016-06-26 22:15:55 · 12214 阅读 · 0 评论 -
Nginx之(正)反向代理
在配置nginx反向代理之间我们得先准备两台测试服务器,Web1与Web2。1.安装httpd12[root@web1 ~]# yum install -y httpd[root@web2 ~]# yum install -y httpd2.提供测试页面12原创 2016-06-26 10:36:00 · 12512 阅读 · 0 评论 -
Nginx之环境准备
1. 操作系统CentOS 6.4 x86_642.软件版本Nginx 1.4.23.实验拓扑注,实验拓扑见下文。4.安装yum源123[root@nginx ~]# rpm -ivh http://download.fedoraproject.org/pub/epel/6/原创 2016-06-25 22:15:53 · 12308 阅读 · 0 评论 -
基于maven的springMvc+Mybatis,搭建项目的时候发现一些问题这里例举下
1.怎样使用maven的tomcat去运行项目?需要在运行项目的pom文件的build里做如下配置plugin> groupId>org.apache.tomcat.mavengroupId> artifactId>tomcat7-maven-pluginartifactId> version>2.2version> configuration原创 2016-06-17 09:53:00 · 7483 阅读 · 0 评论