面试刷题11-19

技术面

考察Android相关基础知识,主要问题如下:

  1. 面向对象的三大特性,说明你在项目中的应用
  2. 简述内存泄漏,说明你在项目中遇到的内存泄漏
  3. 简述OOM
  4. 进程间通信实现方式
  5. 简述你读过的开源源码或底层源码

大学面

  1. 自我评价你的大学生活
  2. 简述你大学最喜欢的课程,并说明你对该课程的应用
  3. 描述大学遇到最大的问题

总结

  1. 面试经验缺乏
  2. 对于应用开发的理解不够透彻
  3. 源码阅读量约等于0

 

一面

  1. Java的堆和栈区别
  2. Java的GC垃圾回收机制
  3. 什么是多态
  4. 进程和线程的区别
  5. 你在项目中做过哪些性能优化
  6. 如何优化页面卡顿
  7. Handler消息机制
  8. Android自定义View
  9. 你最常用的开源框架及其原理
  10. MVC模式与MVP模式
  11. HTTP和HTTPS的区别
  12. TCP的三次握手是什么
  13. 你用到过的加密算法

RSA,MD5

二面

  1. HTTP常见的请求方式及主要操作

Get,Post

  1. Java函数传入值和引用的区别
  2. Java中String += “123”的实现过程
  3. String、StringBuffer、StringBuilder的区别
  4. Java多线程编程
  5. LinearLayout与RelativeLayout对比
  6. 使用Fragment和View的对比
  7. 你所读过的开源框架及其原理
  8. 使用Service的业务场景介绍
  9. Service和IntentService的区别
  10. 编程实现二叉树深度优先遍历、广度优先遍历

总结

字节跳动的春招挂在了三面,具体过程不表(十分心痛)。

总得来说面试暴露出个人对于Java的基本概念掌握不够透彻,对于一些Android开发中的可选项没有做深层次的理解(例如:Fragment和View分别应用在什么场景)。

 

 

一面

腾讯一面的面试官十分友好,提前一天电话邀约,约了第二天晚上七点面试。并没有过多问技术相关问题,主要考察了业务场景的分析。主要流程如下:

  1. 什么是BLE,以及BLE的应用场景是什么?
    答:BLE是Bluetooth Low Energy,低功耗蓝牙。BLE主要应用在短距离设备通信,距离限制在0-50m左右。

  2. 在局域网环境下,BLE通信与WIFI通信如何选择?
    答:没有仔细探究过。

  3. 聊聊你做过的那个大数据项目。(面试官其实是想让我聊聊数据挖掘)
    答:讲述了一下爬虫抓取、关键词提取、权值分析、建模分析等相关流程,合理避开了数据挖掘等问题,毕竟个人不擅长。

  4. 利用i++聊聊线程安全问题,如何解决线程安全?
    答:线程间共享内存,导致多线程下i的数值被多个线程控制,造成线程不安全,可以使用synchronized关键字避免。

  5. 聊聊Android系统里的消息机制。
    答:简述了一下Handler、Message、MessageQueue、Looper的实现原理。

  6. 编程实现一个抓取指定URL以及其子URL的接口。
    写了一个抓取子URL的递归函数。

 

一面

  1. 写一个单例模式
    过程中面试官不断引导:
    (1)是否应该封闭构造方法;
    (2)是否应该注意线程安全;
    (3)注意访问控制符、作用域等;
    (4)采用synchronized时,如果并发访问如何优化性能(这里其实是想让我用饿汉式单例模式,但当时没反应过来)。


 

  1. 简述进程和线程

  2. Activity的SingleTask启动模式
    Android四大组件(见Activity部分)

  3. Activity的生命周期
    (1)onStop方法什么情况下不触发
    (2)Back时,Activity的生命周期如何回调

    Activity生命周期详细解读(含部分源码)

  4. Handler消息机制
    (1)runOnUIThread方法的原理
    (2)Handler的实例如何创建

    Android消息机制

  5. 举几个Android内存泄漏的例子
    Android内存泄漏

  6. 简述Android进程间通信(IPC)
    答案可见本人Blog,
    面试官又提了多进程加载同一个Class如何保证唯一性的问题,问了一个ClassLoader的概念,没答上来。。

    Android进程间通信(IPC)

  7. Java的GC垃圾回收机制
    (1)如何判断对象是否需要被回收
    (2)两个互相引用的对象如何回收

  8. HashMap的相关概念
    (1)查找时间复杂度
    (2)应用场景

  9. equals和hashCode方法

  10. 计算机网络相关概念
    这是个人知识盲区,待出一篇Blog扫下盲。

总结

 

一面

首先是自我介绍,简单讲了下项目经验、个人收获(常规套路)。后续就是边聊天边提问,面试过程比较放松。下面简单罗列一下一面涉及到的问题:

  1. HTTP的工作原理?HTTP和HTTPS的区别?
    本来这个问题面试官就是想问HTTP的原理,但由于我并不了解,所以就引导面试官去问HTTPS,避开了个人盲区。

  2. 常规后台API开发的主流框架?
    简单讲了一下Spring、Spring Boot、MyBatis、JPA这类主流框架。

  3. 讲一下你在项目开发过程中会做哪些测试
    聊了下系统测试、单元测试,讲了一些边界测试等常用测试方法。
    说实话问这个问题的时候有点懵,有点没反应过来。

  4. 操作系统内进程和线程的区别?

  5. 单核CPU是否会出现线程安全问题?

  1. Activity和Fragment的区别?

  2. 讲一下你常用的几种布局

  3. 什么是ANR?开发中如何避免?
    ANR就是Application Not Responding,主要出现在主线程阻塞等情况下。
    规避方法回答了多线程编程。(后续看了下还有防死锁等)

  4. Android进程间通信机制
    Android进程间通信(IPC)

  5. 讲一下Bundle的实现原理

  6. 通过Launcher启动APP时,系统如何运行?

  7. 讲讲TCP/IP五层模型?

  8. TCP、UDP的区别?

  9. 手写二叉树层级扫描算法

二面

二面的面试官应该是一个项目经理,和他复盘了我简历上写的每一个项目。这一面的问题大多是偏向工程类、设计类的,提问也同样是边聊天边提问。下面罗列一下主要问题(面试时其实还会问一些小的细节,我就不列了):

  1. APP研发需要经过哪些过程?
    这个问题我倒没有直接回答常规项目开发流程(需求分析、概要设计、详细设计、编码、测试),而是直接从UE、UI之类的聊起来了,然后给面试官演示了一下个人设计并研发的APP。

  2. 绘制一下***的数据库设计视图(这里指定了一个个人开发项目)
    简单画了一下项目的数据库视图,讲了一下表间关联关系。

  3. 讲一下实际项目中进程间通信的应用场景

  4. 讲一下客户端和服务端如何实现数据同步
    回答了一下增量同步、全量同步两种同步方法。简述了一下如何设计一个增量同步方案。

  5. HTTP和HTTPS的区别?

  6. BLE蓝牙和传统蓝牙的区别?

  7. 如何实现BLE蓝牙的设备连接和通信建立?

  8. 手写和最大子序列算法

HR面

HR面就是比较常规的聊聊天,主要会了解一下这几个方面:

  1. 期望工作地点
  2. 个人发展方向
  3. 公司待遇
  4. 薪资

总结

因为本次是现场面试,所以过程中比较放松,主要的问题都回答上来了,不怎么了解的问题也尽可能的去从别的角度回到了,总得来说还算可以。但是操作系统、Android偏低层的原理这两个方面还比较弱。
但愿这次能从众多硕士大佬们中间虎口夺食,拿到秋招第一份Offer。

 

2020小米客户端开发岗面经

之前一直没有收到小米的笔试安排,倒是直接安排了视频免,面试官人比较nice,是米家APP的研发(BASE北京)。面试感觉还不错,可能因为个人在面试过程中表露了不想去北京的意思,导致一面完就没了。简单罗列一下面试涉及到的问题,以及个人的答案。

技术类问题

  1. final可以用来修饰什么?有什么作用?

  2. 重写和重载的区别

  3. 如何比较两个对象是否相等?

equals

  1. 简述HashMap的存储数据结构

  2. Thread和Runnable有什么区别?

  3. 抽象类和接口有什么区别?

  4. 内部类和静态内部类有什么区别?

  5. Android常见的内存泄漏有哪些?
    Android内存泄漏

  6. String、StringBuilder、StringBuffer有什么区别?
    String、StringBuilder、StringBuffer的区别

  7. 简述Activity生命周期
    Activity生命周期详细解读(含部分源码)

  8. onStart和onResume的区别是什么?
    同上文

  9. Activity的四种启动模式
    Android四大组件

  10. 聊聊你常用的单例模式

    直接回答了饿汉式

  11. Handler消息机制
    Android消息机制

  12. 简述你在项目中进行了哪些多线程开发?

  13. 线程池如何进行任务分派?

核心线程数,最大线程数,任务队列

  1. RecycleView和ListView有什么区别?

  2. 简述GC垃圾回收机制

  3. BLE开发时,如何处理消息队列?

    考虑的是可以对消息队列进行一定的延时处理,避免设备无法响应。

  4. TCP和UDP有什么区别?

  5. 简述TCP/IP五层模型

  6. 实际项目中遇到最大的问题是什么?

综合类问题

  1. 个人有什么缺点和优点?

  2. 生活中遇到与你无法相处的人时,你如何处理?

    短期相处的话适当谦让,长期相处的话通过团建、沟通等方式缓解矛盾。(面试官对这个回答倒还挺满意)

  3. 有什么兴趣爱好?

  4. 大学生活中遇到了哪些挫折?

  5. 爱看什么书?

  6. 是否有个人博客?

  7. 今后有什么职业目标?

8月20日一面

  1. 讲一下Class字节码结构
  2. 如何进行Class反编译
  3. 项目中如何定位内存泄漏?
  4. 介绍Calendar APP的主要功能
  5. 讲一下在项目中遇到的Crash
  6. 如何定位Crash
  7. Throwable、Error和Exception的区别

1.throwable是父类,exception是子类。

2.throwable是根基,exception是从throwable派生出来的。

3.throwable中包括exception(异常)和error(错误)。

4.throwable用来定义所有可以作为异常被抛出来的类,exception专指程序本身可以处理的异常,一般性的异常。

  1. 讲一下finalize()的作用
  2. Activity的生命周期
  3. Activity在finalize()中重新引用后,能否进行Activity保活
  4. 手撸链表去重算法

8月29日一面

  1. Class编译过程
  2. 自定义View时需要经过哪些过程?
  3. 如何绘制圆形、曲线等?
  4. 自定义View是如何绘制在屏幕上的?
  5. 简述Activity生命周期
  6. 应用切换到后台,前台Activity生命周期经过哪些变化?
  7. onNewIntent方法什么时候触发?
  8. singleTask和singleTop有什么区别?
  9. 两个Activity如何进行跨进程通信?
  10. 一个进程进行文件读取时,如何设置权限(不让其他进程访问)?
  11. Android如何实现多线程?
  12. 简述Handler消息机制
  13. JVM是什么?为什么需要JVM?
  14. 简述客户端网络请求架构
  15. 如何保证客户端网络请求安全性?

加密

  1. HTTP长连接、短连接是什么?
  2. 简述TCP三次握手
  3. HTTPS是如何加密的?
  4. DNS是什么?
  5. 如何从一亿个QQ号中筛选出五个指定QQ号?
  6. 简述快排算法实现过程,时间复杂度是多少?有什么弊端?
  7. 简述归并排序算法,时间复杂度是多少?

 

 

2020VIVO安卓开发岗面经

正式批投递了VIVO校招Java开发(Android方向)的岗位,笔试的话是三道编程,AC两道、一道90%。近期给安排了南京地区的现场面试,面试是通过了的,无奈薪资给的太低。简单罗列一下面试涉及的问题:

一面

一面是技术面,在面试前就已经了解到VIVO的面试官好多都是冷着脸,一到现场果然。。。

上来先是素质三连:

  1. 一分钟自我介绍
  2. 为什么选择VIVO公司?
  3. 为什么选择Android方向?

后面就都是些常规的技术类问题了,不过面试官比较倾向于MySQL:

  1. Java三大特性及实际应用
  2. abstract class和interface的区别
  3. final关键字的作用(变量、函数、类)?
  4. static关键字的作用
  5. 线程间如何实现延时启动?假设有三个线程(ABC),C需要在AB线程结束时才执行,如何设计?

倒计时

  1. 简述Map的几种遍历方式
  2. 双向链表和单链表有什么区别?
  3. 关系型数据库和非关系型数据库有什么区别?
  4. MySQL如何进行数据库升级?
  5. MySQL如何排序?
  6. 简述工厂模式
  7. 简述单例模式
  8. 懒汉式单例如何保证线程安全?

双重校验锁

  1. 简述快排
  2. 简述Android生命周期
  3. 当前活跃页面被覆盖时,生命周期如何变化?
  4. 简述自定义View的设计过程
  5. 简述Handler消息机制
  6. Handler的消息执行是在哪个线程上?
  7. 简述ContentProvider
  8. 哪些场景应该使用Service?
  9. Service是运行在什么线程上的?
  10. SharedPreference的apply和commit方法有什么区别?

二面

二面是HR面,问的都比较轻松,大多是聊聊天。

  1. 考研和工作之间如何选择?
  2. 用两个词形容下自己
  3. 个人有什么优点?
  4. 聊聊目前找工作的情况
  5. 是否了解过VIVO的薪资水平、薪资结构?
  6. 预期薪资多少?如果给不了你预期的薪资怎么办?
  7. 在学校都做过什么学生事务工作?

 

一面

一面问的问题大多是开放性问题,主要是看个人思路吧。

  1. 手撕依赖关系树扫描算法(期间提了不重复扫描、优化时间复杂度等要求)
  2. 简述如何实现未知长度的数组翻转?
  3. 简述内存泄漏,你处理过哪些内存泄漏?
  4. 以100ms/张的间隔时间播放100张图片,且每张图片需要400ms进行加载,如何设计?
  5. 如何在无序数组中快速找到最小值(手撕二分查找算法)
  6. 简述Android中的ANR,以及为什么会出现ANR?
  7. 简述Handler消息机制(深挖内部实现原理)

二面

  1. 手撕一个有序数组的二分查找算法
  2. 列举一个你在实际项目中所进行的性能优化(深挖具体细节)。
  3. 简述单例模式的实现方式,且单例模式有什么优缺点?
  4. 简述Java的异常处理机制
  5. 多线程间如何进行信息通信?
  6. 多线程如何保证线程安全?
  7. 简述线程池
  8. 简述HashMap实现机制,如何解决HashMap的线程安全问题?
  9. TCP和UDP的区别,分别有哪些应用场景?
  10. 简述七层网络模型
  11. 简述Android点击事件的分发机制
  12. 画一个BLE APP的功能架构图

三面

三面相当于是综面和HR面和在一起了,主要问题也是分两个模块。

业务类问题:

  1. 手绘Class间依赖关系图
  2. 聊聊如何处理并发编程
  3. 手撕消费者模型代码,主要线程安全、队列等情况。
  4. 简述Android系统的类加载机制
  5. Activity的生命周期通过什么机制来通知?


 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值