Java学习-Java基础

1.重写与重载的区别

  • 重写发生在父子类之间,重载发生在同类之间
  • 构造方法不能重写,只能重载
  • 重写的方法返回值,参数列表,方法名必须相同
  • 重载的方法名相同,参数列表必须不同
  • 重写的方法的访问权限不能比父类方法的访问权限更低

2.接口和抽象类的区别

  • 接口是interface,抽象类是abstract
  • 接口的权限修饰符必须是public,抽象类可以是public default protected
  • 接口是被实现的,可以进行多继承,抽象类是用来被继承的,只能是单继承
  • 接口里面可以不有构造方法,抽象类里面可以有构造方法

3.权限修饰符

  • public:全局都可以使用
  • default:不同包的子类可以使用
  • protected:同一个包内可以使用
  • private:同一个类内可以使用

4.深拷贝与浅拷贝

  • 浅拷贝:拷贝对象的引用,新对象的引用类型属性与原始对象共享同一个对象。
  • 深拷贝:拷贝所有引用类型的属性,使原始对象和拷贝对象完全独立。
  • 在 Java 中,默认的 clone() 方法是浅拷贝,需要手动实现深拷贝。

5.强软弱虚

  • 强引用定义:Object obj=new Object();,这里obj就是对Object对象的强引用。不会被垃圾回收,内存不足,JVM 抛出OOM。
  • 软引用定义:通过SoftReference类来实现。当内存不足时,垃圾回收器会回收这些对象。应用场景:常用于实现内存敏感的缓存。
  • 弱引用定义:使用WeakReference类来创建。垃圾回收规则:无论当前内存是否充足,弱引用关联的对象都会被回收。应用场景:常用于解决内存泄漏问题,例如在ThreadLocal中使用弱引用存储键,当外部强引用消失时,ThreadLocal中的弱引用对象能被及时回收。
  • 虚引用定义:通过PhantomReference类实现,且必须和引用队列(ReferenceQueue)联合使用垃圾回收规则:在任何时候都可能被垃圾回收器回收。应用场景:主要用于在对象被垃圾回收时进行一些额外的清理操作,例如管理直接内存(DirectMemory),在对象被回收时释放其占用的直接内存。

6.super和this的区别

  • super是指代调用父类的构造方法,方法,成员变量等
  • this是指代类本身,可以调用本类的构造方法,方法,变量
  • 使用super调用构造方法的时候,必须放在第一行,保证父类先进行加载
  • 使用this调用本类其他构造方法时候也必须放在第一行,避免部分加载的情况

7.sleep和wait区别

  • sleep属于Thread类中的方法
  • sleep释放cpu给其它线程不释放锁资源 sleep(1000) 等待超过1s被唤醒
  • wait属于Object类中的方法释放cpu给其它线程,同时释放锁资源
  • wait(1000) 等待超过1s被唤醒wait() 一直等待需要通过notify或者notifyAll进行唤醒wait 方法
  • wait必须配合 synchronized 一起使用,不然在运行时就会抛出IllegalMonitorStateException异常

8.自动拆装箱 int和Integer区别

  • 装箱:将基本类型转换成包装类对象
  • 拆箱:将包装类对象转换成基本类型的值

为什么引入自动装拆箱功能?

主要是用于java集合中,List list=new ArrayList();list集合如果要放整数的话,只能放对象,不能放基本类型,因此需要将整数自动装箱成对象。

Integer-128和+127的问题

Integer对-128到127之间的数字进行缓存,如果在这个范围比较直接取出缓存对象进行比较,如果超出了范围就新建对象,所以说==在范围内有效,超出范围就要用equals

==和equals区别

  • ==比较的是两个基本数据类型的值或者引用数据类型的地址
  • equals没重写之前比较的是两个对象的地址,重写一般比较对象属性的值

String能被继承吗

  • 不能被继承,因为String类有final修饰符,而final修饰的类是不能被继承的。
  • 为了安全。String 类中有native关键字修饰的调用本地方法,如果方法可以重写,可能被植入恶意代码,破坏程序。Java 的安全性也体现在这里。

String a = “abc” String a = new String(“abc”),在内存中的区别

  • String a = “123"会先检查常量池中是否有"abc”,有的话直接让a指向这个字符串,没有的话就创建放入常量池
  • String a = new String(“abc”)是在堆内存中创建String对象

常量池的作用以及工作原理

  • 缓存字符串对象,避免字符串重复创建,节省空间
  • 当创建字符串时候,JVM先检查常量池,存在就复用,不存在就创建并放入
  • 对于new的字符串对象,也可以通过intern方法放入常量池

String buffer和String builder区别

  • StringBuffer 中的方法大都采用了 synchronized 关键字进行修饰,因此是线程安全的,效率低。
  • StringBuilder 没有这个修饰,可以被认为是线程不安全的。效率高

为什么有了String还要StringBuilder

  • String是不可变的,每次对String进行修改都会创建新的对象,消耗资源
  • StringBuilder是可变的,能在原有对象上修改内容,节省时间

final、finally、finalize

  • final:修饰符(关键字)有三种用法:修饰类、变量和方法。修饰类时,意味着它不能再派生出新的子类,即不能被继承,修饰变量时,该变量使用中不被改变,即为常量。修饰方法时,不能在子类中被重写。
  • finally:通常放在try…catch的后面构造终执行代码块,这就意味着程序无论正常执行还是发生异常,这里的代码都能执行
  • finalize:Object类中定义的方法,这个方法是由垃圾收集器在销毁对象时调用的

Object中有哪些方法(说出5个即可)

  • protected Object clone()—>创建并返回此对象的一个副本。
  • boolean equals(Object obj)—>指示某个其他对象是否与此对象“相等
  • protected void finalize()—>当垃圾回收器确定不存在对该对象的更多引用时,由对象的垃圾回收器调用此方法。
  • Class<? extendsObject> getClass()—>返回一个对象的运行时类。
  • int hashCode()—>返回该对象的哈希码值。
  • void notify()—>唤醒在此对象监视器上等待的单个线程。
  • void notifyAll()—>唤醒在此对象监视器上等待的所有线程。
  • String toString()—>返回该对象的字符串表示。

线程的状态生命周期

  • 新建状态(New) :线程对象被创建后,就进入了新建状态。Thread thread = new Thread()。
  • 就绪状态(Runnable): 调用了该对象的start()方法,从而来启动该线程。随时准备被CPU调度执行。
  • 运行状态(Running):线程获取CPU权限进行执行。
  • 阻塞状态(Blocked):等待阻塞 – 通过调用线程的wait()方法,让线程等待某工作的完成。同步阻塞 – 线程在获取synchronized同步锁失败(因为锁被其它线程所占用),它会进入同步阻塞状态。其他阻塞 – 通过调用线程的sleep()或join()或发出了I/O请求时,线程会进入到阻塞状态。当sleep()状态超时、join()等待线程终止或者超时、或者I/O处理完毕时,线程重新转入就绪状态。
  • 死亡状态(Dead):线程执行完了或者因异常退出了run()方法,该线程结束生命周期。

IO流分为哪两种

  • 字节流和字符流字节流里面有inputstream和outputstream,字符流里面有reader和writer

BIO NIO AIO区别

  • BIO:阻塞式IO,传统的同步阻塞 I/O 模型,每个连接都需要一个独立的线程进行处理。
  • NIO:非阻塞IO,采用多路复用(Selector 机制),一个线程可以处理多个连接,不需要为每个连接创建独立线程。采用 Buffer 进行数据读写,Channel 负责数据传输
  • AIO:异步非阻塞IO,采用异步回调(基于事件驱动),I/O 操作完成后会自动触发回调方法,无需等待。适用于高并发、高吞吐的场景,如高性能 Web 服务器。

反射是什么

在Java运行时环境中,对于任意一个类,可以知道这个类有哪些属性和方法。对于任意一个对象,可以调用它的任意一个方法。

Class.forName()和ClassLoader.loadClass()有什么区别?

  • Class.forName()默认会触发类的静态代码块(static{}执行)。适用于 JDBC 驱动加载(注册数据库驱动时)。
    仅加载类,不执行静态代码块。
  • ClassLoader.loadClass(“com.example.MyClass”)适用于框架动态加载类(如插件机制)

GET和POST的区别

  • 参数 :GET:用于获取数据请求参数会显示在 URL 上。POST:用于提交数据数据放在请求体中传输。
  • 安全性 :GET:参数暴露在 URL 中,不安全。POST:参数在请求体中,相对安全。
  • 数据长度 :GET:URL 长度有限制,传输的数据量较小。不同浏览器和服务器对 URL 长度限制不同,一般不超过 2KB。POST:理论上无数据长度限制,可传输大量数据。
  • 缓存 :GET:请求会被浏览器主动缓存,下次相同请求可能直接从缓存获取数据。POST:默认不会被缓存。

Cookie 和Session的区别

  • Cookie 是 web 服务器发送给浏览器的一块信息,浏览器会在本地一个文件中给每个 web 服务器存储 cookie。以后浏览器再给特定的 web 服务器发送请求时,同时会发送所有为该服务器存储的cookie
  • Session 是存储在 web 服务器端的一块信息。session 对象存储特定用户会话所需的属性及配置信息。当用户在应用程序的
  • Web 页面之间跳转时,存储在 Session 对象中的变量将不会丢失,而是在整个用户会话中一直存在下去

Http和Https的区别

  • 端口: http默认是80,https默认是443
  • 安全性: http传输不加密不安全,https传输进行加密,相对安全
  • 证书: http没有证书,https有权威机构发布的证书

Http1.0和Http1.1区别

  • http1.0使用的是短连接,每个请求-响应都会新建一个 TCP 连接,请求结束后立即断开(无连接)
  • http1.1使用的是长连接,支持持久连接,可复用 TCP 连接,减少建立连接的开销
  • http1.0:仅支持 GET、POST、HEAD
  • http1.1支持PUT、DELETE、OPTIONS、TRACE等请求

TCP和UDP有什么区别

  • TCP面向连接的,UDP不是
  • TCP保证可靠,UDP不保证(收到消息不确认)
  • TCP传输字节流,UDP传输报文
  • TCP传输准确性比较高的东西(文件,邮件),UDP适用一些比如视频,语音,直播

TCP三次握手,四次挥手

  • 第一次握手:客户端发送SYN给服务端,告诉服务端,请求连接,客户端进入等待回复状态
  • 第二次握手:服务端收到了请求,返回给客户端SYN+ACK包,说明可以进行连接,服务端进入等待
  • 第三次握手:客户端收到了服务端返回来的可以连接信息,重新给服务端发送ACK,建立连接
  • 第一次挥手:客户端发送报文告诉服务端需要断开连接,进入等待回复
  • 第二次挥手:服务端接收到断开连接请求,发送给客户端收到了请求并告诉等一会,然后处理服务端自己的事情第三次挥手:服务端处理完事情,再次发送报文给客户端,告诉可以断开连接了
  • 第四次挥手:客户端发送报文说可以断开了,服务端断开,客户端等一会也断开

浏览器输URL到页面展示过程

  • 浏览器输入URL浏览器经过DNS解析出URL转换成IP地址
  • 浏览器得到IP地址后,通过一个随机端口向服务端发起TCP连接(握手)
  • 浏览器发送get请求,服务器接受到请求返回http响应报文浏览器收到报文后,渲染html

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

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

相关文章

BG开发者日志0427:故事的起点

1、4月26日晚上&#xff0c;BG项目的gameplay部分开发完毕&#xff0c;后续是细节以及试玩版优化。 开发重心转移到story部分&#xff0c;目前刚开始&#xff0c; 确切地说以前是长期搁置状态&#xff0c;因为过去的四个月中gameplay部分优先开发。 --- 2、BG这个项目的起点…

头歌实训之游标触发器

&#x1f31f; 各位看官好&#xff0c;我是maomi_9526&#xff01; &#x1f30d; 种一棵树最好是十年前&#xff0c;其次是现在&#xff01; &#x1f680; 今天来学习C语言的相关知识。 &#x1f44d; 如果觉得这篇文章有帮助&#xff0c;欢迎您一键三连&#xff0c;分享给更…

【深度学习】多头注意力机制的实现|pytorch

博主简介&#xff1a;努力学习的22级计算机科学与技术本科生一枚&#x1f338;博主主页&#xff1a; Yaoyao2024往期回顾&#xff1a;【深度学习】注意力机制| 基于“上下文”进行编码,用更聪明的矩阵乘法替代笨重的全连接每日一言&#x1f33c;: 路漫漫其修远兮&#xff0c;吾…

java16

1.API续集 可以导入别人写好的clone的jar包 注意&#xff1a;方法要有调用者&#xff0c;如果调用者是null就会报错 2.如何导入别人写好的jar包 复制jar包然后粘贴在lib里面&#xff0c;然后右键点击jar包再点击下面的add 3.关于打印java中的引用数据类型

PostgreSQL的扩展 credcheck

PostgreSQL的扩展 credcheck credcheck 是 PostgreSQL 的一个安全扩展&#xff0c;专门用于强制实施密码策略和凭证检查&#xff0c;特别适合需要符合安全合规要求的数据库环境。 一、扩展概述 1. 主要功能 强制密码复杂度要求防止使用常见弱密码密码过期策略实施密码重复使…

MyBatis中的@Param注解-如何传入多个不同类型的参数

mybatis中参数识别规则 默认情况下,MyBatis 会按照参数位置自动分配名称:param1, param2, param3, ...或者 arg0, arg1。 // Mapper 接口方法 User getUserByIdAndName(Integer id, String name); 以上接口在XML中只能通过param1或者arg0这样的方式来引用,可读性差。 &l…

DIFY教程第一集:安装Dify配置环境

一、Dify的介绍 https://dify.ai/ Dify 是一款创新的智能生活助手应用&#xff0c;旨在为您提供便捷、高效的服务。通过人工智能技术&#xff0c; Dify 可以实现语音 助手、智能家居控制、日程管理等功能&#xff0c;助您轻松应对生活琐事&#xff0c;享受智慧生活。简约的…

5、Rag基础:RAG 专题

RAG 简介 什么是检索增强生成? 检索增强生成(RAG)是指对大型语言模型输出进行优化,使其能够在生成响应之前引用训练数据来源之外的权威知识库。大型语言模型(LLM)用海量数据进行训练,使用数十亿个参数为回答问题、翻译语言和完成句子等任务生成原始输出。在 LLM 本就强…

GAMES202-高质量实时渲染(homework1)

目录 Homework1shadow MapPCF(Percentage Closer Filter)PCSS(Percentage Closer Soft Shadow) GitHub主页&#xff1a;https://github.com/sdpyy1 作业实现:https://github.com/sdpyy1/CppLearn/tree/main/games202 Homework1 shadow Map 首先需要完成MVP矩阵的构造&#xf…

JDK(Ubuntu 18.04.6 LTS)安装笔记

一、前言 本文与【MySQL 8&#xff08;Ubuntu 18.04.6 LTS&#xff09;安装笔记】同批次&#xff1a;先搭建数据库&#xff0c;再安装JDK&#xff0c;后面肯定就是部署Web应用&#xff1a;典型的单机部署。“麻雀虽小五脏俱全”&#xff0c;善始善终&#xff0c;还是记下来吧。…

软件测试之接口测试常见面试题

一、什么是(软件)接口测试? 接口测试&#xff1a;是测试系统组件间接口的一种测试方法 接口测试的重点&#xff1a;检查数据的交换&#xff0c;数据传递的正确性&#xff0c;以及接口间的逻辑依赖关系 接口测试的意义&#xff1a;在较早期开展&#xff0c;在软件开发的同时…

Lua 第11部分 小插曲:出现频率最高的单词

在本章中&#xff0c;我们要开发一个读取并输出一段文本中出现频率最高的单词的程序。像之前的小插曲一样&#xff0c;本章的程序也十分简单但是也使用了诸如迭代器和匿名函数这样的高级特性。 该程序的主要数据结构是一个记录文本中出现的每一个单词及其出现次数之间关系的表。…

软件项目进度管理活动详解

目录 1. 活动定义&#xff08;Activity Definition&#xff09; 2. 活动排序&#xff08;Activity Sequencing&#xff09; 3. 活动资源估算&#xff08;Activity Resource Estimating&#xff09; 4. 活动历时估算&#xff08;Activity Duration Estimating&#xff09; …

docker 国内源和常用命令

Ubuntu | Docker Docs 参考docker官方安装docker # Add Dockers official GPG key: sudo apt-get update sudo apt-get install ca-certificates curl sudo install -m 0755 -d /etc/apt/keyrings sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt…

身份与访问管理(IAM):零信任架构下的认证授权技术与实战

身份与访问管理&#xff08;IAM&#xff09;&#xff1a;零信任架构下的认证授权技术与实战 在网络安全防御体系中&#xff0c;身份与访问管理&#xff08;Identity and Access Management, IAM&#xff09;是守护数字资产的“数字门禁系统”。随着远程办公和多云架构的普及&a…

Maven进阶知识

一、Maven 坐标 &#xff08;一&#xff09;概念 在 Maven 中坐标是构件的唯一标识&#xff0c;其元素包括 groupId、artifactId、version、packaging、classifier。其中 groupId、artifactId、version 是必定义项&#xff0c;packaging 默认为 jar。 &#xff08;二&#x…

网络原理 ——TCP 协议

TCP 报文结构 TCP 头部 20字节&#xff08;无选项&#xff09;&#xff0c;关键字段&#xff1a; 字段长度&#xff08;bit&#xff09;说明源端口16发送方端口目的端口16接收方端口序列号&#xff08;seq&#xff09;32数据字节的编号确认号&#xff08;ack&#xff09;32期…

C#使用sftp远程拷贝文件

需要下载 的包&#xff1a;Core.Renci.SshNet 下载依赖包的时候需要注意版本&#xff0c;高版本的.net环境不支持会用不了&#xff0c;我用的.net5,所以下载的2021.10.2 功能的核心式创建一个SftpClient&#xff0c;并传入所需要的参数&#xff1a;远程IP地址&#xff0c;端口…

文本预处理(NLTK)

1. 自然语言处理基础概念 1.1 什么是自然语言处理 自然语言处理( Natural Language Processing, NLP)是计算机科学领域与人工智能领域中的一个重要方向。它研究能实现人与计算机之间用自然语言进行有效通信的各种理论和方法。自然语言处理是一门融语言学、计算机科学、数学于…

socket编程基础

上一篇 --- 网络基础概念&#xff08;下&#xff09;https://blog.csdn.net/Small_entreprene/article/details/147320155?fromshareblogdetail&sharetypeblogdetail&sharerId147320155&sharereferPC&sharesourceSmall_entreprene&sharefromfrom_link 理…