入职新公司快半年了,今天,我就想和大家聊聊,关于找工作、面试的一些心得与体会。说实话,在这次找工作之前,我面试找工作的经历并不丰富,反而是当面试官的次数更多。所以呢,这次换工作,我把国内一二线公司都面了一遍,也算是弥补了自己这方面经验的不足吧。
「国内公司」比如百度、阿里、腾讯、字节,它们都是一流的互联网公司.
如果你最近也想面试:以上国内这些大厂,相信这篇文章可以给你一定的帮助。
我们聊聊国内公司。
国内公司
国内公司,包含传统互联网企业,还有一些国企、央企。
面试流程
从我的面试经验来说,国内公司大致的流程是这样的。
- HR 沟通:顺带约下一轮的时间;
- 笔试:对于社招而言,互联网公司笔试比较少,但国企、央企还比较常见。
- 一轮技术面试:这一轮的面试官,一般都是团队内比较资深的工程师,技术细节的问题偏多,最后,一般还会预留20分钟左右的时间,出一道算法题, 大概是 LeetCode Medium 级别。
- 二轮技术面试:这一轮的面试官,一般是团队直属 Leader。具体的内容可能因人而异,有些面试官,喜欢在一个问题上持续深挖,试探你的「技术深度」;有些面试官,喜欢跟你聊行业动向,考察你的「知识广度」。当然,大部分情况来说,两者都会考察。
- 三轮技术面试(终面):这一轮的面试官,一般是 Leader 的 Leader。从我的经验上来看,这一轮主要是考察候选人的「潜力」。那么,如何判断候选人的潜力大不大呢?答案就是:「基础」、「品性」。这一轮面试聊的内容,可能时而比较抽象,时而比较底层。
- HR 面试:到了这一步,你的技术能力就已经得到认可了。剩下的,就是其他方面能力的考察了。通常来说,只要你没有诚信之类的问题,HR 是不会轻易拒你的。
那么,面试国内的大厂,我做了哪些准备呢?
面试准备
每个技术领域的知识,其实都是模块化的,我把它们分为以下几个部分:
算法数据结构:由于平时工作中用的并不多,所以,有必要在面试之前重新补一补算法和数据结构。
具体,我的做法是这样的:
- 数据结构:关闭 IDE 的语法提示,用主力语言(我用的 Kotlin)实现一遍常见的数据结构:Array、List、Stack、Queue、Map 等等;
- 算法:同样的,再把常见的算法自己手写一遍:常见的7种排序算法、3种字符串搜索算法、双指针、多指针、回溯,等等。
- 刷题:对于国内公司的面试准备,掌握 LeetCode 上 Top 200 的高频题就已经可以轻松应对了。注意,这里我说的是“掌握”,单纯只是刷一遍是不太可能达到这种境界的。我喜欢用不同的思路,不同的编程思想,从不同的角度,去剖析同一道算法题。
除了数据结构与算法之外,还需要注意:计算机基础。
是的,你没看错,社招同样需要花时间补一补计算机的基础知识。比如:计算机网络、操作系统、加密算法等等。对于大部分工程师而言,Http、Https、Linux 系统、编解码,都还是需要有一些基本认识的。
最后,也是最重要的:专业知识。
比如,我是 Android 工程师,面试之前,我会花很长时间补专业知识,从基础的到高阶的。目前市面上对高级 Android 工程师的要求其实不低。
- 基础知识:最基本的,四大组件、生命周期、启动模式、事件分发、自定义View,这些都要烂熟于心。
- 性能优化:Android 性能优化,这个方向的水其实很深。但对于普通的 Android 工程师而言,掌握一些基础的排查工具,以及基本的性能优化套路,还是很有必要的。如果是大厂专门做性能优化方向的工程师,往往需要深入 Dalvik、ART 虚拟机去做优化。
- Framework:这部分,也许很多人会把它当作八股文来看待,比如: App 启动流程、Binder 机制,等等。我自己在准备的过程中,并不会强迫自己记住 Framework 层的具体细节,更多的,是去理解它背后的设计思想。工作中遇到问题的时候,去网上查源码,具体情况具体分析即可。
- 工程架构:在准备这个部分的时候,我主要是去读了一下主流的开源项目,并尝试自己手写实现出它们的 Kotlin 版本。在这个过程中,我不仅对项目本身有了更深的理解,对 Java 和 Kotlin 也有了更深的认识。
- 新技术:每个技术领域,一定是持续发展的。比如说,Android 领域,就有:Kotlin、协程、KMM、Compose 等等。不过,有趣的是,几乎没有面试官问我这方面的知识,我猜他们都很相信我吧。
结尾
这次面试准备,前前后后我花费了将近4个月,也总结、收集了一些文档资料,主要涵盖以下几个方面:
架构师基础、性能优化、插件化、Framework、Kotlin、协程、Compose等等;
一、架构师筑基必备技能
1、深入理解Java泛型
2、注解深入浅出
3、并发编程
4、数据传输与序列化
5、Java虚拟机原理
6、高效IO
……
二、Android百大框架源码解析
1.Retrofit 2.0源码解析
2.Okhttp3源码解析
3.ButterKnife源码解析
4.MPAndroidChart 源码解析
5.Glide源码解析
6.Leakcanary 源码解析
7.Universal-lmage-Loader源码解析
8.EventBus 3.0源码解析
9.zxing源码分析
10.Picasso源码解析
11.LottieAndroid使用详解及源码解析
12.Fresco 源码分析——图片加载流程
三、Android性能优化实战解析
- 腾讯Bugly:对字符串匹配算法的一点理解
- 爱奇艺:安卓APP崩溃捕获方案——xCrash
- 字节跳动:深入理解Gradle框架之一:Plugin, Extension, buildSrc
- 百度APP技术:Android H5首屏优化实践
- 支付宝客户端架构解析:Android 客户端启动速度优化之「垃圾回收」
- 携程:从智行 Android 项目看组件化架构实践
- 网易新闻构建优化:如何让你的构建速度“势如闪电”?
- …
四、高级kotlin强化实战
1、Kotlin入门教程
2、Kotlin 实战避坑指南
3、项目实战《Kotlin Jetpack 实战》
-
从一个膜拜大神的 Demo 开始
-
Kotlin 写 Gradle 脚本是一种什么体验?
-
Kotlin 编程的三重境界
-
Kotlin 高阶函数
-
Kotlin 泛型
-
Kotlin 扩展
-
Kotlin 委托
-
协程“不为人知”的调试技巧
-
图解协程:suspend
五、Android高级UI开源框架进阶解密
1.SmartRefreshLayout的使用
2.Android之PullToRefresh控件源码解析
3.Android-PullToRefresh下拉刷新库基本用法
4.LoadSir-高效易用的加载反馈页管理框架
5.Android通用LoadingView加载框架详解
6.MPAndroidChart实现LineChart(折线图)
7.hellocharts-android使用指南
8.SmartTable使用指南
9.开源项目android-uitableview介绍
10.ExcelPanel 使用指南
11.Android开源项目SlidingMenu深切解析
12.MaterialDrawer使用指南
六、NDK模块开发
1、NDK 模块开发
2、JNI 模块
3、Native 开发工具
4、Linux 编程
5、底层图片处理
6、音视频开发
7、机器学习
七、Flutter技术进阶
1、Flutter跨平台开发概述
2、Windows中Flutter开发环境搭建
3、编写你的第一个Flutter APP
4、Flutter开发环境搭建和调试
5、Dart语法篇之基础语法(一)
6、Dart语法篇之集合的使用与源码解析(二)
7、Dart语法篇之集合操作符函数与源码分析(三)
…
八、微信小程序开发
1、小程序概述及入门
2、小程序UI开发
3、API操作
4、购物商场项目实战……
全套视频资料:
一、面试合集
二、源码解析合集
三、开源框架合集
欢迎大家一键三连支持,若需要文中资料,直接点击文末CSDN官方认证微信卡片免费领取【保证100%免费】↓↓↓