杭州Android面试小结

最近一直在杭州面试,想要写一写面试中遇到的技术问题并总结一下。主要分为java基础部分和android基础部分。

java基础:

1.对抽象,封装,继承,多态的理解

抽象:就是把业务逻辑用程序代码表示出来。分为数据抽象和过程抽象,数据抽象是对象的属性,行为抽象是对象的行为特征

封装:封装是设置访问权限,只把内部的数据或方法暴露给可信的类或对象,对不可信的进行隐藏

继承:把一些有共性的类称为父类,不同子类可以通过继承付类重用这一些共性

多态:允许不同类的对象对同一消息做出响应。方法的重载体现了多态,向上转型也体现了多态。例如:

Animal d = new Dog();

Animal c = new Cat();

在编译时,并不知道引用的具体对象是那个类,只有当程序运行时才能知道。

2.java中的单例模式怎么写

饿汉模式
public class Singleton {
    //饿汉模式,没有达到懒加载的效果,在类加载时就会实例化,但是是线程安全的
    private static Singleton singleton = new Singleton();
    private Singleton(){}
    public static Singleton getInstance(){
        return singleton;
    }
}

3.String和StringBuffer、StringBuilder的区别

String是不可变的,StringBuffer和StringBuider都是可变的;StringBuffer是线程不安全的,但是效率会高一些;StringBuilder是线程安全的,但是效率低一些。

4.对java的泛型的理解

泛型,即“参数化类型”。
创建集合时就指定集合元素的类型,该集合只能保存其指定类型的元素,避免使用强制类型转换。

5.java中的垃圾回收机制是怎么样的

5.1.确定删除的对象

java中的GC采用对象引用遍历的方式判断该对象是否被回收,如果该对象是不可达的,则视为垃圾回收

5.2.GC扫描堆栈,删除垃圾

删除对象的过程中,会停止所有其他线程

6.如何实现对象排序

实现comparable接口,然后通过Collections.sort()或者Arrays.sort()进行排序

7.java中的反射

Java反射机制可以让我们在编译期(Compile Time)之外的运行期(Runtime)获得任何一个类的字节码。包括接口、变量、方法等信息。还可以让我们在运行期实例化对象,通过调用get/set方法获取变量的值。
反射机制详解

8.java中的设计模式

1.单例模式
2.适配器模式
3.观察者模式
4.builder模式
个人理解它的优点是能把一个复杂对象的每一步的构造过程解耦
5.代理模式

android中使用的设计模式

9.synchronized关键字的应用

synchronized详解

10.HashMap工作原理

HashMap工作原理

Android基础:

1.Activity生命周期是怎么样的

ActivityA跳转到ActivityB:

a.onPause()-->b.onCreate()-->b.onStart()-->b.onResume()-->a.onStop()

ActivityB再回退到ActivityA:

b.onPause()-->a.onRestart()-->a.onStart()-->a.onResume()-->b.onStop()-->b.onDestory()

若在Activity界面按home键又返回:

onPause()-->onStop()-->onRestart()-->onStart()-->onResume()

2.Service的生命周期有哪些

通过start方式启动:

onCreate()-->onStartCommand()-->onDestory()

通过bind方式启动:

onCreate()-->onBind()-->onUnbind()-->onDestory()

3.对MVP、MVC、MVVM的了解

4.android中handler的使用

//handler绑定looper,并暴露接口,用于实现
mHandler = new Handler(Looper.myLooper()){
            @Override
            public void handleMessage(Message msg){
                Log.d(TAG, "获得了message");
                super.handleMessage(msg);
            }
        };
//创建MessageQueue
looper.prepare();
//发送Message到MessageQueue
Message message = new Message();
message.sendToTarget();
//轮询MessageQueue
looper.loop();

5.android中touch事件的传播

6.有没有用过EventBus

EventBus使用详解

7.谈谈android中的性能优化

7.1.对布局的优化

1.使用include标签,能达到对布局的重用
2.使用merge标签,他可以删除多余层级
3.使用ViewStub,ViewStub加载布局时,占用资源很少。ViewStub的应用
关于include,merge和ViewStub

7.2.使用clipRect用于防止overDraw

7.3.ListView滑动卡顿:

可能是因为滑动过程中正在下载图片,也可能是item布局太复杂

8.有哪些常用的开源框架,说说他们的优点

网络请求 okhttp:会从很多常用的连接问题中自动恢复。如果您的服务器配置了多个IP地址,当第一个IP连接失败的时候,OkHttp会自动尝试下一个IP。OkHttp还处理了代理服务器问题和SSL握手失败问题
图片加载 glide:glide会根据imageview的大小来确定要加载的图片的大小,磁盘缓存时,也只缓存控件大小的bitmap
View注入 Butter Knife
数据存储 DBFlow ORM
热修复 tinker 热修复的原理是用classloader来加载class文件
事件总线框架 EventBus EventBus使用详解

9.JNI的使用

JNI基础

10.Android中常用的IPC的方式,以及各自的优缺点

1.使用Bundle 数据类型支持有限,序列化耗时
2.使用文件共享 无法即时通信,不好处理高并发
3.使用Messenger 通过Message进行传输,所以也只能支持bundle数据;适用于轻量级和地并发 Messenger详解
4.AIDL AIDL详解
5.ContentProvider 用于数据共享
6.Socket 用于网络交换

11.Android中的内存泄漏,内存溢出,以及内存抖动

内存泄漏是某些对象不能被回收
内存溢出是由于内存不足
内存抖动是由于频繁GC

Android性能优化典范

12.图片的处理

13.Fragment与Activity通信,Fragment之间是怎么通信的

Fragment与Activity之间通过EventBus或者接口的方式通信
Fragment之间通过绑定的Activity中转做通信

14.Fragment的生命周期和Activity生命周期比较

Activity与Fragment生命周期探讨

15.android蓝牙开发流程

Android经典蓝牙开发简介

16.android应用启动流程

17.android中的缓存策略

分为内存缓存(一级缓存)和磁盘缓存(文件缓存),需要特定数据时,先去找内存中是否存在,如果没有再去磁盘中找,如果都没有,则再去进行网络请求。

18.android组件化开发

19.两种注册广播的方法的区别

清单文件中注册广播是常驻型广播,不跟随程序的生命周期,在代码中注册的广播正相反

20.如何实现自定义标签列表

Android自定义标签列表控件

21.Activity四种启动模式

Activity启动模式

22.lrucache在android中的使用及原理

LruCache的使用及原理

23.android图片处理

android图片处理

24.android surfaceView

android surfaceView

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,843评论 6 502
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,538评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,187评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,264评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,289评论 6 390
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,231评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,116评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,945评论 0 275
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,367评论 1 313
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,581评论 2 333
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,754评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,458评论 5 344
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,068评论 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,692评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,842评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,797评论 2 369
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,654评论 2 354

推荐阅读更多精彩内容

  • Android Studio JNI流程首先在java代码声明本地方法 用到native关键字 本地方法不用去实现...
    MigrationUK阅读 11,858评论 7 123
  • 踏羁寒 北国的冬天, 啸风穿我耳畔 哪怕独我一人,也愿捡起耳麦 背起行囊,漫步轻吟 只为 这里的黎...
    泽007阅读 313评论 0 0
  • 是同学亦是朋友,记得再猴子的生日聚会上认识你,转眼四年了 马上又入秋天,或许我的秋天有点晚,就是这样,上海这边的天...
    文字随风阅读 453评论 0 0
  • spring-cloud版本:Finchley.SR1 本文是用数据库的方式存储配置信息的,本人觉得 git 的方...
    程序之道阅读 3,953评论 0 1
  • 夜空里的泡桐花,像小喇叭一样。 泡桐花,久远而又美好的回忆。 记得小时候,妈妈的学校里有很多...
    njlinda阅读 242评论 0 0