关于Android面试个人一些总结

作者: Ad大成 | 来源:发表于2019-11-28 10:06 被阅读0次

    最近几个月没有上班,也没有认真的去回顾过去的知识!以至于今天回北京面试碰一鼻子灰,彻夜难眠,起来写下这篇博客总结经验,告诫自己,提醒大家!

    记得有一次刷抖音,是一个听书的节目,说道这样一句话,什么是文化?文化是你学过的看过的,一段时间后还会记得的那些!

    个人总结:忘了 还是不扎实!忘了 还是没学透!
    一下摘要一些我认为比较偏僻的问题,分享一下

    1 当前进程如何开启一个新的进程

    很简单,当时确实把我问住了,就是把启动的activity或者service 在对应的清单文件中添加一个 android:process="XX"属性即可 分配一个新的内存地址创建一个新的进程

    2 在项目中组件化你是怎么做的 两个module是如何跳转的

    关于组件化由来的解答:一个项目刚开始都是采用中心化管理的思想,将相同的资源集中进行管理,但是做着做着,发现集中管理的资源太多了,多人开发时牵一发而动全身,进而又要对原本的项目进行拆分,故而出现了组件化开发!
    具体详细的点击链接去看https://www.jianshu.com/p/d0f5cf304fa4
    总结就是根据实际开发业务需求来选择组件式还是单一模式开发

    两个module的跳转是依靠这里主要还是依赖阿里的ARouter框架来实现
    具体点击链接https://blog.csdn.net/hzw2017/article/details/84204833
    主要总结可以说通过ARouter,在需要交互的Activity/Fragment 类上用注解的形式指定该类的path(也叫设置该类的路由路径)利用接口回调传递数据,或者是利用ARouter的建造者模式携带数据跳转
    还有一种方法也可以实现跳转不需要三方框架的
    https://blog.csdn.net/fenggering/article/details/85332523

    3热修复和热更新的原理,以及修复完成后会热启动还是冷启动?

    现进到这里学习原理https://blog.csdn.net/itachi85/article/details/79522200
    然后你就知道 有些三方是不需要重新启动的,腾讯的Tinker是需要重新启动app后才会去替换修改的dex文件

    4 关于安卓Q10.0的版本适配

    参考https://www.jianshu.com/p/887a0841ce97https://www.cnblogs.com/bluestorm/p/10782927.html

    主要变动存储条件 设备唯一标识符 后台定位权限 禁止应用后台弹页面
    多媒体新特性 系统应用变更

    5 关于sp

    SharedPreferences简称Sp(后面都会称Sp),是一种轻量级的数据存储方式,采用Key/value的方式
    进行映射,最终会在手机的/data/data/package_name/shared_prefs/目录下以xml的格式存在。
    Sp通常用于记录一些参数配置、行为标记等!因为其使用简单,所以大多数开发者用起来很爽!但是
    请注意:千万不要使用Sp去存储量大的数据,也千万不要去让你的Sp文件超级大,否则会大大影响应用性能,
    甚至出现ANR,没错是ANR(下面会分析)。

    6 webview 如何去掉广告

    webview如何去掉广告,总结起来就一句话,通过注入js的方式删除h5页面的广告div节点内容就ok,如果注入js呢,在我们的webview加载里面有一个监听就是页面加载完成,onPageFinished这个方法,在里面通过loadUrl的形式把需要注入的js代码添加进去就OK,注入的js代码可以在这里看https://www.jianshu.com/p/d793c8d4ff81/

    7 如何结束一个线程

    有三种方法可以结束线程:

    1. 使用退出标志,使线程正常退出,也就是当run方法完成后线程终止

    2. 使用interrupt()方法中断线程,其实他不会立即终止线程,需要配合isInterrupt()来进行判断,用break跳出操作来终止当前线程

    3. 使用stop方法强行终止线程(不推荐使用,可能发生不可预料的结果)
      https://www.cnblogs.com/liyutian/p/10196044.html

    8 动画有哪些主要的类,插值器,估值器的介绍

    地址:https://www.jianshu.com/p/5d090270a4f5
    属性动画用到的类ValueAnimator ,ObjectAnimator,AnimatorSet
    补间动画用到的类RotateAnimation(旋转)、ScaleAnimation(缩放)、AlphaAnimation(透明度)、TranslateAnimation(位移)、AnimationSet(组合)这5种。
    帧动画用到的类 AnimationDrawable

    插值器估值器地址:https://www.jianshu.com/p/915471529d3c

    9 安卓中动画隔多久刷新一帧

    10 Handler中MessageQueue的数据结构 ThreadLocal工作原理里

    MessageQueue主要包含两个操作:插入和读取,插入和读取分为enqueueMessage和next,其中enqueueMessage是往消息队列中插入一条消息,next是从消息队列中去出一条消息并从消息队列中移除,MessageQueue实际上是使用单链表来实现的。

    ThreadLocalThreadLocal是一个线程内部的数据存储类,通过它可以在指定的线程中存储数据,数据存储以后,只有在指定线程中可以获取到存储的数据,对于其它线程来说无法获取到数据。ThreadLocal另一个使用场景是复杂逻辑下的对象传递,比如监听器的传递,有些时候一个线程中的任务过于复杂,这可能表现为函数调用栈比较深以及代码入口的多样性,在这种情况下,我们又需要监听器能够贯穿整个线程的执行过程,这个时候可以怎么做呢?其实就可以采用ThreadLocal,采用ThreadLocal可以让监听器作为线程内的全局对象而存在,在线程内部只要通过get方法就可以获取到监听器

    原文链接:https://blog.csdn.net/chenshuangma/article/details/79818210
    地址:https://blog.csdn.net/chenshuangma/article/details/79818210

    11一个线程中有几个looper 如何做到的

    一个线程中只有一个looper
    因为looper的构造方法是private私有的 然而要想创建looper就需要调用looper的prepare()方法 ,这个方法如果当前有一个looper存在,就会抛出异常!地址:https://zhidao.baidu.com/question/2206593625665240668.html

    12 Handler中有一个后台空闲线程可以做性能优化IdleHandler

    地址:
    https://blog.csdn.net/suyimin2010/article/details/93835877

    13相对布局会measure测量几次

    相对布局会测量两次 相对布局每测量一次里面的组件就会测量两次
    地址:https://www.jianshu.com/p/6bbb3b692ca7

    14线性布局的权重属性规则

    【最后控件的宽度 = 控件本身宽度 + 权重比例分配宽度 】
    地址:
    https://zhidao.baidu.com/question/502378966311655164.html

    15 安卓中的手势检测类

    Android提供了一个GestureDetector来帮助我们识别一些基本的触摸手势(还有ScaleGestureDetector可以识别缩放手势),让我们很方便地实现手势控制功能
    地址:
    https://www.jianshu.com/p/29a72ae35065

    16 关于设计模式

    其实这个自行度娘把 最主要就是单例模式了 里面还包含volatile和synchronize的相关知识也需要了解
    给一个地址
    https://blog.csdn.net/qq_24309787/article/details/82257772

    17 关于synchronize的介绍

    介绍:https://blog.csdn.net/javazejian/article/details/72828483
    synchronized(this)、synchronized(class)与synchronized(Object)的区别
    地址:https://blog.csdn.net/luckey_zh/article/details/53815694

    18 线程池有几个关键的参数

    地址:https://blog.csdn.net/qq_31439011/article/details/100824461

    19volatile 和synchronize

    volatile
    它所修饰的变量不保留拷贝,直接访问主内存中的。
    您只能在有限的一些情形下使用 volatile 变量替代锁。要使 volatile 变量提供理想的线程安全,必须同时满足下面两个条件:
    1)对变量的写操作不依赖于当前值。
    2)该变量没有包含在具有其他变量的不变式中。

    volatile最适用一个线程写,多个线程读的场合。
    如果有多个线程并发写操作,仍然需要使用锁或者线程安全的容器或者原子变量来代替。
    synchronized
    当它用来修饰一个方法或者一个代码块的时候,能够保证在同一时刻最多只有一个线程执行该段代码。

    当两个并发线程访问同一个对象object中的这个synchronized(this)同步代码块时,一个时间内只能有一个线程得到执行。另一个线程必须等待当前线程执行完这个代码块以后才能执行该代码块。
    然而,当一个线程访问object的一个synchronized(this)同步代码块时,另一个线程仍然可以访问该object中的非synchronized(this)同步代码块。
    尤其关键的是,当一个线程访问object的一个synchronized(this)同步代码块时,其他线程对object中所有其它synchronized(this)同步代码块的访问将被阻塞。
    当一个线程访问object的一个synchronized(this)同步代码块时,它就获得了这个object的对象锁。结果,其它线程对该object对象所有同步代码部分的访问都被暂时阻塞。
    地址:https://blog.csdn.net/mccand1234/article/details/91345168

    20 GreenDao 中的Dao是什么意思 神级问题

    DAO(Data Access Object) 数据访问对象是一个面向对象的数据库接口,它显露了 Microsoft Jet 数据库引擎(由 Microsoft Access 所使用),并允许 Visual Basic 开发者通过 ODBC 像直接连接到其他数据库一样,直接连接到 Access 表。DAO 最适用于单系统应用程序或小范围本地分布使用。
    地址:https://baike.baidu.com/item/DAO/2900358?fr=aladdin

    21 sendContentView()用处以及实现

    https://www.jianshu.com/p/97bf8476d559

    22 gradle 构建过程

    初始化阶段
    配置阶段
    执行阶段
    https://www.jianshu.com/p/e7a40a592f15

    相关文章

      网友评论

        本文标题:关于Android面试个人一些总结

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