头图

扯犊子之前,先放一张面试图吧:
在这里插入图片描述

求职?求生?Start...

说来也怪,从入职的第一天就觉得很不舒服,然后慢慢产生离开的念头,随后转变思想,回去打算按照步骤继续学习,避免下次求职尴尬。奈何。

过去的事儿,不想再说太多了,挺坑的,也挺现实的。

孰是孰非,深究无意,备好行囊,继续出发~

感兴趣的可以点击查看:

其实上家公司带来的影响蛮大的,可能也算是成长的代价吧,还好。

本来想着,找个工作,然后好好喷喷,将那副丑恶的嘴脸曝光。直到现在确定入职公司了,电脑面前,却不知道说啥了。

人在做天在看吧,好自为之。。。

本次真实记录面试历程,希望对求职的你有一些帮助。。。

干货面试好文

不错的面试大纲:

另外还有一些营销号发布的一些技能点,也可以作为面试复习参考。

下面有自己目前整理的面试文档,后续会找个合适的方式好好整理一波。

2021 - 09 - 29

又重新开始面试,刚开始有点蒙,不过慢慢就会好起来的~

阿凡提 - 供应链物流 避坑

有些无奈,项目着急缺人,草草结束面试环节。

到楼下抽了两根烟,依然处于懵逼环节。

  • 简单介绍下项目经历。
  • 熟悉 Kotlin 吗?简单说下 let、apply、run 区别。

    • 它们是 Kotlin 提供的作用域函数,也就是在对象的上下文中执行代码块。
    • 可以从函数内使用区分进行理解:this、it
    • this:

      • with: 内联函数,函数内使用 this 来访问该对象属性方法,返回值为函数块最后一行或指定的 return;
      • run: with、let 结合体,可以通过 this 来访问该对象属性方法,也可以通过像 let 一样进行对象统一判空处理,返回值为函数块最后一行或指定的 return;
      • apply: 和 run 相似,区别在于返回的是传入对象本身;
    • it:

      • let: 扩展函数,可以对被扩展的对象进行统一判空,函数内通过 it 访问其对象属性方法,返回值为函数块最后一行或者指定的 return 表达式;
      • also: 和 apply 类似,不同是函数内通过 it 访问该对象,同样返回为传入对象。
  • 你们的网络请求异步回调怎么处理的?
  • Kotlin 协程用过吗?Kotlin 协程深入研究过吗?

    • 轻量级线程,创建协程不需要分配新的线程。默认使用已经定义好的线程池,智能调度。并且协程提供挂起(suspend)和恢复(resume)操作。

      • 挂起(suspend): 挂起当前执行的协同程序,并且保存此刻的所有本地变量。协程内部是使用状态机来管理协程的各个挂起点;
      • 恢复(resume): 从它被挂起的位置继续执行,并且挂起时保存的数据也被还原。
      • Kotlin协程实现原理:挂起与恢复
  • 你是怎么做的 Apk 瘦身。

    • 首先通过 Android Studio 提供的 Apk 分析器去获取当前 Apk 包中各个占比情况,然后根据占比进行对应处理。主要分为以下几个方面:
    • So 方面:对标微信,查看对应兼容 So 情况,这里排除 So 动态加载方式,最后选择只保留 arm64-v8a。
    • 资源方面:这块内容较多,可分情况举例说明。

      • 开启 lint 严苛模式,物理移除用不到的资源文件,记得单独 git commit;
      • 有损压缩 png 图片TinyPng。项目较大的情况可通插件的方式进行处理压缩,主要是在 processDebugResources Task 后进行对应资源处理;
      • 部分 icon 类型图片替换 svg,注意使用时需要通过 compat 方式使用,src 低版本会有兼容问题;
      • 部分 gif、png 升级 WebP 格式图片;
      • 采用微信资源压缩,主要是通过将资源路径变短的方式以达到缩小 Apk 大小的方式。 AndResGuard
      • build 开启语言限制,代码、zip 压缩等常规基础配置;
      • 限制当前 app 支持国家语言。
    • 代码方面:

      • 代码优化,减少冗余代码;
      • 配合以上 build 常规基础配置。
  • 依赖注入框架 Dagger 用过嘛?
  • 地图相关开发过吗?都做过哪儿些东西?你做过地图行程路径规划吗?
  • 大概什么时候能入职?加班怎么看?

其实最好还是线上沟通,后续看情况选择是否进行二次线下,这样至少对于双方而言,成本更低,面试者也不需要来来回回很多时间花费在路上,结果草草了事。

明日世界 - 直播/社交

进门需要写面试题,分为单选、多选、简答。前两项都是网上多年之前的老题目,我这估计没能全对。

  • 用你最熟悉的排序算法对下列排序 {1,3,3,2}

    • 双指针、冒泡、递归
  • 说下 Java、Android 中常见的内存泄露的方式和解决办法

    • 常见的内存泄漏方式:

      • 非静态内部类、匿名内部类
      • 静态的 View
      • Handler
      • 监听器(各种需要注册的 Listener、Watcher 等)
      • 操作资源对象没关闭
      • 属性动画
      • 低版本的 WebView 会发生内存泄漏,主要是持有 Context 导致,高版本已修复。 Android-WebView还会存在内存泄漏吗?
    • 解决办法:

      • 内部类加 static,内部使用外部类对象时,同时需要设置为弱引用;
      • 及时进行对应操作的回收操作,例如:IO 流、取消注册监听、关闭动画等;
      • 如果需要兼容这部分低版本机型,可以通过首先移除 WebView 后续通过 WebView 的 destroy 进行对应销毁处理。
    • Android中常见的内存泄露及解决办法汇总

据说是面试官是九秀直播的负责人,前期车载业务方面多聊了一会儿,剩下技术蛮深入的。

  • 自我介绍,公司主要负责哪儿方面业务的开发。
  • 省略前期讨论的车载相关的整个业务流程以及相关细节。
  • 假设现在有这么几个 Activity,A 为 singTask,B 为 singTop,当我从 A 启动 B,然后现在点击 Home 键返回后台,随后点击桌面 Icon 启动 App,那么这时候呈现在用户面前是哪儿个页面。

    • A 页面。
  • 你知道当点击 Icon 启动 App,系统如何将应用从后台转为前台的么?
  • HashSet 和 HashMap 的区别,从数据结构方面来描述。

    • HashMap 1.7 版本之前底层数据结构为:数组 + 链表,1.8 后变为 数组 + 链表 + 红黑树。由于 HashSet 底层也是 HashMap 实现,所以两者底层数据结构一致。
  • 你能说下对 Bitmap 的理解么?
  • 如何优化 Bitmap 在内存中占用的大小呢?

    • 首先拓展如何计算 Bitmap 所占用内存大小:Bitmap 宽度(px) Bitmap 高度(px) 像素点占用字节数
    • 优化思路:

      • 通过采样率压缩改变 Bitmap 宽高;
      • 通过 matrix 压缩(createBitmap)Bitmap;
      • 改变 Bitmap Config 为占用字节更少的 ARGB_4444 或者 RGB_565
    • 性能优化:Bitmap内存大小优化的几种常见方式
  • ARGB_8888 在内存中占比是最大的,还是最小的?

    • 最大的。ARGB_8888 占用 4 个字节,ARGB_4444 和 RGB_565 占用 2 个字节。
  • 如何实现 Bitmap 的复用。

    • 借助 Lru 算法以及弱引用
  • 你知道你在使用帧动画的时候为什么内存居高不下吗?如何进行优化呢?
  • 一张图片转换为 Bitmap 对象,你知道这里面存放的都是什么信息么?

    • 当前图片颜色值,存放类型取决于使用的是什么类型的 Config。
  • Bitmap 存储信息的数据结构是怎样的?
  • 我创建一个对象,当我不使用的时候,并且将它置空,这时候就会立即被回收吗?
  • 现在有这样的一个需求,我在 Activity 中的 View 中添加一个浮窗小球,并且让其随着手指移动,你有什么方式实现?移动点击的时候,又该如何处理?
  • 在自定义 View 中,你是会在内部重写 onTouchEvent 还是在外层进行处理?
  • 内部重写 onTouchEvent() 和外层调用 setOnTouchListener() 有什么区别?

    • onTouchEvent(): 处理屏幕上的操作,例如点击、长按、滑动等;
    • setOnTouchListener(): 获取某一个控件的点击监控。
    • 两者之间区别:

      • 外层 setOnTouchListener() 优先级要高于内部 onTouchEvent();
      • setOnTouchListener() onTouch 返回 true(事件被消费),则 onTouchEvent() 不会执行。反之,onTouchEvent() 才会执行。
    • Android onTouchEvent和setOnTouchListener中onTouch的区别
  • onTouchEvent 如何实现自定义 View 的点击操作?
  • 假设我在自定义 View 中内部消费掉了这个事件,那么我在外层去设置 setOnTouchEvent 监听,还能监听到吗?那么如果在内部不消费这个事件,外层监听还有效吗?
  • 你能大概的说下 RecyclerView 的用法吗?
  • 大概说下 RecyclerView 的缓存机制。
  • 假设我现在的 RecyclerView 有三种 item layout,现在我开始滑动,那么这期间的缓存变化是怎样的?
  • 假设现在有五条数据,我往上滑动一条,这时候缓存变化是怎样?
  • 你知道 RecyclerView 的一级缓存容量多大吗?
  • 假设,我现在又新增了一种 item layout,那么这个新的 item layout 是什么时候会被缓存?
  • 假设我现在 item layout 只有一种,我页面上显示了五个 item,那么这个时候 RecyclerView 的一级缓存中存放了几个 ViewHolder?
  • 假设我现在的 App 存在如下两个问题:

    • 启动比较慢
    • 应用使用过程中会出现卡顿

    针对以上两个问题,结合你之前的经验,你会通过哪儿些方面去解决这两个问题?

  • 如何精准定位具体卡顿地方呢?通过哪儿些方式?维度?
  • 你是如何检测屏幕卡顿?思路、方案简述。
  • 具体离职时间和离职原因。车载目前团队配比怎样?
  • 你 MVVM 用的多吗?
  • 你对加班怎么看?期望薪资,入职时间。

晚上回家的时候 HR 小姐姐打来电话,大概沟通了半个小时左右吧。聊了很多方面,具体印象不太深了。

小姐姐声音蛮好听的,轻声细语的,很温柔,嗷嗷嗷~

后续貌似是入职时间较晚,还是业务什么原因,暂时未能牵手成功。

问了下朋友,之前面试也是被同样的理由回绝的,ummm。

害。

达不溜科技 - 短视频/社交

上家面试有点超时,后续找个哈啰,刹车还不好使,最后还跑偏了。

公司正在装修,面试过程中被装修工人打扰了几次。

面试官温文尔雅的,聊的整体还凑合吧,会的都说了,不会的也坦然说明了。

  • 你是自学的开发吗?自我介绍。
  • 大概介绍下公司的项目和情况。
  • 简述 Activity 启动模式。

    • Activity 有四种启动模式,分别为:standard、singleTop、singleTask、singleInstance。
    • standard: 默认启动模式,每次都会新建一个 Activity 实例放入栈中;
    • singleTop: 栈顶复用模式,当前 Activity 位于栈顶,不会创建新的 Activity 实例,而是会回调 onNewIntent()。反之,当前 Activity 位于栈内非栈顶,效果同 standard;适用于推送详情页
    • singleTask: 跳转该模式的 Activity 时,首先会在任务栈中查看是否存在该实例,如果存在则会将位于这个 Activity 实例上的 Activity 全部结束,并将当前 Activity 位于栈顶;适用于主页
    • singleInstance: 新创建一个任务栈,单独存放该 Activity。
  • 详细介绍下 Handler。
  • UI 页面是如何进行回收的呢?
  • 简单描述下你了解的垃圾回收。
  • 内存中的那儿些地方可以作为 GC root?它可回收的一些点。

    1. Java 虚拟机栈(局部变量表)中引用的对象;
    2. 方法区中静态引用指向的对象;
    3. 仍处于存活状态中的线程对象;
    4. Native 方法中 JNI 引用的对象。
  • 垃圾回收不当会造成内存泄漏,你是如何检测和治理的?
  • 假设用户设备上出现崩溃闪退的情况,你是如何能了解到这个情况呢?
  • OkHttp 和系统提供的网络访问框架有什么区别?
  • RecyclerView 和 ListView 区别。
  • 当用户点击桌面 icon 启动 app,这个过程是怎么样的?
  • 针对启动 app 的时间又是如何优化的呢?
  • 针对 UI 卡顿有没有心得体会?比如说列表卡顿?动画卡顿等?
  • 短视频缓存这块做过哪儿些操作?
  • MVC、MVP 和 MVVM 有什么区别?
  • Flutter 主要你做了哪儿些内容?
  • 大概说下你是怎么做的 Apk 瘦身?
  • 具体说下如何实现大图加载。
  • 简单说下学历情况,离职原因大概说下。

多元主义 - 数码产品社区

初创公司,莫名的感受到不愉快,后续的面试也没用心了。mmp,请的假,白花花的现大洋出去了。

这块主要分为技术 + HR 聊,技术主要是根据他的点回去问一些东西,时不时的打断这点有点烦人,打断的频率高了之后明显个人有点不耐烦了。而 HR 会说一些公司以及项目情况,顺便也会问一些杂七杂八的东西。

工资构成主要为:基本工资 + 加班费。大小周,大周会有加班费(这点还是蛮不错的,比起那些情怀、大饼公司而言,这点确实实实在在)。

  • 自我介绍以及项目描述。
  • Flutter 你是如何减少嵌套。
  • 你是如何做的 Apk 瘦身。
  • svg、jpg 和 png 有什么区别?
  • HashMap 和 HashTable 区别。

    两者主要区别在于:

    • Hashtable 内部实现添加了 synchronized 来确保线程同步,所以它是线程安全的,而 HashMap 则是线程非安全的。

    其它区别如下:

    • HashMap key 可以为 null,Hashtable key 不允许为 null;
    • HashMap 实现了 Map 接口,而 Hashtable 则实现了 Map 接口以及 Dictionary 抽象类;
    • HashMap 初始容量为 16,Hashtable 初始容量为 11,两者默认填充因子都是 0.75;
    • HashMap 2 倍扩容,而 Hashtable 则是 2 倍扩容 + 1;
    • HashMap 获取 hash,先对 key 的 hashcode 进行二次 hash,已获得更好的散列值,然后对 table 数组长度取模。而 Hashtable 则直接使用 key 的 hashcode 对数组长度进行取模以获取 hash。
  • HashMap 是线程安全的吗?

    HashMap 是非线程安全的。

  • 数组的查询和插入/删除哪儿种更高效。

    查询更为高效,其本质通过寻址定位法去进行数据查找,效率较高。而针对插入/删除,则需要移动后续的数组下标,效率较低。

  • 链表和数组有什么区别?
  • 查询的话,数组和链表哪儿个更快?
  • 设计模式你了解的以及用过的哪儿个比较多?
  • 单例模式的饿汉和懒汉有什么区别?在线程安全和不安全下的表现又是如何?
  • 工厂模式适用哪儿些场景业务?
  • 抽象工厂模式有了解过吗?
  • MVC、MVP 以及 MVVM 简述。
  • Http 和 Https 有什么区别。
  • 你了解对称加密和非对称加密么?

    对称加密和非对称加密在加解密过程、速度、传输的安全性都有不同:

    • 对称加密加解密的过程都是使用同一个密钥,且加解密的速度较快,适合数据量大时候使用,但是加密过程中无法确保密钥被安全传递,一旦泄漏,整个通信就会被破解;
    • 非对称加密采用公私钥的方式,公钥加密私钥进行解密,加解密时间较长,适合数据量小的时候使用。而关于安全性而言,私钥是基于不同的算法生成不同的随机数,也就是说私钥通过一定的加密算法可以推导出公钥,但是私钥到公钥的推导过程是单向的,也就是说公钥无法反推导私钥,所以安全性较高。
    • 对称加密算法:DES、AES 等,非对称加密:RSA 等。
    • 非对称加密和对称加密的区别
  • 公私钥加密过程是怎样?
  • 二叉树的遍历方式。
  • 如何实现数组反转?
  • 有了解过自动化打包工具吗?

2021 - 09 - 30

晚上就要回家啦~ 开森~

打算白天干完农活,晚上抽空看看题~

希望能坚持下来哇~

六间房 - 直播/社交

地铁没挤上,加上路上耽搁,晚了半个小时多,进去 HR 小姐姐直接安排开始面试了,给了一瓶水,整体来说面试官蛮不错的。个人感觉比较注重基础一些东西吧。

有条件的还是要去大公司看看,至少经历的和实战的,的确不是一回事儿。长时间的日积月累,确实底蕴在那。

  • 最近在做什么呀?有 Flutter 开发经验么?混合开发还是原生开发?Flutter 项目采用的是什么架构类型?Flutter 状态管理怎么做的?如何实现通过状态更新达到事件触发?Flutter 中 Weight 有状态和无状态的区别是什么?
  • Kotlin 用了多久了?
  • Apk 瘦身你主要做了哪儿些操作?
  • 用到过插件化或者组件化吗?
  • 启动优化做了哪儿些?有考虑过线程池的方案吗?
  • 假设我现在需要在闲暇时进行初始化,你有哪儿些方案?
  • UI 布局如何优化的?
  • 比如我现在需要监控 UI 卡顿,你有哪儿些方案?那如果我想监控具体的列表卡顿呢?
  • 宽带优化怎么做的?
  • LeakCanary 底层源码怎么实现的有了解过吗?
  • 为什么会出现内存泄漏情况?举个具体例子。
  • Handler 内部的一些关系。
  • Handler 中的 Message 如何保证发送的和拿到的是一致的?
  • 大概了解哪儿些设计模式?具体应用哪儿些场景?
  • 手绘责任链的类图。
  • 实现多线程的方式。
  • OkHttp 使用的线程池是什么类型的?
  • 如何在 Theard 中停止这个线程?
  • AsyncTask 底层如何实现的多线程?
  • MVVM 官方框架图是什么?哪儿几层?他们之前的关系是怎样,如何交互,如何实现的 MVVM,MVVM 的核心是什么。ViewHolder 如何获取到的数据?
  • Activity 和 Fragment 如何共享 ViewHodler 数据?ViewModel 层如何实现数据共享?
  • 组件化如何使用的?如何划分的?
  • module 之间如何进行通信的?
  • 直播怎么做的?有用过 Flutter 开发直播项目么?
  • 你对 GC 了解多少?
  • HashMap 底层实现原理是什么?HashMap 和 HashTable 有什么区别?
  • IntentService 主要做什么操作?
  • Handler、Thread、HandlerThread 三者之间区别?

    • Handler: 主要是在 Android 中负责消息处理,通过它可以实现线程之间的消息通讯;
    • Thread: Java 进程中执行运算的最小单位,也就是执行处理机调度的基本单位;
    • HandlerThread: 一个继承自 Thread 的 HandlerThread,Android 中没有对 Java 中的 Thread 进行任何封装,而是提供了一个继承自 Thread 的 HandlerThread 类。由于它本身继承自 Thread,所以本质就是个 Thread。与普通的 Thread 的区别在于,其内部直接实现了 Looper 的实现,有了 Looper 就可以让我们在线程中进行消息处理,如果不使用 HandlerThread 的话,需要手动调用 Looper.prepare() 和 Looper.loop()。
    • Handler、Thread和HandlerThread的差别
  • Android 进程间通信方式。

  • 消息信使了解多少?
  • 什么是线程安全?什么样不是线程安全?如何实现线程安全?
  • volatile 价值是什么?
  • 禁止重排序还有什么方式可以实现?
  • Flutter 任务管理怎么封装的?
  • 对于加班怎么理解的?期望薪资。

面试结束的时候,门口保安大爷询问情况,还安慰半天,哈哈哈,好贴心。

可爱的大爷~

万度健康 - 医疗健康 避坑!!!

整场面试下来,感觉很轻松。

面试官一直像个大哥一样再问自己想问的,顺便深入解惑。很不错的一场面试体验。

  • 自我介绍。
  • 解释下依赖注入。
  • 一个对象会在什么情况下会被内存会收掉?
  • 弱引用,弱在什么地方了?
  • 如何证明一个对象被引用了?
  • 假设我现在正常引用一个对象,在另一个地方使用弱引用去引用这个对象,当我释放掉了这个强引用对象的时候,那边可能会出现什么问题?
  • 什么情况下会出现野指针?
  • String 是可变的吗?为什么设计成为这样?
  • 常量池有了解吗?
  • 为什么说子线程不能更新 UI?为什么设计成这个样子?
  • 数组和链表有什么区别?

    • 逻辑结构来说,这两种数据结构都属于线性表;
    • 物理内存中来说,数组占用的是一块连续的内存区,而链表则是分散的,所以链表比数组多了一个指向下一个节点的指针(单向链表);
    • 数组通过寻址快速定位,链表则需要依次遍历指针节点,所以数组的查询效率更高一些,其对应的时间复杂度为 O(1) 和 O(n);
    • 在插入、删除时,由于数组是连续空间,会导致后续节点依次后移,而链表则只需要修改对应的指针即可,所以插入、删除的情况下链表的性能更优;
    • 操作系统的内存管理来说,内存管理会将连续空间提前读入缓存,已进一步提高访问效率。而链表由于在内存中是分散的,则不会都读入内存中。
    • 数组与链表的区别
  • 数组本身是什么?还可变吗?

    数组本身是个对象,由 JVM 创建,而这个直接创建的对象父类就是 Object。
    数组本身是不可变的,初始化的时候便会设置容量大小。但是后期可以通过扩容的方式改变大小,比如 copyOf 数组拷贝,或者 ArrayList 动态扩容。

  • 单向链表和双向链表有什么区别?

    单向链表:只有一个指向下一个节点的指针。 适用于节点增加、删除。

      - 优点:增加删除节点简单,遍历不会死循环。
      - 缺点:只能从头到尾遍历。
    

    双向链表:有两个指针,一个指向前一个节点,一个指向后一个节点。 适用于双向查找节点的情况。

      - 优点:可以找到前驱和后驱,可进可退。
      - 缺点:增加删除节点复杂度,需要额外多分配一个指针存储空间。
      
  • Apk 瘦身怎么做的。
  • so 具体是什么东西?
  • 矢量图和位图的区别?
  • Activity A 切换到后台,随后切换到前台,接着启动 Activity B,这时候它们的生命周期是怎样的?
  • Touch 事件的传递流程。
  • 老家哪儿的?结婚了么?平时会玩游戏吗?
  • 假设现在有一个 7L 的桶和 5L 的桶,如何倒出 6L 的水?
  • 两数交换。
  • 三个人三天喝三桶水,九个人九天喝几桶水?

临走的时候,小姐姐还会让站在公司前台拍个照,😂😂😂

2021 - 10 - 11

今天的两场面试整体让人觉得很无语,无语到极点。不知道该说啥了。

这假请的,无奈到极点了。。。

想喷人。。。

尚博信 - 外包

从住的地方骑车过去不到二十分钟吧。

约面试的小姐姐地址没发清楚,找了许久,问了保安大叔几次。

一开始只告诉 7 层,询问后告知是 3 号楼,过会儿再询问,告知 C 座。

找公司面试貌似探宝一样,折腾半天,还是先赶去下一场复试去了。

万度健康 - 医疗健康 避坑!!!

也不知道复试女面试官是 HR 老大还是老板,整个交谈想让人骂人。

吐槽几个点吧:

  • 对求职者严重不尊重。摆明了一副我司到现在为止 29 年了,只招二本以上的高尖端人才,像我这没学历的都属于特例面试。内心 OS:(我 tmd!早干嘛去了?!! 简历上面清清楚楚写着明明白白的,不识字?)
  • 公司极度不靠谱。有三天的学习培训期,美名其曰公司免费会对你有三天的培训,在这期间无薪水,不记工时。还需要完成公司安排的“作业”,后续三天通过后,根据三天表现去打分并给出对应薪资???内心 OS:(WTF???什么鬼???BATD 也没这么玩过吧?傲娇的资本在哪儿?免费培训?咋滴,入职还需要我交三天培训费?学习你们不靠谱的企业文化?贵司的试用期是摆设吗?)
  • 似乎有点脑残。上来拿着身份证去复印去了,美名其曰:方便快速入职。结果呢?来个憨批。
  • 。。。

哎,无语到极点。一面的技术总监蛮不错的,复试的那个女的不咋地。姿态太高,高攀不起。

只能说,做个人吧。。。

真要是成立了 29 年了,不温不火、吃不饱饿不死的,哪儿来的傲娇呢?龙头老大吧,也倒是能理解。

各位避坑吧。。。浪费时间,公交折腾一个多小时,结果 mmp!

坐公交回去搞得晕车恶心难受了大半天。。。

XXOOXXOOXXOO!!!

2021 - 10 - 14

在线面试,很 nice~

不用来回折腾,也避免遇到不靠谱得白白浪费时间。

今天线上面试的四家相比前几天跑了四家,的确也没那么熬人了。

中农融信 - 农业贷款/直播

很正常的一次面试,面试官很尊重人,很耐心的听着,并且相互沟通着,整体来说蛮不错的。

  • 自我介绍、简述所负责项目。
  • 谈谈 Handler 消息机制。
  • 内存泄漏如何防御和检测,遇到了怎么治理?
  • 说下你了解的事件分发机制。

    Android 事件分发的本质就是,由系统 framework 层创建 InputManagerService 监听响应,并且将事件逐层下发的一个过程,整个过程属于责任链模式。

    事件分发顺序:Activity ---> ViewGroup ---> View。

    具体实现则由三个方法进行实现:

    • ViewGroup 通过 dispatchTouchEvent() 开始分发事件并且内部通过 onInterceptTouchEvent() 判断是否拦截该事件。

      • 如果拦截,则当前事件流转到该 ViewGroup 的 onTouchEvent() 中进行具体处理。
      • 如果 ViewGroup 未拦截该事件,则调用 View 的 dispatchTouchEvent() 继续向下分发。
    • 如果 View 消费则会到 View onTouchEvent() 进行处理,反之依次返回 ViewGroup、Activity 的 onTouchEvent()。

    需要注意的是,Activity、View 具有分发、消费,ViewGroup 在此基础上多一个拦截。

  • 说下你对自定义 View 的了解。
  • 假设现在要求实现大圆套着小圆,并且小圆内有刻度,会随着一点点变化,这个有什么思路么?
  • 网络框架用的是什么?简单说下 OkHttp 的使用,以及同步、异步是怎么回事。
  • 有和 js 交互经验么?简单描述下。
  • 如何将字符串转为 int?
  • Apk 瘦身如何操作的?除了简单的图片压缩、代码混淆,还做过哪儿些方面?
  • 关于应用启动优化主要做了哪儿些方面?
  • Kotlin 中 var、val 以及 const 有什么作用区别,对比 Java 呢?
  • == 和 === 区别?

    • == 比较值是否相等,=== 比较引用地址是否相等。
  • 直播都用过哪儿家的 SDK?

抱抱直播 - 直播

在如下地址先写题:

题目如下:

  /**
    * 完成一个数字转中文大写的函数(30分钟)
    * 例子:
    * 123 --> 一百二十三
    * 46035 --> 四万六千零三十五
    * 尽可能覆盖函数输入范围
    * 可选任意主流语言编码
    * 可在IDE中完成,可搜索基本函数&数据结构用法
    **/

思路如下:

  • 定义两个数组,分别存储数字对应汉字(0~9)以及单位(个十百千万等);
  • 循环遍历,记的处理第二个单位时需要处理为 0 的情况。

面试官应该是在会议室开着外放,一边问问题,一边写评价吧,个人猜测。听的不是很清楚,面试官比较随和,也比较尊重,有些东西没实战经历过,但是也让尝试说说想法,这个蛮不错的。

  • 自我介绍、为啥现家公司待这么短原因说明以及负责项目描述。
  • 刚刚你写的代码会有什么问题?最大兼容到什么级别?有什么想法思路谈谈。
  • Apk 瘦身方向,成果。
  • UI 优化方向。
  • View 绘制流程描述。

    View 绘制的本质就是从 DecorView 自上而下遍历整个 View 树,进行测量、摆放以及最终绘制操作,这里需要注意,所有的 View 执行完一个步骤后,才会执行下一步。

    1. onMeasure():测量视图大小。从顶层父级 View 到子 View 递归调用 measure(),measure() 调用 onMeasure() 完成测量工作;
    2. onLayout():摆放 View 的位置。从顶层父级 View 到子 View 递归调用 layout(),父级 View 将上一步 measure() 得到的子 View 布局参数,将子 View 放在合适的位置上;
    3. onDraw():绘制视图。ViewRoot 创建一个 Canvas 对象,然后调用 onDraw() 进行最终绘制。
  • 内存泄漏根本原因,如何治理,如何预防?
  • 为什么要做图片库的统一?Fresco 和 Glide 区别?优劣势是什么?如何选择项目合适的图片加载库?
  • 防御式编程主要是做什么的?目标预期是怎样的?现状是怎样的?你做了哪儿些方面的操作?
  • 项目中有遇到过难点吗?怎么解决处理的?
  • 重构的方向是什么样的呢?为什么要重构?重构遇到过哪儿些问题?如何解决成立的?
  • 模块化是如何拆分的?颗粒度如何保证?有什么想法思路呢?

不得不说,线上面试真的狠 nice~

点根烟,慢慢思索,nice~

万声音乐集团 - 音乐

HR 很贴心,考虑到来回比较折腾,主动提出初试线上电话先沟通。

时间安排上也很尊重面试者,赞一波~!!!

面试官是个小哥哥,估计在工位上吧,声音不是很大,整体沟通起来还是比较顺畅。

  • 在职离职、介绍工作经历以及项目。
  • 数组和链表的区别?
  • 如何反转链表?
  • 简述你了解的 HashMap,包含底层数据结构。hash 碰撞是一个什么情况?如何处理?
  • GC 了解多少?
  • Handle 消息机制了解多少?
  • 内存泄漏根本原因是什么?平时项目中是通过什么手段进行预防的?如何治理?
  • 说一下你了解的自定义 View。
  • 如果我想重新绘制应该调用什么方法?

    重新绘制方式有三种,分别是:

    • invalidate:UI 线程中调用,重绘 UI;
    • postInvalidate:非 UI 线程中调用,通过 Handler 通知 UI 线程重绘;
    • requestLayout:先调用 onLayout() 重新排版,后调用 onDraw() 进行重绘。
  • RecyclerView 缓存了解有多少?每个层级缓存对应做什么操作?当 RecyclerView 去缓存中拿 ViewHolder 时,需要经历哪儿些流程?是直接拿出来使用的吗?还是?
  • 讲一下你了解的属性动画。
  • Kotlin 用的熟悉吗?使用多久了?
  • 讲一下了解的协程,以及它内部到底是怎么工作的?它是如何实现线程切换的?
  • 讲一下你使用过的 JitPack 组件,有了解过内部实现原理吗?

拓茂公寓 - 社交

公司开始是有一个兼职 Android 在开发,想着换个全职 Android。面试老哥很嗨,思路跳转蛮快的,有些问题给我整懵了。微信语音面试,有些听得不是很清楚,面试老哥应该在家里还是在吃饭,环境有点嘈杂。

整体下来还是蛮不错的吧,收获颇多。

  • 自我介绍、学历情况说明、车载项目用什么语言开发的、团队规模、主要负责哪儿些工作?App 下载量和日活为多少?各个公司离职原因。
  • 你负责的 App 有做过哪儿些安全措施?
  • 如何脱掉 360 加固的壳?方式有哪儿些?
  • 静默更新方案有哪儿些?热修复方案了解过哪儿些?阿里和腾讯的热修复原理分别是什么?区别是啥?到达率如何?如何确保到达率?用户是否有感知?
  • 你们负责的 App 崩溃率和卡顿率大概多少?有做过哪儿些方面的处理吗?
  • 说下你对防御式编程的理解。防御式编程和 try 块有什么区别?直接 try 可以吗?防御式编程会增加代码量吧,从这点谈下你的理解。
  • 简单描述下 Android 架构图。 平台架构
  • Linux 中的进程、线程以及协程区别以及它们的作用。Kotlin 中协程怎么理解的?线程中如何共享数据,为什么能共享数据?
  • 计算机网络结构有几层,它们的职责和定位分别是什么?报文是干什么的?
  • 了解域名的解析过程么?
  • 描述下客户端和服务端网络交互的详细过程。为什么要有三次握手。从 Android 手机的层面上,发生了一个什么样的过程,具体使用到了哪儿些设备,系统做了哪儿些操作?从我们的 App 的角度而言,它又是一个怎样的过程?
  • 假设我现在正在请求接口,但是用户锁屏了,这时候会出现什么问题?如何保证重要业务完整性?例如支付时断网、没电了,怎么保证?
  • 假设现在有个需求是,用户在使用 app 的时候需要下载一个数据包,这个数据包关系后续 app 是否正常使用,假设用户下载一半杀掉进程了,怎么办?针对这个情况你又如何设计你的 App?App 都启动不了怎么操作? (PS:这个问题问的我,ummm,App 都死求了,还能有啥法子。好比系统都崩溃了,你还咋玩?万能重启呗)(-_-!!)
  • 常用的数据结构,哪儿些是线程安全,哪儿些是不安全?什么叫线程安全?什么叫线程不安全?
  • RxJava 中的 flatMap 作用是什么。有哪儿些函数具有只执行一次的功能?如何通过 RxJava 实现一个观察者模式?什么是观察者模式?不用 RxJava 如何实现观察者模式?
  • 线程之间有什么通信方式。

可惜,被「中广创思」坑了之后,找工作更为慎重。也没有心动的感觉,Sorry~

2021 - 10 -16

好无奈啊,大周末的想去睡个懒觉,结果还是要大早上去复试。

其实电话沟通就得了。

中农融信 - 农业信款

小姐姐说,不用再次换地铁线,走过去 15 分钟,结果好嘛,大早上,冻成二傻子了,回去的时候果断找最近地铁了。

公司外层环境不错,有种适合养老的感受。小院子,整体风格还是蛮不错的。

缺德地图,各种导航,坑的无奈了。

  • 学历、工作经历、项目、团队规模、离职原因说明。
  • 活体检测怎么做的?人脸识别、人像比对如何实现?对应的接口会返回什么结果?你们这边根据结果会怎么处理?
  • 当时项目怎么选型的,为什么最后确定的是 Flutter?有什么优势?独立开发?Flutter 成熟吗?针对性能各个方面怎么样。
  • 项目开发中有没有遇到过印象深刻问题?
  • 讲一下车载端 App 整个的流程模式。
  • 为什么要迁移 Kotlin?Java 不好么?(-_-!!)
  • 有看过哪儿些框架的源码?
  • 对于技术方面的话,有什么长远的打算吗?
  • 针对下一份工作,你这边有什么想法么?
  • 有什么想问的么?(问了好几次,统一回复:无。之前面试小哥哥说的蛮清楚的了)

面完就嗷嗷的往回家跑,回家吃串串去~

2021 - 10 - 18

万事开头难,上来遇到坑公司。

进去之前还和朋友还说呢,望京 SOHO 等电梯太墨迹了,动不动就是好几十层。

突然感觉什么叫做人性化的公司?我认为至少有以下几个特点:

  • 初试线上面试,节省双方时间,关键是对于面试者的少折腾;
  • 线下面试,公司打印简历,别上来动不动要简历,PDF 都给你发了。

数字家园 - 通讯 避坑!!!

填表登记,和 HR 扯犊子。稍等了几分钟,面试官过来了,感觉极度不友好。

全程有一半的时候在抠鼻屎,抠就抠吧,抠干净点也行,结果抠出来在鼻子上,盯的一度反胃,场面似乎有点尴尬。有气无力的,没啥意思,真还不如电话面试了,什么鬼。问问题问一半,我还得猜,各位避坑。

旁边那边几个人吹牛逼,大谈理想等。

挺好。嗯。

  • 自我介绍、介绍公司项目、团队规模、所负责的项目,学历情况介绍,有可展示的 app 吗?
  • 介绍下 Android 四大组件。
  • 数据库用过什么?
  • 数据缓存怎么做的?
  • Service 怎么用的?
  • 组件化 ARouter 怎么用的?
  • Activity 启动模式聊下。
  • 图片加载用的是什么?Glide 如何加载大图?
  • 说下你理解的线程以及线程池。
  • 谈下你理解的 ArrayList。
  • Map 用过哪儿些?HashMap 怎么用的?主要用于哪儿些场景?
  • 项目架构是什么?每个项目是否独立开发,团队开发模式是什么?
  • 有开源过什么么?或者做过什么分享。

各位避坑~

当贝北京 - 硬件/系统

到的早了,在外面冻了半天,让🐔老大喷了半天,啊啊啊。等我起飞的,非过去在眼跟前得瑟得瑟去~

最后实在是受不了了,两点上楼,进去发现大家都在睡觉,给 HR 小姐姐发的信息,还以为会去给打印一份简历来着,结果证明是我想多了。还是老样子,填表登记,嗖嗖嗖。

面试小哥哥很 nice,公司做 TV 相关,整体聊下来蛮不错,至少我这边有几个问题解惑了,哈哈哈~

  • 自我介绍、公司项目介绍。
  • View 事件分发具体流程?调用哪儿些方法?如果 View 不消费,那么又是如何传递的?整个 Activity 又是如何传递的?
  • View 的绘制流程。
  • 说下自定义 View,以及自定义 View 中的 layout 是做什么的?
  • OkHttp 有几种拦截器,分别是什么?流程顺序是什么?哪儿个优先级更高一些?
  • App 优化都做过哪儿些?Apk 瘦身、启动优化、内存优化都做过哪儿些?
  • 内存泄漏原因?哪儿些情况会导致内存泄漏?如何处理?
  • 说一下 Kotlin 的高阶函数,例如 let、apply 等。
  • JitPack 用过哪儿些?源码看到过哪儿些?

数字大脑 - 大数据平台

数据平台负责人面试的,一个多小时,大概就是了解项目、学历等基本情况。

有一道不错的面试题,给我整懵逼了,记录下来:

  • 编写一个程序,开启三个线程,这三个线程按照顺序依次打印ABC,每个字母打印10次后结束,最后结果如 ABCABCABC… 依次递推

2021 - 10 - 19

今天一整天的面试都挺无奈的,很无语。

哎。

次奥~

金财教育 - 财税相关 避坑!!!

离得倒是不远,地铁 40 分钟左右。公司环境有些嘈杂,不过还好。HR 小姐姐蛮不错的,很热情。面试官很差劲,之前有朋友去面试过,还特意嘱咐这就是个坑。我寻思着正好去涨涨经验,看看有哪儿些是我不了解的。

面试官太差劲了。很敷衍。草草了事。懒得回答了

  • 自我介绍
  • 手写冒泡排序
  • HashMap 的底层数据结构
  • 扩容因子为什么是 0.75?
  • Activity A 跳转 Activity B,然后点击返回回到 A,生命周期执行的顺序流程。
  • 接口请求和响应都需要加解密,这个一般都会怎么做?
  • OkHttp 拦截器了解多少,常用的哪儿些?优先级是怎样?
  • 性能优化做过哪儿些?
  • 如何加载本地图片?不使用三方框架如何操作?
  • Bitmap 压缩方法的具体参数。
  • 怎么进行的屏幕适配?OS:这里我回问了一句,你们用的是什么呢?人来句我们用的今日头条的适配方案,和你用的头条适配方案不一样。直接给我干懵逼了,没听说官方出了这么一个开源库啊,不都是基于官方给的思路进行的对应开源么?AutoSize?=_=!!
  • 项目中用到哪儿些设计模式?
  • 点播、直播是独立开发实现的推流、拉流操作吗?为什么不自己写? 内心 OS:ummm,你说为什么。。。

这个面试官太无语了,整个过程都是敷衍、糊弄的感觉,没啥意思,耗子尾汁吧~

快音 - 直播

公司离住的地方不远,自行车半个小时左右,园区蛮不错的,公司环境不赖。进门需要扫码登记,随后会在线填写相应的信息。HR 小姐姐蛮香的,声音蛮低的。和面试官整体沟通还算顺利吧。

  • 自我介绍、项目介绍
  • Kotlin 方式如何实现继承。子类和父类区别?Kotlin 默认类不允许继承那么如何操作能使其可被继承?Kotlin 类如何操作使其不能被继承。
  • 网络优化如何做的?有在 OkHttp 层面进行优化处理吗?
  • 怎么做的 Java 项目迁移 Kotlin 的?
  • Kotlin 的高阶函数和 Java 的一些方法有什么区别?
  • 你用过哪儿些 Kotlin 的高阶函数?
  • 自定义过高阶函数吗?
  • 如何实现 Kotlin 的单例模式。
  • Glide 如何实现的生命周期感知?加了生命周期感知的话,对于我们使用者有什么好处?
  • Glide Bitmap 缓存池了解有多少?
  • 线程池有用过吗?假如现在有个场景是频繁的网络请求操作,那么如何使用线程池操作这个情况?
  • 在 Activity 中的 onCreate() 如何获取 View 的宽高?
  • Handler 如何将 Message 插入到消息队列中。
  • 消息队列底层是一个什么样的数据结构?
  • Message 入栈出栈顺序是什么样的?

射雕 - 游戏

HR 小姐姐蛮皮的,公司看着不大,正巧和另一个面试 Android 的同样走错了,正好遇到个热心的大叔,带着我们过去了。

面试官还不错,整体就是聊聊项目之类的。

  • 自我介绍,学历说明
  • 感觉 Kotlin 如何?
  • 热更新用过哪儿些?有什么区别?
  • 直播间如何实现的?消息如何实现的?用的哪儿家的 SDK?有什么坑?
  • 消息 SDK 用的哪儿些?
  • 瘦身如何实现的?为什么要做瘦身?
  • 对 Flutter 怎么理解的,感觉如何?
  • 车载项目描述、微信小程序描述。

2021 - 10 - 20

北京宏达一甲 - 在线教育 避坑!!!

本以为微信语音面试,结果上来视频,哎妈呀,早知道也整点大宝蜜一下了。整体的面试还不错吧,比较考察基础性的东西。技术老大人也很 nice,很和善,效率蛮高的。

  • 自我介绍
  • 说一下 JVM 内存结构。

    JVM 内存结构主要有三大块:

    • 堆内存:JVM 中最大的一块,由年轻代和老年代组成,而年轻代内存又被分为三部分:

      • Eden 空间
      • From Survivor 空间
      • To Survivor 空间
        默认情况下年轻代按照 8:1:1 的比例来分配。
    • 方法区:主要存储信息、常量、静态变量等数据,是线程共享区域。
    • 栈:又分为 Java 虚拟机栈和本地方法栈,主要用于方法的执行。
    • jvm系列(二):JVM内存结构
  • 说一下你了解的 GC。
  • 有哪儿些情况下属于 GC 可执行的 Root 树?
  • GC 中使用到的有哪儿些算法?
  • GC 中有哪儿些情况下会直接进入到老生代区?
  • Java 中创建线程的方式有几种。
  • Java 中提供了几种线程池。
  • Java 中的同步锁使用方式有几种?它们之间的区别是什么?
  • 如果现在我讲这个锁加到方法上,那么它现在属于锁对象还是?
  • Java 中的 volatile 有用过吗?它的作用是什么?
  • Kotlin 的拓展方法用过吗?用过哪儿些?你觉得它有什么优势?
  • 有自定义过拓展函数吗?
  • 有了解过,拓展函数底层的使用原理吗?
  • 针对数据持久化,你用过哪儿些数据库?
  • greenDao 如何实现数据库升级?
  • 针对内存泄漏这块,说下自己的理解。
  • 项目中如何检测内存泄漏。
  • LeakCanary 如何实现的内存泄漏检测?
  • 有遇到过 ANR 吗?
  • 简单说下对于 Handler 的理解。
  • Message 如何提升优先级?
  • View 的绘制流程。
  • MeasureSpecs 测量模式有几种,分别是什么?作用是什么?
  • Apk 瘦身如何做的?
  • 项目架构是怎样的?网络请求用的哪儿些?
  • Android 中的组件化和模块化有了解吗?
  • Activity 的生命周期简单说下。
  • Activity A 跳转到 Activity B 生命周期是怎样的?

最后和总监聊了下,整体感觉还不错吧,可惜只是 12 薪。

2021 - 10 - 21

今天开门红,至少自我感觉还不错,难免有一些磕磕绊绊。

但是今儿复试让我气炸了!!!

中关村科金 - 电子商务

门口保安大叔很暴躁,本来打算跟着人流混进去的。结果尴尬了。人脸识别的。给我好一顿说,直接给我晾一边去了。得亏遇到个公司同事,帮忙解围,还顺带带我进公司去了。感谢不知名的老哥~

面试的是一个老哥,一个小姐姐,小姐姐蛮爱笑的,整体氛围很 nice。

  • 自我介绍,音视频直播项目介绍,使用了哪儿些 SDK?
  • 车载项目如何设计的?版本迭代的方式?
  • MVP 和 MVVM 的优劣势。
  • JetPack 用过哪儿些?
  • LiveDate 如何使用?
  • setValue() 和 postValue() 之间的区别?

    setValue() 只能在主线程中调用,同步更新数据。而 postValue() 可以在任何线程中调用,postValue() 内部实现了同步锁,并且最终会切换主线程,也就是最终通过 setValue() 方式更新。

    • 如果同时调用 postValue() 和 setValue(),则 setValue() 会覆盖 postValue();
    • 如果多次调用 postValue(),则只有最后一个值能够被分发。
  • postValue 丢值吗?如何解决?
  • Handler 简述。
  • 内存泄漏如何处理?
  • Handler 通过 Delayed 方式发送一个 3ms 和 5ms 的消息,内部是如何进行排列的?
  • Looper 为什么不会造成主线程卡死?
  • 主线程和自线程之间如何通信?
  • ArrayList 和 LinkedList 的区别。
  • 数组如何进行扩容,扩容系数是多少?
  • HashMap 底层数据结构。
  • Glide 如何控制图片加载的生命周期?
  • 假设有一张 800x800 的图片,大小为 1M,那么它在内存中占多大空间?
  • RecyclerView 缓存机制简述。
  • 你了解哪儿级缓存会重新绑定 ViewHolder 吗?
  • Https 中的 SSL 作用?
  • MediaPlayer 生命周期是怎么样的?
  • 点击 Icon 启动 app 的过程是怎样的?
  • Kotlin 的高阶函数用过哪儿些?
  • Kotlin 的拓展函数用过哪儿些?哪儿些是 this,哪儿些是 it?
  • Kotlin 的懒加载 by lazy 和 lateinit 有什么区别?
  • 开发过程中遇到最难的问题是什么?
  • Apk 瘦身怎么做的?
  • View 的事件分发简单描述下。
  • 具体的分发过程是怎样的,调用方法的流程顺序是怎样的,从 ViewGroup、View 分别说下。
  • 先走 onTouchEvent 还是先走 onClick?
  • 网络请求用的是哪儿些?
  • 针对 OkHttp 你了解的有哪儿些?

老哥驾着机关枪,给我一顿突突。小姐姐还好,没事儿扔个雷。

整体还是蛮不错的。

北京宏达一甲 - 在线教育 避坑!!!

复试据说是要和人事部老大去谈。结果一到地方,傻眼了,公司环境一般吧。登记表还需要写个小作文,顿时好感消失一大半,的亏 HR 小姐姐很温柔,很 nice,耐着性子继续写了一些基本资料。

人事部领导是个更年期大妈,进门就叼着脸色,也不懂是为啥。我过来是复试了,又不是看你脸色来了,真的是。得亏鸡老大说过,没必要和这些人斤斤计较,不然我真心想怼你一顿,什么东西真的是!

说什么在我们公司,技术不是第一位的,核心是编辑团队,你们技术就是服务我们核心部门的。

对啊,没错啊,技术服务业务啊,咋了?我理解没错吧?咱又不是专业的研究所?

简单的描述自己的想法。被直接打断,说什么你不要试图反驳我?好嘛,逼得我耐着性子去说:复试是一场相互沟通、了解的一个过程,双方都可以描述自己的观点,大家在一起就是聊聊天,然后看看双方是否适合自己,没必要去抬杠,或者反驳。如果我连阐述自己的观点的权利也没,那这个沟通还有什么意义?

中广创思待了四个月,说什么这不怪你么?怪你没有提前看清公司?怪你选择不对,巴拉巴拉。。。

我 tmd !!!

双减下来之前,谁知道会出现这个?马后炮谁不会?F**K!!!

真的是,气炸我了。什么鬼真的是!!!全程想让人骂人🤬🤬🤬

真的是,您老人家更年期晚期,无可救药,自己找个阴凉地方撞墙去。

对人尊重,也是对自己尊重!

格局真的是。。。

不想说太多了,各位避坑吧。

一面的面试官还不错,技术负责人也挺和善的,就是遇到个这么个更年期货。

XXOO!!!

=o=!!!

小米 - 海外电商(驻场形式)

小米的效率真的高的可以哦。一面之后没几分钟通知二面,6 啊。

面试官都很 nice~

一面面试官:

  • 自我介绍
  • 面向对象三大特性是什么?

    封装:将公共属性、内容进行统一封装,对外暴露入口,隐藏内部实现。

    继承:对现有类进行拓展,一般为子类继承父类,重写父类方法进行拓展。

    多态:类的多种表现形式。

  • 多态是什么?具体表现是什么?有什么用?
  • final 可以在哪儿修饰?
  • 判断下如果在方法上添加 final 会出现什么情况?
  • Java 中的 switch 中 case 可以用 String 吗?
  • 如何访问对象的私有方法?
  • Kotlin 中的拓展函数用过哪儿些?let、apply 以及其它的有什么作用和区别?
  • Kotlin 中的双感叹号作用。
  • Android 中有几种动画,分别是什么,有什么区别?
  • RecyclerView 缓存了解有多少?
  • 假设我现在指定更新某一条数据,你知道内部实现的逻辑是怎样的么?
  • 更新 RecyclerView 数据,会出现两种情况,一种为 item 在屏幕可见,一种为 item 在屏幕不可见,你知道这两种方式分别是怎么更新的呢?
  • SharedPreferences 更新方式有几种?有什么区别?
  • 内存泄漏有哪儿些因素?一般你会怎么处理?
  • Android 中跨进程通信的方式有哪儿些?
  • 说下你了解的 Handler?
  • Handler 中是如何保证消息的顺序的?
  • Looper 是在主线程中初始化的还是子线程初始化的?
  • 假设现在消息队列中没有消息,Looper 是一个什么状态?
  • 为什么说 Looper 是个死循环,但是不会卡死 UI 线程?
  • Looper 没有消息时休眠之后如何启动的?
  • View 的事件传递过程是怎样的?
  • Synchronized 可以修饰哪儿些地方?分别有什么作用?
  • 有看过哪儿些三方源码库?
  • 说一下 Glide 底层实现原理。
  • Glide 有几级缓存?
  • MVVM 你在项目中如何使用的?
  • 如何获取到 ViewModel 实例化?
  • 组件之间如何进行参数传递?
  • 如何做的逆向?有具体修改过哪儿些东西?深入修改过 dex 吗?
  • 算法了解过哪儿些?
  • 快速排序的方式有哪儿些?
  • 目前状态,在职、离职?有 offer 吗?离职原因。

二面面试官:

  • 自我介绍
  • 简单说下你项目中用到过哪儿些技术吗?
  • Apk 瘦身思路。
  • armeabi 你用的是高版本还是低版本的,有什么区别?
  • 网络如何进行优化呢?
  • 你知道网络请求的详情过程吗?就好比客户端发起一个请求,中间经历了哪儿些流程,最终得到数据?
  • 假设现在某个接口需要 1s 获取到数据,有没有方案可以更快获取到,比如 800 ms?
  • 启动优化做了哪儿些操作?
  • UI 优化是怎么做的?
  • 内存泄漏一般会怎么处理?
  • 你觉得产生内存泄漏的根本原因是什么?
  • 你对于垃圾回收机制理解有哪儿些?
  • GC 中如何判定新生代和老生代的?
  • 第三方的框架你用到过哪儿些?有哪儿些深入了解过源码?具体说说。
  • Flutter 用过多久?简单谈下你的理解。
  • Flutter 如何实现和原生交互?
  • Flutter 提供了哪儿几种通道?
  • 组件化你是怎么做的?
  • 组件化的目的是什么?
  • 组件化的话,既可以作为宿主,也可以单独运行,你知道底层原理如何实现吗?
  • 你还用到过哪儿些比较好的技术点吗?
  • 你怎么认为的 Compose?
  • 你用过哪儿些比较好的解决方案,或者有哪儿些出色的方面。
  • MMKV 和 SharedPreferences 有什么区别?
  • 学历情况说明,离职原因,公司介绍。对于你的岗位以及薪资待遇有什么要求吗?手头有 offer 吗?

贼老贴心。

然后鸡老大说,你面试的是基础岗位吧。

=_=!! 过分

还是过不去外派外包的这个坎儿。。。

灵光在线 - 相机类

  • 自我介绍、最近看了哪儿些书籍。
  • 你了解的音频格式有哪儿些?
  • 如何实现的语音转文本?
  • 你们是如何实现的音视频播放?
  • 图片加载用的哪儿些?
  • Glide 如何实现的压缩图片?
  • 如何计算一张图片在内存中所占大小?
  • Apk 瘦身做了哪儿些方面操作?
  • 如何做的网络优化?
  • 简单说下你了解的 Https 协议。
  • Https 传输过程中用的哪儿些加密方法。
  • UI 你是怎么优化。
  • 监控过你们 App 所占用的内存吗?
  • 内存如何优化的?
  • 内存泄漏和内存溢出的区别?如何处理?
  • 内存溢出是堆中出现的还是栈中出现的?
  • 如何逆向的?尝试过 360 脱壳吗?
  • 你对于预防逆向有什么思路?
  • 在职?离职原因?你觉得你的优势是什么?

初试之后,给了个题目:

  • 求 101 到 200 之间的素数。

2021 - 10 - 22

大搜车 - 汽车方向

园区离地铁口挺近的,进门还是老样子,填表登记,乌拉乌拉。

一面面试官据说是 Android 老大,人挺和善的。聊的还是不错的,基本掌握的都说出来了。

一面 Android 老大:

  • 自我介绍、离职原因、团队规模、项目介绍。
  • 车载适配屏幕如何适配?车载项目有什么注意点?和车机如何交互?
  • 音频焦点如何处理的?
  • Activity 启动模式,主要使用场景。
  • WebView 单独开启进程有什么优势?
  • 项目中如何监控 Crash?
  • 如果让你实现,你会怎么实现?
  • 你知道 Android 中如何收集到本地 Crash?
  • Apk 瘦身怎么做的?
  • Android 中序列化方式有几种,区别是什么?

    Android 中实现序列化的方式如下:

    • Serializable: Java 本身支持的接口;
    • Parcelable: Android 特有的接口,可用于传递 Intent 以及进程间通信(IPC)。

    两者之间区别:

    • Serializable 只需要实现 Serializable 即可,相当于给对象打了一个标记,系统会自动对其序列话。而 Parcelable 不仅需要实现 Parcelable,还需要添加静态变量;
    • Serializable 使用 I/O 读写存储在硬盘上,而 Parcelable 是直接在内存中读写;
    • Serializable 会使用反射,序列化和反序列化过程需要大量 I/O 操作,而 Parcelable 自己实现封送和解封(marshalled & unmarshalled)操作不需要用反射,数据也存放在 Native 内存中,效率要快很多。
    • ❤️Android 序列化(Serializable和Parcelable) ❤️
  • SharedPreferences 提交方式?有什么区别?平时会使用哪儿种方式?
  • 数据库用过哪儿些?如何实现数据库升级?
  • 组件化怎么用的?
  • ARouter 底层实现原理是什么?
  • 有尝试去看过一些第三方库源码吗?一般什么情况下会去查看?
  • 介绍下你的组件化思路,项目架构。
  • 项目网络框架使用的是什么?
  • 编码规范,你一般会注意哪儿些点?
  • 举几个 git 常用的命令和实际业务场景。
  • 项目中有设置业务日志么?
  • 车载中的问题如何排查?

面试效率还是挺快的,随后就安排技术部老大了,但是老大那边还在复试,和 HR 小姐姐简单的沟通了几句,随后越好下午一点半二面。

出去逛呀逛~

二面是个技术部老大,看着有点严肃。上来针对学历有点尴尬,老大开始想着怕聊半天学历不行,打算去问问 HR,再做打算,后续还是撸起袖子先了解了解。

二面研发部老大:

  • 在职?离职原因?团队规模?学历情况?为什么不上大学?如何走向技术路线?
  • 对于自己的一个未来规划是什么?短期是什么?长期是什么?
  • 针对请求优化方面,你这边有什么心得?如何减轻服务器的一个压力?
  • 你是怎么看待有些情况需要客户端去处理某些数据,而不是服务器直接处理好返回给你?
  • 你有哪儿几个项目做的不错,可以简单聊聊的?具体说说技术实现。
  • 项目中是否具有统计方案?数据大概多少?怎么统计的?锚点?
  • 应用安全方面有什么见解?
  • 针对 Apk 图片,你对于设置本地图片和网络图片的考量标准是什么?
  • 你希望加入一个什么样的团队?
  • 之前加班多吗?
  • 团队配合能力?

感觉一方面学历这块不好说,另一方面觉得我的团队配合经验少。其实这个团队配合而言,感觉就是两个关键字:沟通、妥协。目标:完成任务。

后续谈薪资比较尴尬。问了下薪资是否可谈,如果降薪或者平薪还是否愿意?介绍了下公司平台业务,以及后续公司对于技术的安排方向。

玖日科技 - 广告 SDK

面试官是个前端,笑眯眯的。

  • 自我介绍、项目经历介绍、离职原因、团队规模。
  • 防御式编程如何实现的?
  • Flutter 用了多久?为什么选用 Flutter?开发的 App 用户量有多少?使用 Flutter 有什么坑点?
  • 广告接入的渠道是?
  • 性能优化做过哪儿些?
  • Apk 瘦身方向?
  • UI 优化做过哪儿些?
  • 内存优化怎么做的?
  • 逆向怎么做的?
  • 公司项目会有一些监控方案?

2021 - 10 - 24

玖日科技 - 广告 SDK

晚上将近八点,来电面试,刚开始有点蒙圈。找耳机找半天。

感觉面试小姐姐有点生涩,不过辛苦小姐姐了。

大概内容就是一些 View 绘制、事件分发、设计模式等,举个场景,给方案。

可能是平时太过于依赖后台,很多东西没有去思考实现细节,只知道客户端将搜索关键字发往服务器端,获取到结果展示就行。以后工作还是要多去考虑考虑。

后续约三面公司线下,婉拒了。

2021 - 10 - 27

其实今天早上去的时候,就有点茫茫然的感觉,躺了几天,懒得动弹,相关内容也没整理,正好去看看。

普天和平 - 供应链

之前电话沟通过,简单聊了下项目,离职原因、基本技能之类的。后续线下进行的二面。

大概针对当前项目情况,聊了一些,包括重构相关、uni-app 等。

薪资偏低,国企旗下的子公司,五险一金全额缴纳。

灵光在线 - 相机类

之前线上沟通过一次,后续约的今天二面。

大概就是聊了下项目,掌握技能,优缺点之类的。

主要是相机相关内容,后期涉及到 openGL 相关操作。

公司是个小复式,人并不是很多。

相机这块抓住受众群体了,Pro 版本,这点不赖。

2021 - 10 -28

蓝鲸体育 - 文化/体育

原来这是爱奇艺体育啊,进去整个人就懵逼了,卧槽,卧槽,卧槽,谁给我的勇气?我为啥没查到?Why?Tell me why?

不得不说 Android 技术老大真 nice,6 的一批,这才是大厂面试官应有的素质啊。

全程吊打的同时耐心引导,nice 的很。

  • 学历情况介绍、自我介绍
  • 有哪儿个项目做的比较好?
  • Flutter 有和原生交互吗?通道插件写过吗?
  • MVP 和 MVVM 区别。
  • ARouter 底层实现原理说一下。
  • 微信资源压缩实现原理以及作用?
  • 埋点埋过吗?如何实现全局埋点?有什么思路?
  • Glide 源码讲一下你理解的。
  • 使用 Glide 有遇到过什么问题吗?
  • Glide 加载图片绿色蒙层怎么处理的?
  • Glide 加载图片,地址没变,图片变了,如何保证更新最新的图片?
  • 屏幕适配的方案使用过哪儿些?有了解过底层实现原理吗?
  • 网络层如何优化的?
  • gzip 用过吗?
  • 网络协议熟悉吗?
  • 如何设计一套 im,需要注意哪儿几点?
  • LeakCanary 底层实现了解有多少?
  • 算法了解有多少?
  • 实现一个环形链表。
  • 线程池了解有多少?
  • 数组安全了解有多瘦?
  • 多个接口如何组合一个 List?
  • RecyclerView 首页优化思路和方案。

一场面试,更是一场学习解惑,明白了自己之前的开发模式多么 lowB。(PS:每当想起这个词,就能想到鸡老大气急败坏的怼我,能别问这么 lowB 的问题嘛?那么多有意义有价值的问题你不问,为啥给人一种你之前到底是在什么贫民窟干活的感觉。。。啊,本身小公司,小作坊,ummm tui~ 老大看不见)

雪山之巅 - 医疗健康 避坑!!!

这个完全想骂人!!!

面试也不少了,还以为经历够多了,结果,我x!!!真的上来就能干急眼。

HR 和爷爷一样,发个位置发个鬼鬼,问一下吧,直接转发图片让打电话,随后上三楼随便找个地方开始面试,有点无奈。

面试官是个技术负责人,我x,上来抠鼻屎,抠完就抹简历上了,顿时好感全无。

全程和杠精一样,杠到我懵逼,杠到我妥协,对对对,你说的对。

  • 问:Handler 为什么会泄漏?

    • 答:由于 Activity 销毁时,Handler 可能有延迟消息未处理完成,导致 Handler 持有外部类引用,也就是 Activity 引用,进而导致 GC 无法回收 Activity,从而引起内存泄漏。

结果直接被怼,Activity 都 finish 了,还怎么会发生泄漏,泄漏就泄漏呗。再换句话说,C++ 需要手动处理回收,Java 中有 GC,根本不需要你去处理内存回收的事儿。

ummm,对,你说的对。

  • 问:为什么选择 Android?

    • 答:热爱以及看好。
  • 问:有多爱?

    • 答:死了都爱。

次奥!!!

xxoo!!!!!!

爱唱 - 音乐/直播

大小周,早十晚九。

  • 离职在职、工作经历描述、主要负责哪儿些内容,近期主要负责哪儿些。
  • 你平时 App 开发,主要精力在哪儿块?业务?还是?(这个问题问的就很玄学,肯定主要精力在业务开发上)
  • 怎么做的 Apk 瘦身?(说一半被打断了,说是感觉在背书,XD,我辛辛苦苦折腾小半个月呢。下次我学学声优呗。)
  • 如何实现歌词播放渐变,说一下难点以及注意的地方。
  • 如何避免项目中出现的空指针?
  • 假设应用位于后台,但是现在需要操作资源文件,这样会导致崩溃,如何预防这种情况?
  • 如何实现换肤,具体实现描述下?
  • 用户修改头像,如何保证其他人访问第一时间获取最新的头像?
  • App 中在某个页面修改了数据,如何保证其它页面同步更新最新数据?
  • 兴趣爱好有什么?

普天和平 - 供应链

正巧上家线上面试,电话过来了,得亏是电脑端接听,后续回拨。

和总监聊了半个小时左右,大概就是离职原因、项目经历、安全防护等常规内容。

薪资偏低,社保全额缴纳。

总监还是蛮不错的,性格挺好。

思越美扬 - 婚恋

  • 自我介绍、离职原因、项目介绍
  • 常用的 Java 集合有哪儿些?
  • HashMap 是线程安全的吗?哪儿些是线程安全的?
  • List 和 Set 有什么区别?
  • 多线程下操作 List 会有什么问题,如何避免?
  • 多线程通信了解过哪儿些?
  • 线程池了解有多少?
  • 线程生命周期你知道有哪儿些?
  • 内存泄漏如何处理?
  • 支付接入过哪儿些?
  • 简单说一下某个平台支付流程。
  • WebScoket 使用过吗?

新浪微博 - 直播

新浪微博的体验真的友好到极致。

从招聘者电话主动沟通学历,以及后期主动提供 HR 审核,到最后通知面试,很细致。

一面面试官很不错,目前只有这么一个岗位,竞争压力还是蛮大的。

聊了一个小时左右,有点哆嗦是真的,毕竟也是大厂面试呢~

  • 自我介绍、工作经历描述、离职原因。
  • 有没有做的比较不错的项目,简单聊聊。
  • 对于接下来的工作、求职以及发展,有什么想法?
  • Kotlin、Flutter 使用多久了?自己对掌握程度进行一个评价说明。
  • Kotlin 在项目中的覆盖率大概是多少?
  • Apk 瘦身怎么做的?
  • 手写线程安全单例模式伪代码,写出关键点就行。
  • 同步方法和同步块的区别以及优劣势。
  • 平时怎么去维护自己的 Blog?更文周期大概多久?
  • 播放器用过哪儿些?主要是在什么业务?
  • LeakCanary 内部工作流程了解多少?
  • LeakCanary 弱引用队列是自己维护的?还是 Android SDK 提供的?
  • 如何实现获取 Android 中的内存泄漏点呢?
  • 为什么做图片库迁移?

第一次从大厂面试官得到面评,而且好评满满,真的激动坏了。同时也被告知这个岗位竞争压力很大,让我平常心。

贴心,感谢老哥~

突然因为面试老哥,特别特别想去微博。

但是也能明白,短板劣势满满的现在,毫无和他人竞争的资本。

日!气,前几年浪。

2021 - 10 - 29

思越美扬 - 婚恋

创业公司,去了和负责人聊了将近两个多小时,其实也包括修改一个 RecyclerView 缓存引起的 bug。

整体来说就是聊项目,聊发展(公司项目/个人未来)。

公司属于创业初期吧,人不是很多。

灵光在线 - 相机类

每次去都给一瓶水,nice。

和 CEO 简单的聊了会儿,比如个人发展、离职原因等等。CEO 挺平和的。

其实从内心而言,是比较反感这种面试的,大量的时间消耗在路上,实际沟通短暂,已经是三面了,有点疲惫了。

大厂也不过如此吧。

算了。

忘记叫啥了

刚点的外卖刚刚打开,电话就来了,一片懵逼下开启了面试。。。

  • 说一下 Java 中抽象、接口区别。

    抽象:只有声明没有具体实现,必须使用 abstract 修饰。

    • 抽象方法必须为 public/protected,如果为 private 则子类无法继承;
    • 抽象类不能用来创建对象;
    • 如果一个类继承于一个抽象类,则子类必须实现父类的抽象方法。如果子类没有实现父类的抽象方法,则必须将子类也定义为 abstract 类。

    接口:对行为的抽象。

    • 接口中可以包含变量和方法。需要注意变量会隐式指定为 public static final,使用 private 会报编辑错误;
    • 接口中的方法不能有具体实现。

    区别:

    • 抽象类可以提供成员方法实现细节,接口只能存在 public abstract 方法;
    • 抽象中成员变量可以是各种类型的,而接口中的成员变量只能是 public static final 类型的;
    • 抽象类中可以有静态代码块和静态方法,而接口中不能含有这些;
    • 一个类只能继承一个抽象类(Java 单根性),但是可以实现多个接口。
    • 深入理解Java的接口和抽象类
  • 引用传递、值传递有什么区别?
  • 引用传递的 value 在某个方法内被修改后,本身会发生改变么?
  • Java 泛型有什么用?

    泛型的主要通过编译期检查类型安全检查来提高程序的类型安全。

  • 泛型通配符 extends 有什么区别?
  • 元注解、普通注解有什么区别?
  • 项目中注解使用过哪儿些?
  • 如何自定义注解?
  • 线程创建方式。
  • 多线程安全如何保证。
  • 同步锁修饰静态方法和普通方法会有什么区别?
  • 两个线程竞争会出现什么情况?
  • 假如没有竞争到的线程会释放 CPU 吗?
  • sleep 方式会释放 CPU 么?
  • sleep 可以中断吗?
  • 描述下线程中生产者、消费者。
  • 安卓线程通信方式。
  • 子线程可以创建 Handler 吗?
  • 一个线程创建多个 Handler 吗?
  • 一线程中会有几个 Looper?
  • ThredLocal 可以存放哪儿些数据?
  • ThredLocal 实现机制。
  • 单例模式实现方式有哪儿些?
  • 饿汉和懒汉的区别?
  • 懒汉模式在多线程情况下会有什么问题?
  • 同步锁在多线程的情况下会有什么问题?
  • 排序算法了解有多少?
  • 说一下算法冒泡时间复杂度。

2021 - 11 - 01

汇商共达 - 电商

老哥有种没睡醒的感觉,面试过程一度很尴尬,很尬。

  • 自我介绍、在北京吗、住哪儿、加班严重吗?工作项目描述。
  • 讲一下 Apk 优化。
  • MVP、MVVM 区别,优缺点是什么。
  • 讲一下 Glide。
  • Glide 是通过什么网络进行加载的?
  • Glide 有几级缓存。
  • 讲一下 RxJava。
  • 你给我讲讲 Flutter 吧。 ummm
  • Flutter 权限管理是什么?
  • Java 面向对象简单讲一下。
  • 重载和重写有什么区别?
  • 子类和父类都存在相同的属性,会出现什么问题?
  • 父类如何调用子类的参数方法?子类如何调用父类的参数方法?
  • 怎么做的拉流直播间。
  • PDF 在线预览如何实现?
  • 做个自我评价。

2021 - 11 - 02

本来想着约三家,上午两家正好一个 1 号楼,一个 3 号楼,早点去,尽可能上午搞完两家,再去立水桥南搞定最后一家,之后就可以回家吃饭去了。

结果,好家伙,第一家直接给我气炸了。本来想着面试多年,无论遇到什么样的脑残,都能做到“荣辱不惊”,没想到,这个脑残直接逼的我从手里拿走简历,直接走人了。

第三家也被突然告知因为公司员工核酸检测问题,目前统一线上,需要线上笔试,随后继续后续面试。

唯一不错的是第二家,二面、三面、四面聊的还可以吧。至少我这么理解的。😂 (后续老大说:你是自我感觉良好

-_-!! 就很过分,晓得不

壳壳互联 - 社交 避坑~!!!

纯脑残,不知道谁给的勇气和自信。区区一个小公司,同样使用三方 SDK,哪儿来的自信,说和厂商深度合作,共同修复问题???说半天我 tmd 以为你自研音视频 SDK 呢!

面试开始是由一个小哥哥聊着,整体还算不错,正常的问答。

  • 自我介绍、公司项目介绍、最近负责什么、Kotlin 用多久。

没说几句话,突然来个更年期的妇女,直接闯进来,抱个电脑霹雳吧啦,给我整懵逼了。面试小哥说什么这是花姐???随后小哥继续面试。

  • 怎么封装的网络层,具体用到哪儿些东西?
  • Glide 有什么了解?
  • 你是如何进行项目架构升级?
  • 说一下 ListView 和 RecyclerView 区别。
  • 你是怎么做的性能优化。

性能优化从 Apk 瘦身说到网络方面,这里网络举了几个例子:

  • 接口最小单一化,避免响应数据包因无用数据导致过大;
  • 图片优化,采用阿里云 OSS,针对不同业务获取不同类型的网络图。例如 List item 中的封面图,请求缩略图。而详情里面则采用获取对应的原尺寸图片。

本来继续打算往下说明,更年期突然打断:

  • 更年期:你能说点重点吗?我们随便招个安卓就是用的阿里云 OSS,而且阿里云 OSS 是新技术吗?这不都是普遍性的常识吗?
  • 答:是基础。但是优化的方案也是通过很多不同的基础组合去实现综合的优化,况且小公司可能不会考虑很全面。再说,我的方案并没有说完整。再退一步而言,我曾经做的 Apk 瘦身,本质也是通过很多的基础进行的优化,从而达到综合效益。(这话我还没说完,直接被打断,可能只说了不同的基础组合。。。
  • 更年期:我知道我知道,你们刚刚聊的只是方法论,你五年只会方法论吗?
  • 答:(满脑子疑问)方法论?
  • 。。。

随后这玩意开始疯狂装逼的路程,全程不让人说话,一说话就是我知道我知道,我没有歧视你。

WTF???我来面试的,我是来和你干架的?方法论?真不知道按照您老人家怎么回答这些问题,不算是方法论。我 tmd 的说 Glide 生命周期感知以及为什么具有生命周期感知、RGB_565、缓存以及个人理解也是 tmd 方法论?

吹牛逼说什么分分钟每天拉新三四千人???

嗯???什么时候移动端拉新三四千人都值得这么吹牛逼了???WTF???

说什么日活没用?几天就掉下去了。用户量也没用,对开发也没用???更年期大妈,您老人家确定???不说亿级别的设备,百万级的都会遇到奇奇怪怪的问题,和研发无关???我 tmd

后续的沟通完全是无效的,一直在逼叨叨什么方法论。想表达下自己的想法,虽然极度不爽,但是还是想坚持完成面试,但是过分的是,只要是表达自己想法,刚说不超过三个字,直接我知道我知道,怎么怎么怎么?后续逼的我直接说,那如果这样的话,我觉得这次面试没必要继续下去了,谢谢。 各位,我再说这话的时候,这个更年期的妇女依然叨逼叨???直接拿过简历,拜拜了您呐。

下楼连抽两根烟,肺都气炸了!我是来面试的,又不是和你干架的。你什么都知道,那你招人干嘛?面试不就是相互沟通的吗?你抛出你感兴趣的问题,我用我平时的经验回答,这个有什么问题吗?如果说源码层面不够深入,我承认。但最起码得让人把话说完吧?我一二三四都列举了,直接掐死???

那还面试沟通个屁!!!

所谓的更年期花姐,你做个人吧你。

已向 BOSS 投诉,各位避坑!!!

汇商共达 - 电商

公司环境蛮不错的,大楼电梯特别难等,客梯需要刷卡,好容易等到上电梯,还寻思有个小伙伴能刷同一层楼,再不济我往下走几层,结果直接干到 14 层,步梯门需要刷卡。。。随后又下到一楼,等待货梯,等了半个多小时,门一开,保洁大叔和满满的垃圾展现眼前。默默的等待大叔把垃圾都丢出来,上了楼。

面试官有点忙,稍微等了会儿。进去填表,小姐姐给双手消毒。过了一会儿研发中心负责人过来了,带着去了会议室,蛮和善的。

二面研发中心负责人:

  • 自我介绍、工作经历以及所负责项目/职责、具体负责的业务。为什么待这么短时间?
  • 车载端和移动端原生开发有什么区别?
  • 你是如何进行技术选型的?
  • 视频直播间这块具体实现方式是怎样?说一下大概的思路。
  • 做的哪儿个项目比较好?印象深刻的,简单聊下。
  • 为什么跨平台方案选择 Flutter?你们的项目支持两端吗?简单说下使用感受如何。
  • 从个人角度说下小程序、Flutter 以及原生移动端使用场景。
  • 谈下对 Kotlin 的理解。

自我感觉还不错吧,氛围挺不赖,老哥性格贼 nice。

二面老哥出去帮我找三面负责人,刚出去没一会儿就跑回来,和我说:马上哈,稍等下~

顿时心里暖暖的~

三面部门负责人:

  • 简单介绍最近负责的内容。
  • 聊一下 App 优化方向。
  • 为什么几个月就离职?
  • 工作经历描述、团队规模多大、加班情况怎样?
  • 安卓端发起一个服务端接口请求,这个过程会包含哪儿些方面。如果让你设计会怎么设计?
  • gzip 压缩了解过哪儿些?
  • 加密方式知道哪儿些?都有什么区别。
  • 安卓团队规模最大的是哪儿家?

三面部门负责人是个女生,性格蛮不错的。

四面人事:貌似是人事总监,我也忘记了。人事给人的感觉很干练。

  • 你觉得这几次面试感觉怎么样?
  • 为什么这么短的时间考虑换工作?
  • 没考虑转内吗?
  • 谈谈未来发展规划。
  • 下一份工作想法。
  • 工作经历以及公司规模简单描述。
  • 薪资、待遇。

整体来说蛮不错的,除了电梯等的太过于漫长。环境蛮不错的,看着大家热热闹闹的。

面试完之后在楼下坐了会儿,抽了会儿烟。

有点挺无奈的吧。两家的区别太大了。中间外面等了半天,下着雨。最后躲到地下停车楼梯间,蜷缩到了面试时间。😂

生活总是不易,也充满了太多的不确定性。

2021 - 11 - 03

比邻星空 - 音乐/视频/阅读

初试线上面试,一个半小时的题目,不到半小时写完了,最后几个算法题实在是没有思路,放弃了。

在线面试工具:

大概就是市面上常见的题吧,然后会有几个补充,比如:

  • 简述 MVC、MVP 以及优劣势。
  • 如何停止一个正在运行的线程?
  • 三个方法,A 方法中 return 软引用修饰的变量,B 方法中直接调用 A 获取到 value,C 方法调用 B 方法进行输出,问有什么问题?
  • 剩下算法题印象不太深了。

2021 - 11 - 05

上午的面试有点无奈,下午的面试人事记错了,线下改为线上,不用出去折腾了。

比邻星空 - 音乐/视频/阅读

面试官网络较差,磕磕绊绊的折腾十多分钟,主要就是问了数据结构的底层,ummm

网络比较差,听的比较麻烦。面试官说的让人理解有问题,插入不说插入,说 cha,我蒙圈半天,插入?还是查?

  • 自我介绍(网络问题,介绍了两遍)、离职原因、团队规模、学历问题
  • 数组和链表有什么区别?
  • ArrayList 和 LinkedList 有什么区别?底层源码了解过吗?
  • HashMap 底层原理是怎样?
  • HashMap 是如何查询到具体值对应的 value?
  • HashMap 如何插入一个数据的?怎么知道我具体插入位置?
  • ConcurrentHashMap 和 Hashtable 有什么区别?如何实现线程安全?底层如何实现?
  • Volatile 作用有哪儿些?
  • 什么是原子性?
  • Java 引用类型和区别?
  • CAS 有了解过吗?
  • Apk 怎么瘦身的?
  • 有自己开发过 so 吗?

红松在线

还是要感谢人事,记错了,线下改为线上了,不然好家伙,坑了就。

早十晚十,真心扛不住啊。

  • 离职在职、离职原因、学历说明、学历会影响正常工作吗、安卓做了多久。
  • App 的版本控制怎么做?
  • TCP 和 UDP 区别。
  • 三次握手讲一下。
  • 四次挥手讲一下。
  • 算法怎么样?
  • 如何和 js 交互?具体参数。
  • 直播怎么做的?
  • 线上的问题怎么排查处理的?
  • 直播卡顿、黑屏怎么处理的?
  • 怎么做的数据埋点。
  • 工作负责内容有哪儿些?团队规模有多大?
  • 直播延迟怎么处理的?

小米 - 部门未知

面试老哥还是蛮不错的,一边锤,一边去讲,到最后了,说咱整个算法玩玩吧,一脸苦涩,老哥各种提示,可惜呀。

算法这块还是狠薄弱,基础这块也掌握不是太好。

  • 自我介绍、学历介绍、最近负责什么项目。
  • 最近项目中主要用到哪儿些技术?项目用的哪儿些架构。
  • MVVM 是一个怎样的架构,在 Jetpack 中用到哪儿些比较好的组件。
  • Lifecycle 内部是如何实现的?
  • Lifecycle 目前支持哪儿些层面?
  • LiveData 底层是一个什么原理?
  • setValue() 和 postValue() 有什么区别?
  • 假设我用 LiveData 的 postValue() 不想收到重复的值怎么操作?
  • Jetpack 其他组件有了解吗?
  • 说下对于 Hilt 的理解。
  • WorkManager 有什么作用,一般会用在哪儿些场景。
  • 组件化选择的是哪儿个框架?
  • ARouter 底层实现原理是怎样的?
  • ARouter 内部如何处理不同 module 之间的跳转的?
  • ARouter 跳转是在编译期执行还是运行期执行的呢?
  • 不同 module 中,如何做不同页面之间的跳转的?内部如何实现的?
  • ARouter 降级策略了解过吗?
  • ARouter 在扫描过程中的 apt 注解怎么做的,有了解过吗?
  • 说一下你的 Apk 瘦身的策略。
  • 启动方面优化做过哪儿些?
  • 从桌面点击 Icon 启动 App,这个过程是怎样的?

    • 桌面应用图标,Launcher 进程将启动 Activity 的请求以 Binder 的方式发送到 AMS。
    • AMS 接收到启动请求后,交付给 ActivityStarter 处理 Intent 和 Flag 等信息,之后交给 ActivityStackSupervisior/ActivityStack 处理 Activity 进栈相关流程,同时以 Socket 方式请求 Zygote 进程 fork 新进程。
    • 在新进程中创建 ActivityThread 对象,并且在主线程中开启 Looper 消息循环,开始处理创建 Activity。
    • ActivityThread 利用 ClassLoader 去加载 Activity,创建 Activity 实例,并回调 Activity 的 onCreate() 方法,这样便完成了 Activity 的启动。
    • 当点击一个应用图标以后,都发生了什么,描述一下这个过程?
  • 跨进程通信在项目中用到过哪儿些?
  • 跨进程通信的方式有哪儿些?
  • Android 中的跨进程主要底层实现是基于什么方式的?
  • 你了解 Binder 机制吗?简单描述下。
  • Binder 机制相比较管道、信号会有什么优势?
  • Binder 的组成部分。
  • CAS 了解多少?
  • Binder 内部是如何协作使其能在进程间完成通信操作?
  • 项目中用到的图片加载库是哪儿个?
  • 为什么进行图片库的统一迁移?
  • Glide 和 Fresco 从缓存这块来说有什么区别?
  • 自定义 View 用过吗?说一下流程。
  • onMeasure 测量模式有几种?
  • 你知道 onDraw() 中如何绘制的吗?绘制的顺序?

    • 绘制视图背景;
    • 绘制画布的图层;
    • 绘制 View 内容;
    • 绘制子视图,如果有的话;
    • 还原图层;
    • 绘制滚动条。
  • 项目中如何做的性能优化?
  • LeakCanary 是如何检测到内存泄漏的?
  • Traceview 用过吗?
  • WebView 怎么使用的?原生还是?
  • Android 和 JS 交互会遇到哪儿些问题?
  • WebView 做过哪儿些优化?
  • 线程池有哪儿几部分组成?
  • 项目中多线程怎么用的?
  • 多线程中如何实现挂起?
  • Kotlin 协程底层如何实现的挂起?
  • Kotlin Flow 有了解过吗?
  • Flutter 项目你主要做了哪儿些内容。
  • Flutter 中的 Dart 是单线程的吗?
  • Flutter 如何实现多任务并行?
  • 音视频如何实现的?播放器用的哪儿家的? Google 的 exo 播放器知道吗?
  • 开发中有用到过一些设计模式吗?
  • Synchronized 的原理了解过吗?
  • Java 虚拟机组成部分简单描述。
  • 堆里面主要存放的哪儿些数据结构。
  • 栈里面主要存放的哪儿些数据结构。
  • 说一下 Java 中的泛型擦除。
  • HashMap 底层结构怎样的?
  • HashMap 如何扩容的?

    首先 HashMap 衡量扩容时机的标准为:

    • 当插入数据长度大于 HashMap 长度 x 负载因子时,便会进行扩容操作。默认情况下 HashMap 长度为 16,默认负载因子为 0.75,也就是当插入第 13 个元素的时候便会发生扩容。

    而扩容的过程为:

  • HashMap 中的 hash 碰撞是什么?
  • HashMap 中什么情况下会出现 hash 一样?
  • HashMap hash 冲突如何解决?
  • HashMap 负载因子为什么是 0.75?

    负载因子为 0.75 时,正好处于一个空间和时间的权衡点,相对空间利用率较高,而且避免了相当多的 hash 冲突,使得底层的链表或者红黑树的高度比较低,间接提升了空间效率。

  • 扩容因子太大或者太小会有什么问题?

    扩容因子太大会造成空间资源浪费,扩容因子太小会造成频繁扩容,而扩容是一件成本相对较高的场景。

  • Handler 如何将一个消息推到最前面,优先执行?
  • postDelayed 内部如何实现的延迟执行?
  • RecyclerView 缓存和 ListView 缓存有什么区别?
  • RecyclerView 如何刷新单个 item?
  • APT 技术了解过哪儿些?
  • AOP 代码优化了解过哪儿些?
  • 插桩技术你知道什么?
  • AMS 你了解多少?
  • 埋点怎么做的?
  • 友盟采用的全埋点还是自动埋点,底层如何实现的?
  • 平时开发会遇到 OOM 吗?
  • ANR 有遇到过吗?
  • 遇到 ANR 的情况如何排查。
  • 你项目中还有哪儿些技术点是我没问到的吗?
  • 离职在线,具体这个学历是怎样的?
  • 有个链表,比如是 1、2、3、4、5,入参为 k,假设 k 为 2,那么输出链表为 4、5、1、2、3,有什么思路。

2021 - 11 - 08

快手面试完还是蛮失落的,东西很基础,可惜之前使用却未好好关注。

难受了半天。

快手 - 商业化

快手的面试官还是不错的,但是考量基础细节比较多。

面试开始的时候会介绍此次面试的流程,还会特意说明,假如有疑惑的地方会随时打断提问哦。

很平和的面试官,一直在引导,感谢老哥。

  • 自我介绍、最近工作介绍、项目介绍、团队规模、负责哪儿块业务。
  • GitHub 上有没有比较好的项目分享?
  • 描述下 rebase 和 merge 区别。

    两者都是用于处理分支合并操作。

    merge: 分支线多,会产生一条新的 merge commit,记录真实 commit 情况,方便项目追溯。冲突时只需要修改后重新 commit 即可。

    rebase: 单一分支线,会合并之前提交的 commit 历史。冲突时需要修改后再次 add 以及 rebase --continue。

  • 两种方式适合场景?

    一般而言,从主分支上拉取代码采用 rebase,这样保证拉取下代码分支简洁明了,不会掺杂别人的具体 commit 详情。而将本地代码推送远程分支上采用 merge。

    另外,如果涉及一个功能多次 commit,还需要通过 rebase 合并 commit。

  • 如何合并多个 commit 为一条 commit 呢?

    • git rebase -i HEAD~[准备合并几条 commit]
  • Https 请求流程。
  • Https 和 Http 区别。
  • 对称加密和非对称加密具体在 Https 流程中的哪儿个环节使用?
  • 简单描述下抓包流程。
  • 抓包 Https 的时候为什么需要安装证书?
  • 证书校验是在 Server 端做的还是客户端做的?
  • 为什么我安装证书之后就可以抓到 Https,不安装就抓不到?
  • 描述下重载和重写区别。
  • 变量可以重载和重写吗?
  • 判断如下输出内容:

    public class A {
    
        int num = 1;
    
    }
    
    public class B extends A {
    
        int num = 2;
    
        public static void main(String[] args) {
            A b = new B();
            System.out.print("--->" + b.num);
        }
    
    } 
  • 假设 B 类中 num 为 String,这个时候输出内容是?
  • 判断如下输出内容:

    public class A {
    
        public A(){
            System.out.println("构造 A");
        }
    
        static {
            System.out.println("static A");
        }
    
        void printThings(){
            System.out.println("Test A");
        }
    
    }
    
    public class B extends A{
    
        public B(){
            System.out.println("构造 Test1");
        }
    
        static {
            System.out.println("static Test1");
        }
    
        void printThings(){
            System.out.println("Test1 print");
        }
    
        public static void main(String[] args) {
            A t = new B();
            t.printThings();
        }
    
    } 
  • 假设我现在按照 JDK 中 String 的命名在包下定义一个 String 类,那么我在项目中直接调用 String,它实际执行的是 JDK 中 String 还是我们自定义的 String?假设我同样在调用 String 前追加一样的命名空间地址呢?

    java.lang.String ---> JDK 中 String
    java.lang.String ---> 自己项目中定义的 String
    
    new String() ---> 这时候会调用哪儿个 String?
    new java.lang.String() ---> 这个时候呢?
  • Java 中 Exception 的继承关系是?
  • Java 中的受检异常和非受检异常区别是?
  • Java 中 Exception 和 error 区别是?
  • Kotlin 中会写 try catch 吗?或者说 Kotlin 中操作 IO 流回去写 try catch 吗?
  • let、apply、with、run、also、takeIf、takeUnless、repeat 有什么区别?什么场景下适合用哪儿个?
  • Kotlin 中的 in、out 是什么意思?
  • Kotlin 中 :: 是什么意思?代表对象还是函数块?
  • Kotlin 中的 sealed 密封类和枚举有什么区别?
  • 怎么去学习的 Kotlin?按需学习还是全部都看一遍?
  • 什么是 lambda 表达式?
  • lambda 表达式中支持 return 么?
  • 内联函数和非内联函数有什么区别?
  • Activity A 跳转 B 生命周期是怎样的?
  • 如果我现在在 B 页面点击了 back,此时的生命周期是怎样的?
  • 你对于这个期间的生命周期怎么理解的?为什么不是直接销毁?而是打开 A 之后才会销毁 B?
  • public View inflate (int resource, ViewGroup root, boolean attachToRoot)
    
    inflate (resource, root, true)
        ---> 最后一个参数 true/false 代表什么意思?
        ---> return 的 View 是你添加进去的 layout 还是?
        ---> root 如果为 null,而且最后为 false,这个代表什么意思?
        ---> 假设我现在声明一个 View B,内部是 FrameLayout,然后 B add View 后传入 root,会有什么问题吗?
  • Activity 中的 onCretae() 如何获取 View 的宽高?

  • 为什么通过 view.post() 可以获取到?背后的原理是怎样?

    通过 View.post() 添加的任务,是在 View 绘制流程的开始阶段,将所有任务重新发送到消息队列的尾部,此时相关任务的执行已经在 View 绘制任务之后,即 View 绘制流程已经结束,此时就可以正确获取到 View 的宽高。

  • 算法题:数组反转实现方式。

    双指针解法。

小米 - 销售研发组

面试官进房间比较早,早早的就开始面试了。

感觉整体问的比较抽象,比较懵。

  • 自我介绍搞起来、在职离职、离职原因。
  • 列举一个难度比较大的项目,如何解决的?
  • 具体说明你编写某个功能具体点你写的比较痛苦。
  • 团队规模多少?
  • 国内和国际如何做的区分?
  • 假设国际版项目需要区分具体国家,这个怎么处理?
  • 你的技术栈大概是什么样子的?为什么?
  • 大前端这块有什么了解?有哪儿些具体落地?
  • JS、RN 有了解吗?
  • 知道 JS 跨域吗?聊聊。
  • Http 状态码知道哪儿些?具体的知道哪儿些?
  • 499 遇到过吗?503、504 都是啥意思?
  • 聊一下 Http 三次握手。
  • Http 四次挥手是怎样?
  • 剑指 Offer 61. 扑克牌中的顺子

    从若干副扑克牌中随机抽 5 张牌,判断是不是一个顺子,即这5张牌是不是连续的。2~10为数字本身,A为1,J为11,Q为12,K为13,而大、小王为 0 ,可以看成任意数字。A 不能视为 14。

      
      示例 1:
    
      输入: [1,2,3,4,5]
      输出: True 
    
      示例 2:
    
      输入: [0,0,1,2,5]
      输出: True 
    
      限制:
    
      - 数组长度为 5 
      - 数组的数取值为 [0, 13]
      
  • 冒泡排序、快排算法了解多少?
  • 如何实现单例模式?
  • 关于技术方向未来规划是怎样?详细说明。 -_-!!

启客 - 数据服务

网络情况不太好,纯语音聊的。

公司是刚刚组件 Android 团队,面试官应该不是 Android,个人感觉吧。

  • 自我介绍、离职原因、目前状态、公司业务线。
  • 你是如何理解的防御编程?
  • 说一下项目中你负责的模块、功能以及做的比较好的地方。
  • 瘦身方案大概说下。
  • 假设项目中需要像素极高的图片,这块怎么处理?
  • 组件化之间的优势?
  • ARouter 底层实现原理是怎样的?
  • Handler 这块说下,底层原理以及平时会用它做哪儿些操作?
  • ANR 这块主要怎么处理的?
  • App 优化具体做了哪儿些操作?
  • 内存泄漏的情况如何解决?还有哪儿些情况下会出现内存泄漏?
  • App 日活、月活数据大概多少。
  • 介绍下你开发的 Flutter 项目。
  • dio 你会做哪儿些封装?具体说明。
  • 安卓进程保活方式?低版本和高版本方案有哪儿些。
  • 你是如何理解 Activity 和 Fragment 的生命周期以及它们之间关系吗?
  • 说下 Activity 和 Fragment 具体生命周期。
  • Activity 的启动模式有几种,区别是什么?
  • WebView 怎么和 JS 相互调用?
  • 假设前端 JS 调用 Android 原生方法,传入一个 String,Android 原生接收到并且弹出 Toast。这个过程如何实现?Android 如何解析?
  • 假设线上出现严重 Bug,如何快速定位以及修复?
  • 对于未来两三年的目标规划是什么样的?
  • 具体阶段的具体实现方式。。。 -_-!!
  • 你对于未来工作有什么想法?

2021 - 11 - 12

FitTime - 社交网络

昨天整夜失眠,凌晨迷迷糊糊半天,随后接到了面试电话。

  • 自我介绍
  • 说一下你了解的 HashMap。
  • HashMap 负载因子可以更改吗?

    可以修改,需要根据要存储数据的容量进行一次性的指定。
    HashMap 提供了构造,需要传入初始化容量大小以及对应的负载因子即可。

  • 说说 TreeMap。
  • TreeMap 和 HashMap 有什么区别?
  • 对象锁和类锁有什么区别。
  • == 和 equeal() 有什么区别。
  • 定义两个 int,用 == 比较,这时候比较的是什么?
  • 说一下你了解的线程池。
  • AsyncTask 底部线程池如何实现的?
  • 讲一下 Handler。
  • 一个线程中可以创建几个 Handler?
  • 多个 Handler 中对应多个 Looper 吗?
  • Handler 中通过什么区分的不同 Handler?
  • Handler Message 发送 null 代表什么?
  • 讲一下 Android 中推荐的 ArrayMap。(着实让我懵逼了一下)
  • 说一下 View 的绘制。
  • 说一下 Android 中的事件分发机制。
  • App 如何申请最大内存?
  • OkHttp 你常用的有哪儿些拦截器?
  • 双亲委托是什么?
  • 算法:如何判断链表中有环?
  • 算法:如何讲两个栈合并到一个队列。

2021 - 11 - 15

普陆德中盾 - 信息安全

公司养只小猫咪,nice 的很。

一面二面很速度,速度到下楼抽了两根都很懵逼的状态。

大概就是问了内存泄漏和 Flutter 理解吧。

云建科技 避坑

有点无奈。。。

前期约面试的时候,问我能否线上,沟通一番,选择线上吧,毕竟之前被坑了太多了。。。

准时四点进入面试间,等了差不多小二十分钟,来个 HR 开始讲解公司项目情况,之后因为网络波动掉线。直接说,你考虑下,合适就约二面。

ummm???

得亏没去线下啊

End

生活不易,且行且珍惜。。。


贺biubiu
148 声望751 粉丝

Just do it.