非985、211毕业,我是如何加入腾讯的?(附Android通关秘籍)

有一天,我收到猎头的电话,问我是否考虑腾讯?我欣然答应,沉睡在我心中多年的幻想又被唤醒。

然而想进入大厂没那么容易,需要对面试做系统性的准备。

我开始利用业余时间夯实面试需要的基础知识,经过大概三个月的准备,通过了五轮面试,终于顺利加入鹅厂!

下面我把准备面试的经验分享给大家(为了尊重公司,我不能把原题告诉大家,但我会把方向告诉大家,因为方向里自然有“题库”),分为基本功、软实力、加分项三个方面。下面一个个来说。

基本功

所谓基本功,就是你需要练到有肌肉记忆的技能,当面试官问起的时候,你能够信手拈来。

简历基本功

简历的好坏决定第一印象。

很多人可能技术很牛逼,却没能获得面试机会,就是吃在简历的亏上。比如,错别字连天、排版混乱、语句冗余不通顺。下面是我总结出的要点:

排版

我走的是极简风格,直接使用 Markdown 进行书写,然后转换为 PDF 格式。

作为一个 GUI 开发者,你也可以把简历制作成一个静态页面,加上漂亮的动画效果,来展示你优秀的基本功,给面试官眼前一亮的赶脚。比如,我的一位朋友就是这样制作简历的,当时也顺利地通过了面试。

书写逻辑

请遵循“STAR”法则。即情境(situation)、任务(task)、行动(action)、结果(result)。

比如,“为解决项目中遗留的回调地狱和内存问题,我用了 RxSwift 重构了 XX 模块,在团队内普及了响应式编程思想,受到了团队成员的一致好评”。这通常也是面试官提问的逻辑。

内容

请你一定要熟悉简历中写过的内容。因为面试官的面试思路无非有两种。

第一,顺着你的简历问; 第二,根据他自己的思路来问。

如果你遇到的是第一种,面试官问到你在简历上的内容你却卡壳了,那真的是非常尴尬,面试官很可能怀疑你的简历不太真实。

如果你遇到的是第二种,那么你简历上的内容也会给面试官心理暗示,那么接下来的问题很有可能是你简历上知识点的发散。

关于面试准备,我个人认为可以这样排:数据结构与算法,Java,**Android(如果不找安卓的就去掉这部分),计算机网络,操作系统,设计模式**。下面我就按照这个顺序给出一些准备建议。

Ø 数据结构与算法

推荐书籍:大话数据结构,数据结构与算法分析(java语言描述),剑指offer,进军硅谷。

推荐在线刷题网站:Leetcode(LeetCode Online Judge),Lintcod(LintCode - 主页),牛客网(在线编程_C++Java前端经典笔试面试题库

推荐方案:主要做三件事。

1, 先看一遍大话数据结构,熟悉一些基本概念,大话这本书只讲了一些基本的数据结构,像是B树,B+树,红黑树需要自己看一些博客或是网站,推荐一个讲解算法的网站-七月算法,另外海量数据处理也是一个经常考的专题,它结合了数据结构和操作系统的一些知识,这个需要进行针对性准备。

2,然后开始刷题,最推荐的肯定是leetcode,刷题建议按照标签进行刷题(比如队列,栈,哈希表),刷题从易到难,最好能够刷一百题左右,如果一天一题,至少要三个月以上,所以这个耗时比较长,要从比较早开始准备。进军硅谷这本书有按照专题进行编排,基本上的题目来自leetcode,可以作为一个参考。

2, 然后要分析一些常见数据结构的源码实现(比如队列,栈,hashmap之类的),数据结构与算法分析这本书有讲一些,可以结合一些博客进行准备。

** Java**

找程序员工作,大多数情况下需要掌握好一门面向对象的语言,主流上分为Java和C++两大阵营。这里讲Java需要怎么准备。

入门书籍:Java核心技术卷一,Head first in java(如果一点面向对象的概念都没有那就看这本)

提高书籍:Java编程思想

Java虚拟机:深入理解Java虚拟机

Java多线程:Java多线程编程核心技术,Java并发编程实践

其实我觉得如果有一定基础建议直接看Java编程思想,面试中的考点经常都会在这本书中有讲到。当然Java虚拟机和多线程这两块需要再看一些专门讲解的书,每一次java面试考查内容几乎都离不开这两块。

总体来说java考察内容包括以下这些:
1,面向对象的一些基本概念:继承,多态之类的

2, 抽象类和接口

3, 静态类,内部类

4, Java集合类,同步和非同步

5, Java类加载机制

6, Java内存模型和垃圾回收算法

7, 线程同步机制(volatile,synchronized,重入锁,threadlocal),线程间通信(wait,notify)

8, 异常处理

9, 多线程同步问题,生产者消费者,读者写者,哲学家就餐,用java实现

10, 了解java中设计模式的思想,用了哪些设计模式,有什么好处

Android

入门书籍:第一行代码。

提高书籍:Android群英传,Android开发艺术探索。

上面的书看好了,一般问题不大。主要问的一些问题:

1, Activity,Service,BrocastReceiver,Intent,Fragemnet,ContentProvider,这些组件的基础知识,比如Activity两种启动方式,生命周期,四种启动模式,Service则主要是:两种启动方式,生命周期。还有组件之间怎么通信之类的问题。

2, Android的数据存储方式,数据库,sd卡,SharedPreferences 这些

3, Listview的优化,与scollview的区别

4, view状态与重绘,view的绘制过程,view的事件分发机制,view的事件冲突处理

5, Android多线程异步机制,AsyncTask工作原理与源码实现,Handler,Message,Looper异步实现机制与源码分析

6, Android常见的开源框架(主要是网络通信,图片加载这些),了解怎么使用,分析源码

7, Oom和anr异常引发的原因,怎么解决

8, 了解一些常见的图片缓存技术

计算机网络

推荐书籍:计算机网络自顶向下,tcp/ip协议详解卷一

主要看:主要看应用层,传输层,网络层,其中传输层最为重要。主要的一些考察内容有:

1, TCP和UDP的区别

2, TCP的三次握手,和四次挥手,为什么需要三次握手,为什么要四次挥手(这两个为什么要考虑非常清楚)

3, TCP拥塞控制算法(慢启动,拥塞避免,快速恢复),流量控制算法,滑动窗口协议,选择重传。

4, TCP可靠性是怎么保证的(通过哪些机制保证)?

5, HTTP协议报文格式,请求方法字段以及各个方法之间的区别,了解常见的响应状态码,了解cookie机制,了解WEB缓存技术(条件get方法)。

6, DNS协议的各层域名服务器,两种查询方式(递归和迭代),dns缓存

7, Udp的特点,适用场景,校验机制

8, 从输入一个网址到最后网页显示整个过程发生了什么?

9, IP地址组成,ARR,RARP,ICMP协议,路由选择算法

软实力
沟通能力

我用四个词来概括: 自信、流畅、耐心、礼貌。

很多小伙伴可能编码技能不错,却不能在面试中表达出来。

在面试过程中,无论面试环境怎样,面试官态度如何,你都要保持积极的态度。请记住,你是在求职,就要创造一切对你有利的因素。

比如,你可以与面试官主动握手,增加好感。

如果面试官问你的问题,你刚好不会,也要尽可能列举这个问题相关的概念,然后推测出这个问题的答案。

比如,面试官问,二进制重排的原理是什么?

假设你刚好不知道这个知识点,你可以答 App 启动前 dyld 相关的概念或者说一下 Mach-O 二进制格式的原理,来推测可能的二进制的重排机制,即使推测错了也没有关系,因为在这个过程中至少展示了你积极解决问题的能力。

作者2013年从java开发,转做Android开发,在小厂待过,也去过华为,OPPO等大厂待过,18年四月份进了阿里一直到现在。

参与过不少面试,也当面试官 面试过很多人。深知大多数初中级Android工程师,想要提升技能,往往是自己摸索成长,不成体系的学习效果低效漫长,而且极易碰到天花板技术停滞不前!

我整理了一份阿里P7级别的最系统的Android开发主流技术,特别适合有3-5年以上经验的小伙伴深入学习提升。

主要包括阿里,以及字节跳动,腾讯,华为,小米,等一线互联网公司主流架构技术。如果你想深入系统学习Android开发,成为一名合格的高级工程师,可以收藏一下这些Android进阶技术选型

我搜集整理过这几年阿里,以及腾讯,字节跳动,华为,小米等公司的面试题,把面试的要求和技术点梳理成一份大而全的“ Android架构师”面试 Xmind(实际上比预期多花了不少精力),包含知识脉络 + 分支细节。

Java语言与原理;
大厂,小厂。Android面试先看你熟不熟悉Java语言

高级UI与自定义view;
自定义view,Android开发的基本功。

性能调优;
数据结构算法,设计模式。都是这里面的关键基础和重点需要熟练的。

NDK开发;
未来的方向,高薪必会。

前沿技术;
组件化,热升级,热修复,框架设计

网上学习 Android的资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。希望这份系统化的技术体系对大家有一个方向参考。

我在搭建这些技术框架的时候,还整理了系统的高级进阶教程,会比自己碎片化学习效果强太多,CodeChina上可见;

当然,想要深入学习并掌握这些能力,并不简单。关于如何学习,做程序员这一行什么工作强度大家都懂,但是不管工作多忙,每周也要雷打不动的抽出 2 小时用来学习。

不出半年,你就能看出变化!

,那么很难做到真正的技术提升。希望这份系统化的技术体系对大家有一个方向参考。

我在搭建这些技术框架的时候,还整理了系统的高级进阶教程,会比自己碎片化学习效果强太多,CodeChina上可见;

当然,想要深入学习并掌握这些能力,并不简单。关于如何学习,做程序员这一行什么工作强度大家都懂,但是不管工作多忙,每周也要雷打不动的抽出 2 小时用来学习。

不出半年,你就能看出变化!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值