Android Java基础面试题

Android Java基础

  1. ClassLoad双亲委派模式的原因
    防止自定义类加载器优先加载了顶层公用的类,比如Object类,这样系统中就存在多个形同的类。
  2. Java内存区域
    堆,函数栈(多个栈帧(返回地址,操作数栈,局部变量表,动态链接)),程序计数器,本地方法栈,方法区(常量,类,静态对象)
  3. AIDL onTransact()运行在哪个进程?
    当客户端与服务端都位于同一个进程时,方法调用不会走跨进程的transact过程,而当两者位于不同进程时,方法调用需要走transact过程,这个逻辑是由Stub的内部代理Proxy完成的.
  4. Binder原理
    优势:
    高效一次拷贝,client server安全。
    架构模型:
    Client Server模型,两端都实现相同的接口,Client依据AIDL接口生成的代理类proxy接收服务端数据反序列化后返回结果,Server端接受到Binder实体指针和函数参数数据,根据指针找到Binder实体并且调用函数生成可传输的数据包返回给Client。流程上Server向ServiceManager注册服务,在ServiceManager中有查找表保存Binder实体引用和名字,Client根据名字获取Binder实体的引用。
    底层原理:
    一次拷贝就可以完成通信,mmap负责将分配的一块内存映射到内核区和接收方的缓存区,发生通信时,发送端执行一次copy-from-user,实现发送端到内核端的copy,接收端由于映射关系可以直接读取该缓存数据。
    关键字:
    client server,serviceManager,Proxy,stub,驱动,mmap,内核区进程内存区,Binder实体指针,ServiceManager查找表
  5. sleep和wait有什么区别
    a. sleep是Thread的静态方法,wait是Object的方法
    b.sleep不会释放锁,当前线程虽然会释放cpu但是继续持有锁,其他线程无法访问被对象锁锁住的方法,wait会释放锁,线程加入就绪队列。
  6. Synchronized锁升级
    偏向锁,自旋锁,重量级锁。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值