疏漏总结(十二)

  1. Java的条件变量是什么

条件变量的出现是为了更精细控制线程等待与唤醒,在Java5之前,线程的等待与唤醒依靠的是Object对象的wait()和notify()/notifyAll()方法,这样的处理不够精细。
通熟易懂的说,就是消费者/生产者的场景中,在原来的基础上,增加了队列满时及时通知消费者,队列空时及时通知生产者的优化,通常是两个条件变量一起出现,一个控制值,但两个条件变量可以毫无关系,终归来说还是在Lock的范围内。所以,从本质上来说,是对Object监视器的场景性优化,而不是全新机制的引入。

  1. TCP四次挥手的时候close-wait过多怎么办

服务器中CLOSE_WAIT状态过多说明服务器没有返回ack给客户端,要保证使用完连接之后释放连接,进入time wait的状态。

  1. volatile为什么不能保证原子性

读写可以原子,有计算就不行了。

  1. spring是如何解析xml的

BeanDefinition在Spring中有三个实现,RootBeanDefinition,ChildBeanDefinition,和GenericBeanDefinition
父<bean>用rootBeanDefinition,子<bean>用Child承载,GenericBeanDefinition是2.5版本后新增的文件配置属性定义类,是一站式服务类

  1. ORM是怎么实现的

首先要做到的是解析配置文件和数据库建立连接,配置文件可以是xml,可以是properties,也可以是yml等等,根据封装好的一些类,比如getProperties或者getName去捕捉到标签,或者关键字,然后进行组装拼接,就像我们平时的jdbc去set属性一样。

然后解析Java的类文件,进行映射,利用jdk自带的反射机制,得到类的信息,包括类只用的修饰符、方法、属性、继承的父类以及实现接口等信息。反射机制相关的类有Class、Field、Method以及Constructor等。我们可以首先通过以上方法获取类中的属性名,然后拼写成setXXX和getXXX方法名,最后根据方法名执行对应的方法,将数据库数据加载到对象中。

  1. 在分布式环境下如何设计接口才能做到幂等性。

幂等性,通俗的说就是一个接口,多次发起同一个请求,必须保证返回结果必须准确,比如订单接口,不能多次创建订单,支付宝回调接口可能会多次回调,你要保证你的业务处理准确且操作只能执行一次。

幂等性有几条方案:
(1)对于要操作的数据,在表中建立唯一索引字段。
(2)加入版本号
(3)可以在外部存储中设置一个单独的去重表,比如使用redis,每次请求过来,生成唯一的key。
(4)基于业务状态进行判断,设计接口的时候,对于每一个业务操作能否操作,设置可以执行的状态,比如使用状态机模式,便于检查业务对象的状态,接受到请求要进行一些业务处理时,可以先行判断业务对象的状态,是否满足执行操作的条件,如果当前操作已经执行过了,那么状态就会发生变化,也就不能进行当前操作,直接返回。

  1. 什么是深拷贝,什么是浅拷贝

浅拷贝—能复制变量,如果对象内还有对象,则只能复制对象的地址

深拷贝—能复制变量,也能复制当前对象的 内部对象

  1. 如何自己实现一个RPC

socket+代理

  1. 为什么锁膨胀

“因为thin-lock没有足够空间来存储额外状态,所以在遇到某个锁实际上有contention的情况下,如果不膨胀,实质上就要迫使所有在等待这把锁的线程都要spin-wait,有可能会非常非常低效。”thin-lock膨胀到fat-lock(HotSpot VM里的ObjectMonitor)就有了更多存储空间,可以存下诸如native mutex之类的OS提供的同步原语对象的指针,可以在contended的情况下更高效地实现线程等待。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章