每日学习总结20240220

每日总结

20240220

岁月极美,在于它必然的流逝;春花,秋月,夏日,冬雪。 ——三毛

1.svn操作

通过svn创建一个仓库 请写出一套配置 配置文件包括svnserve.conf passwd authz 三个文件 添加用户xiaoming 密码为lx,使得能访问仓库

要创建一个 Subversion (SVN) 仓库并配置用户访问权限,你需要执行以下步骤:

  1. 创建 SVN 仓库

    svnadmin create /path/to/repository
    
  2. 启动svn服务

    svnserve -d -r 目录 --listen-port 端口号

    • -r: 配置方式决定了版本库访问方式。
    • –listen-port: 指定SVN监听端口,不加此参数,SVN默认监听3690
  3. 配置 svnserve.conf 文件: 在 SVN 仓库的 conf 目录下创建一个 svnserve.conf 文件,并添加以下内容:

    [general]
    anon-access = none
    auth-access = write
    password-db = passwd
    authz-db = authz
    realm = My SVN Repository
    

    这段文本是一个典型的 Subversion (SVN) 服务器配置文件,用于设置 SVN 服务器的一般属性和权限控制。下面逐行进行详细介绍:

    1. [general]:这一行指定了一个一般设置的开始标记。在这个部分,你可以定义 SVN 服务器的一般属性和权限控制。
    2. anon-access = none:这一行设置了匿名用户的访问权限。在这个例子中,设置为 none,表示匿名用户没有访问权限。匿名用户是指没有经过身份验证的用户。
    3. auth-access = write:这一行设置了经过身份验证的用户的访问权限。在这个例子中,设置为 write,表示经过身份验证的用户有写入权限。这意味着用户需要通过用户名和密码进行身份验证,并且具有写入仓库的权限。
    4. password-db = passwd:这一行指定了用于存储用户认证信息的密码数据库文件的路径。在这个例子中,密码数据库文件位于 ./passwd
    5. authz-db = authz:这一行指定了用于存储权限控制信息的认证数据库文件的路径。在这个例子中,权限控制数据库文件位于 ./authz
    6. realm = My SVN Repository:这一行定义了服务器的认证域。认证域是一个逻辑实体,用于区分不同的 SVN 服务器。在这个例子中,认证域被命名为 My SVN Repository

    总体来说,这段配置文件设置了 SVN 服务器的一般属性和权限控制。匿名用户被禁止访问,只有经过身份验证的用户才能进行写入操作。用户认证信息存储在 /home/svn/passwd 文件中,权限控制信息存储在 /home/svn/authz 文件中。认证域被定义为 tiku。这样的设置可以根据实际需求来确保 SVN 服务器的安全和有效管理。

  4. 配置 passwd 文件: 在 SVN 仓库的 conf 目录下创建一个 passwd 文件,并添加以下内容:

    [users]
    xiaoming = lx
    
  5. 配置 authz 文件: 在 SVN 仓库的 conf 目录下创建一个 authz 文件,并添加以下内容:

    [groups]
    admin = xiaoming
    
    [/]
    @admin = rw
    

上述配置的含义是:

  • svnserve.conf 文件中配置了仓库的访问控制规则,禁止匿名用户访问,允许经过身份验证的用户具有写入权限,用户认证信息存储在 passwd 文件中,权限控制信息存储在 authz 文件中,认证域为 My SVN Repository
  • passwd 文件中添加了一个用户名为 xiaoming,密码为 lx 的用户,用于身份验证。
  • authz 文件中定义了一个名为 admin 的用户组,包含了用户 xiaoming。并为根目录 / 设置了 admin 用户组的读写权限。

在以上步骤完成后,你可以启动 SVN 服务器,让用户可以通过用户名和密码进行访问和操作 SVN 仓库。请确保将 /path/to/repository 替换为你实际的 SVN 仓库路径。

2.观察者模式

观察者模式(Observer Pattern)是一种行为设计模式,用于定义对象之间的一对多依赖关系,当一个对象的状态发生变化时,其相关依赖对象都会收到通知并自动更新。在观察者模式中,有两种核心角色:观察者(Observer)和被观察者(Subject)。

  1. 观察者(Observer):观察者是接收被观察者状态变化通知的对象。它定义了一个更新方法,用于在收到通知时更新自身状态或执行相应操作。
  2. 被观察者(Subject):被观察者是维护一组观察者对象并负责通知它们状态变化的对象。它包含注册、删除和通知观察者的方法。

使用场景:

  • 当一个对象的状态变化需要通知其他对象,并且你不知道这些对象的具体数量或类型时,观察者模式非常适用。
  • 当一个对象的修改需要影响其他对象,但又希望对象之间保持松耦合时,观察者模式也很有用。

例如,一个消息队列中的发布-订阅系统(如MQTT)与观察者模式有着相似的行为。在MQTT中,发布者发布消息到主题(Topic),而订阅者订阅感兴趣的主题,并在该主题有消息发布时接收通知。

类比示例:

  • 在观察者模式中,被观察者就像消息队列中的主题,观察者就像订阅了该主题的订阅者。
  • 当被观察者状态变化时,在观察者模式中,观察者会收到通知并更新自身状态。而在MQTT中,订阅了相关主题的客户端会收到发布的消息并执行相应操作。

下面是一个简单的C语言示例来说明观察者模式的实现:

#include <stdio.h>

#define MAX_OBSERVERS 10

// 定义观察者接口
typedef struct {
    void (*update)(void* data);
} Observer;

// 定义被观察者结构体
typedef struct {
    Observer* observers[MAX_OBSERVERS];
    int count;
} Subject;

// 初始化被观察者
void subject_init(Subject* subject) {
    subject->count = 0;
}

// 注册观察者
void subject_register_observer(Subject* subject, Observer* observer) {
    if (subject->count < MAX_OBSERVERS) {
        subject->observers[subject->count++] = observer;
    } else {
        printf("Cannot register more observers\n");
    }
}

// 通知观察者
void subject_notify_observers(Subject* subject, void* data) {
    for (int i = 0; i < subject->count; ++i) {
        subject->observers[i]->update(data);
    }
}

// 定义观察者更新函数
void observer_update_function(void* data) {
    int* value = (int*)data;
    printf("Received update: %d\n", *value);
}

int main() {
    Subject subject;
    subject_init(&subject);

    // 创建观察者
    Observer observer1 = { .update = observer_update_function };
    Observer observer2 = { .update = observer_update_function };

    // 注册观察者
    subject_register_observer(&subject, &observer1);
    subject_register_observer(&subject, &observer2);

    // 模拟状态变化并通知观察者
    int data = 42;
    subject_notify_observers(&subject, &data);

    return 0;
}

这个示例中,Subject代表被观察者,Observer代表观察者。subject_register_observer用于注册观察者,subject_notify_observers用于通知观察者。observer_update_function是观察者的更新函数,当被观察者发生变化时会被调用。

#include <iostream>
#include <vector>

// 观察者基类
class Observer {
public:
    virtual void update(int value) = 0;
};

// 具体观察者A
class ConcreteObserverA : public Observer {
public:
    void update(int value) override {
        std::cout << "ConcreteObserverA: Received update with value " << value << std::endl;
    }
};

// 具体观察者B
class ConcreteObserverB : public Observer {
public:
    void update(int value) override {
        std::cout << "ConcreteObserverB: Received update with value " << value << std::endl;
    }
};

// 主题类
class Subject {
private:
    int data;
    std::vector<Observer*> observers;

public:
    void attach(Observer* observer) {
        observers.push_back(observer);
    }

    void setData(int value) {
        data = value;
        notify();
    }

    void notify() {
        for (Observer* observer : observers) {
            observer->update(data);
        }
    }
};

int main() {
    // 创建主题和观察者
    Subject subject;
    ConcreteObserverA observerA;
    ConcreteObserverB observerB;

    // 订阅主题
    subject.attach(&observerA);
    subject.attach(&observerB);

    // 主题设置新数据,触发通知
    subject.setData(10);

    return 0;
}

这个示例中,我们定义了两个具体的观察者类 ConcreteObserverAConcreteObserverB,它们都继承自抽象观察者类 Observer,并实现了 update() 方法来接收主题的更新。

然后我们定义了主题类 Subject,它维护一个观察者列表,并提供了 attach() 方法用于订阅观察者,以及 setData() 方法用于设置主题的数据并通知所有观察者。

main() 函数中,我们创建了主题对象 subject 和两个观察者对象 observerAobserverB,然后通过 attach() 方法将它们订阅到主题上。最后,我们调用 setData() 方法来设置主题的新数据,这将触发通知,所有观察者都会收到更新。

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

LabVIEW读取excel日期

LabVIEW读取excel日期 | Excel数据表格中有日期列和时间列&#xff0c;如下表所示&#xff1a; 通过LabVIEW直接读取Excel表格数据&#xff0c;读出的日期列和时间列数据与原始表格不一致&#xff0c;直接读出来的数据如下表所示&#xff1a; 日期、时间列数据异常 问题产生原因…

三次握手,四次挥手的大白话版本

三握四挥 首先我们要知道握手和挥手是在做什么&#xff0c;握手是为了让客户端和服务端建立连接&#xff0c;挥手是为了让客户端和服务端断开连接&#xff0c;握手时客户端主动发起请求&#xff0c;挥手双方都能发起请求。 三次握手 有必要解释一下&#xff0c;SYN的意思是同…

OLED示例程序、keil的调试模式

调试方式 串口调试&#xff1a;通过串口通信&#xff0c;将调试信息发送到电脑端&#xff0c;电脑使用串口助手显示调试信息 显示屏调试&#xff1a;直接将显示屏连接到单片机&#xff0c;将调试信息打印在显示屏上 Keil调试模式&#xff1a;借助Keil软件的调试模式&#xf…

Vue模版语法之属性绑定v-bind

双大括号不能在 HTML 属性中使用。想要响应式地绑定一个属性&#xff0c;应该使用 v-bind 指令 1. 使用v-bind绑定属性 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>新建页面</title><sc…

pclpy 安装和使用

pclpy 安装和使用 一、安装pclpy二、问题与解决方法三、测试四、测试结果五、相关链接 一、安装pclpy pclpy是点云库(PCL)的Python绑定。使用CppHeaderParser和pybind11从头文件生成。这个库正在积极开发中&#xff0c;目前Windows只支持python 3.6 x64 和 python3.7&#xff…

Arcgis小技巧【17】——如何修改ArcGIS中影像的背景颜色

一、问题分析 在ArcGIS中&#xff0c;有时候会遇到影像有背景色&#xff0c;看上去很不美观。 尤其在多个影像叠加的时候&#xff0c;更是会造成遮挡的问题。 二、解决办法 首先&#xff0c;用【识别】工具在背景色是点击一下&#xff0c;查看弹出的窗口&#xff0c;记住背景…

Leetcode1206(设计跳表)

例题&#xff1a; 分析&#xff1a; 我们先来找一找跳表与单链表的相同点和不同点。 相同点&#xff1a; 跳表和单链表一样&#xff0c;都是由一个一个的节点组成的链表。 不同点&#xff1a; ①&#xff1a;跳表中的元素已经是排好序的&#xff08;图中从小到大&#xff09;&…

Spring Cloud Alibaba-04-Sentinel服务容错

Lison <dreamlison163.com>, v1.0.0, 2023.09.10 Spring Cloud Alibaba-04-Sentinel服务容错 文章目录 Spring Cloud Alibaba-04-Sentinel服务容错高并发带来的问题服务雪崩效应常见容错方案Sentinel入门什么是Sentinel微服务集成Sentinel安装Sentinel控制台 实现一个接…

【Vue】v-for中:key中item.id与Index使用的区别

先说结论&#xff0c;推荐使用【:key"item.id"】而不是将数组下标当做唯一标识&#xff0c;前者能做到全部复用 场景&#xff1a;删除无序列表中的<li>标签 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8&q…

nginx的功能以及运用

nginx与apache的对比 nginx优点 nginx使用场景 编译安装nginx过程 1.先清空opt文件夹 2.关闭防火墙&#xff0c;关闭防护 3 安装依赖包&#xff0c;可以通过本地yum去安装 首先就是挂载&#xff0c;随后切换到配置文件中修改 4本地配置文件配置内容 5 随后安装环境包 yum -y …

NoSQL 数据库管理工具,搭载强大支持:Redis、Memcached、SSDB、LevelDB、RocksDB,为您的数据存储提供无与伦比的灵活性与性能!

NoSQL 数据库管理工具&#xff0c;搭载强大支持&#xff1a;Redis、Memcached、SSDB、LevelDB、RocksDB&#xff0c;为您的数据存储提供无与伦比的灵活性与性能&#xff01; 【官网地址】&#xff1a;http://www.redisant.cn/nosql 介绍 直观的用户界面 从单一应用程序中同…

鸿蒙Next怎么升级,有便捷的方法?

早在2023年11月&#xff0c;市场上有自媒体博主表示&#xff0c;华为HarmonyOS NEXT的升级计划是2X年底到2X年初完成一亿部&#xff0c;2X年底完成三亿部。虽然该博主没有明确具体年份&#xff0c;但预计是2024年底2025年初升级一亿部HarmonyOS NEXT设备&#xff0c;2025年底完…

计算机网络Day1--计算机网络体系

1.三网合一 电信网络、广播电视网络、计算机网络&#xff08;最基础最重要发展最快&#xff09; 2.Internet 名为国际互联网、因特网&#xff0c;指当前全球最大的、开放的、由众多网络相互连接而成的特定互连网&#xff0c;采用TCP/IP 协议族作为通信的规则&#xff0c;前…

Python学习-用Python设计第一个游戏

三、用Python设计第一个游戏 1、新建文件 使用IDLE的编辑器模式&#xff0c;新建一个文件&#xff0c;点击File—>New File 2、将下面的游戏代码敲入进去 """用Python设计第一个游戏"""temp input("不妨猜一下小甲鱼现在心里想的是…

openGauss学习笔记-224 openGauss性能调优-系统调优-数据库系统参数调优-数据库并发队列参数调优

文章目录 openGauss学习笔记-224 openGauss性能调优-系统调优-数据库系统参数调优-数据库并发队列参数调优224.1 全局并发队列224.2 局部并发队列 openGauss学习笔记-224 openGauss性能调优-系统调优-数据库系统参数调优-数据库并发队列参数调优 数据库提供两种手段进行并发队…

maven插件exec-maven-plugin、maven-antrun-plugin使用详解

文章目录 前言一、exec-maven-plugin使用exec:java的使用idgoalsphaseconfigurationexec:exec的使用使用exec-maven-plugin来构建前端项目直接用mvn命令来使用exec-maven-plugin插件 二、maven-antrun-plugin使用echo打印功能拷贝文件拷贝文件夹ftp/scp/sshexec 总结 前言 在使…

【Flink状态管理(八)】Checkpoint:CheckpointBarrier对齐后Checkpoint的完成、通知与对学习状态管理源码的思考

文章目录 一. 调用StreamTask执行Checkpoint操作1. 执行Checkpoint总体代码流程1.1. StreamTask.checkpointState()1.2. executeCheckpointing1.3. 将算子中的状态快照操作封装在OperatorSnapshotFutures中1.4. 算子状态进行快照1.5. 状态数据快照持久化 二. CheckpointCoordin…

【C#】List泛型数据集如何循环移动,最后一位移动到第一位,以此类推

欢迎来到《小5讲堂》 大家好&#xff0c;我是全栈小5。 这是《C#》系列文章&#xff0c;每篇文章将以博主理解的角度展开讲解&#xff0c; 特别是针对知识点的概念进行叙说&#xff0c;大部分文章将会对这些概念进行实际例子验证&#xff0c;以此达到加深对知识点的理解和掌握。…

认识K8S

K8S K8S 的全称为 Kubernetes (K12345678S) 是一个跨主机容器编排工具 作用 用于自动部署、扩展和管理“容器化&#xff08;containerized&#xff09;应用程序”的开源系统。 可以理解成 K8S 是负责自动化运维管理多个容器化程序&#xff08;比如 Docker&#xff09;的集群…

深入理解java虚拟机---自动内存管理

2.2 运行时数据区域 Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域。这些区域有各自的用途&#xff0c;以及创建和销毁的时间&#xff0c;有的区域随着虚拟机进程的启动而一直存在&#xff0c;有些区域则是依赖用户线程的启动和结束而建立和销…