面经

作者: 小虫虫奇遇记 | 来源:发表于2020-09-21 14:33 被阅读0次

头条一面:
1.最近公司做的项目?性能优化做了哪些工作?
网络请求回来,Activity被销毁了,怎么避免?取消回调;
LifeCircle.addObserver()设置标识位,回调时判断

总结:优化项目要说明背景,收益。
2.Fragment和Activity如何通信?
除了ViewModel,直接定义方法调用;接口回调;发广播;EventBug消息总线;
View预加载,异步加载(AsyncInflate)
3.ConstraintLayout去除,如何本地衡量优化结果?(onFrame回调,messageQueue.dispatchMessage方法前后日志)
4.内存泄漏怎么发生的?举例?如何避免呢?Handler消息内存泄漏原理
内部类为什么持有外部类的引用?
编译器会为非静态内部类生成单独的class文件,构造方法中将外部类实例作为参数传递进去。
解决:静态内部类+弱引用;handler.removeCallback;

// OuterClass$InnerClass.class
class OuterClass$InnerClass {
    private OuterClass$InnerClass(OuterClass var1) {
        this.this$0 = var1;
    }
}

5.内存优化怎么做的,什么工具?
LeakCanary;MAT;LeakCanary原理?
6.如何实现一个半圆形抽奖转盘?
7.Activity启动模式:SingleTop/SingleTask区别,适用场景
8.二叉树的最大深度.递归和迭代

Okhttp?Robust?LeakCanary原理
Https协议怎么握手的?对称加密和非对称加密细节?
HashCode和equals 方法

1.如果两个对象相同,那么它们的hashCode值一定要相同;
2.如果两个对象的hashCode相同,它们并不一定相同(这里说的对象相同指的是用eqauls方法比较)。
如不按要求去做了,会发现相同的对象可以出现在Set集合中,同时,增加新元素的效率会大大下降。
3.equals()相等的两个对象,hashcode()一定相等;equals()不相等的两个对象,却并不能证明他们的hashcode()不相等。
换句话说,equals()方法不相等的两个对象,hashcode()有可能相等(我的理解是由于哈希码在生成的时候产生冲突造成的)。反过来,hashcode()不等,一定能推出equals()也不等;hashcode()相等,equals()可能相等,也可能不等。

二,三面:
开发过程中遇到的问题?
LifeCircle用在MVP上?
注解 /字节码使用 ?Dagger?
AppBundle , Hotfix 原理?
Robust原理?
插桩:方法数增加 导致不能内联问题--->某些行数少的方法就不插桩,
super调用-->java字节码指令invokeSuper

NIO java I/O 对比:

I/O面向数据流,NIO面向缓存区
I/O是阻塞的,当一个线程调用read() 或 write()时,该线程被阻塞,直到有一些数据被读取,或数据完全写入。
NIO是非阻塞的 ,一个单独的线程现在可以管理多个输入和输出通道

Serializable vs parcelable

Serializalbe会使用反射,序列化和反序列化过程需要大量I/O操作,Parcelable自已实现封装和解封(marshalled &unmarshalled)操作不需要用反射,数据也存放在Native内存中,效率要快很多。

反射效率为什么低:

反射操作 主要通过JVM执行,所以时间成本会高于直接执行相同操作的时间

  1. 因为接口的通用性,Java的invoke方法是传object和object[]数组的。基本类型参数需要装箱和拆箱,产生大量额外的对象和内存开销,频繁促发GC
  2. 编译器难以对动态调用的代码提前做优化,比如方法内联。
  3. 反射需要按名检索类和方法,有一定的时间开销

mmap什么时候用 ?

匿名共享内存:
open,文件描述符fd, mmap使得进程之间通过映射同一个普通文件实现内存共享。普通文件被映射到进程地址空间后,进程可以像访问普通内存一样对文件进行访问,不必再调用write(),read()等操作。

SharedPreference的替代?

腾讯的 MMKV原理:
利用mmap内存映射文件,提供一段可随时写入的内存块,App 只管往里面写数据,由操作系统负责将内存回写到文件,不必担心 crash 导致数据丢失。
使用protobuf 协议,pb 在性能和空间占用上都有不错的表现

Android数据存储方法都有哪些?如何优化性能
异步加载View遇到问题?handler ? view的context?
插件化?模块动态加载
App的整体架构? 中台?功能feature。
线程池几个参数作用

性能优化?造成卡顿都有什么原因?
内存优化怎么做的?内存泄漏。。。LeakCanary原理

H5白屏怎么检测?端上怎么埋点?
WebView SDK都有哪些功能?jsBridge 怎么实现?WebView兼容性问题?
MVP/MVVM场景?差异

技术需求占比?团队最近在做的一些事情?
关注团队其他成员的任务,比如MKVM?模块动态加载。
App 有几个进程?
Content Provider 用过吗?回答没怎么用过。应该说一下即使没用过,但是还是了解过一些。

项目经验,平时开发过程中总结很重要!
关注组里其他成员的任务并了解原理。
多看优秀源码,学习总结框架思想

四面:
1.印象最深刻的项目?最有成就的项目?遇到问题如何解决的
2.为什么离职?不符合预期原因是什么?
3.学习源码或平时开发过程中有没有设计得特别好的框架?
4.性能优化工具都有什么?TraceView和Systrace区别
5.如何判断一个字符串是合法IP地址,考察是否仔细,能够考虑到异常case
用到的Integer.valueOf()具体实现是怎样的
回答:空判断;长度判断;是否包含”\.“;分割后数组长度;是否包含非数字的字符等
知识点:

String a = "....";
String[] arr = a.split('\\.');  //arr是空的

String b = ".1.2.3";
String[] arr = b.split('\\.');  //arr=['''',"1","2","3"];

String c = ".1.2.3.";
String[] arr = c.split('\\.');  //arr=['''',"1","2","3"];
//分割符如果在第一个字符位置,则会有一个空字符作为分割后的一个元素;如果在最后一个位置,则不会。

相关文章

  • Android面经| 问题归纳

    面经专题系列:Android面经| 问题归纳Android面经| 回顾展望Android面经| 算法题解 @[to...

  • 互联网产品经理面试问题汇总(18问)

    写在前面: 以下内容是根据自己看了很多面试经验之后的总结,包括百度面经,腾讯面经,新浪面经,360面经,搜狐面经,...

  • 面经

    HTML 1.Doctype作用,标准模式与兼容模式的区别 声明位于html文档中的第一行,处...

  • 面经

    这两天又收到几个面试邀请,我想记录一下就这两天面试的心得体会。 先拿昨天下午的搜狐畅游来说吧,问的知识点还都很平常...

  • 面经

    作者:尘归土链接:https://www.nowcoder.com/discuss/101712来源:牛客网 计算...

  • 面经

    校招。迎来了面试机会。 面试官:电脑合上,演草纸(本来放在我这)也拿走。手一摊,简历翻来覆去。都懒得问我问题,敷衍...

  • 面经

    所谓面经,即面试经验,这里面包含了面什么?如何去面试以及面试别人?等等诸如此类的。百人计划第八次分享,老徐主要...

  • 面经

    2017/9/12滴滴一面,二面,三面技术面:1.对计算机网络的理解。比如对HTTP协议的理解,说一下HTTP1....

  • 面经

    链接:[https://www.nowcoder.com/discuss/35473]首先进行一个小时的笔试。一面...

  • 面经

    第一答题要有框架,要背诵模板,即面试题型要能随口答出来,能有具体的答题思路; 第二答题要能破题,不能离题万里,要围...

网友评论

      本文标题:面经

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