windows kafka mq 安装和使用介绍 及踩坑记录 及集群架构kafka实现架构 各自运行机制 一次性看明白

news2024/9/24 19:17:05

 目录

介绍

安装集群

简单介绍按照步骤

zookeeper 安装

kafka安装

基础配置3个节点

在配置三个启动bat

重点

常见问题

内存不够配置文件中增加如下

java.io.IOException: Map failed

基础使用

创建主题

查看创建

生产者

消费者

应用场景

kafka一些原理和特点

基准测试 内置性能测试 生产者 消费者 tps

基准测试

测试步骤:

测试结果:

java 写

集群架构

幂等性

生产者写入分区策略

消费者组再均衡

副本机制

低级api 高级 api

Kafka-eagl监控工具

Ar 、ISR 、 OSR 已分配副本 同步中副本 、不同步副本

Controller

执行leader 重新分配

Kafka读写流程

LEO log end offset

物理存储 稠密索引 稀疏索引

Kafka物理存储

深入了解读数据流程

删除消息

*消息不丢失机制

Broker数据不丢失

生产者数据不丢失

消费者数据不丢失

**消息丢失流程*

**重复消费*

**数据库事务保证成功(数据不丢失,解决重复消息,保证执行一次)*

数据积压

定期清理

java 示例代码

java 生产消息示例代码

java 消费消息


介绍

        更详细的安装细节可以从网上搜非常多,这里主要做重点总结和踩坑经验,在众多的文章中,只要保证在重点中有的内容,都加上了,服务一定可以稳定运行正常使用。看踩坑经验省去踩坑,此篇文章主要介绍此些方面。

安装集群

简单介绍按照步骤

zookeeper 安装

①下载Zookeeper地址:https://zookeeper.apache.org/releases.html

②解压文件

③在文件E:\zookeeper\zookeeper-3.7.0内,新增两个文件夹,分别命名为dataDir和dataLogDir

④进入 E:\zookeeper\zookeeper-3.7.0\conf 文件内,复制zoo_sample.cfg文件,并将新复制的文件命名为zoo.cfg,修改文件zoo.cfg内容
 修改内容

dataDir=E:\zookeeper\zookeeper-3.7.0\dataDir

dataLogDir=E:\zookeeper\zookeeper-3.7.0\dataLogDir

 ⑥运行Zookeeper: 打开cmd然后执行zkserver 命令

kafka安装

①下载kafka地址:http://kafka.apache.org/downloads.html

②解压文件

本文:解压到 E:\kafka\kafka_2.13-2.8.0

③进入E:\kafka\kafka_2.13-2.8.0\config文件内,修改文件server.properties

log.dirs=E:\kafka\kafka_2.13-2.8.0\logs

④执行启动kafka $.\bin\windows\kafka-server-start.bat .\config\server.properties

到此 单机kafka就启动了,接下来看集群版本如下

基础配置3个节点

#

num.network.threads=3
num.io.threads=8
socket.send.buffer.bytes=102400
socket.receive.buffer.bytes=102400
socket.request.max.bytes=104857600
num.partitions=1
num.recovery.threads.per.data.dir=1
offsets.topic.replication.factor=1
transaction.state.log.replication.factor=1
transaction.state.log.min.isr=1
log.retention.hours=168
log.retention.check.interval.ms=300000
group.initial.rebalance.delay.ms=0
#
zookeeper.connect=127.0.0.1:2181
zookeeper.connection.timeout.ms=18000
host.name=localhost
port=9001
listeners=PLAINTEXT:// localhost:9001
advertised.listeners=PLAINTEXT:// localhost:9001
broker.id=1
log.dirs=/tmp/kafka/logs1

 

修改重点9002

host.name=localhost
port=9002
listeners=PLAINTEXT:// localhost:9002
advertised.listeners=PLAINTEXT:// localhost:9002
broker.id=2
log.dirs=/tmp/kafka/logs2

 9003

port=9003
listeners=PLAINTEXT:// localhost:9003
advertised.listeners=PLAINTEXT:// localhost:9003
broker.id=3
log.dirs=/tmp/kafka/logs3

在配置三个启动bat

依次启动

d:
cd D:\kf\kafka\kafka_2.12-3.4.0\bin\windows

kafka-server-start.bat ../../config/server1.properties

pause

endlocal
d:
cd D:\kf\kafka\kafka_2.12-3.4.0\bin\windows

kafka-server-start.bat ../../config/server2.properties

pause

endlocal
d:
cd D:\kf\kafka\kafka_2.12-3.4.0\bin\windows

kafka-server-start.bat ../../config/server3.properties

pause

endlocal

 

重点

如果日志库id 单机集群有错误的覆盖要删除否则报错起不来

listeners=PLAINTEXT:// localhost:9003

advertised.listeners=PLAINTEXT:// localhost:9003

要带上 PLAINTEXT://

单机不开启这俩个也没啥事

常见问题

内存不够配置文件中增加如下

set JAVA_OPTS=-server -Xms512m -Xmx512m -XX:PermSize=256m -XX:MaxPermSize=256m。

java.io.IOException: Map failed

       要么就是内存配置大了,本机不够用,要么就是小了启动不起来,调调即可,大不好使那就配置小点灵活分析。

set KAFKA_HEAP_OPTS=-Xmx256M -Xms256M



set KAFKA_HEAP_OPTS=-Xmx512M -Xms512M



set KAFKA_HEAP_OPTS=-Xmx1G -Xms1G

基础使用

        一般用于测试下安装的结果怎么样,保证可以正常运行

创建主题

bin/kafka-topics.sh --create --topic quickstart-events --bootstrap-server localhost:9092



kafka-topics.bat --create --topic quickstart-events --bootstrap-server localhost:9092

查看创建

kafka-topics.sh --describe --topic quickstart-events --bootstrap-server localhost:9092



kafka-topics.bat --describe --topic quickstart-events --bootstrap-server localhost:9092

生产者

$ bin/kafka-console-producer.sh --topic quickstart-events --bootstrap-server localhost:9092



kafka-console-producer.bat --topic quickstart-events --bootstrap-server localhost:9092
This is my first event

This is my second event

消费者

$ bin/kafka-console-consumer.sh --topic quickstart-events --from-beginning --bootstrap-server localhost:9092



kafka-console-consumer.bat --topic quickstart-events --from-beginning --bootstrap-server localhost:9092
This is my first event

This is my second event

应用场景

  1. 异步处理:单主任务多子任务并发异步处理
  2. 项目解耦:上下游,消息规范,代码可以随意开发
  3. 流量消峰:
    1. 一般情况:618 双11 一般数据库会成为瓶颈
    2. 解决方式:先把消息存到消息列队中,提示客户等待中(客户看到等待5分钟,等待5分钟后再刷新,比较人性化)
  4. 大数据日志处理:如用户审计日志用户点击,发送到消息列队,任务再去消费记录ES等>spark消费大数据汇总>生成redis报告

kafka ui

 https://github.com/provectus/kafka-ui/releases

GitHub - provectus/kafka-ui: Open-Source Web UI for Apache Kafka Management

kafka tool 

https://www.kafkatool.com/download.html 

kafka一些原理和特点

基准测试 内置性能测试 生产者 消费者 tps

基准测试


基准测试(benchmark testing)是一种测量和评估软件性能指标的活动。我们可以通过基准测试,了解到软件、硬件的性能水平。主要测试负载的执行时间、传输速度、吞吐量、资源占用率等。

 

基于1个分区1个副本的基准测试


测试步骤:


1.启动Kafka集群
2.创建一个1个分区1个副本的topic: benchmark
3.同时运行生产者、消费者基准测试程序
4.观察结果
4.1 创建topic

bin/kafka-topics.sh --zookeeper node1.itcast.cn:2181 --create --topic benchmark --partitions 1 --replication-factor 1


4.2 生产消息基准测试
在生产环境中,推荐使用生产5000W消息,这样会性能数据会更准确些。为了方便测试,课程上演示测试500W的消息作为基准测试。

bin/kafka-producer-perf-test.sh --topic benchmark --num-records 5000000 --throughput -1 --record-size 1000 --producer-props bootstrap.servers=node1.itcast.cn:9092,node2.itcast.cn:9092,node3.itcast.cn:9092 acks=1


测试结果:

吞吐量

93092.533979 records/sec

每秒9.3W条记录

吞吐速率

(88.78 MB/sec)

每秒约89MB数据

平均延迟时间

346.62 ms avg latency

最大延迟时间

1003.00 ms max latency

java 写

引入pom.xml

       Kafka-client.jar

 

    1. 服务器地址
    2. Acks kafka策略
    3. Key val Senaizer 序列化方式
    4. 创建生产者
    5. 调用send发送 producerRecor 封装的key val
    6. 调用futue.get() 获取响应
    7. 关闭生产者
  1. Offset

消费者

       Properties p = new Properties();

  1. 服务器地址
  2. Group.id 消费组
  3. 自动提交offset
  4. 自动提交offsest的时间间隔
  5. Group.id 一个消费组中一起消费()
  6. Offset 拉取模式
  7. 一批一批的拉去

生产者同步等待发送消息

 

生产者异步回调发送消息

成功或者异常

匿名内部类实现 callback()

  1. 主题
  2. 分区id
  3. 偏移量

 

集群架构

 

分区=分布式

副本=备份和数据服务-副本一般大于1 可以容错

消费者指定分区

生产者指定分区

Offset = 偏移量 存在 zookeeper 中

       可以自动提交offset 到 zookeeper

Offset 对应分区

 

桶 是服务器 生产者消费者链接桶

集群有多个桶注册实现负载均衡

主题多个,一个主题有多个分区

逻辑结构果审查消费都要指定topic

分区是分布式,topic 可以在多个分区中

消费组消费对应的topic配置group.id 一样消费者属于通一个组

Offset 偏移量,相对消费者,分片可以通过offset拉去数据

多个分区对应多个消费者

俩个消费者消费一个分区=一个等待一个消费

多少个分区,只能被同一个分组中多个少个消费者消费

幂等性

       防止重复一模一样数据

如果一个任务生成失败,重试,多次可能出现幂等性问题一样值

Sequence Number (递增id)+PID 和生成这一起发送,kafka 检查,保存成功返回ack

Sequence Number (递增id)+PID实现生产者的防止幂等性

  1. 生产者 发送到分区,kafka 保存到分区,返回一个ack ,若果失败,生产者会重新发送
  2. Kafka开启幂等性
  3. Kafka 生成消息的时候会增加一个pid 生产者唯一编号,和sequencenumber 最大消息递增
  4. 发消息会练着pid和sequence number 一块发送
  5. Kafka 接受道下次,会将消息和pid sequence number 一并保存小赖
  6. 如果ack响应失败,生产者重试,再次发送消息,kafka会根据pid和 sequence number 是否保存同一条消息
  7. 判断条件,生产者发过来的sequencenumber 是否小于等于分片中的sequence
  8. 实现防止重复

生产者写入分区策略

  1. 轮询分区
  2. 随机分区
  3. 按照key分区
  4. 自定义策略

乱序问题

 

 Key = null 默认 轮询 规则

消费者组再均衡

  1. 消费者数量发生变化,触发
  2. 订阅主题数量发生变化,触发
  3. 订阅分区数量发生变化,触发

触发,所有消费者暂停等待,重新分配规则执行(均衡消费者)

        1. 消费者规则

 

Range范围分配策略

8%3 3 3 2

RoundRobin 轮询

Stricky 粘性分配

       发生再分配的时候尽量和之前一样

副本机制

数据丢失,依然保证数据可用

生产者Ack  规则:

  1. -1 or All  全部副本同步,再发一下一条,性能稍低一点,保证数据不丢失
  2. 0 不等待副本同步,性能最好会有概率数据丢失,性能高
  3. 1 成功写入领导分区,再发下一条(一个分区有一个领导),性能中

分区有 领导 和 随从 :

  1. 领导为了消费数据是一直的,只能从一个分区中读写消息
  2. Follower 事情做同步数据 backup

低级api 高级 api

  1. 低级api操作性更强
  2. 高级api操作内容少简单集成

 

Kafka-eagl监控工具

  1. KAFKA-eagle 监控集群可视化工具

EFAK

开启 kafka jmx 端口

安装教程:视频

018.安装Kafka egale_哔哩哔哩_bilibili

安装教程:文章

【kafka可视化工具】kafka-eagle在windows环境的下载、安装、启动与访问_kafka eagle下载_No8g攻城狮的博客-CSDN博客

        1. 分区的leader 与follower
  1. 每个分区都有一个leader实现均衡
  2. Follower 制作副本,leader挂掉的时候替补上去

Ar 、ISR 、 OSR 已分配副本 同步中副本 、不同步副本

  1. AR分区所有已分配副本
  2. ISR 在同步中的副本
  3. OSR 不同步副本

如果有一个节点挂掉,分区领导会渠道其他地方当上领导 保持分区总数到位

应为数据量大要保证性能所以尽快选举领导

       如此设计副本作为及时选举当上领导实现高性能

举个例子

       0、1、2 节点 三个 副本 0挂掉 0的领导会在 1 or 2 上马上出现领导,实现保证分区全在

Controller

每个桶中有一个 controller 执行api

  1. 每个节点启动都会去zk 上申请成为 controller
  2. 如果有一个节点挂掉 会再次申请 controller
  3.  

 

执行leader 重新分配

 

Kafka读写流程

写流程:

  1. 通过zookeeper 找leader
  2. 分配开始读写
  3. Isr中的副本同步数据,并返回给leader ack
  4. 返回给 分片ack

读流程:

  1. 通过zookeeper 找leader
  2. 通过zookeeper 找到 消费者对应的offset
  3. 然后从offset顺序拉去
  4. 提交offset 自动提交 手动提交

LEO log end offset

文件默认最大1个G

             

 

物理存储 稠密索引 稀疏索引

 

 

- 稀疏索引需要的空间小,占用内存也小,但是查询次数更多,速度较慢。

- 稠密索引占用空间大,但是查询次数更少,速度更快。  

  1. Offset 找对应的数据
  2. 全局offset 找到对应的分片,分片对应offset 对应多个文件每个文件对应单独的offset
  3. 对应稀疏索引 俩层索引寻址

分片油多个文件组成,每个文件设置大小默认1G

 

 

  1. Segment 段包含 index log  timeindex snapshot

Kafka物理存储

  1. Topic
  2. Parition
  3. Segment
    1. Log数据文件
    2. Index索引文件
    3. Timeindex 稀疏索引

深入了解读数据流程

  1. 消费者offset 针对一个 分片找到 全局offset
  2. 根据这个全局offset找到对应的segment组的局部offset
  3. 根据全局的offset可以从index稀疏索引找到对应数据的位置
  4. 开始顺序读取

删除消息

Kafka定期清理数据,一次删除对应的 segment段的数据

Kafka日志管理器 会根据配置删除

 

*消息不丢失机制

Broker数据不丢失

       所有写都写到leader 副本保存,leader崩溃,副本还有数据,所以不会丢失,另外 isc,数据都是同步到副本才返回写入成功。

生产者数据不丢失

       ACK = -1 or all 全部同步数据不丢失

       ACK = 0 丢失

       ACK = 1 少量丢失

消费者数据不丢失

       只要记录好offset就不会丢失,要保持好offset。,先保证数据库或redis记录好 offset 后在处理返回。

Mq》消费者》数据库

Mq<(提交offset)消费者<(保存成功)数据库

      

 

**消息丢失流程*

 

**重复消费*

写入mysql成功,写入zookeeper失败,就会出现重复消费

 

**数据库事务保证成功(数据不丢失,解决重复消息,保证执行一次)*

把提交offset 和放到数据库事务中,offset提交成功,提交数据库中的事务

 

数据积压

例如 数据库提交报错,导致积压,开发查日志解决

消费超时 网络抖动

建议降级慢点发

定期清理

日志删除

日志整合压缩

       如:相同的key报错最后一个

设置定期删除

  1. 基于时间保留策略 默认7天
  2. 基于文件大小保留策略
  3. 基于日志起始偏移量策略

# 启用删除主题

delete.topic.enable=true

# 检查日志段文件的间隔时间,以确定是否文件属性是否到达删除要求。

log.retention.check.interval.ms=1000

 

 

 

java 示例代码

java 生产消息示例代码

@Test
    public void testProducer1() throws InterruptedException {
        Properties prop = new Properties();
        prop.put("bootstrap.servers", "localhost:9092");
        prop.put("key.serializer", "org.apache.kafka.common.serialization.StringSerializer");
        prop.put("value.serializer", "org.apache.kafka.common.serialization.StringSerializer");
        prop.put("acks", "all");
        prop.put("retries", 0);
        prop.put("batch.size", 16384);
        prop.put("linger.ms", 1);
        prop.put("buffer.memory", 33554432);
        String topic = "test02";
        KafkaProducer<String, String> producer = new KafkaProducer<>(prop);
        int i = 0;
        while (true) {
            i++;
            Thread.sleep(600);
//        for (int i = 0; i < 1000; i++) {
            final String key = i + "";
            producer.send(new ProducerRecord<String, String>(topic, key, key+"  hello " + UUID.randomUUID()), new Callback() {
                @Override
                public void onCompletion(RecordMetadata recordMetadata, Exception e) {
                    if (e == null) {
                        System.out.println(key + " send success");
                    } else {
                        System.out.println(key + "send fail");
                    }
                }
            });
        }

//        producer.close();

    }

java 消费消息

public static final String brokerList = "localhost:9092";
@Test
public void testConsumer1() {
    String recordStrFormat = "offset = %d, key = %s, value = %s\n";
    Properties props = new Properties();
    props.put("bootstrap.servers", "localhost:9092");
    props.put("group.id", "group1");
    props.put("enable.auto.commit", "true");
    props.put("auto.commit.interval.ms", 1000);
    props.put("session.timeout.ms", 30000);
    props.put("key.deserializer", "org.apache.kafka.common.serialization.StringDeserializer");
    props.put("value.deserializer", "org.apache.kafka.common.serialization.StringDeserializer");

    KafkaConsumer<String, String> consumer = new KafkaConsumer<String, String>(props);
    //test test2 为topic的名字
    consumer.subscribe(Arrays.asList("test", "test11","test02"));
    try {
        while (true) {
            ConsumerRecords<String, String> records = consumer.poll(100);
            for (ConsumerRecord<String, String> record : records) {
                System.out.printf((recordStrFormat) + "%n", record.offset(), record.key(), record.value());
            }
        }
    } finally {
        if (null != consumer) consumer.close();
    }

}

ok

 

持续更新

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

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

相关文章

让自动化测试秒杀繁琐操作?试试PO模式设计框架

目录&#xff1a;导读 引言 po模式 优势&#xff1a; 目录解释&#xff1a; 页面对象设计模式&#xff1a; base基础层&#xff1a; page对象层&#xff1a; test:测试层 data数据层&#xff1a; common层&#xff1a; untils: config层&#xff1a; run层&#xff1a;…

救生衣、划船背心、救生圈、U 形救生圈和投掷式浮垫等个人漂浮设备 (PFD)UL报告标准要求

个人漂浮设备 (PFD) 个人漂浮设备 (PFD) 是帮助人们在水中保持漂浮状态的装备。个人漂浮设备是一个范围较大的商品分类&#xff0c;其中包括救生衣、划船背心、救生圈、U 形救生圈和投掷式浮垫 救生衣 救生衣是一种在使用者正确穿戴时可为其提供支持的服装或设备&#xff0c;由…

Redis【性能 01】Redis 5.x 6.x 7.x 共5个不同版本延迟及性能测试对比分析(单机版默认配置)

延迟及性能测试比对分析过程 1.环境说明2.测试结果Version 5.0.3【待优化版本】Version 5.0.7【云服务器使用的版本】Version 5.0.14【5.x最终版】Version 6.2.12【6.x最终版】Version 7.2-rc1【当前最新的发布候选版】 3.汇总分析3.1 延迟测试结果汇总3.1 性能测试结果汇总 4.…

今天 国际青年节 “International Youth Day “

《劝学》孟郊 击石乃有火&#xff0c;不击元无烟。 人学始知道&#xff0c;不学非自然。 万事须己运&#xff0c;他得非我贤。 青春须早为&#xff0c;岂能长少年。 Strike stones to make it burn; No smoke unless you strike. Youre crude if you dont learn; And you…

Syncthing文件同步 - 免费搭建开源的文件自动同步服务器并公网远程访问【私人云盘】

文章目录 1. 前言2. Syncthing网站搭建2.1 Syncthing下载和安装2.2 Syncthing网页测试2.3 注册安装cpolar内网穿透 3. 本地网页发布3.1 Cpolar云端设置3.2 Cpolar本地设置 4. 公网访问测试5. 结语 1. 前言 在数据爆炸的当下&#xff0c;每天都会产生海量的数据&#xff0c;这些…

SQL注入攻防入门详解

毕业开始从事winform到今年转到 web &#xff0c;在码农届已经足足混了快接近3年了&#xff0c;但是对安全方面的知识依旧薄弱&#xff0c;事实上是没机会接触相关开发……必须的各种借口。这几天把sql注入的相关知识整理了下&#xff0c;希望大家多多提意见。 &#xff08;对于…

ACIS的拓扑基础数据结构

在ACIS中,拓扑基础数据结构按照从低维到高维的顺序包括: Vertex(顶点):表示空间中的一个点,用于定义点的位置和属性。Edge(边):由两个顶点连接而成,具有方向属性,用于定义直线段和圆弧。Coedge(共面边):表示面的边缘,也就是一条边可以被多个面共享。Coedge有两个…

SpringCloud学习(七)——统一网关Gateway

文章目录 1. 网关介绍2. 网关搭建2.1 引入依赖2.2 创建启动类2.3 编写配置2.4 测试 3. 路由断言工厂4. 路由过滤器4.1 过滤器配置4.2 全局过滤器4.3 过滤器执行顺序 5. 跨域问题处理 1. 网关介绍 到现在&#xff0c;我们可以使用Nacos对不同的微服务进行注册并管理配置文件&am…

淘宝天猫公布618整体活动节奏

5月4日消息&#xff0c;淘宝直播618选品会近日在杭州成功举办&#xff0c;淘宝直播商品中心团队和天猫、全球购行业小二在会上与商家、达人主播等参会人士探讨如何选品才能打动消费者、如何保障货品的质量安全、如何完善商品的售后服务等问题&#xff0c;共同分析直播电商行业中…

verilog驱动LCD显示彩条、字符

verilog驱动LCD显示彩条、字符 一、简介 LCD&#xff08;liquid crystal display&#xff09;:液晶显示器 TFT&#xff1a;薄膜晶体管 LCD屏幕接口&#xff1a;常见的LCD屏幕接口有&#xff1a;RGB、MCU、LVDS、MIPI等 RGB LCD接口原理图&#xff1a;其中MISO、MOSI是IIC接…

Acjudge #P1004. 整除三元组

蒟蒻来讲题&#xff0c;还望大家喜。若哪有问题&#xff0c;大家尽可提&#xff01; Hello, 大家好哇&#xff01;本初中生蒟蒻讲解一下Acjudge #P1004. 整除三元组! 原题 题目背景 潍坊高新OI社区打算开讲“数论”了&#xff0c;大家赶紧来学习一下“整除”吧。 题目描述 …

第一章 数字图像本质及基础操作

系列文章目录 第一章 图像本质及基础操作 文章目录 系列文章目录前言一、数字图像的本质二、图像基础理论1.色彩空间1.1 RGB模型1.2 HSV模型1.3 HSL模型1.4 YUV模型1.5 灰度图1.6 OpenCV中色彩空间转换 2.图片的存储3.图像参数 三、图像的基础操作及OpenCV画图1.图像的基础操作…

Hololens2开发指南

练习 - 导入和配置资源 - Training | Microsoft Learn unity需要高版本 用2019.4.30支持平台这没有openxr 用2020.3.36可以&#xff0c;2021版本也可以出现

代码随想录算法训练营第三十天 | 航班问题、二维回溯

回溯法小结 本周小结&#xff01;&#xff08;回溯算法系列三&#xff09; | 代码随想录 (programmercarl.com) 性能分析 子集问题分析&#xff1a; 时间复杂度&#xff1a;O(n 2n)&#xff0c;因为每一个元素的状态无外乎取与不取&#xff0c;所以时间复杂度为O(2n)&…

蚁群算法-车辆配载率的路径优化

车辆配送路径优化问题可描述为&#xff1a;某商超配送中心要使用一定数量的车辆对一批货物进行配送服务&#xff0c;要求在不超过车辆的额定载重量和额定容积的条件下&#xff0c;安排这些货物的装载&#xff0c;使得车辆利用率最高。 针对以上问题做出假设&#xff1a; (1) 只…

Python学习笔记(1)

《Python编程&#xff1a;从入门到实践》学习笔记 python编程软件PyCharm Community Edition 2022.3.2&#xff0c;快捷键&#xff1a;Ctrl/ 表示注释Python代码。 一、变量的命名和使用 1.变量名只能包含字母、数字和下划线。变量名可以字母或下划线打头&#xff0c;但不能以数…

Java开发初学者实用网站

1.慕课网&#xff08;http://www.imooc.com&#xff09;&#xff1a;提供了大量的Java在线教程和视频。 优点 1.广泛的开放性&#xff1a;大规模、开放性和受众广 2.透明性&#xff1a;根据不同兴趣、准备情况和时间来学习所需课程 3.优质资源易获取性&#xff1a;让每位学生…

Python每日一练(20230504)

目录 1. 课程表 Course Schedule I 2. 课程表 Course Schedule II &#x1f31f; 每日一练刷题专栏 &#x1f31f; Golang每日一练 专栏 Python每日一练 专栏 C/C每日一练 专栏 Java每日一练 专栏 1. 课程表 Course Schedule I 你这个学期必须选修 numCourses 门课程&a…

linux ll命令是什么

ll并不是linux下一个基本的命令&#xff0c;它实际上是ls -l的一个别名。 # 查看指定目录下的内容&#xff0c;默认查看当前目录下内容 ls [-ald] [目录名] # 目录名不填写&#xff0c;默认为当前目录。 # -a&#xff1a;列出的全部的文件&#xff0c;包括隐藏文件 # -l&#x…

医院PACS系统源码,各种类型图像专业的图像处理功能,海量数据存储与检索

RIS/PACS系统源码 RIS/PACS系统源码在预约登记、分诊叫号、技师检查、诊断报告、临床浏览、科室管理等环节满足全院相关科室的要求。在医学影像下载、浏览、处理中满足速度快、强化常用功能、方便阅片等要求。满足放射、超声、内镜、病理等影像科室的业务需求。通过与HIS、LIS…