安卓-内存泄露处理
对于开发老手,这个问题想必已经深入你的心;若是一名新手或者一直对内存泄漏这个东西模模糊糊的工程师,你的答案可能让面试官并不满意,这里将从底到上对内存泄漏的原因、排查方法和一些经验为你做一次完整的解剖。
处理内存泄漏的问题是将软件做到极致的一个必须的步骤,尤其是那种将被用户高强度使用的软件。
案例:
1 | public class PendingOrderManager { |
对于开发老手,这个问题想必已经深入你的心;若是一名新手或者一直对内存泄漏这个东西模模糊糊的工程师,你的答案可能让面试官并不满意,这里将从底到上对内存泄漏的原因、排查方法和一些经验为你做一次完整的解剖。
处理内存泄漏的问题是将软件做到极致的一个必须的步骤,尤其是那种将被用户高强度使用的软件。
案例:
1 | public class PendingOrderManager { |
为指导 Android 开发者更加高效、高质量地进行 App 开发,呈现给用户体验好、性能优、稳定性佳、安全性高的产品。
本手册以开发者为中心视角分为 Java 语言规范,Android 资源文件命名与使用,Android 基本组件,UI 与布局,进程、线程与消息通信,文件与数据库,Bitmap、Drawable 与动画,安全,其他等九大部分,根据约束力强弱,规约依次分为强制、推荐、参考三大类:
遵循 Oracle 公司《The Java Language Specification, Java SE 8 Edition》
1. 【推荐】资源文件需带模块前缀。
2. 【推荐】layout 文件的命名方式。
1 | Activity 的 layout 以 module_activity 开头 |
ClassName1 | class Dog: # 类 |
ClassName.attr__init__ 中定义,用 self. 访问1 | class Dog: |
__init__self(实例本身)self,操作实例数据实例.方法() 调用@classmethodcls(类本身)@staticmethodself/cls,与类/实例无关1 | from datetime import date |
| 命名 | 含义 | 实际效果 |
|---|---|---|
_单下划线 |
约定私有,外部可访问但不建议 | 提示"内部使用" |
__双下划线 |
名称修饰(name mangling),外部难直接访问 | 变成 _类名__属性 |
@property 装饰器1 | class BankAccount: |
super():调用父类方法,避免硬编码父类名1 | class Animal: # 父类 |
多重继承(Python 特色)
1 | class Flyable: |
1 | class Dog: |
抽象基类(规范接口)
1 | from abc import ABC, abstractmethod |
1 | from datetime import date |
| 特性 | 口诀 |
|---|---|
| 类 vs 对象 | 类是图纸,对象是房子 |
| 属性 | 类属性大家共享,实例属性各管各 |
| 方法 | 实例用 self,类用 cls,静态啥不用 |
| 封装 | 单下划线提醒,双下划线保护,@property 伪装 |
| 继承 | super() 找爸爸,重写覆盖,扩展新功能 |
| 多态 | 鸭子类型,同一接口,不同表现,不管你是谁 |
1. 快乐的数字
编写一个算法来确定一个数字是否“快乐”。 快乐的数字按照如下方式确定:从一个正整数开始,用其每位数的平方之和取代该数,并重复这个过程,直到最后数字要么收敛等于 1 且一直等于 1,要么将无休止地循环下去且最终不会收敛等于 1。能够最终收敛等于 1 的数就是快乐的数字。
例如: 19 就是一个快乐的数字,计算过程如下:
1 ** 2 + 9 ** 2 = 82
8 ** 2 + 2 ** 2 = 68
6 ** 2 + 8 ** 2 = 100
1 ** 2 + 0 ** 2 + 0 ** 2 = 1
1 | def func(a): |