21.题目:synchronized 和 volatile 的区别是什么br> volatile 本质是在告诉 JVM 当前变量在寄存器(工作内存)中的值是不确定的,需要从主存中读取; synchronized则是锁定当前变量,只有当前线程可以访问该变量,其他线程被阻塞住。
volatile 仅能使用在变量级别;synchronized 则可以使用在变量、方法、和类级别的。
volatile仅能实现变量的修改可见性,不能保证原子性;而 synchronized 则可以保证变量的修改可见性和原子性。
volatile不会造成线程的阻塞;synchronized可能会造成线程的阻塞
volatile 标记的变量不会被编译器优化;synchronized 标记的变量可以被编译器优化。
22.题目:说一下 Runnable 和 Callable有什么区别br> Runnable接口中的run()方法的返回值是void,它做的事情只是纯粹地去执行run()方法中的代码而已。
Callable接口中的 call()方法是有返回值的,是一个泛型,和Future、FutureTask 配合可以用来获取异步执行的结果。
23.题目:线程池中 submit()和execute()方法有什么区别br> 接收的参数不一样。
submit 有返回值,而 execute 没有。
submit 方便 Exception 处理。
24.题目:synchronized 和 Lock 有什么区别br> 首先synchronized是Java内置关键字,在JVM 层面,Lock是个Java类。
synchronized无法判断是否获取锁的状态,Lock可以判断是否获取到锁。
synchronized会自动释放锁(a线程执行完同步代码会释放锁;b线程技行过程中发生异常会释放锁),Lock 需在finally 中手工释放锁(unlock()方法释放锁),否则容易造成线程死锁。
用synchronized关键字的两个线程1和线程2,如果当前线程1获得锁,线程2线程等待。如果线程1阻塞,线程2则会一直等待下去,而 Lock 锁不一定会等待下去,如果尝试获取不到锁,线程可以不用一直等待就结束了。
synchronized 的锁可重入、不可中断、非公平,而 Lock 锁可重入。可判断、可公平。
Lock 锁适合大量同步的代码的同步问题,synchronized 锁适合代码少量的同步问题。
25.题目:说一下 TCP 粘包是怎么产生的br> 发送方产生粘包
采用TCP协议传输数据的客户端与服务器经常是保持一个长连接的状态(一次连接发一次数据不存在粘包),双方在连接不断开的情况下,可以一直传输数据;但当发送的数据包过于的小时,那么TCP协议默认的会启用Nagle算法,将这些较小的数据包进行合并发送;这个合并过程就是在发送缓冲区中进行的,也就是说数据发送出来它已经是粘包的状态了。

26.题目:synchronized和ReentrantLock 区别是什么nbsp;
synchronized是和if、else、for、while一样的关键字,ReentrantLock是类,这是二者的本质区别。既然 ReentrantLock 是类,那么它就提供了比 synchronized更多更灵活的特性,可以被维承、可以有方法、可以有各种各祥的类变量,ReentrantLock比synchronized的扩展性体现在几点上:
ReentrantLock可以对获取锁的等待时间进行设置,这样就避免了死锁。
ReentrantLock 可以获取各种锁的信息。
ReentrantLock 可以灵活地实现多路通知。
另外,二者的锁机制其实也是不一样的:ReentrantLock 底层调用的是 Unsafe 的park方法加锁,synchronized操作的应该是对象头中 mark word。
27.题目:TCP 为什么要三次握手,两次不行吗什么br> 为了实现可靠数据传输,TCP 协议的通信双方,都必须维护一个序列 ,以标识发送出去的数据包中,哪些是已经被对方收到的。三次握手的过程即是通信双方相互告知序列 起始值,并确认对方已经收到了序列 起始值的必经步骤。
如果只是两次握手,至多只有连接发起方的起始序列 能被确认,另一方选择的序列 则得不到确认。
28.题目:基于 TCP 和 UDP 的 Socket 编程的主要步骤br> 1、基于 TCP 协议的 Socket 编程的主要步骤:
服务端:
指定本地的端口创建 ServerSocket 实例,用来监听指定端口的连接请求。
通过accept()方法返回的 Socket 实例,建立了一个和客户端的新连接。
通过 Sockect 实例获取 InputStream 和OutputStream 读写数据。
数据传输结束,调用 socket 实例的 close(方法关闭连接。
客户端:
指定的远程服务器 IP 地址和端口创建 Socket 实例。
通过 Socket 实例获取 InputStream和OutputStream 来进行数据的读写。
数据传输结束,调用 socket 实例的 close()方法关闭连接。
2、基于 UDP 协议的 Socket 编程的主要步骤;
服务端:
指定本地端口创建 DatagramSocket 实例。
通过字节数组,创建DatagramPacket 实例,调用DatagramSacket实例的receive()方法,用 DatagramPacket 实例来接收数据。
设置DatagramPacket 实例返回的数据,调用DatagramSocket 实例的 send()方法来发送数据。
数据传输完成,调用 DatagramSocket 实例的 close()方法。
客户端:
创建 DatagramSocket 实例。
通过 IP 地址端口和数据创建 DatagramSocket 实例,调用DatagramSocket 实例 send()方法发送数据包
通过字节数组创建 DatagramSocket 实例,调用DatagramSocket实例receive()方法接受数据包。
数据传输完成,调用 DatagramSocket 实例的close()方法。
29.题目:Java中的设计模式有哪些br> 创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。
结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式
行为型模式,共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。
30.题目:XML文档定义有几种形式何区别br> XML 文档定义分为 Schema 和 DTD 两种形式
Schema 是对 XML 文档结构的定义和描述,其主要的作用是用来约束XML文件,并验证 XML 文件有效性。
DTD 的作用是定义 XML的合法构建模块,它使用一系列的合法元素来定义文档结构。
区别:
Schema 本身也是 XML 文档,DTD 定义跟 XML 无关。
Schema 文档结构性强,各元素之间的嵌套关系非常直观:DTD文档的结构是”平铺型”的,如果定义复杂的 XML 文档,很难把握各元素之间的嵌套关系。
Schema 可以定义元素文本的具体类型;DTD 只能指定元素含有文本。
Schema 支持元素节点顺序的描述;DTD 没有提供无序情况的描述;
Schema 可以很好满足命名空间;DTD 不可以。
文章知识点与官方知识档案匹配,可进一步学习相关知识Java技能树首页概览91611 人正在系统学习中
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!