2021-03-03

Android面试总结

1、Handler是怎么实现的?

在主线程创建的时候会创建一个Looper,同时也会在在Looper内部创建一个消息队列。而在创键Handler的时候取出当前线程的Looper,并通过该Looper对象获得消息队列,然后Handler在子线程中通过MessageQueue.enqueueMessage在消息队列中添加一条Message。
通过Looper.loop() 开启消息循环不断轮询调用 MessageQueue.next(),取得对应的Message并且通过Handler.dispatchMessage传递给Handler,最终调用Handler.handlerMessage处理消息。

2、 Synchronized放在静态方法和非静态方法上的锁对象分别是什么?

静态方法的锁属于类, 一个类中所有加锁的静态方法共用该锁
非静态方法的锁属于对象, 一个对象中所有加锁的非静态方法共用, 和静态方法的锁不同而互不相干
加锁的方法的执行不会影响同一个类/对象中未加锁的方法的执行

3、说说JVM垃圾回收机制

垃圾判断算法:引用计数法、可达性分析法
垃圾回收算法:标记-清除算法、标记-整理算法、复制算法、分代收集算法
垃圾回收器:Serial 收集器、ParNew 收集器、Parallel Scavenge 收集器、Serial Old 收集器、Parallel Old 收集器、CMS收集器、G1 收集器

点击此处查看详情介绍

jvm垃圾回收机制的底层原理:

使用新生代老年代垃圾回收策略
年轻代:
当新的对象被分配到Eden区,发现内存空间不够,于是触发第一次GC,每经过一次GC回收,对象的年龄加一,垃圾回收器首先将Eden区中存活的对象复制到From区,然后清空Eden区的空间。From区中通过可达性分析法判断对象是否能被回收,这里采用mark-copy垃圾回收算法,给能被回收的对象打一个标记,然后把打了标记的对象复制到To区,清空From的空间。然后To区重复刚刚在From的过程,就这样经过一次次GC,对象在From区和To区之间不断移动,直到有对象的年龄达到一个阈值,pspu垃圾回收器默认是15,cms垃圾回收器默认是6,这个参数是可以自己设置的,然后将达到年龄的对象移入老年代空间。
老年代
当有对象进入老年代,而老年代空间又不足时会触发FullGC,FullGC使用的算法是标记-整理算法。

4、讲讲tcp的三次握手和四次挥手

三次握手:

第一次握手:客户端发送第一个包,其中SYN标志位为1, ACK=0,发送顺序号sequence=X(随机int)。客户端进入SYN发送状态,等待服务器确认。

第二次握手:服务器收到这个包后发送第二个包,其中包SYN、ACK标志位为1,发送顺序号seq=Y(随机int),接收顺序号ACK=X+1,此时服务器进入SYN接收状态。

第三次握手:客户端收到服务器传来的包后,向服务器发送第三个包,SYN=0, ACK=1,接收顺序号ACK = Y+1,发送顺序号seq=X+1。此包发送完毕,客户端和服务器进入ESTABLISHED建立成功状态,完成三次握手。

四次挥手:
  1. 第一次挥手:主动关闭方发送第一个包,其中FIN标志位为1,发送顺序号seq为X。
  2. 第二次挥手:被动关闭方收到FIN包后发送第二个包,其中发送顺序号seq为Z,接收顺序号ack为X+1。
  3. 第三次挥手:被动关闭方再发送第三个包,其中FIN标志位为1,发送顺序号seq为Y,接收顺序号ack为X。
  4. 第四次挥手:主动关闭方发送第四个包,其中发送顺序号为X,接收顺序号为Y。至此,完成四次挥手。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值