Java入门高频考查基础知识1

Java语言是一种广泛应用于软件开发的高级编程语言,最初由Sun Microsystems于1995年发布。

        

以下是Java语言的一些特点和用途:

1. 跨平台性: Java是一种跨平台的编程语言,一次编写,到处运行(Write Once, Run Anywhere,WORA)。这得益于Java虚拟机(JVM),它使得编译后的Java程序可以在不同的操作系统上运行,只需安装相应平台的JVM。

2. 面向对象: Java是一种面向对象的编程语言,它支持面向对象的编程范式,例如封装、继承、多态等。

3. 自动内存管理: Java使用自动内存管理机制,开发人员无需手动管理内存分配和释放,而是通过垃圾回收器(Garbage Collector)来自动管理对象的生命周期。

4. 强类型: Java是一种强类型的语言,即要求在编译期间就对变量进行类型检查,避免了一些潜在的类型错误。

5. 丰富的类库支持:Java提供了强大且丰富的类库,包括用于网络、数据库、图形界面、多媒体处理等方面的API,能够支持各种应用程序的开发。

6. 多线程支持:Java内置了对多线程的支持,使用多线程可以实现并发执行,提高程序的性能和响应能力。

7. 应用广泛: Java被广泛应用于Web开发、企业级应用开发、移动应用开发(Android平台)、大数据、云计算等各个领域。

        

除了上述特点以外,Java还具有良好的安全性、稳定性和扩展性,因此备受开发者和企业的青睐。Java语言的不断更新和发展,使得它在现代软件开发中依然发挥着重要的作用。

        

让人前眼一亮提升表现分基础是关键:

    1. 理解基础概念:确保你对Java的基本概念有清晰的理解,比如OOP原则(封装、继承、多态和抽象)、集合框架、异常处理、多线程等。

    2.掌握语法和API:对Java语法要熟练掌握,熟悉标准库的API,如常用的java.lang,java.util等包。

    3.强化核心概念:数据结构如数组、链表和图,控制流程语句(if-else、switch、for、while、do-while),以及递归和迭代等。

    4.了解JVM:了解Java虚拟机(JVM)的基本工作原理,比如类加载器、内存模型、垃圾收集器等。

    5.编写干净的代码:练习编写清晰、高效的代码。面试时写代码要保持结构清晰,变量命名合理。

    6.调试技能:提升你的代码调试技能,了解如何在Java程序中使用调试工具。

    7.思路清晰:在解释你的思路时要清晰和条理,即使遇到不会的问题也不要慌张,可以尝试从不同角度思考问题。

    8.询问和反馈:如果对面试官提出的问题不理解,可以寻求澄清。完成问题后,询问面试官对你解答的反馈。

    9.保持更新:Java是一个不断发展的语言,要关注其新的特性和更新,比如 Java 8 引入的lambda表达式和Stream API。

    10.练习编程题:本文后面和后续更新相关的面试题来练习。

    11.模拟面试:进行模拟面试可以帮助你适应面试环境和时间压力,也是检验自己哪些地方需要改进的好方法。

    12.实战经验:如果有项目经历,要准备好如何清晰地描述你的项目和其中你负责的部分。

目录

一、Java中的基本数据类型,它们分别占用字节

二、Java中的面向对象特性

三、Java中的访问修饰符

四、Java中的自动装箱和自动拆箱

五、Java中的重载(overloading)和重写(overriding)

六、Java中的异常处理机制,Java中异常类

七、请解释一下Java中的final、finally、finalize各自的作用

八、String、StringBuilder和StringBuffer之间的区别

九、在Java中,==和equals()方法有什么区别?

十、ava深拷贝(deep copy)和浅拷贝(shallow copy)

十一、Java内存泄漏情况

十二、Java多态特性


一、Java中的基本数据类型,它们分别占用字节

Java 中的基本数据类型包括以下几种:

        1. byte:占用 1 个字节(8 位)
        2. short:占用 2 个字节(16 位)
        3. int:占用 4 个字节(32 位)
        4. long:占用 8 个字节(64 位)
        5. float:占用 4 个字节(32 位)
        6. double:占用 8 个字节(64 位)
        7. char:占用 2 个字节(16 位)
        8. boolean:理论上占用 1 个位
,但在实际中可能会占用更多的空间

需要注意的是,基本数据类型在不同的平台上所占的字节数可能会有所不同,因为这些大小是由 Java 语言规范规定的,而不是由底层硬件规定的。

        

二、Java中的面向对象特性

Java 中的面向对象特性主要包括以下几个方面:

        1. 封装(Encapsulation):封装是指将数据和操作数据的方法捆绑在一起,以防止对数据的意外修改和滥用。在 Java 中,可以通过访问控制符(如 public、protected、private)来实现封装,确保数据只能通过规定的方式进行访问和修改。

        2. 继承(Inheritance):继承是面向对象编程中的重要概念,它允许一个类(子类)从另一个类(父类)中继承属性和方法,并可以在此基础上进行扩展和修改。通过继承,可以实现代码的重用,并建立类之间的层次关系。

        3. 多态(Polymorphism):多态是指同一操作作用于不同的对象上会有不同的行为。在 Java 中,多态性可以通过方法重载和方法重写来实现。方法重载是在同一个类中,方法名相同但参数列表不同的多个方法;方法重写是子类重写父类的方法,实现不同的行为逻辑。

        4. 抽象(Abstraction):抽象是指将具有共性的内容提取出来形成类的方式。在 Java 中,可以通过抽象类(abstract class)和接口(interface)来实现抽象。抽象类不能实例化,而接口只提供方法声明而不包含方法的实现,通过这两种方式可以实现对业务逻辑的抽象描述。

        

这些面向对象特性使得 Java 编程更加灵活和易于维护,同时也有助于提高代码的可读性和可重用性。

        

三、Java中的访问修饰符

在Java中,访问修饰符用于控制类、方法和变量的访问级别。Java中有四种访问修饰符:

  1. public:public修饰符是最为开放的访问级别,被修饰的成员可以在任何地方被访问,其他类可以自由地访问、继承和重写public成员。

  2. protected:protected修饰符对于当前包内的类和子类是可见的。外部包的类无法访问protected成员,但如果子类在不同的包中,可以访问其父类的protected成员。

  3. default(默认修饰符):如果没有显式指定访问修饰符,则默认使用default修饰符。默认修饰符对于同一包中的类是可见的,但对于不同包中的类是不可见的。

  4. private:private修饰符是最为限制的访问级别,被private修饰的成员只能在声明它的类中访问。其他类无法直接访问、继承或重写private成员。

下面是一些使用访问修饰符的例子:

public class MyClass {public int publicVariable;protected int protectedVariable;int defaultVariable;private int privateVariable;public void publicMethod() {// 公共方法的实现}protected void protectedMethod() {// 受保护方法的实现}void defaultMethod() {// 默认方法的实现}private void privateMethod() {// 私有方法的实现}
}

尽管Java提供了这些访问修饰符,但良好的编程实践建议限制对类的直接访问,使用public方法来访问和修改类的状态。这有助于封装和维护代码的稳定性。同样地,类的成员变量也应该尽可能地私有化,通过公共方法来操作它们。

        

四、Java中的自动装箱和自动拆箱

在Java中,自动装箱(Autoboxing)和自动拆箱(Unboxing)是编译器提供的功能,用于在基本数据类型和对应的包装类之间进行自动转换。

自动装箱是指将基本数据类型自动转换为对应的包装类对象。例如,当你将一个`int`类型的值赋给一个`Integer`类型的变量时,编译器会自动将`int`类型的值装箱为`Integer`对象。这个过程是隐式的,不需要显式地调用构造函数。例如:

int number = 10;
Integer obj = number; // 自动装箱

自动拆箱是指将包装类对象自动转换为对应的基本数据类型。例如,当你将一个`Integer`对象赋给一个`int`类型的变量时,编译器会自动将`Integer`对象拆箱为`int`类型的值。这个过程也是隐式的,不需要显式地调用方法。例如:

Integer obj = 20;
int number = obj; // 自动拆箱

自动装箱和自动拆箱使得在基本数据类型和包装类之间进行转换更加方便,可以使代码更简洁易读。然而,需要注意的是,自动装箱和自动拆箱可能会带来一些性能开销,因为它们涉及到频繁的对象创建和销毁。在某些情况下,手动进行装箱和拆箱操作可能会更加高效。

        

五、Java中的重载(overloading)和重写(overriding)

在 Java 中,重载(overloading)和重写(overriding)是面向对象编程中常用的两种概念,它们分别用于描述在类中的方法的多态性。

        

重载(overloading)指的是在同一个类中,可以存在多个同名的方法,但它们的参数列表不同。重载的方法可以有不同的返回类型,但是参数列表必须不同。在调用重载的方法时,编译器会根据传入的参数自动匹配合适的方法。重载方法的返回类型不影响方法的区分度,因此不能以返回类型作为重载的条件。

举个例子:

public class OverloadExample {public int add(int a, int b) {return a + b;}public double add(double a, double b) {return a + b;}
}

在上面的例子中,add 方法被重载了,分别接受不同类型的参数。

        

重写(overriding)指的是子类重新定义了父类中已有的方法,方法名、参数列表和返回类型都相同。重写的方法可以访问父类中定义的方法,但是不能重新定义父类方法的访问权限。重写通常用于实现多态性,即父类引用指向子类对象时,调用的方法是子类中重写的方法。

举个例子:

class Animal {public void makeSound() {System.out.println("Some sound");}
}class Cat extends Animal {@Overridepublic void makeSound() {System.out.println("Meow");}
}

在上面的例子中,Cat 类重写了 Animal 类中的 makeSound 方法。

        

总的来说,重载是一个编译时的概念,而重写是一个运行时的概念。重载是在同一个类中多个方法之间的关系,而重写是子类和父类之间方法的关系。

        

六、Java中的异常处理机制,Java中异常类

在 Java 中,异常是指程序在运行时可能发生的不正常情况,如错误、错误输入或者是硬件故障等。Java 中的异常处理机制是通过 try-catch-finally 块和 throw 关键字来实现的。

        

异常处理机制的基本概念如下:
        1. `try-catch` 块:在 `try` 块中放置可能会引发异常的代码,然后使用 `catch` 块来捕获并处理这些异常,防止程序中断。
        2. `throw` 关键字:用于在代码中人工触发异常,并将异常抛出到调用者处进行处理。
        3. `finally` 块:无论是否发生了异常,`finally` 块中的代码始终会被执行,通常用于资源清理等操作。

        

Java 中的常见异常类可以分为两大类:Checked 异常和 Unchecked 异常。

        1. Checked 异常:必须在代码中显式地进行处理,否则程序将无法通过编译。这些异常通常表示程序中的一些逻辑错误或外部环境的问题,需要程序员在代码中处理,以保证程序的稳定性。常见的 Checked 异常包括 `IOException`、`FileNotFoundException`、`SQLException` 等。

        2. Unchecked 异常:不强制要求进行显式地处理,通常由程序逻辑错误引起,如空指针异常、数组越界异常等。通常情况下,Unchecked 异常是由 Java 虚拟机在运行时抛出的。常见的 Unchecked 异常包括 `NullPointerException`、`IndexOutOfBoundsException`、`ArithmeticException` 等。

        

在实际编程中,可以根据实际需求选择合适的异常处理策略,并使用 try-catch 块来捕获并处理异常,保证程序的稳定性和可靠性。

        

七、请解释一下Java中的final、finally、finalize各自的作用

在 Java 中,final、finally 和 finalize 是三个不同的关键字,具有不同的作用和用途。

1. final 关键字:final 关键字可以用来修饰类、方法和变量。

   - 当 final 修饰一个类时,表示该类不能被继承,即为最终的类。
   - 当 final 修饰一个方法时,表示该方法不能被子类重写,即为最终的方法。
   - 当 final 修饰一个变量时,表示该变量的值无法被修改,即为最终的常量。

   final 关键字的作用是保证被修饰的类、方法或变量的稳定性和不可变性,提供额外的安全性和效率。

        

2. finally 关键字:finally 关键字主要用于异常处理,表示无论是否发生异常,finally 块中的代码都会被执行。

   通常在 try-catch 块后面跟着一个 finally 块,用于释放资源、清理操作和确保关键代码的执行。

try {// 可能会抛出异常的代码
} catch (Exception e) {// 异常处理逻辑
} finally {// 无论有无异常,都会执行的代码块
}

        

3. finalize 方法:finalize 方法是 Object 类的一个方法,被称为垃圾回收器的“终结方法”。

   finalize 方法通常由垃圾回收器在回收对象之前调用,用于在对象销毁之前进行一些清理操作,例如关闭文件流或释放系统资源等。但是,finalize 方法并不是直接销毁对象,仅仅是提供了一个机会让对象在被销毁之前执行一些必要的清理操作。

   在实际编程中,一般不直接使用 finalize 方法,而是使用 try-finally 块或者其他合适的资源管理方式来确保资源的释放。因为 finalize 方法的调用时间是不确定的,并且对性能可能会有一定的影响。

        

综上所述,final、finally 和 finalize 三者分别用于修饰和控制类、方法和变量的特性,保证程序可靠性、资源释放和内存管理。

        

八、String、StringBuilder和StringBuffer之间的区别

String、StringBuilder 和 StringBuffer 是 Java 中处理字符串的三个类,它们之间的区别主要涉及可变性、线程安全性和性能。

        

1. String 类:
   - 不可变性:String 是不可变的,一旦创建,其值不能被修改。每次对 String 进行操作,例如拼接、替换等,都会创建一个新的 String 对象,原来的 String 对象会被丢弃。这种不可变性使得 String 在多线程环境下是线程安全的。
   - 线程安全性:String 是不可变的,因此可以共享,适用于多线程环境。
   - 性能:由于 String 的不可变性,频繁的字符串拼接操作会导致创建大量的临时对象,对内存和性能会带来一定的开销。

        

2. StringBuilder 类:
   - 可变性:StringBuilder 是可变的,允许对字符串进行修改和操作,而不会创建新的对象。适用于需要频繁进行字符串操作的场景。
   - 线程安全性:StringBuilder 不是线程安全的,不适用于多线程环境下。
   - 性能:由于 StringBuilder 的可变性,避免了大量临时对象的创建,对于频繁的字符串拼接操作具有更好的性能。

        

3. StringBuffer 类:
   - 可变性:StringBuffer 也是可变的,类似于 StringBuilder,允许对字符串进行修改和操作,而不会创建新的对象。
   - 线程安全性:StringBuffer 是线程安全的,使用了同步机制,适用于多线程环境下。
   - 性能:由于 StringBuffer 的线程安全性,需要额外的同步开销,性能上略低于 StringBuilder。

        

根据具体的需求,可以选择使用 String、StringBuilder 或 StringBuffer。如果字符串不需要进行频繁的修改,且在多线程环境下,建议使用 String 类;如果字符串需要频繁的修改且在单线程环境下,建议使用 StringBuilder;如果在多线程环境下,建议使用 StringBuffer 来保证线程安全性。

        

九、在Java中,==和equals()方法有什么区别?

在 Java 中,"==" 和 equals() 方法都用于比较对象,但是它们的作用和行为有所不同。

        

  1. "==" 运算符:
      - 对于基本数据类型,"==" 用于比较值是否相等。
      - 对于引用类型,"==" 用于比较两个对象的引用是否相等,即比较两个对象在内存中的地址是否相同。

        

  2. equals() 方法:
      - equals() 方法是 Object 类的一个方法,在 Java 中的任何对象都可以直接或间接调用该方法。
      - 默认情况下,equals() 方法比较两个对象的引用是否相等,即判断两个对象是否指向同一块内存地址。
      - 但是,可以根据需要在自定义的类中重写 equals() 方法,以实现自定义的对象比较逻辑,例如比较对象的字段值是否相等。

        

需要注意的是,对于常见的 String 类和封装类(如 Integer、Double 等),它们重写了 equals() 方法来比较对象的内容而不是引用。

        

总结:
   - "==" 运算符比较的是引用的地址,用于判断两个对象是否指向同一块内存。
   - equals() 方法用于比较对象的内容,但默认情况下比较的是引用是否相等,可以通过重写 equals() 方法来自定义对象的比较逻辑。

        

十、ava深拷贝(deep copy)和浅拷贝(shallow copy)

在Java中,深拷贝(Deep Copy)和浅拷贝(Shallow Copy)是用来描述对象拷贝的两种不同方法,它们之间有以下区别:

  1. 浅拷贝(Shallow Copy):
      - 浅拷贝会创建一个新的对象,该对象和原始对象共享相同的引用。
      - 对于引用类型的成员变量,浅拷贝只会复制引用,而不会复制引用指向的对象本身。
      - 因此,在浅拷贝中,对原始对象或拷贝对象的引用类型成员变量进行修改会影响到两者,因为它们指向同一个对象。
   - 在Java中,可以通过实现`Cloneable`接口并重写`clone()`方法来实现浅拷贝。

  2. 深拷贝(Deep Copy):
      - 深拷贝会创建一个新的对象,该对象拥有独立的引用和值。
      - 在深拷贝中,不仅对对象进行拷贝,还会对对象的引用类型成员变量进行递归拷贝。
      - 因此,在深拷贝中,对原始对象或拷贝对象的引用类型成员变量进行修改不会相互影响,因为它们指向不同的对象。
      - 在Java中,可以通过实现`Serializable`接口或使用第三方库(例如`Gson`、`Jackson`等)来实现深拷贝。

需要注意的是,默认的对象拷贝操作是浅拷贝,即对于简单类型的成员变量会进行复制,而对于引用类型的成员变量只会复制引用。如果需要实现深拷贝,开发人员需要显式地处理引用类型的成员变量,以确保其也能被正确地拷贝。

在实际开发中,需要根据具体的需求来选择使用浅拷贝还是深拷贝,以确保对象的拷贝行为符合预期。

        

十一、Java内存泄漏情况

Java内存泄漏是指在程序运行过程中,由于无法释放不再使用的对象所占用的内存空间,导致系统的可用内存持续减少,最终出现内存溢出或性能下降的情况。以下是导致Java内存泄漏的常见情况:

  1. 未及时释放对象引用:当一个对象不再需要时,如果程序员没有及时将其引用置为null,那么这个对象将无法被垃圾回收器回收,造成内存泄漏。
  2. 集合类持有对象:如果集合类(如ArrayList、HashMap等)持有对象的引用,并且程序员忘记从集合中移除对象,那么这些对象将一直被集合持有,无法被释放。
  3. 静态集合:静态集合中的对象会一直存在于内存中,如果程序员忘记从静态集合中移除对象,就会导致内存泄漏。
  4. 监听器和回调:注册的监听器或回调未被及时注销,导致持有对象的引用而无法被释放,造成内存泄漏。
  5. 线程:线程的使用也容易导致内存泄漏,如果线程未正确终止或无法正常释放,会导致线程持有的对象无法被释放。
  6. 单例模式:若单例对象持有了外部对象的引用,并且长时间不释放,也可能导致内存泄漏。
  7. 使用缓存:缓存中的对象如果长时间保持在缓存中且未设置合适的过期策略,也容易导致内存泄漏。

为了避免Java内存泄漏,开发人员应该注意及时释放不再使用的对象引用,避免无意识地持有对象的引用,合理管理集合、监听器、线程等对象的生命周期,并注意内存资源的合理利用。此外,可以使用一些内存分析工具(如Java VisualVM、YourKit Java Profiler等)来帮助发现和解决内存泄漏问题。

        

十二、Java多态特性

Java多态性(Polymorphism)是面向对象编程中的一个重要概念,它允许一个对象具有多种形态。具体来说,Java多态性有两种形式:静态多态性(编译时多态性)和动态多态性(运行时多态性)。

  1. 静态多态性(编译时多态性): 静态多态性是通过方法重载(Overloading)实现的,它允许我们在同一个类中定义多个方法,具有相同的名称但参数列表不同。在编译时,编译器能够根据方法调用的参数类型选择调用合适的方法。例如:

public class Calculation {public int add(int a, int b) {return a + b;}public float add(float a, float b) {return a + b;}
}

在上述代码中,Calculation类中定义了两个名为add的方法,分别接受两个整数和两个浮点数作为参数。在编译时,通过方法调用的参数类型来确定调用哪个方法。

         

  2. 动态多态性(运行时多态性): 动态多态性是通过方法重写(Overriding)和继承实现的。当一个子类继承自父类并重写了父类的方法后,可以在运行时根据实际的对象类型来调用该方法。这样,即使引用变量的类型是父类,当实际的对象是子类对象时,调用的是子类的方法。例如:

public class Animal {public void makeSound() {System.out.println("Animal is making a sound");}
}public class Dog extends Animal {@Overridepublic void makeSound() {System.out.println("Dog is barking");}
}public class Cat extends Animal {@Overridepublic void makeSound() {System.out.println("Cat is meowing");}
}public class Main {public static void main(String[] args) {Animal animal1 = new Dog();Animal animal2 = new Cat();animal1.makeSound(); // 输出:"Dog is barking"animal2.makeSound(); // 输出:"Cat is meowing"}
}

在上述代码中,Animal类是父类,DogCat类是子类,它们都重写了makeSound方法。在Main类中,创建了一个Animal类型的引用变量animal1animal2,分别指向DogCat实例。在运行时,根据实际的对象类型,调用相应子类重写的方法。

        

Java多态性使得代码更加灵活和可扩展,提高了代码的重用性和可维护性。

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

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

相关文章

在ubuntu上检查内存使用情况的九种方法

在 Ubuntu 中,可以通过 GUI(图形用户界面)和命令行使用多种方法来监视系统的内存使用情况,监视 Ubuntu 服务器上的内存使用情况并不复杂;了解已使用和可用的内存量对于故障排除和优化服务器性能至关重要,因为内存对系统 I/O 速度至…

极狐 GitLab 冷知识:使用 Email 也可以创建 Issue?

前言 在使用 GitLab 时,创建 Issue 和 Merge Request 的方法,除了常规的使用 GitLab Web UI 进行操作和通过 API 调用操作,还有一些比较好玩的,比如使用 Email 来创建。 Incoming email 如果是 Self-Manager 的 GitLab 用户&am…

高精度彩色3D相机:开启崭新的彩色3D成像时代

3D成像的新时代 近年来,机器人技术的快速发展促使对3D相机技术的需求不断增加,原因在于,相机在提高机器人的性能和实现多种功能方面发挥了决定性作用。然而,其中许多应用所需的解决方案更复杂,仅提供环境的深度信息是…

分布式数据库原理及技术实验及个人思考

Hive的数据库及表的存储结构体系讨论&#xff1a; 1.显示hive所在数据库的位置 方法一&#xff1a;一次性临时存储 >hive set hive.cli.print.current.dbtrue 方法二&#xff1a;永久存储 在conf文件夹下修改hive-site.xml配置文件&#xff0c;添加 <property> …

mySQL⾥有2000w数据,redis中只存20w的数据,如何保证redis中的数据都是热点数据

要确保Redis中只存储热点数据&#xff0c;你可以采取以下策略&#xff1a; 数据筛选: 在将数据插入MySQL之前&#xff0c;先通过某种算法或策略判断这条数据是否是热点数据。 可以基于数据的访问频率、时间戳或其他相关属性来决定是否将数据存储到Redis中。 LRU策略: 使用Re…

解决matplotlib中文乱码问题

一、修改配置文件&#xff0c;一劳永逸的方法 1. 首先&#xff0c;下载SimHei字体&#xff08;即SimHei.tff包&#xff09;下载地址&#xff1a;SimHei.ttf|字体下载 2. 下载好之后&#xff0c;找到matplotlib文件夹&#xff0c;如下图所示&#xff1a; 如果找不到matplotlib…

基于JavaWeb+BS架构+SpringBoot+Vue智能菜谱推荐系统的设计和实现

基于JavaWebBS架构SpringBootVue智能菜谱推荐系统的设计和实现 文末获取源码Lun文目录前言主要技术系统设计功能截图订阅经典源码专栏Java项目精品实战案例《500套》 源码获取 文末获取源码 Lun文目录 目 录 目 录 III 第一章 概述 1 1.1 研究背景 1 1.2研究目的及意义 1 1.3…

Digital Audio (HDMI)未插入 用Hdmi连接电脑 显示高清数字音频未插入 win10电脑没声音,喇叭上一个叉❌

先说结论&#xff0c;出现这些问题的原因&#xff1a; 未插入音频设备或者硬件问题&#xff08;10%&#xff09;设置错误&#xff0c;未使用显示器音频 &#xff08;30%&#xff09;音频驱动不兼容或者没有驱动&#xff08;50%&#xff09;其他驱动有问题 &#xff08;10%&…

12. VTK上选取点(VTK7版本+VTK9版本)

这个专栏是用于记录我在学习VTK过程中的一些心得体会。参考的资料主要有以下三个&#xff1a; 1. 张晓东 罗火灵《VTK图形图像开发进阶》2. https://examples.vtk.org/site/3. 沈子恒 《VTK 三维数据渲染进阶》 遇到的一个大问题就是由于版本更新&#xff0c;这些资料中很多代…

“Tab“ 的新型可穿戴人工智能项链

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

少儿编程 2023年12月中国电子学会图形化编程等级考试Scratch编程三级真题解析(判断题)

2023年12月scratch编程等级考试三级真题 判断题 19、下列两段程序的运行效果相同 答案:对 考点分析:考查积木综合使用,重点考查循环积木的使用;左边属于有条件的循环,由变量的值控制,当变量值大于50时,循环停止,而变量始终为零,不满足条件,所以一直循环,和右边的…

DOM操作怎样添加、移除、移动、复制、创建和查找节点

DOM&#xff08;Document Object Model&#xff09;操作是JavaScript中用于操作HTML或XML文档的一种方式。下面是一些基本的DOM操作&#xff1a; 添加节点 使用appendChild()方法可以将一个节点添加到现有节点的子节点列表的末尾。 let newNode document.createElement(“p”…

Go语言的sync.Pool如何使用?使用场景具体有哪些?

sync.Pool 是 Go 标准库中提供的一个对象池&#xff08;Object Pool&#xff09;的实现。对象池是一种用于缓存和复用对象的机制&#xff0c;可以在一定程度上减轻内存分配的开销。sync.Pool 专门用于管理临时对象&#xff0c;适用于一些需要频繁创建和销毁的短暂对象&#xff…

Golang 泛型

前言 泛型是在Go 1.18版本中引入的&#xff0c;它允许编写可以在多种数据类型上工作的函数和数据类型。这样做可以增加代码的复用性并减少重复 使用 类型参数&#xff08;Type Parameters&#xff09;&#xff1a; 你可以在函数或类型定义上声明类型参数&#xff0c;使其具有…

白嫖aws创建Joplin server服务器

网上有很多的Joplin服务器的搭建教程&#xff0c;但是基本都是抄来抄去&#xff0c;对初学者实在是太不友好了。 话不多说&#xff0c;说干就干&#xff0c;自己从头找资料搭了一个&#xff0c;这可能是全网最好的Joplin服务器搭建教程了。 aws服务器 aws的服务器还是很香的&…

企业用WhatsApp营销的好处有哪些?

1.建立良好的客户关系 WhatsApp是全球用户喜爱的即时通信软件&#xff0c;使用WhatsApp与客户沟通&#xff0c;可拉进企业和客户双方的距离。使用WhatsApp会话和消息推送功能&#xff0c;企业和用户可实时开展消息对话&#xff0c;及时解决客户咨询与疑虑&#xff0c;构建便捷…

移动通信原理与关键技术学习之信道编解码(5)

先回顾调制的过程&#xff1a;调制就是对信号源的信息进行处理加到载波上&#xff0c;使其变为适合于信道传输的形式的过程&#xff0c;就是使载波随信号而改变的技术。 1.什么是IQ调制&#xff1f; 答&#xff1a;将数据分为两路&#xff0c;分别进行载波调制&#xff0c;两…

PIG框架学习2——资源服务器的配置详解

一、前言 1、pig资源服务器的配置 Spring Security oauth2相关的依赖是在pigx-common-security模块中引入的&#xff0c;其他模块需要进行token鉴权的&#xff0c;需要在微服务中引入pigx-common-security模块的依赖&#xff0c;从而间接引入相关的Spring security oauth2依赖…

39 C++ 模版中的参数如果 是 vector,list等集合类型如何处理呢?

在前面写的例子中&#xff0c;模版参数一般都是 int&#xff0c;或者一个类Teacher&#xff0c;假设我们现在有个需求&#xff1a;模版的参数要是vector&#xff0c;list这种结合类型应该怎么写呢&#xff1f; //当模版中的类型是 vector &#xff0c;list 等集合类型的时候的处…

【LeetCode】27. 移除元素(简单)——代码随想录算法训练营第1天

题目描述 给你一个数组 nums 和一个值 val&#xff0c;你需要 原地 移除所有数值等于 val 的元素&#xff0c;并返回移除后数组的新长度。 不要使用额外的数组空间&#xff0c;你必须仅使用 O(1) 额外空间并 原地 修改输入数组。 元素的顺序可以改变。你不需要考虑数组中超出…