返回顶部

Java架构师面试题目及答案汇总

[复制链接]
蓝毒Lv.2 显示全部楼层 发表于 2022-7-5 17:54:50 |阅读模式 打印 上一主题 下一主题
  一、Java如何开启线程?怎么保证线程安全?

  答:线程与进程的区别:进程是操作系统进行资源分配的最小单元。线程是操作系统进行任务分配的最小单元,线程隶属于进程。

  如何开启线程?1.继承Thread类,重写run方法。2.实现Runable接口,实现run方法。3.实现Callable接口,实现call方法。通过FutureTask创建一个线程,获取到线程执行的返回值。4.通过线程池来开启线程。

  怎么保证线程安全?核心思想就是加锁:1.JVM提供的锁,也就是Synchronized关键字。2.JDK提供的各种锁Lock.


  二、Volatile和Synchronized有什么区别?Volatile能不能保证线程安全?DCL(DoubleCheckLock)单例为什么要加Volatile?

  答:1.Synchronize关键字,用来加锁,Volatile只是保持亦是的线程可见性。通常适用于一个线程写,多个线程读的场景。

  2.Volatile关键字不能保证线程安全,只能保证线程可见性,不能保证原子性。

  3.Volatile防止指令重排,在DCL中,防上高并发情况下,指令重排造成的线程安全问题。

  三、Java线程锁机制是怎么样的?偏向锁、轻量级锁、重量级锁有什么区别?锁机制是如何升级的?

  答:1.Java的锁就是在对象的Markword中记录一个锁状态,无锁、偏向锁、轻量级锁、重量级锁对应不同的锁状态。

  2.Java的锁机制就是根据资源竟争的激烈程度不断进行锁升级的过程。

  四、谈谈你对AQS的理解。AQS如何实现可重入锁?

  答:1.AQS是一个Java线程同步的框架,是JDK中很多锁工具的核心实现框架。

  2.在AQS中,维护了一个信号量state和一个线程组成的双向链表队列,其中,这个线程队列就是用来给线程排队的,而state就像是一个红绿灯,用来控制线程排队或才放行的,在不同的场景下,有不同的意义。

  3.在可重入锁这个场景下,state就用来表示加锁的次数,0表示无锁,每加一次锁state就加1,释放锁state就减1.

  五、TCP和UDP有什么区别?TCP为什么是三次握手,而不是两次?

  答:TCPTransferControlProtocol是一种面向连接的,可靠的,传输层通信协议。

  特点:好比打电话,面向连接的,点对点的通信,高可靠的,效率比较低,占用的系统资源比较多。

  UDPUserDatagramProtocol是一种无连接的,不可靠的,传输层通信协议。

  特点:好比广播,不需要连接,发送方不管接收方有没有准备好,直接发消息;可以进行广播发送。传输不可靠,有可能丢失消息;效率比较高,协议比较简单,占用的系统资源比较少。

  TCP建立连接三次握手,断开连接四次挥手。如果是两次握手,可能造成连接资源浪费的情况。

  ————————————————

  版权声明:本文为CSDN博主「断然然」的原创文章,遵循CC4.0BY-SA版权协议,转载请附上原文出处链接及本声明。

  原文链接:https://blog.csdn.net/zlich/article/details/122354464


回复

使用道具 举报

精彩评论1

adminLv.9 显示全部楼层 发表于 2022-7-6 10:08:59
想到了上学时学的tcp/ip 啦
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

达内教育:成立于2002年。致力于面向IT互联网行业,培养软件开发工程师、测试工程师、系统管理员、智能硬件工程师、UI设计师、网络营销、会计等职场人才 达内使命:缔造年轻人的中国梦、缔造达内员工的中国梦 达内愿景:做管理一流的教育公司
  • 商务合作

  • 微信公众号

  • Powered by Discuz! X3.4 | Copyright © 2002-2021, 达内教育 Tedu.cn
  • 京ICP备08000853号-56 |网站地图 | 京公网安备 11010802029508号