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锁升级
    偏向锁,自旋锁,重量级锁。
版权声明:程序员胖胖胖虎阿 发表于 2022年9月19日 上午11:00。
转载请注明:Android Java基础面试题 | 胖虎的工具箱-编程导航

相关文章

暂无评论

暂无评论...