面经汇总


黑马 —— 面试题

二本渣院的腾讯+阿里offer(Android面经

二本渣院的腾讯+阿里offer(Android面经)

腾讯

腾讯一面

  • 自我介绍
  • 自我介绍时说过自己看过EventBus源码,然后让我谈谈事件总线的理解。
  • EventBus会有什么问题吗?
  • EventBus、接口回调、观察者模式的使用场景说一下。
  • 项目什么地方用到数据的持久化,说一下。
  • Activity的生命周期,弹出dialog和一个activity的dialog生命周期有什么区别?
  • Activity的启动模式,应用场景,然后举了很多微信的场景,让我去选择用那种启动模式,说下理由。
  • Activity进程的优先级。
  • 如何防止微信不被系统杀死?
  • service两种启动模式,区别
  • 两种启动模式,如果我在退出Activity的时候没有退出service会怎么样。
  • 设计一个图片浏览框架,(线程池,lru缓存,brabra的说了一堆)。
  • 有一个很大很大的图片加载到内存上,不能降低清晰度和压缩图片你怎么解决?(提示我局部显示?我没懂)
  • 如何适配不同厂商的手机,然后设计模式,brara又说了一大堆,最后还说到jetkins自动部署上面去了
  • AsyncTask源码分析,每个方法在哪个线程执行的?

腾讯二面

  • 上来大数相乘,我做的眼泪都快流出来了。
    大数相乘-经典笔试题
    基本思想
    输入字符串,转成char数组,转成int数组。采用分治思想,每一位的相乘;
    公式:AB*CD = AC (BC+AD) BD
    然后从后到前满十进位,顺序如右(BD,(BC+AD),AC)。
    在这里插入图片描述
package demo.test;

import java.util.Scanner;

/**
 * 大数相乘
 * @author Ant
 *
 */
public class BigMultiply {

    /**
     * 大数相乘基本思想,输入字符串,转成char数组,转成int数组。采用分治思想,每一位的相乘;<br>
     * 公式:AB*CD = AC (BC+AD) BD , 然后从后到前满十进位(BD,(BC+AD),AC)。
     * @param num1
     * @param num2
     */
    public String multiply(String num1, String num2){
        //把字符串转换成char数组
        char chars1[] = num1.toCharArray();
        char chars2[] = num2.toCharArray();

        //声明存放结果和两个乘积的容器
        int result[] = new int[chars1.length + chars2.length];
        int n1[] = new int[chars1.length];
        int n2[] = new int[chars2.length];

        //把char转换成int数组,为什么要减去一个'0'呢?因为要减去0的ascii码得到的就是实际的数字
        for(int i = 0; i < chars1.length;i++)
            n1[i] = chars1[i]-'0';
        for(int i = 0; i < chars2.length;i++)
            n2[i] = chars2[i]-'0';

        //逐个相乘,因为你会发现。AB*CD = AC(BC+AD)BD , 然后进位。
        for(int i =0 ; i < chars1.length; i++){
            for(int j =0; j < chars2.length; j++){
                result[i+j]+=n1[i]*n2[j];
            }
        }

        //满10进位,从后往前满十进位
        for(int i =result.length-1; i > 0 ;i--){
            result[i-1] += result[i] / 10;
            result[i] = result[i] % 10;
        }

        //转成string并返回
        String resultStr = "";
        for(int i = 0; i < result.length-1; i++){
            resultStr+=""+result[i];
        }
        return resultStr;
    }

    public static void main(String[] args) {
        BigMultiply bm = new BigMultiply();
        System.out.println("-----输入两个大数------");
        Scanner scanner = new Scanner(System.in);
        String num1 = scanner.next();
        String num2 = scanner.next();
        String result = bm.multiply(num1, num2);
        System.out.println("相乘结果为:"+result);
        scanner.close();
    }
}
  • put和post的区别,应用场景。
  • 看了我的flutter项目,我改了一个框架,问我这个框架。
  • 让你设计一个跨平台的框架,你怎么设计(这里我谈了flutter的架构)。
  • https的流程。
  • fragment的懒加载。
  • 一个商场里有一个电影院,你会把厕所建设在哪里,说一下你的理由?

hr面

  • 自我介绍
  • 为什么选择微信?
  • 对我们了解吗?
  • 愿不愿意来
  • 家里的情况
  • 什么时候可以来实习,可以实习到什么时候

阿里

阿里一面

  • 自我介绍
  • 自己看过的源码,说一下?
  • 接下来就EventBus的东西了,还是老问题,优缺点,有没有什么问题,列举了很多场景,我看源码看的比较细,根据自己看过的东西做回答和分析,然后还是,接口回调和观察者模式之间的选择。
  • 问我你看过这么多源码,你觉得什么东西最重要?
  • 答了源码中看到了大量的反射使用,多线程方面,Collections,数据结构这些。
  • 问我多线程,引申出handler,我从handler的源码去解释
  • handler引申出的内存泄漏,为什么静态内部类不会持有外部类对象
    静态内部类是类相关的,在编译的时候会被初始化且只有一次,外部类对象是只有在实例化后才存在的。因此静态内部类不会持有外部类对象
  • 接下来还是场景题,图片框架的实现,涉及到的Lru缓存,线程池,线程池该如何分配线程数量。
  • APP从打开到显示之间发生的事情。
  • 为什么java可以调用c/c++的函数,调用jni发生的事情说一下。
  • 动画种类,使用动画的步骤,有没有看过动画框架的源码。
    (面试官说我在应用层上基础知识很好,懂得去看源码学习,但是android深度不够,应该要往Framework和c/c++那边学习)

阿里二面

  • 自我介绍
  • 还是自己对EventBus的理解。
  • 学习Android的过程
  • 项目遇到的问题,怎么解决的
  • 回答过程中提到csrf,问原理
  • 对公司有什么要求
  • IPC
  • socket的连接过程
    (说我这方面的技术和兴趣不错,但是缺少大型项目的经验,考虑不够全面,如果有一个机会给我就很好了。)

阿里三面

  • 自我介绍
  • 详细说我第一个项目
  • http缓存
  • 如何把ip地址存储在一个int 变量里面?
    【详细分解】如何把IP地址保存到Int类型变量中
    实现原理
    ipv4的地址可分解为4段,每段范围0-255;int类型的变量同样也有4个字节,每个字节的上限也是255(11111111)且每个字节有8位,结合这两个特性,可以把IP的地址的每一段分别对应到int的每一个字节当中,因为要存储到一个int变量中,所以要在存储时要依次位移8位,这样的话一个IP便可保存在一个int型变量中。
   public static void main(String[] args)
    {
        String ip = "172.185.255.233";

        //step1: 分解IP字符串,并对应写对字节数组
        byte[] ip1 = ipToBytes(ip);

        //step2: 对字节数组里的每个字节进行左移位处理,分别对应到整型变量的4个字节
        int ip2 = bytesToInt(ip1);
        System.out.println("整型ip ----> " + ip2);
        
        //对整型变量进行右位移处理,恢复IP字符串
        String ip3 = intToIp(ip2);
        System.out.println("字符串ip---->"+ip3);

    }

    /**
     * 第一步,把IP地址分解为一个btye数组
     * 
     * @param ipAddr
     * @return int
     */
    public static byte[] ipToBytes(String ipAddr)
    {
        //初始化字节数组,定义长度为4
        byte[] ret = new byte[4];
        try
        {
            //使用关键字"." 分割字符串数组
            String[] ipArr = ipAddr.split("\\.");
            
            //将字符串数组依次写入字节数组
            ret[0] = (byte) (Integer.parseInt(ipArr[0]));
            ret[1] = (byte) (Integer.parseInt(ipArr[1]));
            ret[2] = (byte) (Integer.parseInt(ipArr[2]));
            ret[3] = (byte) (Integer.parseInt(ipArr[3]));
            return ret;
        } catch (Exception e)
        {
            throw new IllegalArgumentException("invalid IP : "+ipAddr);
        }
    }

    /**
     * 根据位运算把 byte[] -> int
     * 
     * 原理:将每个字节强制转化为8位二进制码,然后依次左移8位,对应到Int变量的4个字节中
     * 
     * @param bytes
     * @return int
     */
    public static int bytesToInt(byte[] bytes)
    {
        int addr = 0;               //初始化Int变量addr=0
        addr |= (bytes[0] & 0xFF);  //强制转化为8位二进制码,比如原码是101,强转后00000101
        addr = addr << 8;           //左移8位,得到00000101 00000000,给下个字节的拼接创造环境(预留8位0,方便用|进行拼接)
        addr |=(bytes[1] & 0xFF);   //强制转化为8位二进制码,比如原码是10101,强转后00010101,和00000101 00000000进行或运算后得到00000101 00010101
        addr = addr << 8;           //左移8位,得到00000101 00010101 00000000
        addr |= (bytes[2] & 0xFF);  //强制转化为8位二进制码,比如原码是111,强转后00000111,和00000101 00010101 00000000进行或运算后得到00000101 00010101 00000111 
        addr = addr << 8;           //左移8位,得到00000101 00010101 00000111 00000000
        addr |= ((bytes[3]) & 0xFF);//强制转化为8位二进制码,比如原码是1,强转后00000001,和00000101 00010101 00000111 00000000进行或运算后得到00000101 00010101 00000111 00000001
        return addr;                //拼接结束,返回int变量

//      优化之后的写法,原理相同,不过是先移位后直接强转的同时指定位数
//      int addr = bytes[3] & 0xFF;
//      addr |= ((bytes[2] << 8) & 0xFF00);
//      addr |= ((bytes[1] << 16) & 0xFF0000);
//      addr |= ((bytes[0] << 24) & 0xFF000000);
//      return addr;
        
    }
    

    /** 
     * 把int->string地址 
     * @param ipInt 
     * @return String 
     */  
    public static String intToIp(int ipInt) {  
        return new StringBuilder()
                .append(((ipInt >> 24) & 0xFF)).append('.')   //右移3个字节(24位),得到IP地址的第一段也就是int变量的第一个字节(从左边算起)
                .append((ipInt >> 16) & 0xFF).append('.')     //右移2字节(16位),得到int变量的第一和第二个字节(从左边算起),经过&0xFF处理得到后8位也就是byte[1]
                .append((ipInt >> 8) & 0xFF).append('.')      //同理如上
                .append((ipInt & 0xFF))                       //同理如上
                .toString();  

//        第二种,先强转二进制,再进行移位处理
//        return new StringBuilder()
//                .append(((ipInt & 0xFF000000) >> 24) & 0xFF).append('.')   //右移3个字节(24位),得到IP地址的第一段也就是byte[0],为了防止符号位是1也就是负数,最后再一次& 0xFF
//                .append((ipInt & 0xFF0000) >> 16).append('.')
//                .append((ipInt & 0xFF00) >> 8).append('.')
//                .append((ipInt & 0xFF))  
//                .toString();  
    } 
  • 详细介绍第二个项目
    (30min,面试官说我自己对技术的热情很不错,让我保持下去,口头直接让我过,让我等hr)

阿里HR面

  • 从小到大最有压力的事
  • 数学怎么样
  • 你考上这个学校是正常发挥吗? 我回答的是!/(ㄒoㄒ)/~~ 很凉
  • 什么事情让你觉得自己喜欢移动端
  • 哪里人,想去哪里
    (hr面只有15分钟,感觉不太好)
    (昨天收到offer意向书,整个流程横跨两个月)

安卓面经:百度腾讯滴滴美团头条网易搜狐华为链家小米拼多多

安卓面经:百度腾讯滴滴美团头条网易搜狐华为链家小米拼多多

小米

8月29日 小米一面 (1小时20分钟)

  • 讲一个你印象比较深刻的项目
  • 讲一下Volley框架的实现机制
  • BLE蓝牙的使用流程
  • 设计模式你说下
  • binder机制应用层面上说下
    从应用层面剖析Android Binder机制
    (1)AIDL
    在这里插入图片描述
    (1)定义一个服务IService接口,定义提供服务方法。 继承自IInterface 表示可以跨进程调用
    (2)Service端实现IService,继承自Binder,通过重写onTransact()方法实现IService中的方法。则Service端可以处理Client端调用请求
    (3)Client端持有BinderProxy,通过BinderProxy.transact()方法调用Service中方法,经过Binder驱动跨进程传递之后,最终找到Server端onTransact()执行

BinderProxy将客户端的请求参数通过Parcel包装后通过Binder传到远程服务端,远程服务端解析数据并执行对应的操作,同时客户端线程挂起,当服务端方法执行完毕后,再将返回结果写入到另外一个Parcel中并将其通过Binder传回到客户端Proxy,客户端Proxy会解析数据包中的内容并将原始结果返回给客户端真正调用者,至此,整个Binder的工作过程就完成了。
由此可见,Binder是一个典型的代理者模式,Parcel对象就在这个通道中跨进程传输。
(2)Android Framework层对Binder跨进程应用在这里插入图片描述
新进程app process向servicemanager查询system_server进程中binder服务端AMS, 获取相对应的Client端,也就是AMP. 有了这一对binder c/s对, 那么app process便可以通过binder向跨进程system_server发送请求,即attachApplication()
system_server进程接收到相应binder操作后,经过多次调用,利用ATP向app process发送binder请求, 即bindApplication. system_server拥有ATP/AMS, 每一个新创建的进程都会有一个相应的AT/AMP,从而可以跨进程 进行相互通信. 这便是进程创建过程的完整生态链。

  • View事件分发机制说下
  • android性能优化说下(布局优化、内存泄露、bitmap压缩等等…)
  • eventBus框架是干什么用的,实现机制?
  • ANR和crash遇到过么?怎样解决
  • 编写代码(给一个网址,编写代码)
  • 输入一个n*n的正方形矩阵a,要求填充逻辑代码,将矩阵a顺时针旋转90度

8月30号 小米二面(1小时20分钟)

  • 自我介绍
  • 你做的这几个项目挑出一个来讲一下
  • 步态分析器这个项目的话,你感觉核心实现是什么?
  • 讲一下蓝牙有几种方式,你用的BLE的蓝牙流程说下
  • 假如说你的app现在使用了一个A的第三方库,那么为了以后可以容易换成B的第三方库,你会怎样去做减少后面的修改难度?
  • android的多线程你知道多少?介绍下
  • asyncTask的内存泄露你知道么?
  • 给一个网页,手撕代码
    题目:一个字符串,开始可能有0-N个空格,然后在这个串中每个单词之间有1-N个空格,最后的结束也有N个空格,现在要求最后的输出结果是开始不能有空格,每个单词之间只能有一个空格,最后全部是空格的格式
    一、先实现,无要求
    二、空间复杂度要求为O(1),再优化

9月20号 武汉现场面三面 40分钟

  • 自我介绍
  • 讲一个你熟悉的项目
  • 手写代码:一个数组中的数字,有大有小,如何用最少的+1或者-1的操作消除数组中的数字差异过大的情况,返回你的操作次数
  • intentService了解么?说一下他的用处和原理
  • intentService和service的区别
  • intentService现在要求让他的任务可以并行执行,你会怎样去实现
  • asyncTask说下主要的方法
  • activity销毁之后,那么asyncTask如果还在执行,那么会造成什么问题
  • activity的旋转屏幕的生命周期变化
  • 手写代码:一个单链表,每三个节点反转一次
  • 你有什么想问我的么?

头条

9月25号 今日头条 1面 30分钟

  • 自我介绍
  • 两个有序数组,求这两个有序数组中最大的K个数(要求时间复杂度空间复杂度较低)
  • 对于栈这个数据结构,实现以下几个方法:push,pop,max(要求空间复杂度较低)

今日头条 2面 1小时

  • 自我介绍
  • android事件分发机制说下
  • touchSlop,touchDelegate的理解
  • viewStub,merge、include的理解
  • java引用级别
  • 用过什么第三方库?(用过eventBus,Volley。知道RxAndroid,okHttp等。。写过demo)
  • 用过什么编译器
  • 内存泄露原因(从JVM开始和他说起)
  • gcRoot有哪些?
  • 如何检测内存泄露,有什么方式
  • 算法:一个有序数组,寻找k值出现的第一个位置(针对算法要求最优)
  • 算法:每个人都有工作时间区间,现在有N个人,他们每个人分别有K个工作区间。现在要找到一个大家都空闲的时间段进行开会,那么如何来找到这些空闲时间段?讲出思路和时间复杂度,空间复杂度

手机百度

2017年8月24日 手机百度电话一面 34分钟

  • 二叉树的非递归实现(前序、中序、后序)
  • 给一个NN的矩阵,找出22矩阵的和的最大值,时间复杂度?最优?
  • android蓝牙连接(传统蓝牙,BLE蓝牙),如何连接?
  • JVM内存分区(每部分异常会报什么错误?)
  • JVM垃圾回收算法(详细介绍)
  • JVM垃圾回收器(详细介绍)
  • https连接过程,握手过程
  • 对称加密,非对称加密
  • 三次握手过程
  • android消息机制
  • android事件分发机制

2017年8月29日 百度二面(一小时50分钟)

  • 讲一下你做的这些项目里面哪个印象最深刻

  • 你负责的这些部分讲几个你认为比较重要的点

  • Volley框架机制说下,你能抽取出(学到)几个技术点?

  • android性能优化说下

  • binder实现机制

  • AIDL文件的用处,aidl生成的类有什么用?讲下这个类做的事情和原理
    进程之间是相互隔离的,那么从A进程到B进程使用binder进行通讯,那么猜想下到底是怎样做的呢?

  • View的消息机制你说下,对于ViewGroup和View有什么不一样?

  • 事件拦截的话,可不可以从子View来进行操作?具体思路说下

  • 考虑一种场景:listView加上一个header实现下拉刷新的功能,你要怎样去实现?说说思路

  • 如果这样的场景下:listView和header属于不同的view,相互为兄弟View,外部套一个大的viewGroup,如何进行事件分发?从初始态到用户拉下出现header的过程来依次分析

  • 如果是这样的场景:listView和header属于同一个view层,那么下拉刷新又该如何实现?事件拦截又该如何去做?

  • 发过来一个网址,手写代码
    根据他提的需求,写代码(主要就是设计模式的使用原则和设计模式的使用):基本上涉及的知识点:策略模式,工厂方法模式。之后根据不同的新需求如何尽可能少的修改原来代码来实现新功能。

  • 对上一步中的抽象类和接口说下优缺点?

  • 为什么java是要求是只能单一继承?却可以实现多个接口?说下你的见解

  • 抽象类属性中什么场景下是优点?什么场景下优点又变成了缺点?

  • 使用接口什么场景下是优点?什么场景下优点又变成了缺点?

  • 权利翻转:你有什么需要问的么?…

百度三面(50分钟)

  • 自我介绍
  • 能不能立即过来实习?
  • 网络分层?7层,5层,4层,具体说下每层干啥
  • ip是哪一层协议?
  • post与get的区别,get有长度限制么?
  • 为什么要使用ip协议?直接使用mac地址连接不可以么?
  • 全球这么多厂商,生产的设备如果有重复的mac地址,你如何解决这个问题?网络数据包传输会有什么问题
  • 你是网络管理员,从英国的一台电脑要打开中国的一个网页,现在就是连接不上(dns正常可以解析到正确IP),你能考虑到哪些问题?
  • 你是衡水的手机号,现在你在湖北,那么北京的手机号打你的手机为什么你可以接到电话?
    接着问,你数据结构知道吧?
  • 快排时间复杂度是多少?最差?平均?为什么时间复杂度是O(N*logN)?怎样推导出来的?
  • 你对app推送有什么了解?如果是你来实现的话,你能怎么做?
  • 中国有13亿人,对全国身份证号进行排序,你会怎样去做
  • 你上级让你去安排一个日子来举办活动,要求这一天一定不能是周六或者周日,一定要在周一到周五之间,你如何判断一年里面有哪些日子是合适的?
  • 你有什么想问我的?

华为优招

2017年7月4号 华为优招
一面:

  • 上来是做自我介绍,之后开始问项目,讲项目中的认为的难点,印象深刻的地方。即时通讯IM,BLE蓝牙连接
  • android消息机制 view分发机制 android性能优化 binder机制 设计模式(包含设计原则)
  • 广播的静态注册与动态注册 广播的有序与无序 service的如何保持不被杀死 内存泄露(handler 等…)
  • == 与equals区别 stringBuffer与stringBuilder区别 hashmap的原理
  • post与get区别 http与https区别 网络错误码

二面

  • 聊人生。。。

拼多多

8月31日 拼多多 一面(30分钟)

  • 做自我介绍
  • android布局说下
  • android四大组件说下
  • activity和activity传输数据怎么做
  • 使用intent传输数据对数据有什么要求
  • service和activity的区别说下
  • ANR了解么?如何解决?
  • 给你一个数组,里面都是long类型数据,有重复数字有空格,要求去重,空间复杂度O(1)。说下思路
  • 跨进程通讯你说说看有哪些
  • binder机制说说你知道的
  • 常用的排序算法说下
  • 自定义View实现,应该注意什么
  • View的生命周期—如果activity被重建,那么view的生命周期怎样变化
  • activity横竖屏切换,对应的view的生命周期
  • activity横竖屏切换,activity的生命周期
  • activity横竖屏切换,activity一定会调用onDestory方法么?
  • 通过在清单文件中进行设置不让他进行横竖屏切换的话,activity是如何知道进行了横竖屏切换
  • 有什么想问我的?

9月4号 二面

  • lambda编程知道么?
  • afinal框架?呵呵哒
  • volley中对cookie的处理?呵呵哒
  • GC回收算法
  • http报文 cookie
  • GC roots有哪些
  • GC roots 遍历递归
  • 同步,异步函数函数修饰符修饰符?future
  • 做8月1号题目:任务调度器

网易

2017年8月28日
网易一面:40分钟
自我介绍……

  • 项目挨个问了下(准备充分,无压力)
  • volley框架说下
  • 手写一个生产者消费者
  • 手写fragment生命周期和activity生命周期,并把生命周期一一对应上。
  • 热修复说下,几种方式?各自原理?
  • 插件化了解么?说下,基本原理知道么?
  • 混合开发了解么?
  • A应用如何打开B应用的界面?
  • 安卓性能优化有哪些?
  • recycleView说下
  • activity与fragment交互,如何互传数据
  • binder说下
  • activityManagerService知道么?说下
  • android中的广播说下,粘性广播知道么

网易二面:基本没问项目,完全面试官自由发挥。40分钟

  • 无自我介绍,直接开怼。
  • popupwindow中是否可以再创建popupwindow?为什么?
  • dialog中是否可以创建子window?为什么?
  • dialog创建为什么传入activity的context而不是applicationContext ?
  • fragement和activity交互方式
  • fragment可不可以在构造函数传递参数?使用setArgument的原理?
  • 两个应用程序A和B,A要用B的登录信息,怎么做?
  • contentprovider是如何保证操作数据库原子性?
  • 加载进来的class类是否可以动态修改?
  • 热修复原理有哪些?说下
  • binder是在jni层怎样实现的(一次拷贝)?
  • client使用serviceManager可以找到对应的service,那么自己写的service的话,client是怎样找到的这个service?
  • 安卓性能优化你知道有哪些?
  • 一个后台任务栈,从上到下 A B C三个activity,内存不足回收。那么从后台到前台打开是哪个界面?为什么,原理?
  • 子线程是否可以更新UI?那为什么安卓要求不能在子线程更新UI?

养吾面经

美团Android面经 2019-5-8

Android:

  • 上来自我介绍(这项没准备,就说了几句草草了事)
  • Activity的生命周期,什么时候触发onRestart,onPause,页面生命周期怎么变,onHost的两个方法什么时间用,怎么用
  • 页面的即时状态怎么保存,怎么恢复
  • 页面启动的模式
  • 页面之间的数据交互
  • Service的生命周期、实现方式,在主线程中怎么实现Service,可能有什么问题
  • BroadCast Reciever 怎么实现,怎么发收广播,怎么屏蔽一个广播
  • 消息的分发机制
  • Looper的作用,以及实现
  • View的事件传递机制,用来实现什么的
  • onTouch和onClick的优先级
  • 怎么自定义View
  • 出现了ANR怎么收集错误信息
  • 说一些Android数据的持久化
  • ListView的复用和RecyclerView的区别
  • 给一个10M的大图怎么打开
  • 怎么下载网络图片,注意的规范
  • 看了那些第三方库,说说源码
    Java:
  • 多态是啥(第一反应是怎么能问这么水的一个题)
  • String和StringBuffer区别,看过字节码有什么区别么,讲一讲
  • 类的加载机制说一下
  • 序列化的几种方式,说说源码,比较性能
  • 强引用,软引用
  • 判断是否为垃圾的算法
  • 回收垃圾的算法,并进行比较
    最后让手写了两个算法(比较简单,就不说了)

8.24 贝壳面经

一面开始时间14.30

  • 自我介绍、然后问了项目
  • H5和native交互的方式
  • H5访问native的方法,native访问H5的方法具体怎么实现
  • ReactNative和native的数据交互方式(因为我项目有用过RN)
  • 讲一讲java注解,@Retention 为Source和class的区别
  • eventBus的@Override注解是Source还是class 在什么阶段加载
  • eventBus的源码实现
  • 一个Service被两个activity启动,一个是startService()的方式启动,一个是bind()的方式启动,bind()的activity消亡,那么service还有么
  • android的数据持久化方式
  • sharedpreferences是不是线程安全的,怎么实现线程安全
  • arraylist和linkedlist 的区别
  • arraylist删除所有偶数怎么做,有几种方式(考察的不是算法)
  • 自定义view
  • 怎么获取一个view的宽高
  • 说一下dp和sp(最好推导一下过程)
  • 场景题:设计一个圆形的显示一个头像的ImageView,只点击头像区域有效有监听
  • Handler机制
  • 算法题:二分查找
    结束了之后休息了在等待区等结果,大概五分钟就出结果了
    二面:
  • 还是自我介绍
  • RN和native的数据交互
  • 为什么RN使用js可以在android上运行
  • flutter看过么
  • flutter和RN的区别,优点
  • TCP三次握手 四次挥手
  • HTTP和HTTPS的区别
  • 设计一个注解器,解析注解(不会)
  • 内存泄漏怎么检测
  • 设计一个内存泄漏的检测工具
  • 内存泄漏的可能情况
  • 性能优化
  • VeEx和RN的区别
  • 事件分发机制
  • 算法:有序数组的旋转,找出最小值
  • 替换数组中char型数组中的ali为beike
    让我问问题。。blablabla
  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

李一恩

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值