本周ARTS
本周ARTS打卡内容:
- Algorithm 来源 LeetCode33
- Review 分享 The 5 Levels of Logging
- Tip 分享 iptables与firewalld使用,区别与联系
- Share 分享 前端的微服务化
Algorithm
Leetcode的33题 在旋转的排序数组中查找
https://leetcode.com/problems/search-in-rotated-sorted-array/
把一个升序数组,绕某个点旋转以下,比如[0,1,2,3,4,5,6,7],变成了[4,5,6,7,0,1,2],在这个旋转后的数组中查找目标值,如果存在则返回其所在位置,不存在则返回-1。
解法:
本题要求时间复杂度为O(log n),所以很明显要求使用二分查找法。
首先想到可以用递归解决。旋转的数组局部是有序的,所以需要分情况处理,第一种情况:二分查找的前部分是升序的,后半部分是先升后降。如果目标值在前部分,对前部分使用递归找出其位置,返回位置,如果在后部分,对后部分使用递归找出其位置,加上后部分数组的第一个元素的位置。第二种情况:前半部分是先升后降,后半部分是升序,如果目标值落在前半部分,对前半部分套用递归,如果目标值落在后半部分,对后半部分套用递归,返回同上一种情况,代码如下:
1 | func search(nums []int, target int) int { |
Review
很多系统都会有自己的日志分级策略,作者在文中讲了下他本人认为重要的5个方面,包括各级日志的颜色。
- Error。发生错误的情况。使用这个来定义需要注意的错误情况。Error下的大多数的抛出异常不能优雅的处理。推荐使用红色标记。例如:找不到“crucial.dat”文件;错误数据:
[stack trace and debug message];连接数据库异常 - Warning。可能发生错误的情况。可能需要人们关注的。可能是当前潜在的错误或者未来的问题(例如响应慢,连接丢失,低内存等),也可能是程序处理错误的声明。推荐使用黄色标记。例如:连接关闭,2s后重连;找不到“logging.conf”文件,回滚到默认配置;尝试连接30s超时等等。
- Info。告知用户的操作或状态改变。用户能接触到的最冗长日志级别。包含很少的技术细节。推荐使用白色标记。例如:客户端初始化;保存“yeti02”;输入变形速度;当前目录为“/tmp”;上行链路建立;渲染完成,花费42.999s。
- Debug。这是保存日志文件的原因,可以用来修复bug的。debug是转储程序流和其他技术疑难杂症的首选级别。除非日志太多或者更高级别的更合适,否则建议保留。推荐使用灰色或米色标记。例如:从“/etc/octarine/octarine.conf”读取配置文件;使用“/home/aib/.octarinerc”覆盖原有配置;分析完成,构建图像;使用“user”连接server:4242;发送2个信息;渲染时间分解:Foo 0.990s,Bar 42.009s
- Trace。包含详细的技术细节。很多是你并不想要的,包括那个函数被调用,客户端收到什么样的网络包等。有助于捕获低级错误,但是通常需要先将它的位置缩小到两条调试信息之间。推荐使用深灰色。例如:->GET / HTTP/1.1\nHost: localhost\n\n;Got: <?xml version=”1.0” encoding=”UTF-8” ?>\n
\n […] - Fatal。发生严重错误,需要停止应用。建议使用紫色。例如:内存溢出;磁盘空间不足;license过期等。
Tip
iptables与firewalld使用,区别与联系:
https://leitty.github.io/2019/06/14/iptables%E4%B8%8Efirewalld/
Share
Uber 大数据平台的演进