写点什么

原来面试讲究方法!终于从【小公司一面就挂,androidui 适配如何处理

用户头像
Android架构
关注
发布于: 6 小时前


面试情况




我在两个月内一共面试了 42 场,最终拿了腾讯、阿里、字节跳动、B 站、搜狗的 5 个 Offer。


将这几个公司的面经分类整理了一下,自己平常也有收集分类的习惯,所以一起发出来分享给大家 :

一、Java 相关

1、Java 中==和 equals 和 hashCode 的区别


2、int 与 integer 的区别


3、谈谈对 java 多态的理解


4、String、StringBuffer、StringBuilder 区别


5、抽象类和接口区别


6、Serializable 和 Parcelable 的区别


7、string 转换成 integer 的方式及原理


8、哪些情况下的对象会被垃圾回收机制处理掉?


9、什么是强引用、软引用、弱引用以及虚引用?


10、什么是依赖注入?能说几个依赖注入的库么?


11、静态代理和动态代理的区别,什么场景使用?


12、Java 的异常体系


13、JVM 的回收算法是怎样的


14、说一下泛型原理,并举例说明


15、能说说 HashMap 常用操作的底层实现原理吗?


16、垃圾回收机制和调用 System.gc()的区别?


17、说一下你所了解的设计模式有哪些


18、说下 java 中的线程创建方式,线程池的工作原理。


...

二、计算机网络

1、Http1.1 和 Http1.0 及 2.0 的区别


2、Http 长连接。


3、Http 的请求方法。


4、Http 的报文结构。


5、Https 加密原理。


6、HTTPS 如何防范中间人攻击?


7、Tcp 和 Udp 的区别?


8、TCP 可靠传输原理实现(滑动窗口)。


9、为什么 tcp 要经过三次握手,四次挥手?


10、Cookie 与 Session 的作用和原理。


11、浏览器输入地址到反馈结果发生了什么?


12、客户端如何校验 CA 证书?


13、网络请求缓存处理,okhttp 如何处理网络缓存的


14、请解释安卓为啥要加签名机制?


15、权限管理系统(底层的权限是如何进行 grant 的)?


16、client 如何确定自己发送的消息被 server 收到


三、Android 基础

1、说下四大组件生命周期?


2、说下 onSaveInstanceState()方法的作用 ? 何时会被调用?


3、说下 Activity 的四种启动模式、应用场景 ?


4、谈谈 Activity 和 Fragment 的区别?


5、Service 的两种启动方式?区别在哪?


6、如何保证 Service 不被杀死 ?


7、广播有几种形式 ? 都有什么特点 ?


8、广播发送和接收的原理了解吗 ?(Binder 机制、AMS)


9、ContentProvider 的权限管理?


10、描述一下 Android 数据持久存储方式?


11、SharedPreferences 的应用场景?注意事项?


12、了解 SQLite 中的事务操作吗?是如何做的


13、Android 中进程和线程的关系? 区别?


14、为何需要 IPC?多进程通信可能会出现的问题?


15、讲下 View 的绘制流程?


16、描述一下 View 事件传递分发机制?

四、Android 中高阶

1.要做一个尽可能流畅的 ListView ,你平时在工作中如何进行优化


2.对于 Android 的安全问题,你知道多少


3.如何缩减 APK 包大小?


4.Android 与服务器交互的方式中的对称加密和非对称加密是什么?


5.设备横竖屏切换的时候,接下来会发生什么?


6.Android 启动 Service 的两种方式是什么? 它们的适用情况是什么?


7.请介绍下 AsyncTask 的内部实现,适用的场景是?


8.ThreadLocal 原理


9.RxJava 的功能与原理实现


10.ANR 是什么?怎样避免和解决 ANR?


11 进程间通信机制,binder 原理


12.序列化的作用,以及 Android 两种序列化的区别。


13.Android 中进程内存的分配,能不能自己分配定额内存


14.Android5.0~10.0 之间大的变化


15.使用过什么图片加载库?


五、Android 第三方库源码

1、网络底层框架:OkHttp 实现原理


《Android学习笔记总结+最新移动架构视频+大厂安卓面试真题+项目实战源码讲义》
浏览器打开:qq.cn.hn/FTe 免费领取
复制代码


2、OKhttp 针对网络层有哪些优化?


3、网络请求缓存处理,okhttp 如何处理网络缓存的?


4、从网络加载一个 10M 的图片,说下注意事项?


5、网络封装框架:Retrofit 实现原理


6、响应式编程框架:RxJava 实现原理


7、图片加载框架:Glide 实现原理


8、Glide 如何确定图片加载完毕?


9、Glide 内存缓存如何控制大小?


10、加载 bitmap 过程(怎样保证不产生内存溢出)


11、Android 中软引用与弱引用的应用场景。


12、LruCache 原理


13、Fresco 与 Glide 的对比:


14、Bitmap 如何处理大图,如一张 30M 的大图,如何预防 OOM?


15、事件总线框架 EventBus 实现原理


16、内存泄漏检测框架:LeakCanary 实现原理


17、leakCannary 中如何判断一个对象是否被回收?


18、依赖注入框架:ButterKnife 实现原理


19、依赖全局管理框架:Dagger2 实现原理


20、数据库框架:GreenDao 实现原理


六、性能优化

这个主要结合你所做过的项目问,一般面试官会问你项目做过哪些方面的优化,常见的问法就是:


1、优化的思路是什么


2、用到了哪些技术


3、遇到了哪些困难(问题)


4、如何解决


5、有什么心得


主要结合自己项目回答。切记不要自己给自己挖坑,比如没有做过这方面优化,你为了表现自己,说做过,结果面试官往下问回答不出来,这关乎诚信问题,你们懂的~


面试总结:


我一直觉得技术面试不是考试,考前背背题,发给你一张考卷,答完交卷等通知。


首先,技术面试是一个?认识自己?的过程,知道自己和外面世界的差距。


更重要的是,技术面试是一个双向了解的过程,要让对方发现你的闪光点,同时也要 试图去找到对方的闪光点,因为他以后可能就是你的同事或者领导,所以,面试官问你有什么问题的时候,不要说没有了,要去试图了解他的工作内容、了解这个团队的氛围。


找工作无非就是看三点:和什么人、做什么事、给多少钱,要给这三者在自己的心里划分一个比例。



面试技巧




然后出了上面的面试题,我还有些其他东西希望能够分享给大家,不仅仅是简单的面经,包括:


  1. 锁定目标

  2. 关于简历

  3. 邀约渠道

  4. 面试方法论

  5. 挑选 Offer

  6. 面试挂掉如何调整心态

锁定目标

一个最重要的问题:


你想找一家什么样的公司?


你需要知道你的目标是什么,是 WLB(Work Life Balance),成长,还是赚钱?


| 类型名称 | 描述 | 该类型的公司 |


| --- | --- | --- |


| WLB 型 | WLB = Work Life Balance,即工作生活平衡,955 的这种公司 | 常见于外企,国内互联网公司也有一些,可参考 Github/955.WLB。部分互联网大厂的成熟事业部(比如百度的搜索事业部)也比较 WLB |


| 跟随成长型 | 工作强度可能不轻松。但是可以跟随公司快速成长,在公司内能学到很多 | 互联网大厂基本都满足这个要求,阿里我觉得是做的最好的。某些技术驱动的小公司也可 |


| 钱多型 | 钱给的很多 | 多为业务爬升期的公司(拼多多、字节),或在风口创业公司(作业帮、跟谁学) |


据我所见很少有哪家公司同时满足上边 3 个特点,大多企业满足 2 个就已经非常不错了


你需要知道上边 3 点哪个对你最重要,排个序,然后根据这些特点来初步锁定你的目标公司


其中我要单独说下外企和阿里:


  • 外企:外企对于英文是有硬性要求的,起码你得需要做个英文自我介绍,简单的口语要能说

  • 阿里:我面了 10 面阿里,阿里人给我感觉都很聪明,因此我觉得加入阿里就可以变成这种聪明人(或者是说不聪明的都被公司输出到社会了?)。所以在“跟随成长型”公司里面点名表扬了一下

关于简历

简历真有那么重要吗?


网上有太多太多关于简历的文章了,这里我不想赘述如何写简历。我反而想 diss 一下:


简历真有那么重要吗?


我发现其实好像没那么重要,因为面试官根本不怎么看你的简历。这是我观察到的一个非常有趣的小细节


为什么这么说呢?事情是这样的


我的简历里面第一页里有一个非常漂亮的时间轴,是我用 Short Night 画的。这是一个我的开源项目,它在简历里大概这样:



因此,我当然会在面试中的开场自我介绍里面提上一嘴,然后 70% 的面试官都会有如下反应:


我:blablabla…不知道您有没有看到我简历第一页里面的那个时间轴,这个是我一个叫做 Short Night 的开源项目画的,它有诸多优点 blablabla… (面试官突然面无表情盯着屏幕) (过了 30s,面试官缓缓看向左下角,我简历里时间轴的位置) (点点头)


这说明什么?说明面试官根本就没怎么看过我的简历!

简历的作用和注意事项

当然,diss 归 diss,简历还是很重要的。下面是简历的一些重要作用


直接通过面试


有些面试官会仔细阅读你的简历,然后在你面试前,你其实就已经凭借你优秀的简历面试通过了。或是免掉写题,免掉技术问题,直接简单聊一聊项目和做事风格,也都是有可能的


我曾经面的一家公司,整场下来没有写题,也几乎没有技术问题。所以在我最后一面的回问环节的时候,我问到:


我:为什么我整场下来都没有写代码?这种面试风格会不会导致面进来一些很会扯皮但是不会写代码的人来?面试官:哦是这样的,我们已经看了你的简历和开源项目,觉得没必要再面技术相关的了,因此就是简单和你聊聊天,看看你人怎么样


HR 和猎头非常注重简历


HR 和猎头(后面会单独讲这个角色)会非常看重简历。糟糕的简历可能会导致你连面的机会都没有


如果你本身是大厂员工,HR 和猎头基本上不会拒绝你。但是如果你不是在一座明星大厂,那么还是好好写简历吧


注意!简历可能会成为你的题纲


基本上所有的面试官都会和候选人聊项目,而聊得项目来源无非有 2 个:


  • 从你开场的自我介绍中挑

  • 从你的简历里挑


不仅仅是项目,如果你在简历里面写一些技术关键字,那么面试官也会倾向于考察你这些知识点


比如简历里写个“Git”,那么遇到 Git 很熟的面试官看到了可能就会问“git rebase 和 merge 有啥区别”,要是答不上来就尴尬了。因此:


自己不熟或是不重要的东西最好别往简历上写!


面试方法论




一般来说面试无非包含下边几个内容:


  • 写题

  • 技术问答

  • 聊项目

  • 聊人生

面试的核心思想

我理解面试是挖掘候选人优点的过程。因此建议,如果自己某方面不行就大胆承认,然后引导面试官朝自己擅长的地方引导。


总之,术业有专攻,及时止损,想办法帮助面试官挖掘自己的闪光点才是最重要的。其中一个比较好的方法是——留伏笔,比如:


  • 这个项目曾经做了许多非常亮眼的性能优化,希望后边可以聊一聊

  • 我写了很多 NDK 相关的东西,对 NDK 非常熟


当然,面试官可能会不理你的伏笔,那么怎么办呢?

用户头像

Android架构

关注

还未添加个人签名 2021.10.31 加入

还未添加个人简介

评论

发布
暂无评论
原来面试讲究方法!终于从【小公司一面就挂,androidui适配如何处理