一、金三银四该换工作吗?
马上就又要到金三银四求职的黄金期了,很多资深面试官都说其实他们每天都要面试考核很多应聘者,但是通过的人却寥寥无几。他们有几个面试观点可能比较重要,对你的面试和职业规划或许会很有帮助,在这分享给你:
现在的你,到底该不该换工作?
待遇薪资、公司平台、团队氛围、老板实力等等这些因素,综合影响着你的工作和发展,如果没考虑清楚这些就去换工作,你的沉没成本就太大了,每次都重新开始,毫无积累。
应聘是需要准备的。
首先是简历,要用自己的经历去聊,而不是用文字写。并且不要打自己的脸,精通就是精通,熟悉就是熟悉,了解就是了解。还有,面试前要准备哪些技能知识?要不要准备算法题?以及如何表达你做过的项目?这些你都需要好好地准备一下。如果你没有准备的话,那么被pass掉的概率会非常大。
仅仅是做项目变现的公司,该去么?
这样的公司的核心竞争力主要是利用自己的人脉和关系拉项目,“做一票、赚一票”。他们并不创造新事物,只有创造新事物的公司才能称得上是创业工作。如果你想加入创业公司,很多时候靠的是一股子冲劲儿,直接点说就是赌,你想清楚了吗?
很多人没有意识到“慢性死亡”的过程。
你当下可能身处一家不错的公司,薪水也很高,工作也很舒心,好像没必要折腾。但在老板的角度看,这是个简单的性价比问题。时间不断流逝,如果你只是资历更深了,但是能力没有迈上新的台阶,那么相比于一个更加年轻的程序员,哪个性价比更高?答案是显而易见的。
这些问题是不是让你恍然大悟,又心生惶恐。面试不等同于考试,搞定考核范围内的所有内容,考试也就八九不离十了。但面试是人与人的沟通,你也可以看成是一次博弈。面试流程是怎样的?面试官在想什么?更重要的是,面试更应该站在职业规划的层面去看待,去长期规划。
眼看年底到了,肯定很多人都跃跃欲试,准备跳槽到大厂,升职加薪。阿里巴巴、腾讯、字节跳动,这些大厂技术面试官的选人思路是怎样的?废话不多说,先看看这份《大厂面试攻略》大纲吧,可能正是你面试大厂需要的。
二、面试准备
想要成功面试,先要弄懂面试过程
一般面试分为 笔试 技术面试 人事面试
一般来说大厂技术岗有 4、5 轮的面试,最后一面会有 HR 参与,最后一面之前一般是电话面试或视频面试,面的都是技术。
一般来说一面是跟岗位直接相关的,例如你面试 Android 那么会考察你的 Android 技能,后续的几轮也会是相关的,但是可能会更加深入也可能会更加基础,例如考察数据结构、计算机网络,都不太一定。
面试你的人可能包括你未来的直接 leader 以及他的 leader,以及一些交叉面面试官,通常会是架构组或者兄弟团队。
每轮面试大约 40~60 分钟,level 越高时间越长,从面试开始到拿到 offer 整个流程可能会长达一个月,所以得耐心一点。
如果你只面试了 10 来分钟,那么基本上你就是面挂了。
面试官的面试逻辑是什么?
程序员面试,考查的能力一般可以分为两种:
- 技术能力
- 非技术能力
技术能力一般可以理解为编码能力、系统分析与设计能力,而非技术能力包括沟通与协作能力、组织与团队管理能力。
从事程序员行业大多数人相对来说会内向一些,思维也会更严谨、更富有创造力。企业招聘程序员要求他能和团队一起完成开发任务,所以一般会重点从技能水平、学习能力、团队合作及沟通能力等几个方面考察程序员。
其中技术始终是面试成败的决定因素,也是对程序员最基本的要求,现在很多企业会通过笔试这一环节来辅助考察求职者的技术水平。技能的考察主要看求职者技能匹配度、对技术发展趋势的了解。
面试紧张怎么办?
面试时,首先要将自己的技术能力展现出来,以一种交流的心态去面对,尽量不要过于紧张,要有自信,即使面试失败也要总结失败的原因,从而找到自身的不足加以弥补,有总结我们才能更好的应对下一次面试。
一定要从容,怯怯懦懦的不能成事,捋清思路,提问到不会做的功能和业务逻辑时,可以这么回答:这个功能或业务逻辑我虽然没有做过,但我刚才大致想出了3个方案,其各个方案的优缺点。这样就会体现出来你有这成熟的程序员思维~
三、面试攻略
如何写好简历?如何应对算法题?
简历
简历是展示你自己的地方,一份精心准备的简历才能够帮助你获得面试的机会。
我遇到过些人,简历写得很空洞,完全没觉得他哪里厉害,但是他们却自我感觉良好,就好像他不用写简历,别人就看得到他哪里厉害一样。
这是个很大的误区,简历就是用来展示你的能力的,不要藏着掖着,你不写出来,鬼晓得?!
给几个简历的建议:
- 工作经历建议倒序写,把最近的放最前面,重点突出
- 就像之前说的,重点突出你用 XXX 技术,在项目中做了 YYY
- 那些自己都说不清做了啥的,建议就不要写着了;如果一定必须写,那就一句话略过
- 给应届生的:如果你真的完全没有项目经验,那也就空着表示白纸一张吧。尽量不要写那么培训班里的习题,尤其是很多人做一样的习题,而且自己也说不清楚习题里面用到的技术。面试官往往一次要看好多份简历,你能想象看到几十份简历,项目经验都是一样的心情么……
- 还有就是跟所申请的职位无关的内容不要体现在简历上。比如:跟工作无关的兴趣爱好、楼主说的体重/身高、个人照片(特别是艺术照、风景照)
算法题准备
算法题在整个拿offer的流程中处于一个特殊的地位,在笔试环节中,基本每个笔试题,最后都是两道算法题,如果不能AC一半以上,那么通过笔试的几率就比较小,如果能全部AC,当然更佳,除了笔试,在一面和二面中,一般都会以手撕两道算法题来结束面试,当然这两道手撕的算法题如果能直接给出最优解并写出完整的代码,那么即便你前面的基础和项目答的并不好,也是一个非常大的亮点,也可以让你这次面试通过的几率提升很多,所以算法题起着举足轻重的作用,在整个offer流程中。
那么如何准备呢?
首先关于算法,我建议首先在学算法前,先由简至难,基础掌握之后,直接去LeetCode官网从mid难度开始刷题,等mid难度差不多后,再挑战hard难度,一般做客户端开发,如果能够刷上50道hard难度的题目,基本大部分面试的算法题都可以给出思路了,如果追求完美和保险,建议hard难度的题能刷多少是多少,多多益善。
掌握了基本数据结构和常见算法思想之后,可以再拿七大排序算法来做开胃菜,具体包括冒泡、选择、插入、归并、快排、堆排、希尔排序,开胃菜完毕之后,就可以去LeetCode上按照我上面说的去闯关了,随着你积累到一定深度之后,我相信你这样一套下来,平常笔试中的算法题和面试中的算法对你都是小case了。
然后就是直接刷《剑指offer》这本书,这本书上大约有60道面试常考算法题,都是非常经典的。
一线互联网大厂的面试风格是怎样的?
在面试前,需要给自己定制一个学习计划,一些基础的必问的知识点需要牢牢的记住,我稍微例举下一些常考的问题:
1、网络通信方面,一些基础的协议概念。比如TCP的握手挥手问题,Http和Https的区别以及Https传输过程中用到的加密方式,Http1.0、Http2.0和SPDY之间的区别,Http2.0做了哪些优化等。
2、Java方面的一些基础问题,比如HashMap的原理以及HashTable的区别、Android方面的SparseArray的实现、ArrayList和LinkedList的实现原理等等。
3、线程方面的,比如线程的同步机制、线程的几种状态、锁和volatile、线程池的使用和管理、甚至到AsyncTask的源码以及在不同版本的变化。
4、Jvm虚拟机这一块的内容,比如执行过程、JMM模型、java的Gc回收原理、类加载器等等。
5、数据结构和算法方面,这个没什么好讲的,就是拼基础,把基本的数据结构和数组字符串方面的算法多刷一刷,毕竟面试一般面不到太难的,强烈推荐去leetCode刷题,每天限定任务必须完成多少。
6、Android方面基础知识点,就是四大组件。关于Activity的启动流程和启动模式可以说是必须掌握的,中间牵扯到进程间通信,所以关于binder跨进程通信这方面的知识点也是需要深入了解。
7、Android的Handler可以说是Android通信的核心,所以关于这块的原理简直是基础必备。但是需要注意的是Handler中有牵扯到ThreadLocal的使用,所以关于ThreadLocal也需要看和理解下。还有HandlerThread和IntentService的使用等等。
8、对于系统服务的了解,比如ActivityManagerService、WindowManagerService和其他各种系统服务的过程,多了解多加分。关于跨进程通信binder这块的知识点建立在理论上的会比较多,但是别担心,可以在理解了一遍之后去看AIDL服务,根据AIDL可以更好的理解binder的使用。
9、还有就是关于View,比如自定义View的绘制,SurfaceView的原理,view的onMeasure、onLayout和onDraw的方法执行意义等。还有关于手势事件的分发机制和滑动冲突的处理。其他的一些系统常用控件的源码分析也很必要,比如ListView和RecyclerView的区别缓存机制、viewPager的页数缓存实现原理等等。
10、剩下的基本功就是性能优化方面了,各种死丢丢(AS)工具的使用比如Android Profiler, Lint,查看ViewTree啊,还有MAT啊,LeakCanary啊(这个的实现原理能搞懂最好)等等。布局的优化和内存泄露的查找,大图片的处理。对了,还有图片的处理和图片框架的缓存原理包括LruCache的实现原理,和DiskLruCache、列表的优化方案等等。
11、然后就是关于你项目中使用到的一些开源库,关于你用到的开源库,一定要深入到源码去理解其中的实现方案。我拿Retrofit打比方,大概需要掌握到的深度是Retrofit的设计风格、Restful Api的概念、Retrofit核心实现方式动态代理,优缺点(比如动态代理不能代理抽象类,和用到了反射),如何优化(比如CgLib,和依赖注入的方案)。这个其实就是考核你对技术的研究深度到底到什么程度。所以你项目中使用到的技术一定要深入了解,大厂是不需要知其然不知其所以然的人。
12、关于数据库,分享一个失败的案例,就是我个人曾经把ORM的概念搞混淆导致被刷掉,这个是人生中的奇耻大辱,特此记录。
13、关于项目开发的整体架构的理解,比如MVC、MVP和MVVM。关于市面上主流的插件化和组件化开发的设计思想和实现方案的理解等。
14、此外,如果你会一些其他的开发方式或语言也会加分不少。比如Kotlin,Js,ReactNative或者Weex等等。
应付面试并不难,但不要应付你的人生
没有准备的面试,那是在浪费自己宝贵的时间。在去面试之前我们要了解企业的基本面信息,如注册资金、股权结构、税收方面信息等;尽可能的去了解公司的主要产品、市场渠道等。
大厂一个岗位可能竞争者就有上百位,僧多粥少,如果你想脱颖而出拿到 offer,不好好准备是不行的,更何况现在大环境如此。
建议你准备至少 2 周,最好能有 1 个月,刷刷题,看看面经。
小建议:最好先找其他公司练练手,或者找朋友模拟面试一下,不要在没准好的情况下直接硬刚大厂,否则大概率挂的惨哟。
大厂百里挑一不是吹牛逼的。
四、职业规划
我该加入创业公司吗?
科技巨头有巨头自带的光环,创业公司有创业公司的历练,在面临这两种选择时你会怎么选?相比更加正规性的大厂,如若选择前途不明的创业公司,又需要注意哪些事宜才能保证自己最基本的权益不受伤害?
实际上99%的创业公司都不值得加入。有统计数字表明,90%的创业公司活不过3年。
但是,有时候“运气”挡也挡不住,您加入了靠谱的创业公司!
怎样的创业公司值得加入,我们总结值得加入的公司有如下特点:
- 公司所从事的行业有巨大的想象空间,已经或者有潜力构造护城河;
- 公司短期不会死掉,未上市,估值不高,创始人有分享利益的意愿;
- 创始人有过创业经历,能力得到过证明,有较大概率确保公司能做大;
不是所有的创企能够上市,也有很多倒在半路上的“独角兽”,我们需要的做的就是能够尽早发现,尽早打算,尽早抽身。
我该加入外包公司吗?
外包公司的刻板印象标签:
- 技术差,被歧视
- 工作时间越久,越没竞争力
大家都知道外包公司没有具体项目,简单的来说就是打杂的,一般外包项目周期比较短,很难超过3个月。
还有一个就是可能面临频繁出差及工作不稳定。频繁出差是因为可能会驻场开发,工作不稳定可能你在甲方公司上班,你会发现你公司没了,外包公司很多实力不怎么样。
外包公司是双刃剑,也有优势:
一般来说这种公司门槛就很低了。基本上培训学校或者自学的都可以去。也不用太多的开发经验。而且每天都在招人,所以你去累计经验也是非常好的选择。毕竟他有丰富的业务场景。可以快速帮你完成基础开发经验以及主流项目的全部流程。
可能有些朋友就懵了。不知道怎么选择。
我给大家一点意见:
- 如果自学或者培训学校出来,外包公司是你最好的第一站。
- 如果你接到外包公司offer建议先看看该公司一般接什么项目、游戏类就算了。怕你抗不住。
- 如果有机会,就把甲方项目源代码多看多看多看。(重要的事)
- 在外包公司待一年最多2年不能再多了。第二年就要骑驴找马。千万不要没准备就裸辞。有可能你去有些公司还不如外包。
- 与你接触的所有甲方搞好关系。(将来有大用)
- 保护住你的头发。
每天进步一小点
平时要进行自我分析与评价,做好职业规划,不断摸索,提高自己的编程能力和抽象思维能力。
然后平时也要注意积累,比如写博客等,这样有助于我们对知识点更好的梳理和掌握。那么我们平时如何积累面试中需要的技术,我觉得阅读源码是一个不错的选择,因为面试中的很多问题我们都可以从源码中找答案,要主动学习平时工作中遇不到的一些技术,由于工作的原因,我们不可能通过公司的项目来解除到Android中所有的重要技术,尤其是一些规模不大的项目来说,这个时候需要我们主动去学习。比如AIDL原理、Binder机制、多进程、View的绘制流程、事件分发、消息队列等。这类知识点,需要我们不断去探索实践,运用才能更好的解决问题。
面试复习路线
接下来分享的系统学习资源以详解各大互联网公司的 Android 常见面试题为主线,从面试的角度带你介绍必备知识点,以及该知识点在项目中的实际应用。
帮你在现在的基础上,重新梳理和建立 Android 开发的知识体系。无论是你短期内想提升 Android 内功实力,突破自己工作中的能力瓶颈,还是准备参加 Android 面试,都会在这份资料中有所一些收获。
从架构基础开始,分了8个模块来逐步从基础进阶到架构师的环节:
多余的话就不讲了,接下来将分享面试的一个复习路线,如果你也在准备面试但是不知道怎么高效复习,可以参考一下我的复习路线,有任何问题也欢迎一起互相交流,加油吧!
架构师筑基语言基础
目前Android APP开发主流语言就是Java语言,Java语言最大的特性就是提高了软件的交互可能性,可以说安卓手机几乎所有应用程序都是利用Java语言来进行编写的。
知识要点: 1、深入理解Java泛型 2、注解深入浅出 3、并发编程
4、数据传输与序列化 5、Java虚拟机原理 6、高效IO
设计思想解读开源框架
随着互联网企业的不断发展,产品项目中的模块越来越多,用户体验要求也越来越高,想实现小步快跑、快速迭代的目的越来越难,插件化技术应用而生。如果没有插件化技术,美团、淘宝这些集成了大量“app”的应用,可能会有几个g那么大。
所以,当今的Android移动开发,不会热修复、插件化、组件化,80%以上的面试都过不了。
知识要点: 1、热修复设计 2、插件化框架设计 3、组件化框架设计 4、图片加载框架 5、网络访问框架设计 6、RXJava响应式编程框架设计
360°全方位性能调优
在不同层次的开发工程师手里,因为技术水平的参差不齐,即使很多手机在跑分软件性能非常高,打开应用依然存在卡顿现象。
另外,随着产品内容迭代,功能越来越复杂,UI页面也越来越丰富,也成为流畅运行的一种阻碍。综上所述,对APP进行性能优化已成为开发者该有的一种综合素质,也是开发者能够完成高质量应用程序作品的保证。
知识要点: 1、设计思想与代码质量优化 2、程序性能优化 启动速度与执行效率优化 布局检测与优化 内存优化 耗电优化 网络传输与数据储存优化 APK大小优化 3、开发效率优化 分布式版本控制系统Git 自动化构建系统Gradle 4、项目实战 启动速度 流畅度 抖音在APK包大小资源优化的实践 优酷响应式布局技术全解析 网络优化 手机淘宝双十一性能优化项目揭秘 高德APP全链路源码依赖分析 彻底干掉OOM的实战经验分享 微信Android终端内存优化实践
Android框架体系架构
Android框架体系架构(高级UI FrameWork源码) 这块知识是现今使用者最多的,我们称之Android2013~2016年的技术。
Android开发者也往往因为网上Copy代码习惯了而导致对这块经常“使用”的代码熟悉而又陌生:熟悉的是几乎天天在和它们打交道, 天天在复制这些代码 ;陌生的是虽然天天和这些代码打交道,但是并没有深入研究过这些代码的原理,代码深处的内涵。
知识要点: 1、高级UI晋升 2、Android内核组件 3、大型项目必备IPC 4、数据持久与序列化 5、Framework内核解析**
NDK模块开发(音视频开发系列)
NDK(Native Development Kit缩写)一种基于原生程序接口的软件开发工具包,可以让您在 Android 应用中利用 C 和 C 代码的工具。通过此工具开发的程序直接在本地运行,而不是虚拟机。
在Android中,NDK是一系列工具的集合,主要用于扩展Android SDK。NDK提供了一系列的工具可以帮助开发者快速的开发C或C 的动态库,并能自动将so和Java应用一起打包成apk。
知识要点: 1、NDK开发之C/C 入门 2、JNI模块开发 3、Linux编程 4、底层图片处理 5、音视频开发 6、机器学习
Flutter学习进阶
2020 年无疑是 Flutter 技术如火如荼发展的一年。现在这门技术也依然非常有价值。
每一个移动开发者都在为 Flutter 带来的“快速开发、富有表现力和灵活的 UI、原生性能”的特色和理念而痴狂,从超级 App 到独立应用,从纯 Flutter 到混合栈,开发者们在不同的场景下乐此不疲的探索和应用着 Flutter 技术,也在面临着各种各样不同的挑战。
知识要点: 1、Flutter跨平台开发概述 2、Windows中Flutter开发环境搭建 3、编写你的第一个Flutter APP 4、Flutter Dart语言系统入门** ……
微信小程序开发
微信小程序作为现在比较火的编程开发应用场景之一,深受市场的青睐,这让不少开发者眼馋不已。但是对于初学者来说,就完全摸不着头脑了,不知道微信小程序开发制作需要学习那些知识,有需要的朋友可以参考本篇。
本篇知识要点: 1、小程序概述及入门 2、小程序UI开发 3、API操作 4、购物商场项目实战
Android相关源码解读
“编程语言是程序员的表达的方式,而架构是程序员对世界的认知”。所以,程序员要想快速认知并学习架构,读源码是必不可少的。阅读源码,是解决问题 理解事物,更重要的:看到源码背后的想法;程序员说:读万行源码,行万种实践。
主要内含微信 MMKV 源码、AsyncTask 源码、Volley 源码、Retrofit源码、OkHttp 源码等等。
Android BAT高级开发面试题及答案解析
面试前夕,刷题冲刺
面试的前一周时间内,就可以开始刷题冲刺了。请记住,刷题的时候,技术的优先,算法的看些基本的,比如排序等即可,而智力题,除非是校招,否则一般不怎么会问。
关于面试刷题,我个人也准备了一套系统的面试题,帮助你举一反三。