美文网首页Android高级进阶Android进阶之路
Android开发三年半5月份离职,面试10家公司后,这些面试官

Android开发三年半5月份离职,面试10家公司后,这些面试官

作者: 小小小小怪兽_666 | 来源:发表于2020-10-30 21:19 被阅读0次

    个人说明

    大家好,在跟大家讲述自己的面试经历,以及遇到的面试题前,先说说几句题外话。

    接触Android已经3年半,在工作中遇到疑难问题总是在网上博客上搜索答案,各位大牛大神总是把自己的经验分享出来,帮助我们这些需要帮助的人,由此表示衷心感谢!然而现在自己细想了一下,自己也是时候把遇到的问题并把解决方案分享出来,希望能帮助到有需要的人。

    随着时间的流逝,很多人说互联网这一块已经越来越不好干了,因为烧钱时代已经过去,剩下的都是根基牢固的大公司,独角兽已经不复存在。这就直接导致了互联网岗位的下降,本人亲测,也的确如此。

    2020.05月,本人离职(此时3年半工作经验,深圳就职),开始试水安卓市场,寻求一份合适自己,稳定的中大型公司。投了很多公司,面试机会并不是我想象中的那么多,即时面试过程顺利,也没有获得offer(候选人太多太多)。不过借此机会,前前后后我面了10家公司,现在就把我遇到的面试题,并且提供一些面试技巧给各位即将面试的同志们。

    OK,进入主题,请看Android知识图谱

    面试,无非都是问上面这些问题(挺多的 - -!),聘请中高级的安卓开发会往深的去问,并且会问一延伸二。以下我先提出几点重点,是面试官基本必问的问题,请一定要去了解!

    • 基础知识 -- 四大组件(生命周期,使用场景,如何启动)
    • java基础 -- 数据结构,线程,mvc框架
    • 通信 -- 网络连接(HttpClient,HttpUrlConnetion),Socket
    • 数据持久化 -- SQLite,SharedPreferences,ContentProvider
    • 性能优化 -- 布局优化,内存优化,电量优化
    • 安全 -- 数据加密,代码混淆,WebView/Js调用,https
    • UI-- 动画
    • 其他 -- JNI,AIDL,Handler,Intent等
    • 开源框架 -- Volley,Gilde,RxJava等(简历上写你会的,用过的)

    急急忙忙投简历,赶面试,还不如沉淀一两天时间,再过一遍以上内容。想稳妥拿到一个offer,最好能理解实现原理,并且知道使用场景了。不要去背!要去理解!面试官听了一天这些内容是很厌倦的,最好能说出一些自己的见解。

    面试题

    顺序是根据记忆排的,没有优先级之分,都是重点。

    • Activity的启动过程(不要回答生命周期)

    • Activity的启动模式以及使用场景

    (1)manifest设置,(2)startActivity flag

    • Service的两种启动方式

    (1)startService(),(2)bindService()

    • Broadcast注册方式与区别

    (1)静态注册(minifest),(2)动态注册

    • HttpClient与HttpUrlConnection的区别

    • http与https的区别

    • 手写算法(选择冒泡必须要会)

    • 进程保活(不死进程)

    • 进程间通信的方式

    (1)AIDL,(2)广播,(3)Messenger

    • 加载大图

    PS:有家小公司(规模写假的,给骗过去了),直接把项目给我看,让我说实现原理。。
    最让我无语的一次面试,就一个点问的我底裤都快穿了,就差帮他们写代码了。。

    • 三级缓存(各大图片框架都可以扯到这上面来)

    (1)内存缓存,(2)本地缓存,(3)网络

    • MVP框架(必问)

    • 讲解一下Context

    • JNI

    • java虚拟机和Dalvik虚拟机的区别

    • 线程sleep和wait有什么区别

    • View,ViewGroup事件分发

    • 保存Activity状态

    onSaveInstanceState()

    • WebView与js交互(调用哪些API)

    • 内存泄露检测,内存性能优化

    延伸:
    (1)内存溢出(OOM)和内存泄露(对象无法被回收)的区别。
    (2)引起内存泄露的原因

    • 布局优化

    • 自定义view和动画

    这部分面试官多数不会问很深,要么就给你一个效果让你讲原理。

    • 设计模式(单例,工厂,观察者。作用,使用场景)

    一般说自己会的就ok,不要只记得名字就一轮嘴说出来,不然有你好受。

    延伸:Double Check的写法被要求写出来。

    • String,Stringbuffer,Stringbuilder 区别

    • 开源框架,为什么使用,与别的有什么区别

    这个问题基本必问。在自己简历上写什么框架,他就会问什么。

    如:Volley,面试官会问我Volley的实现原理,与okhttp和retrofit的区别。

    开源框架很多,我就选几个多数公司都会用的出来(框架都是针对业务和性能,所以不一定出名的框架就有人用)

    网络请求:Volley,okhttp,retrofit
    异步:RxJava,AsyncTask
    图片处理:Picasso,Glide
    消息传递:EventBus

    以上框架请自行查找,太多了就不贴出来了。

    • RecyclerView

    这个挺搞笑的。有另外一个同事也在找工作,面试官嫌他没用过RecyclerView直接pass掉。

    • 网页中输入url,到渲染整个界面的整个过程,以及中间用了什么协议?

    • 具体介绍下TCP/IP

    • TCP的三次握手和四次挥手,为什么不是两次握手?为什么挥手多一次呢?

    • TCP和UDP的区别?

    • HTTP的几种请求方法具体介绍

    • HTTP请求和响应报文的格式,以及常用状态码

    • 介绍对称加密和非对称加密

    • 数字签名的原理

    • Base64算法是什么,是加密算法吗?

    • 为什么多线程同时访问(读写)同个变量,会有并发问题?

    • 说说原子性,可见性,有序性分别是什么意思?

    • 实际项目过程中,有用到多线程并发问题的例子吗?

    • 介绍几种启动模式。

    • 屏幕旋转时Activity的生命周期,如何防止Activity重建。

    • 线程的三种启动方式

    • 线程run和start的区别

    • 线程的几种状态,相互之间是如何转化的

    • String是java中的基本数据类型吗?是可变的吗?是线程安全的吗?

    • 为什么要设计成不可变的呢?如果String是不可变的,那我们平时赋值是改的什么呢?

    • 浅谈一下String, StringBuffer,StringBuilder的区别?String的两种创建方式,在JVM的存储方式相同吗?

    • 线程池是干嘛的,优点有哪些?

    • 线程池的构造方法每个参数是什么意思,执行任务的流程

    • Android线程池主要分为哪几类,分别代表了什么?

    主要有四类:FixedThreadPool、CachedThreadPool、SingleThreadExecutor、ScheduledTheadPool

    • 索引是什么,优缺点

    • 事务四大特性

    • 讲讲几个范式

    • Recycleview和listview区别

    • Recycleview有几级缓存,缓存过程?

    • 说说RecyclerView性能优化。

    • 说说双重校验锁,以及volatile的作用

    • synchronized和volatile的区别

    • synchronized修饰static方法和修饰普通方法有什么区别

    • 内存泄漏是什么,为什么会发生?

    • 内存泄漏发生的情况有哪些?

    集合类泄漏
    单例/静态变量造成的内存泄漏
    匿名内部类/非静态内部类
    资源未关闭造成的内存泄漏

    • 该怎么发现和解决内存泄漏?

    • 什么是类加载机制?

    v类加载器种类。

    • 什么是双亲委派机制,为什么这么设计?

    • webView与js通信

    • 如何避免WebView内存泄露

    • webView还有哪些可以优化的地方

    • Activity、View、Window 之间的关系。

    • 说说Android的事件分发机制完整流程,也就是从点击屏幕开始,事件会怎么传递。

    • 解决滑动冲突的办法。

    • Fragment生命周期,当hide,show,replace时候生命周期变化

    • Activity 与 Fragment,Fragment 与 Fragment之间怎么交互通信?

    • Fragment遇到viewpager遇到过什么问题吗?

    • ARouter的原理

    • ARouter怎么实现页面拦截

    • 怎么应用到组件化中

    • 说说你对协程的理解

    • 说下协程具体的使用

    • 协程怎么取消

    • 具体有哪些启动优化方法?

    • 分析启动耗时的方法

    • Activity、View、Window三者如何关联?

    • onCreate,onResume,onStart里面,什么地方可以获得宽高

    • 为什么view.post可以获得宽高,有看过view.post的源码吗?

    • SharedPreferences是如何保证线程安全的,其内部的实现用到了哪些锁

    • 是进程安全的吗?如果是不安全的话我们作为开发人员该怎么办?

    • SharedPreferences 操作有文件备份吗?是怎么完成备份的?

    • 为什么需要插件化

    • 插件化的原理

    • 市面上的一些插件化方案以及你的想法

    OK,点到即止。

    如何进阶?

    1、确定好方向,梳理成长路线图

    不用多说,相信大家都有一个共识:无论什么行业,最牛逼的人肯定是站在金字塔端的人。所以,想做一个牛逼的程序员,那么就要让自己站的更高,成为技术大牛并不是一朝一夕的事情,需要时间的沉淀和技术的积累。

    关于这一点,在我当时确立好Android方向时,就已经开始梳理自己的成长路线了,包括技术要怎么系统地去学习,都列得非常详细。

    知识梳理完之后,就需要进行查漏补缺,所以针对这些知识点,我手头上也准备了不少的电子书和笔记,这些笔记将各个知识点进行了完美的总结:

    2、通过源码来系统性地学习

    只要是程序员,不管是Java还是Android,如果不去阅读源码,只看API文档,那就只是停留于皮毛,这对我们知识体系的建立和完备以及实战技术的提升都是不利的。

    真正最能锻炼能力的便是直接去阅读源码,不仅限于阅读各大系统源码,还包括各种优秀的开源库。

    《486页超全面Android开发相关源码精编解析》

    3、阅读前辈的一些技术笔记

    《960全网最全Android开发笔记》

    4、刷题备战,直通大厂

    历时半年,我们整理了这份市面上最全面的安卓面试题解析大全
    包含了腾讯、百度、小米、阿里、乐视、美团、58、猎豹、360、新浪、搜狐等一线互联网公司面试被问到的题目。熟悉本文中列出的知识点会大大增加通过前两轮技术面试的几率。

    如何使用它?

    1.可以通过目录索引直接翻看需要的知识点,查漏补缺。
    2.五角星数表示面试问到的频率,代表重要推荐指数

    《379页Android开发面试宝典》

    总结

    爱默生说:一个朝着自己目标前进的人,整个世界都给他让路。所以,作为现在的你,不惑很简单,多思考多规划,未来会更清晰,朝着自己的目标一步一步走下去,尽早地取得成功。毕竟,年龄在程序员界里,也是一种优势。

    如果,你没有靠山,就让自己成为自己最稳的靠山吧!

    以上文章中的资料,均可以免费分享给大家来学习,无论你是零基础还是工作多年,现在开始就不会晚。

    以上内容均放在了开源项目:github 中已收录,大家可以自行获取(或者关注主页扫描加微信获取)。

    相关文章

      网友评论

        本文标题:Android开发三年半5月份离职,面试10家公司后,这些面试官

        本文链接:https://www.haomeiwen.com/subject/vnsdvktx.html