秋招后端开发面试题 - Java语言基础(下)


目录

  • Java基础下
    • 前言
    • 面试题
      • toString() 、String.valueof()、(String)?
      • hashCode() 方法?
      • hashCode 和 equals 方法判断两个对象是否相等?
      • 为什么重写 equals 时必须重写 hashCode 方法?
      • String、StringBuffer、StringBuilder?
      • String 为什么是不可变的?
      • String 不可变的好处?
      • String 的特性?
      • 字符串拼接用 + 还是 StringBuilder?
      • String 类和 Object 类的 equals() 方法?
      • String s1 = new String("abc") 这句话创建了几个对象?
      • String s = new String("a") + new String("b") 创建了几个对象?
      • intern 方法的作用?
      • String 类型做 + 运算时发生了什么?
      • Exception 和 Error 有什么区别?
      • Checked Exception 和 Unchecked Exception 有什么区别?
      • Throwable 类常用方法有哪些?
      • try-catch-finally 如何使用?
      • finally 中的代码一定会执行吗?
      • 如何使用 try-with-resources 代替 try-catch-finally?
      • 什么是泛型?有什么用?
      • 泛型的使用方式有哪几种?
      • 什么是泛型擦除机制?为什么要擦除?
      • 什么是桥方法?
      • 泛型有哪些限制?为什么?
      • 什么是通配符?有什么作用?
      • 通配符?和常用的泛型 T 有什么区别?
      • 什么是无界通配符?
      • List\<?>和 List 的区别?
      • 什么是上边界通配符?什么是下边界通配符?
      • 反射?
      • 反射的应用场景了解么?
      • 谈谈反射机制的优缺点
      • 获取 Class 对象的四种方式
      • 反射的一些基本操作
      • 注解是什么?
      • 常用的注解?
      • 注解的解析方法有哪几种?
      • SPI 和 API 有什么区别?
      • ServiceLoader 具体实现?
      • 什么是序列化和反序列化?
      • 常见序列化协议有哪些?
      • JDK 自带的序列化方式
      • serialVersionUID 有什么作用?
      • serialVersionUID 不是被 static 变量修饰了吗?为什么还会被“序列化”?
      • 如果有些字段不想进行序列化怎么办?
      • Java 的 Unsafe 类?
      • Java 语法糖?
      • JDK1.8 都有哪些新特性?


Java基础下

前言

已经找到工作了,分享秋招时的笔记。祝大家都能顺利找到自己心仪的工作。


面试题

toString() 、String.valueof()、(String)?

  • toString():Object 类的方法,可以将一个对象转换为字符串类型
  • String.valueOf():可以将一个对象基本数据类型转换为字符串类型
    如果参数是对象,则调用 toString() 方法;
    如果是基本数据类型,则直接将其转换为字符串类型
  • (String)强制类型转换,需要使用 instanceof 做类型检查,不建议使用

hashCode() 方法?

  • HashCode() 是 Object 类方法,用于返回对象的哈希码,这个值通常用于快速查找对象

hashCode 和 equals 方法判断两个对象是否相等?

  • 两个对象的 hashCode 值不相等,对象不相等
  • 两个对象的 hashCode 值相等,不一定相等(哈希碰撞)
  • 两个对象的 hashCode 值相等,并且 equals() 方法也返回 true,说明这两个对象相等

为什么重写 equals 时必须重写 hashCode 方法?

  • 判断对象是否存在的时候,会先检查 hashCode 是否相等
  • 如果不相等,会直接认为对象不相等,不会再调用 equals 进行比较

String、StringBuffer、StringBuilder?

  • String 类型是不可变的,每次对 String 类型操作时,都会生成新的 String 对象
  • StringBuffer 类型是可变的字符串,表示一个字符序列。是线程安全的,通过使用同步来保证多个线程之间的正确性
  • StringBuilder 类型也是可变的字符串,和 StringBuffer 本质相同,但是是非线程安全

String 为什么是不可变的?

  • String 被声明为 final,不可以被继承
  • 使用字符数组来保存字符串的值,该数组被声明为 final,并且不提供方法以修改字符数组的内容
public final class Stringimplements java.io.Serializable, Comparable<String>, CharSequence {/** The value is used for character storage. */private final char value[];

String 不可变的好处?

  • 安全:String 不可变,所以可以用来当作常量使用
  • 线程安全:String 不可变,所以可以在多个线程中安全的共享
  • 编译器优化:编译器可以在编译时优化代码,例如使用常量折叠

String 的特性?

  • 不可变:一旦字符串被创建,它的值就不能更改
  • 比较:可以使用 equals() 方法比较字符串的,也可以使用==运算符比较字符串的引用
  • 字符串池:Java 创建了一个字符串池,用于存储字符串常量。当创建新字符串时,Java 会先检查字符串池中是否已经有该字符串,如果有,则返回该字符串的引用,否则创建新字符串并将其添加到字符串池中

字符串拼接用 + 还是 StringBuilder?

  • Java 中的 + 运算符经过重载后,实际上是通过 StringBuilder 调用 append() 方法实现的
    在循环内使用 + 进行字符串拼接时,由于编译器不会复用 StringBuilder 对象,会导致创建过多的 StringBuilder 对象
  • 应该直接使用 StringBuilder 对象的 append() 方法

String 类和 Object 类的 equals() 方法?

  • Object 的 equals() 方法:比较两个对象的引用是否相等
  • String 类的 equals() 方法:经过重写,比较的是两个字符串的内容是否相等

String s1 = new String(“abc”) 这句话创建了几个对象?

会创建两个对象,这句代码的执行顺序如下:

  • 常量池中创建一个字符串 “abc” 的对象
  • 堆内存中创建一个新的字符串对象,该对象与字符串中的对象具有相同的值 “abc”,将堆创建的对象引用赋值给 s1 变量

String s = new String(“a”) + new String(“b”) 创建了几个对象?

  • 对象 1:StringBuilder 对象,表示字符串拼接的缓冲区
  • 对象 2:new 的 String(“a”) 对象
  • 对象 3: 常量池对象 “a”
  • 对象 4:new 的 String(“b”) 对象
  • 对象 5: 常量池对象 “b”
  • 对象 6: 使用 StringBuilder 的 toString() 方法获取最终的拼接字符串,创建的新的 String 对象 “ab”

intern 方法的作用?

  • String 类的方法,作用是将字符串对象添加到字符串常量池,并返回常量池中该字符串对象的引用
// 在堆中创建字符串对象”Java“
// 将字符串对象”Java“的引用保存在字符串常量池中
String s1 = "Java";
// 直接返回字符串常量池中字符串对象”Java“对应的引用
String s2 = s1.intern();
// 会在堆中在单独创建一个字符串对象
String s3 = new String("Java");
// 直接返回字符串常量池中字符串对象”Java“对应的引用
String s4 = s3.intern();
// s1 和 s2 指向的是堆中的同一个对象
System.out.println(s1 == s2); // true
// s3 和 s4 指向的是堆中不同的对象
System.out.println(s3 == s4); // false
// s1 和 s4 指向的是堆中的同一个对象
System.out.println(s1 == s4); //true
//创建两个对象,堆空间一个new对象,字符串常量池一个字符串常量对象"a"
String s = new String("a"); //s指向堆空间的对象地址 
s.intern();  //调用此方法之前,字符串常量池已经有"a"
String s2 = "a";  //s2指向字符串常量池"a"
System.out.println(s == s2); //false
String s3 = new String("a") + new String("b"); //等价new String("ab"),但常量池没有"ab"
s3 = s3.intern(); //字符串常量池中创建一个指向堆对象的引用
String s4 = "ab"; //指向常量池中存在的"ab"
System.out.println(s3 == s4); //true

image-20230318092642647

String 类型做 + 运算时发生了什么?

  • String 类型在做 + 运算时,运行时会被转化为 StringBuilder 对象进行操作

在编译期间,Java 编译器会进行常量折叠,对字符串常量的拼接进行优化。但如果在运行时才能知道其确切值,就无法对其优化

String str1 = "str";
String str2 = "ing";
String str3 = "str" + "ing"; //常量池中的对象 编译器会进行常量折叠 优化成"String"
String str4 = str1 + str2; //在堆上创建新的StringBuilder对象
//String str4 = new StringBuilder().append(str1).append(str2).toString();
String str5 = "string"; //常量池中的对象
System.out.println(str3 == str4);//false
System.out.println(str3 == str5);//true
System.out.println(str4 == str5);//false

Exception 和 Error 有什么区别?

  • Exception 类是程序在运行时可能出现的异常,比如说输入错误或者网络连接错误,可以通过程序进行处理
  • Error 类表示 Java 虚拟机本身的错误,比如内存溢出等,会终止程序的运行

Checked Exception 和 Unchecked Exception 有什么区别?

  • Checked Exception编译时异常,可以显式捕获,需要在代码中进行处理,否则会产生编译错误。常见的比如:IO 异常、 SQL 异常
  • Unchecked Exception运行时异常,不需要被显式的捕获,交给 JVM 处理
    常见的比如:NullPointerException(空指针异常) ArrayIndexOutOfBoundsException(数组越界错误)

Throwable 类常用方法有哪些?

  • getMessage():获取异常的信息
  • printStackTrace():在控制台打印异常信息
  • getCause():获取抛出当前异常的原因

try-catch-finally 如何使用?

  • try 中包含可能会抛出异常的语句;
  • catch 用来捕获并处理异常;
  • finally 中的代码块一定执行,用于关闭在 try-catch 中打开的资源

finally 中的代码一定会执行吗?

  • 不一定
  • 正常情况下,finally 块中的代码都会执行
  • 但是在程序遇到致命错误,程序立即退出的情况下,不会执行
  • 如果在 finally 执行之前,虚拟机被终止的话,finally 的代码也不会被执行

如何使用 try-with-resources 代替 try-catch-finally?

Java 引入新的 try-with-resources 语句,用于自动关闭程序中使用的资源,比如数据库连接,文件 I/O 流等,在 try 语句块结束后,自动关闭这些资源,不需要再写 catch 和 final 语句来释放资源

  • 需要实现 lang.AutoCloseable 或者 io.Closeable 接口来使用该新语句

什么是泛型?有什么用?

  • 泛型是 Java 的一个重要特性,用于实现参数化类型
  • 泛型的作用:
    • 使用泛型可以在编译时进行类型检测,减少运行时错误
    • 通过泛型参数指定传入的对象类型

泛型的使用方式有哪几种?

  • 泛型
  • 泛型接口
  • 泛型方法
  • 泛型类型通配符

什么是泛型擦除机制?为什么要擦除?

  • 泛型擦除机制是 Java 在编译的时候去除泛型类型的参数信息,将其转换成原始类型
  • 这样做的主要目的是为了保持 Java 代码的向后兼容性,和之前版本的 Java 代码兼容

什么是桥方法?

  • 桥方法是一种虚拟机技术,是用来处理泛型类型中的继承和多态问题的。
  • 编译器会在继承类或者实现接口中自动生成桥方法,保证编译后的字节码可以正确的执行。
  • 桥方法的作用是将一个泛型方法转换为一个桥接方法,其实现是调用原方法,并将参数进行强制类型转换,最终返回结果。

泛型有哪些限制?为什么?

  • 不能使用基本数据类型作为泛型类型参数:基本类型无法转换成 Object 类型
  • 不能创建泛型数组,数组的类型必须确定:泛型的类型参数在编译时需要进行擦除
  • 不能直接使用泛型类型实例化:因为泛型类型在运行时不能获取其具体类型。

什么是通配符?有什么作用?

  • 通配符是一种符号,代表任何类型
  • 通常和关键字 extends/super 结合使用,用来限制泛型类型的范围
<? extends Person> //限制类型为Person的子类
<? super Manager> //限制类型为Person的父类

通配符?和常用的泛型 T 有什么区别?

  • 通配符?是一个符号,可以代表任何类型,需要和关键字 extends/super 结合使用来限制范围
  • 泛型 T 是一个具体的类型参数,用于指定一个具体的数据类型

什么是无界通配符?

  • 没有指定通配符类型的上界,表示可以接受任何类型的对象
  • 通常有两种使用情况
    • 泛型类型参数只用于方法的参数传递,不需要方法的返回值
    • 泛型类型参数只用于类的成员变量,不进行任何操作

List<?>和 List 的区别?

  • List 是一个具体类型的泛型列表,需要在创建时指定元素类型,可以添加该类型的元素
  • List<?>是一个通配符泛型列表,表示未知类型,适合用于读取和遍历列表,但不能直接添加元素。
List<?> unknownList = new ArrayList<String>(); // 可以接受任何类型的列表

什么是上边界通配符?什么是下边界通配符?

  • 上边界通配符:使用 extends 关键字限定泛型类型的上界,表示该泛型必须是其子类
  • 下边界通配符:使用 super 关键字限定泛型类型的下界,表示该泛型必须是其父类。

反射?

  • Java 的反射是指在运行时动态的获取和操作的信息
  • 包括类的结构、方法和构造函数等
  • Java 提供反射 API,在编译时,通过名称获取类的信息

反射的应用场景了解么?

  • 实现注解和注解处理器
  • 动态代理
  • Java Bean 的动态操作
  • 调试工具
  • 配置文件解析
  • 单元测试
  • 序列化和反序列化
  • 依赖注入

谈谈反射机制的优缺点

  • 反射使代码更加灵活,使程序具有更高的动态性和可扩展性
  • 反射的灵活性降低了程序的性能,同时也增加了安全问题

获取 Class 对象的四种方式

  • 使用类名.class 方法
  • 使用对象的 getClass() 方法
  • 使用 Class.forName() 方法
  • 使用类加载器的 ClassLoader 的 loadClass() 方法

反射的一些基本操作

  • 获取 Class 对象:例如使用类名.class 方法获取类的 Class 对象
  • 获取类的属性:使用 Class 的 getDeclaredFields() 方法获取类的所有属性
  • 获取类的方法:使用 Class 的 getDeclaredMethods() 方法获取类的所有方法
  • 创建对象:使用 Class 的 newInstance() 方法根据类的信息动态创建对象
  • 调用方法:使用 Method 类的 invoke() 方法对方法进行调用
  • 设置属性:使用 Field 类的 set() 方法对属性进行设置

注解是什么?

  • 注解 (Annotation) 是一种元数据,可以用来为程序中的代码元素,如类、方法、属性等添加额外的信息和标识,并可以在运行时动态获取这些信息或者在编译时进行相应的处理。

常用的注解?

  • @Override:标识一个方法重写了父类的方法
  • @Deprecated:标识一个方法或类已经过时,不应该再使用
  • @SuppressWarnings:用于抑制编译器的警告信息
  • @Autowired:自动依赖注入对象
  • @Component:标识一个类为组件,可以被自动扫描和注册到容器中
  • @RestController:标识一个类为 RESTful 服务的控制器
  • @RequestMapping:标识一个方法对应的 URL 地址HTTP 请求方法
  • @Transactional:标识一个方法或类需要进行事务管理
  • @NotNull:标识一个方法或参数不能为空
  • Spring 框架中的@Service、@Repository、@Controller 等
  • JUnit 测试框架的@Test、@Before、@After 等。

注解的解析方法有哪几种?

  • 编译期直接扫描:在编译时,编译器会扫描源代码中的注解,并根据注解的定义执行相应的处理。
    例如,@Override 注解用于检查方法是否实际重写了父类的方法。编译器会在编译时检查并报告相关错误。
  • 运行期通过反射处理:在运行时,通过反射机制可以获取类、方法、字段等的注解信息,并根据注解的定义执行相应的逻辑。这种方式适用于框架和库,在程序运行时动态地根据注解来实现特定的功能。

SPI 和 API 有什么区别?

  • API应用程序接口,是用于访问功能的标准接口,是一种调用方式,用于集成不同模块的功能。
  • SPI软件提供接口, 是一种软件设计模式,用于实现插件和扩展,提供了一种实现方式,让应用程序可以动态地选择和加载不同的实现

ServiceLoader 具体实现?

  • ServiceLoader 是 Java 提供的一种用于实现 SPI 的机制。允许定义一组接口,并允许不同的服务提供者在运行时注册和被加载
  • 具体实现流程:
  1. 服务提供者的注册: 服务提供者将其实现类在规定的路径下创建配置文件,写入实现类的全限定名
  2. 加载服务: 当调用 load 方法时,ServiceLoader 会根据传入的接口类获取其类加载器,并加载对应的配置文件,读取实现类的全限定名
  3. 实例化类:ServiceLoader 使用反射机制实例化每个实现类,然后将它们加入到内部的缓存中
  4. 提供迭代器:通过调用 iterator() 方法,获取已加载的实现类的迭代器,从而遍历并使用这些实现类

ServiceLoader 的工作原理主要包括服务提供者的注册、加载服务、实例化类和提供迭代器。这个机制使得可以在应用程序中不修改代码的情况下,通过添加或修改配置文件来加载新的服务实现,从而实现了一种插件化和可扩展的设计

示例配置文件(META-INF/services/com.example.MyService):

com.example.impl.MyServiceImpl
com.example.impl.AnotherServiceImpl

示例代码:

import java.util.ServiceLoader;public class ServiceLoaderExample {public static void main(String[] args) {ServiceLoader<MyService> serviceLoader = ServiceLoader.load(MyService.class);for (MyService service : serviceLoader) {service.doSomething();}}}

其中,MyService 是接口,MyServiceImplAnotherServiceImpl 是实现类。

什么是序列化和反序列化?

  • 序列化和反序列化是将对象转换为二进制数据流和将二进制数据流还原为对象的过程
  • 可以用于网络传输、缓存系统等,对应于四层模型的应用层

常见序列化协议有哪些?

  • JDK 自带的序列化方式
  • JSON
  • XML

JDK 自带的序列化方式

  • JDK 自带的序列化,只需实现 java.io.Serializable 接口即可

serialVersionUID 有什么作用?

  • serialVersionUID 是序列化号,用于在 Java 序列化和反序列化中比较两个对象的版本是否一致
  • 如果序列化号不一致会抛出 InvalidClassExpection 异常

serialVersionUID 不是被 static 变量修饰了吗?为什么还会被“序列化”?

  • serialVersionUID 虽然是一个 static 变量,但不会被序列化保存在对象中,只是一个版本号
  • 在反序列化时,会读取对象的的 serialVersionUID 值,并与本地的做比较,如果不一致,则会抛出异常。

如果有些字段不想进行序列化怎么办?

  • 使用 transient 关键字
  • 使用 transient 标记的变量其值会在序列化和反序列化过程中被忽略掉,因此在反序列化之后需要重新初始化或者赋值,否则其值为 null
  • transient 只能修饰变量

Java 的 Unsafe 类?

  • JDK 提供的不安全的工具类,提供了可以直接操作内存和执行底层操作的方法
  • Java 已经不再支持 Unsafe 类的使用

Java 语法糖?

  • 提供给开发人员便于开发的一种语法
  • 在编译时会在编译时被翻译成底层的底层语言

JDK1.8 都有哪些新特性?

  • 接口默认方法静态方法
  • Lambda 表达式:本质上是一段匿名内部类,简化代码
  • Stream API:用函数式编程方式在集合类进行复杂操作
  • Optional 类:用来解决空指针异常的问题

秋招后端开发面试题系列目录
一、Java
1.1 Java基础上
1.2 Java基础下
1.3 Java集合
1.4 JavaIO
1.5 Java多线程上
1.6Java多线程下
二、JVM
2.1 JVM底层原理
2.2 垃圾回收器
2.3 垃圾回收算法
2.4 类加载机制
2.5 运行时数据区
三、MySQL
3.1 MySQL基础
3.2 事务
3.3 索引
3.4 锁机制
3.5 MVCC
四、Redis
4.1 Redis基础
4.2 缓存原理
五、中间件
5.1 RabbitMQ
六、Spring开源框架
6.1 Spring
6.2 Spring MVC
6.3 Spring Boot
6.4 MyBatis
七、操作系统
八、计算机网络
九、设计模式
十、微服务架构
十一、Spring Cloud分布式
11.1 分布式基础
11.2 Spring Cloud
11.3 GateWay
11.4 Nacos
11.5 OpenFeign
11.6 Ribbon
十二、算法
十三、项目

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

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

相关文章

【Qt】控件的核心属性

1 &#x1f351;控件概述&#x1f351; Widget 是 Qt 中的核⼼概念. 英⽂原义是 “⼩部件”, 我们此处也把它翻译为 “控件” .控件是构成⼀个图形化界⾯的基本要素。 Qt 作为⼀个成熟的 GUI 开发框架, 内置了⼤量的常⽤控件。这⼀点在 Qt Designer 中就可以看到端倪&#xf…

学习STM32第二十天

低功耗编程 一、修改主频 STM32F4xx系列主频为168MHz&#xff0c;当板载8MHz晶振时&#xff0c;系统时钟HCLK满足公式 H C L K H S E P L L N P L L M P L L P HCLK \frac{HSE \times PLLN}{PLLM \times PLLP} HCLKPLLMPLLPHSEPLLN​&#xff0c;在文件stm32f4xx.h中可修…

Flutter应用开发-几种保存简单配置的方式

文章目录 简单配置保存的几种方式使用 shared_preferences 插件优点缺点 使用 hive 插件优点 缺点使用文件存储&#xff1a;优点缺点 简单配置保存的几种方式 在 Flutter 开发的 Android 应用中&#xff0c;保存应用配置并下次启动时读取&#xff0c;有以下几种比较合适的方式…

LabVIEW 2024安装教程(附免费安装包资源)

鼠标右击软件压缩包&#xff0c;选择“解压到LabVIEW.2024”。 返回解压后的文件夹&#xff0c;鼠标右击“ni_labview-2024”选择“装载”。 鼠标右击“Install”选择“以管理员身份运行”。 点击“我接受上述2条许可协议”&#xff0c;然后点击“下一步”。 点击“下一步”。 …

asp.net结课作业中遇到的问题解决1

作业要求 实现增删改查导出基本功能。 1、如何设置使得某个背景就是一整个而不是无限填充或者是这个图片的某一部分。 这就要求在设置这一块的时候&#xff0c;长和宽按照背景图片的大小进行设置&#xff0c;比如&#xff1a; 如果&#xff0c;图片的大小不符合你的要求&am…

北大字节提出VAR新范式,GPT超越扩散、视觉生成Scaling Law

前言 来自北京大学和字节跳动的研究团队&#xff0c;提出了一种名为"Visual AutoRegressive (VAR) Modeling"的全新视觉生成范式。VAR 重新定义了图像的自回归学习过程&#xff0c;从而使得GPT风格的自回归模型首次超越扩散模型&#xff0c;在图像生成质量、速度和可…

node环境创建Vue项目

node环境创建Vue项目 目录 node环境创建Vue项目安装node.js安装Vue创建Vue项目 安装node.js 【1】.官网下载 【2】.选择路径 【3】配置环境变量 后面就是一路next完成安装 【4】测试 cmd输入node指令&#xff0c;显示版本号证明安装成功 安装Vue 【1】安装cnpm 这是由淘宝…

最新官方破解版会声会影2024永久序列号和激活码

会声会影2024是一款功能强大的视频编辑软件&#xff0c;它集合了视频剪辑、音频调整、特效添加等多项功能于一身&#xff0c;为用户提供了一个全面且易用的视频制作平台。无论是初学者还是专业视频编辑人员&#xff0c;都能在这款软件中找到满足自己创作需求的工具。 会声会影最…

数字签名学习

1 基本概念 数字签名是一种加密技术&#xff0c;用于验证信息来源的身份和数据的完整性。 就是对一个东西签上自己的名&#xff1b;收到的人可以验证这东西是你发的&#xff1b;这里是用数字的方式&#xff1b; 对字符串也可以签名&#xff0c;签名以后&#xff0c;还是一个…

嘉楠堪智 CanMV K230 的 CanMV-IDE 环境与 MicroPython 编程

嘉楠推出了 CanMV IDE 开发环境&#xff0c;可以使用 MicroPython 开发针对 CanMV K230 的各种程序&#xff0c;同时也提供了大量的例子程序&#xff0c;方便使用者学习。 嘉楠开发者社区&#xff0c;给出了详细的 CanMV K230 教程&#xff0c;可以借以快速上手。 目录 固件…

TikTok引流中海外云手机的实用功能分享

在当下&#xff0c;TikTok已成为全球范围内最受欢迎的社交媒体平台之一&#xff0c;拥有着庞大的用户群体和潜在的商业机会。为了在TikTok上实现更好的引流效果&#xff0c;利用海外云手机成为了一个明智的选择。接下来&#xff0c;我们将深入探讨海外云手机的功能以及它如何助…

卫瓴科技杨炯纬:帮助一线销售做营销 | 躬行者说

我并不假装理解营销技术。我所有关于营销技术的知识&#xff0c;都来自这个行业的躬行者们。他们筚路蓝缕&#xff0c;见证营销技术在中国的成长。Marteker邀请他们谈谈心路历程&#xff0c;以「身在此山中」的视角解读营销技术在中国的光荣与梦想。 「纸上得来终觉浅&#xf…

Swift - 枚举

文章目录 Swift - 枚举1. 枚举的基本用法2. 关联值&#xff08;Associated Values&#xff09;3. 关联值举例4. 原始值5. 隐式原始值&#xff08;Implicitly Assigned Raw Values&#xff09;6. 递归枚举&#xff08;Recursive Enumeration&#xff09;7. MemoryLayout Swift -…

ROS1快速入门学习笔记 - 07话题消息的定义与使用

目录 一、话题模型 二、自定义话题消息 1. 在功能包下创建msg目录用于存储话题文件 2. 在package.xml文件中添加功能包依赖&#xff1b; 3. 在CMakeLists.txt增加编译选项&#xff1b; 4. 完成编译 5. 配置CMakeLists.txt中的编译规则&#xff08;增加发布者和订阅者&am…

Linux 第十三章

&#x1f436;博主主页&#xff1a;ᰔᩚ. 一怀明月ꦿ ❤️‍&#x1f525;专栏系列&#xff1a;线性代数&#xff0c;C初学者入门训练&#xff0c;题解C&#xff0c;C的使用文章&#xff0c;「初学」C&#xff0c;linux &#x1f525;座右铭&#xff1a;“不要等到什么都没有了…

【办公类-22-13】周计划系列(5-5)“周计划-05 周计划表格内教案部分“节日”清空改成“节日“” (2024年调整版本)Win32

背景需求&#xff1a; 本学期19周&#xff0c;用了近10周的时间&#xff0c;终于把周计划教案部分的内容补全了&#xff08;把所有教案、反思的文字都撑满一个单元格&#xff09;&#xff0c; 一、原始教案 二、新模板内的教案 三、手动添加文字后的样式&#xff08;修改教案…

STM32之HAL开发——电容按键

电容按键原理 电容器 (简称为电容) 就是可以容纳电荷的器件&#xff0c;两个金属块中间隔一层绝缘体就可以构成一个最简单的电容。如图 32_1 (俯视图)&#xff0c;有两个金属片&#xff0c;之间有一个绝缘介质&#xff0c;这样就构成了一个电容。这样一个电容在电路板上非常容…

Detla lake with Java--入门

最近在研究数据湖&#xff0c;虽然不知道研究成果是否可以用于工作&#xff0c;但我相信机会总是留给有准备的人。 数据湖尤其是最近提出的湖仓一体化概念&#xff0c;很少有相关的资料&#xff0c;目前开源的项目就三个&#xff0c;分别是hudi, detla lake, iceberg。最终选择…

常用算法代码模板 (3) :搜索与图论

AcWing算法基础课笔记与常用算法模板 (3) ——搜索与图论 常用算法代码模板 (1) &#xff1a;基础算法 常用算法代码模板 (2) &#xff1a;数据结构 常用算法代码模板 (3) &#xff1a;搜索与图论 常用算法代码模板 (4) &#xff1a;数学知识 文章目录 0 搜索技巧1 树与图的存…

机器学习:基于Sklearn、XGBoost框架,使用XGBClassifier、支持向量分类器和决策树分类器预测乳腺癌是良性还是恶性

前言 系列专栏&#xff1a;机器学习&#xff1a;高级应用与实践【项目实战100】【2024】✨︎ 在本专栏中不仅包含一些适合初学者的最新机器学习项目&#xff0c;每个项目都处理一组不同的问题&#xff0c;包括监督和无监督学习、分类、回归和聚类&#xff0c;而且涉及创建深度学…