美文网首页
Android面试题与解析

Android面试题与解析

作者: 洛草为王 | 来源:发表于2020-03-19 21:59 被阅读0次

    主要分为以下几部分:

    (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面试题与解析

          本文链接:https://www.haomeiwen.com/subject/xouryhtx.html