当前位置:主页 > 查看内容

Android面经:小厂被diss到自闭,“试水”大厂竟收3份offer!(

发布时间:2021-07-02 00:00| 位朋友查看

简介:写在最前面有时候某人的放弃将会成就你更好的选择 刚开始面试的时候我真的是处处碰壁面一家挂一家面完之后怀疑自我是不是自己真的太菜了找不到工作还是真的是像网上所焦虑的那样Android开发真的是要凉了这次跳槽经历让我明白工作本身就是双向选择一家不行再……

写在最前面:有时候某人的放弃,将会成就你更好的选择!

刚开始面试的时候我真的是处处碰壁,面一家挂一家,面完之后怀疑自我,是不是自己真的太菜了找不到工作,还是真的是像网上所焦虑的那样,Android开发真的是要凉了?这次跳槽经历让我明白,工作本身就是双向选择,一家不行再换一家,总有合适的,千万不要因为别人的一句话就全盘否定自己、怀疑人生,一定要自信。

战况(时间排序)

  • 最右二面挂

  • 猿辅导一面挂

  • 伴鱼offer(两轮技术+一轮HR)

  • 顺丰二面挂

  • 百度二面挂

  • 微博一面挂(一面就问意向薪资,面的还行,要多了没有后续了)

  • 老虎证券offer(两轮技术+一轮HR)

  • 滴滴一面挂

  • 快手简历挂

  • 字节offer(三轮技术+一轮HR

  • 美团HR面(三轮技术)

  • 腾讯HR面(三轮技术)

非技术准备方面

离职原因方面

其实大家换工作的原因,无非就是马云所说的两种情况:“钱没给到位,心受委屈了”。对我而言,更倾向于前者,再加上考虑到自身成长方面原因。但是面试在讲离职原因的时候一定不要过于实诚,请尽量往个人发展这个方向上靠拢,切忌一定不要说现任公司的坏话,尤其是跳槽频繁或者像我这种第一份工作不满两年的,一定要想好自己的离职理由,我有几家公司明显技术答的还行,但是因为离职理由挂掉的。

简历投递顺序方面

如果你对自己很有信心的话,可以直接投你的意向公司,如果信心不够强烈建议跟我一样先面几家体量不那么大的公司涨涨经验看看现在外面的行情,顺便通过面试复盘自己的技术短板,然后再投自己中意的公司。

心态准备方面

既然准备了要离职,就不要被任何其他事物影响心态,心态真的很重要。刚开始面试的时候我真的是处处碰壁,面一家挂一家,后来在一家面试过程中被面试官疯狂嘲讽,面完之后怀疑自我,是不是自己真的太菜了找不到工作。后来也幸亏隔天有一家公司给我发了offer,让我明白了不是自己的问题。工作本身就是双向选择,一家不行再换一家,总有合适的,千万不要因为别人的一句话就全盘否定自己,一定要自信。

技术准备方面

刚开始面试的时候是准备把面试过的所有家都写详细的题目出来的,后来发现写了面经发在牛客许愿offer的都挂了,也不知道是什么奇怪的玄学,后来就没发过了,不过其实面过来面过去就那些问题,做了下面的归纳总结。

Java

  • 怎么判断一个字符串的字符个数,比如说中文

  • Java的异常机制,为什么这么设计,什么时候用什么

  • HashMap,经典的就不一一列举了,说几个可以拓展的
    解决hash冲突的方案有哪几种
    1.7和1.8有什么区别(链表头插尾插方面)
    hashmap高并发场景会怎样
    高并发链表成环会有什么问题
    hashmap扩容时到底干了什么(位运算过程)
    concurrentHashMap原理

  • String,StringBuilder,StringBuffer

  • ArrayList多线程下会有什么问题

  • 内部类持有外部类引用的原理是什么

  • volatile有什么用,原理是什么

  • 为什么会有StackOverflow,stack的大小是多少

  • 虚拟机
    Java虚拟机和Android虚拟机有什么区别
    Android两种虚拟机有什么区别
    类加载过程
    内存模型
    四种引用类型
    class文件格式
    synchronized底层实现原理
    synchronized放在普通方法和静态方法上有什么区别
    synchronized的锁实际是保存在哪里的(对象头)
    双亲委派机制,为什么要用双亲委派机制,如何打破双亲委派机制
    内存收集整理的算法

Android

  • Activity
    Activity的生命周期
    dialog会不会影响Activity生命周期,为什么
    Activity的启动模式(还会伴有场景让你说这种场景选哪个合适)
    Activity任务栈以及taskaffinity

  • Service
    Service存在的意义是什么
    startService和bindService的生命周期
    startService和bindService的区别
    startService和bindService分别适合应用在什么场景
    Service可以执行耗时操作吗
    IntentService和Service的区别
    Service和线程都可以用来执行后台任务,为什么选Service不选线程,明明线程用起来更简单

  • broadcastreceiver
    广播的原理是什么

  • View的绘制流程
    详细讲一下View的绘制流程有哪些
    View的第一次绘制是怎么调到的
    View的后续绘制是怎么调用的
    View的onMeasure,onLayout,onDraw都分别用来干什么
    除了上面三个,还有哪些关键的方法
    invalidate的原理
    invalidate和requestlayout的区别
    requestlayout的作用范围是多大
    一个View被添加后第一个回调的方法是哪个(onAttacthToWindow)
    为什么View.post能拿到view的宽高
    讲一些字节做过的自定义VIew的例子

  • 触摸事件分发
    讲一下Android事件分发的流程
    怎么处理滑动冲突
    怎么判断手势
    讲一些自己做过的处理滑动冲突的原理
    事件分发
    handler这套机制的原理
    IdleHandler是什么
    handler的postDelay怎么实现的
    Message有个缓存池,缓存池大小是多少知道吗
    MessageQueue的中没有消息的时候为什么不会ANR
    知道epoll的底层原理吗
    epoll是阻塞的吗

  • ANR
    ANR是什么
    ANR的原理
    什么情况下会发生ANR
    如何检测是否发生了ANR

  • SharedPreference
    SharedPreference原理
    SharedPreference的优化
    SharedPreference的commit和apply区别
    什么情况下会选择用SharedPreference

  • 序列化
    Serlizeable和Parceable的区别
    什么情况下选择用哪个,为什么
    有没有了解过别的序列化方法
    RecyclerView
    RecyclerView的缓存机制
    RecyclerView和ListView对比
    Recycler是怎么进行回收和复用的
    LayoutManager怎么进行布局的

  • 内存泄漏
    内存泄漏的常见场景
    怎么检查内存泄漏

  • Binder
    Binder原理
    Binder比起其他跨进程的通信方式好在哪

网络

  • HTTP报文格式

  • HTTP在网络体系架构中的意义是什么

  • HTTPS和HTTP的区别

  • 对称加密和非对称加密

  • TLS四次握手的过程

  • CA是干什么的

  • 校验证书的详细过程

  • HTTPS一定是安全的吗

  • TCP和UDP的区别(高频)

  • HTTP1.0,1.1,2.0的区别

  • 有没有实际了解过HTTP2.0到底比1.1快了多少

  • 详细解释“Keep-Alive”有什么用

  • UDP为什么比TCP快(存在误导,UDP不一定比TCP快)

  • UDP可以进行广播为什么TCP不行

  • 为什么要三次握手,四次挥手

  • 为什么握手仅需要三次而回收需要四次

  • HTTP是基于什么协议的(一般来说是TCP,可以借此引出QUIC,KCP等协议进行进一步的探讨)

操作系统

  • 线程间通信方式

  • 线程的几种状态

  • 进程间通信方式

  • 线程和进程的区别

设计模式

设计模式没有必要全都看,重要的是你会的几种设计模式他们的优点是什么,缺点是什么,在哪些常见的地方用到了他们,要能够举一反三,例举几个我面试时常说的。

  • 单例——单例一定要特别熟,特别高频,尤其是DCL为什么这么写,synchronized为什么那么加,有什么讲究,volatile在这个地方起到了什么作用,不加会导致什么问题。静态内部类的单例怎么能够保证线程安全。等等。

  • Builder——常见,知道什么时候用就行了

  • 责任链——要能扩展到Android的事件分发,okhttp的拦截链等。

  • 观察者模式——要能知道Android中哪些地方用到了观察者,什么情况下使用。比如广播机制就使用的是观察者

  • 享元模式——要知道享元模式是为了避免重复创建对象而导致的开销,Message,String,线程池都是这样的设计思想。

  • Adapter——要能想到ListView和RecyclerView,以及为什么他们设计的时候要用Adapter

  • 代理模式——静态代理,动态代理

算法(手撸代码)

就算法来说,其实大部分公司(除了字节和腾讯)问的都不是很难,一般都集中在数组和链表上,基本就是剑指offer难度甚至直接就是原题。

  • 移动零——一个数组有0和其他数,不更改原本其他非0数字的顺序,把0都移到数组最末位(猿辅导)

  • 手写栈(伴鱼)

  • 数组中只出现一次的数字——剑指原题(伴鱼)

  • 判断链表是否有环(顺丰,腾讯,美团)

  • 有环链表环的长度(腾讯)

  • 反转链表(腾讯)

  • 一道贪心——题目太长了且没有原题(腾讯)

  • 字符串转数字(百度)

  • 回字形打印数组(老虎证券)

  • 插入5(https://www.lintcode.com/problem/188/)(老虎证券)

  • 斐波那契数列(美团)

  • 手写DCL单例(字节)

  • 二叉树路径和——从根节点到叶子节点是否有一个路径之和等于给定值(字节)

  • 最短子数组长度——滑动窗口(字节)

  • 手写观察者模式(字节)

  • 两个栈实现队列(字节)

  • 获取一个VIewGroup的最深深度(美团)

设计题

设计题这个部分其实大部分并没有标准答案,更多的是看以你的知识量能够想到什么比较好的解决方案。

  • 设计进程安全的SharedPreference(字节,腾讯)

  • 设计一个gif加载框架(微博)

  • 一个进程只有读操作,一个进程只有写操作,你怎么设计(微博)

  • 如果一个APP需要有闲时加载任务的能力,你怎么设计(美团)

  • 让你设计一个流式标签布局你怎么做,有哪些要考虑的点(最右)

  • 设计一个下拉刷新的RecyclerView你有几种方法(美团)

  • APP使用经常会有弱网环境,怎么确保APP数据的即使同步更新以及正确性(顺丰)

  • 让你设计一个push的框架,你会怎么设计,考虑到哪些问题(百度)

  • 设计一个检测内存泄漏的框架(腾讯)

  • 设计一个事件总线(最右)

项目

在项目上,一定要能做到融汇贯通,不仅从技术上也要从业务上。比如你做过的一个需求,为什么要做这个需求,这个需求的背景是什么,这个需求上线后带来了什么影响或者有哪些收益,虽然你是个技术,但是你能够知道这写得话肯定是更好的。

其次在技术细节上,要能知道为什么要这样技术选项,这么做的好处是什么,以及能够横向纵向拓展。比如说我的项目中有一个地方用JobService实现了定时任务,那么可以横向拓展的点就有,Android中实现定时任务的方式都有哪些,他们都有哪些好处坏处,你的这个场景为什么要选JobService,JobService和普通Service的区别是什么。

纵向扩展的话就有,JobService的原理是什么,JobService在参数配置上的一些细节,JobService是不是会严格按照你配置的时间运行。这些都是可以扩展出来的,所以当你在对项目复盘的时候,一定不要只盯着你做的那一部分,还要把自己做的部分横纵拓展一下,这样才能做到无懈可击。

除此之外,良好的表达能力也是非常重要的一环,如果不觉得麻烦的话可以在复盘项目的时候把自己做了什么,为什么这么做打个草稿,自己看自己的逻辑以及表达是否通顺,以此来做调整。

最后

offer的话拿到了字节、腾讯还有美团的,我这边最后还是选择了腾讯的offer,已经入职入职一周了,同事很nice,leader是一位非常乐于助人的技术大佬,感觉自己这辈子就跟腾讯磕着了。以上的面试题,我自己讲解析答案做了归纳整理,当然也借鉴了不少“百度”高见,整理成了一份PDF,有需要的朋友,可以供以参考,点击这里免费获取


;原文链接:https://blog.csdn.net/star_nwe/article/details/115671643
本站部分内容转载于网络,版权归原作者所有,转载之目的在于传播更多优秀技术内容,如有侵权请联系QQ/微信:153890879删除,谢谢!
上一篇:拿捏链表(三)—— 链表的中间结点 下一篇:没有了

推荐图文


随机推荐