https://www.gravatar.com/avatar/7a0c24f697ea1587001c36d00039b60f?s=240&d=mp

Android高频面试题汇总(一)

1.Leakcanary原理?

  1. 利用 application.registerActivityLifecycleCallbacks(lifecycleCallbacks) 来监听整个生命周期内的 Activity onDestoryed 事件
  2. 某个 Activity 被 destory 后,将它传给 RefWatcher 去做观测,确保其后续会被正常回收;
  3. RefWatcher 首先把 Activity 使用 KeyedWeakReference 引用起来,并使用一个 ReferenceQueue 来记录该 KeyedWeakReference 指向的对象是否已被回收;
  4. AndroidWatchExecutor 会在 5s 后,开始检查这个弱引用内的 Activity 是否被正常回收。判断条件是:若 Activity 被正常回收,那么引用它的 KeyedWeakReference 会被自动放入 ReferenceQueue 中。
  5. 判断方式是:先看 Activity 对应的 KeyedWeakReference 是否已经放入 ReferenceQueue 中;如果没有,则手动 GC:gcTrigger.runGc();;然后再一次判断 ReferenceQueue 是否已经含有对应的 KeyedWeakReference。若还未被回收,则认为可能发生内存泄漏

2.如何理解Java的多态?其中,重载和重写有什么区别?

多态是同一个行为具有多个不同表现形式或形态的能力,多态是同一个接口,使用不同的实例而执行不同操作,多态就是程序运行期间才确定,一个引用变量倒底会指向哪个类的实例对象,该引用变量发出的方法调用到底是哪个类中实现的方法。 多态存在的三个必要条件是:继承,重写,父类引用指向子类引用。 多态的三个实现方式是:重写,接口,抽象类和抽象方法。

快速理解二十三种设计模式(速记)

设计模式六大原则

  • 单一职责原则(Single Responsibility Principle)
  • 里氏替换原则(Liskov Substitution Principle)
  • 依赖倒置原则(Dependence Inversion Principle)
  • 接口隔离原则(Interface Segregation Principle)
  • 迪米特法则(最少知道原则)(Law of Demeter)
  • 合成复用原则(Composite Reuse Principle)

设计模式三大类

  1. 创建型模式(Creational Pattern):对类的实例化过程进行了抽象,能够将软件模块中对象的创建和对象的使用分离。 (5种)工厂模式、抽象工厂模式、单例模式、建造者模式、原型模式

Mac上安装yarn和nvm

Mac上安装yarn最方便的方式就是命令行输入:

1
brew install yarn

但是这样会把node也一并安装,作为开发者来说,保持多个node版本是必要的,所以我们一般都是通过nvm来管理node版本。

Hexo迁移到hugo

使用hexo构建博客大概是5、6年的事了,在此之前一直使用wordpress来搭建个人的博客。

而早些年博客系统仿佛也只有wordpress,当你想要搭建个人博客时,你只会得到一个答案,那就是wordpress。

wordpress是如此强大,丰富的扩展,强大的管理后台,它能提供我们需要的一些。

毫无疑问,这就是我们需要的,何况全世界的人都在使用它。

然而,当面对繁杂而厚重的wordpress时,我们意识到我们需要的只是一个简单的,优雅的,能使用markdown书写的系统。

Sign in With Apple 从登陆到服务器验证

https://img.ibook8.club/15862407395820.jpg

关于手机端登录的代码,这里不做多余介绍,我们看下登录成功后, Apple返回给手机端的一些参数

1
2
3
4
5
6
7
8
open var user: String { get }
open var state: String? { get }
open var authorizedScopes: [ASAuthorization.Scope] { get }
open var authorizationCode: Data? { get }
open var identityToken: Data? { get }
open var email: String? { get }
open var fullName: PersonNameComponents? { get }
open var realUserStatus: ASUserDetectionStatus

这里初步登录成功,从 Apple 拿到 user 、 identityToken 、 authorizationCode 等相关信息。