ARTS 打卡 第 5 周
ARTS简介
Algorithm 是一道算法题,Review 是读一篇英文文章,Technique/Tips 是分享一个小技术,Share 是分享一个观点。
Algorithm
你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有满足条件且不重复的三元组。
注意:答案中不可以包含重复的三元组。
示例:
给定数组 nums = [-1, 0, 1, 2, -1, -4],
满足要求的三元组集合为:
[
[-1, 0, 1],
[-1, -1, 2]
]
解题思路:
我的第一想法是把所有三个数字相加判断结果是否为0(时间复杂度为O(n^3))然后对该三个数字进行排序去重,编写好代码之后,在最后几个测试案例的时候超时了,证明这条路不通,只能想其它的方式。
因为数组中可能有重复的元素,在结果全部找到后再去重可能耗时有点长,所以如果能够在找到结果之前就去重,那应该能节省不少时间,所以可以先对输入的数组进行排序,这样方便后续的操作。
题目的要求是找出三个元素,那么我们可以先确定一个元素,然后再寻找另外的两个元素,因为我们已经将数组按照从小到大进行了排序,那么我们可以从最小的元素(a=nums[0])开始,寻找另外的两个元素,用一个指针l指向a的后一个元素,另一个指针r指向数组的最后一个元素:
因为可能有重复的值,所以需要在不同的阶段跳过重复的值
还需要对边界条件作判断(好几次都忘了),比如nums==null或nums.length<3
Review
学习-微服务架构模式系列,网站地址是:https://microservices.io
微服务架构-Pattern: Self-contained service
这篇文章的主要介绍了分解模式:自包含服务。
一个在线外卖网站:FTGO,其使用的是微服务架构,客户端通过提交Post请求创建订单,期望在600ms获得响应。创建订单的责任分布在不同的服务中,请求路由到Order Service,Order Service 负责与其他服务协作:
Restaurant Service 知道饭店的菜单和价格
Consumer Service 知道下单的消费者的状态
Kitchen Service 创建一个Ticket,告诉厨师做什么
Accounting Service 授权消费者的信用卡
在处理同步请求时,服务应如何与其他服务协作?
强制条件:
微服务体系结构通常将处理请求的责任分配到多个服务之间
操作通常需要低延时高可用
操作的可用性是处理请求时调用的所有服务的可用性
服务可以重试对失败的协作者的请求,但这会增加响应时间。
解决方式:设计一个可以即时响应同步请求的服务,自包含服务
方式一 将所需的功能实现为服务模块,而不是单独的服务。
方式二 使用 CQRS 和 Saga 模式与其他服务协作。使用 Saga 模式异步保持数据一致性,使用 CQRS 模式维护其他服务拥有的数据的副本
结论:
好处:改进可用性和响应时间
不足:
Tips
记录我对于Linux的学习,从磁盘相关的命令开始:
ps:”~” 表示为 home 目录,”.” 则是表示目前所在的目录,”..” 则表示当前目录的上一层目录
-h 用人类可读的格式展示(G(千兆字节),M(兆字节),K(千字节)),大部分命令有这个参数
du用于显示指定的目录或文件所占用的磁盘空间。
常用参数:
-a或-all 显示目录中个别文件的大小。
-b或-bytes 显示目录或文件大小时,以byte为单位。
-c或–total 除了显示个别目录或文件的大小外,同时也显示所有目录或文件的总和。
-D或–dereference-args 显示指定符号连接的源文件大小。
-h或–human-readable 以K,M,G为单位,提高信息的可读性。
-H或–si 与-h参数相同,但是K,M,G是以1000为换算单位。
-k或–kilobytes 以1024 bytes为单位。
-s或–summarize 仅显示总计。
–exclude=<目录或文件> 略过指定的目录或文件。
–max-depth=<目录层数> 超过指定层数的目录后,予以忽略。
Share
分享最近对计算机基础的复习,这次分享的是信息的表示与存储 - 浮点数的运算,可能会有不足之处,之后会根据理解继续修改。
版权声明: 本文为 InfoQ 作者【引花眠】的原创文章。
原文链接:【http://xie.infoq.cn/article/8d3a195caf206a46f81a95e88】。
本文遵守【CC-BY 4.0】协议,转载请保留原文出处及本版权声明。
评论