【面试高高手】 —— Java基础(36题)

news2024/11/24 12:41:24

文章目录

    • 1. 八大基本数据类型分类
    • 2. 重写和重载的区别
    • 3. int和integer区别
    • 4. Java的关键字
    • 5. 什么是自动装箱和拆箱?
    • 6. 什么是Java的多态性?
    • 7. 接口和抽象类的区别?
    • 8. Java中如何处理异常?
    • 9. Java中的final关键字有什么作用?
    • 10. 什么是Java的序列化和反序列化?
    • 11. Java中的String、StringBuilder、StringBuffer有什么区别?
    • 12. Java中的面向对象编程的四大特征是什么?
    • 13. Java中的equals()和hashCode()方法的作用是什么?
    • 14. 如何将字符串反转?
    • 15. "==" 和 "equal()" 方法区别?
    • 16. final,finally,finalize的区别 ?
    • 17. String中 intern() 方法的作用是什么 ?
    • 18. 什么是JVM,JRE,JDK ?
    • 19.Java语言有哪些优势 ?
    • 20.什么是构造方法 ?
    • 21.String类中有哪些常见方法 ?
    • 22.为什么要有 hashCode() ? (以"HashSet如何检查重复"为例子来说明为什么要有hashCode)
    • 23 为什么重写equals()时必须重写hahsCode()方法 ?
    • 24.包装类中的常量池技术有什么作用 ?
    • 25.什么是字符串常量池
    • 26.Java是按值传递还是按引用传递 ?
    • 27. Object类中有哪些常见的方法 ?
    • 28. Java中常见接口有哪些 ?
    • 29. 什么是异常?
    • 30.你是如何理解Java中的异常体系的 ?
    • 31.Error和Exception的区别是什么 ?
    • 32.throw 和 throws的区别是什么 ?
    • 33.Java中的常见异常有哪些 ?
    • 34. 说说你对内存可见性的理解?
    • 35.说下你对volatile关键字的理解?
    • 36.说下Java8有哪些新特性?

1. 八大基本数据类型分类

(1)第一类整数型:byte、short、int、long
(2)第二类浮点型:float、double
(3)第三类逻辑型:boolean
(4)第四类字符型:char

2. 重写和重载的区别

1、重载的规则:

①必须具有不同的参数列表。

②可以有不同的访问修饰符。

③可以抛出不同的异常。

2、重写方法的规则:

①参数列表必须完全与被重写的方法相同,否则不能称其为重写而是重载。

②返回的类型必须一直与被重写的方法的返回类型相同,否则不能称其为重写而是重载。

③访问修饰符的限制一定要大于被重写方法的访问修饰符。

④子类重写的方法抛出的异常类型不大于父类被重写的方法抛出的异常类型。

3.类的关系上的区别:

重写是子类和父类之间的关系,是垂直关系;重载是同一个类中方法之间的关系,是水平关系。

3. int和integer区别

  • 数据类型:int是java的基本数据类型,integer是int的包装类
  • 可空性:是一个基本数据类型,它不能表示空值(null)。如果一个 int 变量没有被显式初始化,它会被赋予默认值 0。Integer 是一个对象,它可以表示空值。你可以将 Integer 设置为 null,表示它没有值。
  • 性能:int 在内存中占用的空间较小,因为它是一个基本数据类型,不需要对象头和额外的存储空间。Integer 是一个对象,因此会占用更多的内存空间,并且在装箱(boxing,将int转换为Integer)和拆箱(unboxing,将Integer转换为int)时需要进行额外的操作,可能会影响性能。
  • 方法和操作:int 不具有方法或属性,只能进行基本的数学和比较操作。Integer 类具有丰富的方法,比如:equalsComparetotoString可以执行各种与整数相关的操作,例如转换为字符串、比较、解析等。

4. Java的关键字

(1)访问修饰符(3)
在这里插入图片描述(2)修饰方法、类、属性和变量(9)
在这里插入图片描述
(3)定义类、接口、抽象类和实现接口、继承类的关键字、实例化对象6个
在这里插入图片描述
(4)包的关键字2个
在这里插入图片描述
(5)数据类型的关键字12个
在这里插入图片描述
(6)条件循环(共12个)
在这里插入图片描述
(7)错误处理5个
在这里插入图片描述
总结:
java的关键字一共有51个关键字+2个保留字,一共是53个关键字,而且关键字都是小写!
保留关键字:

  • const
  • goto
    疑问:但是在做题过程中,true、false、null并不是java的关键字,也就是说java关键字只有50个?
    java中的true、false、null在java中不是关键字,也不是保留字,他们只是显示常量值,但是在java中不能使用他们作为标识符。

5. 什么是自动装箱和拆箱?

  • 装箱:基本类型转换成封装类型,这一过程是自动进行的,无需显式代码。
  • 拆箱:封装类型转换成基本类型 这么一个过程。,这一过程也是自动进行的。
    作用:自动装箱和拆箱使得在基本数据类型和包装类型之间转换变得更加方便,同时减少了代码的冗余。

6. 什么是Java的多态性?

通俗来说:就是多种形态,具体点就是去完成某个行为,当不同的对象去完成时会产生出不同的状态!

比如stuendt是一个父类,那么在操场上上体育课的学生和在教室里面的学生就是它的子类。这时上课铃声响了,上体育课的学生去操场,在教室里面上课的学生则是回教室,不同的学生有着不同的反应,这就是多态。

作用:灵活性和可维护性、代码重用、接口的多实现:

7. 接口和抽象类的区别?

定义的关键字不同:接口interface,抽象类:abstract。
子类继承或实现关键字不同:接口:implement、extends。
类型扩展不同:抽象类是单继承,而接口是多继承。
方法访问控制符:抽象类无限制,只是抽象类中的抽象方法不能被 private 修饰;而接口有限制,接口默认的是 public 控制符。
属性方法控制符:抽象类无限制,而接口有限制,接口默认的是 public 控制符。
方法实现不同:抽象类中的普通方法必须有实现,抽象方法必须没有实现;而接口中普通方法不能有实现,但在 JDK 8 中的 static 和 defualt 方法必须有实现。
静态代码块的使用不同:抽象类可以有静态代码块,而接口不能有。

8. Java中如何处理异常?

使用try…catch

9. Java中的final关键字有什么作用?

final可以用来修饰的结构:类、方法、变量
final用来修饰一个类:此类不能被其它类继承。
final 用来修饰方法 :表明此方法不可以被重写
final 用来修饰变量 ,此时变量就相当于常量

10. 什么是Java的序列化和反序列化?

序列化是指将对象的状态转换为字节流的过程,以便可以在网络上传输或永久保存到磁盘中。反序列化则是将序列化的字节流恢复为对象的过程。在 Java 中,序列化和反序列化是通过 ObjectInputStream 和 ObjectOutputStream 实现的。

为什么我们需要序列化?

在现代应用程序中,对象的状态通常需要在不同的系统、进程和线程之间进行传递。例如,在分布式系统中,对象可能需要在不同的服务器之间进行传递。另一个例子是在缓存中存储对象时,对象需要序列化以便可以保存到磁盘中。

11. Java中的String、StringBuilder、StringBuffer有什么区别?

String声明的是不可变对象,每次操作都会产生新的String对象,然后指针在指向新的对象。

而StringBuffer、StringBuilder可以在原有的对象基础上进行操作。
StringBuffer、StringBuiler的区别在于StringBuffer是线程安全的,StringBuilder是非线程安全的

StringBuilder >StringBuffer > String
但是StringBuiler的效率要高于StringBuffer。

12. Java中的面向对象编程的四大特征是什么?

封装、继承、多态和抽象是面向对象编程的四大特征。

13. Java中的equals()和hashCode()方法的作用是什么?

equals() 方法用于比较对象的内容是否相等,而 hashCode() 方法用于为对象生成一个散列码,以便在集合类(如HashMap、HashSet)等数据结构中进行高效的查找和比较操作。这两个方法通常需要保持一致性,即如果两个对象在逻辑上相等,则它们的散列码也应该相等,以确保正确的集合操作。

14. 如何将字符串反转?

使用 StringBuilder 或者 stringBuffer 的 reverse() 方法。

15. “==” 和 “equal()” 方法区别?

equals() 比较的是两个对象的值(内容)是否相同。
“==” 比较的是两个对象的引用(内存地址)是否相同,也用来比较两个基本数据类型的变量值是否相等。

16. final,finally,finalize的区别 ?

  1. final用于声明变量,方法和类,分别表示常量,方法不可重写,类不可继承。
  2. finally是异常处理语句结构的一部分,表示无论是否出现总是会执行的代码段。
    3.finalize是Object类中的一个方法,在垃圾收集器执行的时候,会调用被回收对象的finalize()方法,供垃圾收集时执行其他资源回收等操作,例如关闭文件,释放连接等操作。

17. String中 intern() 方法的作用是什么 ?

如果字符串常量池中已经包含了一个等于此String对象的字符串,则返回常量池中字符串的引用(内存地址),否则将新的字符串放入常量池中,并返回新字符串的引用(内存地址)。

18. 什么是JVM,JRE,JDK ?

JVM
JVM。是Java虚拟机(Java Virtual Machine) 的缩写,用于运行Java字节码文件(*.class文件)。JVM针对不同的操作系统都有特性的实现(例如Windows,Linux,nacOC),目的是使用相同的字节码啊,在不同操作系统运行结果相同,是Java实现跨平台的核心机制。Java中默认虚拟机为HotSpot VM,除此之外还有JRockit(BEA),j9(IBM),TaoBaoVM(淘宝)等虚拟机;
JRE
JRE全称Java Runtime Environment(Java运行时环境)。JRE包括Java虚拟机和Java程序我所需要的核心类库等,如果想要运行一个开发好的Java程序,计算机中只需要安装JRE即可。
JDK
JDK是Java开发工具包(Java Development Kit)的缩写,是提供给Java开发人员使用的,JDK中包含JRE以及开发,调节和监视应用程序的工具,编译工具(javac.exe),打包工具(jar.exe),Java监控和管理平台(jConsole,jvisualvm)等,

JDK包含JRE,JRE包含JVM。 所以JDK > JRE > JVM。

19.Java语言有哪些优势 ?

1.面向对象(封装,继承,多态);
2.跨平台(Java虚拟机实现了平台无关性) ;
3.可靠性;
4.安全性;
5.支持多线程;
6.支持网络编程;
7.执行方式采用了解释执行 + 编译执行并存的方式;
8.实践应用案例很丰富。

20.什么是构造方法 ?

构造方法名称与类名一致;
构造方法没有返回值类型这一结构,不能用void声明构造函数;
创建对象时,使用new关键字调用执行构造方法;
一个类即使没有声明构造方法,Java会提供默认的无参构造方法。

21.String类中有哪些常见方法 ?

  1. indexOf() :返回指定字符的索引。
  2. charAt() :返回指定索引处的字符。
  3. replace():字符串替换。
  4. substring():截取字符串。
  5. split():分割字符串,返回一个分割后的字符串数组。
  6. trim():去除字符串两端空白。
  7. getBytes():返回字符串的byte类型数组。
  8. length():返回字符串长度。
  9. toLowerCase()/toUpperCase():将字符串转成小写/大写字母。
  10. equals():字符串比较。

22.为什么要有 hashCode() ? (以"HashSet如何检查重复"为例子来说明为什么要有hashCode)

1.当你把对象加入HashSet时,HashSet会先获取该对象的hashCode值,来计算该对象加入的位置,同时与其他已经加入的对象的hashcode值作比较。
2.如果没有重复的hashCode,HashSet会假设对象没有重复出现,正常添加。
3.如果发现有相同hashCode值的对象,这时会条用equals()方法来检查hashCode相等的对象是否真的相同。
4.如果两个相同,HashSet就不会其加入操作成功。
5.如果两者不同,就会重新散列到其他位置。
6.这样就大大减少了equals()的执行次数,相应就提高了执行速度。

23 为什么重写equals()时必须重写hahsCode()方法 ?

因为 equals() 方法和 hashCode() 方法之间存在一定的协作关系,它们一起确保对象在放入哈希表等数据结构中时的正确行为。
为了确保在使用哈希表等数据结构时的一致性和性能,通常建议在重写 equals() 方法时也重写 hashCode() 方法,并确保它们之间的逻辑一致性。否则,可能会导致对象在集合中的不正确行为和性能问题。

equals() 方法和hashCode()方法之间的关系应符合。

  1. 如果两个对象相同(即:用equals比较返回true),那么它们的hashCode值一定要相同。
  2. 如果两个对象的hashCode相同,他们并不一定相同(用equals比较)。

协作关系: 在哈希表(如 HashMap、HashSet)中,对象的 hashCode 值用于确定对象在表中的存储位置,而 equals 方法用于检查两个对象是否相等。如果两个对象被认为是相等的(即 equals 方法返回 true),那么它们的 hashCode 值应该相同。

性能: 如果你没有正确实现 hashCode() 方法,那么哈希表的性能可能会受到影响。在哈希表中,快速查找和插入的速度依赖于对象的 hashCode。如果 hashCode 方法不恰当,可能会导致哈希冲突,降低哈希表的性能。

一致性: 根据Java规范,如果两个对象在 equals() 方法中被认为是相等的,那么它们的 hashCode 值必须相同。这是因为在哈希表中,首先会根据 hashCode 的值来查找潜在的匹配项,然后再使用 equals 方法来确保匹配的准确性。

综上所述,在每个覆盖了equals()方法的类中,也必须覆盖hashCode()方法,如果不这样做的话,就会违反Object.hashCode的通用约定,从而导致HashSet和HashTable等集合。另外,可以避免equals()被频繁调用,减少性能开销。

24.包装类中的常量池技术有什么作用 ?

  1. Byte,Short,Integer,Long创建范围在[-128 , 127]的缓存数据。
    2.Character创建范围在[ 0 , 127]的缓冲数据。
    3.如果数据处于缓存范围,不必重新创建对象,直接从缓存中获取,减少对象重复创建所带来的内存与性能开销。
    4.如果数据超出缓存范围,才会创建新的对象。

25.什么是字符串常量池

字符串常量池确保相同内容的字符串只存储一次。这意味着如果两个字符串具有相同的字符序列(内容相同),它们将引用相同的字符串对象。
如果通过new创建String对象那么将是一个新的对象。

使用intern()方法: String类提供了一个intern()方法,可以用于显式将字符串对象添加到字符串常量池中。如果需要确保字符串对象在常量池中存在,可以使用这个方法。

String str1 = "hello"; // 创建一个字符串对象,存储在常量池中
String str2 = "hello"; // 直接引用常量池中的同一字符串对象

String str3 = new String("hello"); // 创建一个新的字符串对象,存储在堆内存中
String str4 = str3.intern(); // 使用intern()方法将字符串对象添加到常量池中

System.out.println(str1 == str2); // true,引用同一常量池对象
System.out.println(str1 == str3); // false,不同对象
System.out.println(str1 == str4); // true,引用同一常量池对象

26.Java是按值传递还是按引用传递 ?

在Java中,都是值传递,如果参数时基本类型,复制参数的值,传递给方法。如果参数时引用类型,复制对象参数的Heap堆中内存地址值,传递给方法。

27. Object类中有哪些常见的方法 ?

  • getClass 方法:获取对象的运行时 class 对象,class 对象就是描述对象所属类的对象。
  • hashCode 方法:该方法主要用于获取对象的散列值。Object 中该方法默认返回的是对象的堆内存地址。
  • clone 方法
  • toString 方法
  • finalize 方法
  • wait方法
  • notify 方法

28. Java中常见接口有哪些 ?

1.集合框架:Collection接口,List接口,Set接口,Map接口;
2.比较器:Comparator接口,Comparable接口;
3.IO操作:Closeable接口(可以关闭的文件流);
4.标记接口:RandomAccess接口(集合元素随机访问),Serializable接口(序列化),Cloneable接口(对象克隆);
5.线程接口:Runnable接口。

29. 什么是异常?

程序中的错误统称为异常。

30.你是如何理解Java中的异常体系的 ?

  • Throwable是所有异常类的父类;
    • Error 程序不可处理,如内存溢出,JVM异常
    • Exception 程序可处理。
    • 可查异常:最典型的是IO类异常,要么用try-catch语句捕获它,要么用throws子句声明抛出它,否则编译不会通过。
    • 不可检查异常:
      • 运行时异常 使用try…catch捕获
      • 非运行时异常 编译不通过。

31.Error和Exception的区别是什么 ?

  1. Error类型的错误通常为虚拟机相关错误,如系统崩溃,内存不足,堆栈溢出等,编译器不会对这类错误进行检测,JAVA应用程序也不应对这类错误进行捕获,一旦这类错误发生,应用程序通常会被终止,仅靠应用程序本身无法恢复;
  2. Exception类型的异常是可以在应用程序中进行捕获并处理的,通常遇到这种错误,应对其进行处理,使应用程序可以继续正常运行。

32.throw 和 throws的区别是什么 ?

  • throw关键字用来抛出方法或者代码块中的异常对象,检查异常和非检查异常都可以被抛出,在方法内部使用;
  • throws关键字用来标识该方法可以抛出的异常类型列表,在方法定义时,在参数列表之后和方法体之前进行定义。

33.Java中的常见异常有哪些 ?

  1. NullPointerException 空指针异常:调用未实例化的null引用,引发该异常;
  2. ClassNotFoundException 找不到类异常:按照类的完全限定名加载一个不存在的类(如反射时),会引发该异常;
  3. NumberFormatException 数字格式化异常:将字符串转换为数字时,如果该字符串中包含非数字内容时,会引发该异常;
  4. IndexOutOfBoundsException 下标越界异常:数组或字符串下标超出范围时,会引发该异常;
  5. IllegalArgumentException 不合法参数异常:传入参数不合法,引发该异常;
  6. ClassCastException 类型转换异常:转换不符合的Class类型,引发该异常;
  7. SQLException SQL异常:在操作数据库时,产生SQL语法错误时,会引发该异常;
  8. IOException 读写异常:对文件流进行IO读写操作发生错误时,会引发该异常;
  9. NoSuchMethodException 方法不存在异常:找不到调用方法,引发该异常。

34. 说说你对内存可见性的理解?

可以举例说明,一个公共变量a,三个线程,一个线程修改了a的值,其他两个线程可能看不到a变化后的值,这就是内存可见性问题。
原因是:为了提高处理速度,每个线程都会在 CPU 中维护一份共享变量的本地缓存,而线程对共享变量的所有操作都会在自己的本地缓存中进行。如果线程 A 更改了一个共享变量,线程 B 有可能看不到线程 A 的修改
解决方法:

  • 使用volatile关键字:
    将变量声明为volatile,这会告诉Java虚拟机确保所有线程都能看到最新的值。
    当一个线程修改了volatile变量的值,这个变化会立即被写入主内存,并且其他线程在读取该变量时会从主内存中获取最新值。

  • 使用synchronized关键字:
    使用synchronized块来对读写操作进行同步,确保同一时间只有一个线程能够访问共享变量。
    当一个线程获取了锁并修改了共享变量后,其他线程必须等待该线程释放锁才能访问该变量,这样可以确保可见性。

  • 使用java.util.concurrent包中的工具类:
    Java提供了一些并发工具类,如AtomicInteger、CountDownLatch、CyclicBarrier等,它们可以用来处理多线程可见性问题,而无需手动编写同步代码。
    这些工具类提供了原子操作和同步机制,可以确保对共享变量的修改对其他线程可见。

35.说下你对volatile关键字的理解?

volatile 是 Java 中的关键字,用于修饰变量。它的主要作用是确保多线程环境下的可见性和有序性,这意味着当一个线程修改了 volatile 变量的值时,其他线程可以立即看到这个修改。
volatile关键字的作用:

  • 可见性(Visibility): 在多线程环境下,当一个线程修改了 volatile 变量的值,这个变化对其他线程是可见的。这意味着当一个线程修改了 volatile 变量后,其他线程不会读取到过期的缓存值,而是能够看到最新的值。
  • 禁止指令重排序(Ordering): volatile 关键字还可以防止编译器和处理器对指令进行重排序。这确保了 volatile 变量的读写操作按照代码的顺序执行,而不会出现意外的指令重排。
  • 不保证原子性(Atomicity): volatile 关键字仅确保可见性和有序性,但不保证原子性。如果多个线程同时对同一个 volatile 变量进行写操作,可能会出现竞态条件。对于需要原子性操作的场景,应该使用 synchronized 或 java.util.concurrent 中的原子类。

适用场景: volatile 适用于一些简单的标志位或状态标识的操作,例如线程之间的信号通知。它不适合复杂的操作,如累加操作。

36.说下Java8有哪些新特性?

(1)接口的默认方法和静态方法:之前接口只能够做方法的声明,没有实现,Java8以后允许接口有一个默认的实现,必须使用default修饰符标记;

default void test(){}
static void test2(){}
  • 作用:
    • 向已有接口添加新方法:默认方法允许在已有的接口中添加新方法,而不会破坏已经实现了该接口的类。在Java 8之前,如果要向接口中添加新方法,所有实现该接口的类都必须提供该方法的实现,这可能导致破坏现有代码。
    • 接口的扩展性:默认方法提高了接口的扩展性。新的方法可以添加到接口中,而不会打破已有的实现类。这对于面向接口的编程非常有用,因为它允许接口逐渐演进而不影响已有代码。
    • Lambda 表达式和函数式编程:默认方法的引入与Lambda表达式一起,使接口更容易用于函数式编程。例如,Java标准库中的java.util.function包中的函数式接口使用了默认方法,这使得在使用Lambda表达式时,可以只实现一个或少数几个抽象方法。

(2)Lambda表达式:Lambda最直观的是将代码变得整洁。

     

(3)函数式接口:

  • Comparetor
  • Consumer
  • predicate(断言式接口)
  • Supplier
  • Function(功能型接口)

(4)方法引用:是用来直接访问类或者实例中的方法或者构造方法,这样代码的可读性会更高一些。
就是使用::来调用类中的方法:

在这里插入代码片

(5)Stream流:它允许你以声明式的方式处理数据集合。

  • 特点:
    • 内部迭代:
    • 只能遍历一次:当流遍历完成后,这个流就被消费掉了。
    • 可以并行处理: select.stream().parallel()

(6)Optional:为了解决空指针异常。并且让代码更加简洁,使用它我们不需要显式的进行空指针检测。
Optional + lambda实现比较字符串,并找到最长的字符串

import java.util.Arrays;
import java.util.List;
import java.util.Optional;

public class OptionalLambdaExample {

    public static void main(String[] args) {
        List<String> stringList = Arrays.asList("apple", "banana", "cherry", "date", "elderberry");

        Optional<String> longestString = stringList.stream()
                .reduce((s1, s2) -> s1.length() > s2.length() ? s1 : s2);

        longestString.ifPresent(s -> System.out.println("最长的字符串是: " + s));
    }
}

(7)Date/Time
(8)重复注解
(9)扩展注解的支持
(10)Base64
(11)JavaFx

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

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

相关文章

iview 的table表格组件使单元格可编辑和输入

表格的列定义中&#xff0c;在需要编辑的字段下使用render函数 template表格组件 <Table border :data"data" :columns"tableColumns" :loading"loading"></Table>data中定义table对象 table: {tableColumns: [{title: 商品序号,k…

服务断路器_Resilience4j的断路器

断路器&#xff08;CircuitBreaker&#xff09;相对于前面几个熔断机制更复杂&#xff0c;CircuitBreaker通常存在三种状态&#xff08;CLOSE、OPEN、HALF_OPEN&#xff09;&#xff0c;并通过一个时间或数量窗口来记录当前的请求成功率或慢速率&#xff0c;从而根据这些指标来…

【JVM】第三篇 JVM对象创建与内存分配机制深度剖析

目录 一. JVM对象创建过程详解1. 类加载检查2. 分配内存2.1 如何划分内存?2.2 并发问题 3. 初始化4. 设置对象头5. 执行<init>方法 二. 对象头和指针压缩详解三. JVM对象内存分配详解四.逃逸分析 & 栈上分配 & 标量替换详解1. 逃逸分析 & 栈上分配2. 标量替…

用纹理图集优化3D场景性能【Texture Atlas】

推荐&#xff1a;用 NSDT编辑器 快速搭建可编程3D场景 在 Unity 中开发移动应用程序时&#xff0c;确保一切都得到优化始终至关重要。 最大化帧速率使我们能够专注于优化脚本、烘焙灯光、修改对象等。 当我们将移动应用程序带入虚拟现实时&#xff0c;这一点变得更加重要。 虽…

嵌入式Linux应用开发-文件 IO

嵌入式Linux应用开发-文件 IO 第四章 文件 IO4.1 文件从哪来&#xff1f;4.2 怎么访问文件&#xff1f;4.2.1 通用的 IO 模型&#xff1a;open/read/write/lseek/close4.2.2 不是通用的函数&#xff1a;ioctl/mmap 4.3 怎么知道这些函数的用法&#xff1f;4.4 系统调用函数怎么…

基于微信小程序的健身小助手打卡预约教学系统(源码+lw+部署文档+讲解等)

文章目录 前言系统主要功能&#xff1a;用户的功能设计为&#xff1a;管理员的功能设计为&#xff1a;健身房的功能设计为&#xff1a;具体实现截图论文参考详细视频演示为什么选择我自己的网站自己的小程序&#xff08;小蔡coding&#xff09;有保障的售后福利 代码参考源码获…

QFrame类学习笔记

1、QFrame的作用 QFrame类继承于QWidget类&#xff0c;被QAbstractScrollArea, QLabel, QLCDNumber, QSplitter, QStackedWidget, and QToolBox等类继承。 QFrame作为许多基础控件的基类&#xff0c;提供许多成员方法给子类&#xff0c;实现子类的框架样式的设计。框架样式主要…

Android 13 定制化开发--开启相机或麦克风时,去掉状态栏上的绿色图标

Android 12 或更高版本的设备上&#xff0c;当应用使用麦克风或相机时&#xff0c;图标会出现在状态栏中。如果应用处于沉浸模式&#xff0c;图标会出现在屏幕的右上角。用户可以打开“快捷设置”&#xff0c;并选择图标以查看哪些应用当前正在使用麦克风或摄像头。图 1 显示了…

Ubuntu 安装Kafka

在本指南中&#xff0c;我们将逐步演示如何在 Ubuntu 22.04 上安装 Apache Kafka。 在大数据中&#xff0c;数以百万计的数据源生成了大量的数据记录流&#xff0c;这些数据源包括社交媒体平台、企业系统、移动应用程序和物联网设备等。如此庞大的数据带来的主要挑战有两个方面…

【数据结构】插入排序:直接插入排序、折半插入排序、希尔排序的学习知识总结

目录 1、排序的基本概念 2、直接插入排序 2.1 算法思想 2.2 代码实现 3、折半插入排序 3.1 算法思想 3.2 代码实现 4、希尔排序 4.1 算法思想 4..2 代码实现 1、排序的基本概念 排序是将一组数据按照预定的顺序排列的过程&#xff0c;排序的基本概念包括以下内容…

自学WEB后端01-安装Express+Node.js框架完成Hello World!

一、前言&#xff0c;网站开发扫盲知识 1.网站搭建开发包括什么&#xff1f; 前端 前端开发主要涉及用户界面&#xff08;UI&#xff09;和用户体验&#xff08;UX&#xff09;&#xff0c;负责实现网站的外观和交互逻辑。前端开发使用HTML、CSS和JavaScript等技术来构建网页…

数据结构--快速排序

文章目录 快速排序的概念Hoare版本挖坑法前后指针法快速排序的优化三数取中法小区间用插入排序 非递归的快速排序 快速排序的概念 快速排序是通过二叉树的思想&#xff0c;先设定一个值&#xff0c;通过比较&#xff0c;比它大的放在它的右边&#xff0c;比它小的放在它的左边…

Python中的数据常见问题

数据可视化在Python中是一个非常重要的主题&#xff0c;它可以帮助我们更好地理解和分析数据。无论是探索数据的特征&#xff0c;还是向其他人展示数据的结果&#xff0c;数据可视化都起到了关键作用。然而&#xff0c;在进行数据可视化时可能会遇到一些常见问题。本文将为您分…

基于微信小程序的同城家政服务预约系统(源码+lw+部署文档+讲解等)

文章目录 前言系统主要功能&#xff1a;具体实现截图论文参考详细视频演示为什么选择我自己的网站自己的小程序&#xff08;小蔡coding&#xff09;有保障的售后福利 代码参考源码获取 前言 &#x1f497;博主介绍&#xff1a;✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计…

DC电源模块关于宽电压输入和输出的范围

BOSHIDA DC电源模块关于宽电压输入和输出的范围 DC电源模块是一种电子设备&#xff0c;能够将输入的直流电源转换成所需的输出电源&#xff0c;用于供电各种电子设备。其中&#xff0c;关于宽电压输入和输出的范围&#xff0c;是DC电源模块常见的设计要求之一。本文将详细介绍…

嵌入式Linux应用开发-基础知识及GCC 编译器的使用

嵌入式Linux应用开发-基础知识及GCC 编译器的使用 第一章 HelloWorld 背后没那么简单1.1 交叉编译 hello.c1.2 请回答这几个问题1.3 演示 (...) 第二章 GCC 编译器的使用2.1 配套视频内容大纲2.1.1 GCC 编译过程(精简版)2.1.2 常用编译选项2.1.3 怎么编译多个文件2.1.4 制作、使…

深度学习:模型训练过程中Trying to backward through the graph a second time解决方案

1 问题描述 在训练lstm网络过程中出现如下错误&#xff1a; Traceback (most recent call last):File "D:\code\lstm_emotion_analyse\text_analyse.py", line 82, in <module>loss.backward()File "C:\Users\lishu\anaconda3\envs\pt2\lib\site-packag…

【Unity】LODGroup 计算公式

Unity 在配置 LodGroup 时&#xff0c;其分级切换的计算方法是按照物体在相机视野中占据的比例计算的。在运行时&#xff0c;如果相机视野范围&#xff08;Field of View&#xff09;没有改变&#xff0c;那么这个值可以直接换算成物体距离相机的距离。这里就讨论下如何计算得到…

ubuntu下用pycharm专业版连接AI服务器及其docker环境

一&#xff1a;用pycharm专业版连接AI服务器 1、首先在自己电脑上新建一个文件夹&#xff0c;后续用于映射服务器上自己所要用的项目文件 2、用pycharm专业版打开该文件夹&#xff0c;作为一个项目打开 3、然后在工具->部署->配置 4、配置中形式如下&#xff1a; 点击左…