当前位置: 首页 > news >正文

Android 同花顺面经

Android 同花顺面经

文章目录

  • Android 同花顺面经
    • 一面

一面

  1. Android组件化搭建使用接口层路由有什么缺点?
    • 如果更改接口的话,其他的依赖的moudle都得改
  2. 说说kotlin和java的区别?
    • Java是支持面向对象的编程,Kotlin是支持面向对象支持函数式编程
    • Kotlin允许用户创建扩展函数,Java不支持任何扩展函数
    • Kotlin使用var val 来定义变量
    • Kotlin拥有很强大的Lambda表达式
    • Kotlin 程序不需要分号,而 Java 程序需要分号
    • 语言脚本功能允许您直接在 Gradle 构建脚本中使用 Kotlin,而 Java 不提供语言脚本功能。
    • Kotlin 中没有空变量或对象,空变量或对象是 Java 语言的一部分。
  3. 假如老年代和新生代有互相引用,他使用标记清除怎么处理?
    • 只需要在新生代上建立一个全局的数据结构,这个数据结构将老年代划分为若干个小块,每次都只记录老年代中的哪一块内存存在跨代引用。此后每当发生Minor GC时,只有包含了跨代引用的那一小块内存才会被加入到GC Roots中进行扫描。
    • 新生代维护一个卡表,一个卡页内存中通常包含不止一个对象,只要卡页内某个对象的字段存在跨代指针,那就将对应卡表数组对应位置上的元素标示为1,称之为Dirty,没有则标示为0,称之为Clean。在垃圾收集时,只需要筛选出卡表中变脏的元素,就能够找到对应卡页内存块中包含的跨代指针,将其加入到GC Roots中一并扫描。
    • 跨代引用、记忆集、卡表
  4. 实例.getClass() 与ClassForName.(类的全限定名)在执行过程中有什么区别?
    • 出现的时期不同:Class.forname()在运行时加载;Class.class和对象名.getClass()是在编译时加载
    • Class c = Class.class,是Class的class属性,Class c = c.getClass()则是通过对象获得类Class.forname(“全限定类名”),在运行时加载,对类进行加载,使用反射
  5. AIDL的具体实现步骤,sub对象是什么角色?
    • 新建一个IImoocAIDL.aidl文件作文服务端,rebuild一下,自动生成IImoocAIDL.java的接口文件。
    • 自动生成的AIDL文件,里面有
/*
* This file is auto-generated.  DO NOT MODIFY.
* Original file: F:\\AS for android\\AIDLTest\\aidlclient\\src\\main\\aidl\\com\\mecury\\aidltest\\IImoocAIDL.aidl
*/
package com.mecury.aidltest;
// Declare any non-default types here with import statementspublic interface IImoocAIDL extends android.os.IInterface {/**
* Local-side IPC implementation stub class.
*/public static abstract class Stub extends android.os.Binder implements com.mecury.aidltest.IImoocAIDL {private static final java.lang.String DESCRIPTOR = "com.mecury.aidltest.IImoocAIDL"; //Binder的唯一标识/**
* Construct the stub at attach it to the interface.
*/public Stub() {this.attachInterface(this, DESCRIPTOR);}/**
* Cast an IBinder object into an com.mecury.aidltest.IImoocAIDL interface,
* generating a proxy if needed.
*///将服务端的Binder对象转换成客户需要的AIDL对象,转换区分进程,客户端服务端位于同一进程,返回服务端的//Stub对象本身;否则返回的是系统的封装后的Stub.proxy对象。public static com.mecury.aidltest.IImoocAIDL asInterface(android.os.IBinder obj) {if ((obj == null)) {return null;}android.os.IInterface iin = obj.queryLocalInterface(DESCRIPTOR);if (((iin != null) && (iin instanceof com.mecury.aidltest.IImoocAIDL))) {return ((com.mecury.aidltest.IImoocAIDL) iin);}return new com.mecury.aidltest.IImoocAIDL.Stub.Proxy(obj);}//返回当前Binder对象@Overridepublic android.os.IBinder asBinder() {return this;}//运行在服务端的Binder线程池中@Overridepublic boolean onTransact(int code, android.os.Parcel data, android.os.Parcel reply, int flags) throws android.os.RemoteException {switch (code) {case INTERFACE_TRANSACTION: {reply.writeString(DESCRIPTOR);return true;}case TRANSACTION_add: {data.enforceInterface(DESCRIPTOR);//读取客户端传递过来再data中存储的方法的参数int _arg0;_arg0 = data.readInt();int _arg1;_arg1 = data.readInt();//调用方法int _result = this.add(_arg0, _arg1);//将计算结果写入reply中reply.writeNoException();reply.writeInt(_result);return true;}}return super.onTransact(code, data, reply, flags); //向Transact传递数据}//代理类,运行在客户端private static class Proxy implements com.mecury.aidltest.IImoocAIDL {private android.os.IBinder mRemote; //声明一个IBinder对象Proxy(android.os.IBinder remote) {mRemote = remote;}//返回当前Binder对象@Overridepublic android.os.IBinder asBinder() {return mRemote;} public java.lang.String getInterfaceDescriptor() {return DESCRIPTOR;}//客户端调用此方法,传递进来num1和num2两个参数,@Overridepublic int add(int num1, int num2) throws android.os.RemoteException {android.os.Parcel _data = android.os.Parcel.obtain();android.os.Parcel _reply = android.os.Parcel.obtain();int _result;try {//向_data中写入参数_data.writeInterfaceToken(DESCRIPTOR);_data.writeInt(num1);_data.writeInt(num2);//通过transact方法向服务端传递参数,并调用了方法,返回的结果写入_reply中mRemote.transact(Stub.TRANSACTION_add, _data, _reply, 0);_reply.readException();_result = _reply.readInt();} finally {_reply.recycle();_data.recycle();}return _result;}}//标识位static final int TRANSACTION_add = (android.os.IBinder.FIRST_CALL_TRANSACTION + 0);}//计算num1 + num2public int add(int num1, int num2) throws android.os.RemoteException;}
- 在服务端新建一个Service用来监听客户端连接请求
 private IBinder iBinder = new IImoocAIDL.Stub(){@Overridepublic int add(int num1, int num2) throws RemoteException {Log.e("TAG","收到了来自客户端的请求" + num1 + "+" + num2 );return num1 + num2;}};
- <font style="color:rgb(79, 79, 79);">在AndroidMainfest.xml注册Service</font>
- <font style="color:rgb(79, 79, 79);">客户端绑定服务并调用服务端方法</font>
private ServiceConnection conn = new ServiceConnection() {//绑定服务,回调onBind()方法@Overridepublic void onServiceConnected(ComponentName name, IBinder service) {iImoocAIDL = IImoocAIDL.Stub.asInterface(service);}@Overridepublic void onServiceDisconnected(ComponentName name) {iImoocAIDL = null;}};

:::info
sub是extends Binder类,相当于可以进行跨进程通信,implement 业务类。本身也是一个抽象类

:::

  1. 谈谈你对window和Activity和DecoView的关系的理解

:::info
Activity就像个控制器,不负责视图部分。Window像个承载器,装着内部视图。DecorView就是个顶层视图,是所有View的最外层布局。ViewRoot像个连接器,负责沟通,通过硬件的感知来通知视图,进行用户之间的交互。

推荐阅读:简析 Window、Activity、DecorView 以及 ViewRoot 之间的错综关系

:::

  1. AIDL与Messenger、Binder区别

:::info

  1. 只有当你允许来自不同的客户端访问你的服务并且需要处理多线程问题时你才必须使用AIDL
  2. 如果进程间的通信来自同一应用,应该使用Binder
  3. 如果进程间的通信不需要处理多线程,应该使用Messenger
  4. Messenger不适用大量并发的请求:Messenger以串行的方式来处理客户端发来的消息,如果大量的消息同时发送到服务端,服务端仍然只能一个个的去处理。
  5. Messenger主要是为了传递消息:对于需要跨进程调用服务端的方法,这种情景不适用Messenger。
  6. Messenger的底层实现是AIDL,系统为我们做了封装从而方便上层的调用。
  7. AIDL适用于大量并发的请求,以及涉及到服务端端方法调用的情况

:::

相关文章:

Android 同花顺面经

Android 同花顺面经 文章目录 Android 同花顺面经一面 一面 Android组件化搭建使用接口层路由有什么缺点&#xff1f; 如果更改接口的话&#xff0c;其他的依赖的moudle都得改 说说kotlin和java的区别&#xff1f; Java是支持面向对象的编程&#xff0c;Kotlin是支持面向对象支…...

搜维尔科技:Manus数据手套在水下捕捉精确的手指动作, 可以在有水的条件下使用

Manus数据手套在水下捕捉精确的手指动作&#xff0c; 可以在有水的条件下使用 搜维尔科技&#xff1a;Manus数据手套在水下捕捉精确的手指动作&#xff0c; 可以在有水的条件下使用...

网络:IP分片和组装

个人主页 &#xff1a; 个人主页 个人专栏 &#xff1a; 《数据结构》 《C语言》《C》《Linux》《网络》 《redis学习笔记》 文章目录 前言16位标识&#xff0c;3位标志&#xff0c;13位片偏移分片组装总结 前言 对于IP分片和组装的总结 当一个IP数据报的大小超过网络的MTU(最…...

Oracle dblink创建使用

1、首先要有创建Database Link 的权限。可通过语句查看当前用户是否有权限&#xff1a; SELECT * FROM USER_SYS_PRIVS;如果没有权限&#xff0c;使用系统管理员用户登陆后给当前用户授权&#xff1a; GRANT CREATE PUBLIC DATABASE LINK,DROP PUBLIC DATABASE LINK TO user;…...

Classic GNNs are Strong Baselines: Reassessing GNNs for Node Classification

Classic GNNs are Strong Baselines: Reassessing GNNs for Node Classification Neurips 24 推荐指数&#xff1a; #paper/⭐⭐⭐#​ 摘要 我们的研究结果表明&#xff0c;由于GNN中的超参数设置次优&#xff0c;之前报道的GT的优越性可能被夸大了。值得注意的是&#xff…...

Android 字节飞书面经

Android 字节飞书面经 文章目录 Android 字节飞书面经一面二面 一面 1. 线程是进程的一部分&#xff0c;一个线程只能属于一个进程&#xff0c;而一个进程可以有多个线程&#xff0c;但至少有一个线程。 2. 根本区别&#xff1a;进程是操作系统资源分配的基本单位&#xff0c;…...

选择好友窗口(三)

选择好友窗口&#xff08;三&#xff09; 前言 在前两集我们就完成了整个左半部分的内容了&#xff0c;那么我们这一集开始就要完成我们的选择好友窗口的右侧部分。 需求分析 我们要做出的效果如下图 可以看到我们整个布局是一个网格的布局&#xff0c;当然也可以做成一个垂…...

【含文档】基于ssm+jsp的音乐播放系统(含源码+数据库+lw)

1.开发环境 开发系统:Windows10/11 架构模式:MVC/前后端分离 JDK版本: Java JDK1.8 开发工具:IDEA 数据库版本: mysql5.7或8.0 数据库可视化工具: navicat 服务器: apache tomcat 主要技术: Java,Spring,SpringMvc,mybatis,mysql,vue 2.视频演示地址 3.功能 系统定义了两个…...

【C语言】动态内存开辟

写在前面 C语言中有不少开辟空间的办法&#xff0c;但是在堆上开辟的方法也就只有动态内存开辟&#xff0c;其访问特性与数组相似&#xff0c;但最大区别是数组是开辟在栈上&#xff0c;而动态内存开辟是开辟在堆上的。这篇笔记就让不才娓娓道来。 PS:本篇没有目录实在抱歉CSD…...

Redis缓存在thinkPHP/fastAdmin框架中的应用

Redis缓存在thinkPHP/fastAdmin框架中的应用 引言 在现代Web开发中&#xff0c;性能优化是一个永恒的话题。随着用户数量的增加和业务逻辑的复杂化&#xff0c;如何提高应用的响应速度和处理能力成为了开发者们必须面对的挑战。缓存技术作为提升性能的有效手段之一&#xff0…...

Ceisum无人机巡检视频投放

公司投标内容有个视频投放的功能动画&#xff0c;原本想实现这么一个效果&#xff1a; 案例效果来自别人的展示作品&#xff0c;Leader一眼就相中了这个效果&#xff0c;可惜别人的终究是别人的&#xff0c;又不会白白给你&#xff0c;终究是要自己动手尝试。 动画方面的展示…...

分享几款开源好用的图片在线编辑,适合做快速应用嵌入

图片生成器是指一种工具或软件&#xff0c;用于自动生成图片或图像内容&#xff0c;通常依据用户设定的参数或模板进行操作。这种工具能够帮助用户快速创建视觉效果丰富的图像&#xff0c;而无需具备专业的设计技能。 在数字化时代&#xff0c;图片编辑已经成为日常工作和生活的…...

闪存学习_1:Flash-Aware Computing from Jihong Kim

闪存学习_1&#xff1a;Flash-Aware Computing from Jihong Kim 前言一、Storage Media&#xff1a;NAND Flash Memory1、概念2、编程和擦除操作3、读操作4、异地更新操作&#xff08;Out-Place Update&#xff09;5、数据可靠性6、闪存控制器&#xff08;SSD主控&#xff09;7…...

如何将本地项目上传至Gitee仓库(详细教程)

前提条件 1、本地电脑安装Git客户端 2、本地已有项目 3、Gitee注册好了账户 如果没有安装Gitee 可以区菜鸟查看一下安装教程 Git教程https://www.runoob.com/git/git-tutorial.html 操作示例 前提条件已经准备好的情况下登录gitee 码云 https://gitee.com 点解右侧加号 新…...

redis详细教程(3.hash和set类型)

hash Redis中的Hash是一种数据结构&#xff0c;用于存储键值对集合。在Redis中&#xff0c;Hash非常适合表示对象&#xff0c;其中对象的每个字段都对应一个键值对。以下是关于Redis中Hash的详细讲解&#xff1a; 特点&#xff1a; 1. 键值对集合&#xff1a;Hash是一个包含…...

性能测试详解

&#x1f345; 点击文末小卡片 &#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 一、 性能测试术语解释 1. 响应时间 响应时间即从应用系统发出请求开始&#xff0c;到客户端接收到最后一个字节数据为止所消耗的时间。响应时间按软件的特点…...

修改ruoyi的logo和标题

1、修改网页标签上的图标和标题 静态修改 标签页上的 图标 直接替换public/favicon.ico文件为你自己的图标文件 如果你的图标文件名不是favicon.ico&#xff0c;你还需要在public/index.html中相应地修改这一行&#xff0c;将/favicon.ico替换为你的图标文件路径。 静态修改…...

vue系列==vue3新语法

vue系列vue3新语法 1、setup组合式API入口函数 2、利用ref函数定义响应式数据 3、利用reactive函数定义响应式数据 1、setup组合式API入口函数 1、Vue3为组合式API提供了一个setup函数&#xff0c;所有组合式API函数都是在此函数中调用的&#xff0c;它是组合式API的使用入口…...

001-Kotlin界面开发之Jetpack Compose Desktop学习路径

Compose Desktop学习之路 学习过程 理解Kotlin的基本语法 Compose Desktop采用Kotlin构建&#xff0c;因此对Kotlin的基本语法有很好的理解是必不可少的。你可以从官方的Kotlin文档开始。 用一句话概括&#xff0c;Kotlin是一种现代的、静态类型的编程语言&#xff0c;它结合…...

qt QStackedLayout详解

QStackedLayout类提供了一种布局方式&#xff0c;使得在同一时间内只有一个子部件&#xff08;或称为页面&#xff09;是可见的。这些子部件被维护在一个堆栈中&#xff0c;用户可以通过切换来显示不同的子部件&#xff0c;适合用在需要动态显示不同界面的场景&#xff0c;如向…...

Auto-Coder使用GPT-4o完成:在用TabPFN这个模型构建一个预测未来3天涨跌的分类任务

通过akshare库&#xff0c;获取股票数据&#xff0c;并生成TabPFN这个模型 可以识别、处理的格式&#xff0c;写一个完整的预处理示例&#xff0c;并构建一个预测未来 3 天股价涨跌的分类任务 用TabPFN这个模型构建一个预测未来 3 天股价涨跌的分类任务&#xff0c;进行预测并输…...

Python 包管理器 uv 介绍

Python 包管理器 uv 全面介绍 uv 是由 Astral&#xff08;热门工具 Ruff 的开发者&#xff09;推出的下一代高性能 Python 包管理器和构建工具&#xff0c;用 Rust 编写。它旨在解决传统工具&#xff08;如 pip、virtualenv、pip-tools&#xff09;的性能瓶颈&#xff0c;同时…...

【JVM】Java虚拟机(二)——垃圾回收

目录 一、如何判断对象可以回收 &#xff08;一&#xff09;引用计数法 &#xff08;二&#xff09;可达性分析算法 二、垃圾回收算法 &#xff08;一&#xff09;标记清除 &#xff08;二&#xff09;标记整理 &#xff08;三&#xff09;复制 &#xff08;四&#xff…...

基于Springboot+Vue的办公管理系统

角色&#xff1a; 管理员、员工 技术&#xff1a; 后端: SpringBoot, Vue2, MySQL, Mybatis-Plus 前端: Vue2, Element-UI, Axios, Echarts, Vue-Router 核心功能&#xff1a; 该办公管理系统是一个综合性的企业内部管理平台&#xff0c;旨在提升企业运营效率和员工管理水…...

Linux nano命令的基本使用

参考资料 GNU nanoを使いこなすnano基础 目录 一. 简介二. 文件打开2.1 普通方式打开文件2.2 只读方式打开文件 三. 文件查看3.1 打开文件时&#xff0c;显示行号3.2 翻页查看 四. 文件编辑4.1 Ctrl K 复制 和 Ctrl U 粘贴4.2 Alt/Esc U 撤回 五. 文件保存与退出5.1 Ctrl …...

宇树科技,改名了!

提到国内具身智能和机器人领域的代表企业&#xff0c;那宇树科技&#xff08;Unitree&#xff09;必须名列其榜。 最近&#xff0c;宇树科技的一项新变动消息在业界引发了不少关注和讨论&#xff0c;即&#xff1a; 宇树向其合作伙伴发布了一封公司名称变更函称&#xff0c;因…...

windows系统MySQL安装文档

概览&#xff1a;本文讨论了MySQL的安装、使用过程中涉及的解压、配置、初始化、注册服务、启动、修改密码、登录、退出以及卸载等相关内容&#xff0c;为学习者提供全面的操作指导。关键要点包括&#xff1a; 解压 &#xff1a;下载完成后解压压缩包&#xff0c;得到MySQL 8.…...

学习一下用鸿蒙​​DevEco Studio HarmonyOS5实现百度地图

在鸿蒙&#xff08;HarmonyOS5&#xff09;中集成百度地图&#xff0c;可以通过以下步骤和技术方案实现。结合鸿蒙的分布式能力和百度地图的API&#xff0c;可以构建跨设备的定位、导航和地图展示功能。 ​​1. 鸿蒙环境准备​​ ​​开发工具​​&#xff1a;下载安装 ​​De…...

C++_哈希表

本篇文章是对C学习的哈希表部分的学习分享 相信一定会对你有所帮助~ 那咱们废话不多说&#xff0c;直接开始吧&#xff01; 一、基础概念 1. 哈希核心思想&#xff1a; 哈希函数的作用&#xff1a;通过此函数建立一个Key与存储位置之间的映射关系。理想目标&#xff1a;实现…...

车载诊断架构 --- ZEVonUDS(J1979-3)简介第一篇

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 做到欲望极简,了解自己的真实欲望,不受外在潮流的影响,不盲从,不跟风。把自己的精力全部用在自己。一是去掉多余,凡事找规律,基础是诚信;二是…...