内容简介:本文作者链接:
本文作者
作者: 凶残的程序员
链接:
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 的技术问题了解面试者的基础能力,能到达第三轮面试说明基础能力合格,再通过项目问题考察面试者的项目/合作能力,当然如果是在线面试会有可能让面试者写编程题或者算法题。
对于面试者来说,能做的就是提升面试通过率,系统性学习和总结。
人在年轻的时候,最核心的能力是什么?
我认为是:笃定一件事并有耐心长久坚持的能力。
所谓的幸运,就是当你准备好了的时候,机会来了。
推荐阅读 :
推荐一个更贴近 android 场景的启动框架 | Anchors
直面底层:经常用的ViewTreeObserver 背后的原理
扫一扫 关注我的公众号
如果你想要跟大家分享你的文章,欢迎投稿~
┏(^0^)┛明天见!
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- 重构加重写保证版本功能的空中加油
- PyMiner v2.0 Beta版本发布,2021继续加油!
- 书单丨Python加油站,多场景为你助力!
- 从工具切入、提供非油品优惠,油团团能否推动加油站多元化发展
- php – Laravel:一般错误:1615准备好的声明需要重新准备
- 详解Openstack环境准备
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。