2021最新Android笔试题总结美团Android岗职能要求

目录
  • Android开发面试的几部分
    • 1、基础知识
    • Java部分:
    • Android部分:
    • 数据结构与算法:
    • 计算机基础:
    • 设计模式:
    • 开源项目:
  • 重点项目经历
  • 技术以外的东西
    • 自我驱动和追求
    • 沟通和协作
  • 我的面经总结
    • Android
    • Java
    • 计算机网络
    • 数据结构及算法
    • 题外话

优秀的战士需要出色的剑才能战斗。同样,在现代IT中,每个编码人员都需要最好的Android开发人员工具来提高他们的技能和效率。在Android应用程序开发这个残酷的竞争行业中,只有优秀的开发人员才能生存下去。您需要向客户展示您拥有最佳技术和资源。

它不仅仅是展示您的设备以吸引客户,还要确保您的Android应用程序在高效的时间线内以最高质量构建。那么哪些是最好的Android开发者工具?嗯,那里有很多工具,但并非所有工具都足够好。在不浪费任何时间的情况下,让我们来看看最好的Android应用开发工具。

Android开发面试的几部分

1、基础知识

基础知识包括几个部分:Java(JDK、JVM)、Android、数据结构和算法、计算机基础、设计模式,有的还会问Flutter。

Java部分:

不太推荐这部分只看博客,因为很多博客并不系统也不完整,推荐完整看一遍《深入理解Java虚拟机》这本书,基本上这里面涵盖了JVM相关的所有面试问题,包括内存分区、GC机制、内存模型、锁、字节码、类加载等。JDK的部分会杂一些,基本上可以归类为几种:容器(必问HashMap、CurrentHashMap、ArrayList等)、线程池(必问)、注解、同步工具、动态代理、notify/wait/sleep。这部分可以从一些JDK相关的文章中去整理一遍。

Android部分:

这部分必问的是Handler机制、触摸事件传递、四大组件启动流程、View绘制流程、Binder机制、生命周期。经典的问题比如:

触摸事件一定是先传递到Activity然后才传递给View的么?

  • 如果要在Application的onCreate生命周期之前执行一些逻辑,可以放在哪里?
  • draw、onDraw、dispatchDraw执行的顺序如何?
  • View真正显示是在onResume之前还是之后?
  • Activity中嵌套有一个Fragment,startActivity之后,
  • Activity和Fragment的生命周期顺序是如何的?

数据结构与算法:

这部分在客户端开发中考察的比例会小一些,不过也有很多公司非常重视手写代码。经常碰到的问题有二叉树遍历、有序二维数组查找,排序等,基本上以《剑指offer》或者《编程之美》为准就可以了。

计算机基础:

这部分涵盖的比较杂,比如计算机网络(7层网络模型、Http和Https)、git工作流和命令、计算机缓存策略、UML、信息安全等等。

设计模式:

在自己的项目中一定要多总结和使用设计模式,面试官问你使用过什么设计模式的时候,如果能回答出比如状态模式、责任链、装饰等等,肯定会加分不少。如果只是回答单例和建造者模式,那就会逊色多了。这部分推荐看《研磨设计模式》。

开源项目:

这个也是必问的环节之一,建议从自己项目使用的开源项目入手,跟着代码,画一遍流程图和架构图,仔细体会这里面设计的优点和缺点。

比如OkHttp、LeakCanery等等,这些都可以。开源项目根据面试官的个人经验不同,问的深入程度也不一样,这时候就需要你个人的一些引导技巧,比如面试官可能不是很熟悉这个框架,这时候你能主动表达出这里面设计的一些细节,也能给面试官留下不错的印象。切忌在简历上写只是用过但是没看过源码的框架。

重点项目经历

小厂的项目往往追求业务快速迭代上线,相对比较能容忍一些技术难点,但是这些技术难点往往是能体现一个人技术能力的。所以你如果在小厂,就不能过分陷入到业务中,必须跳出来找一些有亮点的技术点,做好做精。这些技术点才是一个程序员安身立命的本钱,否则公司业务陷入困境了,你的价值也就不复存在了。在如何准备面试中项目这部分,小编有几点心得:

分成三部分:

  1. 为什么要做这个点
  2. 考虑了什么因素并且是如何做的
  3. 取得了什么效果(比如启动速度从1000ms降到200ms,这种具体的数据)

可以把几个小点串起来,这样可以显得更系统和全面一些,比如代码优化和性能优化结合在一起讲。

小厂的一些优化点往往只能做性价比最高的一部分,这时候还可以讲一下业界还有哪些更优的方案

最好再准备一下“如果你没有离职项目中还有有什么不足和可以优化的地方?”(笔者面试中碰到过几次这样的问题)

**小厂跳大厂,技术基础可以准备得很充分,但是项目绝对是一个弱项。**大厂一个App可能就有几十上百人在做,小厂很多所谓的优化在大厂的面试官眼中可能都是他们很早就做过了,这时候项目本身做了哪些东西并不是太重要,需要着重体现你解决问题的思路以及你是一个有追求的程序员,至少你要能做到业界的平均水平,这样才能有机会通过面试。

技术以外的东西

大厂面试中技术以外的部分也是非常重要的一部分,这部分大多是一些软技能:

自我驱动和追求

这部分主要是在平时工作中的一些自我驱动学习和自主追求一些技术能力,而不仅仅是完成需求就可以了,这样才能体现出你个人的成长性和潜力。

沟通和协作

这部分会评估你未来在团队的融入程度以及跟团队跨团队协作和沟通的能力。比如你在工作中是否能正确看待和解决一些跨部门沟通的问题。

我的面经总结

主要分为四个方面:

Android

  1. Android各个版本的特性(例如6.0,动态权限)
  2. ANR的原因
  3. Android中进程间通信的方式和对比
  4. AsyncTask的实现原理及优缺点
  5. Handler机制
  6. 自定义view三部曲,流程(或者实际场景题,例如实现一个表盘,怎么做)
  7. FrameWork层次结构
  8. Activity生命周期(A跳转到B,A和B中生命周期的执行顺序)
  9. Dvlik、ART、JVM三种虚拟机的区别
  10. 能不能在非UI线程更新UI
  11. Service和IntentService的区别
  12. Thread和HandlerThread的区别
  13. Touch事件分发机制
  14. 怎么知道一个Activity是否发生了泄露
  15. 从点击一个APP图标开始发生了什么
  16. Activity启动流程(源码看一遍,能大致讲出来就行)
  17. Activity启动模式(四种)
  18. Intent启动Activity的方式
  19. onStart和onResume的区别
  20. LruCache以及实现原理
  21. Android中的MVC、MVP、MVVM的区别和联系
  22. Parcelable和Serializable的区别
  23. Service生命周期
  24. Service的启动方式及区别
  25. Binder机制
  26. onSaveInstanceState和onRestoreInstanceState的调用时机(需要理解,一般会出个场景让你判断)
  27. onNewIntent的调用时机(同上)
  28. Android中的性能优化和内存优化
  29. RxJava说一下(常用操作符,背压,线程切换原理,实际应用)
  30. RxAndroid说一下
  31. EventBus原理
  32. Volley原理
  33. OkHttp原理
  34. Retrofit原理
  35. RxJava和Retrofit结合
  36. Dagger2原理
  37. 组件化介绍一下(为什么要有组件化,怎么解决合并冲突问题)
  38. 快应用介绍一下
  39. 屏幕适配的常用方法
  40. Service、进程保活
  41. Glide原理
  42. AsyncTask原理
  43. SurfaceView和普通View的区别
  44. 依赖注入框架的实现原理
  45. Git项目管理
  46. 什么是三级缓存

Java

  1. 常用的设计模式(掌握常见的大约10种就Ok)
  2. ThreadLoal的作用及原理
  3. 线程的实现方式和实现原理
  4. 线程的状态,怎么创建线程,线程状态之间的转化(例如什么情况下线程会由运行变为阻塞)
  5. 进程的状态
  6. transient关键字的作用
  7. sleep()和wait()的区别
  8. hashcode()方法的作用
  9. ==和equals()方法区别(为什么重写了equals()方法还要重写hashcode方法)
  10. Java的三大特性
  11. 接口和抽象类的区别
  12. 进程和线程的区别
  13. 线程池各参数的含义,以及四种常用线程池的应用场景
  14. 阻塞队列的特点和原理和应用场景
  15. yield()方法的作用
  16. 多线程锁的类型,ReentrantLock,Lock,synchrnoized关键字等
  17. volatile关键字的作用(在单例中的作用)
  18. 闭包的概念
  19. 泛型(什么是类型擦除,为什么要有泛型)
  20. 锁优化方式(自旋锁、自适应自旋、锁消除、锁粗化、偏向锁)
  21. 类执行顺序
  22. StringBuffer和StringBuilder的区别
  23. HashMap的实现原理(最好是1.8之前和1.8之后都要知道)
  24. ConcurrentHashMap的实现原理(同1.8之前和之后都要知道)
  25. ArrayList和LinkedList的区别
  26. Java内存区域(堆区和栈区的区别,什么是运行时常量池)
  27. 装箱和拆箱
  28. OOM异常
  29. GC机制(GC区域,如何判断一个对象是否可以回收,GC算法,GC策略)
  30. 类加载机制(类加载过程双亲委派模型)
  31. Java内存模型(主内存与工作内存)
  32. 原子性(AtomicInteger原理)、可见性(volatile关键字)、有序性,如何保证
  33. 先行发生原则(happens-before原则)
  34. 线程安全的实现方法
  35. 锁的类型(悲观锁,乐观锁CAS算法,公平锁,非公平锁等怎么实现)
  36. StringBuffer和StringBuilder区别
  37. 注解(自定义注解)
  38. 四种引用的概念和区别

计算机网络

  1. HTTP协议(头结构,几种请求方法,缓存机制,各版本的区别)
  2. HTTPS协议,和HTTP协议的区别,密钥协商的过程,SSL机制
  3. 对称加密和非对称加密
  4. TCP和UDP的区别
  5. TCP的三次握手、四次挥手(包括状态码,以及四次挥手后为什么要等待2*TIME_WAIT)
  6. TCP拥塞控制机制
  7. TCP滑动窗口机制
  8. TCP超时重传机制
  9. DNS协议
  10. 五层网络模型(物理层,数据链路层,网络层,传输层,应用层)
  11. IP头部
  12. 在浏览器地址输入一个网址,发生了什么

数据结构及算法

  1. 链表(单向链表,双向链表)
  2. 数组(旋转数组)
  3. 队列(双端队列,阻塞队列)
  4. 堆(大根堆、小根堆)
  5. 二叉树(完全二叉树、满二叉树、二叉排序树、平衡二叉树,红黑树)(深度遍历,层序遍历)
  6. 图(重点掌握图的深度优先遍历和广度优先遍历)
  7. 七大排序算法(冒泡,选择,插入,归并排序,快速排序,堆排序,希尔排序)
  8. 剑指offer上的算法题(能够对照目录,一看题目,能有思路,就ok)
  9. 二分查找
  10. 两个栈实现一个队列,两个队列实现一个栈
  11. 海量数据排序
  12. topK问题,有1千万个数,怎么快速找出最大的100个
  13. 合并两个有序数组,合并两个有序链表
  14. 杨氏矩阵(横向递增,纵向递增)中如何找到指定的数字
  15. 翻转一句话,例如I am 3 years old,翻转后,old years 3 am I
  16. 有10亿条数据,现在只有200M内存,怎么找出这10亿条数据中出现次数最多的100条数据

题外话

不管怎么样,不论是什么样的大小面试,要想不被面试官虐的不要不要的,只有刷爆面试题题做好全面的准备,当然除了这个还需要在平时把自己的基础打扎实,这样不论面试官怎么样一个知识点里往死里凿,你也能应付如流啊~

最后如果马化腾把腾讯给你一天,你会来做什么?欢迎评论区讨论。

识点里往死里凿,你也能应付如流啊~**

到此这篇关于2021最新Android笔试题总结美团Android岗职能要求的文章就介绍到这了,更多相关Android笔试题总结内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Android解决ScrollView下嵌套ListView和GridView中内容显示不全的问题

    最近为公司做的一个Demo里面用到了ScrollView嵌套了GridView和ListView,然而在嵌套的时候我发现GridView和ListView都是不能完全显示,显示的基本上都是单行的数据,最后查找资料和翻阅文档看到原因是ListView和GridView的绘制过程中在ScrollView中无法准确的测量自身的高度,而且listVIew和GridView抢占了焦点,使得ListView和GrideView具有自身的显示的效果,这样就测量出显示一行条目即可的距离,其他的条目根据自身的滑动

  • Android 面试题汇总

        Android 70道面试题汇总不再愁面试 本文为开发者奉献了70道经典Android面试题加答案--重要知识点几乎都涉及到了,你还等啥,赶紧收藏吧!! 1. 下列哪些语句关于内存回收的说明是正确的? (b) A. 程序员必须创建一个线程来释放内存 B. 内存回收程序负责释放无用内存 C. 内存回收程序允许程序员直接释放内存 D. 内存回收程序可以在指定的时间释放内存对象 2. 下面异常是属于Runtime Exception 的是(abcd)(多选) A.ArithmeticExcep

  • Android微信分享大图遇到的问题的解决方法

    起因: 要做一个微信图片分享的功能,但是对于大图会如下问题: 当时没有仔细查看错误日志,单纯的以为是图片太大的问题. 分享图片代码: public void WXsharePic(String transaction, final boolean isSession, Bitmap bitmap) { //初始化WXImageObject和WXMediaMessage对象 WXImageObject imageObject = new WXImageObject(bitmap); WXMedia

  • android: targetSdkVersion升级中Only fullscreen activities can request orientation问题的解决方法

    前言 这几天同事跟我在升级Android target SDK和build tool版本的时候,碰到了一个非常搞笑的问题,基本可以算作是"坑"了!我在这里跟大家分享一下,希望对您有所帮助. 特征 当我们把targetSdkVersion升级到27,buildToolsVersion和相关的support library升级到27.0.1后,在Android 8.0(API level 26)上,部分Activity出现了一个莫名其妙的crash,异常信息如下: java.lang.Ru

  • android 软键盘的POPUP布局的问题解决

    我正在开发一个软键盘,做得很好,但是我不知道如何自定义一个长按键的弹出窗口. 我的键盘视图: <?xml version="1.0" encoding="UTF-8"?> <android.inputmethodservice.KeyboardView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/keyboard

  • Android工程师面试题大全

    下面对这段时间面试遇到的问题进行整理,分享给大家供大家参考,具体内容如下 Java基础: 1.内存泄露的原因 1).资源对象没关闭. 如Cursor.File等资源.他们会在finalize中关闭,但这样效率太低.容易造成内存泄露. SQLiteCursor,当数据量大的时候容易泄露 2).使用Adapter时,没有使用系统缓存的converview. 3).即时调用recycle()释放不再使用的Bitmap. 适当降低Bitmap的采样率,如: BitmapFactory.Options o

  • Android开发解决popupWindow重叠报错问题

    在popupWindow里面再弹出popupWindow的时候会报这样的错误 ERROR/AndroidRuntime(888): android.view.WindowManager$BadTokenException: Unable to add window -- token android.view.ViewRoot$W@44ef1b68 is not valid; is your activity running? 报错的意思大概就是说依赖的Activity没了. 解决方法1 不要在当

  • Android招聘面试题解答

    一般简单题1. Android dvm的进程和Linux的进程,应用程序的进程是否为同一个概念?DVM指dalivk的虚拟机.每一个Android应用程序都在它自己的进程中运行,都拥有一个独立的Dalvik虚拟机实例.而每一个DVM都是在Linux 中的一个进程,所以说可以认为是同一个概念.2. SIM卡的 EF 文件有何作用?sim卡的文件系统有自己规范,主要是为了和手机通讯,sim本身可以有自己的操作系统,EF就是作存储并和手机通讯用的.3. 嵌入式操作系统内存管理有哪几种,各有何特性?页式

  • 腾讯、百度、华为、搜狗和滴滴Android面试题汇总

    前言:前一段时间和大家交流,据反馈现在Android岗位也没有以前那么多了,当然这不意味着饱和,只是市场更趋于合理一些,Android还有有很多机会的.最近结合一些面试的同学(包含社招和校招),整理了下一些面试题目.实际上,很多面试题网上都能找得到.我整理面试题如下,供大家参考,知道比没知道的好.可以帮大家查漏不缺.以下是(腾讯,百度,华为,搜狗和滴滴 这些厂的面试题) Android基础 View的绘制流程:自定义View如何考虑机型适配:自定义View的事件分发机制:View和ViewGro

  • 2021最新Android笔试题总结美团Android岗职能要求

    目录 Android开发面试的几部分 1.基础知识 Java部分: Android部分: 数据结构与算法: 计算机基础: 设计模式: 开源项目: 重点项目经历 技术以外的东西 自我驱动和追求 沟通和协作 我的面经总结 Android Java 计算机网络 数据结构及算法 题外话 优秀的战士需要出色的剑才能战斗.同样,在现代IT中,每个编码人员都需要最好的Android开发人员工具来提高他们的技能和效率.在Android应用程序开发这个残酷的竞争行业中,只有优秀的开发人员才能生存下去.您需要向客户

  • Android编程实现仿美团或淘宝的多级分类菜单效果示例【附demo源码下载】

    本文实例讲述了Android编程实现仿美团或淘宝的多级分类菜单效果.分享给大家供大家参考,具体如下: 这里要实现的是诸如美团/淘宝/百度糯米 多级分类菜单效果.当分类数量非常多时可以考虑采用两级分类,而诸如美团这种表现方式是一个不错的选择. 首先上效果图:   主要代码: 1. PopupWindow初始化过程: popupWindow = new PopupWindow(this); View view = LayoutInflater.from(this).inflate(R.layout.

  • Android使用RecyclerView仿美团分类界面

    RecyclerView目前来说对大家可能不陌生了.由于在公司的项目中,我们一直用的listview和gridview.某天产品设计仿照美团的分类界面设计了一个界面,我发现用gridview不能实现这样的效果,所以就想到了RecyclerView,确实是一个很好的控件.和大家分享一下. 效果图 简介 RecyclerView与ListView原理是类似的:都是仅仅维护少量的View并且可以展示大量的数据集.RecyclerView用以下两种方式简化了数据的展示和处理: * 使用LayoutMan

  • 2021年最新Redis面试题汇总(1)

    目录 1.Redis 是单线程还是多线程? 2.为什么 Redis 是单线程? 3.Redis 为什么使用单进程.单线程也很快 4.Redis 在项目中的使用场景 5.Redis 常见的数据结构 6.Redis 的字符串(SDS)和C语言的字符串区别 7.Sorted Set底层数据结构 8.Sorted Set 为什么同时使用字典和跳跃表? 9.Sorted Set 为什么使用跳跃表,而不是红黑树? 10.Hash 对象底层结构 11.Hash 对象的扩容流程 总结 1.Redis 是单线程还

  • Android开发教程之初识Android App

    一.认识Android操作系统 Android最早由安迪•罗宾(Andy Rubin)创办,2007年被Google公司收购,Google公司凭借Android操作系统在智能手机上取得了巨大的成功. 1.Android操作系统的特点 Android操作系统是一个多用户的Linux系统,每一个应用程序都是一个独立的用户.系统默认为每一个应用程序分配一个唯一的Linux用户ID(这个ID只能被系统使用,并且对于应用程序来说,这个ID是未知的).系统为一个应用程序的所有文件设置了权限,所以,只有分配给

  • JS前端笔试题分析

    本文实例分析了JS前端笔试题.分享给大家供大家参考,具体如下: 1.如何根据逗号分隔的字符串创建数组呢?请为下面的字符串创建一个数组,并访问第三个元素:"cats,dogs,birds,horses" 知识点:数组和字符串的转换.考察split() 方法.把一个字符串分割成字符串数组(将字符串按某个字符切割成若干个字符串,并以数组形式返回) var animalString="cats,dogs,birds,horses"; var animalArray=anim

  • Spring,hibernate,struts经典面试笔试题(含答案)

    本文讲述了Spring,hibernate,struts经典面试笔试题及其参考答案.分享给大家供大家参考,具体如下: 1.Hibernate工作原理及为什么要用? 原理: 1.读取并解析配置文件 2.读取并解析映射信息,创建SessionFactory 3.打开Sesssion 4.创建事务Transation 5.持久化操作 6.提交事务 7.关闭Session 8.关闭SesstionFactory 为什么要用: ① . 对JDBC访问数据库的代码做了封装,大大简化了数据访问层繁琐的重复性代

  • JS经典正则表达式笔试题汇总

    本文实例总结了JS经典正则表达式笔试题.分享给大家供大家参考,具体如下: 一.复习字符串的传统操作 如何获取一个字符串中的数字字符,并按数组形式输出,如 dgfhfgh254bhku289fgdhdy675gfh 输出[254,289,675] 分析:循环用charAt()的方法获取到每一个子字符串,判断他是不是在0~9之间,是就把他扔到准备好的数组里 var str="dgfhfgh254bhku289fgdhdy675gfh"; findNum(str); function fin

随机推荐