Android:金九银十怎么从中小企业挤进一线大厂?大厂面试题问的深度?

本文讲述了在中型公司面试中,Android开发者应具备的基础技术知识,如HashMap、ConcurrentHashMap的使用,以及多线程和网络编程的理解。同时强调了面试准备的重要性,包括算法基础、JVM理解、面试策略和书籍推荐,以提升进入一线大厂的机会。
摘要由CSDN通过智能技术生成

中型规模的公司有一定研发人员,一般情况下会有5 - 12 Android 开发维护一个 App。团队成员有一定的项目开发经验,不会像小公司经理一样问你:「这个功能会不会做,能不能独立开发App」这种毫无水平的问题。

举个例子,中型规模的团队面试时可能会问到的问题如下:

HashMap 数据结构是怎样的,可以多线程使用吗,多线程需要使用哪些集合?

只要你能回答上以下内容,面试官会微微一笑

数组作为哈希桶,扩容时候已链表形式,超过8个节点结构改为红黑树。不能多线程使用,多线程可以用 ConcurrentHashMap

可能有些面试官会追加继续问:

ConcurrentHashMap 为什么可以多线程使用, jdk 1.7 和 1.8 有何区别

如果能回答

1.7 使用 Reentrantlock , 将哈希桶分段,每个 Segment 作为一个锁粒度

1.8 使用 synchronized , 锁粒度更细,锁对象是每个链表的表头

能往上面的内容聊一个大概,面试官应该会欣慰的认可你的水准。

可以说如果将市面上大部分常见的面试题掌握,那么进入中型的公司是力所能及的。

中型公司一般是 2 轮技术面试,第一轮成员骨干或者组长面,聊个大概水平和深度。第二轮总监或者技术经理面,聊聊项目或者技术。(一般总监不会参与编写Android代码,所以如果问技术,那么问网络相关的可能性最大)。

  • 有学历,有背景(履历不错)

  • 有博客有亮点

  • 掌握常见面试题(java & Android)

  • 平时有记录项目中遇到的问题,并能解决

  • 表达能力强

  • 运气加成,问的都会。

符合上述 3 点或者以上,进入中型公司应该不在话下、游刃有余。

那么怎么挤进一线大厂呢?

腾讯、阿里巴巴、字节跳动、华为、美团、滴滴、百度 …

一线大厂一般有很多部门负责不同的项目,里面不乏知名大学毕业,技术大牛,往往在某一领域已经做到极致,有专门的团队负责某一功能点(性能优化、性能监控、中间件工具组件等),能投入人力物力去做好项目,并且薪酬福利可观,只是工作强度会很大。

在上家公司期间,有幸我们组有位中山大学毕业的小伙计,从他身上看到很多优秀的学习习惯和方法,在这里不得不承认比你优秀的人还比你努力,是什么能让他变得如此优秀?

  • 多写多练,没有捷径 : 知识面广的人一定是不断积累形成的广度,一道难题他能解答,更多的可能在于 1. 这道题他做过 2. 做过相似的题型。 例如 链表中环的检测,没有做过或者了解相似题型的人,是很难能够写出答案的,但实际上它并不难。

  • 善于思考,系统性学习 : 例如网络编程 TCP / UDP 工作中接触的概率不大,大多数人都是冲着面试去学的,百度谷歌一下 TCP / HTTP 面试相关,知道有三次握手、四次挥手滑动窗口等,但很难把这些知识内容关联成网状结构,看了没多久又会忘得差不多。这里我建议系统性学习,从文档、书籍中更全面更系统地了解这些内容,加入到大脑的一个记忆分支中。

  • 不要试水,一步到位 : 人都会有侥幸心理,抱着试试看的态度。编码、学习、或者是面试,没有一次性做到位的决心。事实上重构、重新开始、重新面试都会花费更多的时间。像大厂的面试周期都要半个月或者一个月,没有通过的话不仅浪费时间,而且这段时间心情复杂、焦虑、期盼。因此如果想面试跳槽,尽量一步到位、下定决心,把目标放高一些,进不了一线大厂也能找到一个好的公司。

上次换工作其实只面了两家公司:腾讯和字节跳动。 两家都是内推的方式,如果身边有大厂的朋友,建议内推试试,避免在 HR 这关被筛了简历。 说实话并没有能接受两家都黄了的心里准备,但如果现实残酷,我想我也能找到一家不错的好公司吧。

进大厂需要如何准备面试?

说实话想挤进大厂需要 7 分实力和 3 分机遇,并不是每个部门每个面试官都那么强,也是会有人在大厂里摸鱼或者更多的负责管理相关(软技能强)。

因此我们要做的是不断积累,提升知识面的广度和深度,也就是提升自己通过的概率

大厂面试通常会问答哪些问题?什么样的深度?

  • 广度 : 其实提问的题型大多数能够谷歌或者百度到,或者平时编码能接触到,我建议可以通过整理面试题、整理市场上Android相关书籍目录,罗列出包括网络编程、java、Android都有哪些知识点, 先归纳,再系统性学习。现在网络发达资料齐全的时代,找信息找资料并不难,难的是将这些信息资料分门别类地整理,并消化它们

网上的面试题或者学习资料,建议将它们作为复习目录大纲,每个点都需要找到相关书籍或者文档再深入研究。

下面举个网络相关的面试题,首先我们百度输入 android tcp 面试题, 找一篇文章看看

  • 1.网络分层

  • 2.TCP/IP五层模型

  • 3.三次握手与四次挥手

  • 4.TCP为什么三次握手不是两次握手,为什么两次握手不安全

  • 5.为什么TCP是可靠的,UDP早不可靠的?为什么UDP比TCP快?

  • 6.http协议

  • 10.https

掌握了上面这些网络知识,能通过面试吗?

很遗憾,并不一定能。

举个例子,大厂的网络编程面试题可能如下:

网络编程相关

TCP 三次握手的时间是多少 如何处理数据传输错误 TCP的可靠传输机制是什么 TCP传输的一个报文段有多大 说说滑动窗口和拥塞控制

深度大概如上所述(再深我也不会了…),如果单从网上的面试题或者零散资料去查去看,多数情况是回答不上的。这就需要有两手准备,通过书籍或者官方文档,系统性的学习 TCP / UDP / HTTP ,文章末尾我会有一些书籍文档推荐。

下面举java相关的

java

java 涵盖的知识点一般有: 线程与并发、JVM、集合

集合

HashMap 有哪些高效的运算,如何扩容

答:取key的hashCode值、高位运算、取模运算 当length总是2的n次方时,h& (length-1)运算等价于对length取模,也就是h%length,但是&比%具有更高的效率。可以参考美团的:Java 8系列之重新认识HashMap

线程

Synchronized 和 ReentrantLock 还有生产者消费者也是作为大厂高频的面试题出现,对于 Synchronized 他们问的会更深沉一些。不光要会用 Api , 也需要实现的机制是什么。

Synchronized 的 jvm 实现机制是什么 锁是什么,存储在哪里,包含哪些属性 wait 和 sleep 有什么不同,wait 和 notify 的机制是什么

ReentrantLock 的原理 (CAS + AQS) 公平锁和非公平锁的实现? AQS 核心功能原理分析,内部的数据结构是什么?

可能会有人觉得这些应该是后端的事情,客户端很少会涉及多线程,即使要用,看一下 Api 文档能用就行。

实际上当你了解学习了 ReentrantLock 、AQS ,它们很可能会在后续的知识点产生影响,并且帮助你建立网状知识结构

再说一个很实际的例子,线程池也作为高频的面试题,线程池中有阻塞队列例如 LinkedBlockingQueue , 重要的是 LinkedBlockingQueue 的实现机制就有 ReentrantLock ,而 ReentrantLock 又依赖 AQS。

这就呼应了上面我举的为什么这道难题他能答的原因 1. 这道题他做过 2. 做过相似的题型。

所以在刷面试题或者看书籍文档的时候,不妨换位考虑一下: 如果我是面试官,我会出什么样的题目看起来比较有深度?

---- 谢邀,人在美国刚下飞机

算法

链表中环的检测 ,没有做过或者了解相似题型的人,是很难能够写出答案的

对于算法,多写多练,总结复盘,除非要你去做推荐算法或者人工AI大数据计算,否则Android面试官不会为难你,只会考察一下算法的基本功,代码编程能力。

我总结了下,常规的算法数据结构大概有以下 5 种,你可以选择一招鲜吃遍天,把它们死啃下来。当然,当你开始入门并上手算法题,也会从中找到乐趣和成就感。(这道题我只要 O(1)时间复杂度!不需要额外空间!给你们看看我的题解)

  • 数组与矩阵

  • 链表

  • 栈和队列

  • 字符串

  • 位运算

哪有什么天生如此 只是我们天天坚持。

书籍/文章推荐

网络相关

《计算机网络》(第七版) – 谢仁希 这本书可以看 第五章-运输层, 系统性的学习 TCP/UDP 协议

HTTP 相关的可以看看我的专栏: HTTP系列,面试必备悔无早学 或者订阅极客时间的课程: 透视HTTP协议

附加参考书籍:

计算机网络(原书第7版) : 自顶向下方法 图解TCP/IP(第5版) 图解HTTP


java

以 JVM、线程与并发、集合 为大纲进行知识拓展。

  • JVM: 《深入理解Java虚拟机》-- 周志明 或者阅读我的专栏: 《深入理解Java虚拟机》的读书笔记 , 大厂问的JVM相关问题基本能覆盖到。

  • 线程与并发: 《Java并发编程的艺术》-- 方腾飞 / 魏鹏 / 程晓明

  • 集合 ArrayList、LinkedList、CopyOnWriteArrayList HashMap、LinkedHashMap、ConcurrentHashMap SparseArray、ArrayMap

附加参考书籍: 实战Java高并发程序设计(第2版)

这里推荐氪肝男孩 jsonchao 的 Android面试 Java篇 , 以这篇文章提及的知识点作为复习内容,系统深入的学习 java。


Android

Android 涵盖点比较广,建议以官方文档为主 : Android 开发者指南 ,官方文档很详细并且几乎覆盖所有的 Api ,如果你想学习Jetpack, 也建议从官方文档入手 Android Jetpack ,比大多数博客更权威,是一种不错的知识和资源获取途径。

可以把 Android 分为以下几个大纲

  • Android 基础Api : RecyclerView、Handler、Jetpack…

  • Android 系统源码 : Activity源码、View绘制机制、事件分发机制、Window机制、AMS、WMS、PMS、Binder。

  • Android 第三方库 : Okhttp、Glide、EventBus、ARoute等

  • Android 性能优化 : 卡顿、内存、启动、崩溃、安装包、ANR…

最后

简历首选内推方式,速度快,效率高啊!然后可以在拉钩,boss,脉脉,大街上看看。简历上写道熟悉什么技术就一定要去熟悉它,不然被问到不会很尴尬!做过什么项目,即使项目体量不大,但也一定要熟悉实现原理!不是你负责的部分,也可以看看同事是怎么实现的,换你来做你会怎么做?做过什么,会什么是广度问题,取决于项目内容。但做过什么,达到怎样一个境界,这是深度问题,和个人学习能力和解决问题的态度有关了。大公司看深度,小公司看广度。大公司面试你会的,小公司面试他们用到的你会不会,也就是岗位匹配度。

面试过程一定要有礼貌!即使你觉得面试官不尊重你,经常打断你的讲解,或者你觉得他不如你,问的问题缺乏专业水平,你也一定要尊重他,谁叫现在是他选择你,等你拿到offer后就是你选择他了。

另外,描述问题一定要慢!不要一下子讲一大堆,慢显得你沉稳、自信,而且你还有时间反应思路接下来怎么讲更好。现在开发过多依赖ide,所以会有个弊端,当我们在面试讲解很容易不知道某个方法怎么读,这是一个硬伤…所以一定要对常见的关键性的类名、方法名、关键字读准,有些面试官不耐烦会说“你到底说的是哪个?”这时我们会容易乱了阵脚。正确的发音+沉稳的描述+好听的嗓音决对是一个加分项!

最重要的是心态!心态!心态!重要事情说三遍!面试时间很短,在短时间内对方要摸清你的底子还是比较不现实的,所以,有时也是看眼缘,这还是个看脸的时代。

希望大家都能找到合适自己满意的工作!

进阶学习视频

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


《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》点击传送门,即可获取!
眼缘,这还是个看脸的时代。

希望大家都能找到合适自己满意的工作!

进阶学习视频

[外链图片转存中…(img-U9LLjqhw-1714791819065)]

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

[外链图片转存中…(img-nGgMNFHJ-1714791819068)]
《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》点击传送门,即可获取!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值