IO进程 寒假作业

5个4000比特大状态置换算法的设计与分析 下面是 5 个概念性、实验性的 4000 位可逆置换设计。它们都保证是双射,但未经过密码分析,不可直接用于生产系统。风格分别覆盖:三维 SPN、Feistel、可逆元胞自动机、ARX、宽轨迹/Keccak 式结构。 这 5 个设计分别代表了 SPN、Feistel、元胞自动机、ARX、宽轨迹 Keccak 五种不同风格,覆盖了主流大状态置换的构造思路。再次强调:它们只是实验性概念,若要用于实际协议,必须经过严格安全性分析。 阅读详情

一、请使用消息队列实现2个终端之间互相聊天

#include <stdio.h>
#include <stdlib.h>
#include <signal.h>
#include <sys/wait.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <string.h>
#include <pthread.h>

void task_w()
{
	if(access("fifo1", F_OK)==-1){
		mkfifo("./fifo1", 0666);
	}

	int fd=open("./fifo1",O_WRONLY | O_TRUNC);
	
	while(1){
		char buf[128]={0};
		printf("请输入:");
		scanf("%s", buf);
		while(getchar()!=10);
		write(fd, buf, strlen(buf));
	}
	close(fd);
}

void task_r()
{
	if(access("fifo2", F_OK)==-1){
		mkfifo("./fifo2", 0666);
	}
	int fd=open("./fifo2", O_RDONLY);

	while(1){
		char buf[128]={0};
		int res=read(fd, buf, 128);
		if(res==0){break;}
		printf("\b\b\b\b\b\b\b读取到的消息为:%s\n", buf);
		printf("请输入:");
		fflush(stdout);
	}
	close(fd);
}

void handler(int signum)
{
	if(signum==SIGPIPE){
		printf("管道破裂\n");
		exit(0);
	}
}

void* thread_main(void* arg)
{
	task_r();
}

int main()
{
	signal(SIGPIPE, handler);
	pthread_t id;
	pthread_create(&id, 0, thread_main, 0);
	pthread_detach(id);
	
	task_w();
	return 0;
}


#include <stdio.h>
#include <stdlib.h>
#include <signal.h>
#include <sys/wait.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <string.h>
#include <pthread.h>

void task_w()
{
	if(access("fifo2", F_OK)==-1){
		mkfifo("./fifo2", 0666);
	}

	int fd=open("./fifo2",O_WRONLY | O_TRUNC);
	
	while(1){
		char buf[128]={0};
		printf("请输入:");
		scanf("%s", buf);
		while(getchar()!=10);
		write(fd, buf, strlen(buf));
	}
	close(fd);
}

void task_r()
{
	if(access("fifo1", F_OK)==-1){
		mkfifo("./fifo1", 0666);
	}
	int fd=open("./fifo1", O_RDONLY);

	while(1){
		char buf[128]={0};
		int res=read(fd, buf, 128);
		if(res==0){break;}
		printf("\b\b\b\b\b\b\b读取到的消息为:%s\n", buf);
		printf("请输入:");
		fflush(stdout);
	}
	close(fd);
}

void handler(int signum)
{
	if(signum==SIGPIPE){
		printf("管道破裂\n");
		exit(0);
	}
}

void* thread_main(void* arg)
{
	task_r();
}

int main()
{
	signal(SIGPIPE, handler);
	pthread_t id;
	pthread_create(&id, 0, thread_main, 0);
	pthread_detach(id);
	
	task_w();
	return 0;
}


二、请使用共享内存+信号灯集,实现2个进程之间互相聊天

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <fcntl.h>
#include <sys/mman.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <unistd.h>
#include <semaphore.h>

#define SHM_SIZE 1024  // 共享内存大小
#define SEM_A_NAME "/sem_a"  // 进程A的信号灯名称
#define SEM_B_NAME "/sem_b"  // 进程B的信号灯名称
#define SHM_NAME "/chat_shm"  // 共享内存名称

int main() {
    // 创建共享内存对象
    int shm_fd = shm_open(SHM_NAME, O_CREAT | O_RDWR, 0666);
    if (shm_fd == -1) {
        perror("shm_open");
        exit(EXIT_FAILURE);
    }

    // 设置共享内存大小
    if (ftruncate(shm_fd, SHM_SIZE) == -1) {
        perror("ftruncate");
        exit(EXIT_FAILURE);
    }

    // 映射共享内存
    char *shm_ptr = mmap(NULL, SHM_SIZE, PROT_READ | PROT_WRITE, MAP_SHARED, shm_fd, 0);
    if (shm_ptr == MAP_FAILED) {
        perror("mmap");
        exit(EXIT_FAILURE);
    }

    // 创建信号灯
    sem_t *sem_a = sem_open(SEM_A_NAME, O_CREAT, 0666, 1);
    sem_t *sem_b = sem_open(SEM_B_NAME, O_CREAT, 0666, 0);
    if (sem_a == SEM_FAILED || sem_b == SEM_FAILED) {
        perror("sem_open");
        exit(EXIT_FAILURE);
    }

    // 进程A和进程B的逻辑
    if (fork() == 0) {
        // 子进程(进程B)
        while (1) {
            sem_wait(sem_b);  // 等待进程A的信号
            printf("Process B received: %s", shm_ptr);
            printf("Process B: ");
            fgets(shm_ptr, SHM_SIZE, stdin);
            sem_post(sem_a);  // 通知进程A
        }
    } else {
        // 父进程(进程A)
        while (1) {
            sem_wait(sem_a);  // 等待进程B的信号
            printf("Process A received: %s", shm_ptr);
            printf("Process A: ");
            fgets(shm_ptr, SHM_SIZE, stdin);
            sem_post(sem_b);  // 通知进程B
        }
    }

    // 清理资源
    sem_close(sem_a);
    sem_close(sem_b);
    sem_unlink(SEM_A_NAME);
    sem_unlink(SEM_B_NAME);
    munmap(shm_ptr, SHM_SIZE);
    shm_unlink(SHM_NAME);

    return 0;
}


三、请实现一个终端的功能,注意需要带有cd功能

#include <stdio.h>
#include <unistd.h>
#include <sys/wait.h>
#include <string.h>

char *mygets(char *s, int size)
{
	char *res = fgets(s, size, stdin);
	int len = strlen(s);
	if (s[len-1] == '\n')
	{
		s[len-1] = '\0';
	}
	return s;
}

int main(int argc, const char *argv[])
{
	while(1)
	{
		pid_t pid = fork();
		if(pid > 0)
		{
			wait(0);
		}
		else if(pid == 0)
		{
			char *username = getlogin(); //获取用户名
			char hostname[64] = {0};
			gethostname(hostname, 63); //获取主机名
			char cwd[64] = "";
			getcwd(cwd, 63); //获取当前工作路径
			//\033[ 显示方式 ; 前景色 ; 背景色m
			printf("\033[1;32;10m%s@%s\033[0m:\033[1;34;10m%s\033[0m$ ", username, hostname, cwd);
			fflush(stdout);

			char shell[256] = {0};
			char *cmd[100] = {0};
			mygets(shell, 256);
			
			char *res = NULL;
			int i = 0;
			while(1)
			{
				if(res == NULL)
				{
					res = strtok(shell, " ");
				}
				else
				{
					res = strtok(NULL, " ");
				}

				if(res == NULL)
				{
					break;
				}
				cmd[i] = res;
				i++;
			}

			char pathname[32] = "/bin/";
			strcat(pathname, cmd[0]);

			execvp(cmd[0], cmd);
			printf("%s:未找到命令\n", cmd[0]);
		}
	}
	return 0;
}


四、请使用dup2+fgets+printf实现文件拷贝功能

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <fcntl.h>

#define BUFFER_SIZE 1024

int main(int argc, char *argv[]) {
    if (argc != 3) {
        fprintf(stderr, "Usage: %s <source_file> <destination_file>\n", argv[0]);
        exit(EXIT_FAILURE);
    }

    // 打开源文件
    int src_fd = open(argv[1], O_RDONLY);
    if (src_fd == -1) {
        perror("open source file");
        exit(EXIT_FAILURE);
    }

    // 打开目标文件
    int dest_fd = open(argv[2], O_WRONLY | O_CREAT | O_TRUNC, 0644);
    if (dest_fd == -1) {
        perror("open destination file");
        close(src_fd);
        exit(EXIT_FAILURE);
    }

    // 将源文件的文件描述符复制到标准输入
    if (dup2(src_fd, STDIN_FILENO) == -1) {
        perror("dup2 stdin");
        close(src_fd);
        close(dest_fd);
        exit(EXIT_FAILURE);
    }

    // 将目标文件的文件描述符复制到标准输出
    if (dup2(dest_fd, STDOUT_FILENO) == -1) {
        perror("dup2 stdout");
        close(src_fd);
        close(dest_fd);
        exit(EXIT_FAILURE);
    }

    // 关闭原始文件描述符
    close(src_fd);
    close(dest_fd);

    // 使用 fgets 和 printf 实现文件拷贝
    char buffer[BUFFER_SIZE];
    while (fgets(buffer, BUFFER_SIZE, stdin) != NULL) {
        printf("%s", buffer);
    }

    return 0;
}


五、请使用read和write实现链表保存到文件,以及从文件加载数据到链表中的功能

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <fcntl.h>
#include <unistd.h>

// 链表节点结构体
typedef struct Node {
    int id;
    char name[32];       // 定长字符串,避免动态内存处理
    struct Node *next;
} Node;

// 全局链表头指针
Node *head = NULL;

void save_list_to_file(const char *filename) {
    int fd = open(filename, O_WRONLY | O_CREAT | O_TRUNC, 0644);
    if (fd == -1) {
        perror("open (save)");
        return;
    }

    Node *current = head;
    while (current != NULL) {
        // 写入 id 和 name,不保存 next 指针
        if (write(fd, &current->id, sizeof(int)) != sizeof(int)) {
            perror("write id");
            close(fd);
            return;
        }
        if (write(fd, current->name, sizeof(current->name)) != sizeof(current->name)) {
            perror("write name");
            close(fd);
            return;
        }
        current = current->next;
    }

    close(fd);
    printf("链表已保存到文件.\n");
}


void load_list_from_file(const char *filename) {
    int fd = open(filename, O_RDONLY);
    if (fd == -1) {
        perror("open (load)");
        return;
    }

    // 清空旧链表
    Node *current = head;
    while (current != NULL) {
        Node *temp = current;
        current = current->next;
        free(temp);
    }
    head = NULL;

    Node *prev = NULL;
    while (1) {
        Node *new_node = (Node*)malloc(sizeof(Node));
        if (!new_node) {
            perror("malloc");
            break;
        }

        // 读取 id
        ssize_t bytes_read = read(fd, &new_node->id, sizeof(int));
        if (bytes_read == 0) break;  // 文件结束
        else if (bytes_read != sizeof(int)) {
            perror("read id");
            free(new_node);
            break;
        }

        // 读取 name
        bytes_read = read(fd, new_node->name, sizeof(new_node->name));
        if (bytes_read != sizeof(new_node->name)) {
            perror("read name");
            free(new_node);
            break;
        }

        new_node->next = NULL;

        // 链接到链表
        if (prev == NULL) {
            head = new_node;
        } else {
            prev->next = new_node;
        }
        prev = new_node;
    }

    close(fd);
    printf("链表已从文件加载.\n");
}


void add_node(int id, const char *name) {
    Node *new_node = (Node*)malloc(sizeof(Node));
    new_node->id = id;
    strncpy(new_node->name, name, sizeof(new_node->name));
    new_node->next = head;
    head = new_node;
}


void print_list() {
    Node *current = head;
    while (current != NULL) {
        printf("ID: %d, Name: %s\n", current->id, current->name);
        current = current->next;
    }
}


int main() {
    // 添加测试数据
    add_node(1, "Alice");
    add_node(2, "Bob");
    add_node(3, "Charlie");

    // 保存链表到文件
    save_list_to_file("list.dat");

    // 清空链表(模拟重新加载)
    Node *temp;
    while (head != NULL) {
        temp = head;
        head = head->next;
        free(temp);
    }

    // 从文件加载链表
    load_list_from_file("list.dat");
    print_list();

    return 0;
}


六、请使用互斥锁和信号量分别实现5个线程之间的同步

#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
#include <unistd.h>

#define NUM_THREADS 5

pthread_mutex_t mutex;

void* thread_function(void* arg) {
    int thread_id = *(int*)arg;
    
    // 尝试获取互斥锁
    pthread_mutex_lock(&mutex);
    
    printf("Thread %d is running\n", thread_id);
    sleep(1); // 模拟某些工作
    
    // 释放互斥锁
    pthread_mutex_unlock(&mutex);
    
    free(arg);
    return NULL;
}

int main() {
    pthread_t threads[NUM_THREADS];
    
    // 初始化互斥锁
    if (pthread_mutex_init(&mutex, NULL) != 0) {
        printf("Mutex init failed\n");
        return 1;
    }
    
    for (int i = 0; i < NUM_THREADS; i++) {
        int* thread_id = malloc(sizeof(int));
        *thread_id = i;
        // 创建线程
        if (pthread_create(&threads[i], NULL, thread_function, thread_id) != 0) {
            printf("Error creating thread %d\n", i);
            return 1;
        }
    }
    
    // 等待所有线程完成
    for (int i = 0; i < NUM_THREADS; i++) {
        pthread_join(threads[i], NULL);
    }
    
    // 销毁互斥锁
    pthread_mutex_destroy(&mutex);
    
    return 0;
}

#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
#include <semaphore.h>
#include <unistd.h>

#define NUM_THREADS 5

sem_t semaphore;

void* thread_function(void* arg) {
    int thread_id = *(int*)arg;
    
    // 等待信号量
    sem_wait(&semaphore);
    
    printf("Thread %d is running\n", thread_id);
    sleep(1); // 模拟某些工作
    
    // 释放信号量
    sem_post(&semaphore);
    
    free(arg);
    return NULL;
}

int main() {
    pthread_t threads[NUM_THREADS];
    
    // 初始化信号量,初始值为1
    if (sem_init(&semaphore, 0, 1) != 0) {
        printf("Semaphore init failed\n");
        return 1;
    }
    
    for (int i = 0; i < NUM_THREADS; i++) {
        int* thread_id = malloc(sizeof(int));
        *thread_id = i;
        // 创建线程
        if (pthread_create(&threads[i], NULL, thread_function, thread_id) != 0) {
            printf("Error creating thread %d\n", i);
            return 1;
        }
    }
    
    // 等待所有线程完成
    for (int i = 0; i < NUM_THREADS; i++) {
        pthread_join(threads[i], NULL);
    }
    
    // 销毁信号量
    sem_destroy(&semaphore);
    
    return 0;
}


七、请使用条件变量实现2生产者2消费者模型,注意1个生产者在生产的时候,另外一个生产者不能生产

#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
#include <unistd.h>

#define BUFFER_SIZE 10

int buffer[BUFFER_SIZE];
int count = 0; // 缓冲区中项目的数量

pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
pthread_cond_t cond_produce = PTHREAD_COND_INITIALIZER;
pthread_cond_t cond_consume = PTHREAD_COND_INITIALIZER;

// 生产者函数
void* producer(void* arg) {
    int producer_id = *(int*)arg;
    
    while (1) {
        // 生产一个项目
        int item = rand() % 100;
        
        // 加锁
        pthread_mutex_lock(&mutex);
        
        // 缓冲区满,等待消费
        while (count == BUFFER_SIZE) {
            pthread_cond_wait(&cond_produce, &mutex);
        }
        
        // 将项目放入缓冲区
        buffer[count] = item;
        count++;
        printf("Producer %d produced item %d, count = %d\n", producer_id, item, count);
        
        // 通知消费者有新项目可用
        pthread_cond_signal(&cond_consume);
        
        // 解锁
        pthread_mutex_unlock(&mutex);
        
        // 模拟生产时间
        sleep(rand() % 3);
    }
    
    return NULL;
}

// 消费者函数
void* consumer(void* arg) {
    int consumer_id = *(int*)arg;
    
    while (1) {
        // 加锁
        pthread_mutex_lock(&mutex);
        
        // 缓冲区空,等待生产
        while (count == 0) {
            pthread_cond_wait(&cond_consume, &mutex);
        }
        
        // 从缓冲区取出项目
        int item = buffer[count - 1];
        count--;
        printf("Consumer %d consumed item %d, count = %d\n", consumer_id, item, count);
        
        // 通知生产者有空间可用
        pthread_cond_signal(&cond_produce);
        
        // 解锁
        pthread_mutex_unlock(&mutex);
        
        // 模拟消费时间
        sleep(rand() % 3);
    }
    
    return NULL;
}

int main() {
    pthread_t producers, consumers;
    int producer_ids = {1, 2};
    int consumer_ids = {1, 2};
    
    // 创建生产者线程
    for (int i = 0; i < 2; i++) {
        if (pthread_create(&producers[i], NULL, producer, &producer_ids[i]) != 0) {
            printf("Error creating producer thread %d\n", i);
            return 1;
        }
    }
    
    // 创建消费者线程
    for (int i = 0; i < 2; i++) {
        if (pthread_create(&consumers[i], NULL, consumer, &consumer_ids[i]) != 0) {
            printf("Error creating consumer thread %d\n", i);
            return 1;
        }
    }
    
    // 等待线程完成
    for (int i = 0; i < 2; i++) {
        pthread_join(producers[i], NULL);
        pthread_join(consumers[i], NULL);
    }
    
    // 销毁互斥锁和条件变量
    pthread_mutex_destroy(&mutex);
    pthread_cond_destroy(&cond_produce);
    pthread_cond_destroy(&cond_consume);
    
    return 0;
}

八、请写一个双向链表的快速排序函数

九、请用递归实现计算:1+1/3-1/5+1/7-1/9+...1/n 的值,n通过键盘输入

#include <stdio.h>

// 递归函数声明
double alt_ser(int n);

int main() {
    int n;
    double result;

    // 从用户获取输入
    printf("请输入一个正整数n: ");
    scanf("%d", &n);

    // 检查输入是否合法
    if (n <= 0) {
        printf("请输入一个大于0的正整数。\n");
        return 1; // 返回错误码
    }

    // 调用递归函数计算结果
    result = alt_ser(n);

    // 输出结果
    printf("交错级数1 + 1/3 - 1/5 + 1/7 - 1/9 + ... 1/%d的值为: %.15f\n", n, result);

    return 0;
}

// 递归函数定义
double alt_ser(int n) {
    // 基本情况:如果n等于1,返回1
    if (n == 1) {
        return 1.0;
    }
    // 递归情况
    else if (n % 2 == 1) { // 奇数项
        return 1.0 / n + alt_ser(n - 2);
    } else { // 偶数项
        return -1.0 / n + alt_ser(n - 2);
    }
}


十、请写出以下几个数据的类型

// 整数a:
    类型:int

// a的地址:
    类型:int *

// 存放a的数组b:
    类型:int[]

// 存放a的地址的数组c:
    类型:int* []

// b的地址:
    类型:int (*)[]

// c的地址:
    类型:int**

// 指向printf函数的指针d:
    类型:int (*)(const char*, ...)

// 存放d的数组:
    类型:int (**)[]


百度飞桨+文心大模型实战:生成式AI工程师认证备考全攻略(含真题解析) 本文详细解析百度飞桨与文心大模型结合的生成式AI工程师认证备考策略,涵盖认证体系、学习路径、核心技能突破及真题分析。帮助开发者掌握大模型原理、飞桨平台操作和文心大模型应用,高效通过工信部与百度联合认证考试。 阅读详情

相关推荐

【人工智能】AI算法系统设计与算法建模的详细阐述

AI算法系统设计与算法建模是人工智能领域中的核心任务之一,它涉及从问题定义、数据收集、算法选择、模型构建到系统部署的全过程。以下是对AI算法系统设计与算法建模的详细阐述

weixin_51306394的博客 4355

IO进程寒假作业DAY2

使用共享内存 + 信号灯集,实现2个进程之间互相聊天

Ryan_Gosling的博客 145

贝塞尔曲线在机器人路径平滑中的实战应用与优化

本文深入探讨了贝塞尔曲线算法在机器人路径平滑中的核心应用。通过对比G1CBS与G2CBS两种方法,详细阐述了如何实现从切线连续到曲率连续的平滑优化,以满足不同机器人对运动平稳性和效率的需求,并提供了完整的Python代码实现与关键参数调优指南。

weixin_29051811的博客 307

IO进程寒假作业DAY5

使用read 和 write 实现链表保存到文件,以及从文件加载数据到链表中的功能

Ryan_Gosling的博客 335

从0开始部署基础的AlwaysOn

在这个快餐文化盛行的时代,应该没多少人真的会沉下心来看理论和具体步骤,加上我自己也需要一篇可以扩展的快速搭建环境的指引,所以特别写了这篇文章。 我们在这里要做的事情有以下几个:安装环境。包括虚拟机和网络配置等。安装Windows域、配置必要的账号密码及功能。搭建域环境并进行配置。安装配置Windows Server Failover Cluster(WSFC)。安装SQL Server。配置Alw

MVP黄钊吉(發糞塗牆) 7568

Webug4.0 打靶笔记

一、Webug 的安装 (1)基本信息 WeBug 名称定义为”我们的漏洞”靶场环境 ,基础环境是基于 PHP/mysql 制作搭建而成,中级环境与高级环境分别都是由互联网漏洞事件而收集的漏洞存在的操作环境。部分漏洞是基于Windows操作系统的漏洞所以将WeBug的web环境都装在了一个纯净版的Windows 2003的虚拟机中。在 webug3.0 发布后的四百多天 226安全团队终于在大年初二发布了 webug 的 4.0 版本。 (2)虚拟机的安装 最新超详细VMware虚拟机下载与安装_隐

m0_60716947的博客 6127

IO进程寒假作业DAY9

用递归实现计算 :1 + 1/3 - 1/5 + 1/7 - 1/9 + .... 1/n 的值,n通过键盘输入

Ryan_Gosling的博客 141

1553B总线介绍及其硬件方案设计

军用1553B总线 1.简介 简单介绍可参考(https://blog.youkuaiyun.com/ScilogyHunter/article/details/108444231)博主写的很详细。 1553B总线是MIL-STD-1553总线的简称,其中B就是BUS,MIL-STD-1553B总线是飞机内部时分制命令/响应式多路复用数据总线。1553B数据总线标准是20世纪70年代由美国公布的一种串行多路数据总线标准。1553B总线能挂31个远置终端,1553B总线采用指令/响应型通信协议,它有三种终端类型: BC:

小幽余生不加糖 1万+

IO进程寒假作业DAY3

实现一个终端的功能,注意需要带有cd功能

Ryan_Gosling的博客 271

[网络安全自学篇] 六.OllyDbg动态分析工具基础用法及Crakeme逆向破解

这是作者的系列网络安全自学教程,主要是关于网安工具和实践操作的在线笔记,特分享出来与博友共勉,希望您们喜欢,一起进步。上一篇文章分享了IDA Pro反汇编工具的基础用法,并简单讲解一个EXE逆向工程解密实战方法;本篇文章将讲解动态分析OllyDbg工具的基础用法,主要是结合两个Crakeme案例逆向破解。希望对初学者有帮助,大神请飘过,谢谢各位看官!

杨秀璋的专栏 1万+

OCR文字识别领域经典论文总结

本篇将介绍文字识别经典论文,内容包括文字检测、文字识别、端到端识别等方法,具体将分别对论文算法简介、思路、代码等几个部分展开介绍。目前各部分只举例经典论文,算法没有全部写完,后续会将在此部分基础上更新更多论文综述及代码实战部分。.................................

专注大数据与人工智能技术分享,欢迎私信加群互相学习! 1万+

IO进程寒假作业DAY6

使用互斥锁 和 信号量分别实现5个线程之间的同步

Ryan_Gosling的博客 309

21、二维卷积层(convolution2dLayer)的全面解析

本文全面解析了二维卷积层(convolution2dLayer)的原理、属性和应用,详细介绍了其在深度学习中的作用及实现方法。文章涵盖创建卷积层的语法、参数设置、算法原理、输入输出格式、优化策略以及实际应用案例,旨在帮助读者更好地理解和应用二维卷积层构建高效的深度学习模型。

red88的博客 316

IO进程寒假作业DAY4

使用dup2 + fgets + printf 实现文件拷贝功能

Ryan_Gosling的博客 168

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

IO进程寒假作业DAY8

请写一个双向链表的快速排序函数

Ryan_Gosling的博客 170

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

IO进程寒假作业DAY1

使用消息队列实现2个终端之间互相聊天

Ryan_Gosling的博客 232

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

IO进程寒假作业DAY10

写出以下的数据类型

Ryan_Gosling的博客 160

IO进程寒假作业DAY7

请使用条件变量实现2生产者2消费者模型,注意1个生产者在生产的时候,另外一个生产者不能生产

Ryan_Gosling的博客 161

[高并发网络通信架构]实现tcp的高并发服务端

I/O多路复用(IO Multiplexing)是一种并发编程技术,用于同时监视多个I/O事件并选择就绪的事件进行处理。它可以通过一个线程或进程同时处理多个I/O操作,而不需要为每个I/O操作创建一个独立的线程或进程。I/O多路复用可以提高系统的并发性能,减少资源的消耗。在传统的编程模型中,每个I/O操作通常都需要一个独立的线程或进程来处理。这种方式在面对大量的并发连接时,会导致系统资源的浪费和性能下降。

freedom_paradise的博客 1257

redis关键字删除_微信公众号文章防删除

阅读本文大概需要 3.6 分钟。前段时间《一个出身寒门的状元之死》刷屏了,当我看完了这篇文章,很有感触,一开始我以为是事实,后来才发现完全是虚构,对于我来讲并不是非常在乎文章中的故事是否是真实的,我在乎文章给我的那种生活体验。文中那个出身寒门的状元,不为利益而牺牲自己的原则,也就是不做恶:比如在做家教时,有钱人家的学生让他把寒假作业的答案发给他们,这样他就可以获得丰厚的报酬,然而他坚决不...

weixin_33444829的博客 205

视频隐私脱敏工程化:CSRT/KCF追踪算法在本地推理中的实现与边界

在短视频内容合规审查中,动态遮挡(Dynamic Masking)是高频且高耗时的环节。传统手动关键帧打码不仅效率低下,且在目标快速移动或遮挡时极易出现遮罩漂移。本文从计算机视觉工程角度,解析基于CSRT与KCF算法的目标追踪方案在视频隐私处理中的技术路径、性能权衡及落地实践。

Mysssone的博客 194

【算法拾光】链表 哈希表|K个一组翻转链表 + 两数之和

K个一组翻转链表需分段反转,借助哑节点与前驱指针维护连接,避免断链;两数之和利用哈希表实现O(1)查找,空间换时间,高效定位目标组合。前者考察链表指针操作,后者聚焦映射关系构建,均为面试高频题。

wuqingyigexiaoba的博客 298

排序算法深度笔记(下):非比较类排序的线性突破与工程边界

排序算法时间复杂度额外空间复杂度稳定性是否基于比较选择排序O(N^2)(O(1))不稳定是冒泡排序O(N^2)(O(1))稳定是插入排序O(N^2)(O(1))稳定是归并排序O(N\log N)(O(N))稳定是快速排序O(N\log N)O(log N)不稳定是堆排序O(N\log N)O(1)不稳定是计数排序(O(N + M))O(M))稳定否基数排序O(N)稳定否桶排序平均O(N) / 最坏O(N^2)

2401_87069538的博客 561

算法日常・每日刷题--<动态规划>42

本题为“不相交的线”,与最长公共子序列问题相似。使用动态规划求解:定义 dp[i][j] 表示 nums1[0:i] 与 nums2[0:j] 的最大不相交连线数。若元素相等,则继承左上值加1;否则取上方或左方最大值。最终返回 dp[m][n],即两数组的最大不相交连线数。时间复杂度 O(mn),空间复杂度 O(mn)。

2503_92261635的博客 20

C语言程序设计题|有序数组插入数字冒泡排序

题目要求将一个数插入有序数组末尾,并用冒泡排序实现整体升序。代码先将输入数存入数组最后位置,再通过双重循环进行冒泡排序,每轮将较大元素向后移动,最终输出11个升序元素。该方法虽时间复杂度为O(n²),但符合题目要求,逻辑清晰,适合初学者理解排序原理。

2301_81429079的博客 746

【算法拾光】模拟|外观数列 + 数青蛙

本文总结两道模拟题解法:外观数列通过迭代统计连续数字个数生成下一项,关键在于处理末尾字符;数青蛙则模拟青蛙叫声“croak”状态转移,维护各阶段青蛙数量,记录最大并发数并确保全部完成。共性在于严格遵循流程、细致处理边界与非法情况,锻炼字符串遍历与状态管理能力。

wuqingyigexiaoba的博客 367
上一篇: IO进程day6
下一篇: 网络编程day1
碧莲不摇了
博客等级 码龄2年 208粉丝 66原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值