java——2024-03-03
- String类的对象能被修改吗?如果不能需要用什么修改?StringBuilder和StringBuffer的区别?
- equals和==区别
- 谈谈对面向对象的理解
- 重载和重写的区别
- 说一下ArrayList,LinkedList底层实现以及区别
- 什么是哈希冲突?
- hashMap和conCurrentHashMap的区别
- hashcode() 与 equals() 的区别与联系
- 快排的思想
- 什么是死锁?怎么解决?
- MySQL事务的四大特性
- varchar和char的区别?里面的参数代表什么?
- 讲一下数据库的索引(什么是索引?索引的基本原理 索引类型 索引的优缺点)
- 三次握手
- 建立连接可以两次握手吗,为什么不可以?
- TCP、UDP的区别
- 垃圾回收的算法有哪些?
- wait()和sleep()的区别
- volatile关键字
4
重载(Overloading)指的是在同一个类中,可以定义多个方法具有相同的名字,但是参数列表不同(参数类型、个数或顺序)。在调用这些方法时,编译器会根据传入的参数来选择最匹配的方法进行调用。通过方法重载,可以实现一组功能类似但参数不同的方法。
重写(Overriding)指的是子类重新定义(覆盖)其父类中具有相同签名的方法。在继承关系中,当子类需要改变父类的方法实现时,可以使用方法重写。子类的访问权限修饰符不能比父类更严格。重写的方法具有相同的方法名、返回类型和参数列表,子类可以通过重写方法来提供特定于子类的实现。
17
http://t.csdnimg.cn/ZJOz5http://t.csdnimg.cn/ZJOz5
引用计数:通过跟踪每个对象被引用的次数来确定何时释放内存。当对象的引用计数减为0时,表示没有指针指向该对象,可以安全地释放内存。
标记-清除(Mark and Sweep):该算法分为两个阶段。首先,通过根对象(如全局变量、栈中的变量等)标记所有可达对象。然后,清除未被标记的对象,并将它们的内存释放。
复制(Copying):将内存空间划分为两个区域,通常称为"From"和"To"。在使用过程中,对象存储在"From"区域,当触发垃圾回收时,将存活的对象复制到"To"区域中,随后清除"From"区域中的所有对象。
标记-压缩(Mark and Compact):结合了标记和清除以及对象移动,首先标记所有可达对象,然后将存活对象向一端移动,并清理掉不再使用的内存,从而压缩可用内存空间。
分代(Generational):基于观察,大多数对象很快就会变得不可达。该算法将对象根据其生命周期分为不同代,新创建的对象放入新生代,经过多次回收后仍然存活的对象会被晋升到老年代。
12.
char用于存储固定长度的字符串,如果实际存储的字符串长度小于指定的长度会在后面使用空格进行填充。例如,如果你定义一个CHAR(10)的字段,不管你实际存储的字符串是几个字符,都会占用10个字符的存储空间。
varchar用于存储可变长的字符串,不填充空格,制定最大存储长度。实际可小于这个长度。比如:定义一个VARCHAR(10)的字段,存储"Hello"这个5个字符时,只会占用5个字符的存储空间。
1.
String对象不可变,需要修改就使用+,substring,concat拼接,还可以使用
StringBuilder
或StringBuffer
类来修改字符串的内容。
线程安全性:
StringBuilder
:是非线程安全的。在多线程环境下使用StringBuilder
进行字符串操作时,需要自行处理同步和线程安全的问题。StringBuffer
:是线程安全的,所有对它的方法都进行了同步处理,因此可以保证多线程环境下的安全访问。性能:
- 由于
StringBuffer
的所有方法都是同步的,因此它在多线程环境下能够保证线程安全,但会因为同步操作存在一定的性能开销。- 相比之下,
StringBuilder
不是线程安全的,它没有额外的同步开销,因此在单线程环境下通常比StringBuffer
更快。
2.
==
运算符:比较的是值,只不过基本类型的数值是值本身,引用对象的值是地址
- 对于基本数据类型时,比较的是它们的值是否相等。对于引用类型比较的是对象的内存地址,判断两个引用是否指向同一个对象。
- 比较的是值,只不过基本类型的数值是值本身,引用对象的值是地址
- ==的坑:即使比较的两个对象一摸一样,他们也不能算是相等的,如果相比较两个对象的属性是否相等,就只能用equals了,
equals()
方法:
equals()
方法是Object
类中定义的方法,子类可以重写该方法来自定义比较规则。如果没重写,那和==是差不多的,- 默认情况下,
equals()
方法比较的是对象的内存地址,即与==
运算符的作用相同。- 许多 Java 类库中的类(如
String
、Integer
等)会重写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
过三次握手,双方可以确保彼此都能接收和发送数据,避免了可能出现的数据丢失和混乱情况。如果只进行两次握手,则无法建立可靠的连接,因为缺少了一次确认步骤,无法保证双方之间的通信稳定性和完整性
5
ArrayList的底层实现是基于数组(Array),它使用动态数组来存储元素,当创建一个ArrayList时,会分配一个初始容量的数组,当元素数量超过当前容量时,会自动进行扩容
。
LinkedList的底层实现是基于链表(Linked List),它使用双向链表来存储元素。每个节点包含元素本身以及指向前一个节点和后一个节点的引用。由于每个节点都需要额外的存储空间来保存引用,因此LinkedList相对于ArrayList会占用更多的内存。
ArrayList适用于频繁读取和随机访问的场景,而LinkedList适用于频繁插入和删除的场景
8
hashcode()和equals()是Java中Object类中的两个方法,它们在处理对象的比较和哈希值计算时起着重要的作用。
equals()方法用于比较两个对象是否相等。在Object类中,默认的equals()方法是比较对象的引用是否相同,即比较内存地址。但是对于自定义的类,需要根据实际情况重写equals()方法,通常会比较对象的属性值是否相等。
hashCode()方法用于返回对象的哈希码,它是一个int类型的数值。哈希码的作用在于对对象进行快速的定位和检索,例如在哈希表(HashMap、HashSet等)中使用。在理想情况下,不同的对象应该有不同的哈希码,但是相等的对象应该有相同的哈希码。因此,重写equals()方法的同时也应该重写hashCode()方法,以保证当两个对象通过equals()方法相等时,它们的哈希码也相等。
在Java中,如果重写了equals()方法,就应该同时重写hashCode()方法,以遵循以下规则:
- 如果两个对象通过equals()方法相等,那么它们的hashCode()方法应返回相同的值。
- 如果两个对象通过equals()方法不相等,它们的hashCode()方法不要求返回不同的值,但是为了提高哈希表性能,应尽量使得不相等的对象返回不同的哈希码;
如果只有equals,两个对象就算相等,也不一定在同一个位置。hashcode定位索引位置可能会发生哈希冲突,此时使用equals方法判断俩对象是否相等
重复元素问题。
16
可靠性:
- TCP是面向连接的协议,提供可靠的数据传输。它通过数据包的序号、确认和重传机制来确保数据的可靠性和顺序性,能够保证数据不丢失、不重复、按顺序到达。
- UDP是无连接的协议,不提供可靠性保证。UDP发送数据时不需要建立连接,也不进行数据校验和重传,因此可能会出现数据丢失、重复、乱序等情况。
传输效率:
- TCP的可靠性带来了额外的开销,如连接设置、数据校验、重传等,导致TCP传输速度相对较慢。
- UDP没有TCP那些可靠性机制,因此传输速度更快,适用于对实时性要求较高的应用。
连接方式:
- TCP是面向连接的,通信前需要建立连接,通信结束后需要释放连接。这种连接方式适用于稳定传输的场景,如文件传输、网页访问等。
- UDP是面向无连接的,每个数据报都是独立的,发送方不需要与接收方建立连接。这种连接方式适用于实时性要求高、数据量小且丢失数据可以接受的场景,如视频流、音频通话等。
数据包大小限制:
- TCP对数据包大小有限制,当数据量大时需要分片传输,可能会引起网络拥塞。
- UDP没有固定的数据包大小限制,适合用于快速传输小数据量的信息。
相关文章:

java——2024-03-03
String类的对象能被修改吗?如果不能需要用什么修改?StringBuilder和StringBuffer的区别?equals和区别谈谈对面向对象的理解重载和重写的区别说一下ArrayList,LinkedList底层实现以及区别什么是哈希冲突?hashMap和conCu…...

Ubuntu安装conda以后,给jupyter安装C++内核
前言 大家都知道,jupyter notebook 可以支持python环境,可以在不断点调试的情况下,打印出当前结果,如果代码错了也不影响前面的内容。于是我就想有没有C环境的,结果还真有。 参考文章: 【分享】Ubuntu安装…...
【谈判】核心思想(抓大放小)
谈判交换(抓大放小) 一、明确目的 事:must: 非要不可,才会签字 want: 有很好, give: 放掉 三者,会变化 二、明确对象 人:我跟谁谈? 时: 国际形势、国家的政策、他的心…...
洛谷P5908 猫猫和企鹅 做题反思(2024.3.7)
猫猫和企鹅 题目传送门 题目描述 王国里有 n n n 个居住区,它们之间有 n − 1 n-1 n−1 条道路相连,并且保证从每个居住区出发都可以到达任何一个居住区,并且每条道路的长度都为 1 1 1。 除 1 1 1 号居住区外,每个居住区住…...

常见的验证码
一、短信验证码 前端: 用户填写手机号,点击按钮发送请求用户短信得到验证码后,用户填写表单提交 form 表单,进行验证 后台: 随机生成几位验证码并将生成时间、手机号、验证码存储起来,可以存到session、…...

11. C语言标准函数库
C语言制定了一组使用方式通用的函数,称为C语言标准函数库,用于实现编程常用功能,标准函数库由编译器系统提供,并按功能分类存储在不同源代码文件中,调用标准库内函数时需要首先使用 #include 连接对应的源代码文件。 【…...

2016年认证杯SPSSPRO杯数学建模C题(第一阶段)如何有效的抑制校园霸凌事件的发生解题全过程文档及程序
2016年认证杯SPSSPRO杯数学建模 C题 如何有效的抑制校园霸凌事件的发生 原题再现: 近年来,我国发生的多起校园霸凌事件在媒体的报道下引发了许多国人的关注。霸凌事件对学生身体和精神上的影响是极为严重而长远的,因此对于这些情况我们应该…...
设计模式-抽象工厂模式实践案例
抽象工厂模式(Abstract Factory Pattern)是一种创建型设计模式,它提供了一个接口,用于创建一系列相关或相互依赖的对象,而无需指定它们具体的类。抽象工厂模式是围绕一个超级工厂创建其他工厂的模式。该模式的实现涉及…...

用readproc函数读取进程的状态
概要: 本篇演示用readproc函数读取进程的状态 libprocps库的安装参考笔者的文章readproc.h-CSDN博客 演示所用的系统是Ubuntu22.04 一、代码 #include<stdio.h> #include<stdlib.h> #include<proc/readproc.h> int main() {struct PROCTAB *…...

在高并发、高性能、高可用 三高项目中如何设计适合实际业务场景的分布式id(一)
分布式ID组件:黄金链路上的关键基石 在现代分布式系统中,分布式ID组件无疑扮演着至关重要的角色。作为整个系统的黄金链路上的关键组件,它的稳定性和可靠性直接关乎到整个系统的正常运作。一旦分布式ID组件出现问题,黄金链路上的…...

redis最新版本在Windows系统上的安装
一、说明 这次安装操作主要是根据redis官网说明,一步步安装下来的,英语比较好的同学,可以直接看文章底部的超链接1,跳到官网按步操作即可。 目前redis的最新稳定版本为redis7.2。 二、Windows环境改造 Redis在Windows上不被官方…...

【深度优先】【图论】【C++算法】2045. 到达目的地的第二短时间
作者推荐 视频算法专题 LeetCode2045. 到达目的地的第二短时间 城市用一个 双向连通 图表示,图中有 n 个节点,从 1 到 n 编号(包含 1 和 n)。图中的边用一个二维整数数组 edges 表示,其中每个 edges[i] [ui, vi] 表…...

思维题(蓝桥杯 填空题 C++)
目录 题目一: 编辑 代码: 题目二: 代码: 题目三: 代码: 题目四: 代码: 题目五: 代码: 题目六: 代码七: 题目八&#x…...

Meta的Llama2模型已上线!但我为何更推荐你从HuggingFace获取?还有Code Llama等你来解锁!
嘿,朋友们,今天给你们介绍一个新东西——Llama2模型,这是Meta(对,就是Facebook那家)推出的。 你可以直接去Llama的官网下载这个模型,然后按照他们GitHub上的指南来调用。 不过呢,我…...

CAN总线及通讯的工作原理
一、CAN总线 CAN是控制器局域网络(Controller Area Network)的简称, 它是由研发和生产汽车电子产品著称的德国BOSCH公司开发的, 并最终成为国际标准(ISO11519),是国际上应用最广泛的现场总线之一。 二、工作原理 …...
linux下修改网卡MAC地址
我建议你使用 macchanger,但如果你不想使用它,那么可以使用另一种方法在 Linux 中更改 MAC 地址。 首先,使用以下命令关闭网卡: sudo ip link set dev enp0s31f6 down 接下来,使用以下命令设置新的 MAC:…...

47、WEB攻防——通用漏洞Java反序列化EXP生成数据提取组件安全
文章目录 序列化和反序列化的概念: 序列化:把java对象转换成字节流的过程;反序列化:把字节流恢复为java对象的过程。 对象的序列化主要有两种用途: 把对象的字节流永久的保存在硬盘上,通常存放在一个文件…...

phpstorm console xdebug
1.所有配置跟浏览器http请求一样 2.记得Current File 必须是controller文件 注意:如果没有出发断点,则echo phpinfo(),查看remote_port 和phpstorm 配置是否对上。...
Vue template到render过程
Vue template到render过程 vue的模版编译过程主要如下:template -> ast -> render函数(1)调用parse方法将template转化为ast(抽象语法树)(2)对静态节点做优化(3)生…...

【你也能从零基础学会网站开发】Web建站之HTML+CSS入门篇 CSS常用属性
🚀 个人主页 极客小俊 ✍🏻 作者简介:web开发者、设计师、技术分享 🐋 希望大家多多支持, 我们一起学习和进步! 🏅 欢迎评论 ❤️点赞💬评论 📂收藏 📂加关注 CSS常用属性…...
Cesium1.95中高性能加载1500个点
一、基本方式: 图标使用.png比.svg性能要好 <template><div id"cesiumContainer"></div><div class"toolbar"><button id"resetButton">重新生成点</button><span id"countDisplay&qu…...
Qt Widget类解析与代码注释
#include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this); }Widget::~Widget() {delete ui; }//解释这串代码,写上注释 当然可以!这段代码是 Qt …...

【单片机期末】单片机系统设计
主要内容:系统状态机,系统时基,系统需求分析,系统构建,系统状态流图 一、题目要求 二、绘制系统状态流图 题目:根据上述描述绘制系统状态流图,注明状态转移条件及方向。 三、利用定时器产生时…...

HBuilderX安装(uni-app和小程序开发)
下载HBuilderX 访问官方网站:https://www.dcloud.io/hbuilderx.html 根据您的操作系统选择合适版本: Windows版(推荐下载标准版) Windows系统安装步骤 运行安装程序: 双击下载的.exe安装文件 如果出现安全提示&…...
Hive 存储格式深度解析:从 TextFile 到 ORC,如何选对数据存储方案?
在大数据处理领域,Hive 作为 Hadoop 生态中重要的数据仓库工具,其存储格式的选择直接影响数据存储成本、查询效率和计算资源消耗。面对 TextFile、SequenceFile、Parquet、RCFile、ORC 等多种存储格式,很多开发者常常陷入选择困境。本文将从底…...
LeetCode - 199. 二叉树的右视图
题目 199. 二叉树的右视图 - 力扣(LeetCode) 思路 右视图是指从树的右侧看,对于每一层,只能看到该层最右边的节点。实现思路是: 使用深度优先搜索(DFS)按照"根-右-左"的顺序遍历树记录每个节点的深度对于…...
Git常用命令完全指南:从入门到精通
Git常用命令完全指南:从入门到精通 一、基础配置命令 1. 用户信息配置 # 设置全局用户名 git config --global user.name "你的名字"# 设置全局邮箱 git config --global user.email "你的邮箱example.com"# 查看所有配置 git config --list…...

关于easyexcel动态下拉选问题处理
前些日子突然碰到一个问题,说是客户的导入文件模版想支持部分导入内容的下拉选,于是我就找了easyexcel官网寻找解决方案,并没有找到合适的方案,没办法只能自己动手并分享出来,针对Java生成Excel下拉菜单时因选项过多导…...
LLaMA-Factory 微调 Qwen2-VL 进行人脸情感识别(二)
在上一篇文章中,我们详细介绍了如何使用LLaMA-Factory框架对Qwen2-VL大模型进行微调,以实现人脸情感识别的功能。本篇文章将聚焦于微调完成后,如何调用这个模型进行人脸情感识别的具体代码实现,包括详细的步骤和注释。 模型调用步骤 环境准备:确保安装了必要的Python库。…...
智能职业发展系统:AI驱动的职业规划平台技术解析
智能职业发展系统:AI驱动的职业规划平台技术解析 引言:数字时代的职业革命 在当今瞬息万变的就业市场中,传统的职业规划方法已无法满足个人和企业的需求。据统计,全球每年有超过2亿人面临职业转型困境,而企业也因此遭…...