自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Sam哥哥聊技术

互联网技术爱好者

原创 功能模块提测前要做的几件事

概述在项目管理流程中,有几个关键阶段:需求阶段、开发阶段、测试阶段、上线阶段每个阶段都非常重要,且越前面的阶段

2020-08-02 18:25:56 2297

原创 对自己开发的模块要认真负责

概述在平时开发系统功能模块的时候,有些开发人员可能认为功能模块按时提测、按时上线就算"认真负责"了,可以不用管了。其实做到这些还是远远不够的,因为真正考验你对自己做的模块是否认真负责,是在上线后。假设你开发的模块在今天上线,隔天就出了问题,老大来个连环问:老大:问题影响面有多广?我:?老大:能回滚吗?我:?老大:是接口性能问题还是功能性问题?怎么监控没有报警?好吧,只能硬着头皮解决问题,然后上线,请求参数和报错的上下文日志发一下我:。。。。。。忘记打了老大:。。。。上面还只是一个小小

2020-07-13 13:22:40 13359 31

原创 项目推动的心得

概述最近给公司互联网部门做了一个【项目推进】的分享,效果还不错,重新梳理一下重点内容,分享给大家。项目阶段项目启动阶段项目计划阶段项目执行阶段项目监控阶段项目收尾阶段项目启动阶段项目启动会目的:为啥要做,背景初衷是啥,有啥价值;项目发起者的预期:质量/范围/时间,极端情况下如何排序里程碑计划: pmo要关心里程碑计划全员同步,明确目标,减少后续沟通成本。资源/干系人指定项目/技术负责人:获得公开授权的有效方式(临时主导者)不配合:目标理解不一致、大家都

2020-07-05 09:02:41 397

原创 第三方支付问题小结

概述记得2019年,微信支付出过一个故障,用户发起支付给了钱后,微信一直不回调,导致使用了微信支付的商家的订单都成了未支付状态了,如果业务系统设计的不好,那瞬间就会有大量的客诉出现。像下面的对话场景,我相信当时肯定非常的多:用户:我支付了好几次了,你说你没收到?别开玩笑了。商家:我这边真的没收钱。然后心想:这家伙不会是想吃霸王餐吧?虽然像微信和支付宝这样的大牌支付平台,出大故障的几率比较少,但是也不得不防。下面列举几个支付问题以及对应的解决思路。第三方支付平台无法支付以微信为例子,像

2020-07-05 08:08:55 691

原创 利用DB实现分布式锁的思路

概述以前参加过一个库存系统,由于其业务复杂性,搞了很多个应用来支撑。这样的话一份库存数据就有可能同时有多个应用来修改库存数据。比如说,有定时任务域xx.cron,和SystemA域和SystemB域这几个JAVA应用,可能同时修改同一份库存数据。如果不做协调的话,就会有脏数据出现。对于跨JAVA进程的线程协调,可以借助外部环境,例如DB或者Redis。下文介绍一下如何使用DB来实现分布式锁...

2020-01-06 16:17:54 3973 2

原创 Spring RabbitMQ Channel理解

有了TCP连接后,为何还需要channel,是基于什么场景呢?channel的性能又如何呢?

2019-12-06 21:30:35 1463 2

原创 研发Owner的职责

概述技术组长或者PMO,可能在同一个上线周期里,需要跟多个项目,有时候会跟不过来,这个时候可以指派一个owner,分担一些压力。owner定义owner是临时授予的小组长,负责主导某个项目某个端(后端或者前端)的整体工作。owner具体职责,主要是关注技术侧的,非技术侧的,由PMO跟进。且这里说的owner,是指单端的owner,例如:后端侧owner,前端侧owner。对内...

2019-12-06 12:29:01 942

原创 简单说一下业务接口自动化测试

概述在创业公司里,项目都比较赶,测试人员也是疲于测试功能模块,基本没空去写什么自动化测试,以提升回归测试的效率。但一个必须承认的事实便是,依赖测试人员去做全面回归测试,保证质量,是不可取的,因为难度太大,成本太高。因此自动化测试还是要做一些的,具体如何着手呢,下文说一下我这边的做法。注意:本文主要描述一下业务接口自动化测试的方案,至于GUI自动化测试和压力自动化测试不在本文的讨论范围内。...

2019-12-06 11:49:35 936

原创 说一说单体应用的不良影响

1、业务耦合一个单体应用后,多人在上面开发代码,各种代码冲突,提交后,各种编译不通过,启动不起来,严重影响了开发效率;2、不好做水平扩展;3、一个小的功能点改动后,需要整体上线;4、由于功能耦合多了,单体应用启动的时间变的很长,无法做到快速启动和发布,想我们这边的一个大应用,16台机器,滚动发布的时候,需要16分钟。5、...

2019-12-03 15:47:49 426

原创 关于日志打印

概述关于日志打印

2019-12-02 16:42:02 519

原创 线上应用遇到了oom killer

概述在2019年10月21日,公司的一个后台应用中【生成营销活动数据】的操作,执行到一半突然不执行了,导致部分活动数据没生成,运营人员对此怨声载道的,因为影响了他们的运营效率了,要求我们技术人员尽快解决。定位过程首先是从日志入手,分析线程执行。...

2019-11-06 21:22:57 338

原创 socket.accept后,会产生新端口吗?

概述前段时间,组内的一个小伙伴问了俺一个问题:调用socket.accept方法,建立连接后,服务器端会为其创建一个新端口吗?客户端与服务端成功建立连接后,客户端这边肯定是需要开启一个新的端口的,而服务端其实只需要一个监听端口就行,不用每个新连接一来,就创建一个新的端口。如上图,客户端跟服务端,建立了两个连接,连接1和连接2,端口分别是59989和59990,而服务端的监听端口是8...

2019-09-30 10:22:55 992 2

原创 RabbitMQ使用场景简单介绍

概述Rabbit MQ的使用场景非常多,典型的场景主要分为下面几种:跨系统的异步通信基于pub/sub模型的事件驱动削峰下面主要是讲自己以前用过MQ的场景,简要的介绍一下。秒杀订单之削峰sec-kill-order独立集群的职责有三个:接收所有瞬时涌入的秒杀请求,并以先进先出的方式将请求保存到队列里,将请求排队,起到削峰的作用;提供拉取数据接口,给秒杀业务处理层使用...

2019-09-15 21:25:04 652

原创 Spring Boot RabbitMq 并发与限流

概述电商中秒杀请求,属于瞬间大流量,同一时刻会有大量的请求涌入到系统中,可能导致系统挂掉。应付这种瞬间大流量的其中一种方式,便是利用消息队列。1、利用消息队列先进先出的特性,将请求进行削峰;2、控制好消费端的消费速度,进行必要的限流。在消费端,要做到上面提到的第2点,在Spring Boot RabbitMQ中只需要利用@RabbitListener`注解,做一些简单配置就可以了。...

2019-09-09 14:16:14 2810 1

原创 Spring Boot Controller层测试

概述对业务Service层的代码进行详尽的单元测试是非常必要的,但也不能忽视Controller层的测试,毕竟Controller层的接口输出都是给前端用的,且Controller层拿到业务Service层的返回结果后,通常也会做一些业务处理或者转换的问题,以适配前端的展示需求。目前参与的项目,都是基于Spring Boot的,下面就简单介绍一下如何基于Spring Boot 2' 和 J...

2019-09-07 11:52:59 902

原创 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 356

原创 敏捷中的双周迭代导致的恶性循环

概述最近公司使用敏捷中的双周迭代,也即是每两个星期发布一次应用。双周迭代是控制团队交付节奏的,但是如果玩的不好,会导致大量的线上bug。下面先说说我们之前的玩法。1、进入下一个双周迭代前,产品侧会出需求,我们提前分析。当然有时候,产品没那么快出需求,就会在当前迭代里分析需求;2、开发这边分...

2019-06-30 14:31:18 1335

原创 学以致用,解决系统问题的人才算牛人

概述在公司里,你肯定会看到部分程序员,一直在研究技术,像算法、新技术、底层知识等,给人的印象就是,他挺牛的,懂挺多底层知识的,但是如果他的这些技能,没有用于解决公司系统问题,那么在老板眼中,他不是牛人。学以致用,能把学到的知识,用于解决公司实际存在的系统问题,带来了实际的价值的,才算牛人。平时多思考当前情况下,团队的问题、流程的问题、测试的问题,业务的问题,梳理出来,看看当前自己掌握的...

2019-06-30 13:56:08 517 1

原创 DOD

概述最近做项目的时候,发生一个事情,我们把一个用户系统重构后上线了,采用代码重写,新DB的方式。但是上线不久,就陆续发现了一些BUG。定位后,才知道,是因为用户系统的上线,其实只是上线了一部分,并没有完整上线。另外这个跟老板心中认为的已上线是不同的。老板认为的已上线,就是整个用户系统都重构完毕,接入方对接完毕,完整的交付了。这里老板和员工对所谓的任务完成的理解,出现了不一致。为了避免这种情...

2019-06-28 12:17:40 1037

原创 小程序access_token耗尽问题

概述前几天,产品经理紧急打我电话,说后台好些商品无法生成小程序码了,这些商品小程序码是需要紧急推到公众号文章里的,让我赶紧解决。我立马登录到后台操作了一下,果然报错了。但是由于报错信息只是:“操作失败”。啥都没有,简直醉了,只能用tail -f xxxx.log命令,看看具体的报错堆栈,发现是空指针错误,仔细看了一下代码,当access_token为空的时候,会走入到一段特有的逻辑,但是这段...

2019-05-19 19:41:59 4250

原创 紧急大项目的应付手法

1、事先分析通用的功能,例如内容流的。2、功能必须部分提测。3、如何分配自己都不熟悉的任务;4、尽量将任务交出去,相信队友。tl需要关注更多的东西;5、任务切割如何做到大小合适,分配对人,而且冲突小。6、任务优先级;7、...

2019-04-14 12:11:58 913 2

原创 尽量避免bug的一些手法

尽量避免bug的手法

2018-12-28 11:43:32 6711 54

原创 遇到的一个缓存穿透故障

概述在昨天下午,在做业务系统每日巡检的时候,发现营销系统的日志里,出现了209次ERROR,内容如下:获取商品详情优惠券出错,request:{“productId”:123456,“shopId”:123456,“userId”:123456}获取商品详情优惠券出错,request:{“productId”:123456,“shopId”:123456,“userId”:123456}...

2018-12-27 12:26:20 1373 8

原创 缓存时间小技巧-随机打散

概述之前在营销系统里,开发了一个接口,用于在商品详情页里显示优惠券,方便用户在商详里看到优惠券和领取优惠券。由于商详的访问量比较大,因此显示优惠券的接口必须加上缓存。缓存时间设计原先优惠券缓存时间是固定设置为5分钟,但是5分钟过后,就会集体失效,因此便使用一个随机数工具,将缓存时间随机生成。例如:以秒为单位,在240-360这个范围内产生随机数,作为缓存的时间,这样就可以避免优惠券在缓...

2018-12-26 14:23:28 1331

原创 下单接口剥离秒杀和拼团逻辑

概述

2018-12-24 19:14:26 1890

原创 写给测试人员的远程debug和异常断点设置

概述我曾经在优秀互联网高级测试工程师应该具备的能力一文中提过:测试人员能发现问题,还能定位问题,而且能给研发解释得清楚定位问题并不是那么简单,尤其是在没有日志和异常的信息的情况下。对于不具备开发能力的部分测试人员来说,就更加难。这个时候,我们可以借助一些小技巧,来帮忙查找问题的原因。一种是远程debug,另外一种是异常断点。远程debug远程debug提供这样一种能力:可以...

2018-11-27 09:41:40 1328 2

原创 awk神器呀

概述在之前写过一篇一条慢SQL导致购物车服务无法使用的文章,由于购物车是入口,出了故障,自然都不是小问题。这不,老板说要统计一下影响面。如果没有成熟的业务监控和统计工具,干这种活,只能用最原始的查日志的方式。本来我想把日志下载下来,写段JAVA代码分析一下,谁知日志文件居然有3个g,除了下载慢,用JAVA分析起来也慢。果断放弃,换用江湖人称日志内容查找神器的awk大哥出来帮忙。找出添加购...

2018-11-22 10:39:23 792 7

原创 设计要做到扩展性强还挺难的

从营销工具-【满减活动】谈代码设计扩展性

2018-11-21 10:47:40 2383 15

原创 搜索框出现故障-又是一个通宵的晚上

搜索框出现故障-又是一个通宵的晚上概述每年的电商双11,都是注定要通宵的。流量一大,什么问题都可能发生。果然,今年的双11又是一个连续通宵的节奏。小程序前端界面的搜索框出故障了,一片空白顿时保障群里,保障消息铺天盖地,都在说搜索框用不了。顿时哥的头发感觉瞬间都是直的了,太紧张太害怕了。定位问题电商的搜索,一般都是要借助大数据的,由专门的大数据团队提供接口输出数据。因此这里首先...

2018-11-11 17:58:16 6023 25

原创 shell查找文件显示行号和对应区间的内容

概述有时候我们需要一个文件大小不断变化的日志文件里,找寻一些错误信息。这个时候我们可以用如下的小技巧,找出错误日志的内容。CAT的时候显示行号cat -n cart.log | grep "支付失败"SED找到错误日志的内容sed -n '1000,2000p' cart.log由于我们通过CAT命令已经知道行号了,只需要使用SED,输入一个行号的大概范围,就可以详细的展示...

2018-11-10 18:34:30 1918

转载 淘宝大秒系统设计详解

概述偶然从博客园读到了一篇关于秒杀设计的文章:淘宝大秒系统设计详解 真心写的不错,读完后,了解到一些之前未想过的方案。也推荐大家读一读。...

2018-11-09 12:36:17 702

原创 设置超时时间真的很重要

概述在一条慢SQL导致购物车服务无法使用一文中,提到了客户端调用购物车服务的时候,超时了。如果当时客户端没有设置超时时间的话,会在客户端中产生级联故障。先用一张图来说明一下。聚合层除了调用购物车微服务,还调用了营销系统微服务。如果购物车服务的接口响应时间很慢,而客户端聚合层调用购物车服务时,又没有设置超时时间,那么将占有大量的连接,如果请求购物车服务的请求量比较大,瞬间就会把连接占用完,直...

2018-11-09 10:10:03 9215 1

原创 一条慢SQL导致购物车服务无法使用

概述今天一大早就紧张兮兮的,因为要处理一个大故障:【购物车服务无法使用了】,这个故障直接导致前端添加购物车、获取用户购物车列表等操作都失败了。购物车是入口,一旦出现问题,影响极其严重。临时处理购物车服务所有接口,是有打印响应时间的,发现比平时慢了很多。由于情况已是十万火急了,我只能先重启购物车,缓冲一下,然后利用这段缓冲时间,赶紧定位问题。问题定位之前对购物车应用基于Sprin...

2018-11-08 14:37:49 12341 96

原创 SpringBoot Controller Post接口单元测试

概述在日常的开发中,我们一般会定义一个service层,用于实现业务逻辑,并且针对service层会有与之对应的齐全的覆盖率高的单元测试。而对于controller层,一般不怎么做单元测试,因为主要的核心业务逻辑都在service层里,controller层只是做转发,调用service层接口而已。但是还是建议使用单元测试简单的将controller的方法跑一下,看看转发和数据转换的代码是否能...

2018-10-31 09:49:32 13014

转载 转载酷壳-技术人员的发展之路

转载酷壳上的一篇文章:技术人员的发展之路,其中对我影响最大的一个段落是:2、去真正的创业公司去顶尖公司和去创业公司在某些时候并不冲突。不过,这里我想讲的是,一个技术能力强的人在大公司可能会被埋没掉。因为大公司业务成功后,成功的公司在招聘各种高级技术人才都不会成为问题,于是少你一个不少,多你一个不多。成功的公司其整个技术体系已经完成,Legacy的问题也比较多,所以,可以供你发挥的余地不大...

2018-10-28 13:56:09 344

原创 下单接口调优实战,性能提高10倍

概述最近公司的下单接口有些慢,老板担心无法支撑双11,想让我优化一把,但是前提是不允许大改,因为下单接口太复杂了,如果改动太大,怕有风险。另外开发成本和测试成本也非常大。对于这种有挑战性的任务,我向来是非常喜欢的,因为在解决问题的过程中,可以学习到很多东西。当时我只是知道下单接口慢,但是没人告诉我慢在哪里,也即是说,哪些瓶颈导致下单接口慢了。其实没人知道也没关系的,因为我们可以通过压测...

2018-10-19 12:15:13 6752 23

原创 优秀互联网高级测试工程师应该具备的能力

优秀互联网高级测试工程师应该具备的能力概述在之前写的互联网高级测试工程师至少具备的能力一文中,提到了测试工程师至少具备的能力,但是并没有提到优秀测试工程师应该具备的能力,下文简单的谈一谈。当然这些全部都是我的个人理解。能发现问题,还能定位问题,而且能给研发解释得清楚在实际的工作中,你可能会遇到很多测试人员在测试功能模块的时候,一遇到问题,马上就来找开发,由开发来定位问题。测试人员发...

2018-10-18 12:28:23 5387 9

原创 线上单台Eureka升级到3台Eureka高可用

概述由于前段时间,公司业务发展快,接了太多的业务需求了,没有时间把Eureka搞成高可用的,先用一台Eureka应付。当时由于流量还不大,不会出现问题。但是最近一个月,流量逐渐增大,老板担心万一单台Eureka挂了,服务会用不了。让我赶紧升级成3台Eureka,并两两注册,做到高可用。下面就把升级的过程说一下。未升级前单台Eureka上,只有购物车这个服务提供方,共两台。升级步骤...

2018-10-11 08:53:01 2117

原创 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 6982 1

转载 转载李学凯一篇Intellij IDEA的文章

这篇文章虽然是16年写的,但是目前看来,还是非常经典,值得好好读读,提高操作IDEA的效率。IntelliJ IDEA 详细图解最常用的配置 ,适合刚刚用的新人...

2018-09-14 09:47:19 581

提示
确定要删除当前文章?
取消 删除