Java | Map的有序无序 | (1) HashMap是有无序的,LinkedHashMap和TreeMap都是有序的(LinkedHashMap记录了添加数据的顺序;TreeMap默认是自然升序)。 (2) LinkedHashMap底层存储结构是哈希表+链表,链表记录了添加数据的顺序。 (3). TreeMap底层存储结构是二叉树,二叉树的中序遍历保证了数据的有序性。 (4). LinkedHashMap有序性能比较高,因为底层数据存储结构采用的哈希表。 | Java后端各种小知识点_属性 不同方法调用 值不保留吗-CSDN博客 |
hashCode方法的作用 | 1、HashCode的存在主要是用于查找的快捷性,如Hashtable,HashMap等,HashCode经常用于确定对象的存储地址。 2、如果我们只重写HashCode方法,那么就会调用Object默认的equals方法,显示这是两个不同的对象。HashSet中相同的(适用于equals方法)的对象只会存放一个,但是这里实际上是两个都被放到了HashSet中,HashSet失去了本身的意义了。 | Java面试——HashCode的作用原理和实例解析_java hashcode原理-CSDN博客 hash算法原理详解_哈希算法-CSDN博客 (hash算法原理) | |
HashMap | 1、链表长度小于6时红黑树 2、1.8中扩容采用尾插法,避免形成环形链表 3、多线程put会导致数据不一致 | 一文读懂HashMap - 简书 | |
HashMap和HashTable区别 | 1、HashMap是继承自AbstractMap类,而HashTable是继承自Dictionary类 2、HashMap中,null可以作为键和value。Hashtable既不支持Null key也不支持Null value 3、Hashtable默认的初始大小为11,之后每次扩充,容量变为原来的2n+1。HashMap默认的初始化大小为16。之后每次扩充,容量变为原来的2倍。 | HashMap 与HashTable的区别_hashmap和hashtable的区别-CSDN博客 | |
ConcurrentHashMap | 1.8中抛弃了原有的Segment 分段锁,而采用了 CAS + synchronized 来保证并发安全性。不采用segment而采用node,锁住node来实现减小锁粒度。 | https://www.jianshu.com/p/5dbaa6707017 | |
注解原理 | ● @Target:注解的作用目标 ● @Retention:注解的生命周期 ● @Documented:注解是否应当被包含在 JavaDoc 文档中 ● @Inherited:是否允许子类继承该注解 注解的本质就是一个继承了 Annotation 接口的接口 编译器将在编译期扫描每个类或者方法上的注解,会做一个基本的检查,你的这个注解是否允许作用在当前位置,最后会将注解信息写入元素的属性表。 然后,当你进行反射的时候,虚拟机将所有生命周期在 RUNTIME 的注解取出来放到一个 map 中,并创建一个 AnnotationInvocationHandler 实例,把这个 map 传递给它。 最后,虚拟机将采用 JDK 动态代理机制生成一个目标注解的代理类,并初始化好处理器。 | https://www.cnblogs.com/yangming1996/p/9295168.html | |
JNI介绍以及DEMO | 就是JAVA调用C/C++函数的接口.如果你要想调用C系列的函数,你就必须遵守这样的约定 | JNI详解------完整Demo_jni demo-CSDN博客 | |
SPI机制 | Java SPI 实际上是“基于接口的编程+策略模式+配置文件”组合实现的动态加载机制。 是一种服务发现机制。它通过在ClassPath路径下的META-INF/services文件夹查找文件,自动加载文件里所定义的类。 | 高级开发必须理解的Java中SPI机制 - 简书 | |
TreeSet | 1、不能有重复的元素; 2、具有排序功能; 3、TreeSet中的元素必须实现Comparable接口并重写compareTo()方法,TreeSet判断元素是否重复 、以及确定元素的顺序 靠的都是这个方法; 4、依赖TreeMap。 | Java集合类(四)—TreeSet - 简书 | |
BIO、NIO、AIO介绍 | 1、传统的 java.io 包,它基于流模型实现,交互方式是同步、阻塞的方式,在读、写动作完成之前,线程会一直阻塞在那里,容易成为应用性能的瓶颈。 2、在 Java 1.4 中引入了 NIO 框架(java.nio 包),提供了 Channel、Selector、Buffer 等新的抽象,可以构建多路复用的、同步非阻塞 IO 程序,同时提供了更接近操作系统底层的高性能数据操作方式。 3、在 Java 7 中,NIO 有了进一步的改进,也就是 NIO 2,引入了异步非阻塞 IO 方式,也有很多人叫它 AIO(Asynchronous IO)。异步 IO 操作基于事件和回调机制,可以简单理解为,应用操作直接返回,而不会阻塞在那里,当后台处理完成,操作系统会通知相应线程进行后续工作。 | 第11讲 | Java提供了哪些IO方式? NIO如何实现多路复用?-Java核心技术面试精讲-极客时间 | |
字符和字节的区别 | Java采用unicode来表示字符,java中的一个char是2个字节,一个中文或英文字符的unicode编码都占2个字节,但如果采用其他编码方式,一个字符占用的字节数则各不相同。 | https://www.cnblogs.com/wgblog-code/p/11334052.html | |
强弱软虚引用的理解 | 1、强引用,还有强引用指向一个对象,就能表明对象还“活着”,垃圾收集器不会碰这种对象。 2、软引用,是一种相对强引用弱化一些的引用,可以让对象豁免一些垃圾收集,只有当 JVM 认为内存不足时,才会去试图回收软引用指向的对象。软引用通常用来实现内存敏感的缓存 3、弱引用,并不能使对象豁免垃圾收集,仅仅是提供一种访问在弱引用状态下对象的途径。 4、幻象引用,有时候也翻译成虚引用,你不能通过它访问对象。幻象引用仅仅是提供了一种确保对象被 finalize 以后,做某些事情的机制,比如,通常用来做所谓的 Post-Mortem 清理机制 | JAVA语言核心精讲3-强引用、软引用、弱引用、幻象引用的区别-CSDN博客 | |
stringbuilder原理 | String 类不可变,内部维护的char[] 数组长度不可变,为final修饰,String类也是final修饰,不存在扩容。字符串拼接,截取,都会生成一个新的对象。频繁操作字符串效率低下,因为每次都会生成新的对象。 StringBuilder 类内部维护可变长度char[] , 初始化数组容量为16,存在扩容, 其append拼接字符串方法内部调用System的native方法,进行数组的拷贝,不会重新生成新的StringBuilder对象。非线程安全的字符串操作类, 其每次调用 toString方法而重新生成的String对象,不会共享StringBuilder对象内部的char[],会进行一次char[]的copy操作。 StringBuffer 类内部维护可变长度char[], 基本上与StringBuilder一致,但其为线程安全的字符串操作类,大部分方法都采用了Synchronized关键字修改,以此来实现在多线程下的操作字符串的安全性。其toString方法而重新生成的String对象,会共享StringBuffer对象中的toStringCache属性(char[]),但是每次的StringBuffer对象修改,都会置null该属性值。 | String,StringBuilder,StringBuffer 实现原理解析 - 简书 | |
hashmap为什么16或2的次方 | index = HashCode(Key) & (Length - 1) 长度16或者其他2的幂,Length-1的值是所有二进制位全为1,这种情况下,index的结果等同于HashCode后几位的值。只要输入的HashCode本身分布均匀,Hash算法的结果就是均匀的 | HashMap中的为什么hash的长度为2的幂而&位必须为奇数_hash 为什么 2的幂-CSDN博客 | |
ClassLoader类加载 | 按照双亲委派机制加载类,每当需要加载一个新的类时,当前的类加载器会先委托其父加载器,查询有没有加载该类。如果父类加载器已近加载该类,那么直接返回加载的class对象,如果没有那么继续向上寻找父类加载器,如果在祖宗类加载器Bootstrap都没有加载该类,那么需要当前的类加载器自己加载,如果当前的类加载器也不能加载则会跑出ClassNotFoundException异常 (PS:类加载器没有向下寻找,没有getChild只有getParent)。 自定义加载器,需要继承ClassLoader,并重写里面的protected Class findClass(String name) | https://dandanlove.com/2017/02/23/java-classloader/ | |
Deque | Deque同时扩展了Queue接口,当Deque作为队列的时候,会产生FIFO(先进先出)行为。元素添加在双端队列的末尾并从头开始删除。 Deque也可以作为LIFO(后进先出)堆栈,此接口优于传统的Stack类使用。 | 深入理解Java集合之---Deque - 简书 | |
字符串为什么是final的 | 1.为了实现字符串常量池 2.为了线程安全 3.为了实现String可以创建HashCode不可变性 | Java String类为什么是final的? - 简书 |
面试实战题-Java
2025/5/7 13:36:44
来源:https://blog.csdn.net/sinat_27143551/article/details/141127848
浏览:
次
关键词:面试实战题-Java
版权声明:
本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。
我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com
热文排行
- 华为 海思22AP10(SS524)H.265 编解码处理器用户指南
- 数据库物理结构设计
- 基于重要抽样的主动学习不平衡分类方法ALIS
- 《缺失MRI模态下的脑肿瘤分割的潜在相关表示学习》| 文献速递-深度学习肿瘤自动分割
- npm install puppeteer 报错 npm ERR! PUPPETEER_DOWNLOAD_HOST is deprecated解决办法
- 如何在 Mac 上清空硬盘后恢复丢失的数据?
- (2)Django生产环境数据库的切换以及环境配置python-dotenv方案
- 开源模型时代的 AI 开发革命:Dify 技术深度解析
- 【微信小程序】自定义组件 - 组件的生命周期
- 大模型分离架构学习记录