【Android面经】10个中小型公司面试时会问些什么?

本文分享了作者在寻找中小厂工作过程中积累的面试经验和题目解答,重点涵盖Java基础知识、内存模型、Android组件、网络编程、并发编程等内容,旨在帮助开发者提升面试技巧和理解企业考察重点。
摘要由CSDN通过智能技术生成

前言

现在百度,阿里,腾讯,字节跳动等大厂的Android开发面试真题、面经随处可见。但是中小厂的面经倒是很稀缺。但其实中小厂面经的需求还是有的,很多的Android开发者可能由于地理,能力,兴趣,志向的不同,短期或长期并没有进入大厂的打算,即便可以通过网上的各种渠道获取到所谓的 “题海” 。然后疯狂的刷面试题,进行题海战术,但还是对面试感到迷茫。

我本人正是由于这样那样的原因(当然还是实力不行),短期内并没有进入大厂的打算,再加上被前公司优化了,所以选择了近十家中小企业进行了面试,采用录音的形式将面试题记录下来,并整理出本篇中小厂面经。

本文的主旨是面经,而非面试题的整合,文中会对部分面试题进行讲解,也会有部分我在面试中的经历和我当时是怎么回答这个问题的,只是给大家提供个思路,绝非标准答案。

在这里插入图片描述

宇宙集市

一面

Java方面

  • 静态变量和实例变量的区别
  • 静态变量有static关键字修饰
  • 静态变量不属于某个实例对象,而是属于类,也叫类变量,只要程序加载了类的字节码,不用创建任何实例对象就会被分配空间,就可以被使用,也就是说,你创建了多个对象,他们共用了一个静态变量,而实例对象是属于自己的独有的,不会被共享!(可以Class.var使用),位于方法区
  • 实例变量必须创建对象后,才可以通过这个对象来使用。即new Class().var,位于堆区
  • “==” & equals()
  • 浅拷贝 & 深拷贝
  • HashMap , 扩容机制
  • 多个线程如果共享多个资源,需要怎么保证安全
  • volatile,CAS/ABA

Android方面

  • 事件的分发机制
  • Handler原理
  • TCP UDP
  • Kotlin和Java的区别

极豆车联网

一面:
  • 一个平面上n个点,找出k条线穿过max点数
  • 100位面试者,每人要四轮面试,怎么分配面试官
二面:
  • 手撕:最长单调区间
  • Android/ 布局优化
  • Activity启动模式
  • RecyclerView和ListView区别
  • Handler机制,loop方法为何不会造成ANR
  • View绘制流程
  • SingleTop和standard启动模式下,生命周期回调有何不同
  • onStart和onResume区别
  • Java/ 面向对象三大特性
  • Array和Linked区别
  • HashMap底层
  • 进程间通信方式
  • equals和==区别
  • 线程间加锁的方式
  • 知道啥设计模式
  • synchronized的不同使用
  • 异常
  • 线程池
  • 创建线程的方式
  • OS/ 死锁
  • 网络/ tcp和udp的区别

双旗科技

Android方面:

  • 讲一下Android发生Crash的整体流程。Android在遇到非可检异常时就会触发该线程的 unCatchExcepttionHandler中的unCatchException()方法,最终在该方法的 process.kill()方法中杀死该进程,appCrash完成。

  • Native层Crash是如何捕获到的?Android NativeCrash发生时会向该进程发出错误的不可处理信号,Linux系统收到该信号后无法处理便会杀死进程,发生Crash。Android当中捕获的方法主要是使用了Linux系统下的核心转储机制,在发生Crash前系统会记录下当前的上下文信息,形成tombstone文件,存储起来,再杀死线程,这个tombstone文件就是我们要分析的对象。

  • Java层Crash是如何捕获到的?JavaCrash的捕获有几个关键部分

  • RuntimeInit类中的LoggingHandler类,用于打印日志时使用

  • RuntimeInit类中的KillApplicationHandler类,是一个系统默认的 UncaughtExceptionHandler,用于发生JavaCrash时kill掉进程

  • RuntimeInit类中的commonInit方法,其内部就是初始化了所有线程的set UncaughtExceptionHandler()。因此在发生非可检异常时,就会调用该线程的
    UncaughtExceptionHandler.unCatchException方法,在该方法内部进行捕获。

  • 如何做到发生异常时不会杀死APP?在
    UncaughtExceptionHandler.unCatchException方法调用Looper进行死循环可以。

  • 讲一下Handler机制

  • Looper的定时器是用如何实现的?通过nativePollOnce(ptr, nextPollTimeoutMillis);定时睡眠nativeWake(mPtr);进行唤醒

  • APK包里有什么?主要有5个部分:

    • dex文件:.class文件编译后的产物
    • Assets:资源文件,如图片等,主要是通过AssetsManger来进行加载。
    • Resource:资源文件,layout等,通过R.xxxxxx.id来进行引用
    • Library:so库引用目录
    • META-INF:APK 签名有关的信息
  • APP在运行时是通过什么来获取到layout文件的?

  • 讲一下surfaceview跟textview。

  • Activity A 启动 Activity B 时,他们在同一个栈的情况下生命周期以及执行顺序是怎么样的?

  • Destroy()方法是什么时候调用的?

  • 调用finish()方法。

  • Handler中已经没有要处理的message。 满足这两个条件才会调用。

Java方面:

  • 有什么线程同步的机制?
  • volatile关键字讲一下。
  • volatile如何实现可见性?
  • synchronize如何实现可见性?
  • volatile防止指令重排代码级别如何实现?

智建云

一面
  • jvm内存模型
  • new 对象的过程
  • 类加载过程
  • ClassLoader源码
  • final关键字
  • 匿名内部类
  • 讲下垃圾回收算法
  • LinkedList && ArrayList
  • hashMap
  • 常用注解,spring中的注解
  • 锁,synchronized底层原理
  • https && http
  • 浏览器输入地址后的过程
  • 状态码 303 304
  • 你知道的设计模式
  • 单例模式 说了双重校验锁,静态内部类 ,不同场景下如何选择
  • 双重校验锁为什么要两次判空
  • volatile,指令重排
二面:
  • Activity启动模式
  • Activity A → B的生命周期在这四种启动模式下的状态
  • 广播类型
  • 有序广播如何实现的按顺序收到广播
  • 持久化存储方式
  • SharedPreferences的格式
  • xml解析方式
  • json与xml的区别,json为什么比xml更好
  • Android view绘制流程
  • surfaceView
  • sp, dp, px的区别
  • 机型大小适配
  • 适配语言
  • ANR 什么时候出现,如何排查
  • Android动画
  • startService与bindService的区别
  • Service保活方式
  • java泛型,<? extends T>能否add元素
  • 重写equals方法需要重写hashCode方法吗
  • ThreadLocal
  • wait,sleep,yield,join的区别

经验总结

多家面试总结下来,考察范围都很广,包括基础知识、项目。

基础知识这块,需要花大量时间准备每一个细节,知其所以然,这样才能面试的时候问起来,都能头头是道。

项目,不仅要熟悉项目做了什么事情,而且要提炼出项目中的闪光点或者说不一样的地方,这些在面试之前都要想清楚。

然后就是要多刷题。面试了这么多公司,除了极少部分,其他公司的每一轮都会要求做题,所以在面试之前要对各种常见面试题了解,有时间的话多去刷刷题找感觉。

面试题笔记分享

为了助力朋友们跳槽面试、升职加薪、职业困境,提高自己的技术,本文给大家整了一套涵盖Android所有技术栈的快速学习方法和笔记。目前已经收到了七八个网友的反馈,说是面试问到了很多这里面的知识点。

在这里插入图片描述
每一章节都是站在企业考察思维出发,作为招聘者角度回答。从考察问题延展到考察知识点,再到如何优雅回答一面俱全,可以说是求职面试的必备宝典,每一部分都有上百页内容,接下来具体展示,完整版可直接下方扫码领取。

第一章 算法和数据结构面试题汇总

在这里插入图片描述

第二章 Java核心基础面试题汇总

在这里插入图片描述

第三章 Java深入泛型与注解面试题汇总

在这里插入图片描述

第四章 Java并发编程面试题汇总

在这里插入图片描述

第五章 Java虚拟机原理面试题汇总

在这里插入图片描述

第六章 Java反射类加载与动态代理面试题汇总

在这里插入图片描述

第七章 网络编程面试题汇总

在这里插入图片描述

第九章 高级UI面试题汇总

在这里插入图片描述

第十章 Framework内核解析面试题汇总

在这里插入图片描述

第十一章 Android组件内核面试题汇总

在这里插入图片描述

第十二章 程序性能优化与数据持久化面试题汇总

在这里插入图片描述

第十三章 开源框架面试题汇总

在这里插入图片描述

有需要完整面试题+答案解析的朋友,可以扫描下方二维码免费领取!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值