Android面试反思:开发5年crud背景,惨遭字节阿里双挂,全败在了工作之外的技术点盘问...

156 篇文章 1 订阅
70 篇文章 0 订阅

投简历前其实并没有高强度有系统的复习,由于平时工作比较闲,大多数都是零零散散浑沦吞枣的学习和积累的。

此前也没面过大厂,都在一些中小型公司呆过,此次面试有很大一部分心态是抱着学习的心态试一试,再加上自己平时学的不够透彻,算是一个教训。

字节(一面挂)

  • 项目经历 自己做过哪些核心的模块
  • MVP、MVVM优缺点
  • http状态码讲一下常用的
  • 从ViewRootImpl开始 事件分发流程 onClick和onLongClick怎么执行的
  • TextView的绘制流程 怎么处理换行
  • 性能优化都做了哪些
  • Shareperference实现机制
  • 插件化原理
  • ViewRootImpl都做了哪些事情
  • 都有哪些window类型 内部是怎么处理window不同权限的
  • 算法:
    给定一个数N 如23121 给定一组数字A如{2,4,9}; 求由A中元素组成的、小于N的最大数,如小于23121的最大数为22999

涂鸦智能(现场面试两轮)

一面

  • 讲一下Handler消息机制
  • 项目中都做了哪些性能优化
  • 讲一下绘制流程 View和ViewGroup的区别
  • 事件分发流程是怎么执行的
  • http的请求过程
  • HashMap原理 put过程、扩容 1.7 1.8区别ConcurrentHashMap原理

二面

  • MQTT协议的特点 底层原理
  • Activity启动流程 为什么zygote使用socket通信
  • 插件化原理 遇到过什么问题 怎么解决的
  • classLoader双亲机制
  • 模块化通信 自己设计一套怎么实现
  • tcp协议请求过程

面试结束后已经中午吃饭了 面试官让等一会 结果又让等通知

等了有一个星期邮件通知感谢

阿里(三面挂)

初面(电话简单聊了二十分钟)

  • 项目经历 主要做过哪些业务功能
  • 性能优化
  • 有遇到过哪些比较难的问题
  • 讲一下MQTT协议
  • 注解和反射原理
  • HashMap内部实现原理 怎么hash的 怎么扩容 1.7、1.8什么区别 多线程会导致什么问题
  • 项目中人脸识别用到了哪些业务场景

这一面应该是筛选下简历 不算正式面世

一面(电话面试四十分钟)

  • 介绍自己做过的项目 处理了什么问题
  • ListView和ScrollView的冲突怎么处理
  • Handler怎么处理延时消息的 消息队列中死循环在native层都做了什么处理
  • 为什么用单Activity多Fragment 怎么处理传参
  • 同事代码可能导致内存泄漏和ANR 在代码层面怎么避免
  • okhttp拦截器实现 连接池的复用策略 有实现http2.0吗 okhttp和volley的区别 从实现策略讲
  • 讲一下eventbus实现原理
  • glide的三级缓存是怎么执行的 最近使用和正在使用的缓存是怎么切换的 怎么处理bitmap复用的 如果自己实现一个该怎么处理
  • 模块化怎么通信 底层怎么实现

二面(电话面试三十多分钟)

  • 介绍项目 自己处理过哪些项目痛点 怎么处理的
  • 泛型编译期信息怎么储存的 什么情况下泛型会擦除
  • MVP、MVVM优缺点
  • 与web是怎么交互通信的 这个模块怎么设计的
  • 接口 抽象类区别 可以new吗
  • JDK8的流有用过吗 解决了什么问题 写过接口的默认实现吗
  • 讲一下RN和Flutter的区别
  • 算法:查找数组中大小为x的两个数(只有一对)

三面(三十多分钟)

  • 介绍做过的项目 处理过哪些问题
  • http2.0什么特性 有哪些问题
  • 设计模式了解多少 讲一下装饰模式
  • MQTT协议解决了哪些问题 为什么
  • flutter了解多少
  • 平时都通过哪些方式学习和了解技术的
  • 都有了解其他哪方面的技术
  • 在最近的项目中学到了什么
  • 职业发展方向
  • 对于这项工作你有什么优势

中间废话有点多 面试官有点不耐烦 说尽量讲的简单些

第三天就收到邮件感谢了 -。-

阿里整体的面试难度不算太离谱,可能刚好都是比较擅长的,但面试周期较长,面到三面的时候已经多半个月了,有点力不从心;也有自己没有准备好的原因,有点懈怠了,三面问的问题大白话的偏多,奈何本人嘴笨,血压逐渐拉满,不过也算没有遗憾,深知能力有限,就酱吧~

整理了下其他面试中都涉及过的问题

网络

http请求、tcp握手回收、MQTT相关

数据结构

树、链表

Java

  • GC、Collection、Map
  • 多态
  • 多线程、各种锁机制

Android

  • 性能优化、ANR、内存泄漏
  • Activity启动模式、启动流程
  • 四大组件
  • Hanlder机制、事件分发、绘制流程
  • MVP、MVVM、插件化(hook)
  • 跨进程通信、aidl、广播、ContentProvider
  • okhttp、retrofit、glide、eventbus底层原理

Kotlin

  • kotlin反射、kotlin泛型
  • 协成原理 await、async区别
  • lateinit和by lazy区别

很多技术细节,工作中用不太到,但是面试不得不去准备,还是要把基础打牢固,下面就分享一些我梳理的一些Android基础相关知识:

关于一些基础知识的梳理

Java基础:

1.ArrayList、Linkedlist、Vector
2.BlockingQueue、CountDownLatch
3.Collections、Arrays
4.Exception与Error包结构,OOM,SOF的各种情况
5.HashCode作用
6.Java1.7、1.8新特性
7.Java NIO
8.Java基本数据类型以及相关操作
9.Java的四种引用,强弱软虚,用到的场景
10.Map、Set、List、Queue、Stack的特点与用法
11.Map相关子类区别
12.Object共有方法以及wait和sleep区别
13.Override与Overload区别
14.String相关内容学习
15.foreach与for循环效率对比
16.interface与abstract类的区别
17.static关键字
18.synchronized、lock、reentrantLock区别
19.不同清醒下return与finally的执行顺序
20.transient、volatile
21.反射原理及应用
22.反省特点以及类型转换
23.生产者消费者问题的五中实现
24.县城以及ThreadLocal
25.线程池的使用
26.解析XML的DOM与SAX以及PULL区别
27.锁的等级:方法锁、对象锁、类锁
28.面向对象的特征和含义以及多态实现原理

Android:

1.在AS中定义Gradle插件
2.Activity与Fragment生命周期
3.Activity卡顿原因
4.Activity启动过程
5.Activity四种启动模式与IntentFilter匹配规则
6.Activity的状态保存
7.Android5.0、6.0、7.0、8.0、9.0、10.0特性
8.Android内存优化方法
9.Android动画
10.Android文件缓存方法
11.Android长连接,怎么处理心跳机制
12.Asset与raw,res、drawable
13.AsyncTask原理与使用
14.Bitmap相关
15.ContentProvide用法
16.IntentService
17.Json相比XML优劣势,protobuf
18.Looper、Handler、MessageQueue
19.Merge与ViewStub布局标签
20.OkHttp原理解析
21.Service相关
22.Sqlite基本操作
23.UIL原理解析
24.Volley原理解析
25.Zygote进程启动过程
26.启动Activity的集中方式
27.如何保证Service不被kill
28.如何加速启动Activity
29.怎样退出终止App
30.插件化原理
31.注册广播的两种方式
32.热补丁技术概括
33.自定义View(所有View知识)
34.通过自定义Gradle插件修改编译后的class文件

数据结构:

1.各种排序算法复杂度对比
2.排序算法
3.数据结构基本概念及复杂度分析

操作系统:

1.IPC集中通信方式
2.什么是虚拟内存
3.死锁的必要条件,怎么处理死锁
4.段储存、页储存、段页储存
5.虚拟地址、逻辑地址、线性地址、物理地址的区别
6.进程与县城
7.银行家算法

计算机网络:

1.3次握手和4次挥手过程
2.HTTP响应报文格式及各种响应吗
3.HTTP请求报文格式
4.Http1.1和Http1.0区别
5.Http怎么处理长连接
6.IP地址分类
7.OSI与TCP\IP各层的结构与功能
8.Ping的整个过程。ICMP报文是什么
9.TCP与UDP区别以及各自优缺点
10.TCP和UDP数据报文格式
11.TCP拥塞控制和流量控制
12.http与https区别
13.打开一个网页,整个过程使用到哪些协议
14.滑动窗口与回退N针协议
15.路由器与交换机区别

数据库:

1.关系数据库基本概念
2.关系模式的规范化
3.函数依赖与候选码的定义
4.数据库中数据查询
5.数据库查询优化
6.数据的添加、删除、修改
7.表的创建、修改表结构、删除表

JVM:

1.CAS是什么
2.GC收集器有哪些
3.GC的三种收集方法
4.内存模型以及分区
5.判断一个对象是否存活
6.双亲委派模型
7.对象的创建、内存布局、对象的访问定义
8.新生代老年代内存划分比例以及其各自特点
9.类加载的五个过程
10.静态分派和动态分派

面试前系统复习的重要性

很多人在刚接触这个行业的时候或者是在遇到瓶颈期的时候,总会遇到一些问题,比如学了一段时间感觉没有方向感,不知道该从那里入手去学习,对此我针对Android程序员,我这边给大家整理了一套学习宝典

  • Android学习路线图

首先,对于没有学习方向,知识不体系的人,我把我工作几年整理的学习路线分享给大家,做一个借鉴作用,还不知道怎么学习的人可以直接照着我这个学习路线一个个的去学习,知识不体系的人可以参考下我整理路线的方式,总之希望能够帮到你们!

  • 模块化学习资源

接下来是每个模块我整理出来的文档学习资料,帮助大家更细致化的学习。

《Android汇总复习资料—Java》

《Android汇总复习资料—Android》

《Android汇总复习资料—Android扩展》

《Android汇总复习资料—Kotlin》

《Android汇总复习资料—Flutter》

《Android汇总复习资料—算法》

除了上面的学习路线,还可以额外的配合以下方式学习,效果翻倍~

①看视频进行系统学习

前几年的Crud经历,让我明白自己真的算是菜鸡中的战斗机,也正因为Crud,导致自己技术比较零散,也不够深入不够系统,所以重新进行学习是很有必要的。我差的是系统知识,差的结构框架和思路,所以通过视频来学习,效果更好,也更全面。关于视频学习,个人可以推荐去B站进行学习,B站上有很多学习视频,唯一的缺点就是免费的容易过时。

另外,我自己也珍藏了好几套视频,有需要的我也可以分享给你。

②读源码,看实战笔记,学习大神思路

“编程语言是程序员的表达的方式,而架构是程序员对世界的认知”。所以,程序员要想快速认知并学习架构,读源码是必不可少的。阅读源码,是解决问题 + 理解事物,更重要的:看到源码背后的想法;程序员说:读万行源码,行万种实践。

主要内含微信 MMKV 源码、AsyncTask 源码、Volley 源码、Retrofit源码、OkHttp 源码等等。

③面试前夕,刷题冲刺

面试的前一周时间内,就可以开始刷题冲刺了。请记住,刷题的时候,技术的优先,算法的看些基本的,比如排序等即可,而智力题,除非是校招,否则一般不怎么会问。

关于面试刷题,我个人也准备了一套系统的面试题,帮助你举一反三:

④2020大厂面试高频知识点

  • 图片
  • 网络和安全机制
  • 数据库
  • 插件化、模块化、组件化、热修复、增量更新、Gradle
  • 架构设计和设计模式
  • 性能优化
  • Android Framework
  • Android优秀三方库源码

以上这些内容均免费分享给大家,需要完整版的朋友,点这里可以看到全部内容。或者点击 【这里】 查看获取方式。

  • 12
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 11
    评论
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值