你准备好了吗?加油呀!

栏目: IT技术 · 发布时间: 5年前

内容简介:本文作者链接:

本文作者

作者: 凶残的程序员

链接:

https://blog.csdn.net/qian520ao/article/details/107515896

本文由作者授权发布。

人在年轻的时候,最核心的能力是什么?

我认为是:笃定一件事并有耐心长久坚持的能力。

所谓的幸运,就是当你准备好了的时候,机会来了。

很认同作者写的话,我一直认为努力与坚持是抓住机会的核心要素,很多我认定有意义的事情,我都会坚持去做。

在这个公众号,我收到过一个比较多的问题就是:「鸿洋,我想知道怎么成为高级、资深研发工程师?」,「我学了 framework,掌握了音视频就是高级研发了吗?」

我现在会回答,这些职级并不是你学了什么东西,你就是了,而且是加入一家职级外界认可的公司,你在这个公司的所做的贡献得到公司的认可,公司赋予你这样的职级,而不是自封的。

所以,说的直白一点,加入一家好的公司,是我们职业生涯中一个很重要的目标。

好了,下面可以看看作者这篇文章咯。

1

概述

转眼距离上一篇学习总结博文已有2个年头,有兴趣的可以看看 

2018年android面试分享和学习总结

https://blog.csdn.net/qian520ao/article/details/79601179

像对于我这种普通平凡的开发来说,想要在编程开发这条路上走的长远,对职业的规划是必不可少的,每个阶段都需要有下一阶段的规划。

该篇文章倾向思考与复盘篇,预计阅读时间为 18 分钟。

2

阶段规划

初入职场 > 小规模公司 > 中型团队开发 > 一线公司团队开发 > 一或二线公司团队管理

如何走出小规模公司?

小规模公司按我理解指的是 0 - 200 人公司,Android 开发 1 ~ 3 个,拍着脑袋做事,团队不稳定,容易整个部门被GC (Garbage Collection)

由于毕业学校很难在简历上发出亮点,再加上零碎的Android知识,毕业后能进一家互联网公司拿着不少的工资已经很快活了,但是短暂的快感带来的是无尽的空虚,而且很容易一叶障目,感觉自己还挺能。

很幸运在 17 年中旬受到阿里棒喝,由于17年开始写博客,Android 自定义贝塞尔曲线  https://blog.csdn.net/qian520ao/article/details/68952079 这篇文章发布到 github 没多久点赞数蹭蹭往上涨,3 个月后阿里突然主动联系到我,邀请我进行电话面试。当时感觉自己还挺能,但现实往往挺残酷,java 相关问题只知道皮毛,很快就败下阵来。

不得不说,好的博客文章能够提升曝光率 ,大厂内推往往有不错的奖励金,如果博客文章写的好,就会有人愿意去内推你,给面试机会。

怎么进入中型公司?

中型规模的公司有一定研发人员,一般情况下会有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 这关被筛了简历。
说实话并没有能接受两家都黄了的心里准备,但如果现实残酷,我想我也能找到一家不错的好公司吧。

3

进大厂需要如何准备

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

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

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

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

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

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

  • 网络分层

  • TCP/IP五层模型

  • 三次握手与四次挥手

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

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

  • http协议

  • https

  • 你准备好了吗?加油呀!

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

很遗憾,并不一定能。

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

网络编程相关

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

深度大概如上所述(再深我也不会了…),如果单从网上的面试题或者零散资料去查去看,多数情况是回答不上的。

这就需要有两手准备,通过书籍或者官方文档,系统性的学习 TCP / UDP / HTTP ,文章末尾我会有一些书籍文档推荐。

下面举java相关的:chestnut:

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

集合

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

答:取key的hashCode值、高位运算、取模运算


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

https://tech.meituan.com/2016/06/24/java-hashmap.html

线程

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

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

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

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

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

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

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

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

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

算法

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

上面说的这句话是很有事实依据的,前Google工程师王争在他的课程里也有提到:

你准备好了吗?加油呀!

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

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

  • 数组与矩阵

  • 链表

  • 栈和队列

  • 字符串

  • 位运算

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

你准备好了吗?加油呀!

4

书籍/文章推荐

网络相关

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

  • HTTP 相关的可以看看我的专栏:HTTP系列,面试必备悔无早学 https://blog.csdn.net/qian520ao/category_9390810.html

  • 或者订阅极客时间的课程: 透视HTTP协议

附加参考书籍:

  • 计算机网络(原书第7版) : 自顶向下方法

  • 图解TCP/IP(第5版)

  • 图解HTTP

java

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

JVM:

  • 《深入理解Java虚拟机》-- 周志明

  • 或者阅读我的专栏: 《深入理解Java虚拟机》的读书笔记 , 大厂问的JVM相关问题基本能覆盖到。 https://blog.csdn.net/qian520ao/category_9271488.html

线程与并发:

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

集合:

  • ArrayList、LinkedList、CopyOnWriteArrayList

  • HashMap、LinkedHashMap、ConcurrentHashMap

  • SparseArray、ArrayMap

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

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

https://juejin.im/post/6844904079152381959

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…

按照上面大纲展开拓扑结构学习,最终形成知识大网。当然每个知识点都需要深入探索

Android 系统源码 可以尝试看看我的Android源码专栏 《Android源码分析系列》 ,不仅有源码分析,而且有关联有总结,容易形成网状知识结构。 https://blog.csdn.net/qian520ao/category_7292173.html

Android 性能优化 直上云霄的 Android开发高手课 , 作为应用的性能优化可以说是一门相当优秀且卓越的课程。

附加参考书籍:

  • 《Android开发艺术探索》

  • 《深入理解ANDROID 卷3》

  • 《Android进阶解密》

算法

算法没有什么窍门,多学多练多总结

训练阶段可以按照

  • 《算法 第4版》 学习数据结构和算法思想 , 或者按照极客时间上王争的 数据结构与算法之美 课程来学。

  • 预备了理论知识后开始编码上手, 先按照 《剑指offer》 这本书的算法题目在牛客网上刷题 牛客网–剑指Offer

  • 可以说当你把《剑指offer》算法题都刷完了,算法这一关的通过率可以达到 60%。如果想要有更高的造诣,那就按照Leetcode 题解 - 目录上整理的题目大纲以及解题思路,更全面系统的提升算法能力。到达这一步,算法面试的通过率可以达到 90% 。

4

写在最后

这篇博客主要在于总结和复盘,所以没有涵盖太多的面试题。

更多的是提供大厂技术面试的一个方向,他们如何考察面试者的水平。可以说大厂会系统性的筛选面试者,一二轮面试通过 java、Android 的技术问题了解面试者的基础能力,能到达第三轮面试说明基础能力合格,再通过项目问题考察面试者的项目/合作能力,当然如果是在线面试会有可能让面试者写编程题或者算法题。

对于面试者来说,能做的就是提升面试通过率,系统性学习和总结。

人在年轻的时候,最核心的能力是什么?

我认为是:笃定一件事并有耐心长久坚持的能力。

所谓的幸运,就是当你准备好了的时候,机会来了。

推荐阅读

开发一个 IM App 需要会多少知识点?

推荐一个更贴近 android 场景的启动框架 | Anchors

直面底层:经常用的ViewTreeObserver 背后的原理

你准备好了吗?加油呀!

扫一扫  关注我的公众号

如果你想要跟大家分享你的文章,欢迎投稿~

┏(^0^)┛明天见!


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

High Performance Python

High Performance Python

Andrew Lewis / O'Reilly Media, Inc. / 2010-09-15 / USD 34.99

Chapter 1. Introduction Section 1.1. The High Performance Buzz-word Chapter 2. The Theory of Computation Section 2.1. Introduction Section 2.2. Problems Section 2.3. Models of Computati......一起来看看 《High Performance Python》 这本书的介绍吧!

随机密码生成器
随机密码生成器

多种字符组合密码

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具

UNIX 时间戳转换
UNIX 时间戳转换

UNIX 时间戳转换