300道 Kafka最全面试题整理(持续更新)

news/2024/7/5 2:21:09

最新Kafka面试题及答案【附答案解析】Kafka面试题大全带答案,Kafka面试题最新面试题,Kafka面试题新答案已经全部更新完了,有些答案是自己总结的,也有些Kafka面试题答案是在网上搜集整理的。这些答案难免会存在一些错误,仅供大家参考。如果发现错误还望大家多多包涵,不吝赐教,谢谢~

如果不背 Kafka面试题的答案,肯定面试会挂!

这套Kafka面试题大全,希望对大家有帮助哈~

博主已将以下这些面试题整理成了一个面试手册,是PDF版的

1、讲讲Kafka维护消费状态跟踪的方法

1、 大部分消息系统在broker端的维护消息被消费的记录:一个消息被分发到consumer后broker就马上进行标记或者等待customer的通知后进行标记。这样也可以在消息在消费后立马就删除以减少空间占用。

2、 但是这样会不会有什么问题呢?如果一条消息发送出去之后就立即被标记为消费过的,一旦consumer处理消息时失败了(比如程序崩溃)消息就丢失了。为了解决这个问题,很多消息系统提供了另外一个个功能:当消息被发送出去之后仅仅被标记为已发送状态,当接到consumer已经消费成功的通知后才标记为已被消费的状态。这虽然解决了消息丢失的问题,但产生了新问题,首先如果consumer处理消息成功了但是向broker发送响应时失败了,这条消息将被消费两次。第二个问题时,broker必须维护每条消息的状态,并且每次都要先锁住消息然后更改状态然后释放锁。这样麻烦又来了,且不说要维护大量的状态数据,比如如果消息发送出去但没有收到消费成功的通知,这条消息将一直处于被锁定的状态,

3、 Kafka采用了不同的策略。Topic被分成了若干分区,每个分区在同一时间只被一个consumer消费。这意味着每个分区被消费的消息在日志中的位置仅仅是一个简单的整数:offset。这样就很容易标记每个分区消费状态就很容易了,仅仅需要一个整数而已。这样消费状态的跟踪就很简单了。

4、 这带来了另外一个好处:consumer可以把offset调成一个较老的值,去重新消费老的消息。这对传统的消息系统来说看起来有些不可思议,但确实是非常有用的,谁规定了一条消息只能被消费一次呢?

2、副本长时间不在ISR中,这意味着什么?

意味着 follower 不能像 leader 收集数据那样快速地获取数据。

3、Kafka中的数据日志是什么?

我们知道,在Kafka中,消息会保留相当长的时间。此外,消费者还可以根据自己的方便进行阅读。尽管如此,有一种可能的情况是,如果将Kafka配置为将消息保留24小时,并且消费者可能停机超过24小时,则消费者可能会丢失这些消息。但是,我们仍然可以从上次已知的偏移中读取这些消息,但仅限于消费者的部分停机时间仅为60分钟的情况。此外,关于消费者从一个话题中读到什么,Kafka不会保持状态。

4、:11,13,14,16,17,18,19Apache Kafka对于有经验的人的面试

5、解释术语“主题复制因子”。

在设计Kafka系统时,考虑主题复制是非常重要的。

6、Kafka为何这么快

Kafka 实现了零拷贝原理来快速移动数据,避免了内核之间的切换。Kafka 可以将数据记录分批发送,从生产者到文件系统(Kafka 主题日志)到消费者,可以端到端的查看这些批次的数据。

批处理能够进行更有效的数据压缩并减少 I/O 延迟,Kafka 采取顺序写入磁盘的方式,避免了随机磁盘寻址的浪费,更多关于磁盘寻址的了解,请参阅 程序员需要了解的硬核知识之磁盘 。总结一下其实就是四个要点

顺序读写

零拷贝

消息压缩

分批发送

7、:3,5,6

8、:31, 32, 33, 34, 38, 39, 40Apache Kafka对于有经验的人的面试

9、怎么解决rebalance中遇到的问题呢?

要避免 Rebalance,还是要从 Rebalance 发生的时机入手。我们在前面说过,Rebalance 主要发生的时机有三个:

组成员数量发生变化

订阅主题数量发生变化

订阅主题的分区数发生变化

后两个我们大可以人为的避免,发生rebalance最常见的原因是消费组成员的变化。

消费者成员正常的添加和停掉导致rebalance,这种情况无法避免,但是时在某些情况下,Consumer 实例会被 Coordinator 错误地认为 “已停止” 从而被“踢出”Group。从而导致rebalance。

当 Consumer Group 完成 Rebalance 之后,每个 Consumer 实例都会定期地向 Coordinator 发送心跳请求,表明它还存活着。如果某个 Consumer 实例不能及时地发送这些心跳请求,Coordinator 就会认为该 Consumer 已经 “死” 了,从而将其从 Group 中移除,然后开启新一轮 Rebalance。这个时间可以通过Consumer 端的参数 session.timeout.ms进行配置。默认值是 10 秒。

除了这个参数,Consumer 还提供了一个控制发送心跳请求频率的参数,就是 heartbeat.interval.ms。这个值设置得越小,Consumer 实例发送心跳请求的频率就越高。频繁地发送心跳请求会额外消耗带宽资源,但好处是能够更加快速地知晓当前是否开启 Rebalance,因为,目前 Coordinator 通知各个 Consumer 实例开启 Rebalance 的方法,就是将 REBALANCE_NEEDED 标志封装进心跳请求的响应体中。

除了以上两个参数,Consumer 端还有一个参数,用于控制 Consumer 实际消费能力对 Rebalance 的影响,即 max.poll.interval.ms 参数。它限定了 Consumer 端应用程序两次调用 poll 方法的最大时间间隔。它的默认值是 5 分钟,表示你的 Consumer 程序如果在 5 分钟之内无法消费完 poll 方法返回的消息,那么 Consumer 会主动发起 “离开组” 的请求,Coordinator 也会开启新一轮 Rebalance。

通过上面的分析,我们可以看一下那些rebalance是可以避免的:

第一类非必要 Rebalance 是因为未能及时发送心跳,导致 Consumer 被 “踢出”Group 而引发的。这种情况下我们可以设置 session.timeout.ms 和 heartbeat.interval.ms 的值,来尽量避免rebalance的出现。(以下的配置是在网上找到的最佳实践,暂时还没测试过)

设置 session.timeout.ms = 6s。设置 heartbeat.interval.ms = 2s。要保证 Consumer 实例在被判定为 “dead” 之前,能够发送至少 3 轮的心跳请求,即 session.timeout.ms >= 3 * heartbeat.interval.ms。将 session.timeout.ms 设置成 6s 主要是为了让 Coordinator 能够更快地定位已经挂掉的 Consumer,早日把它们踢出 Group。

第二类非必要 Rebalance 是 Consumer 消费时间过长导致的。此时,max.poll.interval.ms 参数值的设置显得尤为关键。如果要避免非预期的 Rebalance,你最好将该参数值设置得大一点,比你的下游最大处理时间稍长一点。

总之,要为业务处理逻辑留下充足的时间。这样,Consumer 就不会因为处理这些消息的时间太长而引发 Rebalance 。

10、什么是消费者组?

1、 消费者组是Kafka独有的概念,如果面试官问这个,就说明他对此是有一定了解的。

2、 胡大给的标准答案是:官网上的介绍言简意赅,即消费者组是Kafka提供的可扩展且具有容错性的消费者机制。

3、 但实际上,消费者组(Consumer Group)其实包含两个概念,作为队列,消费者组允许你分割数据处理到一组进程集合上(即一个消费者组中可以包含多个消费者进程,他们共同消费该topic的数据),这有助于你的消费能力的动态调整;作为-订阅模型(publish-subscribe),Kafka允许你将同一份消息广播到多个消费者组里,以此来丰富多种数据使用场景。

4、 需要注意的是:在消费者组中,多个实例共同订阅若干个主题,实现共同消费。同一个组下的每个实例都配置有相同的组ID,被分配不同的订阅分区。当某个实例挂掉的时候,其他实例会自动地承担起它负责消费的分区。因此,消费者组在一定程度上也保证了消费者程序的高可用性。

注意:消费者组的题目,能够帮你在某种程度上掌控下面的面试方向。

1、 如果你擅长位移值原理(Offset),就不妨再提一下消费者组的位移提交机制;

2、 如果你擅长Kafka Broker,可以提一下消费者组与Broker之间的交互;

3、 如果你擅长与消费者组完全不相关的Producer,那么就可以这么说:“消费者组要消费的数据完全来自于Producer端生产的消息,我对Producer还是比较熟悉的。”

总之,你总得对consumer group相关的方向有一定理解,然后才能像面试官表名你对某一块很理解。

11、Kafka 高效文件存储设计特点:

1、 Kafka 把 topic 中一个 parition 大文件分成多个小文件段,通过多个小文件段,就容易定

2、 期清除或删除已经消费完文件,减少磁盘占用。

3、 通过索引信息可以快速定位 message 和确定 response 的最大大小。

4、 通过 index 元数据全部映射到 memory,可以避免 segment file 的 IO 磁盘操作。

5、 通过索引文件稀疏存储,可以大幅降低 index 文件元数据占用空间大小。

12、partition 的数据如何保存到硬盘

topic 中的多个 partition 以文件夹的形式保存到 broker,每个分区序号从 0 递增,

且消息有序

Partition 文件下有多个 segment(xxx.index,xxx.log)

segment 文件里的 大小和配置文件大小一致可以根据要求修改 默认为 1g

如果大小大于 1g 时,会滚动一个新的 segment 并且以上一个 segment 最后一条消息的偏移

量命名

13、当ack为-1时,什么情况下,Leader 认为一条消息 Commit了?

当ISR中所有Replica都向Leader发送ACK时,leader才commit,这时候producer才能认为一个请求中的消息都commit了。

14、为什么Kafka的复制至关重要?

由于复制,我们可以确保的消息不会丢失,并且可以在发生任何机器错误、程序错误或频繁的软件升级时使用。

15、Kafa consumer 是否可以消费指定分区消息?

Kafa consumer 消费消息时,向 broker 发出"fetch"请求去消费特定分区的消息,consumer

指定消息在日志中的偏移量(offset),就可以消费从这个位置开始的消息,customer 拥有

了 offset 的控制权,可以向后回滚去重新消费之前的消息,这是很有意义的

16、Broker的Heap Size如何设置?

1、 其实对于SRE还是送分题,因为目前来讲大部分公司的业务系统都是使用Java开发,因此SRE对于基本的JVM相关的参数应该至少都是非常了解的,核心就在于JVM的配置以及GC相关的知识。

2、 标准答案:任何Java进程JVM堆大小的设置都需要仔细地进行考量和测试。一个常见的做法是,以默认的初始JVM堆大小运行程序,当系统达到稳定状态后,手动触发一次Full GC,然后通过JVM工具查看GC后的存活对象大小。之后,将堆大小设置成存活对象总大小的1.5~2倍。对于Kafka而言,这个方法也是适用的。不过,业界有个最佳实践,那就是将Broker的Heap Size固定为6GB。经过很多公司的验证,这个大小是足够且良好的。

17、什么是消费者或用户?

Kafka消费者订阅一个主题,并读取和处理来自该主题的消息。此外,有了消费者组的名字,消费者就给自己贴上了标签。换句话说,在每个订阅使用者组中,到主题的每个记录都传递到一个使用者实例。确保使用者实例可能位于单独的进程或单独的计算机上。

18、Kafka 如何实现延迟队列?

Kafka并没有使用JDK自带的Timer或者DelayQueue来实现延迟的功能,而是基于时间轮自定义了一个用于实现延迟功能的定时器(SystemTimer)。JDK的Timer和DelayQueue插入和删除操作的平均时间复杂度为O(nlog(n)),并不能满足Kafka的高性能要求,而基于时间轮可以将插入和删除操作的时间复杂度都降为O(1)。时间轮的应用并非Kafka独有,其应用场景还有很多,在Netty、Akka、Quartz、Zookeeper等组件中都存在时间轮的踪影。

底层使用数组实现,数组中的每个元素可以存放一个TimerTaskList对象。TimerTaskList是一个环形双向链表,在其中的链表项TimerTaskEntry中封装了真正的定时任务TimerTask.

Kafka中到底是怎么推进时间的呢?Kafka中的定时器借助了JDK中的DelayQueue来协助推进时间轮。具体做法是对于每个使用到的TimerTaskList都会加入到DelayQueue中。Kafka中的TimingWheel专门用来执行插入和删除TimerTaskEntry的操作,而DelayQueue专门负责时间推进的任务。再试想一下,DelayQueue中的第一个超时任务列表的expiration为200ms,第二个超时任务为840ms,这里获取DelayQueue的队头只需要O(1)的时间复杂度。如果采用每秒定时推进,那么获取到第一个超时的任务列表时执行的200次推进中有199次属于“空推进”,而获取到第二个超时任务时有需要执行639次“空推进”,这样会无故空耗机器的性能资源,这里采用DelayQueue来辅助以少量空间换时间,从而做到了“精准推进”。Kafka中的定时器真可谓是“知人善用”,用TimingWheel做最擅长的任务添加和删除操作,而用DelayQueue做最擅长的时间推进工作,相辅相成。

19、什么是Kafka?

Kafka是分布式-订阅消息系统,它最初是由LinkedIn公司开发的,之后成为Apache项目的一部分,Kafka是一个分布式,可划分的,冗余备份的持久性的日志服务,它主要用于处理流式数据。

20、Kafka判断一个节点是否还活着有那两个条件?

1、 节点必须可以维护和ZooKeeper的连接,Zookeeper通过心跳机制检查每个节点的连接

2、 如果节点是个follower,他必须能及时的同步leader的写操作,延时不能太久

21、列出所有Apache Kafka业务

Apache Kafka的业务包括:添加和删除Kafka主题如何修改Kafka主题如何关机在Kafka集群之间镜像数据找到消费者的位置扩展您的Kafka群集自动迁移数据退出服务器数据中心

22、Kafka 中的消息是否会丢失和重复消费?

要确定Kafka的消息是否丢失或重复,从两个方面分析入手:消息发送和消息消费。

消息发送 Kafka消息发送有两种方式:同步(sync)和异步(async),默认是同步方式,可通过producer.type属性进行配置。Kafka通过配置request.required.acks属性来确认消息的生产:

综上所述,有6种消息生产的情况,下面分情况来分析消息丢失的场景:

acks=0;不和Kafka集群进行消息接收确认,则当网络异常、缓冲区满了等情况时,消息可能丢失;

acks=1;同步模式下,只有Leader确认接收成功后但挂掉了,副本没有同步,数据可能丢失;

0 表示不进行消息接收是否成功的确认;

1 表示当Leader接收成功时确认;

-1 表示Leader和Follower都接收成功时确认;

消息消费 Kafka消息消费有两个consumer接口,Low-level API和High-level API:

Low-level API:消费者自己维护offset等值,可以实现对Kafka的完全控制;

High-level API:封装了对parition和offset的管理,使用简单;如果使用高级接口High-level API,可能存在一个问题就是当消息消费者从集群中把消息取出来、并提交了新的消息offset值后,还没来得及消费就挂掉了,那么下次再消费时之前没消费成功的消息就“诡异”的消失了;

解决办法:

针对消息丢失: 同步模式下,确认机制设置为-1,即让消息写入Leader和Follower之后再确认消息发送成功; 异步模式下,为防止缓冲区满,可以在配置文件设置不限制阻塞超时时间,当缓冲区满时让生产者一直处于阻塞状态;

针对消息重复:将消息的唯一标识保存到外部介质中,每次消费时判断是否处理过即可。

23、Kafka Producer API的作用是什么?

允许应用程序将记录流到一个或多个Kafka主题的API就是我们所说的Producer API。

24、Kafka中有哪几个组件?

Kafka最重要的元素是:

主题:Kafka主题是一堆或一组消息。生产者:在Kafka,生产者发布通信以及向Kafka主题发布消息。消费者:Kafka消费者订阅了一个主题,并且还从主题中读取和处理消息。经纪人:在管理主题中的消息存储时,我们使用Kafka Brokers。

25、为什么要使用Apache Kafka集群?

为了克服收集大量数据和分析收集数据的挑战,我们需要一个消息队列系统。因此Apache Kafka应运而生。其好处是:只需存储/发送事件以进行实时处理,就可以跟踪Web活动。通过这一点,我们可以发出警报并报告操作指标。此外,我们可以将数据转换为标准格式。此外,它允许对主题的流数据进行连续处理。由于它的广泛使用,它秒杀了竞品,如ActiveMQ,RabbitMQ等。

26、为什么Kafka技术很重要?

Kafka有一些优点,因此使用起来很重要:

高吞吐量:我们在Kafka中不需要任何大型硬件,因为它能够处理高速和大容量数据。此外,它还可以支持每秒数千条消息的消息吞吐量。低延迟:Kafka可以轻松处理这些消息,具有毫秒级的极低延迟,这是大多数新用例所要求的。容错:Kafka能够抵抗集群中的节点/机器故障。耐久性:由于Kafka支持消息复制,因此消息永远不会丢失。这是耐久性背后的原因之一。可扩展性:卡夫卡可以扩展,而不需要通过添加额外的节点而在运行中造成任何停机。

27、Kafka 中是怎么体现消息顺序性的?

Kafka 每个 partition 中的消息在写入时都是有序的,消费时,每个 partition 只能被每一个 group 中的一个消费者消费,保证了消费时也是有序的。整个 topic 不保证有序。如果为了保证 topic 整个有序,那么将 partition 调整为1.

28、Kafka能手动删除消息吗?

1、 Kafka不需要用户手动删除消息。它本身提供了留存策略,能够自动删除过期消息。当然,它是支持手动删除消息的。

2、 对于设置了Key且参数cleanup.policy=compact的主题而言,我们可以构造一条 的消息发送给Broker,依靠Log Cleaner组件提供的功能删除掉该 Key 的消息。

3、 对于普通主题而言,我们可以使用Kafka-delete-records命令,或编写程序调用Admin.deleteRecords方法来删除消息。这两种方法殊途同归,底层都是调用Admin的deleteRecords方法,通过将分区Log Start Offset值抬高的方式间接删除消息。

29、Kafka Unclean 配置代表什么?会对 spark streaming 消费有什么影响?

unclean.leader.election.enable 为 true 的话,意味着非 ISR 集合的 broker 也可以参与选举,这样有可能就会丢数据,spark streaming在消费过程中拿到的 end offset 会突然变小,导致 spark streaming job 挂掉。如果 unclean.leader.election.enable 参数设置为 true,就有可能发生数据丢失和数据不一致的情况,Kafka 的可靠性就会降低;而如果 unclean.leader.election.enable 参数设置为 false,Kafka 的可用性就会降低。

30、比较传统队列系统与Apache Kafka

让我们比较一下传统队列系统与Apache Kafka的功能:消息保留 传统的队列系统 - 它通常从队列末尾处理完成后删除消息。 Apache Kafka中,消息即使在处理后仍然存在。这意味着Kafka中的消息不会因消费者收到消息而被删除。基于逻辑的处理传统队列系统不允许基于类似消息或事件处理逻辑。Apache Kafka允许基于类似消息或事件处理逻辑。

更多 Kafkaafka面试题

01、#{}和${}的区别是什么?

02、讲下 MyBatis 的缓存

03、Mybatis 是如何将 sql 执行结果封装为目标对象并返回的?都有哪些映射形式?

04、为什么说Mybatis是半自动ORM映射工具?它与全自动的区别在哪里?

05、Mybatis是如何进行分页的?分页插件的原理是什么?

06、#{}和${}的区别是什么?

07、Mybatis是如何将sql执行结果封装为目标对象并返回的?都有哪些映射形式?

08、Mybatis如何执行批量操作

09、如何获取自动生成的(主)键值?

10、使用Mybatis的mapper接口调用时候有哪些要求?

11、Mybatis是如何进行分页的?分页插件的原理是什么?

12、简述 Mybatis 的插件运行原理,以及如何编写一个插件?

13、MyBatis的功能架构是怎样的

14、Mybatis映射文件中,如果A标签通过include引用了B标签的内容

15、什么是 MyBatis 的接口绑定,有什么好处?

16、简述 Mybatis 的 Xml 映射文件和 Mybatis 内部数据结构之间的映射关系?

17、什么是DBMS

18、模糊查询like语句该怎么写

19、简述Mybatis的插件运行原理,以及如何编写一个插件。

20、简述Mybatis的Xml映射文件和Mybatis内部数据结构之间的映射关系?

21、列出所有Apache Kafka业务

22、Kafka 中的消息是否会丢失和重复消费?

23、Kafka Producer API的作用是什么?

24、Kafka中有哪几个组件?

25、为什么要使用Apache Kafka集群?

26、为什么Kafka技术很重要?

27、Kafka 中是怎么体现消息顺序性的?

28、Kafka能手动删除消息吗?

29、Kafka Unclean 配置代表什么?会对 spark streaming 消费有什么影响?

30、比较传统队列系统与Apache Kafka

31、Apache Kafka是分布式流处理平台吗?如果是,你能用它做什么?

32、Kafka 新建的分区会在哪个目录下创建

34、、连接器API的作用是什么?

14、Kafka的高可用机制是什么?

35、Kafka系统工具有哪些类型?

36、:46, 48

37、解释如何调整Kafka以获得最佳性能。

38、Kafka Producer如何优化写入速度?

39、ZooKeeper在Kafka中的作用是什么?

40、阐述下 Kafka 中的领导者副本(Leader Replica)和追随者副本(Follower Replica)的区别

41、Kafka 高效文件存储设计特点:

42、partition 的数据如何保存到硬盘

43、当ack为-1时,什么情况下,Leader 认为一条消息 Commit了?

44、为什么Kafka的复制至关重要?

45、Kafa consumer 是否可以消费指定分区消息?

46、Broker的Heap Size如何设置?

47、什么是消费者或用户?

48、Kafka 如何实现延迟队列?

49、什么是Kafka?

50、Kafka判断一个节点是否还活着有那两个条件?

51、什么是Apache Kafka?

52、没有zookeeper可以使用Kafka吗?

53、副本和ISR扮演什么角色?

54、什么情况下一个 Broker 会从ISR中踢出去?

55、简述Follower副本消息同步的完整流程

56、Kafka 的消费者如何消费数据

57、Java Consumer为什么采用单线程来获取消息?

58、消息队列的作用

59、Kafka的主要API有哪些?

60、Kafka 判断一个节点是否还活着有那两个条件?

61、Kafka存在那些局限性?

62、Kafka Follower如何与Leader同步数据?

63、系统工具有哪些类型?

64、生产者中,什么情况下会发生 QueueFullException?

65、什么是消费者或用户?

66、能简单说一下rebalance过程吗?

67、producer 是否直接将数据发送到 broker 的 leader(主节点)?

68、流API的作用是什么?

69、Kafka 创建 Topic 时如何将分区放置到不同的 Broker 中

70、什么是Kafka中的地域复制?

如果不背 Kafka面试题的答案,肯定面试会挂!

这套Kafka面试题大全,希望对大家有帮助哈~

博主已将以下这些面试题整理成了一个面试手册,是PDF版的


http://lihuaxi.xjx100.cn/news/244679.html

相关文章

测试部门目标

提高开发质量制定单元测试结果验收标准,通过CI自动检查测试结果是否达标并跟踪解决通过CI自动检查开发代码质量,检查是否达标并跟踪解决通过CI自动检查代码覆盖率,检查是否达标并跟踪解决严格执行冒烟测试,不通过则打回直到通过为…

一句话的设计模式(转)

如题,实际上,我想这是很困难的。 除非——只是为了给自己做一个提醒,能够看一眼就快速回想起该设计模式的种种记忆。 下列是我之前在学习《大话设计模式》时做的笔记总结,当中有部分措辞来自其作者程杰。(非常感谢他为…

使用PostMan测试文件上传接口

1.header,由于没有登录不能访问,要传一个token 2.body,见图 ApiOperation(value "上传身份图片返回上传后文件名") PostMapping(value "/uploadImgFile", headers "content-typemultipart/form-data") public ErrorObject u…

极限编程 (Extreme Programming) - 迭代计划 (Iterative Planning)

(Source: XP - Iteration Planning) 在每次迭代开始时调用迭代计划会议,以生成该迭代的编程任务计划。每次迭代为1到3周。 客户从发布计划中按照对客户最有价值的顺序选择用户故事进行此次迭代。还选择了要修复的失败验收测试。客户选择的用户故事的估计总计达到上次…

Jvm面试题总结及答案 300道(针对Jvm的面试题 )

Jvm面试题及答案(Jvm面试题大全带答案)发现网上很多Jvm面试题及答案整理都没有答案,所以花了很长时间搜集,本套Jvm面试题大全,有大量经典的Jvm面试题以及答案,包含Jvm语言常见面试题、面试经验技巧等&#…

【实用总结】DOM节点className操作

经常用到的小工具函数,每次用到都重写一遍,有点浪费体力,于是决定分阶段整理下,需要用到的时候就直接拷过来用了~ 对于dom节点的className,常用操作不外乎增、删、查(改可以用增删事先&#xff…

Postman系列之@RequestBody修饰的对象传参数

请求地址:http://localhost:8283/api/tblContractPre/updateContractInfoToErp 请求参数: { "city":"深圳市", "uid":"张三", "deedsn":"PRE-HA180900061", "rooms…

Matlab之print,fprint,fscanf,disp函数

print: print函数可以把函数图形保存成图片: [plain] view plaincopy minbnd -4*pi; maxbnd 4*pi; t minbnd:0.1*pi:maxbnd; plot(t, sin(t), g, Linewidth, 2); line([minbnd, maxbnd], [0, 0]); %绘制x轴 axis([-10, 10, -2, 2]) %定义显示的坐标区…