Android面试踩过的坑

Java部分


基础知识篇

八大基本类型

名称 大小(byte)
boolean 1
char 2
byte 1
short 2
int 4
long 8
float 4
double 4

String、StringBuffer和StringBuilder

 

多线程篇

线程和进程的区别

单位 特点
进程 系统运行的基本单位 运行过程中相互独立,但每个进程包含的线程之间可互相影响
线程 独立运行的最小单位 一个进程包含多个线程,所有线程共享该进程的所有资源

进程通信方式

  1. 管道
  2. 共享内存
  3. 信号量机制(wait、notify)
  4. 消息队列通信(Handler)

Android部分


UI篇

scaleType属性

属性名 说明
center

居中,不做任何缩放;

图片过大时,显示不全;

图片过小时,完整显示,有空白

centerCrop

居中,以填满控件为目的;

保持宽高比缩放,直到图像宽高都 ≥ 控件宽高;

图片和控件宽高比例不等时,图片会被裁剪

centerInside

居中,以图片正常显示为目的;

图片过大时,按原图比例缩小,直到宽高之一等于控件宽高之一;

图片过小时,完整显示,有空白

fitCenter

居中;

保持宽高比缩放,直到宽高都 ≤ 控件宽高;

ImageView的默认缩放方式

fitEnd

居右侧或底部;

保持宽高比缩放,直到宽高都 ≤ 控件宽高

fitStart

居左侧或上侧;

保持宽高比缩放,直到宽高都 ≤ 控件宽高

fitXY 按照控件大小拉伸,不保持原比例,填满控件
matrix 不改变原图大小,从控件左上角开始绘制,超出裁剪

不同分辨率对应的dpi

首先需要明确,想要一套布局适用多个分辨率,可以将组件大小和字体大小的单位分别改为dp和sp。其中dp无关像素,sp是可伸缩像素

名称 与px的换算关系 对应分辨率 对应dpi
ldpi 0.75 240x320 120
mdpi 1 320x480 160
hdpi 1.5 480x800 240
xhdpi 2 720x1280 320
xxhdpi 3 1080x1920 480

性能调优的布局优化

有以下方式:

  1. 使用RelativeLayout代替LinearLayout,可以减少因为后者引起的嵌套层级
  2. 使用抽象布局标签include、merge和ViewStub
  3. 使用最新的ConstraintLayout,它不需要使用任何嵌套

自定义View

开发方式包括:

  1. 组合控件
  2. 继承空间
  3. 自绘控件

Android版本篇

不同android版本之间的差异(此处仅列出11、12与他们前一版本之间的差异):

版本号(API) 与前作的差异
11,API 30
  1. 需要apk签名方案v2或更高版本
  2. 读取应用列表权限
12,API 31-32
  1. 前台服务优化,原因是被过度使用
  2. android: exported:启动的activity需要设置这一属性为true
  3. 位置权限变更:允许app只访问大概的位置,在manifest文件中请求权限
  4. 新增附近设备权限

第三方库篇

使用诸如okhttp、retrofit、EventBus等需要在gradle中implements的都是引用了第三方库。

序列化篇

先将一个对象序列化成可存储或传输的状态,传递给另一个activity或者其他地方后,再将其反序列化为一个新的对象。

你可能感兴趣的:(android,面试)