先说一下个人基本情况,北京渣一本大三学生,计算机科学与技术专业。主要学的Android开发,所以投的岗位都是Android开发工程师。
今年开始准备找实习,投了知乎,内推了阿里、京东、B站、百度、网易。
阿里、京东都没有收到面试,知乎Skype面试,B站、百度电话面试,网易现场面。都是在二面被拒,网易三面,然后备胎了,前几天被通知过了,收到了offer。
自己整理了一下被问到的问题,现在分享给大家。
另外我整理了一份Android面试题汇总,由于篇幅原因,在这就不作太多展示了,这份面试集锦的整理也花费了我很多时间,有需要的朋友可以私信我获取。
知乎面试前hr会事先跟你电话确定面试时间,然后把你的Skype账号给hr,到时候面试官会加你好友,然后开始面试。知乎的招聘信息在这里
一面
1、手写算法题。猫扑素数;1到n,求1的个数;单词反转;
2、Activity的加载模式。
standard,singleTop,singleTask,singleInstance。
3、什么时候会用到singleTask?
在MainActivity的时候用到
4、Handler机制?
5、一个线程是否只有一个Looper?
6、如何保证一个线程只有一个Looper?
7、多线程的方式有哪些?
8、ANR异常发生条件
9、如何分析ANR?
10、自定义View和ViewGroup
11、事件处理:分发,拦截,处理。
12、GC算法
13、View动画,属性动画,帧动画。再说下View和属性动画区别。
二面
1、OkHttp原理?
2、Retrofit原理?为何用代理?代理的作用是什么?
3、ButterKnife原理?用到反射吗?为什么?
4、ANR异常如何查找并分析?
5、JVM内存模型?性能调优?
6、垃圾搜集算法有哪些?G1算法?
7、Http和Https的区别?
8、加密算法有哪些?对称加密和非对称加密的区别?
9、TCP的三次握手?两次行不行?为什么?TCP攻击知道吗?如何进行攻击?
10、内存优化如何做?
11、看过那些源码?
12、会对代码进行review吗?何时review?怎么review?
13、项目中遇到的让你棘手的问题?多久解决,怎么解决?
14、平时如何学习?何时学习?怎么学习?学习渠道?
一面
1. 细聊项目,项目中遇到的问题和解决方法
2. 多线程同步、互斥相关知识
3. 如何在海量日志中找到指定时刻的日志
4. 介绍B站客户端的日常工作
二面
1. 三次握手
2. TCP UDP区别、使用场景
3. 既然使用UDP做视频聊天,在视频聊天时,丢包了应该怎么处理
4. 设计一个缓存,让查询尽可能落在缓存上
5. 智力题 如何估算上海上空现在的飞机数目
一面
1.自我介绍,然后针对项目提问,问题都是我没想过的,挺尴尬的
2.下载音乐的时候json类型的数据出现错误怎么办,项目会崩溃吗?网络不好的时候怎么办?QQ音乐没有反爬措施吗?
3.java多线程了解多少,怎么让线程按顺序执行,刚开始说用锁+Thread.sleep,面试官说不对,
4.然后又说了join,看起来好像是认可了,也没追问了
5.线程池有几种队列,这个我真的忘记了…随便说了俩
6.Activity生命周期
7.怎么停止一个线程
8.进程间通信 handler了解吗?只让说用法,也没让说原理
9.无算法题无反问,告诉我不要退出去接下来二面
二面
一上来第一个问题就让我挺尴尬的,问我笔试题为啥6分。。。楼主当时笔试进去瞅了一眼看到太难,做了两道直接退了,说状态不好巴拉巴拉一堆,面试官还笑了,然后问我今天状态怎么样
1.青蛙跳台阶。写完还非说我写的不对,我明明写对了哇,然后解释了一会面试官才承认我写对了,但是又说我没有处理边界条件,吐血
2.不用加减乘除做加法。只用说不用写
3.自认为自己的java水平能打几分
4.Activity生命周期
5.view和surfaceView了解吗 view的绘制流程
6.TCP、UDP了解吗
7.怎么停止一个线程
8.安卓进程间通信
9.安卓中的内存共享了解吗?不了解
10.项目中用到sharedpreference吗?不同进程怎么操作sp?没用到,不知道
11.java、安卓中的内存泄漏、内存溢出问题
12.flutter了解过吗
13.JNI了解吗?不了解
14.linux里面的命令原理了解吗?命令都不记得了,更别提原理了。。。
15.让你从零开始一个项目,流程是什么
16.反问:
一面
1、多线程断点续传原理
(1)所谓的断点续传就是指:文件在传输过程式中被中断后,在重新传输时,可以从上次的断点处开始传输,这样就可节省时间。在这里有两个关键点,其一是检测本地已经下载的文件长度和断点值;其二是在服务端调整文件指针到断点处。
(2)实现方法:我们用一个简单的方法来实现断点续传的功能.在传输文件的时候创建一个临时文件用来存放文件的断点位置在每次发送接受文件时,先检查有没有临时文件,如果有的话就从临时文件中读取断点值,并把文件指针移动到断点位置开始传输,这样便可以做到断点续传了
2、统计启动时长和如何优化冷启动时间
3、ThreadLocal 原理
4、谈谈classloader
5、泛型是什么以及在项目中的应用
6、handler发消息给子线程,looper怎么启动
7、down、move、up事件的传递
8、activity栈的应用场景
(1)singleTop 适合接收通知启动的内容显示页面。例如,某个新闻客户端的新闻内容页面,如果收到10个新闻推送,每次都打开一个新闻内容页面是很烦人的。
(2)singleTask 适合作为程序入口点。例如浏览器的主界面。不管从多少个应用启动浏览器,只会启动主界面一次,其余情况都会走onNewIntent,并且会清空主界面上面的其他页面。之前打开过的页面,打开之前的页面就ok,不再新建。
(3)singleInstance 适合需要与程序分离开的页面。例如闹铃提醒,将闹铃提醒与闹铃设置分离。singleInstance不要用于中间页面,如果用于中间页面,跳转会有问题,比如:A -> B (singleInstance) -> C,完全退出后,在此启动,首先打开的是B。
二面
1、static synchronized 方法的多线程访问和作用,同一个类里面两个synchronized方法,两个线程同时访问的问题
2、内部类和静态内部类和匿名内部类,以及项目中的应用
3、封装view的时候怎么知道view的大小
4、arraylist和linkedlist的区别,以及应用场景
区别:ArrayList是基于数组实现;LinkedList是基于双链表实现的
使用场景:
5、怎么启动service,service和activity怎么进行数据交互
6、下拉状态栏是不是影响activity的生命周期,如果在onStop的时候做了网络请求,onResume的时候怎么恢复
7、进程间通信的方式
8、HashMap实现原理,ConcurrentHashMap 的实现原理
9、java注解以及Android中的应用&APT
10、计算一个view的嵌套层级
hr面
ps:吃过网易猪肉
漫漫Android开发之路,你我只是其中的一小部分……只有不断的学习、进阶,才是我们的出路!才跟得上时代的进步!
最后把大牛收录整理的一份学习资料免费分享给大家,内容包含:Android学习PDF+架构视频+源码笔记,高级架构技术进阶脑图、Android开发面试专题资料,高级进阶架构资料 这几块的内容
这些都是我现在闲暇还会反复翻阅的精品资料。里面对近几年的大厂面试高频知识点都有详细的讲解。相信可以有效的帮助大家掌握知识、理解原理。
分享给大家,非常适合近期有面试和想在技术道路上继续精进的朋友。也是希望可以帮助到大家提升进阶
相信它会给大家带来很多收获。如果你有需要的话,可以点击获取!
喜欢本文的话,不妨顺手给我点个赞、评论区留言或者转发支持一下呗~