Java面试题以及答案整理【最新版】Java面试题大全(2021版),发现网上很多Java面试题都没有答案,所以花了很长时间搜集Java面试题及答案整理出来了这套Java面试题大全,希望对大家有帮助哈~ 本套Java面试题大全,全的不能再全,哈哈
Select top 3 * from tb_name where id not in (select top 3 id from tb_name)
在解决这个问题之前,我们首先需要知道什么是哈希冲突,而在了解哈希冲突之前我们还要知道什么是哈希才行;
什么是哈希?
Hash,一般翻译为“散列”,也有直接音译为“哈希”的, Hash就是指使用哈希算法是指把任意长度的二进制映射为固定长度的较小的二进制值,这个较小的二进制值叫做哈希值。
什么是哈希冲突?
当两个不同的输入值,根据同一散列函数计算出相同的散列值的现象,我们就把它叫做碰撞(哈希碰撞)
HashMap的数据结构
在Java中,保存数据有两种比较简单的数据结构:数组和链表
1、 数组的特点是:寻址容易,插入和删除困难;
2、 链表的特点是:寻址困难,但插入和删除容易;
3、 所以我们将数组和链表结合在一起,发挥两者各自的优势,就可以使用俩种方式:链地址法和开放地址法可以解决哈希冲突:
1、 链表法就是将相同hash值的对象组织成一个链表放在hash值对应的槽位;
2、 开放地址法是通过一个探测算法,当某个槽位已经被占据的情况下继续查找下一个可以使用的槽位。
但相比于hashCode返回的int类型,我们HashMap初始的容量大小(即2的四次方16)要远小于int类型的范围,所以我们如果只是单纯的用hashCode取余来获取对应的bucket这将会大大增加哈希碰撞的概率,并且最坏情况下还会将HashMap变成一个单链表,所以我们还需要对hashCode作一定的优化
hash()函数
上面提到的问题,主要是因为如果使用hashCode取余,那么相当于参与运算的只有hashCode的低位,高位是没有起到任何作用的,所以我们的思路就是让hashCode取值出的高位也参与运算,进一步降低hash碰撞的概率,使得数据分布更平均,我们把这样的操作称为扰动,在JDK 1.8中的hash()函数如下:
这比在JDK 1.7中,更为简洁,相比在1.7中的4次位运算,5次异或运算(9次扰动),在1.8中,只进行了1次位运算和1次异或运算(2次扰动)
简单总结一下HashMap是使用了哪些方法来有效解决哈希冲突的:
1、 链表法就是将相同hash值的对象组织成一个链表放在hash值对应的槽位;
2、 开放地址法是通过一个探测算法,当某个槽位已经被占据的情况下继续查找下一个可以使用的槽位。
GC 是垃圾收集的意思(GabageCollection),内存处理是编程人员容易出现问题的地方,忘记或者错误的内存回收会导致程序或系统的不稳定甚至崩溃,Java 提供的 GC 功能可以自动监测对象是否超过作用域从而达到自动回收内存的目的,Java 语言没有提供释放已分配内存的显示操作方法。
Sun JDK监控和故障处理命令有jps jstat jmap jhat jstack jinfo
1、 jps,JVM Process Status Tool,显示指定系统内所有的HotSpot虚拟机进程。
2、 jstat,JVM statistics Monitoring是用于监视虚拟机运行时状态信息的命令,它可以显示出虚拟机进程中的类装载、内存、垃圾收集、JIT编译等运行数据。
3、 jmap,JVM Memory Map命令用于生成heap dump文件
4、 jhat,JVM Heap Analysis Tool命令是与jmap搭配使用,用来分析jmap生成的dump,jhat内置了一个微型的HTTP/HTML服务器,生成dump的分析结果后,可以在浏览器中查看
5、 jstack,用于生成Java虚拟机当前时刻的线程快照。
6、 jinfo,JVM Configuration info 这个命令作用是实时查看和调整虚拟机运行参数
Java程序在执行子类的构造方法之前,如果没有用super()来调用父类特定的构造方法,则会调用父类中“没有参数的构造方法”。因此,如果父类中只定义了有参数的构造方法,而在子类的构造方法中又没有用super()来调用父类中特定的构造方法,则编译时将发生错误,因为Java程序在父类中找不到没有参数的构造方法可供执行。解决办法是在父类里加上一个不做事且没有参数的构造方法。
打破双亲委派机制则不仅要继承ClassLoader类,还要重写loadClass和findClass方法。
这里区分一下:
1、 如果使用的是无界队列LinkedBlockingQueue,也就是无界队列的话,没关系,继续添加任务到阻塞队列中等待执行,因为LinkedBlockingQueue可以近乎认为是一个无穷大的队列,可以无限存放任务
2、 如果使用的是有界队列比如ArrayBlockingQueue,任务首先会被添加到ArrayBlockingQueue中,ArrayBlockingQueue满了,会根据maximumPoolSize的值增加线程数量,如果增加了线程数量还是处理不过来,ArrayBlockingQueue继续满,那么则会使用拒绝策略RejectedExecutionHandler处理满了的任务,默认是AbortPolicy
Tom coyote是基于HTTP / 1.1规范的HTTP连接器,通过监听TCP / IP端口并将请求发送回请求客户端,向Tomcat引擎接收和传输web请求。
2、 Onsubmit:提交
3、 Onblur:失去焦点
4、 Onclick:单击
5、 Onload:加载页面
6、 Onchange:内容改变
7、 onMouseMove:鼠标移动
8、 onMouseOver:鼠标经过
9、 onMouseOut:鼠标移出
10、 onselect:下拉选项被选中
合适读多写少的场景。
到此这篇java面试题大全(java面试题大全带答案pdf版)的文章就介绍到这了,更多相关内容请继续浏览下面的相关推荐文章,希望大家都能在编程的领域有一番成就!版权声明:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若内容造成侵权、违法违规、事实不符,请将相关资料发送至xkadmin@xkablog.com进行投诉反馈,一经查实,立即处理!
转载请注明出处,原文链接:https://www.xkablog.com/javal-zj/42864.html