Java基础-超全总结
1.Java中的基本数据类型
Java中有四类八种基本的数据类型,四类数据类型包括整型、浮点型、字符型、布尔型。
- 整型包括:
byte
、short
、int
和long
- 浮点型包括:
float
和double
- 字符型是
char
- 布尔型是
boolean
。
2.Java中的包装类型和基本类型的区别是什么?
Java为每一个基本数据类型都引入了包装类型,基本类型与包装类型的区别主要有:
- 包装类型可以为
null
,基本类型不能为null。在数据库查询时,查询结果可能为空,如果使用基本类型会抛出空指针异常。 - 包装类型可用于泛型,基本类型不可以。泛型在编译时会进行类型擦除,最后只保留原始类型,而原始类型只能是Object类及其子类。
- 基本类型比包装类型更高效,基本类型直接在栈中存储具体的数值,包装类型存储的是堆中的引用。相比于基本类型而言,包装类型需要占用更多的空间。
3.什么是自动装箱和拆箱?
- 自动装箱就是Java编译器自动将基本类型转换为对应的包装类型,自动拆箱就是Java编译器将包装类型转换为对应的基本类型。自动装箱和拆箱主要是提高代码的可读性,减少手动转换操作。
- 自动装箱主要用于集合类,比如
List<Integet>
无法存储int
类型的数据,可以将int
类型转换为Integer
包装类型。同时需要注意,在进行拆箱时,如果包装类型对象为null
,会抛出空指针异常。 - 自动装箱和拆箱使用
valueOf()
方法和xxxValue()
方法实现。 - 自动装箱拆箱虽然简化了代码,但是在频繁使用的场景下开销比较大,尤其在循环中发生装箱和拆箱时。所以尽量避免在性能敏感的代码中使用自动装箱和拆箱。
4.为什么浮点数运算的时候会有精度丢失的风险?
无限循环的小数存储在计算机时,只能被截断,所以就会导致精度损失。BigDecimal
可以实现对浮点数的运算,不会造成精度丢失。
6.Java的类加载过程
Java文件到最终运行必须经过编译和类加载,编译就是将Java程序
编译成.class字节码文件
。类的加载过程就是把字节码文件
加载到JVM
的内存里,加载完成之后会得到一个Class对象
。类的加载过程需要涉及到类加载器,JVM在运行的时候会产生三个类加载器,这三个类加载器组成一个层级关系,每个类加载器分别去加载不同范围的jar包。
- 启动类加载器
Bootstrap ClassLoader
,主要负责Java核心类库的加载。 - 扩展类加载器
Extension ClassLoader
,主要负责扩展目录下的jar包和class文件 - 应用类加载器
Application ClassLoader
,主要负责当前应用下所有的jar包和class文件。
应用类加载器的父类加载器是扩展类加载器,扩展类加载器的父类是启动类加载器。
双亲委派
机制是当一个类加载器去加载某个类的时候,会自底向上检查
是否加载过。如果加载过就直接返回,如果一直到顶层都没有加载过,就自顶向下进行加载。双亲委派机制的好处有两点,第一,避免恶意代码
替换JDK中的核心类库,因为子类加载要加载某个类的时候,会先委托父类加载。启动类加载器是最顶层包含一些核心类库,包括String类和线程类等,当我们加载java.lang.String的时候就先交给启动类加载器加载。第二,避免了类的重复加载
,如果父类已经加载过了,那么子类就不需要加载。
打破双亲委派机制有三种方式:
自定义类加载器
并且重写loadClass方法,Tomcat可以通过这种方式实现应用之间的类隔离。线程上下文类加载器
,利用线程上下文类加载器加载类,比如JDBC等Osgi框架
的类加载器,Osgi框架是实现了一套新的类加载器机制,允许同级之间委托进行类加载。
7.什么是Java内部类,它有什么作用?
内部类就是在一个类的内部再定义一个类,分为四种,成员内部类、静态内部类、局部内部类和匿名内部类。
成员内部类
就是非静态类,可以访问外部类的所有成员
,包括private修饰的成员。静态内部类
是使用static修饰的内部类,只能访问外部类的静态成员
。局部内部类
是在方法和代码块中的类,仅在该方法和代码块
上可见,通常用于临时对象构建。匿名内部类
是没有类名的内部类,匿名内部类一般用于接口回调
。需要注意的是,正因为没有名字,匿名内部类只能使用一次
。其次匿名内部类必须继承一个父类或实现一个接口。
8.接口和抽象类的区别是什么?
接口
是自上而下
的设计,对行为的规范。抽象类
是自下而上
的设计,对类的规范。- 接口的方法默认是
public
,所有的方法在接口中不能有实现类,Java8开始接口的方法可以有默认的实现。抽象类的abstract
方法没有实现,具体的方法要有实现。 - 接口中的
实例变量
默认是final类型
的,抽象类中不一定。 - 一个类可以
实现多个接口
,最多只能继承一个抽象类
。类实现接口的时候要实现接口中的所有方法,抽象类不一定。 - 接口不能使用
new实例化
,但是可以声明,必须引用一个实现。
9.成员变量与局部变量的区别?
- 成员变量分为
类变量
和实例变量
,类变量是被static
修饰的成员变量,它可以被类的所有对象实例共享
,无论一个类创建了多少个对象,类变量只会被分配一次内存
。实例变量是没有被static
修饰的成员变量。类变量属于类,实例变量属于对象实例。 - 局部变量属于方法,不能被
static
所修饰。 - 类变量随着类的初始化而创建,实例变量随着对象的创建而存在。而局部变量随着方法的调用而自动生成。
10.静态方法和实例方法有何不同?
静态方法
属于类,可以通过类名调用
,也可以通过对象调用
。实例方法
属于对象,只能通过对象调用
。
11.如果一个类没有声明构造方法,该程序能正确执行吗?
类没有声明构造方法,程序也能正确执行,因为默认提供类的无参构造方法
。
12.构造方法有哪些特点?是否可被 override?
构造方法名称与类名一致
,没有返回类型且不能用void
声明。在创建对象时,构造方法会自动执行。构造方法不能被重写
,但是可以被重载
,以便于初始化不同对象。
13.Java的参数传递按值还是按引用?
Java中的参数传递都是值传递,不过基本类型传递的是值的副本,对其修改会影响外部。引用类型传递的是地址值,方法内部修改对象属性会影响到外部,但是不能修改引用本身使其指向其他的对象。
14.Java方法重载和方法重写之间的区别?
- 方法重载就是在同一类中定义多个方法,
方法名相同
,但是参数列表不同
,适合在同一类中定义不同场景下的行为。方法重写就是子类继承
父类时,可以重写父类的某个方法
,方法名和参数列表必须相等
。重写主要用于子类改变父类的方法实现,运行时多态。 - 重写时需要注意的是子类方法不能有比父类更严格的
访问级别
,比如父类用protected修饰,那么子类就不能使用private,但是可以使用public。还需要注意子类抛出的异常
必须与父类一致,或者是父类异常的子类。
15.面向对象和面向过程的区别?
面向对象是将问题分解成一系列步骤,然后按照一定的顺序
执行。面向过程是将解决问题的参与者,封装成一个个对象,每个对象完成自己的操作。面向对象的三大特征就是封装、继承和多态。
封装
就是隐藏
内部实现细节,仅向外提供必要的属性和方法。继承
就是子类继承父类的方法和属性
,主要是代码复用和扩展。多态
就是同一方法在不同的对象中有不同的实现
,父类引用指向子类对象。
16.对象实体与对象引用的区别?
对象实体是内存中真实存在的对象实例,对象引用是指向对象实体的指针。
17.对象相等与引用相等的区别?
对象相等比较的是值是否相等,引用相等比较的是内存地址是否相等。
18.Java中的hashCode和equal方法是什么?
hashcode()
在object类中基于内存地址计算哈希值,可以快速比较两个对象是否相等,如果两个对象的哈希值不相等,那么这两个对象一定不相等,常用于hashmap
中判断元素的存储位置。
equals()
方法用于判断两个对象是否相等,默认使用==
比较对象的内存地址,可以重写equals()方法定义自己的相等逻辑。如果重写了equals()方法,通常还需要重写hashCode方法,以保证相等的对象具有相同的哈希值。
19.Java中为什么不支持多继承?
多继承会产生菱形继承
,假如B和C继承了A,但是对A中的方法有不同的实现,此时D同时继承了B和C。那么D要想调用A中的方法就会产生歧义,不知道调用B的实现还是C的实现。
20.深拷贝和浅拷贝区别了解吗?
浅拷贝
只拷贝对象的引用
,不创建新的对象实例
,新旧对象仍然指向同一块内存空间。深拷贝创建一个全新的对象实例
,并将原始对象的所有属性复制到新对象中。浅拷贝性能开销较小,仅复制对象的引用,深拷贝性能开销大,因为要创建新的对象实例。
21.Java中String、String Buffer、String Builder有什么区别?
- String是
不可变类
,String对象一旦创建就不能修改
,每次修改操作都会创建新的String对象。 String Buffer
是可变类
,可以进行字符串的追加、删除和插入等操作,内部使用sychronized
关键字修饰,线程安全
。String Build
也是可变类
,与String Buffer类似,不能保证线程安全
,但是性能比String Buffer
更好。
22.String#equals() 和 Object#equals() 有何区别?
String
中的 equals
方法重写了Object的equals方法,比较的是值
是否相等。 Object
的 equals
方法是比较的对象的内存地址
。
23.什么是不可变类?
不可变类是初始化之后不能被修改的类,类被final修饰
,变量
用private final
修饰,并且不提供setter方法
。如果要修改类,就会返回副本(新对象)。我们常见的String类就是不可变类。不可变类的优点是线程安全
,但是缺点是频繁修改浪费资源
。
24.Java中的Exception和Error有什么区别?
Exception
和Error
都是Throwable
的子类。
- Exception又分为编译时异常
Checked Exception
和运行时异常Unchecked Exception
。编译时异常在编译期间必须被处理,比如IO异常
等。运行时异常不需要显示的捕获,比如空指针异常
,都继承自RuntimeException
。 Error
表示系统级别的错误,不应该被程序捕获处理
,因为一旦出现程序就不能正常执行了。比如内存耗尽
、栈溢出
等。- 在捕获处理异常时,注意不要在
finally
代码块里处理返回值,finally
中的return
会覆盖try
中的return
。
25.Java泛型的作用是什么?
- 泛型可以理解为一种更安全、更强大的
集合
。它可以在编译时
期检查类型是否正确
,这样可以避免强制类型转换带来的危险。 - 泛型会进行
类型擦除
,在类被编译时
会被替换成本身支持的原始类型
,而原始类型只能是Object类及其子类
。所以基本类型在编译时会泛型擦除,而包装类型不会。
26.什么是Java泛型的上下界限定符?
extends
表示上界限定符
,super
表示下界限定符
。
- 上界限定符用在
参数前面
,用来指定类型参数必须继承自哪个类或实现哪个接口。 - 下界限定符用在
参数后面
,用来指定类型参数必须是哪个类或者接口的实例。 - 如果即使用了上界限定符又使用了下界限定符,以
上界限定符为准
。
27.你使用过Java中的反射机制吗?如何应用反射?
- Java反射机制允许在
运行时动态获取类的元数据
(如属性、方法、构造器),并可以直接创建对象
或调用方法
。 - 通过反射,可提前编写
通用逻辑
(如对象创建、方法执行),以后不论哪个模块都可以直接调用
,实现功能复用
。例如,Spring框架中@Component
注解的Bean管理,正是通过反射解析类信息
并调用构造器
实例化对象。
28.Java中的注解原理是什么?
注解就是一种标签
,用来描述被标记数据的某种特性
。所有的注解都是使用元注解生成的,Inherited元注解
表示这个注解是可以被继承的。
29.java中的序列化和反序列化是什么?
- 序列化就是将对象转换为字节流的过程,可以在网络中传输。在java中提供了
Serializable
接口用于序列化,只要类实现这个接口,就能将类的对象序列化。 - 反序列化是将字节流重新转换为对象的过程,就是从存储中重新读取数据并重新创建对象。如果有些字段不需要被序列化,比如敏感数据,可以使用
transient
关键字标识字段。 - 在序列化的过程中每个
Serializable
类都应该定义一个seriaVersionUID
,用于反序列化时验证版本一致性,如果没明确指定,Java会默认生成一个UID
,在版本不一致时,反序列化可能失败。 - 需要注意的是序列化无法存储静态变量,因为静态变量属于类级别的。而序列化是通过调用对象的
writeObject
和readObject
方法将对象写入到输出流和读取到输入流的,静态变量由于都不属于对象的一部分,因此调用这两个方法时静态变量都不参与。
30.ArrayList和LinkedList的区别是什么?
ArrayList和LinkedList都实现了List接口,List集合的特点是有序、可重复
的。
ArrayList
底层是数组
,LinkedList
底层是链表
。- ArrayList可以根据索引进行查找,支持
随机访问
,查找的时间复杂度是O(1)。LinkedList不支持随机访问,查找的时间复杂度是O(n)。 - ArrayList添加元素时会先创建一个大小为
10
的数组,存满时需要扩容
,默认扩容为原数组的1.5
倍。LinkedList不需要扩容。 - ArrayList比较适合随机访问的场景下,LinkedList适合插入、删除的场景下。
31.HashSet和TreeSet的区别是什么?
HashSet和TreeSet都实现了Set接口,Set集合的元素是不可重复
的。
HashSet
是无序
的,底层是基于HashMap实现的。TreeSet
是排序
的,底层是基于TreeMap实现的。Map集合的key值存放Set集合元素。- HashSet还有一个实现类
LinkedHashSet
,就是额外增加了一个双向链表
维护元素的存取顺序。 - 一般使用HashSet进行
元素去重
,使用TreeSet获取极值
。
32.HashMap和TreeMap的区别是什么?
HashMap和TreeMap都是双列集合,存储的是Key-Value键值对。
HashMap
底层采用的是数组+链表/红黑树
,默认创建一个长度为16
,加载因子为0.75
的哈希数组。添加元素时,先通过hashCode()
方法获取哈希值,然后对数组长度求余,计算插入的位置。如果发生哈希碰撞,就通过equals()
方法判断元素是否相等,相等就去重,不相等的话,老元素指针就指向新元素。如果链表长度超过8
,且数组长度达到64
,就会将链表转换成红黑树。如果数组元素达到数组长度*加载因子
,就将数组扩容为原来的2倍
。TreeMap
集合底层是基于红黑树
实现的,需要对元素进行排序
。对于本身具有排序规则的数据类型直接排队,对于没有排序规则的数据类型,需要自定义排序规则。可以通过Comparable
接口的compareTo()
方法排序。
33.线程安全的集合有哪些?
多线程
对Map集合进行put操作
的时候,会出现覆盖
的情况,导致线程安全。比如:线程1对HashMap进行了哈希冲突判断,由于时间片耗尽,线程挂起。线程2完成了插入操作,随后线程1再执行插入操作,导致线程2插入的数据被覆盖,出现线程安全的问题。线程安全的集合主要有:
- Hashtable:底层是
数组+链表
,插入元素时对整个数组
加锁。可以保证线程安全,但是性能太低。 - ConcurrenHashMap:底层与HashMap一样,都是采用
数组+链表/红黑树
。在1.7之前采用分段锁
,对每个段的node节点
加锁。1.8之后采用CAS+细粒度锁
,若目标位置为空,使用CAS操作直接插入,无需加锁。如果存在哈希冲突,仅对链表或红黑树的node节点加锁,减少了锁竞争。可以在保证线程安全的情况下,提高性能。
34.ConcurrentHashMap的Key和Value为什么不能为null?
为了避免二义性
- 如果key为null,那么就无法区分键为null还是不存在这个key。
- 如果value为null,那么就无法判断是值为null,还是因为找不到key而返回null。
35.字节流有哪些?
字节输入流InputStream
的实现类是FileInputStream
,字节输出流OutputStream
的实现类是FileOutputSteam
。字节流适合复制文件
,不适合读写文件,读写文件的时候会出现截断乱码的情况。
- FileInputStream提供了
read()
方法来读取文件,可以读取一个字节或者一个字节数组的数据,也可以通过readAllBytes()
方法读取全部字节。 - FileOutputStream提供了
write()
方法来写文件,可以写一个字节或者一个字节数组的数据。
36.字符流有哪些?
字符输入流Reader
的实现类是FileReader
,字符输出流Writer
的实现类是FileWriter
。字符流适合读写文件
,不会出现乱码的情况。
- FileReader提供了
read()
方法读文件,读取一个字符或一个字符数组的数据。 - FileWriter提供了
write()
方法写文件,每次可以写一个字符或者一个字符串以及一个字符数组的数据。需要注意,字符输出流写数据后,必须刷新流或者关闭流,写出去的数据才能生效。
37.谈谈你对包装流(缓冲流)的理解?
- 缓冲流是用来包装原始流的,用来提高原始流的读写速度。
- 缓冲流会在
内存
中开辟两个8KB
的缓冲池,分别用来接受输入缓冲流和输出缓冲流的数据。由于两个缓冲池之间的传输是在内存中,所以速度很快。 - 字节缓冲流通过
BufferedInputStream
和BufferedOutputStream
来包装FileInputStream
和FileOutputStream
。 - 字符缓冲流是通过
BufferedReader
和BufferedWriter
来包装FileReader
和FileWriter
,字符缓冲流提供了readLine()
方法按行读取字符,比较适合读取用户名和密码。
38.JDK8有哪些新特性?
- Lambda表达式:一种匿名函数,可以理解为一段可以传递的代码,将代码像数据一样传递。
- Stream流:用于处理集合,支持链式编程。
- 日期类:解决了旧日期类可变线程不安全的问题。
39.什么是Java中的动态代理?
- Java动态代理是一种允许
运行时创建代理对象
的机制,可以在不修改原始类的情况下,为其添加额外的行为
。比如日志记录
、性能监控
等。 - 动态代理的核心是
反射技术
,当代理对象的方法被调用时,InvocationHandler
的invoke()
方法就会被触发,在里面定义方法调用的增强行为。 - 在Java中也有静态代理,静态代理就是预先编译好一个代理类。Java中的动态代理只能对接口进行代理,不能对类进行代理。
CGLIB
动态代理是通过字节码技术生成目标类的子类来实现代理,可以支持对类的代理。
40.Java开发规范有哪些?
- 项目命名全部采用小写方式,以中划线分隔。
TODO/TBD(to be determined)
注释一般用来描述已知待改进、待补充的修改点,并且加上作者名称。FIXME
注释一般用来描述已知缺陷。- 每个方法最多
3
个参数,如果超出3
个参数的话,要封装成javabean
对象。 - 注释和代码一样重要,注释主要用于说明作用、逻辑。注释并不是越多越好,当注释过多,维护代码的同时,还需要维护注释。
41.Java中wait和sleep的区别?
sleep()
和wait()
都是让线程进入到等待
状态的
- sleep()方法在等待期间会
释放锁
,wait()方法在等待期间不会释放锁
。 join()
方法实现线程的插队
,yeild()
方法是让正在执行的线程让出
。
相关文章:
Java基础-超全总结
1.Java中的基本数据类型 Java中有四类八种基本的数据类型,四类数据类型包括整型、浮点型、字符型、布尔型。 整型包括:byte、short、int和long浮点型包括:float和double字符型是char布尔型是boolean。 2.Java中的包装类型和基本类型的区别…...
区块链技术在数据隐私保护中的应用:从去中心化到零知识证明
区块链技术在数据隐私保护中的应用:从去中心化到零知识证明 在数字化时代,数据隐私已成为全球关注的焦点。无论是个人身份信息、医疗数据还是企业的敏感业务数据,都面临着泄露、篡改和滥用的风险。传统的安全方案依赖中心化服务器进行加密和…...
【大模型实战篇】--阿里云百炼搭建MCP Agent
MCP协议(Model Communication Protocol,模型通信协议)是大语言模型(LLM)与外部系统或其他模型交互时的一种标准化通信框架,旨在提升交互效率、安全性和可扩展性。 目录 1.阿里云百炼--MCP 1.1.MCP 服务接…...
Android ExifInterface rotationDegrees图旋转角度,Kotlin
Android ExifInterface rotationDegrees图旋转角度,Kotlin import android.media.ThumbnailUtils import android.os.Bundle import android.util.Log import android.util.Size import android.widget.ImageView import androidx.appcompat.app.AppCompatActivity …...
linux 内核 ida机制分析
在描述ida之前,需要读者对linux 内核的radix-tree有一定的了解。关于radix-tree(基数树)的描述,作者在之前有专门的文章对其进行描述,这里不再赘述。 IDA是什么?内核文档中解释如下: /*** IDA description** The IDA is an ID allocator which does not provide the ab…...
linux-定时任务清理buffer、cache
在清理 buffer 和 cache 之前,调用 sync 命令是一个好习惯。sync 会将文件系统缓冲区中的数据强制写入磁盘,确保数据的一致性,避免数据丢失的风险。以下是改进后的脚本,增加了多个 sync 语句: 1、脚本内容:…...
Linux常用命令整理
Linux 系统提供了大量常用命令行工具,涵盖文件操作、权限管理、网络诊断、软件安装、系统监控、脚本编程等各个方面。下面按照不同功能类别,整理常用的 Linux 命令及其中文说明和使用示例。 文件与目录操作 ● ls:列出目录内容,用于显示指定目录下的文件和子目录。常用参数…...
Python爬虫第14节-如何爬取Ajax的数据
目录 前言 一、什么是Ajax 1.1 具体举例 1.2 基本原理 二、Ajax的分析 2.1 查看请求 2.2 过滤请求 三、解析提取Ajax 结果 3.1 分析请求 3.2 分析响应 四、Ajax抓取实战 前言 咱们在使用requests抓取网页的时候,常常会发现,得到的结果和在浏览…...
mac上面使用zip命令压缩一劳永逸
问题 需要将当前目录的文件和目录(包含隐藏目录)都要压缩近一个zip包,但同时部分目录我不想压缩进去例如:.idea这个种idea的配置目录就不想压缩进zip包。 命令 zip -r flask-dev.zip . -x "*.idea*"-r:递归目录.:当前…...
错误地使用了 app.use() 来注册全局组件
我是import globalComponent from "/components"; /* eslint-disable */ // ts-nocheck // Generated by unplugin-vue-components // Read more: https://github.com/vuejs/core/pull/3399 export {}; /* prettier-ignore */ declare module vue { export interface…...
Python Django基于协同过滤算法的招聘信息推荐系统【附源码、文档说明】
博主介绍:✌Java老徐、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专栏推荐订阅👇&…...
鹰角:EMR Serverless Spark 在《明日方舟》游戏业务的应用
作者:鹰角网络高级大数据研发 茅旭辉 背景介绍 鹰角网络是一家年轻且富有创新的游戏公司,致力于开发充满挑战性和艺术价值的游戏产品。公司目前涵盖了游戏开发、运营和发行的全生命周期业务。随着业务的扩展,鹰角网络从单一爆款游戏发展到多…...
C语言学习之两个数值交换的算法
前言:本篇文章仅仅是作为作者复习使用 在C语言中,交换两个两个变量的数值是很常见的应用。在学习到指针的时候,我们已经掌握了几种交换的算法了。今天我来做一个小汇总 1创建第三个变量 缺点:需要创造第三个变量 2加减交换 缺点…...
CExercise_13_1排序算法_2归并排序
题目:CExercise_ 请手动实现归并排序算法: void merge_sort(int arr[], int len) 如果学有余力,不妨尝试一下多种临时数组的方式: 1.局部变量数组 2.全局变量数组 3.堆数组 关键点 分析: : 代码 代码块解决…...
富斯i6遥控器,无法切换通道解决办法
开机后长按【OK】键,进入设置 按【DOWN】选择【setup】 点击【ok】进入设置 再点击【OK】进入Reverse 将2设置为下,长按【cancel】保存,返回到设置 进入【Aux.channels】 将第二行【Source】设置为【Source SwC】,长按【CANCEL】保存并返回。…...
Maven 编译指定模版
背景 基于SpringCloud 做的微服务项目,很多都是依赖公共模块下的包,并且多模板都是在一个项目下的。 问题 每次打包都很编译整个项目下的所有模块。这样太耗时间了,把流水线的时间拖的太长了。 解决方案 在maven打包时,我们选…...
solr安装及ik中文分词器配置
提示:solr9.x版本需要jdk17,solr8.x版本需要jdk8 1、Solr 简介 Solr 是Apache 下的一个顶级开源项目,采用 Java 开发,它是基于 Lucene 的全文搜索服务器。Solr 提供了比 Lucene 更为丰富的查询语句,同时实现了可配置、…...
详解LeetCode中用字符串实现整数相加,字符串转整数及其溢出处理详解
目录 题目背景 代码整体逻辑 变量初始化 逐位相加过程 处理最后进位 结果反转 示例演示 总结 在LeetCode中,有一道经典的算法题是实现两个字符串形式的非负整数相加,今天我们就来深入分析一段用C实现该功能的代码,探究其背后的逻辑与…...
vue学习笔记06
学习的课程地址:老杜Vue视频教程,Vue2,Vue3实战精讲,一套通关vue_哔哩哔哩_bilibili 1、vue程序初体验 2、vue核心技术(基础) 3、Vue组件化 前面参见: vue学习笔记01 vue学习笔记02 vue学习笔记03 vue学习笔记…...
如何查看自己抖音的IP属地?详细教程及如何修改
在当今互联网时代,IP属地信息已成为各大社交平台(如抖音、微博、快手等)展示用户真实网络位置的重要功能。以下是关于如何查看抖音IP属地的详细教程及常见问题解答,帮助您快速了解相关信息: 一、如何查看抖音账号的IP属…...
熟悉Linux下的编程
可能 目录 熟悉Linux下Python编程的含义及与非Linux环境编程的区别 一、核心含义解析 二、与非Linux环境的关键区别 三、典型应用场景对比 四、能力培养建议 openfoem的下载之路: 方法一:使用cd命令 方法二:使用快捷方式 方法三&am…...
Uniapp:获取当前定位坐标
目录 一、出现场景二、具体使用 一、出现场景 在项目的开发中,会出现打卡、定位当前位置的功能,那我们如何获取当前位置呢?这就需要使用getLocation来获取当前位置坐标 二、具体使用 uni.getLocation({type: wgs84, // 返回可以用于uni.op…...
GitHub实用手册
文章目录 一、GitHub 的定义二、GitHub 的主要功能三、GitHub 的优势四、GitHub 的使用相关工具GitSourcetreeGithub-Desktop 一、GitHub 的定义 GitHub 是一个基于 Git 的分布式版本控制系统,它允许开发者在本地和远程仓库中管理代码版本,支持多人协作…...
【从零实现高并发内存池】Central Cache从理解设计到全面实现
📢博客主页:https://blog.csdn.net/2301_779549673 📢博客仓库:https://gitee.com/JohnKingW/linux_test/tree/master/lesson 📢欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正! &…...
Dijkstra算法求解最短路径—— 从零开始的图论讲解(2)
前言 在本系列第一期:从零开始的图论讲解(1)——图的概念,图的存储,图的遍历与图的拓扑排序-CSDN博客 笔者给大家介绍了 图的概念,如何存图,如何简单遍历图,已经什么是图的拓扑排序 按照之前的学习规划,今天笔者将继续带大家深入了解图论中的一个核心问题&#x…...
Spring AI 发布了它的 1.0.0 版本的第七个里程碑(M7)
Spring AI 发布了它的 1.0.0 版本的第七个里程碑(M7),下个月就是 RC1,紧接着就是 GA!,对于我们 Java 开发者来说,这绝对是个值得关注的好消息! 但是对于 Java 学习者来说,…...
如何从 GitHub 镜像仓库到极狐GitLab?
最近 GitHub 封禁中国用户的事情闹得沸沸扬扬,虽然官方发布的报道说中国用户被限制登录是因为配置错误导致,已经撤回了更新,中国用户已经可以正常使用。但是这就像横在国内开发者和企业头上的“达摩克利斯之剑”。为了避免 GitHub 不可用而带…...
大象机器人推出myCobot 280 RDK X5,携手地瓜机器人共建智能教育机
摘要 大象机器人全新推出轻量级高性能教育机械臂 myCobot 280 RDK X5,该产品集成地瓜机器人 RDK X5 开发者套件,深度整合双方在硬件研发与智能计算领域的技术优势,实现芯片架构、软件算法、硬件结构的全栈自主研发。作为国内教育机器人生态合…...
在Android Studio中,`Settings`里的Gradle路径、环境变量以及`gradle - wrapper.properties`文件关联
在Android Studio中,Settings里的Gradle路径、环境变量以及gradle - wrapper.properties文件关联 Android Studio中Settings里的Gradle路径 在Android Studio的Settings(Preferences ) -> Build, Execution, Deployment -> Build Tools -> Gradle 中: Use defau…...
用react 写一个可左右滑动的柱状图
效果图 目录 效果图 ✅ 项目结构 🚀 创建项目步骤 1️⃣ 打开终端或命令行,创建新项目: 2️⃣ 安装 recharts 图表库: 3️⃣ 替换默认代码: 4️⃣ 启动项目: ✅ 项目结构 scrollable-bar-chart/ ├…...
【正点原子STM32MP257连载】第四章 ATK-DLMP257B功能测试——MIPI LCD测试
1)实验平台:正点原子ATK-DLMP257B开发板 2)浏览产品:www.alientek.com 3)全套实验源码手册视频下载:正点原子资料下载中心 文章目录 第四章 ATK-DLMP257B功能测试——MIPI LCD测试4.3 MIPI LCD测试4.3.1 使…...
【正点原子STM32MP257连载】第四章 ATK-DLMP257B功能测试——RS485串口测试
1)实验平台:正点原子ATK-DLMP257B开发板 2)浏览产品:www.alientek.com 3)全套实验源码手册视频下载:正点原子资料下载中心 文章目录 第四章 ATK-DLMP257B功能测试——RS485串口测试 第四章 ATK-DLMP257B功能…...
Sui 的工具生态简化了游戏开发者的 Web3 集成流程
希望利用 Web3 独特协同效应的游戏开发者,常常在强大的区块链功能与流畅的游戏体验之间难以权衡。许多区块链方案要求大幅重构游戏基础架构,增加了开发难度,甚至需要学习全新的智能合约语言。而 Sui 通过直观的工具消除这一阻力,使…...
Vue 3 的组合式 API-hooks
Vue 3 的组合式 API 组合式 API 是 Vue 3 的核心特性之一,它允许开发者将组件的逻辑拆分为可复用的函数。组合式 API 的主要特点是 逻辑复用:将逻辑提取到独立的函数中,方便在多个组件中复用。组织清晰:将相关的逻辑分组&#x…...
AOSP Android14 Launcher3——底部任务栏Taskbar详解
前言:Launcher3中底部Taskbar和Navbar,或者说中文里面的术语导航栏,这几个词是很容易让人混淆的地方。本文要介绍的是Taskbar。从字面上意思来看,Taskbar就是任务栏,任务栏是Launcher3中一个重要的组件,尤其…...
QGraphicsView、QGraphicsScene和QGraphicsItem图形视图框架(五)QGraphicsView的缩放和移动
QGraphicsView自带滚动条的显示,但是大部分的需求样式都不需要滚动条,并且要通过鼠标来控制视图的缩放和移动。需要重写QGraphicsView实现。 一、相关函数 1.scale void QGraphicsView::scale(qreal sx, qreal sy) 按(sx,sy&…...
算法——果蝇算法
果蝇算法(Fruit Fly Optimization Algorithm,FOA)是一种受果蝇觅食行为启发而开发的群智能优化算法。以下从算法原理、算法流程、算法特点等方面为你详细讲述: 算法原理 果蝇本身具有优于其他物种的嗅觉和视觉。在觅食过程中&am…...
重返JAVA之路——图书管理系统
目录 一、功能介绍 二、设计模块 三、系统构建 1.book模块 2.operation模块 输入循环和验证 查找图书并处理借阅状态 未找到图书的处理 查找删除图书功能实现 未找到图书的处理 图书查找与归还 work方法实现图书信息输出 3. user模块实现 四、主菜单 一、功能介绍 …...
【16】数据结构之基于树的排序算法篇章
目录标题 选择排序简单选择排序树形选择排序 堆排序堆的定义Heap小跟堆大根堆堆的存储堆的代码设计堆排序的代码设计 排序算法综合比较 选择排序 基本思想:从待排序的序列中选出最大值或最小值,交换该元素与待排序序列的头部元素,对剩下的元…...
Uniapp:确认框
目录 一、 出现场景二、 效果展示三、具体使用 一、 出现场景 在项目的开发中,会经常出现删除数据的情况,如果直接删除的话,可能会存在误删,用户体验不好,所以需要增加一个消息提示,提醒用户是否删除。 二…...
pyswmm实现洪涝模拟
准备好.inp文件作为SWMM模型输入,调用pyswmm模块执行模拟,返回节点溢流量(flooding)作为积水量的初步表征。 代码: from pyswmm import Simulation, Nodes import pandas as pddef run_swmm_simulation(inp_file, ou…...
My Diary Pro:记录生活,珍藏回忆
我的日记My Diary Pro是一个非常好用的手机日记软件,可以使用它来记录每日生活日常,不少的用户可能都知道在生活之中可能会发生一些比较的重要的事情,实际上我们都可以将这些内容记录下来。包括个人观点,旅行游记,心情…...
CSRF(跨站请求伪造)漏洞概述
CSRF(跨站请求伪造)漏洞概述 一、什么是 CSRF 攻击者诱导已登录用户在不知情的情况下,对受信任网站执行未授权操作。 简单说:你登录着网站A,攻击者诱导你访问某个恶意链接,使网站A误以为是你自己发出的操作(比…...
[Java实战经验]对象拷贝
目录 谨慎重写clone方法重写clone()支持深拷贝带来的问题 合适的深拷贝 首先,对于不可变的类,我们不应该实现Cloneable接口,因为不可变类不需要拷贝,直接引用即可,实现Cloneable接口只会造成浪费。 对于Java可变类来说…...
WAF防火墙:构筑Web应用安全的“隐形护盾”
在数字化时代,Web应用已成为企业服务与用户交互的核心窗口。然而,随之而来的SQL注入、跨站脚本攻击(XSS)、DDoS攻击等威胁,时刻考验着网站的安全防线。Web应用防火墙(WAF)作为关键防护工具&…...
开源智慧巡检——无人机油田AI视频监控的未来之力
油田巡检,关乎能源命脉,却常受困于广袤地形、高危环境和人工效率瓶颈。管道泄漏、设备故障、非法闯入——这些隐患稍有疏忽,便可能酿成大患。传统巡检已无法满足现代油田对安全与效率的需求,而无人机油田巡检系统正以智能化之力重…...
【2025年泰迪杯数据挖掘挑战赛】B题 完整论文 模型建立与求解
目录 2025年泰迪杯数据挖掘挑战赛 B题完整论文:建模与求解 Matlab代码一、问题重述二、模型假设与符号说明2.1 模型基本假设2.2 符号说明 三、数据预处理**问题一:志愿者身体活动信息的统计分析****问题二:身体活动MET值的实时估计模型构建**…...
Chromium 134 编译指南 macOS篇:安装 Xcode(二)
1. 引言 在Chromium开发的征程中,为macOS平台构建正确的开发环境是成功编译的关键基础。继上一篇系统环境准备后,本文将重点介绍Xcode的安装与配置过程。作为macOS上不可或缺的集成开发环境(IDE),Xcode为Chromium 134的编译提供了必要的编译…...
软件定义网络(SDN):重塑未来网络的革命性架构
在当今数字化时代,网络已成为企业、云计算、5G通信和物联网(IoT)的核心基础设施。然而,传统网络架构由于其封闭、静态和分布式的特性,难以应对快速变化的业务需求。软件定义网络(Software-Defined Networki…...
Java虚拟机面试题:类加载机制
🧑 博主简介:CSDN博客专家,历代文学网(PC端可以访问:https://literature.sinhy.com/#/?__c1000,移动端可微信小程序搜索“历代文学”)总架构师,15年工作经验,精通Java编…...