太强了!Android开发4年网易三面后拿下offer定薪25k*14.5,涨薪50%

2021-04-13 10:03:47 浏览数 (1)

我的情况

本人很愚笨,坚持梦想才是最重要的,最后你会得到应有的回报。 之前面经中的大神说道“重要的事情说三遍,心态最重要,心态最重要,心态最重要”。

在这里我就不谈心态了,说说硬件,同样重要的事情说三遍

基础最重要。 基础最重要。 基础最重要。

当你的基础知识好到让面试官怎么都问不倒的时候,那你离offer就很近了。

好了,铺垫已经做好了,接下来就直接上面试干货了。

一面

1.算法题:123 -> 321 超出Integer最大值范围,正负数怎么处理 2.hashmap put()底层原理,发生冲突时,如何去添加(顺着链表去遍历,挨个比较key值是否一致,如果一致,就覆盖替换,不一致遍历结束后,插入该位置) 3.Handler内存泄漏与Looper 4.Message为什么没有被回收 5.手写单例模式,volatile作用 ,为什么要双重判空,作用是什么,一句话概括 6.为什么要泛型擦除,写一个泛型方法和一个泛型类 7.一张图片加载到内存,如何计算图片占用内存的大小,ARGB8888与ARGB565有什么区别 8.APK打包流程 9.四种引用方式,他们之间的区别,什么时候用到弱引用

总结:

1.算法题最主要的目的是得出结果,不要总是纠结于过去刷过题的思路,特别是当时的思路无法理清时,就应该立马变换一种思路去解决,哪怕是时间复杂度和空间复杂度都比较高,而不是迟迟卡在那里。 2.将技术点总结成简单的话语,提炼技术要点

二面

1.线程池线程是如何保持线程不被回收的?在for循环里一直循环,循环体内会有take方法阻塞?

2.线程可以多次调用start吗? 会出现什么问题? 为什么不能多次调用start?

3.RecyclerView是怎么优化的

4.MVP是如何实现的,他们之间的关系和职责

5.MVVM是如何实现的? ViewModel的底层原理

6.热修复框架底层的原理,Tinker,美团的

7.pid与uid的区别

答:pid是进程ID,PID是进程的身份标志,系统给每个应用分配独一无二的PID(一个应用可能有多个进程,每个进程有唯一的PID) 进程终止后PID会被系统回收,再次打开应用会重新分配一个PID。 UID在linux中是用户的ID,用于权限的管理。在android中,由于android是单用户系统,所以uid被用于实现数据共享。

8.你们的项目架构是怎样的?

9.线程IO密集型和CPU密集型区别及线程数的设置

答:CPU密集型任务:在一个任务中,主要做计算,CPU持续在运行,CPU利用率高,具有该特点的任务称为CPU密集型任务。 IO密集型任务:在一个任务中,大部分时间在进行I/O操作,由于I/O速度远远小于CPU,所以任务的大部分时间都在等待IO,CPU利用率低。 CPU密集型任务:线程数为CPU核数。几个线程可以并行执行,不存在线程切换开销,提高CPU利用率,减少线程切换性能损耗。 IO密集型任务:线程数为CPU核数的2倍,在线程进行I/O操作时,其他线程可以继续使用CPU,提高CPU的使用率。

三面

1.简单自我介绍 2.项目结构,用到了哪些技术? 3.过往经历 4.为什么想换工作? 5.最近看的项目,用的什么技术? 6.北京市2个月摇一次号,摇中的概率是3000分之一,请问需要摇多久,概率能达到百分之50? 7.抛一枚硬币,正反面的概率各占50%,请问,连续两次反面的概率是多少? 正正,正反,反正,反反 ,出现的概率各占四分之一。

面试总结

还是那句话,基础最重要。开发年限和技能固然重要,然而最重要的还是基础牢固,并且思维要灵活,面试官喜欢观察你的反应能力。记住面试官很忙,他们基本不会跟你唠闲嗑,除非你很厉害没啥可问的了,所以回答问题之前一定要分析问题背后他们想了解你什么。如果面试官就是问的很模糊,分析不透,大可直接问面试官你想知道什么,这是没有问题的。

自己对于互联网有一些小小的见解:随着资本的冷却,整个互联网市场也逐渐的冷静下来。Android应用开发从一开始能说几个四大组件的名词,能随便写个监听事件,就能拿到高达上万的月薪的时代了。归根到底并不是工作难找了,而是Android应用开发工程师这个职位已经趋于正常,再也不是没什么技术也能拿高工资的香饽饽。当然这个也不是绝对的,对于中高级的开发人员来说,市场还是比较缺少的,尤其是知名企业对于招聘员工来说,不仅要求有过硬的技术,还要求有高素质,好的教育背景等等。总的来说,高工资可以给你,但是前提条件是你要足够优秀,或者说让面试官觉得你很优秀。

其实面试过程就是一个把你自己推销给别人的过程,对于我们来说就是要让面试官感觉你技术好,有培养价值。感慨有点多了,还是来点干货吧,大概列举一下每一轮面试的大概范围和深度,但是也不是绝对的,还是要看具体情况。

笔试

对于社招的程序员来说,基本上不需要笔试,但是也有公司是需要的,例如:今日头条和网易都有笔试。笔试都是比较基础的一些知识,Java、Android等方面的,一般不会有网络,计算机等方面的笔试,一般情况下大家都能答出来。

一、二面

近一段时间的面试经历来说,一、二面的问题没有什么很大的区别(公司基本上都有3面技术面,但是也有例外,我在网易就是2面技术面。),基本上都是一线开发人员。主要考察你是否有牢固的基础知识和是否在平常开发中能熟练使用。

  • 是否能讲解清楚你所做的项目,以及使用到的相关知识。
  • Android基础知识
  • Java基础知识,大概是多线程,线程安全,集合类,JVM,类相关知识等。
  • Android一些源码的阅读
  • 优秀的第三方框架源码阅读
三、四面

一般公司都是三轮技术面,但是也有四轮技术面的,不过不多。很多公司基本上每一轮面试官都会记录他所询问的问题,以便给下一轮面试官作参考,还有就是避免对同一个知识点多次询问。所以到了这轮面试,基本上不会再询问比较基础的知识。

  • 会从两个方面考察,
    • 广度:比较新的技术(Rxjava,插件化等),JVM,GC,网络,数据库,Android(一般不会询问之前面试官问过的问题)。
    • 深度:一般会通过1或2个问题来考察,例如:map接口下都有什么子类->hashmap和hashtable区别->hashmap实现原理->怎么解决hash冲突->是否了解concurrentHashmap->concurrentHashmap实现原理->volatile实现原理(concurrentHashmap读是不加锁的,使用到了volatile)。
  • 项目中的贡献,所做的优化。
  • 设计能力,基本上不多,这个要看面试的岗位,因为我这里面试的只是高级开发,并不是架构。
  • 工作中的亮点和突出。
hr面

基本上到了这轮,你就算通过面试了。hr会询问一些你的经历,最主要的还是和你商定薪资待遇。在这轮,大家应该要对自己的薪资水平有一个大体的了解,一般都是在原来的工资基础上增长20%~30%的样子,当然,如果你在面试过程中表现非常优秀,也可以不受这个限制。当然如果公司诚心要你,就算你要的工资过高,hr也会委婉的告诉你,不会直接把你pass。

面试前的知识储备 & 复习

接下来分享的系统学习资源以详解各大互联网公司的 Android 常见面试题为主线,从面试的角度带你介绍必备知识点,以及该知识点在项目中的实际应用

帮你在现在的基础上,重新梳理和建立 Android 开发的知识体系。无论是你短期内想提升 Android 内功实力,突破自己工作中的能力瓶颈,还是准备参加 Android 面试,都会在这份资料中有所一些收获。

从架构基础开始,分了8个模块来逐步从基础进阶到架构师的环节:

1、架构师筑基语言基础 重点内容:深入Java泛型 注解深入浅出 并发编程 数据传输与序列化 Java虚拟机原理 反射与类加载 动态代理 高效IO 2、设计思想解读开源框架 重点内容:热修复设计 插件化框架解读 组件化框架设计 图片加载框架 网络访问框架设计 RXJava响应式编程框架设计 IOC架构设计 Android架构组件Jetpack 3、360°全方位性能调优 重点内容:设计思想与代码质量优化 程序性能优化 开发效率优化 4、Android框架体系架构 重点内容:高级UI晋升 Framework内核解析 Android组件内核 数据持久化 5、NDK模块开发(音视频开发系列) 重点内容:NDK基础知识体系 底层图片处理 音视频开发 6、Flutter学习进阶 重点内容:Html5项目实战 Flutter进阶 7、微信小程序开发 重点内容:小程序介绍 UI开发 API操作 微信对接

最后分享一份面试宝典,祝每个人面试顺利。

Android BAT高级开发面试题及答案解析

面试的前一周时间内,就可以开始刷题冲刺了。请记住,刷题的时候,技术的优先,算法的看些基本的,比如排序等即可,而智力题,除非是校招,否则一般不怎么会问。

最后以上内容均免费分享给大家,需要完整版的朋友,点这里可以看到全部内容。或者点击 【这里】 查看获取方式。

0 人点赞