2024我的20家大厂金九银十+秋招详细面试过程!(附面筋+解析+个人总结建议

先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7

深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年最新Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
img
img
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上Android开发知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以添加V获取:vip204888 (备注Android)
img

正文


注意:本文比较长,面试部分可以跳过,需要解析的直接去文章末尾领取,结尾的面试经历与总结都是我的真实经历与感悟,希望可以帮到大家!

准备

首先我需要对我自身进行一个分析,寻找最适合我的准备方法。

个人条件

先说一下秋招开始时的个人的条件吧,毕竟我的方法可能不是每个人都适合的,只能作为参考。

  • 211本科,计算机专业。
  • 有一两个独立完成的个人项目/demo(Android)。
  • 没有获奖经历
  • 没有实习经历。
  • 计算机基础的深度一般,但广度凑合(就是平常上课都有听过,但都不认真)。
  • 很少刷题。
  • 在学校的仿真机器人实验室呆过两年,担任 队长。
优势
  1. 个人项目均是自己认真做完的,可以仔细聊聊,在项目上可以拓展各种知识点。
  2. 在实验室付出了很多心血,对整套架构了如指掌,可以仔细聊聊实验室的经历和收获。
劣势
  1. 学历不够,非985本科或研究生。
  2. 没有实习经历,无法了解到真实的业务场景。
  3. 刷题不够,手撕算法能力不够强。
  4. 计算机基础深度不足,容易被问死。
  5. 项目难度不足,没有太多亮点。
  6. 缺少重量级奖项(acm之类的)。
分析
  • 由于劣势1,2,6,我的简历很难写的出彩,也很难走内推通道。
  • 由于劣势3,4,5,在面试时缺少亮点和深度,无法让面试官留下太深的印象。
  • 由于优势1,2,我在聊个人经历时有很多可以说的内容,可以充分展现我的业务能力和开发基础。
需要做的事
  1. 提高刷题量,增强算法能力。
  2. 在Android方面加深基础,多看面经。
  3. 持续的修改简历,突出亮点。
  4. 增加获奖经历。
  5. 复习科班基础。

过程

  • 为了提高算法能力,我刷完《剑指offer》,了解面试官出题的套路;还在LeetCode上AC了20多道Hard难度的题,在牛客上AC20多道低通过率编程题,加强手撕代码的能力。

  • 为了加强Android基础,我看了以下书目1

  • 《深入理解Java虚拟机:JVM的高级特性与最佳实践》

  • 《Android开发艺术探索》

  • 《Android源码设计模式解析与实战》

  • 《深入理解Android内核设计思想》

  • 《Android开发进阶 : 从小工到专家》

  • 为了提高计算机基础,我复习了以下科目2

  • 计算机网络

  • 操作系统

  • 计算机组成原理

  • 编译原理

  • 在网络上搜集相关面经,主要是BAT TMD NJ的Android岗位的面经,在看面经的时候我会尝试回答每个问题,看看自身掌握如何,不会的及时找到答案并弄懂。

  • 由于对内推不抱希望,我在牛客网上刷大量的笔试题。希望通过提高笔试能力,能尽量拿到参加面试的机会。

  • 关注相关的内推与秋招消息。经常刷牛客、V2EX、知乎、脉脉和各种技术交流群,不放过各种内推或者补录的通知。

  • 拿奖,增加简历亮点。在秋招期间,拿到了国赛三等奖,省赛一等奖,还有普通编程大赛的奖项。虽说奖项的含金量不高,但起码提高了在简历筛选关的通过率。

  • 反复修改简历,不断的试错。

  • 熟悉项目,仔细发掘项目相关的知识点与技术点并掌握它们。比如我的一个项目VectorMap用到了自定义View,我就仔细了解并记住自定义View的相关知识点,像是触摸事件分发的原理,View的绘制流程,Window Activity View之间的关系等等。

  • 通过大量的面试锻炼心态,增强面试稳定性5。尽量做到和面试官谈笑风生,会的讲得清,不会的(心态)稳的住。

面试的大厂

面试题合集

最新整理
  • 简述synchronized?Object;Monitor机制;
  • 简述happen-before规则;
  • JUC和Object;Monitor机制区别是什么;简述AQS原理;
  • 简述DCL失效原因,解决方法;
  • 简述nio原理;
  • jvm运行时数据区域有哪几部分组成,各自作用;
  • gc算法有哪些;gc收集器有哪些;
  • 简述class加载各阶段过程;class;loader有哪些模型;
  • 简述常用的JDK命令行工具;
  • 简述字节码文件组成;
  • 讲讲你平常是如何针对具体的SQL做优化;
  • mysql的存储引擎有哪些,区别;
  • gc:内存模型;
  • gc:垃圾回收;
  • 多线程:如何实现一个定时调度和循环调度的工具类。但提交任务处理不过来的时候,拒绝机制应该如何处理;线程池默认有哪几种拒绝机制;
  • 多线程:如何实现一个ThreadLocal;
  • 说说你了解的一个线程安全队列;
  • Atomic包的实现原理是什么;
  • CAS又是怎么保证原子性的;
  • string分析1000次循环subString用了多少内存;
Android基础
  • 什么是ANR 如何避免它?答:在Android 上,如果你的应用程序有一段时间响应不够灵敏,系统会向用户显示一个对话框,这个对话框称作应 用程序无响应(ANR:Application Not Responding)对话框。用户可以选择让程序继续运行,但是,他们在使用你的应用程序时,并不希望每次都要处理这个对话框。因此,在程序里对响应性能的设计很重要,这样,系统不会显示ANR 给用户。 不同的组件发生ANR 的时间不一样,主线程(Activity、Service)是5 秒,BroadCastReceiver 是10 秒。
    解决方案:
    将所有耗时操作,比如访问网络,Socket 通信,查询大量SQL 语句,复杂逻辑计算等都放在子线程中去,然后 通过handler.sendMessage、runonUITread、AsyncTask 等方式更新UI。无论如何都要确保用户界面操作的流畅度。 如果耗时操作需要让用户等待,那么可以在界面上显示进度条。

  • View的绘制流程;自定义View如何考虑机型适配;自定义View的事件分发机制;View和ViewGroup分别有哪些事件分发相关的回调方法;自定义View如何提供获取View属性的接口;

  • Art和Dalvik对比;虚拟机原理,如何自己设计一个虚拟机(内存管理,类加载,双亲委派);JVM内存模型及类加载机制;内存对象的循环引用及避免;

  • ddms 和 traceView的区别;

  • 内存回收机制与GC算法(各种算法的优缺点以及应用场景);GC原理时机以及GC对象;内存泄露场景及解决方法;

  • 四大组件及生命周期;ContentProvider的权限管理(读写分离,权限控制-精确到表级,URL控制);Activity的四种启动模式对比;Activity状态保存于恢复;

  • 什么是AIDL 以及如何使用;

  • 请解释下在单线程模型中Message、Handler、Message Queue、Looper之间的关系;

  • Fragment生命周期;Fragment状态保存;

  • startActivityForResult是哪个类的方法,在什么情况下使用,如果在Adapter中使用应该如何解耦;

  • AsyncTask原理及不足;ntentService原理;

  • 说说ContentProvider、ContentResolver、ContentObserver 之间的关系;

  • 请介绍下ContentProvider 是如何实现数据共享的;

  • Handler机制及底层实现;

  • Binder机制及底层实现;

  • ListView 中图片错位的问题是如何产生的;

Java基础
  • 集合类以及集合框架;HashMap与HashTable实现原理,线程安全性,hash冲突及处理算法;ConcurrentHashMap;
  • 进程和线程的区别;
  • Java的并发、多线程、 线程模型;
  • 什么是线程池,如何使用? 答:线程池就是事先将多个线程对象放到一个容器中,当使用的时候就不用new * 线程而是直接去池中拿线程即可,节 省了开辟子线程的时间,提高的代码执行效率。
  • 数据一致性如何保证;Synchronized关键字,类锁,方法锁,重入锁;
  • Java中实现多态的机制是什么;
  • 如何将一个Java对象序列化到文件里;
  • 说说你对Java反射的理解; 答:Java 中的反射首先是能够获取到Java 中要反射类的字节码, 获取字节码有三种方法,
    1.Class.forName(className) 2.类名.class 3.this.getClass()。然后将字节码中的方法,变量,构造函数等映射成相应的Method、Filed、Constructor 等类,这些类提供了丰富的方法可以被我们所使用。
  • 同步的方法;多进程开发以及多进程应用场景;
  • 在Java中wait和seelp方法的不同;答:最大的不同是在等待时wait 会释放锁,而sleep 一直持有锁。wait 通常被用于线程间交互,sleep 通常被用于暂停执行。
  • synchronized 和volatile 关键字的作用;答:1)保证了不同线程对这个变量进行操作时的可见性,即一个线程修改了某个变量的值,这新值对其他线程来说是立即可见的。2)禁止进行指令重排序。
  • volatile 本质是在告诉jvm 当前变量在寄存器(工作内存)中的值是不确定的,需要从主存中读取;synchronized 则是锁定当前变量,只有当前线程可以访问该变量,其他线程被阻塞住。
    1.volatile 仅能使用在变量级别;synchronized 则可以使用在变量、方法、和类级别的
    2.volatile 仅能实现变量的修改可见性,并不能保证原子性;synchronized 则可以保证变量的修改可见性和原子性
    3.volatile 不会造成线程的阻塞;synchronized 可能会造成线程的阻塞。
    4.volatile 标记的变量不会被编译器优化;synchronized 标记的变量可以被编译器优化
  • 服务器只提供数据接收接口,在多线程或多进程条件下,如何保证数据的有序到达;
  • ThreadLocal原理,实现及如何保证Local属性;
  • String StringBuilder StringBuffer对比;
数据结构与算法
  • 堆和栈在内存中的区别是什么(数据结构方面以及实际实现方面);
  • 最快的排序算法是哪个?给阿里2万多名员工按年龄排序应该选择哪个算法?堆和树的区别;写出快排代码;链表逆序代码;
  • 求1000以内的水仙花数以及40亿以内的水仙花数;
  • 子串包含问题(KMP 算法)写代码实现;
  • 万亿级别的两个URL文件A和B,如何求出A和B的差集C,(Bit映射->hash分组->多文件读写效率->磁盘寻址以及应用层面对寻址的优化)
  • 蚁群算法与蒙特卡洛算法;
  • 写出你所知道的排序算法及时空复杂度,稳定性;

最后

由于题目很多整理答案的工作量太大,所以仅限于提供知识点,详细的很多问题和参考答案我都整理成了 PDF文件

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加V获取:vip204888 (备注Android)
img

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

系统化的资料的朋友,可以添加V获取:vip204888 (备注Android)**
[外链图片转存中…(img-XXXKk4Ve-1713423569694)]

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 5
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
十是指每年的9月和10月,是求职市场的旺季,也是一年中最好的就业季节。在这个时期,很多公司都会开展招聘活动,包括Java开发岗位。因此,准备一些Java面试题是非常有必要的。根据引用所提到的Java面试题大全,这套面试题被分为六个模块,分别是Java基础面试题、多线程面试题、Redis面试题、数据结构与算法、Java异常面试题和JVM面试题。其中,Java基础面试题涵盖了Java语言的基本知识,多线程面试题关注多线程编程的相关概念和技巧,Redis面试题则涉及到对Redis的理解和使用,数据结构与算法模块考察算法思维和数据结构的应用,Java异常面试题关注Java异常处理机制,而JVM面试题则着重于Java虚拟机的原理和性能调优等方面的知识。由于篇幅限制,无法一一展示所有的面试题,但可以通过引用和引用中提供的方式获取更多的Java面试题。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [2020 年 Java 面试题集锦(十)](https://blog.csdn.net/qq_41770757/article/details/107900873)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [精选2020年大厂高频Java面试真题集锦(含答案),面试一路开挂](https://blog.csdn.net/QAQFyl/article/details/108028787)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值