写在最前面:有时候某人的放弃,将会成就你更好的选择!
刚开始面试的时候我真的是处处碰壁,面一家挂一家,面完之后怀疑自我,是不是自己真的太菜了找不到工作,还是真的是像网上所焦虑的那样,Android开发真的是要凉了?这次跳槽经历让我明白,工作本身就是双向选择,一家不行再换一家,总有合适的,千万不要因为别人的一句话就全盘否定自己、怀疑人生,一定要自信。
最右二面挂
猿辅导一面挂
伴鱼offer(两轮技术+一轮HR)
顺丰二面挂
百度二面挂
微博一面挂(一面就问意向薪资,面的还行,要多了没有后续了)
老虎证券offer(两轮技术+一轮HR)
滴滴一面挂
快手简历挂
字节offer(三轮技术+一轮HR
美团HR面(三轮技术)
腾讯HR面(三轮技术)
其实大家换工作的原因,无非就是马云所说的两种情况:“钱没给到位,心受委屈了”。对我而言,更倾向于前者,再加上考虑到自身成长方面原因。但是面试在讲离职原因的时候一定不要过于实诚,请尽量往个人发展这个方向上靠拢,切忌一定不要说现任公司的坏话,尤其是跳槽频繁或者像我这种第一份工作不满两年的,一定要想好自己的离职理由,我有几家公司明显技术答的还行,但是因为离职理由挂掉的。
如果你对自己很有信心的话,可以直接投你的意向公司,如果信心不够强烈建议跟我一样先面几家体量不那么大的公司涨涨经验看看现在外面的行情,顺便通过面试复盘自己的技术短板,然后再投自己中意的公司。
既然准备了要离职,就不要被任何其他事物影响心态,心态真的很重要。刚开始面试的时候我真的是处处碰壁,面一家挂一家,后来在一家面试过程中被面试官疯狂嘲讽,面完之后怀疑自我,是不是自己真的太菜了找不到工作。后来也幸亏隔天有一家公司给我发了offer,让我明白了不是自己的问题。工作本身就是双向选择,一家不行再换一家,总有合适的,千万不要因为别人的一句话就全盘否定自己,一定要自信。
刚开始面试的时候是准备把面试过的所有家都写详细的题目出来的,后来发现写了面经发在牛客许愿offer的都挂了,也不知道是什么奇怪的玄学,后来就没发过了,不过其实面过来面过去就那些问题,做了下面的归纳总结。
怎么判断一个字符串的字符个数,比如说中文
Java的异常机制,为什么这么设计,什么时候用什么
HashMap,经典的就不一一列举了,说几个可以拓展的
解决hash冲突的方案有哪几种
1.7和1.8有什么区别(链表头插尾插方面)
hashmap高并发场景会怎样
高并发链表成环会有什么问题
hashmap扩容时到底干了什么(位运算过程)
concurrentHashMap原理
String,StringBuilder,StringBuffer
ArrayList多线程下会有什么问题
内部类持有外部类引用的原理是什么
volatile有什么用,原理是什么
为什么会有StackOverflow,stack的大小是多少
虚拟机
Java虚拟机和Android虚拟机有什么区别
Android两种虚拟机有什么区别
类加载过程
内存模型
四种引用类型
class文件格式
synchronized底层实现原理
synchronized放在普通方法和静态方法上有什么区别
synchronized的锁实际是保存在哪里的(对象头)
双亲委派机制,为什么要用双亲委派机制,如何打破双亲委派机制
内存收集整理的算法
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,有需要的朋友,可以供以参考,点击这里免费获取!
不知道各位友友们是否遇到这种情况我遇到很久了一直没有注意如何解决都直接是run...
blockquote定义和用法 blockquote 标签定义块引用。 blockquote 与 /blockquote ...
播种希望 今天讲的内容不是纯纯的技术干货, 而是笔者在做开源项目中用到的一些工...
作者介绍 李为,现任金融行业核心业务系统DBA,主要涉及DB2、Oracle、MySQL等数...
文章目录 操作系统简介篇 解释一下什么是操作系统 操作系统的主要功能 软件访问...
Fix(number) 和 Int(number) 都是返回数字的整数部分。 number 为正数时,二者返...
用到CSS样式和HTML标签元素 为了对html不同标签加边框虚线,我们选择几个常用标...
%蒙特卡罗仿真Rayleigh信道软判决2FSK % Eb2; ? ? %每比特的能量,能量越大卷积译...
参考官网: https://cn.vuejs.org/v2/guide/components-registration.html 在日...
获得所有的记录 %@page language="java" contentType="text/html;charset=gb2312...