2022年7月Android面试准备-八股文篇

1,297 阅读4分钟

2022年7月Android面试准备-八股文篇

http、https的区别

http是超文本传输协议,信息是明文传输,https 则是具有安全性的ssl加密传输协议,有证书认证,客户端TLS解析证书(对称与非对称结合),底层都是TCP/IP

http2采用二进制,多路复用一个链接即可实现并行、报头压缩、服务端缓存

三握四挥

三次确认、四次断开(单向传输防止断数据)

TCP连接的真正关闭并不是在第四次挥手之后马上进行,而是要等待时间 2MSL(最大报文段生存周期) 后才真正释放掉。这种机制是为了:
一,为了保证 A 发送的最后一个 ACK 报文段能够到达 B。
二,防止 “已失效的连接请求报文段”出现在本连接中。A 在发送完最后一个 ACK 报文段后,再经过时间 2MSL,就可以使本连接持续的时间内所产生的所有报文段,都从网络中消失。这样就可以使下一个新的连接中不会出现这种旧的连接请求报文段。

Java类加载过程

blog.csdn.net/m0_50370837…

classloader把字节码文件加载到jvm runtime数据区的java虚拟机栈里,产生一个对象 作为访问类的入口

类加载器 是把类文件从硬盘读取到内存中,作用就是在运行时加载类

双亲委派:

BootstrapClassLoader->ExtClassLoader->appclass loader如果父类能加载到 就直接用,向上委派 向下查找,避免类重复加载,同时也安全

Java内存分配模型

blog.csdn.net/qq_36704549…

.java-编译.class-jvm翻译机器码

JVM runtime数据区:

image.png 线程的程序计数器

vm stack 栈帧:含有局部变量、操作数栈 运行时常量池的引用,返回地址,每个方法执行产生一个栈帧 并压入 - 栈溢出

本地方法栈:本地方法同上

heap:对象、数组、线程共享 只有一个 - 内存溢出

方法区:类信息、线程共享、常量池(类加载后就创建完成)

GC、GC原理、代数,对象存活判定方法

堆内存、方法区

1,引用计数

简单,并发实时回收

缺点:环状有问题、开辟空间存放引用次数,每次修改需要指令操作(多线程加锁)

2,根搜索算法

确定根对象(GC ROOT),顺着根对象遍历,凡是被根对象直接或者间接引用的都不是垃圾,剩下就是垃圾。
Java中的GC ROOT对象有:
7. 虚拟机栈中引用的对象(本地变量表)
8. 方法区中静态属性引用的对象
9. 方法区中常量引用的对象
10. 本地方法栈中引用的对象(Native对象)

缺点:回收前占用,不支持并发回收,需要暂停线程\

垃圾回收原理,优点缺点,还有其他回收机制吗?

分代:

新生代 minor gc

eden survivor0/1 8:1:1

老年代 

对象比较大、新生代周期多次存活(15)、对象占survivor一半以上,临界以上均拷贝

老年代最大可用连续空间大于新生代所有对象总空间或者历次晋升的平均大小,就会Minor GC,否则Full GC

持久代

保存类常量以及字符串常量,也会GC

1、所有实例被回收
2、加载该类的ClassLoader 被回收
3、Class 对象无法通过任何途径访问(包括反射)

垃圾回收器:

标记清除、标记复制、标记压缩

java内存泄漏原理

GC失败,内存无法释放

1,单例持有

2,资源未释放

3,message queue持有handler对象

4,Handler的非静态匿名内部类的实例,所以它持有外部类Activity的引用

5,线程泄漏

内存引用及LeakCanary原理

弱 下次GC就回收

软 内存不足时才GC

嘘 没用 主要监听

Reference 类首先把内存分为4种状态 Active,Pending,Enqueued,Inactive。

检测对象是否回收:

  1. 创建一个引用队列 queue
  1. 创建 Reference 对象,并关联引用队列 queue
  1. 在 reference 被回收的时候,Reference 会被添加到 queue 中

leak原理 

  • 监听 Activity 的生命周期
  • 在 onDestroy 的时候,创建相应的 Reference 和 ReferenceQueue,并启动后台进程去检测
  • 一段时间之后,从 ReferenceQueue 读取,若读取不到相应 activity 的 Reference,有可能发生泄露了,这个时候,再促发 gc,一段时间之后,再去读取,若在从 ReferenceQueue 还是读取不到相应 activity 的 Reference,可以断定是发生内存泄露了
  • 发生内存泄露之后,dump,分析 hprof 文件,找到泄露路径

image.png