- 博客(316)
- 资源 (1)
- 问答 (12)
- 收藏
- 关注
原创 第三方支付问题小结
概述记得2019年,微信支付出过一个故障,用户发起支付给了钱后,微信一直不回调,导致使用了微信支付的商家的订单都成了未支付状态了,如果业务系统设计的不好,那瞬间就会有大量的客诉出现。像下面的对话场景,我相信当时肯定非常的多:用户:我支付了好几次了,你说你没收到?别开玩笑了。商家:我这边真的没收钱。然后心想:这家伙不会是想吃霸王餐吧?虽然像微信和支付宝这样的大牌支付平台,出大故障的几率比较少,但是也不得不防。下面列举几个支付问题以及对应的解决思路。第三方支付平台无法支付以微信为例子,像
2020-07-05 08:08:55
2195
3
原创 利用DB实现分布式锁的思路
概述以前参加过一个库存系统,由于其业务复杂性,搞了很多个应用来支撑。这样的话一份库存数据就有可能同时有多个应用来修改库存数据。比如说,有定时任务域xx.cron,和SystemA域和SystemB域这几个JAVA应用,可能同时修改同一份库存数据。如果不做协调的话,就会有脏数据出现。对于跨JAVA进程的线程协调,可以借助外部环境,例如DB或者Redis。下文介绍一下如何使用DB来实现分布式锁...
2020-01-06 16:17:54
5907
4
原创 Spring RabbitMQ Channel理解
有了TCP连接后,为何还需要channel,是基于什么场景呢?channel的性能又如何呢?
2019-12-06 21:30:35
10065
11
原创 研发Owner的职责
概述技术组长或者PMO,可能在同一个上线周期里,需要跟多个项目,有时候会跟不过来,这个时候可以指派一个owner,分担一些压力。owner定义owner是临时授予的小组长,负责主导某个项目某个端(后端或者前端)的整体工作。owner具体职责,主要是关注技术侧的,非技术侧的,由PMO跟进。且这里说的owner,是指单端的owner,例如:后端侧owner,前端侧owner。对内...
2019-12-06 12:29:01
13742
原创 简单说一下业务接口自动化测试
概述在创业公司里,项目都比较赶,测试人员也是疲于测试功能模块,基本没空去写什么自动化测试,以提升回归测试的效率。但一个必须承认的事实便是,依赖测试人员去做全面回归测试,保证质量,是不可取的,因为难度太大,成本太高。因此自动化测试还是要做一些的,具体如何着手呢,下文说一下我这边的做法。注意:本文主要描述一下业务接口自动化测试的方案,至于GUI自动化测试和压力自动化测试不在本文的讨论范围内。...
2019-12-06 11:49:35
3476
原创 说一说单体应用的不良影响
1、业务耦合一个单体应用后,多人在上面开发代码,各种代码冲突,提交后,各种编译不通过,启动不起来,严重影响了开发效率;2、不好做水平扩展;3、一个小的功能点改动后,需要整体上线;4、由于功能耦合多了,单体应用启动的时间变的很长,无法做到快速启动和发布,想我们这边的一个大应用,16台机器,滚动发布的时候,需要16分钟。5、...
2019-12-03 15:47:49
1132
原创 线上应用遇到了oom killer
概述在2019年10月21日,公司的一个后台应用中【生成营销活动数据】的操作,执行到一半突然不执行了,导致部分活动数据没生成,运营人员对此怨声载道的,因为影响了他们的运营效率了,要求我们技术人员尽快解决。定位过程首先是从日志入手,分析线程执行。...
2019-11-06 21:22:57
1620
原创 socket.accept后,会产生新端口吗?
概述前段时间,组内的一个小伙伴问了俺一个问题:调用socket.accept方法,建立连接后,服务器端会为其创建一个新端口吗?客户端与服务端成功建立连接后,客户端这边肯定是需要开启一个新的端口的,而服务端其实只需要一个监听端口就行,不用每个新连接一来,就创建一个新的端口。如上图,客户端跟服务端,建立了两个连接,连接1和连接2,端口分别是59989和59990,而服务端的监听端口是8...
2019-09-30 10:22:55
4225
2
原创 RabbitMQ使用场景简单介绍
概述Rabbit MQ的使用场景非常多,典型的场景主要分为下面几种:跨系统的异步通信基于pub/sub模型的事件驱动削峰下面主要是讲自己以前用过MQ的场景,简要的介绍一下。秒杀订单之削峰sec-kill-order独立集群的职责有三个:接收所有瞬时涌入的秒杀请求,并以先进先出的方式将请求保存到队列里,将请求排队,起到削峰的作用;提供拉取数据接口,给秒杀业务处理层使用...
2019-09-15 21:25:04
2416
1
原创 Spring Boot RabbitMq 并发与限流
概述电商中秒杀请求,属于瞬间大流量,同一时刻会有大量的请求涌入到系统中,可能导致系统挂掉。应付这种瞬间大流量的其中一种方式,便是利用消息队列。1、利用消息队列先进先出的特性,将请求进行削峰;2、控制好消费端的消费速度,进行必要的限流。在消费端,要做到上面提到的第2点,在Spring Boot RabbitMQ中只需要利用@RabbitListener`注解,做一些简单配置就可以了。...
2019-09-09 14:16:14
11082
6
原创 Spring Boot Controller层测试
概述对业务Service层的代码进行详尽的单元测试是非常必要的,但也不能忽视Controller层的测试,毕竟Controller层的接口输出都是给前端用的,且Controller层拿到业务Service层的返回结果后,通常也会做一些业务处理或者转换的问题,以适配前端的展示需求。目前参与的项目,都是基于Spring Boot的,下面就简单介绍一下如何基于Spring Boot 2' 和 J...
2019-09-07 11:52:59
3703
原创 Git log修改时间格式
概述我们经常会使用git log去查看提交记录,但是默认展示的提交时间是如下格式的:Date: Thu Aug 29 19:15:05 2019 +0800不太容易看懂,因此最好使用如下的命令,讲提交时间格式化一下:git config --global log.date format:’%Y-%m-%d %H:%M:%S’执行成功后,再执行git log命令,就可以看到格...
2019-09-04 11:40:42
5872
2
原创 Spring Boot下使用RabbitMQ
概述本文主要一下在JAVA 中使用Rabbit MQ的三种方式:– 原始方式– 结合Spring– 结合Spring Boot下面将使用逐步演进的方式来讲解JAVA下如何使用Rabbit MQ的发布订阅模式。最原始的方式本文的DEMO是用Window版本的Rabbit MQ的,具体的安装方式,可以参考:Win10下安装erlangwin10下安装rabbitmq我们先...
2019-09-01 23:16:47
861
原创 无论多紧急,预发布一定要走查一下
概述2019年6月28日晚上,bug群里的客服抛出了一个问题,订单结算页无法切换收货地址了,由于订单结算页离下单非常近了,如果出问题,会直接影响下单,也就影响了公司收入。由于618大促时,没发任何版本,而这个问题是大促结束后,发版本后才出现的,因此火速联系相关人士排查问题,最后通过日志发现,新版本的地址接口,增加了部分参数必填的校验,而这个地址接口的调用入口是有三个的,其中一个入口并没有传入参...
2019-06-30 15:18:59
1026
4
原创 学以致用,解决系统问题的人才算牛人
概述在公司里,你肯定会看到部分程序员,一直在研究技术,像算法、新技术、底层知识等,给人的印象就是,他挺牛的,懂挺多底层知识的,但是如果他的这些技能,没有用于解决公司系统问题,那么在老板眼中,他不是牛人。学以致用,能把学到的知识,用于解决公司实际存在的系统问题,带来了实际的价值的,才算牛人。平时多思考当前情况下,团队的问题、流程的问题、测试的问题,业务的问题,梳理出来,看看当前自己掌握的...
2019-06-30 13:56:08
1182
2
原创 DOD
概述最近做项目的时候,发生一个事情,我们把一个用户系统重构后上线了,采用代码重写,新DB的方式。但是上线不久,就陆续发现了一些BUG。定位后,才知道,是因为用户系统的上线,其实只是上线了一部分,并没有完整上线。另外这个跟老板心中认为的已上线是不同的。老板认为的已上线,就是整个用户系统都重构完毕,接入方对接完毕,完整的交付了。这里老板和员工对所谓的任务完成的理解,出现了不一致。为了避免这种情...
2019-06-28 12:17:40
2352
原创 Linux grep -v 命令排除输出
概述有时候,我们在线上查日志定位问题的时候,经常会使用cat xxxx.log |grep yyyy命令,如果grep的时候,想排除某些字段,那么可以如下操作:cat test.log | grep "login"|grep -v "deviceType"上面的命令的意思是:找出test.log中包含login信息的,且没有deviceType这个字段的。这个其实非常有用的,因为有些业...
2019-05-24 13:53:02
93274
3
原创 小程序access_token耗尽问题
概述前几天,产品经理紧急打我电话,说后台好些商品无法生成小程序码了,这些商品小程序码是需要紧急推到公众号文章里的,让我赶紧解决。我立马登录到后台操作了一下,果然报错了。但是由于报错信息只是:“操作失败”。啥都没有,简直醉了,只能用tail -f xxxx.log命令,看看具体的报错堆栈,发现是空指针错误,仔细看了一下代码,当access_token为空的时候,会走入到一段特有的逻辑,但是这段...
2019-05-19 19:41:59
8329
1
原创 Redis set集合操作
概述有时候我们需要判断一个key是否在Redis的集合中,可以选用SET,原因是有一个isMember操作,执行的效率比较高。常用的操作如下://添加 sadd test_set 10146558//删除 srem test_set 10144878//判断是否存在 sismember test_set 10146560//返回key里面的值SMEMBERS test_se...
2019-04-17 00:57:03
2528
6
原创 git打tag标签
概述有时候上线一个版本后,出现故障了,需要紧急回顾,如果公司内部还没有成熟的代码回滚平台,那么可以使用打tag的方式,为上一个已经在线上运行的版本,打个标签。具体操作如下:打taggit tag -a master_2019_04_16 -m "412迭代" push taggit push origin master_2019_04_16想看一下刚刚打好的标签,可以使用...
2019-04-17 00:49:17
4664
原创 Redis查看明文
概述有时候使用redis-cli命令登录进去Redis后,使用get命令查找key对应的值时,展现的值不明确,其实使用redis-cli时,指定一个--raw即可。redis-cli -h 127.0.0.1 -p 6333 -a 'aaa' --raw...
2019-04-17 00:42:54
1626
1
原创 Redis批量删除指定前缀的key对应的值
概述今天遇到一个故障,需要批量删除有指定前缀的Redis key的值。原先是使用redis-cli登录进去进行操作,居然不行,得跳到外面才能执行。具体命令如下:redis-cli -h 127.0.0.1 -p 6333 -a '123' keys "user:test:*"|xargs redis-cli -h 127.0.0.1 -p 6333 -a '123' del借助xargs...
2019-04-17 00:38:33
13625
5
原创 紧急大项目的应付手法
1、事先分析通用的功能,例如内容流的。2、功能必须部分提测。3、如何分配自己都不熟悉的任务;4、尽量将任务交出去,相信队友。tl需要关注更多的东西;5、任务切割如何做到大小合适,分配对人,而且冲突小。6、任务优先级;7、...
2019-04-14 12:11:58
1915
2
原创 2019年4月10日-自己的技术博客访问量到达一百万
概述从2015年7月开始在CSDN平台上写技术博客,历经近4年的时候,博客访问量终于到达一百万了,先给自己点个赞。写博客是非常耗时耗精力的,如果没有一定的意志力,真心很难坚持下去。当然能坚持下来,得到的好处也是非常多的。下面根据自己的亲身体会,总结几点。博客文章可以看成自己的资料库,里面存放了平时的积累和心得,除了日后查找资料方便外,随着自己的认知不断提高,还可以不断的修改之前的文章,将...
2019-04-10 21:51:45
1055
4
原创 JDK 8利用分组统计从List找出重复元素
概述对于List中有重复元素的,也可以利用JDK 8的流来完成。 public static void main(String[] args) { List<String> parameterList = Arrays.asList("1","2","2","3","3&qu
2019-03-10 18:11:52
12777
4
原创 CSDN 2018博客之星,需要您投上宝贵的一票
概述在CSDN的技术博客,持续的写了三年了,通过写博客,自己也学习到非常多东西,别人也可以通过我的博客学到一些东西。最近本人参与了CSDN 2018年度的博客之星竞选,劳烦大家为我投上宝贵的一票。请投: 054 Sam 哥哥 。投票地址是:CSDN 2018博客之星投票...
2018-12-29 10:47:27
2757
原创 遇到的一个缓存穿透故障
概述在昨天下午,在做业务系统每日巡检的时候,发现营销系统的日志里,出现了209次ERROR,内容如下:获取商品详情优惠券出错,request:{“productId”:123456,“shopId”:123456,“userId”:123456}获取商品详情优惠券出错,request:{“productId”:123456,“shopId”:123456,“userId”:123456}...
2018-12-27 12:26:20
1956
8
原创 缓存时间小技巧-随机打散
概述之前在营销系统里,开发了一个接口,用于在商品详情页里显示优惠券,方便用户在商详里看到优惠券和领取优惠券。由于商详的访问量比较大,因此显示优惠券的接口必须加上缓存。缓存时间设计原先优惠券缓存时间是固定设置为5分钟,但是5分钟过后,就会集体失效,因此便使用一个随机数工具,将缓存时间随机生成。例如:以秒为单位,在240-360这个范围内产生随机数,作为缓存的时间,这样就可以避免优惠券在缓...
2018-12-26 14:23:28
3021
原创 Spring Boot bootstrap.yml外置
概述有时候我们是需要将bootstrap.yml文件的外置的,也即是说,在spring boot应用启动后,不直接使用jar包里面的bootstrap.yml文件,而是读取某个目录下的bootstrap.yml文件,然后进行覆盖。注意在spring boot 2.0之前的版本,得使用如下参数:spring.config.location完整配置如下:nohup java $JAVA_...
2018-12-13 18:30:25
13010
7
原创 awk将文件某个列按照逗号分隔
概述当我们在处理线上故障的时候,经常会从数据库表查询出某个列。select product_id from order where user_id = 111;查询出来的结果形式如下:12345这个时候,我们通常会以product_id in (1,2,3,4,5)的形式去查找商品表,找出商品的详细信息。那么如何得到这个(1,2,3,4,5)呢。一种简单的做法就是利用...
2018-11-30 12:31:36
10034
3
原创 坑,代码没发布成功导致的故障
概述最近自己负责的营销系统,上线了一个新功能,才上线了一个小时,就有客服报障说,本来不能使用的优惠券现在变成可用了。这个是非常严重的故障,因为每下一单,公司就得损失一点钱。俺赶紧让客服把商品链接发出来,我自己上去看看是否真这么回事,奇怪了,我自己购买这个商品的时候,优惠券不能用呀。为了进一步证实,赶紧让另外两个测试人员也参与购买,结果出乎意料:优惠券是一会能用,一会不能用没办法了,只...
2018-11-29 09:47:31
570
1
原创 写给测试人员的远程debug和异常断点设置
概述我曾经在优秀互联网高级测试工程师应该具备的能力一文中提过:测试人员能发现问题,还能定位问题,而且能给研发解释得清楚定位问题并不是那么简单,尤其是在没有日志和异常的信息的情况下。对于不具备开发能力的部分测试人员来说,就更加难。这个时候,我们可以借助一些小技巧,来帮忙查找问题的原因。一种是远程debug,另外一种是异常断点。远程debug远程debug提供这样一种能力:可以...
2018-11-27 09:41:40
2425
2
原创 awk神器呀
概述在之前写过一篇一条慢SQL导致购物车服务无法使用的文章,由于购物车是入口,出了故障,自然都不是小问题。这不,老板说要统计一下影响面。如果没有成熟的业务监控和统计工具,干这种活,只能用最原始的查日志的方式。本来我想把日志下载下来,写段JAVA代码分析一下,谁知日志文件居然有3个g,除了下载慢,用JAVA分析起来也慢。果断放弃,换用江湖人称日志内容查找神器的awk大哥出来帮忙。找出添加购...
2018-11-22 10:39:23
1492
7
空空如也
数据权限是基于角色还是用户?
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关注的人
RSS订阅