Android 斗鱼面经

Android 斗鱼面经

文章目录

  • [Android 斗鱼面经](#Android 斗鱼面经)

一面

  1. 先简单描述一下JVM JRE JDK的关系

:::info

JVM(Java Virtual Machine)

Java 虚拟机。它只认识 xxx.class 这种类型的文件,它能够将 class 文件中的字节码指令进行识别并调用操作系统向上的 API 完成动作。所以说,JVM 是 Java 能够跨平台的核心。

JRE (Java Runtime Environment)

Java 运行时环境。它主要包含两个部分,JVM的标准实现和 Java 的一些基本类库。它相对于 JVM来说,多出来的是一部分的 Java 类库。

JDK (Java Development Kit)

Java 开发工具包。JDK 是整个 Java 开发的核心,它集成了 JRE 和一些好用的小工具,例如javac.exe、java.exe、jar.exe 等。

显然这三者的关系是一层层的嵌套关系,即JDK > JRE > JVM。

:::

  1. 静态代理和动态代理有什么区别吗,静态代理和动态代理的应用场景

:::info

1、静态代理通常只代理一个类,动态代理是代理一个接口下的多个实现类。

2、静态代理事先知道要代理的是什么,而动态代理不知道要代理什么东西,只有在运行时才知道。

3、动态代理是实现JDK里的InvocationHandler接口的invoke方法,但注意的是代理的是接口,也就是你的业务类必须要实现接口,通过Proxy里的newProxyInstance得到代理对象。

应用场景:如果⽬标类的数量很多的话,代理类的实现也必然得很多,可能会造成代码量过于庞⼤,可能会增加代码的冗余度...再者,如果⽬标类需要代理的⽅法很多的话,代理类需要对这些⽅法⼀⼀实现代理逻辑,代理类的实现也将会很庞⼤。目标对象不固定,在应用程序执行时,动态创建目标对象。这时候使用动态代理,目标角色固定,应用程序执行前就得到目标角色,这时候使用静态代理

:::

  1. leakcanaryd有看过吗?
  2. 四大引用
  3. JVM垃圾回收新生代是怎么进行划分的
  4. Android里面原生设计的设计模式举例分析一下

:::info

建造者模式:Android#AlertDialog Bitmap#Bulider

观察者模式:View#OnClickListener

单例模式:Application

责任链:Okhttp拦截器模式

适配器:RecyclerView.Adapter

推荐阅读:

从Android源码角度谈设计模式(一):创建型模式 - 掘金

从Android源码角度谈设计模式(二):结构型模式 - 掘金

从Android源码角度谈设计模式(三):行为型模式 - 掘金

:::

  1. 单例模式有哪几种实现方式
  2. Handler机制了解过吗?
  3. 斗鱼App主页的启动模式
  4. 怎么判断下载的软件已经被下载过,或者下载软件百分比

:::info

1.通过获取系统上已安装的所有app列表来查找【不推荐。因为要获取已安装的所有app信息,可能会有隐私泄露风险】

:::

java 复制代码
public static boolean checkAppInstalled(Context context, String pkgName) {
    if (TextUtils.isEmpty(pkgName)) {
        return false;
    }
    PackageManager packageManager = context.getPackageManager();
    // 获取已安装的app信息
    List<PackageInfo> pkgInfos = packageManager.getInstalledPackages(0);
    if (pkgInfos != null) {
        for (int i = 0; i < pkgInfos.size(); i++) {
            String pkg = pkgInfos.get(i).packageName;
            if (pkgName.equals(pkg)) {
                return true;
            }
        }
    }
    return false;
}

:::info

2.通过获取特定包名的app信息来判断【推荐。因为只关注特定包名的app信息,隐私泄露风险低】

:::

java 复制代码
public static boolean checkQQInstalled(Context context, String pkgName) {
    if (TextUtils.isEmpty(pkgName)) {
        return false;
    }
    try {
        context.getPackageManager().getPackageInfo(pkgName, 0);
    } catch (Exception x) {
        return false;
    }
    return true;
}

二面

这一面主要是项目和实习经验,基本都是考验你项目里面学到了什么,积累了什么

  1. Gson是怎么做数据解析的,怎么进行高效数据解析?
相关推荐
Doro再努力9 小时前
【Linux操作系统10】Makefile深度解析:从依赖推导到有效编译
android·linux·运维·服务器·编辑器·vim
Daniel李华9 小时前
echarts使用案例
android·javascript·echarts
做人不要太理性10 小时前
CANN Runtime 运行时组件深度解析:任务调度机制、存储管理策略与维测体系构建逻辑
android·运维·魔珐星云
我命由我1234511 小时前
Android 广播 - 静态注册与动态注册对广播接收器实例创建的影响
android·java·开发语言·java-ee·android studio·android-studio·android runtime
朗迹 - 张伟11 小时前
Tauri2 导出 Android 详细教程
android
lpruoyu12 小时前
【Android第一行代码学习笔记】Android架构_四大组件_权限_持久化_通知_异步_服务
android·笔记·学习
独自破碎E13 小时前
【BISHI15】小红的夹吃棋
android·java·开发语言
李堇16 小时前
android滚动列表VerticalRollingTextView
android·java
lxysbly17 小时前
n64模拟器安卓版带金手指2026
android
游戏开发爱好者820 小时前
日常开发与测试的 App 测试方法、查看设备状态、实时日志、应用数据
android·ios·小程序·https·uni-app·iphone·webview