Algorithm

LeetCode 7:整数反转

给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。
注意:
假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为[−2^31, 2^31 − 1]。请根据这个假设,如果反转后整数溢出那么就返回 0。
示例:

1
2
3
4
5
6
7
8
输入: 123
输出: 321

输入: -123
输出: -321

输入: 120
输出: 21

思路

可看作将一个栈中的数据依次弹出存入另一栈中,但需要考虑溢出的情况,即入栈后的数字若超过Int32的范围,应直接返回零。

解答

1
2
3
4
5
6
7
8
9
10
11
12
13
func reverse(_ x: Int) -> Int {
var tx = x
var pop = 0
var res = 0
while tx != 0 {
pop = tx%10
tx/=10
if res > Int32.max/10 || (res == Int32.max/10 && pop > 7) { return 0 }
if res < Int32.min/10 || (res == Int32.min/10 && pop < -8) { return 0 }
res = res*10 + pop
}
return res
}

Review

NASA’s 10 rules for developing safety-critical code - SD Times

本文介绍了 NASA 经过数十年软件工作所积累下来的软件开发领域的编码准则,堪称经典。再看目前项目中累计多年下来的代码觉得有很多由于规范上的、标准上的缺失,导致可读性、可维护性和可拓展性较差。

Tip

记录一下如何获取应用的内存阀值。iOS 使用 Jetsam 机制来控制系统的内存使用,当某个进程超过内存阀值就会被 Jetsam 强杀,当然从系统内存使用角度来看,你的 APP 可能并未到达阀值也会被杀,为了给其他活跃 APP 腾出空间。

使用 JetsamEvent 日志计算内存限制值,该日志会存于手机的设置-隐私-分析与改进-分析数据下,以 JetsamEvent 开头。日志中都是系统内核强杀 APP 留下的内存信息,使用顶部的pageSize字段和rpages字段,即rpages * pageSize即可得到 OOM 的阀值。

Share

带你打造一套 APM 监控系统 之 OOM 问题

下周可能开始做数据上报组件的开发工作,最近也在了解相关的内容。看到这篇文章对 OOM 的机制和底层原理介绍的比较详细,与上周分享的那篇针对 OOM 的文章结合来看,可以对系统的内存分配机制、监控 OOM 、记录数据、内存优化等都会有一定的帮助。