2020M7W1 ARTS

1. Algorithm

1.1 LeetCode 1. 两数之和

给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。
你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。
示例:

给定 nums = [2, 7, 11, 15], target = 9
因为 nums[0] + nums[1] = 2 + 7 = 9
所以返回 [0, 1]

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/two-sum
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

这是LeetCode第一题,第一次打开LeetCode就做过(虽然都是看的别人答案)。不过可能是用Visual Code插件的缘故,提交记录中居然没有这一题,所以就再做一遍。

不得不说,只看别人答案而不自己主动思考的结果就是忘记。下面这个解法还是思考了很久后才写出来的。

class Solution:
    def twoSum(self, nums: List[int], target: int) -> List[int]:
        ret = []
        # 用一个dict记录target与当前值的差,value为index
        num_dict = {}
        for index, value in enumerate(nums):
            if value in num_dict.keys():
                ret = [num_dict[value], index]
                break
            else:
                diff = target - value
                num_dict[diff] = index
        return ret

2. Review: Using a DDD Approach for Validating Business Rules

2.1 背景:DDD简介

DDD(Domain Driven Design),中文译名为领域驱动设计,是一种软件设计思想。最早是由Eric Evans在其著作《领域驱动设计》中提出。

DDD关注将业务与实现分离,可以说,使用DDD思想设计实现的系统应该是能分离业务与开发的关注点,使其更加专注于其自身的逻辑,让项目参与者各司其职,让软件架构的演进不影响业务稳定性。

2.2 摘要

  • 业务规则是某一个领域的知识
  • 把业务规则结构化可以减低出现错误的可能而且也更易于维护
  • 业务规则有不同的职责,比如提供校验以及可以据此生成输出

2.3 结构化的业务规则的重点

  • 面对变化能保持一致性
  • 易于测试
  • 维护数据要注意一致性
  • 易于诊断

3. Tip:Guarded Suspension模式

构建分布式系统时不可避免的会遇到异步转同步的问题。

比如发起请求之后,其响应是由事件的方式获取到的,那么当前的线程如何拿到结果呢?答案就是并发设计模式中的Guarded Suspension

4. Share: 别拿测试不当代码

有关如何编写单元测试的文章一直都想写,攒了很多废话,真决定要发出来的时候删去了许多。我想写一个Java程序员如何编写单元测试的系列文章,且把这篇当做开始,文章移步

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值