年终总结

2020 年注定是不平凡的一年,在新冠疫情的影响下,居家隔离、办公、最低工资等等,企业即要保护打工人的安全又要保障公司的生存,可谓是手段频出。 今年是以自我提升为主。学习了极客时间的设计模式专栏,对设计模式有了新的认知,行为型、结构型、创建型各自的用途,以及为什么要使用设计模式,最后在实际……

阅读全文

使用 cucumber 进行行为驱动开发(BDD)

前言 保证软件质量的方式多种多样,根据测试金字塔上所描绘的,单元测试是最有效的,但是在公司内部实践的时候却遇到了一些问题,比如赶进度来不及写单元测试、改了代码逻辑单元测试也需要跟着变、验收时同样会有很多 bug,总结下来大概有几个原因: 需求分析时有很多细节没有考虑到(这个不可避免) 测……

阅读全文

微服务应用集成 SpringCloud 步骤

前言 微服务开发模式能够将复杂的业务拆分成独立的更细粒度服务,一定程度上降低了业务复杂度,但是随之而来的是如何保证各个服务的可靠性和稳定性,SpringCloud 出现的目的是为了解决这些在服务拆分后会遇到的通用问题。配置中心能让同一服务多实例间无需重启快速更新配置、注册中心能对应用……

阅读全文

电商搜索数据同步方案

前言 搜索系统主要分为两个部分一个是在线服务、一个是离线服务,在线服务是指排序、打分等靠近用户侧的部分,离线服务负责这篇文章属于离线部分范畴,本篇文章只是提供一个基础的思路,实际使用还需要适当调整和拓展。无论哪种方式都应该保证全量高吞吐、增量低延时的这个原则。 方案 定时任务主动拉取更……

阅读全文

通过一道数值转换题重温计算机补码

问题 昨天同事和我聊了他偶然间看到的一道面试题,引出了后面的深入分析。 1 System.out.println(Integer.valueOf((char)-1)); //output: 65535 为什么输出是 65535 而不是 -1 呢? 分析 先回顾一下计算机相关的知识点: 原码(True form) 原码是指一个二进制数左边加上符号位后所得到的码,且当二进制数大于0时,符号位为0;二进制数小于0时,符号位为1;二进制数等于0时……

阅读全文

macOS 系统推荐的一些软件

翻译 词典:mac 自带的,点按翻译 沙拉查词: chrome 上画线翻译 Alfred workflow + 有道翻译:支持查询单词并且回车键入当前位置 编程 IntelliJ IDEA:Java 工程利器 VSCode:写 React 和 Angular SSH 工具 electerm:最新发现的(2020-7-14),挺好用 壁纸 pap.er: 免费的,还不错 笔记 印象笔记 音乐 Spotif……

阅读全文

DevOps 实施规划(持续更新)

下面是我在日常工作中碰到的现状,相信大多数中小企业也会有类似情况 需求不明确 流程不够自动化 没有写单元测试的意识 上班摸鱼 不愿接受新思想 工作总是被打断 服务器资源利用率不高 出现问题的原因有领导的问题,也有团队成员的问题。但问题已经出现,此时不应该是无休止的抱怨,而是寻找解决问题办法。我们……

阅读全文

rabbitmq 如何提高可靠性并保证消费端幂等

什么是消息的可靠性 简单讲就是,一条消息由生产者发送出来,到 broker 上,存储到消息队列,再被消费者成功的消费。如果消息传着传着就传没了,此时消息就是不可靠的。 为什么要提高消息可靠性 拿订单或者交易举例,但凡涉及到与钱相关的系统,不允许出现任何数据偏差,如果因为在使用消息队列而丢失了数据,那……

阅读全文

AMQ Model总结

前言 最近在写公司的消息队列组件,因为使用的是 RabbitMQ,其实现的规范是基于 AMQP-0-9-1 ,所以抽时间把官方的规范过了一遍,整理出主要的内容,记录于此。 AMQ 模型架构(AMQ Model Architecture) 基础组件 Publisher application 发送者 Consumer application 消费者 Server AMQP 服务器 Virtual host 在 Server 中提供逻辑隔离,类似于 MySQL 数据库中的多个表 Exchange 将消息根据不同的配置路由到……

阅读全文

结对编程

在日常开发中常常在同一组内的成员虽然都负责同一个系统,但基本上是自己开发自己的,这样所带来的问题就是如果一个人请假了并且他负责模块出了问题急需解决,而此时团队的其他小伙伴要一点一点地扒代码,小心翼翼的闭坑,这应该是国内中小公司的常态。而结对编程恰好能解决这样的问题。 结对编程来源于……

阅读全文