美文网首页Android技术知识
字节跳动 Android 岗小姐姐的历年面经汇总~

字节跳动 Android 岗小姐姐的历年面经汇总~

作者: 搬砖小老弟 | 来源:发表于2022-04-21 20:59 被阅读0次

    腾讯

    腾讯一面

    • 自我介绍
    • 自我介绍时说过自己看过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的懒加载。
    • 一个商场里有一个电影院,你会把厕所建设在哪里,说一下你的理由?

    阿里

    阿里一面

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

    阿里二面

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

    阿里三面

    • 自我介绍
    • 详细说我第一个项目
    • http缓存
    • 如何把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意向书,整个流程横跨两个月)

    小米

    小米一面 (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度

    小米二面(1小时20分钟)

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

    一、先实现,无要求
    二、空间复杂度要求为O(1),再优化

    武汉现场面三面 40分钟

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

    头条

    今日头条 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个工作区间。现在要找到一个大家都空闲的时间段进行开会,那么如何来找到这些空闲时间段?讲出思路和时间复杂度,空间复杂度

    手机百度

    手机百度电话一面 34分钟

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

    百度二面(一小时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亿人,对全国身份证号进行排序,你会怎样去做
    • 你上级让你去安排一个日子来举办活动,要求这一天一定不能是周六或者周日,一定要在周一到周五之间,你如何判断一年里面有哪些日子是合适的?

    华为优招

    一面:

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

    二面

    • 聊人生。。。

    拼多多

    拼多多 一面(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是如何知道进行了横竖屏切换
    • 有什么想问我的?

    二面

    • lambda编程知道么?
    • afinal框架?呵呵哒
    • volley中对cookie的处理?呵呵哒
    • GC回收算法
    • http报文 cookie
    • GC roots有哪些
    • GC roots 遍历递归
    • 同步,异步函数函数修饰符修饰符?future

    网易

    网易一面: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面经

    • 上来自我介绍(这项没准备,就说了几句草草了事)
    • Activity的生命周期,什么时候触发onRestart,onPause,页面生命周期怎么变,onHost的两个方法什么时间用,怎么用
    • 页面的即时状态怎么保存,怎么恢复
    • 页面启动的模式
    • 页面之间的数据交互
    • Service的生命周期、实现方式,在主线程中怎么实现Service,可能有什么问题
    • BroadCast Reciever 怎么实现,怎么发收广播,怎么屏蔽一个广播
    • 消息的分发机制
    • Looper的作用,以及实现
    • View的事件传递机制,用来实现什么的
    • onTouch和onClick的优先级
    • 怎么自定义View
    • 出现了ANR怎么收集错误信息
    • 说一些Android数据的持久化
    • ListView的复用和RecyclerView的区别
    • 给一个10M的大图怎么打开
    • 怎么下载网络图片,注意的规范
    • 看了那些第三方库,说说源码

    Java:

    • 多态是啥(第一反应是怎么能问这么水的一个题)
    • String和StringBuffer区别,看过字节码有什么区别么,讲一讲
    • 类的加载机制说一下
    • 序列化的几种方式,说说源码,比较性能
    • 强引用,软引用
    • 判断是否为垃圾的算法
    • 回收垃圾的算法,并进行比较

    贝壳面经

    一面:

    • 自我介绍、然后问了项目
    • 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

    面试复习笔记

    下面这个些学习笔记是我从出学校到现在工作5年了,一直在持续在更新的学习心得文档,不仅包含了技术点理解记录还有Android开发中高级面试题一并整理在这了,然后全网寻找最优的解答方案。每一道面试题都是百分百的大厂面经真题+最优解答。包知识脉络 + 诸多细节。节省大家在网上搜索资料的时间来学习,也可以分享给身边好友一起学习。大家可以直接去访问 GitHub:https://github.com/733gh/Android-T3查阅。

    相关文章

      网友评论

        本文标题:字节跳动 Android 岗小姐姐的历年面经汇总~

        本文链接:https://www.haomeiwen.com/subject/syziertx.html