Java 面试题基础(六)

Java 面试题基础(六)

  • 前言
  • 1、深拷贝和浅拷贝?
  • 2、poll() 方法和 remove() 方法的区别?
  • 3、DelayQueue实现延时任务原理?
  • 4、ArrayList 与 LinkedList 的区别?
  • 5、用哪两种方式来实现集合的排序?
  • 6、LinkedList 是单向链表还是双向链表?
  • 7、Java 中的 TreeMap 和hashMap?
  • 8、ArrayList 和 HashMap 的默认大小是多数?
  • 9、有没有可能两个不相等的对象有有相同的 hashcode?
  • 10、List安全删除元素详解?
  • 11、ByteBuffer 与 StringBuffer 有什么区别?
  • 12、Java 中,编写多线程程序的时候你会遵循哪些最佳实践?
  • 13、DateTimeFormatter的使用?
  • 14、抽象类与接口之间有什么不同?
  • 15、Java 中,throw 和 throws 有什么区别?
  • 16、Java 中,Serializable 与 Externalizable 的区别?
  • 17、Java常用数据结构有哪些?
  • 18、GC 是什么?为什么要有 GC?
  • 19、全局变量和局部变量的区别?
  • 20、获得一个Servlet的生命周期?
  • 总结


前言

最新的 Java 面试题,技术栈涉及 Java 基础、集合、多线程、Mysql、分布式、Spring全家桶、MyBatis、Dubbo、缓存、消息队列、Linux…等等,会持续更新。

如果对老铁有帮助,帮忙免费点个赞,谢谢你的发财手!

1、深拷贝和浅拷贝?

  • 1、浅拷贝是指:只会拷⻉基本数据类型的值,以及实例对象的引⽤地址,并不会复制⼀份引⽤地址所指向的对象,也就是说浅拷⻉出来的对象,内部的引用对象指向的是同⼀个对象。
  • 2、深拷贝是指:既会拷⻉基本数据类型的值,也会复制引⽤地址所指向的实例对象, 也就是说深拷⻉出来的对象,内部的引用对象指向的不是同⼀个对象。

2、poll() 方法和 remove() 方法的区别?

poll() 和 remove() 都是从队列中取出一个元素,但是 poll() 在获取元素失败的时候会返回null,
但是 remove() 失败的时候会抛出异常。
Queue queue = new LinkedList();
queue.offer(“1”);
System.out.println(queue.remove(“1”)); //返回true
System.out.println(queue.poll()); //返回null。

3、DelayQueue实现延时任务原理?

DelayQueue是一个无界的BlockingQueue的实现类,延迟队列中的元素只有在到期的时候,才能从队列中取走。
它的实现原理是基于priorityQueue,它是一个优先级队列,可以根据元素的优先级进行排序;在delayQueue中,元素的优先级是根据元素的延迟时间来确定的,延迟时间越短的元素优先级越高。

4、ArrayList 与 LinkedList 的区别?

  • 1、数据结构不同:
    ArrayList是Array(动态数组)的数据结构,LinkedList是Link(链表)双向链表的数据结构。
  • 2、效率不同:
    当随机访问List(get和set)时,ArrayList的效率更高,时间复杂度是O(1);
    而LinkedList是线性存储方式,时间复杂度是O(log n);但是插入与删除元素时,LinkedList的效率更高。
  • 3、内存使用方式不同:
    ArrayList它的内存空间是预先分配好的,默认可以存放10个元素;而LinkedList它没有初始化大小,它就是一个双向链表,没有扩容,插入或删除元素时只需要改变前后节点的指针,不会浪费额外的内存空间。

5、用哪两种方式来实现集合的排序?

java集合的工具类Collections中提供了两种排序的方法,分别是:
List list = new ArrayList();

  • 1.Collections.sort(list):userDTO必须实现Comparable接口,重写compareTo方法
  • 2.Collections.sort(list:new Comparator())。

6、LinkedList 是单向链表还是双向链表?

是双向链表,它的每个Node节点都有3个属性:本节点存放的数据,以及指向前后节点的两个指针。

7、Java 中的 TreeMap 和hashMap?

  • HashMap是通过hashcode()对其内容进行快速查找的;HashMap中的元素是没有顺序的;
  • TreeMap中所有的元素都是有某一固定顺序的,如果需要得到一个有序的结果,就应该使用TreeMap;
    HashMap和TreeMap都不是线程安全的。

8、ArrayList 和 HashMap 的默认大小是多数?

  • ArrayList 的默认大小是10 个元素,每次扩容为原长度的1.5倍;
  • HashMap 的默认大小是 16 个元素(必须是 2 的幂),每次扩容为原来的2倍。

9、有没有可能两个不相等的对象有有相同的 hashcode?

有可能,两个不相等的对象可能会有相同的 hashcode 值,这就是为什么在 hashmap 中会有冲突。如果两个对象相等,必须有相同的 hashcode 值,反之不一定相等。

10、List安全删除元素详解?

  • 1、使用迭代器Iterator遍历list,调用Iterator的remove方法可以安全地移除元素;
Iterator<String> iterator = list.iterator();while (iterator.hasNext()) {String element = iterator.next();if (element.equals("B")) {iterator.remove(); // 安全移除元素}}
  • 2、Java8之后list新增了一个api removeIf,这个也可以做安全删除;
list.removeIf(s -> s.equals("B"));
  • 3、使用removeAll方法;
List<String> elementsToRemove = new ArrayList<>();for (String element : list) {if (element.equals("B")) {elementsToRemove.add(element);}}
list.removeAll(elementsToRemove);

11、ByteBuffer 与 StringBuffer 有什么区别?

  • 1、StringBuffer 与 StringBuilder 中的方法和功能完全是等价的
  • 2、只是StringBuffer 中的方法大都采用了 synchronized 关键字进行修饰,因此是线程安全的,而 StringBuilder 没有这个修饰,可以被认为是线程不安全的。
  • 3、在单线程程序下,StringBuilder效率更快,因为它不需要加锁,而StringBuffer则每次都需要判断锁,效率相对更低。

12、Java 中,编写多线程程序的时候你会遵循哪些最佳实践?

这是我在写 Java 并发程序的时候遵循的一些最佳实践:

  • 1、给线程命名,这样可以帮助调试。
  • 2、最小化同步的范围,而不是将整个方法同步,只对关键部分做同步。
  • 3、如果可以,更偏向于使用volatile 而不是 synchronized。
  • 4、使用更高层次的并发工具,而不是使用wait() 和notify() 来实现线程间通信,如BlockingQueue;
  • 5、优先使用并发集合,而不是对集合进行同步。并发集合提供更好的可扩展性。

13、DateTimeFormatter的使用?

SimpleDateFormat 是线程不安全的,DateTimeFormatter是线程安全的。
常用方法:

  • 1、ofPattern(“yyyy-MM-dd”):静态方法,返回一个DateTimeFormatter对象;
  • 2、format(LocalDateTime.now()) :格式化一个日期、时间,返回字符串;
  • 3、parse(“2021-07-21 07:17:34”) :将指定格式的字符序列解析为一个日期、时间。

14、抽象类与接口之间有什么不同?

Java 中,抽象类和接口有很多不同之处,但是最重要的一个是 Java 中限制一个类只能继承一个类,但是可以实现多个接口。

15、Java 中,throw 和 throws 有什么区别?

  • throw 用于抛出 java.lang.Throwable 类的一个实例化对象,意思是说你可以通过关键字 throw 抛出一个 Error 或者 一个 Exception,如:
    throw new IllegalArgumentException(“size must be multiple of 2″)
  • throws 的作用是方法被抛出相应的异常以便调用者能处理。Java 中,任何未处理的受检查异常强制在throws 子句中声明。

16、Java 中,Serializable 与 Externalizable 的区别?

  • Serializable 接口是一个序列化Java 类的接口,以便于它们可以在网络上传输或者可以将它们的状态保存在磁盘上,是 JVM 内嵌的默认序列化方式,成本高、脆弱而且不安全。
  • Externalizable 允许你控制整个序列化过程,指定特定的二进制格式,增加安全机制。

17、Java常用数据结构有哪些?

Java数据结构有:1、数组;2、哈希表;3、链表;4、队列; 5、堆; 6、栈,按照“后进先出”、“先进后出”的原则来存储数据; 7、图;8、树

18、GC 是什么?为什么要有 GC?

GC 是垃圾回收的意思,因为内存处理是编程人员容易出现问题的地方,忘记或者错误的内存回收会导致系统的不稳定甚至崩溃。因此,Java提供了GC功能。
GC有效的防止了内存泄漏。
一般是把Java堆分为年轻代和老年代。

  • 年轻代:年轻代用来存放最近创建的对象,生命周期很短
  • 老年代:老年代中存放的都是存活了很久的对象
    垃圾回收算法分为三种:
  • 标记-清除算法:标记无用对象,然后对其进行清除回收。
  • 复制算法:将内存区域划分为大小相等的两部分,每次只使用一部分,当该部分用完后将其存活的对象复至另一部分,并把该部分内存全部清除。
  • 标记-整理算法:标记无用对象,让所有存活的对象都向内存一端移动,然后清除掉存活对象边界外的内存区域。

19、全局变量和局部变量的区别?

  • 1,作用域不同:全局变量的作用域为整个程序,而局部变量的作用域为当前函数或循环等;
  • 2,内存存储方式不同:全局变量存储在方法区中,局部变量存储在虚拟机栈中;
  • 3,生命期不同:全局变量的生命期和主程序一样,随程序的销毁而销毁,局部变量在函数内部或循环内部,随函数的退出或循环退出就不存在了;
  • 4,使用方式不同:全局变量在声明后程序的各个部分都可以用到,但是局部变量只能在局部使用,函数内部会优先使用局部变量再使用全局变量。

20、获得一个Servlet的生命周期?

在我的理解Servlet的生命周期可以分为实例化、初始化、处理请求、销毁四个阶段。
Tomcat容器调用servlet的构造方法去执行实例化操作;

  • 1.容器调用servlet的init方法去执行初始化操作;
  • 2.初始化完成后调用service()方法,service方法根据请求方式调用doGet或者doPost方法,处理完后响应结果给客户端;
    当服务器关闭时,Servlet调用destroy()方法进行销毁。

总结

都已经看到这里啦,赶紧收藏起来,祝您工作顺心,生活愉快!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/704342.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

css控制元素像素计算方式

box-sizing: border-box; 是一个CSS属性&#xff0c;用于更改元素盒模型的计算方式。 在CSS中&#xff0c;每个元素都被视为一个盒子&#xff0c;这个盒子由内容、内边距&#xff08;padding&#xff09;、边框&#xff08;border&#xff09;和外边距&#xff08;margin&…

FFmpeg的HEVC解码器源代码学习笔记-2

摘要 这篇主要厘清FFmpeg如何调用多种视频编解码代码进行解码的主要函数调用逻辑 背景 FFmpeg作为一个视频编解码开源框架&#xff0c;被企业和个人广泛使用&#xff0c;但是一直不清楚他是怎么调用多种编解码器的&#xff0c;由于现在想做一个HEVC的码流分析器&#xff0c;…

利用HubSpot出海营销CRM扩大企业在东南亚市场的影响力

东南亚市场作为全球最具活力和潜力的市场之一&#xff0c;吸引着越来越多的企业前来拓展业务。在这个竞争激烈的市场中&#xff0c;如何高效地管理营销和客户关系成为了企业成功的关键。今天运营坛将介绍如何利用HubSpot这一出海营销CRM工具&#xff0c;实现在东南亚市场的影响…

本地部署ChatGPT

发布一下我之前做的一个本地大模型部署,不需要API key,但要有自己的账号 利用Docker 的Pandora做本地ChatGPT模型部署 先下载安装Docker,设置好运行如下 会要求升级核心,cmd运行如下命令就OK 安装Pandora 再管理员cmd中输入如下命令拉取Pandora镜像 docker pull pengzhi…

js之事件代理/事件委托

事件代理也叫事件委托&#xff0c;原理&#xff1a;利用DOM元素的事件冒泡&#xff0c;指定一个事件的处理程序就可以管理某一类型的所有事件。 事件冒泡和事件捕获 如上图所示&#xff0c;事件传播分成三个阶段&#xff1a; 捕获阶段&#xff1a;从window对象传导到目标节点&…

Nginx的重定向,nginx.conf中location的匹配,rewrite介绍,Nginx发内置变量

目录 一、Nginx的内置变量 二、Nginx中的配置选项和指令 三、Nginx常见的正则表达式 四、location匹配 4.1、location分类 4.2、location常用的匹配规则 4.3、location优先级 4.4、实际网站中使用的匹配规则 五、rewrite介绍 5.1、rewrite作用 5.2、rewrite跳转实现 5.…

【MySQL面试复习】详细说下事务的特性

系列文章目录 在MySQL中&#xff0c;如何定位慢查询&#xff1f; 发现了某个SQL语句执行很慢&#xff0c;如何进行分析&#xff1f; 了解过索引吗&#xff1f;(索引的底层原理)/B 树和B树的区别是什么&#xff1f; 什么是聚簇索引&#xff08;聚集索引&#xff09;和非聚簇索引…

猫毛过敏却想养猫时?如何缓解猫毛过敏?宠物空气净化器推荐

作为一个新养猫的主人&#xff0c;一开始并没有发现对猫咪过敏。直到养了半年才意识到这个问题&#xff0c;而此时我已经和猫咪有了深厚的感情。我不想放弃我的猫咪&#xff0c;但是留着它的话&#xff0c;我经常会因为流眼泪、打喷嚏、眼睛发红等过敏症状而影响日常生活&#…

Unity编辑器扩展之Text组件中字体替换工具

想要批量化替换项目预制体资源中Text组件引用的Font字体文件&#xff0c;可以采用以下步骤。 1、在项目的Editor文件中&#xff0c;新建一个名为FontToolEditor的C#脚本文件&#xff0c;然后把以下代码复制粘贴到新建的FontToolEditor的C#脚本文件中。 using System.Collect…

【深度学习笔记】3_14 正向传播、反向传播和计算图

3.14 正向传播、反向传播和计算图 前面几节里我们使用了小批量随机梯度下降的优化算法来训练模型。在实现中&#xff0c;我们只提供了模型的正向传播&#xff08;forward propagation&#xff09;的计算&#xff0c;即对输入计算模型输出&#xff0c;然后通过autograd模块来调…

哪只基金更值得买入?学会这套BI基金分析逻辑,稳赚不赔

投资基金是一种出色的理财方式&#xff0c;对于初次涉足基金领域的投资者而言&#xff0c;首先需要解决两个关键问题&#xff1a;一是基金是否值得投资&#xff1f;二是如何选择适合自己的基金&#xff1f; 以往盲目跟随成功的基金经理&#xff0c;或者仅仅依赖历史涨跌经验的…

消息中间件之RocketMQ源码分析(十七)

Broker CommitLog索引机制的数据结构 ConsumerQueue消费队列 主要用于消费拉取消息、更新消费位点等所用的索引。源代码参考org.apache.rocketmq.store.ConsumerQueue.该文件内保存了消息的物理位点、消息体大小、消息Tag的Hash值 物理位点:消息在CommitLog中的位点值消息体…

Android 水波纹扩散效果实现

人生只是一种体验&#xff0c;不必用来演绎完美。 效果图 View源码 package com.android.circlescalebar.view;import android.animation.Animator; import android.animation.AnimatorListenerAdapter; import android.animation.ObjectAnimator; import android.animation.…

算法训练营day36(补),动态规划4

背包最大重量为4。 物品为&#xff1a; 重量价值物品0115物品1320物品2430 问背包能背的物品最大价值是多少&#xff1f; func max(a, b int) int { if a > b { return a } return b } //二维数组解法 func package01(weight, value []int, bagweight int) int { // w…

代码随想录三刷day10

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、力扣1. 两数之和二、力扣454. 四数相加 II三、力扣383. 赎金信 前言 使用map的空间消耗要比数组大一些的&#xff0c;因为map要维护红黑树或者哈希表&…

el-tab-pane标签页如何加图标

效果如下 主要修改 <el-tab-pane name"tab6" v-if"subOrderType 10 && urlname ! wgSalesTerminationOrder"><span slot"label"> 售后判责<span class"el-icon-warning" style"color:#F66B6C;"&…

TensorFlow训练大模型做AI绘图,需要多少的GPU算力支撑

TensorFlow训练大模型做AI绘图&#xff0c;需要多少的GPU算力支撑&#xff01;这个问题就涉及到了资金投资的额度了。众所周知&#xff0c;现在京东里面一个英伟达的显卡&#xff0c;按照RTX3090(24G显存-涡轮风扇&#xff09;版本报价是7000-7500之间。如果你买一张这样的单卡…

unity-unity2d基础操作笔记(一)0.5.0

unity2d基础操作笔记 一、如何查看当前系统的输入设置二、如何获取水平或者垂直的输入的代码三、如何获取当前人物的x和y的值三、如何简单写出控制人物水平移动的代码四、如何设定游戏的帧率五、如何控制渲染顺序六、如何调整摄像机摄像范围大小七、如何对Hierachy中的图进行分…

【MySQL面试复习】谈一谈你对SQL的优化经验

系列文章目录 在MySQL中&#xff0c;如何定位慢查询&#xff1f; 发现了某个SQL语句执行很慢&#xff0c;如何进行分析&#xff1f; 了解过索引吗&#xff1f;(索引的底层原理)/B 树和B树的区别是什么&#xff1f; 什么是聚簇索引&#xff08;聚集索引&#xff09;和非聚簇索引…

原型设计工具Axure RP

Axure RP是一款专业的快速原型设计工具。Axure&#xff08;发音&#xff1a;Ack-sure&#xff09;&#xff0c;代表美国Axure公司&#xff1b;RP则是Rapid Prototyping&#xff08;快速原型&#xff09;的缩写。 下载链接&#xff1a;https://www.axure.com/ 下载 可以免费试用…