Java知识及热点面试题总结(一)

server/2024/11/28 12:09:57/

今天开始对Java进行总复习,主要针对热点面试题,我们再根据试题内容延申相关知识

1.、Java中equals与“==”的区别详解

讲二者区别之前,先大概讲解一下基本数据类型和引用类型的概念,当然,有一定基础的朋友可直接略过!

基本数据类型和引用类型

八大基本数据类型

Byte,short,int,long,double,folat,boolean,char

其中byte占一个字节,short和char占两个字节,int,float占四个字节,double和long占8个字节,boolean只有true和false,这八种数据变量中直接存储值


注意:八大基本数据类型对应着各自的封装类型的包装类,提供了更多的方法,且不进行初始化时值默认为空(基本数据类型必须初始化),并且属于引用类型

引用类型:

引用类型主要是一些类、接口、数组

引用类型变量中存储的是地址,对应的地址存储数据

首先看一组代码

java">           Integer aaa=new Integer(5);  //引用类型Integer bbb=new Integer(5);int a=10;            //基本类型int b=10;String str1=new String("justice");    //引用类型String str2=new String("justice");String str3;str3=str1;System.out.println(aaa==bbb);            falseSystem.out.println(aaa.equals(bbb));     trueSystem.out.println(a==b);                trueSystem.out.println(str1==str2);          falseSystem.out.println(str1.equals(str2));   trueSystem.out.println(str1==str3);          trueSystem.out.println(str1.equals(str3));   true

aaa和bbb都是Integer封装类型,是不同的对象,变量存储地址, 所以==结果为false,equals为true

a和b都是基本数据类型,变量存储值,所以==为true,基本数据类型无equals方法

str1和str2都是String类型,属于引用类型,变量存储地址,所以==为false,equals为true

创建str3的时候,str3指向了str1,所以str1和str3的指向同一个地址,存储的数据自然相同,所以均为true

延申:涉及内存中的常量池问题例子

java">    String s1 = "abc";String s2 = "abc";System.out.println(s1.equals(s2));System.out.println(s1 == s2);答案是:true true

为什么第二个会是true呢?这就涉及到了内存中的常量池常量池属于方法区的一部分,当运行到s1创建对象时,如果常量池中没有,就在常量池中创建一个对象"abc",第二次创建的时候,就直接使用,所以两次创建的对象其实是同一个对象,它们的地址值相等。

java">String str1="abc";
String str2="abc";
String str3="abc";
String str4=new String("abc");
String str5=new String("abc");
String str6=new String("abc");

常量池详细内容可看Java字符串常量池_java字符串常量在哪里获取-CSDN博客

二者区别

"=="比较基本数据类型时比较的是表面值内容,而比较两个对象时比较的是两个对象的内存地址值

对于equals方法,注意:equals方法不能作用于基本数据类型的变量

如果没有对equals方法进行重写,则比较的是引用类型的变量所指向的对象的地址;

诸如String、Date等类对equals方法进行了重写的话,比较的是所指向的对象的内容

总结

" == "在基本数据类型:值内容,

            引用类型时:地址
equals 重写:值内容 

           不重写:地址


2、接口和抽象类的区别

Java 提供和支持创建抽象类和接口。它们的实现有共同点,不同点在于:
接口中所有的方法隐含的都是抽象的。而抽象类则可以同时包含抽象和非抽象的方法
类可以实现很多个接口,但是只能继承一个抽象类
类可以不实现抽象类和接口声明的所有方法,当然,在这种情况下,类也必须得声明成是抽象的。
抽象类可以在不提供接口方法实现的情况下实现接口。
Java 接口中声明的变量默认都是 final 抽象类可以包含非 final 的变量。
Java 接口中的成员函数默认是 public 抽象类的成员函数可以是 private protected 或者是 public
接口是绝对抽象的,不可以被实例化。抽象类也不可以被实例化,如果它包含 main 方法的话是可以被 调用的。

3、cookie session 的区别?

1cookie数据存放在客户的浏览器session数据放在服务器上。

2 cookie 不是很安全,别人可以分析存放在本地的 COOKIE 并进行 COOKIE 欺骗,考虑到安全应当使用 session。
3 session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能, 考虑到减轻服务器性能方面,应当使用COOKIE
4 单个 cookie 保存的数据不能超过 4K ,很多浏览器都限制一个站点最多保存 20 cookie

4、getpost请求,它们之间的区别? 

get 请求用来从服务器上获得资源, post 是用来向服务器提交数据;
get 将表单中数据按照 name=value 的形式,添加到 action 所指向的 URL 后面,并且两者使用 "?" 连 接,而各个变量之间使用"&" 连接 post 是将表单中的数据放在 HTTP 协议的请求头或消息体中,传递到 action所指向 URL
get 传输的数据要受到 URL 长度限制( 1024 字节); post 可以传输大量的数据,上传文件通常要使用 post 方式;
使用 get 时参数会显示在地址栏上,如果这些数据不是敏感数据可以使用 get 对于敏感数据还是应用使用post

5、请说明ArrayListLinkedList的区别?

ArrayListLinkedList都实现了List 接口,他们有以下的不同点:
ArrayList 是基于索引的数据接口,它的底层是数组。它可以以 O(1) 时间复杂度对元素进行随机访问。与 此对应,LinkedList 是以元素列表的形式存储它的数据,每一个元素都和它的前一个和后一个元素链接 在一起,在这种情况下,查找某个元素的时间复杂度是 O(n)
相对于 ArrayList LinkedList的插入,添加,删除操作速度更快,因为当元素被添加到集合任意位置的 时候,不需要像数组那样重新计算大小或者是更新索引。
LinkedList ArrayList 更占内存因为 LinkedList 为每一个节点存储了两个引用,一个指向前一个元 素,一个指向下一个元素。

6、数组(Array)和列表(ArrayList)的区别?什么时候应该使用Array而不是ArrayList

Array 可以包含基本类型和对象类型 ArrayList只能包含对象类型。
Array 大小是固定的 ArrayList 的大小是动态变化的。
ArrayList 提供了更多的方法和特性,比如: addAll() removeAll() iterator() 等等。
对于基本类型数据,集合使用自动装箱来减少编码工作量。但是,当处理固定大小的基本数据类型的时候,这种方式相对比较慢。

http://www.ppmy.cn/server/145620.html

相关文章

Nvidia的hami是什么,以及如何再K8S中起作用

一、什么是hami NVIDIA的HAMI是一款基于人工智能的系统优化工具,主要用于帮助开发者高效地管理和优化GPU资源,提升机器学习和深度学习训练的性能。它是NVIDIA推出的一系列软件工具和平台的一部分,旨在简化AI应用的开发、部署和调优过程。 具…

搜索引擎中广泛使用的文档排序算法——BM25(Best Matching 25)

在搜索场景中,BM25能计算每个文档与查询的匹配度,从中找出最相关的文档,并按相关性高低排序展示。 要理解BM25,需要掌握以下几个关键概念: 1. 词频(Term Frequency, TF):某关键词在文…

【NOIP普及组】表达式求值

【NOIP普及组】表达式求值 C语言代码C 代码Java代码Python代码 💐The Begin💐点点关注,收藏不迷路💐 给定一个只包含加法和乘法的算术表达式,请你编程计算表达式的值。 输入 输入仅有一行,为需要你计算的…

使用 TinyGo 和 Gopherbot 进行硬件hacking

本篇内容是根据2019年4月份#84 Hardware hacking with TinyGo and Gopherbot音频录制内容的整理与翻译 Mat Ryer 与特邀嘉宾 Ron Evans 共同主持了第一期一对一采访式节目。 Mat 请 Ron 教我们有关 IoT 中的 Go、Gophercon、 TinyGo和Gopherbot的硬件黑客技术。 过程中为符合…

心情追忆:构建支付模块的五个基本接口设计

之前,我独自一人开发了一个名为“心情追忆”的小程序,旨在帮助用户记录日常的心情变化及重要时刻。我从项目的构思、设计、前端(小程序)开发、后端搭建到最终部署。经过一个月的努力,通过群聊分享等方式,用…

《并查集算法详解及实用模板》

《重生我要成为并查集高手🍔🍔🍔》 并查集:快速查询和快速合并, 路径压缩, 按大小,高度,秩合并。 静态数组实现 😇前言 在数据的海洋中,有一种悄然流淌的力量…

Python 将彩色视频转换为黑白视频(MP4-格式可选)

以下是使用 Python 将彩色视频转换为黑白电视风格的示例代码,主要借助了opencv-python库来实现: python import cv2def convert_to_black_and_white_video(input_video_path, output_video_path):# 打开视频文件cap cv2.VideoCapture(input_video_pat…

机器学习模型——线性回归

文章目录 前言1.基础概念2.代价函数3.单变量线性回归3.1加载数据3.2初始化超参数3.3梯度下降算法3.3.1初次梯度下降3.3.2 多次梯度下降3.3.3结果可视化 前言 随着互联网数据不断累积,硬件不断升级迭代,在这个信息爆炸的时代,机器学习已被应用…