面试题千面android share

【Android面试有章可循】知识点总结

2017-08-24  本文已影响386人  夷陵小祖

分享一篇Android知识点总结文章 面试复习——Android工程师之Android面试大纲

后续我会在这个的基础上,对每个知识点展开来讲,并补充一些个人觉得需要掌握的知识点,希望对大家准备 Android开发岗春招秋招以及形成较完整的 Android知识体系 有帮助。

Activity面试题
Fragment面试题
Service面试题
Broadcast Receiver面试题
WebView面试题
Binder面试题
Handler面试题
AsyncTask面试题
HandlerThread面试题
IntentService面试题
视图工作机制面试题
事件分发机制面试题
ListView面试题
Android项目构建面试题
ANR面试题
OOM面试题
Bitmap面试题
UI卡顿面试题
内存泄漏面试题
内存管理面试题
冷启动和热启动面试题
其他优化面试题
架构模式面试题
插件化面试题
热更新面试题
进程保活面试题
Lint面试题
Kotlin面试题

Activity面试题

1、Activity是什么

2、Activity四种状态

3、Activity生命周期

4、进程的优先级

5、Activity任务栈

6、Activity启动模式

7、scheme跳转协议
Android中的scheme是一种页面内跳转协议,通过定义自己的scheme协议,可以跳转到app中的各个页面

Fragment面试题

1、Fragment为什么被称为第五大组件
Fragment比Activity更节省内存,其切换模式也更加舒适,使用频率不低于四大组件,且有自己的生命周期,而且必须依附于Activity

2、Activity创建Fragment的方式

3、FragmentPageAdapter和FragmentPageStateAdapter的区别

4、Fragment生命周期

5、Fragment的通信

6、Fragment的replace、add、remove方法

Service面试题

1、Service是什么

2、Service和Thread的区别

3、Service启动方式

4、Service生命周期

Broadcast Receiver面试题

1、Broadcast Receiver是什么

2、Broadcast Receiver的使用场景

3、Broadcast Receiver的种类

4、Broadcast Receiver的实现

5、Broadcast Receiver实现机制

6、LocalBroadcastManager特点

WebView面试题

1、WebView安全漏洞

2、WebView销毁步骤

3、WebView的jsbridge

4、WebViewClient的onPageFinished

5、WebView后台耗电

6、WebView硬件加速

7、WebView内存泄漏

Binder面试题

1、Linux内核的基本知识

2、为什么使用Binder

3、Binder通信模型


4、AIDL

Handler面试题

1、Handler是什么

3、Handler工作原理
Android进阶——Android消息机制之Looper、Handler、MessageQueen

4、Handler引起的内存泄漏

AsyncTask面试题

1、AsyncTask是什么

2、AsyncTask使用方法

3、AsyncTask工作原理

4、AsyncTask引起的内存泄漏

5、AsyncTask生命周期

6、AsyncTask结果丢失

7、AsyncTask并行or串行

HandlerThread面试题

1、HandlerThread产生背景

2、HanlderThread的特点、

IntentService面试题

1、IntentService是什么

2、IntentService使用方法

视图工作机制面试题

Android进阶——Android视图工作机制之measure、layout、draw

事件分发机制面试题

Android事件分发机制之dispatchTouchEvent、onInterceptTouchEvent、onTouchEvent

ListView面试题

1、ListView是什么

2、ListView的RecycleBin机制


这里写图片描述

3、ListView的优化

Android项目构建面试题

1、android构建流程

这里写图片描述
2、jenkins持续集成构建

3、Git常用命令

git init:仓库的初始化
git status:查看当前仓库的状态
git diff:查看仓库与上次修改的内容
git add:将文件放进暂存区
git commit:提交代码
git clone:克隆代码
git bransh:查看当前分支
git checkout:切换当前分支

4、git工作流

fork/clone(主流) fork:将别人的仓库代码fork到自己的仓库上
clone:克隆下自己仓库的代码
update、commit:修改代码并提交到自己的仓库
push:提交到自己的仓库
pull request:请求添加到别人的仓库
clone

5、proguard是什么

6、proguard技术功能

7、proguard工作原理

8、为什么要混淆

ANR面试题

1、什么是ANR

2、发生ANR的条件

3、造成ANR的主要原因

4、如何解决ANR

OOM面试题

1、什么是OOM

2、OOM相关概念

3、解决OOM

其他相关

Bitmap面试题

1、recycle

2、LruCache原理

3、计算inSampleSize

public static int calculateInSampleSize(BitmapFactory.Options options, int reqWidth, int reqHeight) {
final int height = options.outHeight;
final int width = options.outWidth;
int inSampleSize = 1;

if (height > reqHeight || width > reqWidth) {
    if (width > height) {
        inSampleSize = Math.round((float)height / (float)reqHeight);
    } else {
        inSampleSize = Math.round((float)width / (float)reqWidth);
    }
}
return inSampleSize;
}

4、缩略图

public static Bitmap thumbnail(String path,int maxWidth, int maxHeight, boolean autoRotate) {
  BitmapFactory.Options options = new BitmapFactory.Options();
  options.inJustDecodeBounds = true;
  Bitmap bitmap = BitmapFactory.decodeFile(path, options);
  options.inJustDecodeBounds = false;
  int sampleSize = calculateInSampleSize(options, maxWidth, maxHeight);
  options.inSampleSize = sampleSize;
  options.inPreferredConfig = Bitmap.Config.RGB_565;
  options.inPurgeable = true;
  options.inInputShareable = true;
  if (bitmap != null && !bitmap.isRecycled()) {
    bitmap.recycle();
}
  bitmap = BitmapFactory.decodeFile(path, options);
  return bitmap;

}

5、保存Bitmap

public static String save(Bitmap bitmap,Bitmap.CompressFormat format, int quality, File destFile) {
try {
    FileOutputStream out = new FileOutputStream(destFile);
    if (bitmap.compress(format, quality, out)) {
        out.flush();
        out.close();
    }
    if (bitmap != null && !bitmap.isRecycled()) {
        bitmap.recycle();
    }
    return destFile.getAbsolutePath();
} catch (FileNotFoundException e) {
    e.printStackTrace();
} catch (IOException e) {
    e.printStackTrace();
}
return null;

}

6、保存到SD卡

public static String save(Bitmap bitmap,Bitmap.CompressFormat format, int quality, Context context) {
if (!Environment.getExternalStorageState()
        .equals(Environment.MEDIA_MOUNTED)) {
    return null;
}
File dir = new File(Environment.getExternalStorageDirectory()
        + "/" + context.getPackageName() + "/save/");
if (!dir.exists()) {
    dir.mkdirs();
}
File destFile = new File(dir, UUID.randomUUID().toString());
return save(bitmap, format, quality, destFile);

}

7、三级缓存

UI卡顿面试题

1、UI卡顿原理

2、UI卡顿的原因分析

3、UI卡顿的优化

内存泄漏面试题

1、Java内存泄漏引起的主要原因

2、Java内存分配策略

3、Android解决内存泄漏的例子

内存管理面试题

1、Android内存管理机制

2、内存管理机制的特点

3、内存优化方法

冷启动和热启动面试题

1、什么是冷启动和热启动

2、冷启动和热启动的区别
冷启动:创建Application后再创建和初始化MainActivity
热启动:创建和初始化MainActivity即可

3、冷启动时间的计算

4、冷启动流程

总结:Application构造方法 -> attachBaseContext() -> onCreate() -> Activity构造方法 -> onCreate() -> 配置主题中背景等属性 -> onStart() -> onResume() -> 测量布局绘制显示在界面上

5、冷启动优化

其他优化面试题

1、Android不用静态变量存储数据

2、SharePreference安全问题

3、内存对象序列化

4、避免在UI线程中做繁重的操作

架构模式面试题

插件化面试题

1、插件化解决的问题

2、类加载器(Java中字节码添加到虚拟机中)

热更新面试题

1、热更新主要流程

2、热更新主流框架

3、热更新的原理

进程保活面试题

1、进程的优先级

2、Android进程回收策略

3、Android保活方案

Lint面试题

1、什么是Android Lint

2、Lint工作流程


这里写图片描述

3、配置Lint

Kotlin面试题

1、什么是Kotlin

2、Kotlin环境搭建

上一篇下一篇

猜你喜欢

热点阅读