拉犊之前,先放一张面试图: 求职?Start…
奇怪的是,从进入公司的第一天起,我就感到非常不舒服,然后慢慢地有了离开的想法,然后改变了想法,并计划按照步骤继续学习,以避免下次找工作的尴尬。
过去的事,不想说太多,挺坑的,也挺现实的。
感兴趣的可点击查看:
- 2021年面试|菜鸟金三银四铜五 Android 被锤工艺出炉…
事实上,上一家公司的影响是相当大的,这可能是增长的代价。幸运的是。
本来想着找份工作,然后好好喷喷,曝光丑脸。直到现在,我决定加入一家公司,但我不知道在电脑前说什么。
做天看人,好自己为之。
真实记录面试过程,希望对求职有所帮助。
好的干货面试文章
好的面试大纲:
- https://juejin.cn/post/6844904079177547789
- https://www.kancloud.cn/aslai/interview-guide/1113658
此外,还有一些营销号发布的技能点,也可以作为面试复习的参考。
下面是你目前整理的面试文档,以后会找到合适的整理方法。
- 个人飞书文档整理地址:https://aorni1vik4.feishu.cn/docs/doccnTIPSuCC3T1filA9PDhOCQe
2021 - 09 - 29
重新开始面试,刚开始有点蒙,但是会慢慢好起来~
阿凡提 - 供应链物流 避坑
有些无奈,项目急需人,匆匆结束面试。
楼下抽了两支烟,还处于孟逼环节。
-
简要介绍项目经验。
-
- 可以从函数内使用区分进行理解:this、it
-
- 内联函数在函数中使用 this 访问对象属性法,返回值为函数块的最后一行或指定 return;
- with、let 结合体可通过 this 也可以访问物体属性法,如 let 对象统一判空,返回值为函数块最后一行或指定 return;
- 和 run 相似之处在于返回的是传入对象本身;
-
- 扩展函数可以统一判断扩展对象,通过 it 访问其对象属性法,返回值为函数块的最后一行或指定 return 表达式;
- 和 apply 相似之处在于函数中通过 it 访问对象,也返回到输入对象。
-
如何处理您的网络请求异步回调?
-
- 轻量级线程,创建协程不需要分配新的线程。默认使用已定义的线程池和智能调度。并且协程提供挂起(suspend)和恢复(resume)操作。
- 悬挂当前执行的协同程序,并保存当前所有本地变量。协程内部是使用状态机管理协程的每个起点;
- 继续执行其悬挂位置,并恢复悬挂时保存的数据。
- Kotlin协程实现原理:悬挂与恢复
- 轻量级线程,创建协程不需要分配新的线程。默认使用已定义的线程池和智能调度。并且协程提供挂起(suspend)和恢复(resume)操作。
-
- 首先通过 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 用过嘛?
-
你开发过地图吗?你做了什么?你规划过地图行程路径吗?
-
什么时候可以入职?加班怎么看?
事实上,最好是在线沟通,然后看看情况选择是否离线,所以至少对双方来说,成本更低,面试官不需要花很多时间在路上来回,结果很匆忙。
明天世界 - 直播/社交
进门需要写面试题,分为单选、多选、简答。前两个项目都是网上多年前的老题目,估计不是全对。
-
- 双指针,冒泡,递归
-
- 常见的内存泄漏方法:
- 非静态内部类、匿名内部类
- 静态的 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,系统如何将应用从后台转为前台的么?
-
- HashMap 1.7 版本之前底层数据结构为:数组 + 链表,1.8 后变为 数组 + 链表 + 红黑树。由于 HashSet 底层也是 HashMap 实现,所以两者底层数据结构一致。
-
你能说下对 Bitmap 的理解么?
-
- 首先拓展如何计算 Bitmap 所占用内存大小:Bitmap 宽度(px)* Bitmap 高度(px)* 像素点占用字节数
- 优化思路:
- 通过采样率压缩改变 Bitmap 宽高;
- 通过 matrix 压缩(createBitmap)Bitmap;
- 改变 Bitmap Config 为占用字节更少的 ARGB_4444 或者 RGB_565
- 性能优化:Bitmap内存大小优化的几种常见方式
-
- 最大的。ARGB_8888 占用 4 个字节,ARGB_4444 和 RGB_565 占用 2 个字节。
-
- 借助 Lru 算法以及弱引用
-
你知道你在使用帧动画的时候为什么内存居高不下吗?如何进行优化呢?
-
- 当前图片颜色值,存放类型取决于使用的是什么类型的 Config。
-
Bitmap 存储信息的数据结构是怎样的?
-
我创建一个对象,当我不使用的时候,并且将它置空,这时候就会立即被回收吗?
-
现在有这样的一个需求,我在 Activity 中的 View 中添加一个浮窗小球,并且让其随着手指移动,你有什么方式实现?移动点击的时候,又该如何处理?
-
- 处理屏幕上的操作,例如点击、长按、滑动等;
- 获取某一个控件的点击监控。
- 两者之间区别:
- 外层 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 有四种启动模式,分别为:standard、singleTop、singleTask、singleInstance。
- 默认启动模式,每次都会新建一个 Activity 实例放入栈中;
- 栈顶复用模式,当前 Activity 位于栈顶,不会创建新的 Activity 实例,而是会回调 onNewIntent()。反之,当前 Activity 位于栈内非栈顶,效果同 standard;
- 跳转该模式的 Activity 时,首先会在任务栈中查看是否存在该实例,如果存在则会将位于这个 Activity 实例上的 Activity 全部结束,并将当前 Activity 位于栈顶;
- 新创建一个任务栈,单独存放该 Activity。
-
详细介绍下 Handler。
-
UI 页面是如何进行回收的呢?
-
简单描述下你了解的垃圾回收。
-
- Java 虚拟机栈(局部变量表)中引用的对象;
- 方法区中静态引用指向的对象;
- 仍处于存活状态中的线程对象;
- Native 方法中 JNI 引用的对象。
-
垃圾回收不当会造成内存泄漏,你是如何检测和治理的?
-
假设用户设备上出现崩溃闪退的情况,你是如何能了解到这个情况呢?
-
OkHttp 和系统提供的网络访问框架有什么区别?
-
RecyclerView 和 ListView 区别。
-
当用户点击桌面 icon 启动 app,这个过程是怎么样的?
-
针对启动 app 的时间又是如何优化的呢?
-
针对 UI 卡顿有没有心得体会?比如说列表卡顿?动画卡顿等?
-
短视频缓存这块做过哪儿些操作?
-
MVC、MVP 和 MVVM 有什么区别?
-
Flutter 主要你做了哪儿些内容?
-
大概说下你是怎么做的 Apk 瘦身?
-
具体说下如何实现大图加载。
-
简单说下学历情况,离职原因大概说下。
多元主义 - 数码产品社区
初创公司,莫名的感受到不愉快,后续的面试也没用心了。mmp,请的假,白花花的现大洋出去了。
这块主要分为技术 + HR 聊,技术主要是根据他的点回去问一些东西,时不时的打断这点有点烦人,打断的频率高了之后明显个人有点不耐烦了。而 HR 会说一些公司以及项目情况,顺便也会问一些杂七杂八的东西。
工资构成主要为:基本工资 + 加班费。大小周,大周会有加班费(这点还是蛮不错的,比起那些情怀、大饼公司而言,这点确实实实在在)。
-
自我介绍以及项目描述。
-
Flutter 你是如何减少嵌套。
-
你是如何做的 Apk 瘦身。
-
svg、jpg 和 png 有什么区别?
-
两者主要区别在于:
- 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 是非线程安全的。
-
查询更为高效,其本质通过寻址定位法去进行数据查找,效率较高。而针对插入/删除,则需要移动后续的数组下标,效率较低。
-
链表和数组有什么区别?
-
查询的话,数组和链表哪儿个更快?
-
设计模式你了解的以及用过的哪儿个比较多?
-
单例模式的饿汉和懒汉有什么区别?在线程安全和不安全下的表现又是如何?
-
工厂模式适用哪儿些场景业务?
-
抽象工厂模式有了解过吗?
-
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 主要做什么操作?
-
- 主要是在 Android 中负责消息处理,通过它可以实现线程之间的消息通讯;
- Java 进程中执行运算的最小单位,也就是执行处理机调度的基本单位;
- 一个继承自 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 动态扩容。
- JAVA中的数组是对象吗?
-
单向链表:只有一个指向下一个节点的指针。 适用于节点增加、删除。 - 优点:增加删除节点简单,遍历不会死循环。 - 缺点:只能从头到尾遍历。
双向链表:有两个指针,一个指向前一个节点,一个指向后一个节点。 适用于双向查找节点的情况。 - 优点:可以找到前驱和后驱,可进可退。 - 缺点:增加删除节点复杂度,需要额外多分配一个指针存储空间。
-
Apk 瘦身怎么做的。
-
so 具体是什么东西?
-
矢量图和位图的区别?
-
Activity A 切换到后台,随后切换到前台,接着启动 Activity B,这时候它们的生命周期是怎样的?
-
Touch 事件的传递流程。
-
老家哪儿的?结婚了么?平时会玩游戏吗?
-
假设现在有一个 7L 的桶和 5L 的桶,如何倒出 6L 的水?
-
两数交换。
-
三个人三天喝三桶水,九个人九天喝几桶水?
临走的时候,小姐姐还会让站在公司前台拍个照,😂😂😂
2021 - 10 - 11
今天的两场面试整体让人觉得很无语,无语到极点。不知道该说啥了。
这假请的,无奈到极点了。。。
想喷人。。。
尚博信 - 外包
从住的地方骑车过去不到二十分钟吧。
约面试的小姐姐地址没发清楚,找了许久,问了保安大叔几次。
一开始只告诉 7 层,询问后告知是 3 号楼,过会儿再询问,告知 C 座。
找公司面试貌似探宝一样,折腾半天,还是先赶去下一场复试去了。
万度健康 - 医疗健康
也不知道复试女面试官是 HR 老大还是老板,整个交谈想让人骂人。
吐槽几个点吧:
- 对求职者严重不尊重。摆明了一副我司到现在为止 29 年了,只招二本以上的高尖端人才,像我这没学历的都属于特例面试。
- 公司极度不靠谱。有三天的学习培训期,美名其曰公司免费会对你有三天的培训,在这期间无薪水,不记工时。还需要完成公司安排的“作业”,后续三天通过后,根据三天表现去打分并给出对应薪资???
- 似乎有点脑残。上来拿着身份证去复印去了,美名其曰:方便快速入职。结果呢?来个憨批。
- 。。。
哎,无语到极点。一面的技术总监蛮不错的,复试的那个女的不咋地。姿态太高,高攀不起。
只能说,做个人吧。。。
真要是成立了 29 年了,不温不火、吃不饱饿不死的,哪儿来的傲娇呢?龙头老大吧,也倒是能理解。
各位避坑吧。。。浪费时间,公交折腾一个多小时,结果 mmp!
坐公交回去搞得晕车恶心难受了大半天。。。
XXOOXXOOXXOO!!!
2021 - 10 - 14
在线面试,很 nice~
不用来回折腾,也避免遇到不靠谱得白白浪费时间。
今天线上面试的四家相比前几天跑了四家,的确也没那么熬人了。
中农融信 - 农业贷款/直播
很正常的一次面试,面试官很尊重人,很耐心的听着,并且相互沟通着,整体来说蛮不错的。
-
自我介绍、简述所负责项目。
-
谈谈 Handler 消息机制。
-
内存泄漏如何防御和检测,遇到了怎么治理?
-
Android 事件分发的本质就是,由系统 framework 层创建 InputManagerService 监听响应,并且将事件逐层下发的一个过程,整个过程属于责任链模式。
事件分发顺序:Activity —> ViewGroup —> View。
具体实现则由三个方法进行实现:
-
ViewGroup 通过 开始分发事件并且内部通过 判断是否拦截该事件。
- 如果拦截,则当前事件流转到该 ViewGroup 的 中进行具体处理。
- 如果 ViewGroup 未拦截该事件,则调用 View 的 dispatchTouchEvent() 继续向下分发。
-
如果 View 消费则会到 View onTouchEvent() 进行处理,反之依次返回 ViewGroup、Activity 的 onTouchEvent()。
需要注意的是,Activity、View 具有分发、消费,ViewGroup 在此基础上多一个拦截。
-
-
说下你对自定义 View 的了解。
-
假设现在要求实现大圆套着小圆,并且小圆内有刻度,会随着一点点变化,这个有什么思路么?
-
网络框架用的是什么?简单说下 OkHttp 的使用,以及同步、异步是怎么回事。
-
有和 js 交互经验么?简单描述下。
-
如何将字符串转为 int?
-
Apk 瘦身如何操作的?除了简单的图片压缩、代码混淆,还做过哪儿些方面?
-
关于应用启动优化主要做了哪儿些方面?
-
Kotlin 中 var、val 以及 const 有什么作用区别,对比 Java 呢?
-
- == 比较值是否相等,=== 比较引用地址是否相等。
-
直播都用过哪儿家的 SDK?
抱抱直播 - 直播
在如下地址先写题:
- https://www.codegree.net/ (这玩意可难用了,时不时就打错了)
题目如下:
/** * 完成一个数字转中文大写的函数(30分钟) * 例子: * 123 --> 一百二十三 * 46035 --> 四万六千零三十五 * 尽可能覆盖函数输入范围 * 可选任意主流语言编码 * 可在IDE中完成,可搜索基本函数&数据结构用法 **/
思路如下:
- 定义两个数组,分别存储数字对应汉字(0~9)以及单位(个十百千万等);
- 循环遍历,记的处理第二个单位时需要处理为 0 的情况。
面试官应该是在会议室开着外放,一边问问题,一边写评价吧,个人猜测。听的不是很清楚,面试官比较随和,也比较尊重,有些东西没实战经历过,但是也让尝试说说想法,这个蛮不错的。
-
自我介绍、为啥现家公司待这么短原因说明以及负责项目描述。
-
刚刚你写的代码会有什么问题?最大兼容到什么级别?有什么想法思路谈谈。
-
Apk 瘦身方向,成果。
-
UI 优化方向。
-
View 绘制的本质就是从 DecorView 自上而下遍历整个 View 树,进行测量、摆放以及最终绘制操作,这里需要注意,所有的 View 执行完一个步骤后,才会执行下一步。
- onMeasure():测量视图大小。从顶层父级 View 到子 View 递归调用 measure(),measure() 调用 onMeasure() 完成测量工作;
- onLayout():摆放 View 的位置。从顶层父级 View 到子 View 递归调用 layout(),父级 View 将上一步 measure() 得到的子 View 布局参数,将子 View 放在合适的位置上;
- 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 都启动不了怎么操作?
-
常用的数据结构,哪儿些是线程安全,哪儿些是不安全?什么叫线程安全?什么叫线程不安全?
-
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 压缩方法的具体参数。
-
怎么进行的屏幕适配?
-
项目中用到哪儿些设计模式?
-
点播、直播是独立开发实现的推流、拉流操作吗?为什么不自己写?
这个面试官太无语了,整个过程都是敷衍、糊弄的感觉,没啥意思,耗子尾汁吧~
快音 - 直播
公司离住的地方不远,自行车半个小时左右,园区蛮不错的,公司环境不赖。进门需要扫码登记,随后会在线填写相应的信息。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 中最大的一块,由年轻代和老年代组成,而年轻代内存又被分为三部分:
- 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 生命周期是怎样的?
最后和总监聊了下,整体感觉还