- 博客(298)
- 资源 (1)
- 问答 (12)
- 收藏
- 关注
原创 找了些关于eureka注册中心高可用的文章
概述最近在研究注册中心高可用,打算把线上的单台注册中心升级为三台注册中心,并两两注册。找了一些相关的资料,记录一下。资料Eureka 源码解析 —— 应用实例注册发现(四)之自我保护机制了解Spring Cloud Eureka Server自我保护和更新阈值The Mystery of Eureka self-preservationService Discovery: Eu...
2018-09-30 09:56:41
489
原创 Junit 5中@ParameterizedTest结合@EnumSource
概述有时候业务代码里会根据一个枚举值来区分业务场景,比如说:public enum ActivityLimitEnum { LIMIT(1,"封顶"), UNLIMIT(0,"上不封顶");}如果编写单元测试来验证业务代码,至少需要写两个测试方法,一个验收封顶逻辑,一
2018-09-20 11:33:28
2132
1
原创 Spring Boot单元测试中使用mockito框架mock掉整个Redis
概述当我们使用单元测试来验证应用程序代码时,如果代码中需要访问Redis,那么为了保证单元测试不依赖Redis,需要将整个Redis mock掉。在Spring Boot中结合mockito很容易这点,如下代码:import org.mockito.Mockito;import org.springframework.context.annotation.Bean;import org....
2018-09-18 18:17:35
17241
1
转载 转载李学凯一篇Intellij IDEA的文章
这篇文章虽然是16年写的,但是目前看来,还是非常经典,值得好好读读,提高操作IDEA的效率。IntelliJ IDEA 详细图解最常用的配置 ,适合刚刚用的新人...
2018-09-14 09:47:19
787
原创 Spring Cloud工程模块划分
Spring Cloud工程模块划分现在网络上都在讲Spring Cloud的各个组件,但当我们自己也把Spring Cloud引入进来的时候,却发现第一个要解决的问题是:工程的模块如何划分在之前我写过一篇重构购物车的过程的文章,下面就以这个购物车工程,来说明当时我是如何思考和如何做的。工程要分几个模块API模块当时的购物车工程是基于Spring...
2018-08-28 16:37:56
18813
1
原创 重构购物车的过程
背景公司目前所有的核心业务都在一个应用中,属于单体应用,随着业务的快速发展和开发人员的不断增加,单体应用的开发模式就开始暴露出各种各样的问题。经历过这个过程的开发人员,想必深有体会。我举个最近才遇到的一个例子。今年的八月份,有5个大需求要在同一天上线,由于只有一个单体应用,5个需求又都不同,因此拉了5个开发分支,对应5个需求。好了,在八月的某个相同时间段,各个测试人员都要开始测试自己负...
2018-08-26 15:31:31
2127
2
原创 Python基础学习-异常的检测和处理
捕获异常# 对数字变量使用append操作a = 123a.apppend(4)执行这个程序时,会抛出:AttributeError: 'int' object has no attribute 'apppend'我们使用try:except语句进行捕获。# 捕获异常a = 123try: a.apppend(4)except AttributeEr...
2018-06-26 14:01:05
976
原创 Python基础学习-文件操作
最简单的写文件操作# 往文件里面写数据file1 = open("test.txt", "w", encoding="utf-8")file1.write("Sam哥哥")file1.close()使用open方法,打开文件
2018-06-21 09:26:53
623
原创 Python基础学习-字典以及字典推导
字典# 空字典map1 = {}print(type(map1))# 给字段赋值map2 = {'x': 1, 'y': 2}print(map2)# 给字典添加值map2['z'] = 3print(map2)输出结果:<class 'dict'>{'x': 1, 'y': 2}{'x': 1, 'y': 2, 'z': 3}字典推...
2018-06-20 09:32:39
409
原创 Python基础学习-条件与循环
if语句最简单的if语句# 定义age变量age = 12# 最简单的if语句if age == 12: print(&amp;quot;age等于12&amp;quot;)输出结果如下:age等于12python语法比较简洁,if语句里面无需小括号,也无需大括号。但是注意,if语句的最后面,也加上一个冒号。if else 语句# 定义age变量age = 13# 最...
2018-06-18 19:29:10
393
原创 Python基础学习-序列
序列的概念 序列是指它的成员都是有序排列,并且可以通过下标偏移量访问到它的一个或几个成员。像字符串、列表和元祖都属于序列。字符串: “xxxxyyy”列表: [“aa”,”bb”]元祖: (”abc”,”def”)比如对一个字符串的处理:# 定义变量s,存储字母s = "abcdefghijk"# 通过下标0获取第一个字母print(s[0])# 通过...
2018-06-18 18:57:18
722
原创 Python基础学习-基础语法
数据类型整数(int) 浮点数(float) 字符串(str) 布尔值(bool) 区分数字类型我们可以使用type()方法来区分数字类型。# 字符串print(type(&quot;111&quot;))print(type(&quot;中国&quot;))# 数字print(type(1))# 浮点数print(type(2.2))# bool类型...
2018-06-16 16:23:48
478
原创 Intellij IDEA神器那些让人爱不释手的小技巧
概述在2018年5月6日写了一篇介绍IntellIJ IDEA的文章,Intellij IDEA神器居然还有这些小技巧,主要是列出一些平时大家可能没用过或者没怎么用,但是又非常好用的IntellIJ IDEA小技巧。由于篇幅原因,只是列出了一小部分,那么接下来的这篇文章,会继续补充一些IntellIJ IDEA的小技巧。别轻易自定义快捷键有蛮多操作,IntellIJ I...
2018-06-03 22:47:16
41818
14
原创 遇到过的判断营销活动状态的两种方案
利用活动开始时间和结束时间像天猫、京东、唯品会,经常会推出各种各样的营销活动来吸引用户购买,营销活动是有状态的,一般来说,有以下几种状态。 活动未开始,活动已开始、活动已结束、活动已废弃活动未开始、已开始、已结束,这三个状态可以使用活动开始时间和活动结束时间来得出。public int getActivityState(Activity activity,Date cur...
2018-05-20 12:17:28
2879
原创 犯了个低级错误:mybatis中在select标签中用了update语句
概述昨晚想使用类似下面的语句防并发问题: update xxxxx set state= 1 where id = 1 and state= 0这样万一有线程并发修改state,那么只有一个线程能拿到大于0的影响行数。谁知一调用就报如下错误:attempted to return null from a method with a primitive return t...
2018-05-19 10:35:25
8601
9
原创 推荐一个Intellij IDEA插件--Key Promoter X
概述Key Promoter X 是一个提示插件,当你在IDEA里面使用鼠标的时候,如果这个鼠标操作是能够用快捷键替代的,那么Key Promoter X会弹出一个提示框,告知你这个鼠标操作可以用什么快捷键替代。对于想完全使用快捷键在IDEA的,这个插件就很有用。安装这个插件很简单,只需要打开Settings,然后找到Plugins那一栏目,然后输入key promoter,如果找不到...
2018-05-16 08:31:35
51885
13
原创 Intellij IDEA神器居然还有这些小技巧
概述Intellij IDEA真是越用越觉得它强大,它总是在我们写代码的时候,不时给我们来个小惊喜。出于对Intellij IDEA的喜爱,我决定写一个与其相关的专栏或者系列,把一些好用的Intellij IDEA技巧分享给大家。本文是这个系列的第一篇,主要介绍一些你可能不知道的但是又实用的小技巧。我最爱的【演出模式】我们可以使用【Presentation Mode】,...
2018-05-06 13:17:01
47660
33
原创 Spring Cloud Config结合Bus实现分布式配置中心
概述假设现在有个需求: 我们的应用部署在10台机器上,当我们调整完某个配置参数时,无需重启机器,10台机器自动能获取到最新的配置。如何来实现呢?有很多种,比如: 1、将配置放置到一个数据库里面,应用每次读取配置都是直接从DB读取。这样的话,我们只需要做一个DB变更,把最新的配置信息更新到数据库即可。这样无论多少台应用,由于都从同一个DB获取配置信息,自然都能拿到最新的配置。...
2018-05-05 09:27:56
3725
5
原创 Spring Boot RabbitMQ 延迟消息实现完整版
概述曾经去网易面试的时候,面试官问了我一个问题,说 下完订单后,如果用户未支付,需要取消订单,可以怎么做我当时的回答是,用定时任务扫描DB表即可。面试官不是很满意,提出: 用定时任务无法做到准实时通知,有没有其他办法?我当时的回答是: 可以用队列,订单下完后,发送一个消息到队列里,并指定过期时间,时间一到,执行回调接口。面试官听完后,就不再问了。其...
2018-05-03 13:19:39
19779
35
原创 win10下安装rabbitmq
下载地址 http://www.rabbitmq.com/install-windows.html打开这个网站,直接下载 rabbitmq-server-3.7.4.exe安装rabbitmq双击rabbitmq-server-3.7.4.exe,注意自己指定一个安装目录,默认的安装目录包含Program Files目录,Program Files是带空格的...
2018-05-02 19:40:14
2310
原创 Win10下安装erlang
下载地址erlang下载地址 http://www.erlang.org/downloads打开网址后,如果是win10是64位的,则选择64位的版本,下载后的文件名如下: otp_win64_20.3.exe双击exe文件,注意最好不要使用默认安装路径,因为默认路径包含Program Files目录,带了空格。最好自己指定一个安装目录。配置环境变量...
2018-05-02 19:13:02
7649
11
原创 连续调用多个外部系统的写接口-如何保证数据一致性(思路)
概述某些场景下,我们将业务数据落地之前,是需要先调用外部系统的多个写接口,当这些写接口都操作成功了,我们才将业务数据落地到自己本地的数据库里面。比如说:public void updateProductInfo(Product product) { //1、将商品价格更新到价格系统 priceService.updatePrice(product); //...
2018-04-28 13:35:52
16831
6
原创 Junit测试带有@Async注解的service,主线程先退出的问题
概述今天使用Junit测试一个带有@Async的业务service,进行debug的时候,业务代码都没执行完,线程就退出了。之前以为是中间抛了什么异常,导致线程提前退出。但是很细心的看了很久,并没有任何异常信息。后面才发现原来是主线程退出了。由于使用了@Async注解,操作是异步的,主线程里面就执行完退出了。那么Junit这边,整个case就提前走完了。后面我用了个笨办法,在让主线...
2018-04-25 21:16:03
4049
4
原创 redis的incrBy操作如何设置key的失效时间
概述最近在使用redis,用到里面的incrBy操作,但是这个API没有提供一个参数来设置key的失效时间。 我自己想了一个比较low的办法。 Long limit = redisStringService.incrBy(limitCacheKey, 1); //拿到数字1的那个线程,设置key的有效期 if (limit == 1) { redisString...
2018-04-20 21:38:06
12058
2
原创 第一个微信小程序之Hello World
概述在小程序账号注册完整流程一文中详细介绍了如何注册一个小程序账号。下面我们介绍一下如何开发一个Hello World的小程序。微信开发者工具下载访问(https://mp.weixin.qq.com),用小程序账号登录后,按照如下步骤下载微信开发者工具。1、点击【文档】链接2、点击【开发】链接,在弹出的选项中,选择【小程序开发】3、点击【工具】的链接4、...
2018-04-01 22:25:59
21274
原创 小程序账号注册完整流程
概述在开始写微信小程序之前,必须先有小程序账号,本文将使用图文的方式,详细的介绍整个注册的过程。选择注册类型打开微信公众平台(https://mp.weixin.qq.com)后,点击立即注册按钮。 点击完【立即注册】后,注册类型选择小程序。 点击小程序图标后,将真正进入小程序注册流程。账号信息填写这里大家要注意一下,这里填写的邮箱不可以...
2018-04-01 20:04:33
30720
3
原创 使用Netty的ReplayingDecoder解决拆包和粘包问题
概述在自定义解码器处理半包消息 分隔符解码器处理半包问题 以回车换行结尾的消息如何处理半包问题 三篇文章中,笔者介绍了在Netty如何解决拆包和粘包问题,其中自定义解码器处理半包消息 里面介绍的方法是在线上实际用过的,经过了超级大流量的验证,挺靠谱的。下面再介绍另外一种解决半包问题的方法,虽然我没实际在线上用过,但是可以当成是一种知识补充。直接上代码在...
2018-03-30 09:31:34
6260
4
原创 小程序应用,获取微信用户的unionid
概述关于unionid的作用,可以先看我之前写的小程序中的unionid。那么unionid如何获取呢?有两种方式:1、通过wx.getUserInfo(); 2、通过jscode2session接口。使用getUserInfo方法我们可以在小程序端使用如下代码: wx.getUserInfo()获取到用户的信息,用户信息里面会包含encrypted...
2018-03-26 13:28:37
2987
原创 生成无限制的微信小程序码
概述现在除了用二维码之外,微信还可以为我们生成小程序码,大概长这个样子。 如果要生成无限制的小程序码,需要几个步骤 1、小程序某个页面的地址,也即是指定page参数的值; 2、获取access_token; 3、指定scene参数的值; 4、调用getwxacodeunlimit接口,并将返回结果存储到一个图片里。page参数page参数的值都是以pages开...
2018-03-25 20:19:48
16741
3
原创 小程序中的unionid
概述一家公司可以到微信平台上注册为一个开发者主体,一个主体下可以有多个公众号、小程序等。下面以小程序作为例子来说清楚unionid。开发者主体下有多个小程序一些小型的电商公司,会用小程序来开发商城,但是为了拉新用户,通常还会开发出像福袋、抽奖等小程序。现在假设有这样的场景,在同一个开发者主体下,一个微信用户从福袋小程序中获得了一张优惠券,想到小程序商城这个小程序...
2018-03-25 16:05:28
4995
原创 能不用事务就尽量别用
概述以前在公司里,有个牛人对俺说: 事务就是个垃圾,能不用就尽量不用。当时我刚从传统行业切换到互联网行业,对这个牛人说的这句话是嗤之以鼻的,怎么可能不用事务呢?后来随着开发了多个高并发应用后,才知道这个牛人说的是对的。下面说两个亲身经历的案例来说明这个问题。库存扣减接口(写事务)当时我们有个业务,在购物车阶段的时候,就开始占用库存了,这个库存占用接口的流量...
2018-03-25 12:25:04
5758
原创 微信用户访问小程序的登录过程
概述 当你开发完了一个小程序并部署上线后,某个微信用户第一次访问这个小程序的时候,会弹出一个授权界面,用户可以选择是否使用微信登录,如果选择是,则直接进入到小程序。当你第二次进入该小程序的时候,你会发现授权界面不会弹出来了,直接就进入小程序了。这个过程看起来非常的简单,但其实实现起来相当的麻烦和繁琐。涉及到会话、安全、验证等各种各样的问题。下面笔者介绍一下实现这个登录过程的思路。...
2018-03-24 22:55:44
19000
4
原创 UUID几个缺点
第一个UUID字符串占用的空间比较大。第二个索引效率很低。第三个生成的ID很随机,不是人能读懂的。第四个做不了递增,如果要排序的话,基本不太可能。...
2018-03-21 10:47:45
10342
原创 IDEA 2017.3版本下Mybatis plugin 3.53安装使用
IDEA版本 2017.3mybatis插件版本 Mybatis plugin 3.53下载地址: http://plugins.jetbrains.com/plugin/7293-mybatis-plugin破解打开IDEA的插件设置界面,选择【Install plugin from disk】后,点击确定按钮。关闭IDE...
2018-03-19 10:13:29
4320
2
原创 业务流水号(交易号)生成方法
概述在大流量下订单号生成方法一文中介绍了如何生成不重复的订单号,主要原理是利用数据库自增ID。但是像业务流水号之类的,其实不利用数据库也是可以的,只是要保证唯一性,做起来不太好做。下文介绍一种方法来生成流水号,如果不是那种特别变态的调用量,产生重复的机会还是很少的。但是如果是那种无论如何都不能重复的,不建议用本文的方法了。流水号生成规则 时间+四位的机器号+10位的...
2018-03-09 12:56:16
29682
1
原创 大流量下订单号生成方法
流量不大的情况下,订单号生成很久之前写过一篇利用DB生成业务主键的文章,介绍了利用DB来生成唯一的ID。当时便是用这种方式来生成订单号的。只不过拿到ID后,根据订单业务,简单加个前缀而已。@Servicepublic class KeyGen{ @Autowired private KeyGenRepository keyGenRepository; publi...
2018-03-08 12:30:02
4755
原创 创建订单实现幂等的一点思考
幂等的概念大部分文章都会说,同一个操作,进行多次操作后,结果是一样的,就可以说这个操作是支持幂等的。感觉不太准确,比如一个http get操作,可能每次的结果都不一样,但是其实是幂等的。看了很多文章,感觉下面的定义比较准确: 一个操作如果多次任意执行所产生的影响(或者叫副作用),都是相同的。创建订单的幂等如果一个用户分两次下单,购买的商品都是一样的。第一次...
2018-03-06 13:55:49
8229
原创 索引表和ES的一点点思考
索引表设计在电商项目中,物理库存系统是个极其重要的系统,订单支付后,就会开始来占用物理库存。一般情况下,库存系统都是要分库的,因为主要的操作是写操作,例如占用/释放/取消等写操作。使用分库可以降低数据库写的压力。尽管写操作为主,但是读操作也是有的。比如说,库存占用的时候,得先查询是否有库存,而这个查询操作并不都会带上分库因子(用于路由到具体的某个数据库),而是一些比较宽松的查询条件,这些查...
2018-03-01 12:22:47
13479
14
原创 Spring Cloud Feign简单使用
概述在Spring Cloud EureKa Ribbon 服务注册-发现-调用一文中简单的介绍了在Spring Cloud中如何使用EureKa和Ribbon。文章中使用了RestTemplate去访问其他的restful微服务接口。其实在Spring Cloud还可以使用Feign来访问其他的restful微服务接口。使用起来更加的简洁明了。集成Feign修改一下S...
2018-02-24 16:54:52
1411
空空如也
数据权限是基于角色还是用户?
2010-08-11
旧系统重构,数据迁移问题
2010-07-29
有两个字段要频繁的查询,如何建立索引?
2010-02-25
url中用 like %林% 做为参数。出现了乱码问题。
2009-12-10
java 完全反编译
2009-12-03
jdk1.5或者jdk1.6如何跟tomcat5.0.27兼容
2009-11-25
javascipt问题:关闭模态对话框,启动新的窗口
2009-11-17
电脑同时插入50个优盘,如何把数据写入50个优盘里面?
2009-07-13
远程访问mysql数据库问题请教
2009-06-24
如何将中央服务器上的数据传到其他的电脑上
2009-06-24
局域网内的A电脑和B电脑之间最好用什么方式进行数据传送?
2009-10-16
TA创建的收藏夹 TA关注的收藏夹
TA关注的人