10 天用 Flutter 撸了个高仿携程 App,2021 年 Android 面试心得
一面
1,请编程实现单例模式,懒汉和饱汉写法 2,请编程实现 Java 的生产者-消费者模型 3,HashMap 的内部结构? 内部原理?4,请简述 Android 事件传递机制, ACTION_CANCEL 事件何时触发?5,Android 的进程间通信,Liunx 操作系统的进程间通信。6,JVM 虚拟机内存结构,以及它们的作用。这个问题也比较基础,JVM 的内存结构如下图所示。7,简述 Android 的 View 绘制流程,Android 的 wrap_content 是如何计算的。8,有一个整形数组,包含正数和负数,然后要求把数组内的所有负数移至正数的左边,且保证相对位置不变,要求时间复杂度为 O(n), 空间复杂度为 O(1)。例如,{10, -2, 5, 8, -4, 2, -3, 7, 12, -88, -23, 35}变化后是{-2, -4,-3, -88, -23,5, 8 ,10, 2, 7, 12, 35}。
二面
1,bundle 的数据结构,如何存储,既然有了 Intent.putExtra,为啥还要用 bundle。2,android 的 IPC 通信方式,是否使用过 3,Android 的多点触控如何传递 核心类 4,asynctask 的原理 AsyncTask 是对 Thread 和 Handler 的组合包装。5,android 图片加载框架有哪些,对比下区别 6,图片框架的一些原理知识 7,其他的一些 Android 的模块化开发,热更新,组件化等知识。
三面、主流框架
EventBus(1)EventBus 是通过注解+反射来进行方法的获取的(2)使用 ConcurrentHashMap 来保存映射关系 调用实体的构建:调用实体中对于 Object,也就是实际执行方法的对象不应该使用强引用而是应该使用弱引用,因为 Map 的 static 的,生命周期有可能长于被调用的对象,如果使用强引用就会出现内存泄漏的问题。(3)方法的执行 使用 Dispatcher 进行方法的分派,异步则使用线程池来处理,同步就直接执行,而 UI 线程则使用 MainLooper 创建一个 Handler,投递到主线程中去执行。
2.RetrofitJava 中的动态代理 Retrofit 中的动态代理 Retrofit 作用
3.OkHttp 请求任务队列复用连接池
总结
现在新技术层出不穷,如果每次出新的技术,我们都深入的研究的话,很容易分散精力。新的技术可能很久之后我们才会在工作中用得上,当学的新技术无法学以致用,很容易被我们遗忘,到最后真的需要使用的时候,又要从头来过(虽然上手会更快)。
我觉得身为技术人,针对新技术应该是持拥抱态度的,入了这一行你就应该知道这是一个活到老学到老的行业,所以面对新技术,不要抵触,拥抱变化就好了。
Flutter 明显是一种全新的技术,而对于这个新技术在发布之初,花一个月的时间学习它,成本确实过高。但是周末花一天时间体验一下它的开发流程,了解一下它的优缺点、能干什么或者不能干什么。这个时间,并不是我们不能接受的。
如果有时间,其实通读一遍 Flutter 的文档,是最全面的一次对 Flutter 的了解过程。但是如果我们只有 8 小时的时间,我希望能关注一些最值得关注的点。
(跨平台开发(Flutter)、java 基础与原理,自定义 view、NDK、架构设计、性能优化、完整商业项目开发等)
评论