Android面试题与解析

主要分为以下几部分:

(1)java面试题

(2)Android面试题

(3)高级开发技术面试题

(4)跨平台Hybrid 开发

java面试题

1.java内存区域讲解
2.java垃圾回收机制
3.分代垃圾回收
4.HashMap的实现原理
(1)实现原理
(2)时间复杂度
(3)hash函数设计
对素数取模,加法hash,位运算hash,乘法hash,除法hash,查表hash,混合hash,数据hash
java中String的hash使用的是乘法hash,也可以理解为转换为31进制。HashMap的key的hash使用的是位运算hash。
(4)位置索引
HashMap的默认容量1 << 4 = 2^4 = 16,最大容量是MAXIMUM_CAPACITY = 1 << 30。
注:左移相当于2^n次方。
索引位置方式:取模,对2^n-1进行“&”运算相当于取模,即

(2^n-1) & hash = hash %(2^n-1)

java中实际上使用的是位运算“&”,因为位运算比取模性能好。
(5)扩容机制
2倍扩容,扩容因子默认是0.75。新建数组,然后将旧的数据复制到新的数组中。
(6)hash冲突处理方式:链地址方法
5.volatile详解
6.Java四种引用
7.单例模式-双重检查锁

Android基础

Activity生命周期

  • 正常情况
  • 异常情况

Activity之间的通信

1. Intent/Bundle

序列化

2. 类静态变量
3. 全局变量
4. 数据库和sharepreference,当传递的数据量过大时使用

Activity和Fragment之间的通信

四大启动模式

Canvas的save和restore

1.LayoutInflater.inflate(XmlPullParser parser, ViewGroup root, boolean attachToRoot)的实现原理

attachToRoot = true 会给加载的布局文件指定一个父布局,即root;
attachToRoot = false 则会将布局文件最外层所有layout属性进行设置,当该view被添加到父view中时,这些属性自动生效。

public View inflate(XmlPullParser parser, @Nullable ViewGroup root, boolean attachToRoot) {
        synchronized (mConstructorArgs) {
            ...
            try {
                ...
                if (TAG_MERGE.equals(name)) {
                   ...
                } else {
                    // Temp is the root view that was found in the xml
                    final View temp = createViewFromTag(root, name, inflaterContext, attrs);
                    ViewGroup.LayoutParams params = null;
                    if (root != null) {
                        params = root.generateLayoutParams(attrs);
                        // 关键代码attachToRoot = false的时候,会设置setLayoutParams
                        if (!attachToRoot) {
                            temp.setLayoutParams(params);
                        }
                    }
                    ...
                    //关键代码root不为空attachToRoot为true时,会将view添加到root中。
                    if (root != null && attachToRoot) {
                        root.addView(temp, params);
                    }

                    if (root == null || !attachToRoot) {
                        result = temp;
                    }
                }

            } catch (XmlPullParserException e) {
               ...
            } catch (Exception e) {
               ...
            } finally {
                ...
            }

            return result;
        }
    }
2.为什么布局嵌套多性能慢?

(1)布局文件是一个xml文件,inflate布局文件其实就是解析xml,根据标签信息创建相应的布局对象并做关联。xml中的标签和属性设置的越多,节点树的深度越深,在解析时要执行的判断逻辑、函数的嵌套和递归就越多,所以时间消耗越多。
(2)一个界面要显示出来,在requestlayout后还要执行一系列的measure、layout、draw的操作,每一步的执行时间都会受到布局本身的影响。

Android原理

1.binder机制原理
2.Handler原理
3.AsyncTask原理
4.RecyclerView缓存原理

开源库实现原理

1.AndroidVideoCache原理:

你可能感兴趣的:(Android面试题与解析)