背了几十份面经还是连挂6个面试,最终拿下腾讯后总结了这些坑点
wptr33 2025-05-23 20:38 23 浏览
刚开始面试的时候我真的是处处碰壁,面一家挂一家,面完之后怀疑自我,是不是自己真的太菜了找不到工作。工作本身就是双向选择,一家不行再换一家,总有合适的,千万不要因为别人的一句话就全盘否定自己,一定要自信。
面试战况(时间排序)
- 最右二面挂
 - 猿辅导一面挂
 - 伴鱼offer(两轮技术+一轮HR)
 - 顺丰二面挂
 - 百度二面挂
 - 微博一面挂(一面就问意向薪资,面的还行,要多了没有后续了)
 - 老虎证券offer(两轮技术+一轮HR)
 - 滴滴一面挂
 - 快手简历挂
 - 字节offer(三轮技术+一轮HR)
 - 美团HR面(三轮技术)
 - 腾讯HR面(三轮技术)
 
非技术准备方面
1.离职原因方面
其实大家换工作无非钱少了/环境不好/没成长三种原因,但是面试在讲离职原因的时候一定不要过于实诚,请尽量往个人发展这个方向上靠拢,切忌一定不要说现任公司的坏话,尤其是跳槽频繁或者像我这种第一份工作不满两年的,一定要想好自己的离职理由,我有几家公司明显技术答的还行,但是因为离职理由挂掉的。
2.简历投递顺序方面
如果你对自己很有信心的话,可以直接投你的意向公司,如果信心不够强烈建议跟我一样先面几家体量不那么大的公司涨涨经验看看现在外面的行情,然后再投自己中意的公司。
3.心态准备方面
既然准备了要离职,就不要被任何其他事物影响心态,心态真的很重要。刚开始面试的时候我真的是处处碰壁,面一家挂一家,后来在一家面试过程中被面试官疯狂嘲讽,面完之后怀疑自我,是不是自己真的太菜了找不到工作。后来也辛亏隔天有一家公司给我发了offer,让我明白了不是自己的问题。工作本身就是双向选择,一家不行再换一家,总有合适的,千万不要因为别人的一句话就全盘否定自己,一定要自信。
4.技术准备方面
刚开始面试的时候是准备把面试过的所有家都写详细的题目出来的,后来发现写了面经发在牛客的都挂了,也不知道是什么奇怪的玄学,后来就没发过了,不过其实面过来面过去就那些问题,就像下边这样整体总结一下吧。
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(老虎证券)
 - 斐波那契数列(美团)
 - 手写DCL单例(字节)
 - 二叉树路径和——从根节点到叶子节点是否有一个路径之和等于给定值(字节)
 - 最短子数组长度——滑动窗口(字节)
 - 手写观察者模式(字节)
 - 两个栈实现队列(字节)
 - 获取一个VIewGroup的最深深度(美团)
 
设计题
设计题这个部分其实大部分并没有标准答案,更多的是看以你的知识量能够想到什么比较好的解决方案。
- 设计进程安全的SharedPreference(字节,腾讯)
 - 设计一个gif加载框架(微博)
 - 一个进程只有读操作,一个进程只有写操作,你怎么设计(微博)
 - 如果一个APP需要有闲时加载任务的能力,你怎么设计(美团)
 - 让你设计一个流式标签布局你怎么做,有哪些要考虑的点(最右)
 - 设计一个下拉刷新的RecyclerView你有几种方法(美团)
 - APP使用经常会有弱网环境,怎么确保APP数据的即使同步更新以及正确性(顺丰)
 - 让你设计一个push的框架,你会怎么设计,考虑到哪些问题(百度)
 - 设计一个检测内存泄漏的框架(腾讯)
 - 设计一个事件总线(最右)
 
项目
在项目上,一定要能做到融汇贯通,不仅从技术上也要从业务上。比如你做过的一个需求,为什么要做这个需求,这个需求的背景是什么,这个需求上线后带来了什么影响或者有哪些收益,虽然你是个技术,但是你能够知道这写得话肯定是更好的。其次在技术细节上,要能知道为什么要这样技术选项,这么做的好处是什么,以及能够横向纵向拓展。
比如说我的项目中有一个地方用JobService实现了定时任务,那么可以横向拓展的点就有,Android中实现定时任务的方式都有哪些,他们都有哪些好处坏处,你的这个场景为什么要选JobService,JobService和普通Service的区别是什么。纵向扩展的话就有,JobService的原理是什么,JobService在参数配置上的一些细节,JobService是不是会严格按照你配置的时间运行。这些都是可以扩展出来的,所以当你在对项目复盘的时候,一定不要只盯着你做的那一部分,还要把自己做的部分横纵拓展一下,这样才能做到无懈可击。
除此之外,良好的表达能力也是非常重要的一环,如果不觉得麻烦的话可以在复盘项目的时候把自己做了什么,为什么这么做打个草稿,自己看自己的逻辑以及表达是否通顺,以此来做调整。
面试前的系统复习路线参考
面试:如果不准备充分的面试,完全是浪费时间,更是对自己的不负责!
接下来分享的系统学习资源以详解各大互联网公司的 Android 常见面试题为主线,从面试的角度带你介绍必备知识点,以及该知识点在项目中的实际应用。
帮你在现在的基础上,重新梳理和建立 Android 开发的知识体系。无论是你短期内想提升 Android 内功实力,突破自己工作中的能力瓶颈,还是准备参加 Android 面试,都会在这份资料中有所一些收获。
1、看视频进行系统学习
前几年的Crud经历,让我明白自己真的算是菜鸡中的战斗机,也正因为Crud,导致自己技术比较零散,也不够深入不够系统,所以重新进行学习是很有必要的。我差的是系统知识,差的结构框架和思路,所以通过视频来学习,效果更好,也更全面。关于视频学习,个人可以推荐去B站进行学习,B站上有很多学习视频,唯一的缺点就是免费的容易过时。
另外,我自己也珍藏了好几套视频,有需要的我也可以分享给你。
2、进行系统梳理知识,提升储备
客户端开发的知识点就那么多,面试问来问去还是那么点东西。所以面试没有其他的诀窍,只看你对这些知识点准备的充分程度。so,出去面试时先看看自己复习到了哪个阶段就好。
- 架构师筑基必备技能:深入Java泛型+注解深入浅出+并发编程+数据传输与序列化+Java虚拟机原理+反射与类加载+动态代理+高效IO
 - Android高级UI与FrameWork源码:高级UI晋升+Framework内核解析+Android组件内核+数据持久化
 - 360°全方面性能调优:设计思想与代码质量优化+程序性能优化+开发效率优化
 - 解读开源框架设计思想:热修复设计+插件化框架解读+组件化框架设计+图片加载框架+网络访问框架设计+RXJava响应式编程框架设计+IOC架构设计+Android架构组件Jetpack
 - NDK模块开发:NDK基础知识体系+底层图片处理+音视频开发
 - 微信小程序:小程序介绍+UI开发+API操作+微信对接
 - Hybrid 开发与Flutter:Html5项目实战+Flutter进阶
 
知识梳理完之后,就需要进行查漏补缺,所以针对这些知识点,我手头上也准备了不少的电子书和笔记,这些笔记将各个知识点进行了完美的总结。
主要内容:
Java 基础(★★)
- 面向对象思想
 - 多态
 - 异常处理
 - 数据类型
 - Java 的 IO
 - 集合
 - Java 多线程
 
Java 高级(★★)
- Java 中的反射
 - Java 中的动态代理
 - Java 中的设计模式&回收机制
 - Java 的类加载器
 
Android 基础(★★★)
- Android 基本常识
 - Activity
 - Service
 - BroadCastReceiver
 - ContentProvider&数据库
 - Android 中的布局
 - ListView
 - JNI & NDK
 - Android 中的网络访问
 - Intent
 - Fragment
 
Android 高级(★★★)
- Android 性能优化
 - Android 屏幕适配
 - AIDL
 - 自定义控件
 - Android 中的事件处理
 - Android 签名
 - Android 中的动画
 - 网络协议
 - 其他
 
3、读源码,看实战笔记,学习大神思路
“编程语言是程序员的表达的方式,而架构是程序员对世界的认知”。所以,程序员要想快速认知并学习架构,读源码是必不可少的。阅读源码,是解决问题 + 理解事物,更重要的:看到源码背后的想法;程序员说:读万行源码,行万种实践。
主要内含微信 MMKV 源码、AsyncTask 源码、Volley 源码、Retrofit源码、OkHttp 源码等等。
4、面试前夕,刷题冲刺
面试的前一周时间内,就可以开始刷题冲刺了。请记住,刷题的时候,技术的优先,算法的看些基本的,比如排序等即可,而智力题,除非是校招,否则一般不怎么会问。
关于面试刷题,我个人也准备了一套系统的面试题,帮助你举一反三:
以上内容均免费分享给大家,需要完整版的朋友,直接转发+点赞+私信回复【资料】一键领取!!!
相关推荐
- oracle数据导入导出_oracle数据导入导出工具
 - 
                        
关于oracle的数据导入导出,这个功能的使用场景,一般是换服务环境,把原先的oracle数据导入到另外一台oracle数据库,或者导出备份使用。只不过oracle的导入导出命令不好记忆,稍稍有点复杂...
 
- 继续学习Python中的while true/break语句
 - 
                        
上次讲到if语句的用法,大家在微信公众号问了小编很多问题,那么小编在这几种解决一下,1.else和elif是子模块,不能单独使用2.一个if语句中可以包括很多个elif语句,但结尾只能有一个...
 
- python continue和break的区别_python中break语句和continue语句的区别
 - 
                        
python中循环语句经常会使用continue和break,那么这2者的区别是?continue是跳出本次循环,进行下一次循环;break是跳出整个循环;例如:...
 
- 简单学Python——关键字6——break和continue
 - 
                        
Python退出循环,有break语句和continue语句两种实现方式。break语句和continue语句的区别:break语句作用是终止循环。continue语句作用是跳出本轮循环,继续下一次循...
 
- 2-1,0基础学Python之 break退出循环、 continue继续循环 多重循
 - 
                        
用for循环或者while循环时,如果要在循环体内直接退出循环,可以使用break语句。比如计算1至100的整数和,我们用while来实现:sum=0x=1whileTrue...
 
- Python 中 break 和 continue 傻傻分不清
 - 
                        
大家好啊,我是大田。...
 
- python中的流程控制语句:continue、break 和 return使用方法
 - 
                        
Python中,continue、break和return是控制流程的关键语句,用于在循环或函数中提前退出或跳过某些操作。它们的用途和区别如下:1.continue(跳过当前循环的剩余部分,进...
 
- L017:continue和break - 教程文案
 - 
                        
continue和break在Python中,continue和break是用于控制循环(如for和while)执行流程的关键字,它们的作用如下:1.continue:跳过当前迭代,...
 
- 作为前端开发者,你都经历过怎样的面试?
 - 
                        
已经裸辞1个月了,最近开始投简历找工作,遇到各种各样的面试,今天分享一下。其实在职的时候也做过面试官,面试官时,感觉自己问的问题很难区分候选人的能力,最好的办法就是看看候选人的github上的代码仓库...
 
- 面试被问 const 是否不可变?这样回答才显功底
 - 
                        
作为前端开发者,我在学习ES6特性时,总被const的"善变"搞得一头雾水——为什么用const声明的数组还能push元素?为什么基本类型赋值就会报错?直到翻遍MDN文档、对着内存图反...
 
- 2023金九银十必看前端面试题!2w字精品!
 - 
                        
导文2023金九银十必看前端面试题!金九银十黄金期来了想要跳槽的小伙伴快来看啊CSS1.请解释CSS的盒模型是什么,并描述其组成部分。...
 
- 前端面试总结_前端面试题整理
 - 
                        
记得当时大二的时候,看到实验室的学长学姐忙于各种春招,有些收获了大厂offer,有些还在苦苦面试,其实那时候的心里还蛮忐忑的,不知道自己大三的时候会是什么样的一个水平,所以从19年的寒假放完,大二下学...
 
- 由浅入深,66条JavaScript面试知识点(七)
 - 
                        
作者:JakeZhang转发链接:https://juejin.im/post/5ef8377f6fb9a07e693a6061目录...
 
- 2024前端面试真题之—VUE篇_前端面试题vue2020及答案
 - 
                        
添加图片注释,不超过140字(可选)...
 
- 今年最常见的前端面试题,你会做几道?
 - 
                        
在面试或招聘前端开发人员时,期望、现实和需求之间总是存在着巨大差距。面试其实是一个交流想法的地方,挑战人们的思考方式,并客观地分析给定的问题。可以通过面试了解人们如何做出决策,了解一个人对技术和解决问...
 
- 一周热门
 
- 最近发表
 - 
- oracle数据导入导出_oracle数据导入导出工具
 - 继续学习Python中的while true/break语句
 - python continue和break的区别_python中break语句和continue语句的区别
 - 简单学Python——关键字6——break和continue
 - 2-1,0基础学Python之 break退出循环、 continue继续循环 多重循
 - Python 中 break 和 continue 傻傻分不清
 - python中的流程控制语句:continue、break 和 return使用方法
 - L017:continue和break - 教程文案
 - 作为前端开发者,你都经历过怎样的面试?
 - 面试被问 const 是否不可变?这样回答才显功底
 
 
- 标签列表
 - 
- git pull (33)
 - git fetch (35)
 - mysql insert (35)
 - mysql distinct (37)
 - concat_ws (36)
 - java continue (36)
 - jenkins官网 (37)
 - mysql 子查询 (37)
 - python元组 (33)
 - mybatis 分页 (35)
 - vba split (37)
 - redis watch (34)
 - python list sort (37)
 - nvarchar2 (34)
 - mysql not null (36)
 - hmset (35)
 - python telnet (35)
 - python readlines() 方法 (36)
 - munmap (35)
 - docker network create (35)
 - redis 集合 (37)
 - python sftp (37)
 - setpriority (34)
 - c语言 switch (34)
 - git commit (34)
 
 
