最新BAT等大厂Android岗面经分享,降妖除魔金刚经,android面试题app

小结

有了这么多优秀的开发工具,可以做出更高质量的Android应用。

当然了,“打铁还需自身硬”,想要写出优秀的代码,最重要的一点还是自身的技术水平,不然用再好的工具也不能发挥出它的全部实力。

在这里我也分享一份大佬自己收录整理的Android学习PDF+架构视频+面试文档+源码笔记,还有高级架构技术进阶脑图、Android开发面试专题资料,高级进阶架构资料这些都是我闲暇还会反复翻阅的精品资料。在脑图中,每个知识点专题都配有相对应的实战项目,可以有效的帮助大家掌握知识点。

总之也是在这里帮助大家学习提升进阶,也节省大家在网上搜索资料的时间来学习,也可以分享给身边好友一起学习

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

需要这份系统化学习资料的朋友,可以戳这里获取

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

至到我面试上了大厂,然后结束,面完了:网易、oppo、拼多多、滴滴、优酷、蘑菇街,结果都是凉凉(内心还是很虚的,所以先找了些规模偏小的大厂下手)。总体的一个感觉就是,感觉面试官问的感觉都会,但是就是卡在喉咙里面说不出来,问到一些底层,源码方面的东西,更是脑子一片空白,有个面试官甚至反问我,“你之前的16k是怎么拿到的?”。准备还是太不充分了,突然意识到,随后在10月份开始降低了面试的频率,开始复习,从java基础到底层源码,该背的背,该写的写,并在每次面试之后记录下面试官的问题,回去做复盘和延伸,实践出真知。

落定

==

功夫不负有心人,经过两个多月的学习提升和面试“实践”,趁着“金三银四”这股东风,在二月中旬拿到了字节的offer,除了自己的努力之外,可能还有一部分原因就是字节最近一直在扩大招聘吧(手动狗头),让我有了“趁虚而入”的机会。定薪25k,每天都有免费下午茶,还有不限量的零食自取,21点以后车费报销,996的“福报”我在程序员本命年拿到了(996+1024=2020)。

这篇面经分享文章一直等到现在才写,一个原因是刚进公司没多久,自然要表现出对“福报”的感恩戴德,抽不出时间来再做总结分享。还有一个原因就是自己都不确定自己分享到底有没有价值或者是借鉴意义,到现在还一直感觉自己是以一种“幸运儿”的身份进来的,毕竟之前面试的大厂没有一个拿到offer的。不过也可能这就是传说中的“越努力越越幸运吧”!

之前复习的学习笔记包括各大厂的面试题面经,为了方便自己复盘和系统化的学习,都做了归纳如下:

一、Java 基础相关

===========

1.1 数据结构与算法


1.1.1 常用的数据结构有哪些?

1.1.2 数组

(1).如何在一个1到100的整数数组中找到丢失的数字?

(2).如何在给定的整数数组中找到重复的数字? (小米)

(3).如何在未排序整数数组中找到最大值和最小值?(字节跳动)

(4).在Java中如何从给定数组中删除多重复制?

(5).大数相加(今日头条)

1.1.3 链表

(1).那查询第一个跟倒数第二个呢?(这就不一样了,第一个直接给了头结点,倒数第二个需要 从倒数

第一个开始查询,走两步) (腾讯)

(2).arrayList底层原理 (滴滴 字节跳动)

(3).如何在一次遍历中找到单个链表的中值?(中国平安)

(4).如何证明给定的链表是否包含循环?如何找到循环的头节点? 相关知识点: 链表 (优酷)

(5).两个有交叉的单链表,求交叉点 (华为)

(6).如何得到单链表的长度? (360)

(7).如何在不使用递归的情况下逆转单链表?(小米/美团)

(8).怎么判断链表有环? (滴滴)

1.1.4 队列&堆栈

(1).如何使用栈实现队列的功能?(广州荔枝FM)

(2).两个栈实现一个队列(蘑菇街)

(3).两个队列实现一个栈 (腾讯)

(4).对比一下队列和栈,以及它们底部实现 (腾讯)

1.1.5 二叉树

(1).如何在给定的二叉树中执行先序遍历?(百度)

(2).如何实现后序遍历算法? (百度)

(3).如何在给定数组中执行二分法搜索? (苏宁)

(4).已知前序遍历为{1,2,4,7,3,5,6,8},中序遍历为{4,7,2,1,5,3,8,6},它的二叉树是怎么样的? ( 58)

(5).输入两棵二叉树 A 和 B,判断 B 是不是 A 的子结构。 (爱奇艺)

(6).请实现两个函数,分别用来序列化二叉树和反序列化二叉树 (YY)

(7).平衡二叉树和红黑树的区别?(字节跳动)

(8).什么是平衡二叉树,它有什么特征 (美团)

(9).B 树,B+树

1.1.6 HashMap

(1).HashMap的底层原理是什么?线程安全么? (百度 美团)

(2).HashMap中put是如何实现的? (滴滴)

(3).谈一下hashMap中什么时候需要进行扩容,扩容resize()又是如何实现的?

(4).什么是哈希碰撞?怎么解决? (滴滴 美团)

(5).HashMap和HashTable的区别 (小米)

(6).HashMap中什么时候需要进行扩容,扩容resize()是如何实现的? (滴滴)

(7).hashmap concurrenthashmap原理 (美团)

(8).arraylist和hashmap的区别,为什么取数快?(字节跳动)

1.1.7图

(1).旋转输出矩阵

(2).给定一个矩阵 int matrixA[m][n],每行每列都是增序的,实现一个算法去寻找矩阵中的某个元 素 element. 搜狗

1.1.8排序算法有哪些?

(1).top-k排序(堆排序,位图法) (美团)

(2).冒泡排序的手写 (华捷艾米)

(3).堆排序算法的手写 (华捷艾米)

(4).椭圆形场地有两个赛道,可以同时提供两匹马比赛,两匹马比赛后,可以获知两匹马中跑得 快的那匹马,但是没有计时工具。问题,如何最优的算法(比赛次数最少),获知10匹马中速 度最快的三匹马 (阿里)

(5).输入一个整型无序数组,对堆排序的方法使得数组有序 (阿里)

(6).如何使用快速排序算法对整数数组进行排序? (CVTE)

1.1.9 查找算法

(1).有序数组的二分查找算法(百度)

1.1.10 串

(1).给定一个字符串,请你找出其中不含有重复字符的 最长子串的长度。 (字节跳动)

(2).给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。

1.1.11 请写出以下算法的时间复杂度

冒泡排序法 插入排序法 堆排序法 二叉树排序法

1.1.12 其他算法

(1).常用的对称加密算法,有什么同? (字节跳动)

(2).如何在无序(有负数)的数组中查找是否存在和为target的两个数组合,twoSum();(字节)

1.2 Java基础


(1).什么情况下会发生栈内存溢出?

(2).如果让你写一段栈溢出的代码你会什么写,一个栈大概有多大,为什么?每个线程都有这样 大小的一个栈吗? (美团)

(3).JVM中一次完整的GC流程是怎样的,对象如何晋升到老年代?

(4).介绍下GC回收机制与分代回收策略。

(5).Java中有几种引用关系,它们的区别是什么?

(6).GC收集算法有哪些?它们的特点是什么?

(7).如何判断一个对象是否被回收,有哪些GC算法,实际虚拟机使用最多的是什么GC算法? (美团)

(8).Jvm内存 结构说一下。

a.描述JVM内存模型。(东方头条)

(9).JVM DVM ART的区别(360)

(10).描述GC机制。Class会不会回收?用不到的Class怎么回收?(东方头条)

(11).StackOverFlow与OOM的区别?分别发生在什么时候,JVM栈中存储的是什么,堆存储的 是什么?(美团)

(12).Java虚拟机和Dalvik虚拟机的区别?

(13).请描述new一个对象的流程。

(14).Java对象会不会分配到栈中?

(15).String, Stringbuffer, StringBuilder 的区别是什么?(东方头条)

a.String StringBuffer StringBuilder在进行字符串操作时的效率;这里主要考察String在内存 中是如何创建的。(字节跳动)

(16).String为什么是不可变的?(字节跳动)

a.String为什么设计成final的?

(17).final 、finally、finalize 区别。

(18).抽象类和接口的区别。

(19).重载和重写的区别 (京东)

(20).什么是值传递和引用传递,Java 是值传递还是引用传递?

(21).String s = new String(“”);创建了几个对象?

(22).java里 equals和== 区别。

(23).try-catch-finally,try里有return,finally还执行么?

(24).Excption与Error区别。

(25).Static class 与non static class的区别。

(26).PathClassLoader与DexClassLoader的区别是什么?

(27).什么是双亲委托机制,为什么需要双亲委托机制?

(28).描述JVM类加载过程。

(29).动态代理是什么?如何实现?

(30).动态代理的方法怎么初始化的?(字节跳动)

(31).CGLIB动态代理(字节跳动)

(32).说说反射的应用场景,哪些框架,原理是什么?

(33).Java泛型的特点与优缺点,泛型擦除是怎么回事?

(34).List能否转为List。

(35).泛型super和extends的区别。

a.说法2:Java 的泛型,<? super T> 和 <? extends T> 的区别。

(36).为什么IO是耗时操作?

1.3 并发编程


(1).假如只有一个cpu,单核,多线程还有用吗 ?(美团)

(2).sychronied修饰普通方法和静态方法的区别?什么是可见性?

(3).锁分哪几类?

(4).CAS无锁编程的原理。(字节跳动)

(5).ReentrantLock的实现原理。

(6).AQS原理 (小米 京东)

(7).Synchronized的原理以及与ReentrantLock的区别。(360)

(8).Synchronized在JDK1.8之后做了哪些优化 (京东)

(9).Synchronized static与非static锁的区别和范围(小米)

(10).volatile关键字干了什么?(什么叫指令重排) (字节跳动)

(11).volatile 能否保证线程安全?在DCL上的作用是什么?

(12).volatile和synchronize有什么区别?(B站 小米 京东)

(13).两个线程用不同的对象,怎么样?(字节跳动)

(14).什么是守护线程?你是如何退出一个线程的?

(15).sleep 、wait、yield 的区别,wait 的线程如何唤醒它?(东方头条、字节跳动)

(16).sleep是可中断的么?(小米)

(17).实现非阻塞式生产者消费者(字节跳动)

(18).如何开启一个线程,开启大量线程会有什么问题,如何优化?(美团)

(19).线程生命周期。

(20).ThreadLocal是什么?

(21).AyncTask的原理。

(22).AsyncTask中的任务是串行的还是并行的?

(23).线程池管理线程原理。

(24).线程池的相关参数,有哪些类型的线程池,线程池任务如何调度,任务队列只是先进先出 的队列吗,任务有优先级怎么办,知道优先级反转吗? (美团)

(25).有三个线程T1,T2,T3,怎么确保它们按顺序执行?

(26).Android中操作多线程的方式有哪些?

(27).怎样获取当前线程是否是主线程 (字节跳动)

(28).HandlerThread是什么?

(29).线程间如何通信?

(30).RxJava线程切换原理,RxJava1和RxJava2的区别有哪些?

1.4 网络编程


(1).描述TCP三次握手与四次挥手的过程与意义。

a.TCP的三次握手过程?为什么会采用三次握手,若采用二次握手可以吗?

b.三次握手为什么不是两次一次 五次六次(美团)

(2).TCP与UDP的区别是什么?(腾讯)

(3).Http与Https的关系是什么?

(4).SSL握手的过程。

(5).Http的post与get请求的区别是什么?

(6).输入一个URL到浏览器发生了什么?(美团)

二、Android体系

===========

(1). Acitvity的生命周期是什么样的?

a. Acitvity的生命周期,如何摧毁一个Activity? (美团)

(2). Activity的4大启动模式,与开发中需要注意的问题,如onNewIntent() 的调用;

a. Activity的启动模式,区别 (美团)

b. singleInstance如果不指定栈名,是怎么分配的?(字节跳动)

(3). Intent显示跳转与隐式跳转,如何使用?(美团)

(4). Activity A跳转B,B跳转C,A不能直接跳转到C,A如何传递消息给C?(美团)

(5). Activity如何保存状态的?

(6). 请描述Activity的启动流程,从点击图标开始。(B站)

a. APP是怎么启动的?

. 启动一个Activity的流程分析

(7). Service的生命周期是什么样的?

a. Service两种生命周期以及区别

(8). 你会在什么情况下使用Service?

尾声

你不踏出去一步,永远不知道自己潜力有多大,千万别被这个社会套在我们身上的枷锁给捆住了,30岁我不怕,35岁我一样不怕,去做自己想做的事,为自己拼一把吧!不试试怎么知道你不行呢?

改变人生,没有什么捷径可言,这条路需要自己亲自去走一走,只有深入思考,不断反思总结,保持学习的热情,一步一步构建自己完整的知识体系,才是最终的制胜之道,也是程序员应该承担的使命。

附上:我们之前因为秋招收集的二十套一二线互联网公司Android面试真题(含BAT、小米、华为、美团、滴滴)和我自己整理Android复习笔记(包含Android基础知识点、Android扩展知识点、Android源码解析、设计模式汇总、Gradle知识点、常见算法题汇总。)

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

需要这份系统化学习资料的朋友,可以戳这里获取

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

终的制胜之道,也是程序员应该承担的使命。

附上:我们之前因为秋招收集的二十套一二线互联网公司Android面试真题(含BAT、小米、华为、美团、滴滴)和我自己整理Android复习笔记(包含Android基础知识点、Android扩展知识点、Android源码解析、设计模式汇总、Gradle知识点、常见算法题汇总。)

[外链图片转存中…(img-Rz2klZXE-1715371876115)]

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

需要这份系统化学习资料的朋友,可以戳这里获取

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

  • 27
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值