JAVA每日作业day7.1-7.3小总结

ok了家人们前几天学了一些知识,接下来一起看看吧

.API

Java API API: Application( 应用 ) Programming( 程序 )
  Interface(接口 )
Java API 就是 JDK 中提供给我们使用的类,这些类将底层
的代码实现封装了起来,我们不需要关心这些类是如何
实现的,只需要学习这些类如何使用即可。
我们在每次查看类中的方法时,都打开源代码进行查
看,这种方式过于麻烦。其实,我们可以通过查帮助文
档的方式,来了解 Java 提供的 API 如何使用。
  • 打开API帮助文档。
  • 点击显示,找到索引,看到输入框。
  • 在输入框里输入,然后回车。
  • 看包。java.lang下的类不需要导包,其他需要。
  • 看类的解释和说明。
  • 看构造方法。
  • 看成员方法

.Object

2.1 Object类概述

java.lang.Object 类是 Java 语言中的根类,每个类都使用
Object 作为超类。所有对象(包括数组)都实现这个类
的方法。
如果一个类没有特别指定父类,那么默认则继承自
Object 类。例如:
public class DemoTest/*extends Object*/{ // ... }

2.2 toString()方法

方法声明: public String toString() :返回该对象的字符
串表示。
public class Person {private String name;private int age;public Person() {}public Person(String name, int age) {this.name = name;this. Age = age;}// 省略 getXXX() 和 setXXX() }
public class DemoTest {public static void main(String[] args) {Person p=new Person("张三",23);// String str = p.toString();// System.out.println(str);System.out.println(p.toString());//源码中println()方法默认调用了 toString()System.out.println(p); }}
由于 toString 方法返回的结果是内存地址,而在开发中,
内存地址并没有实际的应用价值,经常需要按照对象的
属性得到相应的字符串表现形式,因此也需要重写它。
public class Person {private String name;private int age;public Person() { }public Person(String name, int age) {this.name = name; this. Age = age;}// 省略 getXXX() 和 setXXX()@Overridepublic String toString() { return name+"..."+age; } }
public class DemoTest {public static void main(String[] args) {Person p=new Person("张三",23);System.out.println(p.toString());System.out.println(p);}}
IntelliJ IDEA 中,可以点击 Code 菜单中的
Generate... ,也可以使用快捷键 alt+insert ,点击
toString() 选项。选择需要包含的成员变量并确定。
public class Person {private String name;private int age;public Person() { }public Person(String name, int age) { this.name = name; this. Age = age; }// 省略 getXXX() 和 setXXX()@Overridepublic String toString() {return "Person{" + "name='" + name + '\'' + ", age=" + age + '}';}}

2.3 equals()方法

方法声明: public boolean equals(Object obj) :指示其
他某个对象是否与此对象 相等
equals 方法默认比较两个对象的内存地址是否相同,相
同则返回 true
Object equals() 方法源码:
public boolean equals(Object obj) {return (this == obj);}
  • this是当前对象,哪个对象调用的equals方法就表示哪个对象
  • obj 表述传递的参数,参数类型 Object ,可以传递任意类型对象。
  • this==obj 比较两个对象的内存地址是否相同
public class Person {private String name;private int age;public Person() { }public Person(String name, int age) { this.name = name;this.age = age; }// 省略 getXXX() 和 setXXX()@Overridepublic String toString() {return "Person{" + "name='" + name + '\'' + ", age=" + age + '}'; }}
* ==: 既可以比较基本数据类型 , 也可以比较引用数据类型
* 比较基本数据类型 : 比较值是否相等
* 比较引用数据类型 : 比较地址值是否相等
*
* public boolean equals(Object obj) :指示其
他某个对象是否与此对象 相等
*/
public class DemoTest {
public static void main ( String [] args ) {
// 比较基本数据类型
int a = 10 ;
int b = 20 ; System . out . println ( a == b ); //false
// 比较引用数据类型
Person p01 = new Person ( " 张三 " , 23 );
Person p02 = new Person ( " 张三 " , 23 );
System . out . println ( p01 == p02 ); //false
//Object 类的 equals() 方法
System . out . println ( p01 . equals ( p02 )); //false
}
}
实际应用中,比较内存地址是否相同并没有意义,我们
可以定义对象自己的比较方式,比较对象中成员变量的
值是否相同。需要对方法进行重写。
需求:重写 equals() 方法,比较两个对象中姓名和年龄是
否相同,如果姓名和年龄都相同返回 true ,否则返回
false
public class Person {
private String name ;
private int age ;
public Person () {
}
public Person ( String name , int age ) {
this . name = name ;
this . age = age ;
}
// 省略 getXXX() setXXX()
@Override
public boolean equals ( Object obj ) {
// 判断两个对象地址弱相同,即为同一个对象
if ( this == obj ){
return true ;
}
//obj 对象为空,无需比较,返回 false
if ( obj == null ){
return false ;
}
// 如果 Obj Person 类型 则强制转换
if ( obj instanceof Person ){
Person person = ( Person ) obj ;
return
this . name . equals ( person . name ) &&
this . age == person . age ;
}
return false ;
}
@Override
public String toString () {
return "Person{" +
"name='" + name + '\'' +
", age=" + age +
'}' ;
}
public class DemoTest {
public static void main ( String [] args ) {
Person p01 = new Person ( " 张三 " , 23 );
Person p02 = new Person ( " 张三 " , 23 );
System . out . println ( p01 . equals ( p02 )); //true
}
}
IntelliJ IDEA 中,可以使用 Code 菜单中的 Generate…
选项,也可以使用快捷 alt+insert ,并选择 equals() and
hashCode() 进行自动代码生成。

.String

3.1 String类概述

String 类代表字符串, Java 程序中的所有字符串文字
(例如 “abc” )都被实现为此类的实例。
Java 程序中所有的双引号字符串,都是 String 类的对
象。
String 类在 java.lang 包下,所以使用的时候不需要
导包!

3.2 String类的构造方法

public String() 创建一个空字符串对象
public String(String original) 通过给定的内容创建一
String 对象
public String(char[] value) 根据 char 数组中的内容 ,
创建对应的字符串对象
public String(byte[] bytes) 根据 byte 数组中的内容 ,
创建对应的字符串对象
public String(byte[] bytes, int offset, int length)
byte 数组的范围 , 根据指定范围中的内容 , 来创建对应
的字符串对象
直接写字符串字面值也是 String 类对象 例如 : String
str = "abc";
public class DemoTest {
public static void main ( String [] args ) {
//public String() :创建一个空白字符串对象,不含有任何内容
String str01 = new String ();
System . out . println ( "str01=" + str01 );
//public String(String original) 通过给定的内容创建一个 String 对象
String str02 = new String ( "abc" );
System . out . println ( "str02=" + str02 );
//public String(char[] value) 根据char数组中的内容 , 来创建对应的字符串对象
char [] cs = { 'a' , 'b' , 'c' , 'd' };
String str03 = new String ( cs );
System . out . println ( "str03=" + str03 );
//public String(byte[] bytes) 根据byte数组中的内容 , 来创建对应的字符串对象
byte [] bs = { 97 , 98 , 99 , 100 , 101 };
String str04 = new String ( bs );
System . out . println ( "str04=" + str04 );
//public String(byte[] bytes, int offset, int length)
// 指定 byte 数组的范围 , 根据指定范围中的内容, 来创建对应的字符串对象
String str05 = new String ( bs , 1 , 3 );
System . out . println ( "str05=" + str05 );
// 直接写字符串字面值也是 String 类对象
String str06 = "hello" ;
System . out . println ( "Str06=" + str06 );
}
}

3.3 两种方式创建字符串的区别

通过 new 创建的字符串对象,每一次 new 都会申请
一个内存空间,虽然字符串内容相同,但是地址值不
public class DemoTest {
public static void main ( String [] args ) {
String str01 = new String ( "hello" );
String str02 = new String ( "hello" );
System . out . println ( str01 == str02 ); //false 地址值不同
}
}
“ ” 方式给出的字符串,只要字符序列相同 ( 顺序和大
小写 ) ,无论在程序代码中出现几次,都只会建立一个
String 对象
public class DemoTest {
public static void main ( String [] args ) {
String str01 = "hello" ;
String str02 = "hello" ;
System . out . println ( str01 == str02 ); //true
}
}

3.4 字符串常用方法

public int length (): 返回此字符串的长度。
public boolean equals(String s): 比较两个字符串内容
是否相同、区分大小写
public boolean equalsIgnoreCase (String
anotherString) :将此字符串与指定对象进行比较,
忽略大小写。
public String concat (String str): 将指定的字符串连接
到该字符串的末尾。
public char charAt (int index): 返回指定索引处的
char 值。
public int indexOf (String str): 返回指定子字符串第一
次出现在该字符串内的索引。
public String substring (int beginIndex): 返回一个子
字符串,从 beginIndex 开始截取字符串到字符串结
尾。
public String substring (int beginIndex, int
endIndex): 返回一个子字符串 , beginIndex
endIndex 截取字符串。含 beginIndex, 不含
endIndex
public class DemoTest {
public static void main ( String [] args ) {
String str = "woaijava" ;
//public int length (): 返回此字符串的 长度。
int len = str . length ();
System . out . println ( len ); //8
//public boolean equals(String s): 比较两个字符串内容是否相同、区分大小写
boolean lean01 = str . equals ( "woaiJava" ); //false
System . out . println ( lean01 );
//public boolean equalsIgnoreCase(String anotherString)
// 将此字符串与指定对象进行比较,忽略大小写。
boolean lean02 = str . equalsIgnoreCase ( "woaiJava" );
System . out . println ( lean02 ); //true
//public String concat (String str):
将指定的字符串连接到该字符串的末尾。
String newStr = str . concat ( "haha" );
System . out . println ( newStr ); //woaijavahaha
//public char charAt (int index): 返回指定索引处的 char 值。
char c = str . charAt ( 3 );
System . out . println ( c ); //i
// 遍历字符串 w o a i j a
v a
for ( int i = 0 ; i < str . length (); i ++ ){
System . out . print ( str . charAt ( i ) + "\t" );
}
System . out . println ();
//public int indexOf (String str):
// 返回指定子字符串第一次出现在该字符串内的
索引。
beginIndex 开始截
取字符串到字符串结尾。
String sub01 = str . substring ( 4 );
System . out . println ( sub01 ); //java
//public String substring (int beginIndex, int endIndex):
// 返回一个子字符串 , beginIndex 到 endIndex截取字符串。
// beginIndex, 不含 endIndex
String sub02 = str . substring ( 2 , 6 );
System . out . println ( sub02 ); //aija
}
}

3.5 其他方法

public class DemoTest {
public static void main ( String [] args ) {
//boolean isEmpty() 判断字符串是否为空(长度为 0 返回 true ,不为 0 返回 false)
String str01 = null ; // 空 表示什么都没有
String str02 = "" ; // 空字符串对象
String str03 = " " ; // 有一个空格字符的字符 串对象
System . out . println ( "---------------------" );
//System.out.println(str01.isEmpty());//Nul
lPointerException
System . out . println ( str02 . isEmpty ()); //true System . out . println ( str03 . isEmpty ()); //false
System . out . println ( "---------------------" );
//boolean contains(CharSequence s)
断字符串中是否包含 给定的字符串
String str04 = "helloworld" ;
System . out . println ( str04 . contains ( "Hello" ))
; //false
System . out . println ( str04 . contains ( "world" ))
; //true
System . out . println ( "---------------------" );
//boolean startsWith(String prefix) 判断字符串是否以 给定的字符串开头
//boolean endsWith(String suffix) 判断字符串是否以 给定的字符串 结尾。
String str05 = "helloworld.java" ;
System . out . println ( str05 . startsWith ( "world" )); //false
System . out . println ( str05 . startsWith ( "he" )); //true
System . out . println ( str05 . endsWith ( ".java" )) ; //true
System . out . println ( str05 . endsWith ( ".html" )) ; //false
System . out . println ( "---------------------" );
//String toLowerCase() 把字母都转成其对应的小写形式
//String toUpperCase() 把字母都转成其对应的大写形式
String str06 = "AbCdEf" ;
System . out . println ( str06 . toLowerCase ()); //abcdef
System . out . println ( str06 . toUpperCase ()); //ABCDEF
System . out . println ( "---------------------" );
//String replace(char oldChar, char newChar)用新内容替代旧内容,返回新的字符串
String str07 = " 小学生放假了 , 小学生打游戏 了" ; String str08 = str07 . replace ( " 小学生" , "***" );
System . out . println ( str08 ); //*** 放假了,*** 打游戏了
System . out . println ( "---------------------" );
//char[] toCharArray() 将此字符串转换为一个新的字符数组
String str09 = "abcd" ;
char [] cs = str09 . toCharArray ();
System . out . println ( Arrays . toString ( cs )); //[ a, b, c, d]
System . out . println ( "---------------------" );
//byte[] getBytes() 把字符串转换为字节数组
String str10 = "hello" ;
byte [] bs = str10 . getBytes ();
System . out . println ( Arrays . toString ( bs )); //[
104, 101, 108, 108, 111]
System . out . println ( "---------------------" );
// String trim() 移除首尾空格
String str11 = " zhangsan " ;
String str12 = str11 . trim ();
System . out . println ( str12 );
System . out . println ( "---------------------" );
//String[] split(String regex) 根据给定正则表达式的匹配拆分此字符串。
// 传入一个普通的字符串 , 没有特殊含义
String str13 = "a,b,c,d,e" ;
String [] sp01 = str13 . split ( "," );
System . out . println ( Arrays . toString ( sp01 )); //[a, b, c, d, e]
// 高级用法 : 传入有特殊含义的字符串 , 其实就是正则表达式
// 正则表达式 : . 匹配任何单字符
String str14 = "a.b.c.d.e" ;
String [] sp02 = str14 . split ( "\\." );
System . out . println ( Arrays . toString ( sp02 ));
}

}

.StringBuilder

4.1 String类字符串拼接问题

public static void main ( String [] args ) {
String str = "hello" ;
str += "world" ;
System . out . println ( str );
}
}
API 中对 String 类有这样的描述:字符串是常量,它们
的值在创建后不能被更改。
根据这句话分析我们的代码,其实总共产生了三个字符
: Hello World HelloWorld
String 类的字符串拼接 , 每一次拼接完都会得到一个新的
字符串对象 , 所以比较耗时 , 也浪费空间。

4.2 StringBuilder类概述

StringBuilder 是一个可变的字符串类 ,我们可以把它
看成是一个容器,这里的可变指的是 StringBuilder 对象
中的内容是可变的。
StringBuilder 类和 String 类的区别
String 类:内容是不可变的
StringBuilder 类:内容是可变的

4.3 StringBuilder类的构造方法

public StringBuilder() 创建一个空白可变字符串对
象,不含有任何内容
public StringBuilder(String str) 根据字符串的内容,
来创建可变字符串对象
public class DemoTest {
public static void main ( String [] args ) {
//public StringBuilder() :创建一个空白可变字符串对象,不含有任何内容
StringBuilder sb01 = new StringBuilder ();
System . out . println ( "sb01=" + sb01 );
System . out . println ( " 长度=" + sb01 . length ());
//public StringBuilder(String str) :根据字符串的内容,来创建可变字符串对象
StringBuilder sb02 = new StringBuilder ( "hello" );
System . out . println ( "sb02=" + sb02 );
System . out . println ( " 长度 =" + sb02 . length ());
}
}

4.4 StringBuilder类常用方法

public StringBuilder append( 任意类型 ) 拼接数据,
并返回对象本身
public StringBuilder insert(int offset, 任意类型 )
指定位置插入数据 , 并返回对象本身
public StringBuilder reverse() 反转字符串 , 并返回对
象本身
public class DemoTest {
public static void main ( String [] args ) {
StringBuilder sb01 = new
StringBuilder ();
//public StringBuilder append( 任意类
) 拼接数据,并返回对象本身
// StringBuilder sb02 = sb01.append("hello");
System.out.println(sb02==sb01);//true
// sb01.append(123);
// System.out.println(sb01);
//public StringBuilder insert(int offset, 任意类型 )
// 在指定位置插入数据 , 并返回对象本身
// sb01.insert(5,"world");
// System.out.println(sb01)
//public StringBuilder reverse() 反转字符串, 并返回对象本身
// StringBuilder sb03 = sb01.reverse();
// System.out.println(sb01==sb03);
// System.out.println(sb01);
// 链式编程
sb01 . append ( "hello" ). append ( 123 ). insert ( 5 , "world" ). reverse ();
System . out . println ( sb01 );
}
}

4.5 StringBuilderString相互转换

StringBuilder 转换为 String
public String toString() :通过 StringBuilder 类中的
toString() 就可以实现把 StringBuilder 转换为 String
String 转换为 StringBuilder
public StringBuilder(String s) :通过 StringBuilder 的构
造方法就可以实现把 String 转换为 StringBuilder
public class DemoTest {
public static void main ( String [] args ) {
//String -->StringBuilder
String str01 = "hello" ;
StringBuilder sb = new StringBuilder ( str01 );
sb . append ( "world" );
//StringBuilder --> String
String s = sb . toString ();
System . out . println ( s );
}
}
ok了家人们睡了明天见

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

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

相关文章

Linux多进程和多线程(四)进程间通讯-定时器信号和子进程退出信号

多进程(四) 定时器信号alarm()函数示例alarm()函数的限制定时器信号的实现原理setitimer()函数setitimer()和alarm()函数的区别 setitimer() old_value参数的示例 对比alarm()区别总结&#xff1a; 子进程退出信号 示例: 多进程(四) 定时器信号 SIGALRM 信号是用来通知进程…

新声创新20年:无线技术给助听器插上“娱乐”的翅膀

听力损失并非现代人的专利&#xff0c;古代人也会有听力损失。助听器距今发展已经有二百多年了&#xff0c;从当初单纯的声音放大器到如今的全数字时代助听器&#xff0c;助听器发生了翻天覆地的变化&#xff0c;现代助听器除了助听功能&#xff0c;还具有看电视&#xff0c;听…

微信小程序 调色板

注意&#xff1a;是在uniapp中直接使用的一个color-picker插件&#xff0c;改一下格式即可在微信小程序的原生代码中使用 https://github.com/KirisakiAria/we-color-picker 这是插件的地址&#xff0c;使用的话先把这个插件下载下来&#xff0c;找到src&#xff0c;在项目创…

FreeRTOS和UCOS操作系统使用笔记

FreeRTOS使用示例 UCOS使用示例 信号量使用 信号量访问共享资源区/ OS_SEMMY_SEM; //定义一个信号量&#xff0c;用于访问共享资源OSSemCreate ((OS_SEM* )&MY_SEM, //创建信号量&#xff0c;指向信号量(CPU_CHAR* )"MY_SEM", //信号量名字(OS_SEM_CTR )1, …

imx6ull/linux应用编程学习(8)PWM应用编程(基于正点)

1.应用层如何操控PWM&#xff1a; 与 LED 设备一样&#xff0c; PWM 同样也是通过 sysfs 方式进行操控&#xff0c;进入到/sys/class/pwm 目录下 这里列举出了 8 个以 pwmchipX&#xff08;X 表示数字 0~7&#xff09;命名的文件夹&#xff0c;这八个文件夹其实就对应了…

守护矿山安全生产:AI视频分析技术在煤矿领域的应用

随着人工智能&#xff08;AI&#xff09;技术的快速发展&#xff0c;其在煤矿行业的应用也日益广泛。AI视频智能分析技术作为其中的重要分支&#xff0c;为煤矿的安全生产、过程监测、效率提升和监管决策等提供了有力支持。 一、煤矿AI视频智能分析技术的概述 视频智慧煤矿AI…

数据库测试数据准备厂商 Snaplet 宣布停止运营

上周刚获知「数据库调优厂商 OtterTune 宣布停止运营」。而今天下班前&#xff0c;同事又突然刷到另一家海外数据库工具商 Snaplet 也停止运营了。Snaplet 主要帮助开发团队在数据库中生成仿真度高且合规的测试数据。我们在年初还撰文介绍过它「告别手搓&#xff01;Postgres 一…

Continual Test-Time Domain Adaptation--论文笔记

论文笔记 资料 1.代码地址 https://github.com/qinenergy/cotta 2.论文地址 https://arxiv.org/abs/2203.13591 3.数据集地址 论文摘要的翻译 TTA的目的是在不使用任何源数据的情况下&#xff0c;将源预先训练的模型适应到目标域。现有的工作主要考虑目标域是静态的情况…

Vue项目打包上线

Nginx 是一个高性能的开源HTTP和反向代理服务器&#xff0c;也是一个IMAP/POP3/SMTP代理服务器。它在设计上旨在处理高并发的请求&#xff0c;是一个轻量级、高效能的Web服务器和反向代理服务器&#xff0c;广泛用于提供静态资源、负载均衡、反向代理等功能。 1、下载nginx 2、…

探讨命令模式及其应用

目录 命令模式命令模式结构命令模式适用场景命令模式优缺点练手题目题目描述输入描述输出描述题解 命令模式 命令模式是一种行为设计模式&#xff0c; 它可将请求转换为一个包含与请求相关的所有信息的独立对象。 该转换让你能根据不同的请求将方法参数化、 延迟请求执行或将其…

【高级篇】第9章 Elasticsearch 监控与故障排查

9.1 引言 在现代数据驱动的应用架构中,Elasticsearch不仅是海量数据索引和搜索的核心,其稳定性和性能直接影响到整个业务链路的健康度。因此,建立有效的监控体系和掌握故障排查技能是每一位Elasticsearch高级专家的必备能力。 9.2 监控工具:洞察与优化的利器 在Elastics…

Rough.js在Vue3中生成随机蒙德里安风格的抽象艺术

本文由ScriptEcho平台提供技术支持 项目地址&#xff1a;传送门 Mondrian风格艺术生成器&#xff1a;用Vue和RoughJS创造抽象艺术 应用场景 Mondrian风格艺术以其大胆的色彩块和简单的几何形状而闻名。这种风格可以应用于各种设计项目&#xff0c;包括海报、插图和网页设计…

基于Web技术的教育辅助系统设计与实现(SpringBoot MySQL)+文档

&#x1f497;博主介绍&#x1f497;&#xff1a;✌在职Java研发工程师、专注于程序设计、源码分享、技术交流、专注于Java技术领域和毕业设计✌ 温馨提示&#xff1a;文末有 CSDN 平台官方提供的老师 Wechat / QQ 名片 :) Java精品实战案例《700套》 2025最新毕业设计选题推荐…

Markdown+VSCODE实现最完美流畅写作体验

​下载VSCODE软件 安装插件 Markdown All in One &#xff1a;支持markdown的语言的&#xff1b; Markdown Preview Enhanced &#xff1a;观看写出来文档的效果&#xff1b; Paste IMage :添加图片的 Code Spell Checker检查英文单词错误&#xff1b; 基础语法 标题 #一个…

AI 会淘汰程序员吗?

前言 前些日子看过一篇文章&#xff0c;说国外一位拥有 19 年编码经验、会 100% 手写代码的程序员被企业解雇了&#xff0c;因为他的竞争对手&#xff0c;一位仅有 4 年经验、却善于使用 Copilot、GPT-4 的后辈&#xff0c;生产力比他更高&#xff0c;成本比他更低&#xff0c…

西南交通大学【算法分析与设计实验3】

实验3.3 任务分配问题 实验目的 &#xff08;1&#xff09;理解穷举法典型算法的求解过程。 &#xff08;2&#xff09;学习穷举法的时间复杂度分析方法&#xff0c;并通过实验验证算法的执行效率。 &#xff08;3&#xff09;学会如何利用穷举法求解具体问题&#xff0c;了…

按是否手工执行测试的角度划分:手工测试、自动化测试

1.手工测试&#xff08;Manual testing&#xff09; 手工测试是由人一个一个的输入用例&#xff0c;然后观察结果&#xff0c;和机器测试相对应&#xff0c;属于比较原始但是必须的一个步骤。 由专门的测试人员从用户视角来验证软件是否满足设计要求的行为。 更适用针对深度…

哈希表 | 哈希查找 | 哈希函数 | 数据结构 | 大话数据结构 | Java

&#x1f64b;大家好&#xff01;我是毛毛张! &#x1f308;个人首页&#xff1a; 神马都会亿点点的毛毛张 &#x1f4cc;毛毛张今天分享的内容&#x1f586;是数据结构中的哈希表&#xff0c;毛毛张主要是依据《大话数据结构&#x1f4d6;》的内容来进行整理&#xff0c;不…

程序化交易广告及其应用

什么是程序化交易广告&#xff1f; 程序化交易广告是以实时竞价技术即RTB&#xff08;real-time bidding&#xff09;为核心的广告交易方式。说到这里&#xff0c;你可能会有疑问&#xff1a;像百度搜索关键词广告还有百度网盟的广告&#xff0c;不也是CPC实时竞价的吗&#x…

创建kset

1、kset介绍 2、相关结构体和api介绍 2.1 struct kset 2.2 kset_create_and_add kset_create_and_addkset_createkset_registerkobject_add_internalkobject_add_internal2.3 kset_unregister kset_unregisterkobject_delkobject_put3、实验操作 #include<linux/module.…