美文网首页
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