加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 运营 > 正文

各大公司Java后端开发面试题总结

发布时间:2020-12-31 15:31:19 所属栏目:运营 来源:网络整理
导读:ThreadLocal(线程变量副本)Synchronized实现内存共享,ThreadLocal为每个线程维护一个当地变量。回收空间换时刻,它用于线程间的数据断绝,为每一个行使该变量的线程提供一个副本,每个线程都可以独立地改变本身的副本,而不会和其他线程的副本斗嘴。ThreadL

b.通过软可及工具重获要领实现Java工具的高速缓存:好比我们建设了一Employee的类,假如每次必要查询一个雇员的信息。哪怕是几秒中之前线才查询过的,都要从头构建一个实例,这是必要耗损许多时刻的。我们可以通过软引用和 HashMap 的团结,先是生涯引用方面:以软引用的方法对一个Employee工具的实例举办引用并生涯该引用到HashMap 上,key 为此雇员的 id,value为这个工具的软引用,另一方面是取出引用,缓存中是否有该Employee实例的软引用,假若有,从软引用中取得。假如没有软引用,可能从软引用中获得的实例是null,从头构建一个实例,并生涯对这个新建实例的软引用。

c.强引用:假如一个工具具有强引用,它就不会被垃圾接纳器接纳。纵然当前内存空间不敷,JVM也不会接纳它,而是抛出 OutOfMemoryError 错误,使措施非常终止。假如想间断强引用和某个工具之间的关联,可以显式地将引用赋值为null,这样一来的话,JVM在吻合的时刻就会接纳该工具。

d.软引用:在行使软引用时,假如内存的空间足够,软引用就能继承被行使,而不会被垃圾接纳器接纳,只有在内存不敷时,软引用才会被垃圾接纳器接纳。

e.弱引用:具有弱引用的工具拥有的生命周期更短暂。由于当 JVM 举办垃圾接纳,一旦发明弱引用工具,无论当前内存空间是否富裕,城市将弱引用接纳。不外因为垃圾接纳器是一个优先级较低的线程,以是并不必然能敏捷发明弱引用工具。

f.虚引用:顾名思义,就是形同虚设,假如一个工具仅持有虚引用,那么它相等于没有引用,在任何时辰都也许被垃圾接纳器接纳。


Hashcode的浸染,与 equal 有什么区别?

a.同样用于判断2个工具是否相称的,java荟萃中有 list 和 set 两类,个中 set不应承元素一再实现,谁人这个不应承一再实现的要领,假如用 equal 去较量的话,假如存在1000个元素,你 new 一个新的元素出来,必要去挪用1000次 equal 去逐个和他们较量是否是统一个工具,这样会大大低落服从。hashcode现实上是返回工具的存储地点,假如这个位置上没有元素,就把元素直接存储在上面,假如这个位置上已经存在元素,这个时辰才去挪用equal要领与新元素举办较量,沟通的话就不存了,散列到其他地点上。


Override和Overload的寄义以及区别a.Overload顾名思义是从头加载,它可以示意类的多态性,可所以函数内里可以有沟通的函数名可是参数名、返回值、范例不能沟通;可能说可以改变参数、范例、返回值可是函数名字依然稳固。b.就是ride(重写)的意思,在子类担任父类的时辰子类中可以界说某要领与其父类有沟通的名称和参数,当子类在挪用这一函数时自动挪用子类的要领,而父类相等于被包围(重写)了。详细可前去查察


抽象类和接口的区别

a.一个类只能担任单个类,可是可以实现多个接口

b.抽象类中可以有结构要领,接口中不能有结构要领

c.抽象类中的全部要领并不必然要是抽象的,你可以选择在抽象类中实现一些根基的要领。而接口要求全部的要领都必需是抽象的

d.抽象类中可以包括静态要领,接口中不行以

e.抽象类中可以有平凡成员变量,接口中不行以

理会XML的几种方法的道理与特点:DOM、SAX、PULL

a.DOM:耗损内存:先把xml文档都读到内存中,然后再用DOM API来会见树形布局,并获取数据。这个写起来很简朴,可是很耗损内存。要是数据过大,手机不足牛逼,也许手机直接死机

b.SAX:理会服从高,占用内存少,基于变乱驱动的:越发简朴地说就是对文档举办次序扫描,当扫描到文档(document)开始与竣事、元素(element)开始与竣事、文档(document)竣事等处所时关照变乱处理赏罚函数,由变乱处理赏罚函数做响应举措,然后继承同样的扫描,直至文档竣事。

c.PULL:与 SAX 相同,也是基于变乱驱动,我们可以挪用它的next()要领,来获取下一个理会变乱(就是开始文档,竣事文档,开始标签,竣事标签),当处于某个元素时可以挪用XmlPullParser的getAttributte()要领来获取属性的值,也可挪用它的nextText()获取本节点的值。


wait()和sleep()的区别

sleep来自Thread类,和wait来自Object类

挪用sleep()要领的进程中,线程不会开释工具锁。而 挪用 wait 要领线程会开释工具锁

sleep就寝后不出让体系资源,wait让出体系资源其他线程可以占用CPU

sleep(milliseconds)必要指定一个就寝时刻,时刻一到会自动叫醒


JAVA 中堆和栈的区别,说下java 的内存机制

a.根基数据范例比变量和工具的引用都是在栈分派的

b.堆内存用来存放由new建设的工具和数组

c.类变量(static修饰的变量),措施在一加载的时辰就在堆中为类变量分派内存,堆中的内存地点存放在栈中

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读