Android中高级进阶开发面试题冲刺合集(六)

以下主要针对往期收录的面试题进行一个分类归纳整理,方便大家统一回顾和参考。本篇是第六集~

强调一下:因篇幅问题:文中只放部分内容,全部面试开发文档需要的可在公众号<Android苦做舟>获取。

第一篇面试题在这: Android中高级进阶开发面试题冲刺合集(一)

第二篇面试题在这: Android中高级进阶开发面试题冲刺合集(二)

第三篇面试题在这: Android中高级进阶开发面试题冲刺合集(三)

第四篇面试题在这: Android中高级进阶开发面试题冲刺合集(四)

第五篇面试题在这: Android中高级进阶开发面试题冲刺合集(五)

设计模式

1.请简要谈一谈单例模式?

参考答案:

单例模式,主要用于某些环境下对象的唯一性,分为线程安全和不安全,写法也比较多,但是个人认为只要熟悉主要的几种就行,包括双检查、静态内部类、枚举

2.对于面向对象的六大基本原则了解多少?

参考答案:

  1. 单一职责(Single Responsibility Principle):一个类只做一件事,可读性提高
  2. 里式替换原则( Liskov Substitution Principle):依赖继承和多态,就是能用父类的地方就可以用子类替换,用子类的但不能用父类。
  3. 依赖倒置原则(Dependence Inversion Principle):依赖抽象,就是模块之间的依赖通过抽象发生。
  4. 开闭原则(Open-Close Principle):不管是实体类,模块还是函数都应该遵循对扩展开放对修改关闭。还是要依赖封装和继承
  5. 接口隔离原则(Interface Segregation Principle):一个类对另一个类的依赖应该建立在最小的接口上,如果接口太大,我们需要把它分割成一些更细小的接口,也是为了降低耦合性
  6. 迪米特原则(Law of Demeter ):也称最少知识原则,也就是说一个类应该对自己需要耦合或者调用的类知道的最少,只需知道该方法即可,实现细节不必知道。

3.请列出几种常见的工厂模式并说明它们的用法?

参考答案:

工厂模式
1.简单工厂(杂而不精)
一个工厂方法根据参数的不同创建不同的对象 (多重ifelse)
2.工厂方法(过于专一)
一个工厂负责生产一个具体对象(太多工厂类的使用)
3.抽象工厂(职责分离又不缺灵活)
通过参数选取不同的工厂生产对象

4.说说项目中用到的设计模式和使用场景?

参考答案:

单例模式

常见应用场景:网络请求的工具类、sp存储的工具类、弹窗的工具类等

工厂模式

常见应用场景:activity的基类等

责任链模式

常见应用场景:OKhttp的拦截器封装

观察者模式

常见应用场景:Rxjava的运用

代理模式

常见应用场景:AIDL的使用

建造者模式

常见应用场景:Dialog的创建

详细的说不出来,哈哈
感兴趣的可以看我的博客,最近有整理这一块,六大原则、23设计模式

5.什么是代理模式?如何使用?Android源码中的代理模式?

参考答案:

代理模式给某一个对象提供一个代理对象,并由代理对象控制对原对象的引用。通俗的来讲代理模式就是我们生活中常见的中介。

举个例子来说明:假如说我现在想买一辆二手车,虽然我可以自己去找车源,做质量检测等一系列的车辆过户流程,但是这确实太浪费我得时间和精力了。我只是想买一辆车而已为什么我还要额外做这么多事呢?于是我就通过中介公司来买车,他们来给我找车源,帮我办理车辆过户流程,我只是负责选择自己喜欢的车,然后付钱就可以了。用图表示如下:

个人感觉和装饰者模式很类似。

其它问题可参考:https://www.jianshu.com/p/f82a03ec5110

6.谈一谈单例模式,建造者模式,工厂模式的使用场景?如何合理选择?

参考答案:

  1. 单例模式:保证全局只有一个实例,如网络请求
  2. 建造者模式:用于需要设置比较多的属性可以用直接链式,如AlerDialog
  3. 工厂模式:用于业务的实体类创建,易于扩展,如BitMapFactory

7.谈谈你对原型模式的理解?

参考答案:

1.定义
用原型对象的实例指定创建对象的种类,并通过拷贝这些原型创建新的对象.

2.使用场景
    (1)类初始化需要消耗比较多的资源,通过原型拷贝可以避免这些消耗
    (2)当new一个对象需要非常繁琐的数据准备等,这时可以使用原型模式
    (3)当一个对象需要提供给其他调用者使用,并且各个调用者都可能修改其值时, 通过原型模式拷贝多个对象供调用者使用,保护性拷贝

Android 源码中例子:
Intent ,Intent的查找与匹配

原型模式实质上就是对象拷贝,要注意深拷贝和浅拷贝问题. 还有就是保护性拷贝,就是某个对象对外是只读的,为了防止外部对这个只读对象修改,通常可以通过返回一个对象的拷贝来实现只读的限制.

优点:
原型模式是在内存中的二进制流的拷贝,性能要比new一个对象好的多.减少了约束.

缺点:
直接在内存中拷贝,构造函数是不会执行的

8.请谈谈策略模式原理及其应用场景?

参考答案:

1.定义
定义了一系列算法,并将每一个算法封装起来,而且是它们之间可以相互替换. 策略模式让算法独立于使用它的客户而独立变化.

2.使用场景
    (1)对同一类型问题的多种处理方式,仅仅是具体行为有差别时.
    (2)需要安全封装多种同一类型的操作时.
    (3)出现同一抽象类有多个子类, 而又需要使用if-else或者switch-case来选择具体子类时

Android 源码中例子:
时间插值器,加减速插值器, (内部封装了不同的算法,外部只需调用可实现不同的动态效果)

策略模式主要用来分离算法,在相同的行为抽象下有不同的具体实现策略

优点:
    (1)结构清晰明了,使用简单直观
    (2)耦合度相对而言比较低,扩展方便
    (3)操作封装也更为彻底,数据更为安全

缺点:
    (1)随着策略的增加,子类也会变得繁多

9.静态代理和动态代理的区别,什么场景使用?

参考答案:

静态代理类:由程序员创建或由特定工具自动生成源代码,再对其编译。在程序运行前,代理类的.class文件就已经存在了。
动态代理类:在程序运行时,运用反射机制动态创建而成。
静态代理通常只代理一个类,动态代理是代理一个接口下的多个实现类。
静态代理事先知道要代理的是什么,而动态代理不知道要代理什么东西,只有在运行时才知道。
动态代理是实现JDK里的InvocationHandler接口的invoke方法,但注意的是代理的是接口,也就是你的业务类必须要实现接口,通过Proxy里的newProxyInstance得到代理对象。
还有一种动态代理CGLIB,代理的是类,不需要业务类继承接口,通过派生的子类来实现代理。通过在运行时,动态修改字节码达到修改类的目的。

10.谈一谈责任链模式的使用场景?

参考答案:

责任连模式定义: 将多个对象连成一条链,并沿着这条链传递该请求,只到有对象处理该请求为止。使多个对象都有机会处理请求,从而避免了请求的发送者和接受者之间的耦合关系。

Android中责任链场景:
1) Android 源码中对于事件分发是基于该模式,Android 会将事件包装成一个事件对象从ViewTree的顶部至上而下的分发传递,只到有View处理该事件为止。
2)OkHttp 的拦截器也是基于责任链模式,用户请求和服务器返回数据,会经过内置拦截器链逐级的处理 。

计算机网络方面

1.请简述 Http 与 Https 的区别?

参考答案:

HTTP协议传输的数据都是未加密的,也就是明文的,因此使用HTTP协议传输隐私信息非常不安全,为了保证这些隐私数据能加密传输,于是网景公司设计了SSL(Secure Sockets Layer)协议用于对HTTP协议传输的数据进行加密,从而就诞生了HTTPS。
1、https协议需要到ca申请证书,一般免费证书较少,因而需要一定费用。

2、http是超文本传输协议,信息是

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值