记录:百度Android开发工程师面试题

26 篇文章 1 订阅

博主近期面试了百度网盘的Android开发高级工程师职位,好多人都问我在BAT面试大神们都会问些什么问题,所以我在这里整理了一下,我就不再写面试的流程什么的了,博主过了一面和二面,三面在等通知,其中一面和二面问的全是纯技术,三面问的近期做的项目相关,比如遇到哪些困难,怎么解决的,架构是如何搭建的等等,又聊了些以后的职业规划,面试的感觉还是很不错的,这是近三年来,我的第一个面试,所以准备得不够充分,发挥的不太好,也就发挥出了百分之六七十的实力,不多说了,直接上干货(问题不分先后顺序,不分一二三面顺序):

一、Java相关

1、Java垃圾回收机制。
2、JVM虚拟机的原理以及类加载机制。
3、说几种用过的设计模式,选其中一种画出UML图,并在纸上写出代码。
4、写一个观察者模式
5、写一个单例模式,说出单例模式的优缺点,什么情况下要用单例模式?
6、介绍一下Java的数据结构。
7、请简要说明下观察者模式和接口回调的区别,比如一个网络请求方法:public void request(Callback c),其中Callback 是interface类型,为什么不是class类呢?有什么区别?
8、如何创建线程池?请说出优缺点。
9、用过哪些支持并发的集合?
10、HashMap和HashTable的区别,以及HashMap的原理。
11、说一下MVP、MVC、MVVM。
12、说一下代理模式,动态代理和静态代理有什么区别?原理是什么?
13、算法题:如何创建一个长度为n的链表?写一个算法,算出该链表的倒数第k个节点.
14、算法题:在B线程打印到5的时候,A线程开始打印。请用多种方法实现。
 public static void main(String[] args) {
    new Thread(new TaskA()).start();
    new Thread(new TaskB()).start();
}

static class TaskA implements Runnable {
    @Override
    public void run() {
        for (int i = 0; i < 20; i++) {
            System.out.print("i=:" + i);
        }
    }
}

static class TaskB implements Runnable {
    @Override
    public void run() {
        for (int i = 0; i < 20; i++) {
            System.out.print("i=:" + i);
        }
    }
}

二、Android相关

1、说一下ContentProvider的用法,底层是怎么实现的。
2、用过哪些跨进程通讯的方式?原理是什么?请简述一下AIDL是怎么用的。
3、Activity启动模式。
4、算法题:在SD卡下有一个文件,里面记录着十万条电话号码,请你写一个算法有效查 询“13888888888”这个手机号是否在其中。
5、说一下Android的通讯机制。
6、说一下Retorfit2的原理。
7、说下Dagger和Dagger2的区别。
8、说一下RxJava2的原理。

三、其他

1、最近一个作的项目是哪个?你在这个项目中是什么角色?遇到了哪些困难是怎么解决的?这个项目的架构是什么样的(因为是博主做的架构)?
2、以后你的规划是什么?现在除了Android还会写什么?打算学什么?
3、如果你想学的和工作需要的有冲突,你要怎么解决这个问题?
4、如果你想学的这些,在现实中并没有那么多的时间去学,那你要怎么办?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值