java——2024-03-03

  1. String类的对象能被修改吗?如果不能需要用什么修改?StringBuilder和StringBuffer的区别?
  2. equals和==区别
  3. 谈谈对面向对象的理解
  4. 重载和重写的区别
  5. 说一下ArrayList,LinkedList底层实现以及区别
  6. 什么是哈希冲突?
  7. hashMap和conCurrentHashMap的区别
  8. hashcode() 与 equals() 的区别与联系
  9. 快排的思想
  10. 什么是死锁?怎么解决?
  11. MySQL事务的四大特性
  12. varchar和char的区别?里面的参数代表什么?
  13. 讲一下数据库的索引(什么是索引?索引的基本原理 索引类型 索引的优缺点)
  14. 三次握手
  15. 建立连接可以两次握手吗,为什么不可以?
  16. TCP、UDP的区别
  17. 垃圾回收的算法有哪些?
  18. wait()和sleep()的区别
  19. volatile关键字

重载(Overloading)指的是在同一个类中,可以定义多个方法具有相同的名字,但是参数列表不同(参数类型、个数或顺序)。在调用这些方法时,编译器会根据传入的参数来选择最匹配的方法进行调用。通过方法重载,可以实现一组功能类似但参数不同的方法。

重写(Overriding)指的是子类重新定义(覆盖)其父类中具有相同签名的方法。在继承关系中,当子类需要改变父类的方法实现时,可以使用方法重写。子类的访问权限修饰符不能比父类更严格。重写的方法具有相同的方法名、返回类型和参数列表,子类可以通过重写方法来提供特定于子类的实现。

17

http://t.csdnimg.cn/ZJOz5icon-default.png?t=N7T8http://t.csdnimg.cn/ZJOz5

  1. 引用计数:通过跟踪每个对象被引用的次数来确定何时释放内存。当对象的引用计数减为0时,表示没有指针指向该对象,可以安全地释放内存。

  2. 标记-清除(Mark and Sweep):该算法分为两个阶段。首先,通过根对象(如全局变量、栈中的变量等)标记所有可达对象。然后,清除未被标记的对象,并将它们的内存释放。

  3. 复制(Copying):将内存空间划分为两个区域,通常称为"From"和"To"。在使用过程中,对象存储在"From"区域,当触发垃圾回收时,将存活的对象复制到"To"区域中,随后清除"From"区域中的所有对象。

  4. 标记-压缩(Mark and Compact):结合了标记和清除以及对象移动,首先标记所有可达对象,然后将存活对象向一端移动,并清理掉不再使用的内存,从而压缩可用内存空间。

  5. 分代(Generational):基于观察,大多数对象很快就会变得不可达。该算法将对象根据其生命周期分为不同代,新创建的对象放入新生代,经过多次回收后仍然存活的对象会被晋升到老年代。

12.

 char用于存储固定长度的字符串,如果实际存储的字符串长度小于指定的长度会在后面使用空格进行填充。例如,如果你定义一个CHAR(10)的字段,不管你实际存储的字符串是几个字符,都会占用10个字符的存储空间。

varchar用于存储可变长的字符串,不填充空格,制定最大存储长度。实际可小于这个长度。比如:定义一个VARCHAR(10)的字段,存储"Hello"这个5个字符时,只会占用5个字符的存储空间。

1.

String对象不可变,需要修改就使用+,substring,concat拼接,还可以使用 StringBuilderStringBuffer 类来修改字符串的内容。

  1. 线程安全性:

    • StringBuilder:是非线程安全的。在多线程环境下使用 StringBuilder 进行字符串操作时,需要自行处理同步和线程安全的问题。
    • StringBuffer:是线程安全的,所有对它的方法都进行了同步处理,因此可以保证多线程环境下的安全访问。
  2. 性能:

    • 由于 StringBuffer 的所有方法都是同步的,因此它在多线程环境下能够保证线程安全,但会因为同步操作存在一定的性能开销。
    • 相比之下,StringBuilder 不是线程安全的,它没有额外的同步开销,因此在单线程环境下通常比 StringBuffer 更快。

2.

  1. == 运算符:比较的是值,只不过基本类型的数值是值本身,引用对象的值是地址

    • 对于基本数据类型时,比较的是它们的值是否相等。对于引用类型比较的是对象的内存地址,判断两个引用是否指向同一个对象。
    • 比较的是值,只不过基本类型的数值是值本身,引用对象的值是地址
    • ==的坑:即使比较的两个对象一摸一样,他们也不能算是相等的,如果相比较两个对象的属性是否相等,就只能用equals了,
  2. equals() 方法:

    • equals() 方法是 Object 类中定义的方法,子类可以重写该方法来自定义比较规则。如果没重写,那和==是差不多的,
    • 默认情况下,equals() 方法比较的是对象的内存地址,即与 == 运算符的作用相同。
    • 许多 Java 类库中的类(如 StringInteger 等)会重写 equals() 方法,以便按照特定的逻辑进行对象内容的比较。档比较包装类型,会判断两个包装类型是否是同一类型,会涉及自动装箱和拆箱的问题。
    • 为了避免空指针异常,前面一个对象非null,如果两个对象都有可能为null,那就使用Object.equals(a,b)
    • 坑:不能比较基本数据类型。

 10.

死锁是两个或者多个线程去争夺同一共享资源而导致的互相等待过程,在没有外部条件干预则会一直阻塞下去,每个线程都在等待另一个线程去释放锁。死锁有三个典型情况,第一个是

一个线程,一把锁,连续锁两次,如果锁是不可重入性锁,就会死锁;Java里的synchronized和ReentrantLock都是可重入性锁;

两个线程两把锁都在拥有一把锁的情况下去获取对方的锁,比如车钥匙锁在家里,家钥匙锁在车里

多个线程多把锁哲学家问题,圆桌,大家吃饭都拿起左手边筷子,而右手边空空,同时放不下筷子也阻塞等待拿不到另一个筷子。而解决办法就是对筷子进行编号。

死锁有四个必要条件,1。互斥使用当以线程获取到锁,其他线程也想去获取锁就只能进行阻塞等待,2.不可抢占,当线程1获取到锁,其他线程只能等待线程1主动释放锁,3.请求保持,拿到锁1去获取锁2,锁1不会释放,4.循环等待形成环,车钥匙放家里,家钥匙放车里。其中12是锁的基本特性,3可以通过改变代码结构由嵌套改为并列去解决,4进行编号加锁顺序

13

数据库索引是一种用于提高数据库查询性能的数据结构,它类似于书籍的目录,可以加快数据库中数据的检索速度。索引基本上是一种存储在数据库表上的数据结构,它使得数据库系统可以更快地找到和排序数据。

### 索引的基本原理

索引的基本原理是在数据库表的一列或多列上创建一个快速查找的数据结构,以便在执行查询时可以更快地定位到所需的数据行。当创建索引时,数据库系统会为索引的列值建立一个数据结构,这个数据结构可以提供快速的查找、排序和过滤功能。

### 索引类型

1. **单列索引**:针对单个列进行索引。
2. **唯一索引**:索引列的值必须是唯一的,用于保证数据完整性。
3. **复合索引**:针对多个列进行索引,可以提高联合条件查询的性能。
4. **全文索引**:用于全文搜索的索引,比如针对文本内容的搜索。
5. **空间索引**:用于地理空间数据类型的索引,比如地图坐标等。

### 索引的优缺点

#### 优点:
- 加快数据检索速度,特别是对大型数据表的查询。
- 可以通过使用覆盖索引减少对数据表的访问,提高查询性能。
- 在某些情况下,可以加速数据的排序操作。
- 提高数据的完整性,比如唯一索引可以保证数据的唯一性。

#### 缺点:
- 创建和维护索引需要额外的存储空间和计算资源。
- 当对数据表进行插入、更新和删除操作时,索引也需要相应地进行更新,可能会增加写操作的时间。
- 错误使用索引可能导致性能下降,比如在少量数据上使用索引或者不合适的索引类型。
- 索引可能会导致查询优化器选择不合适的查询执行计划,从而影响性能。

总的来说,索引在加快数据库查询速度方面有很大的优势,但在使用时需要权衡其对写操作的影响,以及正确地选择索引类型和索引列。

18.

都是用于进行线程暂停一段时间,

1.wait是object类的方法, sleep() 是 Thread 类的静态方法。

2.作用,wait同步使用与协作。sleep方法通常用于线程的暂停以便控制执行的任务时间间隔或者实现简单的定时任务(进行线程的休眠),;

3.wait() 会释放对象的锁,而 sleep() 不会释放任何锁。

当一个线程调用对象的 wait() 方法时,它会进入阻塞状态,并释放该对象的锁,直到其他线程调用相同对象的 notify() 或 notifyAll() 方法来唤醒它;而 sleep() 方法则会让当前线程休眠指定的时间,但不会释放任何锁。

4.使用场景:wait() 方法必须在循环中使用,通常与synchronized方法进行同步使用与协作,以防止虚假唤醒(即线程被意外唤醒)。而 sleep() 方法不需要在循环中使用,可以在任何地方使用。 

(wait是使用notify唤醒,sleep使用interrupted唤醒)

notify唤醒wait,不会有任何异常;

interrupt唤醒sleep则是出异常了。

其实理论上 wait 和 sleep 完全是没有可比性的,因为一个是用于线程之间的通信的,一个是让线程阻 塞一段时间,
唯一的相同点就是都可以让线程放弃执行一段时间 .
1. wait 需要搭配 synchronized 使用 . sleep 不需要 .
2. wait 是 Object 的方法  ,sleep 是 Thread 的静态方法 .

聚簇索引(Clustered Index)
定义:聚簇索引是一种索引机制,其顺序和表中数据行的物理顺序一致。换句话说,聚簇索引重新组织表的行,使行的物理顺序与索引的逻辑顺序相匹配。

基本原理:对于使用聚簇索引的表,表的数据行存储方式会根据索引的键值进行重新排列,这样相邻的记录将在磁盘上变得更加接近,从而提高范围查询的性能。

优点:聚簇索引的主要优点是范围查询的性能较好,因为相关的数据行存储在一起,可以减少磁盘 I/O 操作。

缺点:对于频繁的插入、删除操作,可能会导致页面分裂或碎片化,进而影响性能。此外,聚簇索引通常只能有一个,因为数据行只能以一种顺序进行组织。

非聚簇索引(Non-clustered Index)
定义:非聚簇索引是一种独立于实际数据行物理顺序的索引结构,它包含索引列的值和指向实际行的指针。

基本原理:非聚簇索引通过维护一个独立的数据结构,使得索引列的值和对应的数据行指针之间建立映射关系,从而加快数据检索速度。

优点:非聚簇索引可以提高数据检索的速度,而且在大部分情况下不会影响数据行的物理存储顺序。

缺点:由于要维护额外的指针结构,会占用更多的存储空间。此外,对于范围查询的性能可能会略逊于聚簇索引。

总体来说,聚簇索引适合范围查询较多的情况,而非聚簇索引适合频繁的插入、删除操作或者需要覆盖索引的情况。在实际应用中,根据具体的业务需求和数据库访问模式,可以灵活选择使用聚簇索引和非聚簇索引来优化数据库的性能。

15

过三次握手,双方可以确保彼此都能接收和发送数据,避免了可能出现的数据丢失和混乱情况。如果只进行两次握手,则无法建立可靠的连接,因为缺少了一次确认步骤,无法保证双方之间的通信稳定性和完整性

ArrayList的底层实现是基于数组(Array),它使用动态数组来存储元素,当创建一个ArrayList时,会分配一个初始容量的数组,当元素数量超过当前容量时,会自动进行扩容

LinkedList的底层实现是基于链表(Linked List),它使用双向链表来存储元素。每个节点包含元素本身以及指向前一个节点和后一个节点的引用。由于每个节点都需要额外的存储空间来保存引用,因此LinkedList相对于ArrayList会占用更多的内存。

ArrayList适用于频繁读取和随机访问的场景,而LinkedList适用于频繁插入和删除的场景 

hashcode()和equals()是Java中Object类中的两个方法,它们在处理对象的比较和哈希值计算时起着重要的作用。

equals()方法用于比较两个对象是否相等。在Object类中,默认的equals()方法是比较对象的引用是否相同,即比较内存地址。但是对于自定义的类,需要根据实际情况重写equals()方法,通常会比较对象的属性值是否相等。

hashCode()方法用于返回对象的哈希码,它是一个int类型的数值。哈希码的作用在于对对象进行快速的定位和检索,例如在哈希表(HashMap、HashSet等)中使用。在理想情况下,不同的对象应该有不同的哈希码,但是相等的对象应该有相同的哈希码。因此,重写equals()方法的同时也应该重写hashCode()方法,以保证当两个对象通过equals()方法相等时,它们的哈希码也相等。

在Java中,如果重写了equals()方法,就应该同时重写hashCode()方法,以遵循以下规则:

  1. 如果两个对象通过equals()方法相等,那么它们的hashCode()方法应返回相同的值。
  2. 如果两个对象通过equals()方法不相等,它们的hashCode()方法不要求返回不同的值,但是为了提高哈希表性能,应尽量使得不相等的对象返回不同的哈希码;

如果只有equals,两个对象就算相等,也不一定在同一个位置。hashcode定位索引位置可能会发生哈希冲突,此时使用equals方法判断俩对象是否相等

重复元素问题。

16 

  1. 可靠性

    • TCP是面向连接的协议,提供可靠的数据传输。它通过数据包的序号、确认和重传机制来确保数据的可靠性和顺序性,能够保证数据不丢失、不重复、按顺序到达。
    • UDP是无连接的协议,不提供可靠性保证。UDP发送数据时不需要建立连接,也不进行数据校验和重传,因此可能会出现数据丢失、重复、乱序等情况。
  2. 传输效率

    • TCP的可靠性带来了额外的开销,如连接设置、数据校验、重传等,导致TCP传输速度相对较慢。
    • UDP没有TCP那些可靠性机制,因此传输速度更快,适用于对实时性要求较高的应用。
  3. 连接方式

    • TCP是面向连接的,通信前需要建立连接,通信结束后需要释放连接。这种连接方式适用于稳定传输的场景,如文件传输、网页访问等。
    • UDP是面向无连接的,每个数据报都是独立的,发送方不需要与接收方建立连接。这种连接方式适用于实时性要求高、数据量小且丢失数据可以接受的场景,如视频流、音频通话等。
  4. 数据包大小限制

    • TCP对数据包大小有限制,当数据量大时需要分片传输,可能会引起网络拥塞。
    • UDP没有固定的数据包大小限制,适合用于快速传输小数据量的信息。

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

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

相关文章

mysql 8.0 日志文件无权限问题处理

无论如何修改权限总是报这个日志文件权限问题。 解决方法 输入指令: setenforce 0 systemctl restart mysgld

LVS集群(Linux Virtual server)介绍----及LVS的NAT模式部署(一)

群集的含义 ●Cluster,集群、群集由多台主机构成,但对外只表现为一个整体,只提供访问入口(域名或IP地址),相当于一台大型计算机 问题: 互联网应用中,随着站点对硬件性能、响应速度、服务稳定性、数据可靠…

Java开发从入门到精通(一):JavaJava的基础语法知识高阶

Java大数据开发和安全开发 (一)Java的数组1.1 静态初始化数组1.1.1 静态数组的定义1.1.2 数组的原理1.1.3 数组的访问1.1.3.1 数组的取值1.1.3.2 数组的赋值1.1.3.3 数组的长度1.1.3.4 数组的使用 1.1.4 数组的遍历1.1.3 数组的案例 1.2 动态初始化数组1…

WanAndroid(鸿蒙版)开发的第一篇

前言 DevEco Studio版本:4.0.0.600 WanAndroid的API链接:玩Android 开放API-玩Android - wanandroid.com 为了兼容HarmonyOS,我这边以Arkts--API9为例进行实现 通过华为官网渠道目前下载的版本还是3.1的,这边提供下4.0版本下载…

从2个角度来简单讨论一下伦敦金走势图怎么看

进入伦敦金市场之后,投资者无时无刻都在思考着一个问题,那就是伦敦金走势怎么看?关于这个问题,其实在市场中有很多的文章和视频去介绍,在书店里也有很多投资前贤所写的书籍讨论过这个问题。但是他们都有一个特征&#…

【SpringMVC】快速体验 SpringMVC接收数据 第一期

文章目录 一、SpringMVC 介绍1.1 主要作用1.2 核心组件和调用流程理解 二、快速体验三、SpringMVC接收数据3.1 访问路径设置3.1.1 精准路径匹配3.1.2 模糊路径匹配3.1.3 类和方法级别区别3.1.4 附带请求方式限制3.1.5 进阶注解 与 常见配置问题 3.2 接收参数(重点&a…

复杂业务场景下,如何优雅的使用设计模式来优化代码?

1、引言 本文以一个实际案例来介绍在解决业务需求的路上,如何通过常用的设计模式来逐级优化我们的代码,以把我们所了解的到设计模式真实的应用于实战。 2、背景 假定我们现在有一个订单流程管理系统,这个系统对于用户发起的一笔订单&#…

HNU-算法设计与分析-甘晴void学习感悟

前言 算法设计与分析,仅就课程而言,似乎是数据结构与算法分析的延续 教材使用: 课程 关于课程,橙学长讲的非常清晰,我深以为然。 HNUCS-大三课程概览-CSDN博客文章浏览阅读1.3k次,点赞5次,收…

安装nginx:手动安装和yum安装

本文在centos7.9下分别尝试了yum安装和手动安装,记录一下试验过程。为后来者少踩点坑。 下载 下载地址:链接 。建议下载稳定版本,也就是Stable Version,这里下载的是 nginx-1.24.0 # 我下载在如下文件夹 mkdir/opt/apps cd /op…

ES入门五:组合查询

带有组合功能的Api有以下几个: Bool Query:布尔查询,可以组合多个过滤语句来过滤文档Boosting Query:在postive块中指定匹配文档的语句,同时降低在negative块中也匹配的文档的得分,提供调整相关性算法的能…

代码随想录 回溯算法-排序

目录 46.全排序 47.全排列|| 332.重新安排行程 46.全排序 46. 全排列 中等 给定一个不含重复数字的数组 nums ,返回其 所有可能的全排列 。你可以 按任意顺序 返回答案。 示例 1: 输入:nums [1,2,3] 输出:[[1,2,3],[1,…

蓝桥杯每日一题:烤鸡dfs

这道题考察了dfs的应用,题干十分有趣,思考过程对以后类似题目也有很强的参考性,一起来学习吧! 题目: # 烤鸡 ## 题目背景 猪猪 Hanke 得到了一只鸡。 ## 题目描述 猪猪 Hanke 特别喜欢吃烤鸡(本是同畜…

蓝桥杯练习题——归并排序

1.火柴排队 思路 1.求最小值的时候,可以直接按升序排序,这样得到的值就是最小值 2.求最小交换次数的时候,不能直接排序,因为只能交换相邻的数,只需要知道他们的相对大小,所以可以先用离散化,把…

清华大学1748页CTF竞赛入门指南,完整版开放下载!

CTF是一种针对信息安全领域的经济性挑战,旨在通过解决一系列的难题来寻找隐藏的“flag”。CTF比赛战队一般是以高校、科研单位、企业、信息安全从业者或社会团体组成。对于网安爱好者及从业者来说,拥有“CTF参赛经验”也是求职中的加分项。 前几天分享的…

什么是智慧公厕?智慧公厕设备有哪些

在现代社会,公共厕所作为城市基础设施的重要一环,承载着城市卫生、居民生活品质的重要责任。然而,传统公厕存在的问题仍然不可忽视:脏乱差、资源浪费、安全隐患等等。 为了解决这些问题,针对公共厕所日常使用、运营管…

六、长短时记忆网络语言模型(LSTM)

为了解决深度神经网络中的梯度消失问题,提出了一种特殊的RNN模型——长短期记忆网络(Long Short-Term Memory networks, LSTM),能够有效的传递和表达长时间序列中的信息并且不会导致长时间前的有用信息被忽略。 长短时记忆网络原理…

ORA/GSA -- 学习记录

brief over-representation analysis(ORA),过表“达”分析,就是我们做多分组的RNAseq数据解析后会得到一些差异表达的gene,有些时候是单独拿出一个差异gene去解释表型,缺点是欠缺证据力度。有些人就把一些相关的差异gene放在一块儿解释&…

网络编程---网络编程入门、UDP通信程序、TCP通信程序

1.网络编程入门 1.网络编程概述 网络编程: 在网络通信协议下,实现网络互连的不同计算机上运行的程序间可以进行数据传输 计算机网络: 是指将地理位置不同的具有独立功能的多台计算机及其外部设备,通过通信线路连接起来&#…

J1周-ResNet-50算法

本文为🔗365天深度学习训练营 中的学习记录博客 原作者:K同学啊|接辅导、项目定制 我的环境: 1.语言:python3.7 2.编译器:pycharm 3.深度学习框架Tensorflow/Pytorch 1.8.0cu111 一、问题引出 CNN能够提取低、中、…

qnx启动中控屏黑屏

bmetrics_service boot metrics service, 用于记录统计启动性能信息,读取/dev/bmetrics可以获取到这些信息 # use memorydump memorydump Sets the debug cookies, copies MMU info into reset_info asinfo, sets the secure monitor(TZ) dump buffer, starts tracelogger Usa…