美文网首页
Android面试总结(2018-03-07)

Android面试总结(2018-03-07)

作者: 西瓜皮TWO | 来源:发表于2018-03-08 13:31 被阅读0次

    融360 和 FunPlus+:

    • 自定view的流程和生命周期
      生命周期:onFinishInflate()--> onAttachToWindow()--> onMeasure()--> onLayout()--> 
    onDraw()--> onWindowFocusChanged() --> onDetachFormWindow();
    
    • hashmap的实现原理(JDK1.7与JDK1.8的区别)
    • 算法: 单链表反转(循环和递归写法),单例模式
    • https协议的握手过程(MD5摘要、SHA1、SHA256算法原理,数字签名)-------
    • 自定义view的onMeasure方法的执行操作-------
    • volatile字段的含义:被它修饰的字段对多线程操作可见--> 对读可见,对写不同步;
    • 内存泄漏与内存溢出,区别、举例、预防、检测(LinkCanary、MAT、Android Profiler)
    • apk瘦身-------
    • handler机制
    • Application和四大组件启动顺序和相关注意事项
      1、Application的attachBaseContext()方法优先执行;
      2、ContentProvider的onCreate()方法比Application的onCreate()方法先执行;
      3、Service和Activity 的 onCreate()方法和 BroadcastReceiver的 onReceive()方法,
    是在Application的onCreate()方法后执行的;
      4、调用流程:Application的attachBaseContext()--> ContentProvider的onCreate()-->
    Application的onCreate()--> Service、Activity等的onCreate()(Activity和Service不分先后);
    
    • Retrofit多BaseUrl及运行时动态改变BaseUrl:
      1、通过Retrofit提供的@URL注解在参数中传入全路径来支持运行时动态改变BaseUrl
      2、通过OKhttp的 Interceptor 拦截器和添加自定义Header的方案支持多baseURL

    百度 (百家号)

    一面

    • TCP三次握手
    • handler机制
    • 内存优化: OOM的处理;资源的及时关闭(cursor、bitmap及时关闭);自定义view时不要再onDraw方法创建过多的对象
    • 自定义view的流程;onMeasure、onLayout、onDraw的执行顺序和作用
      (view的测量绘制是从viewRootImp的performTranvalce开始。。。)
    • 设计一个求大数和(非int、long、bigInteger)的函数:(用string表示大数,转成char数组求和)
    • 求单链表中的最大节点(两个指针)
    • protobuffer的体积小,传输快的原因
    • 单例模式

    二面

    用户在Launcher程序里点击应用图标时,会通知ActivityManagerService启动应用的默认Activity,
    ActivityManagerService发现这个应用还未启动,则会通知Zygote进程(fork)孵化出应用进程,
    然后在这个dalvik应用进程里执行ActivityThread的main方法。
    应用进程接下来通知ActivityManagerService应用进程已启动,ActivityManagerService保存应用进程的一个代理对象(applicationthread),
    这样ActivityManagerService可以通过这个代理对象控制应用进程,
    然后ActivityManagerService通知应用进程创建入口Activity的实例,并执行它的生命周期方法.
    
    • 项目中用到的cordova框架具体做了哪些平台支持;plugin的加载时机;Android与H5交互的JsBridge的实现原理
    • 项目中用到的分时线自定义view
    • scrollView嵌套子view需要注意的点(滑动冲突、高度为0的问题)
    • apk瘦身的方式
    • 长连接的问题
    • 在子线程中使用handler
    • Android的性能优化(内存优化、布局优化、数据库优化、代码优化)
    • oom的处理
    • listview或recycleView加载显示图片造成卡顿的优化方案(getview的item复用,图片的压缩剪切、图片缓存)
    • classLoder加载一个类的过程
    • 获取view的真实尺寸(三种)
    第一种 : 使用 getviewtreeobserver().addongloballayoutlistener()来获得宽度或者高度
        private int mheaderviewheight; 
        private view mheaderview; 
          ..... 
          mheaderview.getviewtreeobserver().addongloballayoutlistener( new ongloballayoutlistener() { 
            @override
            public void ongloballayout() { 
               mheaderviewheight = mheaderview.getheight(); 
               mheaderview.getviewtreeobserver() .removeglobalonlayoutlistener(this); 
           } 
        });
        需要注意的是ongloballayoutlistener可能会被多次触发,因此在得到了高度之后,要将ongloballayoutlistener注销掉。
    
    第二种 : view post事件中获取
        public class testheight extends activity { 
           textview tv; 
           @override
           protected void oncreate(bundle savedinstancestate) { 
              super.oncreate(savedinstancestate); 
              setcontentview(r.layout.activity_activity_b); 
              tv = (textview) findviewbyid(r.id.textview); 
              tv.post(new runnable() { 
                 @override
                 public void run() { 
                  int height= tv.getheight(); 
                 } 
              }); 
           } 
        } 
    
    第三种 : 直接测量计算
        int intw=view.measurespec.makemeasurespec(0,view.measurespec.unspecified); 
        int inth=view.measurespec.makemeasurespec(0,view.measurespec.unspecified); 
        textview.measure(intw, inth); 
        int intwidth = textview.getmeasuredwidth(); 
        int intheight = textview.getmeasuredheight();
    

    必要商城

    • 二分查找
    • 广度打印二叉树
    • Android硬件加速
    • 自定义view的整个测量绘制流程
    1、measure的测量规则 --- view的大小试根据父view的measureMode + view的layout.parame + view的measureMode计算出来的;
    2、layout的布局是通过setFrem(l,t,r,b)
    3、draw的绘制流程: 绘背景drawBackground() --> 绘内容onDraw() --> 绘子view disoatchDraw() --> 
        绘装饰(侧边栏,滚动条...)onDrawForeground()
    4、可以通过invalid和requestLayout方法请求重绘
    
    • 打印出杨辉三角第N行的数组
    • 心跳机制,心跳包的组成

    火币网

    • activity的启动模式和应用场景
    • 面试感想:要与实际相结合,既要懂原理又要知道什么场景下用

    人人车

    • 插件化和热更新原理(根据市面上流行的框架介绍其原理)
    • Android apk DEX和ODEX的区别
        我们在原生Android中安装apk会产生apk和odex两个文件,而使用第三方的rom只有apk一个文件。
        我们知道普通的Android App编译之后会生成apk,其中的class.dex是其可执行文件。Android App运行的策略也就是解压apk后运行class.dex。
    那么odex是什么?
        odex是同名apk经系统优化后的dex文件,原生ROM中apk和odex文件是配对的,对应的apk文件中没有了dex(比正常可安装的apk小)。
    这样的好处:
        1.加快程序的装载与运行
        2.防止系统程序的简单复制(防盗链!),针对不同的ROM,odex文件是变化的,不可混用的,否则程序就不能政策运行。
    与odex配对的apk文件又因为缺少dex无法单独安装和使用。这也是直接复制带ODEX的程序到其他固件不能运行的原因。
        3.节省data分区资源(ODEX解压出来的执行程序是在SYSTEM目录的同名ODEX,DEX版的解压是在DATA区目录,且ODEX文件比DEX文件更小)
    

    相关文章

      网友评论

          本文标题:Android面试总结(2018-03-07)

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