当前位置: 首页 > news >正文

【C语言课程设计】通讯录(1.0版本)

前言

相信各位对于通讯录都不是很陌生吧。通讯录我们在学校的大作业,课程设计经常会去使用它。那么今天我们将使用C语言来实现一个简单的通讯录。


目录

前言

一、通讯录的需求

二、工程文件的创建

三、通讯录的声明和定义

四、通讯录各函数的声明和定义

五、通讯录的目录和逻辑

六、通讯录功能实现之初始化通讯录

七、通讯录功能实现之增加联系人

八、通讯录功能实现之删除联系人

九、通讯录功能实现之查找联系人

十、通讯录功能实现之修改联系人

十一、通讯录功能实现之排序

十二、通讯录功能实现之打印通讯录

十三、通讯录完整代码(分文件)

test.c文件

Contact.h文件

Contact.c文件

十四、通讯录完整代码(一个文件)

总结


一、通讯录的需求

首先我们要明白一个通讯录要有什么信息呢?

1.要能够存放人的信息:姓名,年龄,性别,地址,电话

2.通讯录能存放多少个人的信息:我们暂时先定为100个人的信息

3.通讯录的功能:

        1>增加联系人

        2>删除指定联系人

        3>查找指定联系人

        4>修改联系人的信息

        5>显示所有联系人的信息

        6>排序(按照年龄、姓名等排序)

上面这些都是通讯录最最最基本的功能。当然,我们可以增加其他的功能,比如说:通讯录要可以保存、查找某个联系人时可以通过多个信息进行筛选、通讯录可以动态自动增容等等

这些设想我们都可以去实现,但是首先,我们要完成最基本的通讯录。就是以上六个功能,之后,我们在这些功能上进行修改,使得我们的通讯录变得更加强大。

二、工程文件的创建

我们采用分文件的形式来完成这个通讯录,当然我们文末会给出一个文件版本的通讯录

test.c文件用来测试通讯录

Contact.c用来完成通讯录的实现

Contact.h用来实现函数的声明

 

三、通讯录的声明和定义

我们想要创建一个通讯录也就是说,要将很多个人的信息给集合起来。那么这就是一个数组。

而每一个人的信息,他又有了很多个类型,我们需要将这些信息给集合起来,这就是一个结构体。

#define MAX 100
#define NAME_MAX 20
#define SEX_MAX 10
#define ADDRESS_MAX 30
#define TELEPHONE_MAX 12//定义一个结构体类型,这里存放人的信息
typedef struct PeoInfo
{char name[NAME_MAX];int age;char sex[SEX_MAX];char address[ADDRESS_MAX];char telephone[TELEPHONE_MAX];
}PeoInfo;
//所有人的都放到这里
typedef struct Contact
{PeoInfo data[MAX];int size;
}Contact;

如上代码所示,我们利用两个结构体,来实现我们的通讯录的声明

PeoInfo这个结构体存放的是每一个人信息,为了方便我们后续的修改,我们使用了宏

每个人的信息都是一个结构体,我们要存储个人,这些人的类型都是相同的。所以我们要使用一个数组,也就是结构体数组。但是呢,我们肯定还需要知道现在存放了几个人的信息了。所以我们还需要一个变量来确定现在的结构体数组里面存放了几个人的信息了。不妨我们就直接把这个结构体数组和这个变量给集合起来。在创建一个结构体。这样方便我们后续的实现。

四、通讯录各函数的声明和定义

我们想,通讯录要实现六个功能。

        

        1>增加联系人

        2>删除指定联系人

        3>查找指定联系人

        4>修改联系人的信息

        5>显示所有联系人的信息

        6>排序(按照年龄、姓名等排序)

这六个功能,我们不妨先给他们声明一些函数。先不去实现。

//初始化通讯录
void InitContact(Contact* pc);
//添加联系人
void AddContact(Contact* pc);
//删除指定联系人
void DelContact(Contact* pc);
//查找指定联系人
void SearchContact(const Contact* pc);
//修改指定联系人
void ModifyContact(Contact* pc);
//排序通讯录
void SortContact(Contact* pc);
//打印通讯录
void ShowContact(const Contact* pc);

需要注意的是,查找和打印并不需要修改通讯录的值,所以我们使用const来保护我们的通讯录

有了这些声明我们假设我们已经实现了,我们可以就来完成一下我们的目录了

五、通讯录的目录和逻辑

void menu()
{printf("*************************\n");printf("****      1.Add      ****\n");printf("****      2.Del      ****\n");printf("****      3.Search   ****\n");printf("****      4.Modify   ****\n");printf("****      5.Show     ****\n");printf("****      6.Sort     ****\n");printf("****      0.exit     ****\n");printf("*************************\n");}
int main()
{int input = 0;Contact con;InitContact(&con);do{menu();printf("请输入你的需求>:");scanf("%d", &input);switch (input){case 1:printf("添加联系人\n");AddContact(&con);break;case 2:printf("删除指定联系人\n");DelContact(&con);break;case 3:printf("查找指定联系人\n");SearchContact(&con);break;case 4:printf("修改指定联系人\n");ModifyContact(&con);break;case 5:printf("打印所有联系人\n");ShowContact(&con);break;case 6:printf("排序联系人\n");SortContact(&con);break;case 0:printf("退出通讯录\n");break;default:printf("选择错误,请重新选择\n");break;}} while (input);return 0;
}

如上代码所示,我们利用do while语句,就可以来实现我们的通讯录的基本逻辑了。同时也写出了我们的代码

六、通讯录功能实现之初始化通讯录

当我们创建好一个通讯录的时候,我们需要将他初始化。

我们可以简单粗暴的直接使用con={0},但是这种方法太粗暴了。

我们完全可以将其封装成一个函数。来实现他

我们这里先断言pc,防止空指针。然后使用memset函数来置空通讯录

//初始化通讯录
void InitContact(Contact* pc)
{assert(pc);memset(pc->data, 0, sizeof(pc->data));pc->size = 0;
}

七、通讯录功能实现之增加联系人

现在我们来实现通讯的添加联系人。

我们同样先断言,然后我们还需要做的就是判断通讯是否满了。如果满了那么直接返回即可

如果没满,那么就正常使用scanf来添加即可。这里我们的参数必须是指针变量。我们要传地址过去才能修改通讯录的值。

//添加联系人
void AddContact(Contact* pc)
{assert(pc);if (pc->size == MAX){printf("通讯录已满,添加失败\n");return;}printf("请输入联系人的姓名:");scanf("%s", ((pc->data)[pc->size]).name);printf("请输入联系人的年龄:");scanf("%d", &((pc->data)[pc->size].age));printf("请输入联系人的性别:");scanf("%s", (pc->data)[pc->size].sex);printf("请输入联系人的地址:");scanf("%s", (pc->data)[pc->size].address);printf("请输入联系人的电话:");scanf("%s", (pc->data)[pc->size].telephone);pc->size++;printf("恭喜你,添加成功\n");
}

八、通讯录功能实现之删除联系人

添加了联系人,那么与之对应的就是删除操作了

我们删除的基本思路就是,先断言指针,防止空指针

然后如果通讯录空了,那么就不需要删除

我们这里利用姓名来删除联系人。

我们创建一个数组,将输入的联系人姓名放入其中

然后我们创建一个根据名字查找的函数,这个函数的基本思想就是strcmp函数来比较名字,如果名字存在,则返回下标。否则返回-1

我们根据下标来进行删除

删除的时候,我们只需要就后面的元素统一往前挪动一个单位即可,最后不要忘记pc->size--

//在通讯录中通过名字查找一个人,并返回他的下标
int FindByName(const Contact* pc, char* arr)
{assert(pc && arr);int i = 0;for (i = 0; i < pc->size; i++){if (strcmp(pc->data[i].name, arr) == 0){return i;}}return -1;
}
//删除指定联系人
void DelContact(Contact* pc)
{assert(pc);if (pc->size == 0){printf("通讯录为空,无法删除\n");return;}printf("请输入你要删除的联系人姓名>:");char arr[NAME_MAX] = { 0 };scanf("%s", arr);int pos = FindByName(pc, arr);if (pos == -1){printf("没有这个人\n");return;}int i = pos;for (i = pos; i < pc->size - 1; i++){pc->data[i] = pc->data[i + 1];}pc->size--;printf("删除成功\n");
}

九、通讯录功能实现之查找联系人

在查找联系人中,我们同样使用名字来查找,这个就又需要使用我们之前的根据名字返回下标函数了。可以将这个封装成一个函数是很有必要的。

我们直接根据这个下标进行格式化打印即可

//查找指定联系人
void SearchContact(const Contact* pc)
{assert(pc);if (pc->size == 0){printf("通讯录为空,无法查找\n");return;}char arr[NAME_MAX] = { 0 };printf("请输入你要查找的名字>:");scanf("%s", arr);int pos = FindByName(pc, arr);if (pos == -1){printf("通讯录中不存在这个人\n");return;}printf("%-20s %-4s %-5s %-30s %-12s\n", "姓名", "年龄", "性别", "地址", "电话");printf("%-20s %-4d %-5s %-30s %-12s\n",pc->data[pos].name,pc->data[pos].age,pc->data[pos].sex,pc->data[pos].address,pc->data[pos].telephone);
}

十、通讯录功能实现之修改联系人

我们现在实现的是修改联系人的信息

对于这个函数,我们同样还是根据名字来查找到这个联系人的下标,有了下标,那么修改这个就很简单了。

//修改指定联系人
void ModifyContact(Contact* pc)
{assert(pc);if (pc->size == 0){printf("通讯录为空,无法修改\n");return;}char arr[NAME_MAX] = { 0 };printf("请输入你要修改的人的名字\n");scanf("%s", arr);int pos = FindByName(pc, arr);if (pos == -1){printf("该联系人不存在\n");return;}printf("请输入联系人的姓名:");scanf("%s", pc->data[pos].name);printf("请输入联系人的年龄:");scanf("%d", &(pc->data[pos].age));printf("请输入联系人的性别:");scanf("%s", pc->data[pos].sex);printf("请输入联系人的地址:");scanf("%s", pc->data[pos].address);printf("请输入联系人的电话:");scanf("%s", pc->data[pos].telephone);printf("修改成功\n");
}

十一、通讯录功能实现之排序

对于排序我们其实比较熟悉的,我们直接使用快速排序即可。因为我们之前已经介绍过快排的基本使用了。我们这里采用了两种方式来排序,可以供使用者进行选择

值得思考的是,我们也可以利用选择的方式,我们在写一个根据年龄查找下标的函数。然后我们就可以选择通过年龄来找到我们需要修改的联系人,并且返回他的下标了。这样我们查找的功能就更加强大了

void cmp_by_name(void* e1, void* e2)
{return strcmp(((PeoInfo*)e1)->name, ((PeoInfo*)e2)->name);
}
void cmp_by_age(void* e1, void* e2)
{return ((PeoInfo*)e1)->age - ((PeoInfo*)e2)->age;
}
//排序通讯录
void SortContact(Contact* pc)
{assert(pc);int input = 0;printf("请选择你需要按姓名排序还是按照年龄排序\n");printf("按照姓名排序请输入1,按照年龄排序请输入2 :\n");scanf("%d", &input);if (input == 1)qsort(pc, pc->size, sizeof(PeoInfo), cmp_by_name);if (input == 2)qsort(pc, pc->size, sizeof(PeoInfo), cmp_by_age);printf("排序成功\n");
}

十二、通讯录功能实现之打印通讯录

我们对通讯录有了那么多的实现,那么我们也得看到我们的实现后的样子吧,所以我们就很有必要完成一个打印函数。这个函数的实现也很简单,就是利用遍历的思想即可

//打印通讯录
void ShowContact(const Contact* pc)
{assert(pc);int i = 0;printf("%-20s %-4s %-5s %-30s %-12s\n","姓名","年龄","性别","地址","电话");for (i = 0; i < pc->size; i++){printf("%-20s %-4d %-5s %-30s %-12s\n",pc->data[i].name,pc->data[i].age,pc->data[i].sex, pc->data[i].address,pc->data[i].telephone);}}

十三、通讯录完整代码(分文件)

test.c文件

#define _CRT_SECURE_NO_WARNINGS 1
#include"Contact.h"
void menu()
{printf("*************************\n");printf("****      1.Add      ****\n");printf("****      2.Del      ****\n");printf("****      3.Search   ****\n");printf("****      4.Modify   ****\n");printf("****      5.Show     ****\n");printf("****      6.Sort     ****\n");printf("****      0.exit     ****\n");printf("*************************\n");}
int main()
{int input = 0;Contact con;InitContact(&con);do{menu();printf("请输入你的需求>:");scanf("%d", &input);switch (input){case 1:printf("添加联系人\n");AddContact(&con);break;case 2:printf("删除指定联系人\n");DelContact(&con);break;case 3:printf("查找指定联系人\n");SearchContact(&con);break;case 4:printf("修改指定联系人\n");ModifyContact(&con);break;case 5:printf("打印所有联系人\n");ShowContact(&con);break;case 6:printf("排序联系人\n");SortContact(&con);break;case 0:printf("退出通讯录\n");break;default:printf("选择错误,请重新选择\n");break;}} while (input);return 0;
}

Contact.h文件

#pragma once
#include<stdio.h>
#include<string.h>
#include<assert.h>
#include<stdlib.h>
#define MAX 100
#define NAME_MAX 20
#define SEX_MAX 10
#define ADDRESS_MAX 30
#define TELEPHONE_MAX 12//定义一个结构体类型,这里存放人的信息
typedef struct PeoInfo
{char name[NAME_MAX];int age;char sex[SEX_MAX];char address[ADDRESS_MAX];char telephone[TELEPHONE_MAX];
}PeoInfo;
//所有人的都放到这里
typedef struct Contact
{PeoInfo data[MAX];int size;
}Contact;
//初始化通讯录
void InitContact(Contact* pc);
//添加联系人
void AddContact(Contact* pc);
//删除指定联系人
void DelContact(Contact* pc);
//查找指定联系人
void SearchContact(const Contact* pc);
//修改指定联系人
void ModifyContact(Contact* pc);
//排序通讯录
void SortContact(Contact* pc);
//打印通讯录
void ShowContact(const Contact* pc);

Contact.c文件

#define _CRT_SECURE_NO_WARNINGS 1
#include"Contact.h"
//初始化通讯录
void InitContact(Contact* pc)
{assert(pc);memset(pc->data, 0, sizeof(pc->data));pc->size = 0;
}
//添加联系人
void AddContact(Contact* pc)
{assert(pc);if (pc->size == MAX){printf("通讯录已满,添加失败\n");return;}printf("请输入联系人的姓名:");scanf("%s", ((pc->data)[pc->size]).name);printf("请输入联系人的年龄:");scanf("%d", &((pc->data)[pc->size].age));printf("请输入联系人的性别:");scanf("%s", (pc->data)[pc->size].sex);printf("请输入联系人的地址:");scanf("%s", (pc->data)[pc->size].address);printf("请输入联系人的电话:");scanf("%s", (pc->data)[pc->size].telephone);pc->size++;printf("恭喜你,添加成功\n");
}
//在通讯录中通过名字查找一个人,并返回他的下标
int FindByName(const Contact* pc, char* arr)
{assert(pc && arr);int i = 0;for (i = 0; i < pc->size; i++){if (strcmp(pc->data[i].name, arr) == 0){return i;}}return -1;
}
//删除指定联系人
void DelContact(Contact* pc)
{assert(pc);if (pc->size == 0){printf("通讯录为空,无法删除\n");return;}printf("请输入你要删除的联系人姓名>:");char arr[NAME_MAX] = { 0 };scanf("%s", arr);int pos = FindByName(pc, arr);if (pos == -1){printf("没有这个人\n");return;}int i = pos;for (i = pos; i < pc->size - 1; i++){pc->data[i] = pc->data[i + 1];}pc->size--;printf("删除成功\n");
}
//查找指定联系人
void SearchContact(const Contact* pc)
{assert(pc);if (pc->size == 0){printf("通讯录为空,无法查找\n");return;}char arr[NAME_MAX] = { 0 };printf("请输入你要查找的名字>:");scanf("%s", arr);int pos = FindByName(pc, arr);if (pos == -1){printf("通讯录中不存在这个人\n");return;}printf("%-20s %-4s %-5s %-30s %-12s\n", "姓名", "年龄", "性别", "地址", "电话");printf("%-20s %-4d %-5s %-30s %-12s\n",pc->data[pos].name,pc->data[pos].age,pc->data[pos].sex,pc->data[pos].address,pc->data[pos].telephone);
}
//修改指定联系人
void ModifyContact(Contact* pc)
{assert(pc);if (pc->size == 0){printf("通讯录为空,无法修改\n");return;}char arr[NAME_MAX] = { 0 };printf("请输入你要修改的人的名字\n");scanf("%s", arr);int pos = FindByName(pc, arr);if (pos == -1){printf("该联系人不存在\n");return;}printf("请输入联系人的姓名:");scanf("%s", pc->data[pos].name);printf("请输入联系人的年龄:");scanf("%d", &(pc->data[pos].age));printf("请输入联系人的性别:");scanf("%s", pc->data[pos].sex);printf("请输入联系人的地址:");scanf("%s", pc->data[pos].address);printf("请输入联系人的电话:");scanf("%s", pc->data[pos].telephone);printf("修改成功\n");
}
void cmp_by_name(void* e1, void* e2)
{return strcmp(((PeoInfo*)e1)->name, ((PeoInfo*)e2)->name);
}
void cmp_by_age(void* e1, void* e2)
{return ((PeoInfo*)e1)->age - ((PeoInfo*)e2)->age;
}
//排序通讯录
void SortContact(Contact* pc)
{assert(pc);int input = 0;printf("请选择你需要按姓名排序还是按照年龄排序\n");printf("按照姓名排序请输入1,按照年龄排序请输入2 :\n");scanf("%d", &input);if (input == 1)qsort(pc, pc->size, sizeof(PeoInfo), cmp_by_name);if (input == 2)qsort(pc, pc->size, sizeof(PeoInfo), cmp_by_age);printf("排序成功\n");
}
//打印通讯录
void ShowContact(const Contact* pc)
{assert(pc);int i = 0;printf("%-20s %-4s %-5s %-30s %-12s\n","姓名","年龄","性别","地址","电话");for (i = 0; i < pc->size; i++){printf("%-20s %-4d %-5s %-30s %-12s\n",pc->data[i].name,pc->data[i].age,pc->data[i].sex, pc->data[i].address,pc->data[i].telephone);}}

十四、通讯录完整代码(一个文件)

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<string.h>
#include<assert.h>
#include<stdlib.h>
#define MAX 100
#define NAME_MAX 20
#define SEX_MAX 10
#define ADDRESS_MAX 30
#define TELEPHONE_MAX 12//定义一个结构体类型,这里存放人的信息
typedef struct PeoInfo
{char name[NAME_MAX];int age;char sex[SEX_MAX];char address[ADDRESS_MAX];char telephone[TELEPHONE_MAX];
}PeoInfo;
//所有人的都放到这里
typedef struct Contact
{PeoInfo data[MAX];int size;
}Contact;
//初始化通讯录
void InitContact(Contact* pc);
//添加联系人
void AddContact(Contact* pc);
//删除指定联系人
void DelContact(Contact* pc);
//查找指定联系人
void SearchContact(const Contact* pc);
//修改指定联系人
void ModifyContact(Contact* pc);
//排序通讯录
void SortContact(Contact* pc);
//打印通讯录
void ShowContact(const Contact* pc);void menu()
{printf("*************************\n");printf("****      1.Add      ****\n");printf("****      2.Del      ****\n");printf("****      3.Search   ****\n");printf("****      4.Modify   ****\n");printf("****      5.Show     ****\n");printf("****      6.Sort     ****\n");printf("****      0.exit     ****\n");printf("*************************\n");}
int main()
{int input = 0;Contact con;InitContact(&con);do{menu();printf("请输入你的需求>:");scanf("%d", &input);switch (input){case 1:printf("添加联系人\n");AddContact(&con);break;case 2:printf("删除指定联系人\n");DelContact(&con);break;case 3:printf("查找指定联系人\n");SearchContact(&con);break;case 4:printf("修改指定联系人\n");ModifyContact(&con);break;case 5:printf("打印所有联系人\n");ShowContact(&con);break;case 6:printf("排序联系人\n");SortContact(&con);break;case 0:printf("退出通讯录\n");break;default:printf("选择错误,请重新选择\n");break;}} while (input);return 0;
}//初始化通讯录
void InitContact(Contact* pc)
{assert(pc);memset(pc->data, 0, sizeof(pc->data));pc->size = 0;
}
//添加联系人
void AddContact(Contact* pc)
{assert(pc);if (pc->size == MAX){printf("通讯录已满,添加失败\n");return;}printf("请输入联系人的姓名:");scanf("%s", ((pc->data)[pc->size]).name);printf("请输入联系人的年龄:");scanf("%d", &((pc->data)[pc->size].age));printf("请输入联系人的性别:");scanf("%s", (pc->data)[pc->size].sex);printf("请输入联系人的地址:");scanf("%s", (pc->data)[pc->size].address);printf("请输入联系人的电话:");scanf("%s", (pc->data)[pc->size].telephone);pc->size++;printf("恭喜你,添加成功\n");
}
//在通讯录中通过名字查找一个人,并返回他的下标
int FindByName(const Contact* pc, char* arr)
{assert(pc && arr);int i = 0;for (i = 0; i < pc->size; i++){if (strcmp(pc->data[i].name, arr) == 0){return i;}}return -1;
}
//删除指定联系人
void DelContact(Contact* pc)
{assert(pc);if (pc->size == 0){printf("通讯录为空,无法删除\n");return;}printf("请输入你要删除的联系人姓名>:");char arr[NAME_MAX] = { 0 };scanf("%s", arr);int pos = FindByName(pc, arr);if (pos == -1){printf("没有这个人\n");return;}int i = pos;for (i = pos; i < pc->size - 1; i++){pc->data[i] = pc->data[i + 1];}pc->size--;printf("删除成功\n");
}
//查找指定联系人
void SearchContact(const Contact* pc)
{assert(pc);if (pc->size == 0){printf("通讯录为空,无法查找\n");return;}char arr[NAME_MAX] = { 0 };printf("请输入你要查找的名字>:");scanf("%s", arr);int pos = FindByName(pc, arr);if (pos == -1){printf("通讯录中不存在这个人\n");return;}printf("%-20s %-4s %-5s %-30s %-12s\n", "姓名", "年龄", "性别", "地址", "电话");printf("%-20s %-4d %-5s %-30s %-12s\n",pc->data[pos].name,pc->data[pos].age,pc->data[pos].sex,pc->data[pos].address,pc->data[pos].telephone);
}
//修改指定联系人
void ModifyContact(Contact* pc)
{assert(pc);if (pc->size == 0){printf("通讯录为空,无法修改\n");return;}char arr[NAME_MAX] = { 0 };printf("请输入你要修改的人的名字\n");scanf("%s", arr);int pos = FindByName(pc, arr);if (pos == -1){printf("该联系人不存在\n");return;}printf("请输入联系人的姓名:");scanf("%s", pc->data[pos].name);printf("请输入联系人的年龄:");scanf("%d", &(pc->data[pos].age));printf("请输入联系人的性别:");scanf("%s", pc->data[pos].sex);printf("请输入联系人的地址:");scanf("%s", pc->data[pos].address);printf("请输入联系人的电话:");scanf("%s", pc->data[pos].telephone);printf("修改成功\n");
}
void cmp_by_name(void* e1, void* e2)
{return strcmp(((PeoInfo*)e1)->name, ((PeoInfo*)e2)->name);
}
void cmp_by_age(void* e1, void* e2)
{return ((PeoInfo*)e1)->age - ((PeoInfo*)e2)->age;
}
//排序通讯录
void SortContact(Contact* pc)
{assert(pc);int input = 0;printf("请选择你需要按姓名排序还是按照年龄排序\n");printf("按照姓名排序请输入1,按照年龄排序请输入2 :\n");scanf("%d", &input);if (input == 1)qsort(pc, pc->size, sizeof(PeoInfo), cmp_by_name);if (input == 2)qsort(pc, pc->size, sizeof(PeoInfo), cmp_by_age);printf("排序成功\n");
}
//打印通讯录
void ShowContact(const Contact* pc)
{assert(pc);int i = 0;printf("%-20s %-4s %-5s %-30s %-12s\n", "姓名", "年龄", "性别", "地址", "电话");for (i = 0; i < pc->size; i++){printf("%-20s %-4d %-5s %-30s %-12s\n",pc->data[i].name,pc->data[i].age,pc->data[i].sex,pc->data[i].address,pc->data[i].telephone);}}


总结

我们本节实现了一个简单的通讯录,但是要注意的是,这个通讯录其实并不完善。因为他的容量是死的。我们希望可以实现一个可以动态扩容的通讯录。其次他的一个缺陷就是关闭了这个文件之后,在打开就会发现,之前的信息不见了。我们希望可以实现一个不会消失数据的通讯录。这些我们都将在后面的文章中实现

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

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

向量/矩阵的特殊乘法运算

向量 标量积&#xff08;内积&#xff09;标量积&#xff08;又称点乘、点积、数量积&#xff09;&#xff1a;两个向量相乘得到一个标量。 几何意义&#xff1a; 代数定义&#xff1a; 向量积&#xff08;外积&#xff09;向量积&#xff08;又称叉乘、叉积、矢量积&#x…...

跨站(cross-site)、跨域(cross-origin)、SameSite与XMLHttpRequest.withCredentials

跨域&#xff0c;注意是浏览器设置的同源策略&#xff0c;是在浏览器端限制的&#xff0c;也就是在当前域名下发送的xhr请求是否和当前域名同域。 如果跨域了&#xff0c;可以通过设置Access-Control-Allow-Origin来解决跨域&#xff1b; 如果是同域&#xff0c;则cookie自动被…...

Mybatis-config.xml配置文件

<?xml version"1.0" encoding"UTF-8" ?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd"><configuration><properties><property…...

【程序人生】23岁做了四年幼师,我真的受不了了!

我的情况 从大专实习期开始一直从事幼教行业&#xff0c;在私立幼儿园做主班&#xff0c;去年6月裸辞待业&#xff0c;旅游一圈以后&#xff0c;开始思考人生。 我无数次问自己&#xff0c;真的要从事一辈子幼教事业吗&#xff1f; 思来想去&#xff0c;我决定尝试新的方向。…...

没有重复的数据在insert 时:ORA-00001:违反唯一约束条件

这里只说这个的一种特殊的情况。首先要明确的是在插入数据时报这个错误&#xff0c;证明表真的是存在对检查的数据有不唯一的存在。 语句&#xff1a; select 主键字段 from 表 group by 主键字段 having count(*)>1 解决&#xff1a; 最好的方法删除了&#xff0c;重建…...

Mysql乐观锁与悲观锁的区别

原文地址&#xff1a; 05 mysql-乐观锁与悲观锁的区别 文章目录1、悲观锁2、乐观锁3、两种锁的使用场景4、乐观锁常见的两种实现方式4.1、 版本号机制4.2、 CAS算法5、乐观锁的缺点5.1、 ABA 问题5.2、 循环时间长开销大5.3、 只能保证一个共享变量的原子操作6、悲观锁缺点1、…...

Matlab中将行向量转为列向量的方法

文章目录转置法利用 “ &#xff1a;”法总结在进行一些代码编写的时候&#xff0c;可能需要将行向量转为列向量&#xff0c;那么怎么去完成这件事情呢&#xff0c;本篇文章给大家介绍两种简单的方法转置法 假设有如下代码 c(3)1;这个代码直接给C的第三个元素赋值为1&#xf…...

软考信息系统项目管理师论文范文:论项目的质量管理论项目的质量管理

要求2500字 摘要&#xff1a; 2018年2月&#xff0c;我有幸参与了XX 市电网公司人力资源管理系统建设项目&#xff0c;担任项目经理职位。该项目以《XX市电网公司"十三五"信息化规划实施计划》为准则&#xff0c;目的是采用统一的技术路线和架构体系&#xff0c;构…...

java违反了唯一约束_Caused by: java.sql.BatchUpdateException: ORA-00001: 违反唯一约束条件...

只有这句clientuser.addCustomer(customer);和这两句clientuser.addCustomer(customer);clientuser.addAccount(acc);一起出现的错误如下&#xff1a;Exception in thread "main" org.springframework.dao.DataIntegrityViolationException: Could not execute JDBC …...

c/c++4个内存分区介绍

一开始想自己写&#xff0c;写了一个版本&#xff0c;发现还是别人总结的好&#xff0c;还是直接抄吧。。。嘿嘿嘿 原帖连接&#xff1a;c/c内存四区介绍 c/c内存四个区&#xff1a;代码区&#xff0c;全局区&#xff0c;栈区&#xff0c;堆区 内存分不同区的意义&#xff1a;…...

C++数组赋值

情况1&#xff1a;无{} 如果没有初始化函数中定义的数组&#xff0c;则其元素将是不确定的&#xff0c;这意味着元素的值为以前驻留在该内存单元中的值。 int #include<iostream> using namespace std; int main() {int a[5];a[1] 2;for (int i : a){cout << i…...

html get请求方法,获取Get请求字符串

Get请求就是我们在浏览器地址栏输入URL时发送请求的方式&#xff0c;或者我们在HTML中定义一个表单(form)时&#xff0c;把action属性设为“Get”时的工作方式&#xff1b;Get请求字符串就是跟在URL后面以问号“?”开始的字符串&#xff0c;但不包括问号。比如这样的一个请求&…...

PHP实现简单计算器

实训练习&#xff1a;PHP与Web表单交互 一、实训目的 1、掌握表单创建的语法格式。 2、灵活应用PHP与表单数据的交互与处理。 二、实训内容 1、创建表单,模拟一个简单计算器,并对输入的数据进行合理验证。 2、代码&#xff1a; <!DOCTYPE html> <html lang&quo…...

U盘要求格式化怎么修复?看这里!

部分网友可能遇到过这种情况&#xff0c;电脑插上U盘之后&#xff0c;提示要格式化&#xff0c;很多人一脸懵逼&#xff0c;这究竟是怎么回事呢&#xff1f;怎样才能修复呢&#xff1f; 其实呀&#xff0c;不光U盘&#xff0c;还有移动硬盘、SD卡&#xff0c;甚至我们电脑内置…...

oracle插入数据报ORA-00001:违反唯一约束条件

参考&#xff1a;http://blog.csdn.net/burongwawa520/article/details/50848625 就是新插入记录的主键跟已经存在记录的主键一样&#xff0c;所以导致冲突&#xff0c;可以把新插入的记录的主键打印出来看一下是否已经存在&#xff0c;如果已经存在并且是自增id的话&#xff0…...

斑马ZT510打印设置

这里写自定义目录标题斑马ZT510打印设置语言设置IP设置驱动安装添加打印机其他资源斑马ZT510打印设置 语言设置 打开主菜单 选择语言&#xff0c;简体中文 IP设置 打开主菜单&#xff0c;选择网络 找到有线IP&#xff0c;设置网络IP地址 设置子网 掩码 设置有线网关 设…...

如何打造一个NFT市场

NFT是Non-Fungible Tokens的缩写&#xff0c;意思是不可互换的代币&#xff0c;它是相对于可互换的代币而言的。不可互换的代币也称为非同质代币。 NFT是一种可被买卖的“独一无二”的数字资产&#xff0c;说到“独一无二”就是指他的典型特征之一&#xff1a;唯一性&#xff…...

jenkins 常用插件下载及安装

Ant Plugin Branch API Build Name and Description Setter Build Timeout Build Timestamp Plugin build user vars plugin Command Agent Launcher Plugin Date Parameter Plugin description setter plugin Dingding JSON Pusher Plugin DingTalk Email Extension Plugin E...

数字图像处理(入门篇)九 图像数据预处理之滤波

目录 1 模板运算 &#xff08;1&#xff09;模板卷积 &#xff08;2&#xff09;模板排序 2 均值滤波 &#xff08;1&#xff09;代码 &#xff08;2&#xff09;结果图 3 高斯滤波 &#xff08;1&#xff09;代码 &#xff08;2&#xff09;结果图 4 中值滤波 &#…...

使用java实现HTTP的GET请求

在前几节我们详细讲解了http协议的相关信息&#xff0c;基于“知行合一”的原则&#xff0c;只有通过具体动手实践才有可能检验知识点被我们真正掌握&#xff0c;本节我们就使用代码实现http的get请求。 首先需要一个http服务器&#xff0c;基于简单原则&#xff0c;我使用了在…...

【无标题】MR直播爆发 在元宇宙的前夜

从本质上来说&#xff0c;面对面的交流是最有效的&#xff0c;因为被沟通对象的声音、神态以及细微的情绪变化&#xff0c;都会被沟通者敏捷捕捉并反聩给大脑&#xff0c;从而做出准确判断&#xff0c;但由于时间和空间上的差异&#xff0c;人们往往无法做到面对面交流&#xf…...

iOS最新面试题(一)

1.聊下HTTP post的body体使用form-urlencoded和multipart/form-data的区别。 1&#xff09;application/x-www-form-urlencoded&#xff1a; 窗体数据被编码为名称/值对&#xff0c;这是标准且默认的编码格式。当action为get时候&#xff0c;客户端把form数据转换成一个字串app…...

原生js实现常用的HTTP请求(GET、POST)

#### 原生js实现常用的HTTP请求(GET、POST) // 常用工具函数 var tools {/* ajax请求get* param url string 请求的路径* param query object 请求的参数query* param succCb function 请求成功之后的回调* param failCb function 请求失败的回调* param isJson …...

mysql乐观和悲观锁实现_mysql实现乐观锁和悲观锁该怎么编写?

乐观锁和悲观锁相信大家都是知道的&#xff0c;这是java中的基础知识&#xff0c;今天我们就来看看它们两者该如何使用代码实现吧。乐观锁实现1)、表设计表task&#xff0c;分别有三个字段id,value、version2)、具体实现-首先读取task表中的数据&#xff0c;得到version的值为v…...

Spark 运行架构

文章目录Spark 运行架构一、运行架构二、核心组件1、Driver2、Executor3、Master & Worker4、ApplicationMaster三、核心概念1、Exuecutor 和 Core2、并行度&#xff08;Parallelism&#xff09;3、有向无环图&#xff08;DAG&#xff09;4、提交流程Yarn Client 模式Spark…...

django+vue线上环境部署

前端项目部署Vue 安装Web服务器Nginx 默认已远程连接到服务器 参考Nginx安装文档 1.sudo yum install yum-utils 2.vim /etc/yum.repos.d/nginx.repo [nginx-stable] namenginx stable repo baseurlhttp://nginx.org/packages/centos/$releasever/$basearch/ gpgcheck1 enab…...

Django学习第一天记录

1.安装Django(Windows环境) 首先需要确定系统中存在python环境&#xff0c;当前&#xff0c;本机的python环境为python 3.6.6&#xff0c;可以使用命令python --version进行查看。 在python环境成功搭建的基础上&#xff0c;我们使用命令pip install django即可进行django环境…...

重心法求中心matlab,两个中转站选址问题(重心法,metlab,spss)程序.ppt

基于重心法的中转站选址问题 -*- 某企业有2个生产厂(P1&#xff0c;P2)服务于三个目标市场(M1&#xff0c;M2&#xff0c;M3)&#xff0c;地理坐标如图所示。各节点的运输总量及运输费率如表所示。 (1)如果要修建一个中转仓库&#xff0c;请用重心法为该仓库选址。 (2)如果需要…...

微软OEM序列号探究

微软windows OEM序列号分为三大类&#xff1a;OEMSlp、OEMCoa和OemNonslp。 OEMSlp (System Locked Pre-installation)系统锁定的预装 这种key是OEM厂商预装系统使用的&#xff0c;slp key可以用来安装任何OEMSlip系统&#xff0c;和OEM的厂商无关。OEMSlp key不需要联网到微软…...

SpringBoot Java后端校验Sign in With Apple (苹果授权登录)

先吐槽一下&#xff01;苹果的开发文档简直就是一坨S 好了&#xff01;&#xff01;开发步骤如下&#xff1a; 1.导入JWT Maven 坐标 <dependency><groupId>io.jsonwebtoken</groupId><artifactId>jjwt</artifactId><version>0.9.0</…...

GEE数据集:TerraClimate爱达荷大学全球陆地表面的每月气候和气候水平衡数据集

GEE水生态环境数据集&#xff1a; 开源数据&#xff1a;主要的开源的夜光遥感数据GEE数据集&#xff1a;CHIRPS Pentad高分辨率的全球网格降雨数据集GEE数据集&#xff1a;将全国水电站分布及其装机容量导出为CSV表格GEE数据集&#xff1a;TerraClimate爱达荷大学全球陆地表面…...

单设施重心法选址matlab编程

一、重心法的原理 重心法是一种设置单个厂房或者仓库的方法&#xff0c;这种方法主要考虑的因素是现有的设施之间的距离以及货物运输量和运输费率&#xff0c;该方法常用于配送中心的选址上&#xff0c;其中商品的运输量是影响商品运输费用的主要因素&#xff0c;仓库尽可能地接…...

图片隐写类简单思路介绍

1.图片文本隐写 格式&#xff1a;内嵌着txt文本的jpg或者png图片 解决&#xff1a;直接winhex找&#xff0c;如果只是简单的txt文本嵌入&#xff0c;那应该能在最后的位置看到隐藏的明文信息。 或者直接把疑似的图片修改成txt格式&#xff0c;拉到最后就能找到。 如果这两种方…...

SQL错误:违反唯一约束条件

java.sql.BatchUpdateException: ORA-00001: 违反唯一约束条件 (AML.PK_LTB_INS_RPOL) at oracle.jdbc.driver.OraclePreparedStatement.executeBatch(OraclePreparedStatement.java:12296) at oracle.jdbc.driver.OracleStatementWrapper.executeBatch(OracleStatementWrappe…...

软考高项(信息系统项目管理师)论文范文分享

论信息系统项目的整体管理 【摘要】 2016 年 7 月&#xff0c;我参加了╳╳市物价局发起的“智慧物价”信息综合管理平台系统的建设工作&#xff0c;担任承建方项目经理&#xff0c;该信息综合管理平台系统的主要功能有括价格监测预警、价格应急监测、价格监督检查、商品价格管…...

枚举[java基础]

什么是枚举 常理上的枚举 有限的确定的常量集合 java中的枚举 A. 在JDK5中引入的枚举解决了之前通过常量来表示离散量所带来的问题&#xff0c;大大加强了程序的可读性、易用性和可维护性&#xff0c;B. 在此基础之上又进行了扩展&#xff0c;使之可以像类一样去使用&#x…...

PAT 基础编程题 7-16 求符合给定条件的整数集 (15 分)

7-16 求符合给定条件的整数集 (15 分) 给定不超过6的正整数A&#xff0c;考虑从A开始的连续4个数字。请输出所有由它们组成的无重复数字的3位数。 输入格式&#xff1a; 输入在一行中给出A。 输出格式&#xff1a; 输出满足条件的的3位数&#xff0c;要求从小到大&#xf…...

leetcode 打印_测试面试LeetCode系列:打印特定文本第十行内容

引言本题为LeetCode上的shell简单系列&#xff0c;建议掌握此题&#xff0c;一二线互联网的面试依旧越来越LeetCode风。已经逐渐从开发吹到了测试开发。。题目给定一个文本文件 file.txt&#xff0c;请只打印这个文件中的第十行。示例:假设 file.txt 有如下内容&#xff1a;Lin…...

乐观锁和悲观锁——独占锁和共享锁

乐观锁和悲观锁&#xff1a;数据库的锁机制 在数据库管理系统中的并发控制是为了确保多个事务之间同时读取数据库中同一个数据时&#xff0c;不破坏事务的隔离性和统一性以及数据库的统一性。实现并发控制的手段大致可以分为乐观并发控制和悲观并发控制。 悲观锁&#xff1a;每…...

乐观锁和悲观锁的区别(最全面的分析)

悲观锁(Pessimistic Lock), 顾名思义&#xff0c;就是很悲观&#xff0c;每次去拿数据的时候都认为别人会修改&#xff0c;所以每次在拿数据的时候都会上锁&#xff0c;这样别人想拿这个数据就会block直到它拿到锁。传统的关系型数据库里边就用到了很多这种锁机制&#xff0c;比…...

使用Axure制作网页

1.交互样式(仅对当前元件的样式进行更改) 选中元件&#xff0c;鼠标右键&#xff0c;选择【交互样式…】&#xff0c;选择交互触发类型&#xff0c;选择要更改的交互样式 使用交互样式实现鼠标悬停更改字体颜色效果 2.交互动作(带有逻辑性) 选中元件&#xff0c;在右侧交互面板…...

数据库关于索引问题(违反唯一约束)

违反唯一约束的问题&#xff1a;索引的值应该大于表的最大值&#xff08;左边的值大于右边的&#xff09; 表示UPDATE_CODE是唯一的 补&#xff1a;升级字段 /**表备注说明字段长度升级20220302 */sb new StringBuilder();sb.append(" DECLARE SELECTNUM NUMBER;BEGIN …...

渗透中Poc、Exp、Payload、Rce与Shellcode的区别

备注:感谢原作者,本文只为备份学习资料。 PoC,全称”Proof of Concept”,中文“概念验证”,常指一段漏洞证明的代码。Exp,全称”Exploit”,中文“利用”,指利用系统漏洞进行攻击的动作。Payload,中文“有效载荷”,指成功exploit之后,真正在目标系统执行的代码或指令…...

违反唯一约束条件 ORA-00001

1.向用户表新增记录&#xff0c;报违反唯一约束条件 ORA-00001。 2.因为表里设置了自增长字段&#xff0c;当自增长字段的起始值小于现有记录的最大值&#xff0c;就会报错。 如表里有526条记录&#xff0c;自增长的值应该是从526以后的值开始&#xff0c;但是自增长的设置值却…...

小白学习嵌入式第一回合

目录 &#xff08;一&#xff09;直接使用gcc编译C程序 1.编写C程序 2.gcc编译过程(以编译hello.c为例) 3.gcc直接编译 &#xff08;二&#xff09;与windows平台编程对比 &#xff08;三&#xff09;使用Makefile编译c程序 1.Makefile文件编写规则 2.编写Makefile文件并编译 &…...

嵌入式linux开发笔记--给一个进程发送信号

文章引自 https://www.cnblogs.com/52php/p/5813867.html #include <signal.h> #include <stdio.h> #include <unistd.h>void ouch(int sig) {printf("\nOUCH! - I got signal %d\n", sig);// 恢复终端中断信号SIGINT的默认行为(void) signal(SIGI…...

spring学习记录(八)

spring创建对象的生命周期 spring作为一个IOC容器&#xff0c;主要作用是进行对象的创建和在容器中进行对象的管理&#xff0c;spring创建对象的时候&#xff0c;主要试用了工厂设计模式&#xff0c;并且对象创建过程是会经过一系列的处理。在spring创建对象和销毁的过程中&am…...

Flink快速入门之批计算的WordCount案例

数据源wc.txt hello spark hello flink hello java hello java hello php hello python hello scalapackage streamimport org.apache.flink.api.scala.ExecutionEnvironment/*** Author yqq* Date 2021/12/23 01:46* Version 1.0*/ object BatchWordCount {def main(args: Ar…...

《BI工程师必读》数据可视化篇 #02

写在前面 对于大数据团队来说&#xff0c;我们把计算好的数据&#xff0c;以一种简洁美观的方式展现给产品经理或leader也是十分重要的&#xff0c;其实也就是数据可视化。 一种方式就是公司自研一个可视化平台&#xff0c;比如用SpringBootEcharts就可以达到一些效果&#x…...

Centos下载版本选择,以及安装

下载Centos 阿里云站点&#xff1a;http://mirrors.aliyun.com/centos/7/isos/x86_64/ 进入阿里云站点&#xff0c;选择 CentOS-7-x86_64-DVD-1804.iso下载 各个版本的ISO镜像文件说明&#xff1a; CentOS-7-x86_64-DVD-1708.iso 标准安装版&#xff08;推荐&#xff09; …...

好家伙,这几个隐藏功能,太香了

很多小伙伴可能被小畅的问题搞糊涂了&#xff0c;因为很多人只会在电脑上堆砌各种小应用&#xff0c;而忽略了Windows原有的实用功能。 而我们也千万不要小看这些功能&#xff0c;它们说不定能在关键时刻助你一臂之力&#xff0c;帮到你不少忙呢&#xff01; 那么今天小畅就为大…...

冒泡排序的原理

冒泡排序的原理是&#xff1a; 从左到右&#xff0c;相邻元素进行比较。每次比较一轮&#xff0c;就会找到序列中最大的一个或最小的一个。这个数就会从序列的最右边冒出来。...

Linux tcpdump 命令详解与示例

命令概要 Linux作为网络服务器&#xff0c;特别是作为路由器和网关时&#xff0c;数据的采集和分析是不可少的。TcpDump 是 Linux 中强大的网络数据采集分析工具之一。 用简单的话来定义tcpdump&#xff0c;就是&#xff1a;dump the traffic on a network&#xff0c;根据使…...

LVDS逻辑电平介绍及其应用要点

//高速电路设计实践 目录 1、LVDS介绍 2、案例&#xff1a;空闲输入引脚处理有误导致FPGA检测到错误输入 3、LVDS端口保护 1、LVDS介绍 Low-Voltage Different Signaling&#xff0c;低压差分信号&#xff0c;支持的最高速率为3.125Gbps&#xff0c;一般应用于点到点的组合…...

大数据浅观台风气候

上个月&#xff0c;1909号台风‘利奇马’给我国东部带来较为严重的风雨影响。之后&#xff0c;‘白鹿’、‘杨柳’、‘剑鱼’先后影响我国华南&#xff0c;选择北漂的‘玲玲’则直奔东北而去。台风生成源地广袤&#xff0c;在不同的海-气背景条件下&#xff0c;每个台风的路径及…...

安装不成功问题解决办法

安装不成功问题解决 安装不成功的问题汇总&#xff1a; 一. 绝大多数的用户安装失败主要原因是没有认真按照安装教程进行操作。 ☉公众号类的软件都有详细的安装教程&#xff0c;但是99%用户安装失败的原因是没有按照教程进行安装&#xff0c;所以出现各种安装失败&#xff0c;…...

时间序列数据的白噪声检验

问题起源 只有数据平稳&#xff0c;才可以借数据。 只有借数据&#xff0c;才可以做分析。 什么是白噪声序列 白噪声序列也称为纯随机序列&#xff0c;它满足两个性质 1&#xff09;数据是平稳的 2&#xff09;t≠s的时候&#xff0c;方差为0&#xff0c;说明t和s没有线性的…...

c语言程序设计苏小红课后习题答案5.11

//5.11 int main() {float Height0.0;float faHeight0.0;float maHeight0.0;char sex;char diet;char sports;printf("Whats your childs sex?a boy(M)or a girl(F):");scanf("%c", &sex);printf("Please enter fathers height:");scanf(&q...

请说一下悲观锁和乐观锁的区别

悲观锁和乐观锁并不是某个具体的“锁”而是一种并发编程的基本概念&#xff0c;是根据看待并发同步的角度。乐观锁和悲观锁最早出现在数据库的设计当中&#xff0c;后来逐渐被 Java 的并发包所引入。 悲观锁 悲观锁认为对于同一个数据的并发操作一定是会发生修改的&#xff0…...

工程学重要模型(第五位面壁者)

工程学模型笔记&#xff1a; 1.搬砖思维&#xff1a;专注行动&#xff0c;精确完成。 2.分解思维&#xff1a;整体-->局部-->单体&#xff08;分解从上到下&#xff0c;行动从下到上&#xff0c;聚焦关键局部&#xff09; 3.量化思维&#xff1a;寻找影响因素&#xff0c…...

python计算运动会某个参赛选手的得分。数据保存在文件中_为什么一定要考计算机二级证书?8个好处,考和没考区别有点大...

戳上面的蓝字关注我们哦&#xff01; 商务合作加V/QQ:55838408在众多考试中&#xff0c;全国计算机等级考试可以说是相对热门也最基础的考试。然而就是这最基础的考试&#xff0c;很多人都还没有通过。关于计算机等级考试&#xff0c;你又知道多少&#xff1f;含金量到底有多高…...

matlab 程序文件,MATLAB程序文件

《MATLAB程序文件》由会员分享&#xff0c;可在线阅读&#xff0c;更多相关《MATLAB程序文件(51页珍藏版)》请在人人文库网上搜索。1、发表数学实验、教师穆志民、matlab软件的基础内容。 文章排版的基本方法。 数据绘制和图像处理。 实现了大量数据处理的基本方法和软件。 优化…...

20230116英语学习

Emotional Intelligence in the Workplace 情商很重要&#xff01;如何培养员工的职场情商&#xff1f; In the age of automation, the secret ingredient of top-performing teams is no longer high IQ, but high levels of emotional intelligence in the workplace. It’…...

大话数据结构读书笔记系列(四)栈与队列

2019独角兽企业重金招聘Python工程师标准>>> 4.1 开场白 同学们&#xff0c;大家好&#xff01;我们又见面了。 不知道大家有没有玩过手枪&#xff0c;估计都没有。现在和平年代&#xff0c;上哪去玩这种危险的真东西&#xff0c;就是仿真玩具也大都被限制了。我小时…...

手机加速度计数据可以被随意读取,iOS关不掉权限,安卓这次能限制

&#x1f447;&#x1f447;关注后回复 “进群” &#xff0c;拉你进程序员交流群&#x1f447;&#x1f447;来源丨量子位&#xff08;ID&#xff1a;QbitAI&#xff09;行早 发自 凹非寺现在App泄露信息已经不是什么新鲜事了&#xff0c;手机存储&#xff0c;应用列表&#x…...

算法与数据结构-第四章:栈与队列

1.栈与队列: 栈是限定仅在表尾进行插入和删除操作的线性表。 队到是只允许在一端进行插入操作、 而在另一端进行删除操作的线性表. 书中的例子讲的挺好的,直接复制过来: 在软件应用中 &#xff0c;栈这种后进先出数据结构的应用是非常普遍的。 比如你用浏览器上网时 &…...

从删库到跑路or恢复,记一次MySQL数据库文件损坏恢复经历

从删库到跑路or恢复&#xff0c;记一次MySQL数据库文件损坏恢复经历这是工作7年来出的最大一次事故&#xff0c;去年给自己定的一个目标今年写12篇有质量的文章反馈给互联网&#xff0c;都快过半年了一篇还没有写&#xff0c;没想到第一篇竟然是以这种方式书写的。 不知道这篇算…...

全城wifi 为贵阳搭数据之桥

如果说地下的光缆是水管&#xff0c;那AP热点就是水龙头&#xff0c;全域免费WIFI的“开关”一打开&#xff0c;就能将有线的网络转化为无线的信号&#xff0c;供市民接入使用。数据光缆铺在脚下&#xff0c;AP热点发射器则挂在头顶。为防止损坏和保障信号强度&#xff0c;AP热…...

数据泄露将成为最大的网络攻击问题

日前&#xff0c;为用户提供虚拟数据中心、云数据中心和软件定义数据中心应用交付和网络安全解决方案的提供商Radware公司发现&#xff0c;黑客和企业都认同数据是有利可图的。Radware 2016-2017年全球应用及网络安全报告显示&#xff0c;49%的企业都认为网络勒索活动是2016年的…...

php 串行化数据,php中对象的串行化

我们大家有知道PHP串行化可以把变量包括对象&#xff0c;转化成连续bytes数据&#xff0c;你可以将串行化后的变量存在一个文件里或在网络上传输&#xff0c;然后再反串行化还原为原来的数据。文章这里就PHP串行化为大家详细的介绍。你在反串行化类的对象之前定义的类&#xff…...

栈与队列详解

目录申明1. 栈的定义1.1 栈的定义1.2 进栈出栈变化形式2. 栈的抽象数据类型3. 栈的顺序存储结构及实现3.1 栈的顺序存储结构3.2 栈的顺序存储结构——进栈操作3.3 栈的顺序存储结构——出栈操作4. 两栈共享空间5. 栈的链式存储结构及实现5.1 栈的链式存储结构5.2 栈的链式存储结…...

Redis基础 概念 数据类型 常用指令 Jedis 持久化

Redis基础 概念 数据类型 常用指令 Jedis 持久化1. Redis 简介1.1 NoSQL概念1.1.1 问题现象1.1.2 NoSQL的概念1.2 Redis概念1.2.1 redis概念1.2.2 redis的应用场景1.3 Redis 的下载与安装1.3.1 Redis 的下载与安装1.4 Redis服务器启动1.4.1 Redis服务器启动1.4.2 Redis客户端启…...

Android启动流程源码分析(基于Android S)

从上图我们可以清楚的看到Android系统的启动分为以下几个步骤 启动电源以及启动系统 当我们按下电源键时, 引导芯片代码开始从预定义的地方(固化在ROM)开始执行, 加载引导程序到RAM, 然后执行 引导程序 引导程序是在Android操作系统开始运行前的一个小程序. 引导程序是运行的…...

手机中的数据无法显示怎么恢复

手机中的数据无法显示怎么恢复最近这些天老板没在家&#xff0c;于是本来就只有我和朋友在上班的公司就更加的清闲了&#xff0c;我们两个也懒得清闲&#xff0c;趁着老大不在的时候就偷懒在家&#xff0c;因为工作一般都是在电脑上就可以完成的&#xff0c;其实在不在公司都是…...

Goslate-免费谷歌翻译项目(文章包括完整的设计,代码,开源,部署过程)

下面一位牛人的一个项目&#xff0c;项目不是很难&#xff0c;但是却包括了怎么设计&#xff0c;写文档&#xff0c;部署&#xff0c;值得学习&#xff0c;很完整的项目。 项目在https://bitbucket.org/zhuoqiang/goslate Goslate 免费谷歌翻译 起因使用原理优化设计开源 起因…...

[翻译] 在 Overleaf 中分享项目

原  文&#xff1a;Sharing a project 译  者&#xff1a;Xovee 翻译时间&#xff1a;2020年5月21日 在 Overleaf 中分享项目 Overleaf 的一个特色即是你可以轻松地与他人分享和协作你的项目。 链接分享 链接分享 允许项目拥有着使用一个秘密的链接来分享项目。任何拥有…...

QT技巧 - 如何让子项目的文件有翻译文件

#QT技巧 - 如何让子项目的文件有翻译文件 如需转载请标明出处&#xff1a;http://blog.csdn.net/itas109 QQ技术交流群&#xff1a;129518033 目录 文章目录#QT技巧 - 如何让子项目的文件有翻译文件[toc]环境&#xff1a; QT版本&#xff1a;5.6.2 编译器&#xff1a;VS2013…...

使用 TensorFlow 构建机器学习项目中文版·翻译完成

原文&#xff1a;Building Machine Learning Projects with TensorFlow 协议&#xff1a;CC BY-NC-SA 4.0 不要担心自己的形象&#xff0c;只关心如何实现目标。——《原则》&#xff0c;生活原则 2.3.c 在线阅读ApacheCN 面试求职交流群 724187166ApacheCN 学习资源 目录 使…...

请各位支持参加深度学习数据翻译开源项目

https://github.com/ExtremeMart/DeepLearningBook-CN 本项目是Ian Goodfellow 、 Yoshua Bengio 和Aaron Courville大神的Deep Learning Book的中文翻译开源项目&#xff0c;欢迎各位有志趣的人士加入&#xff01; 本人已翻译完成第一章&#xff0c;正在校对中&#xff0c;校…...

ooc翻译项目google code托管

ooc翻译项目已经在google code上创建项目托管&#xff0c;有兴趣的朋友可以参与进来。 版本控制工具使用TortoiseSVN&#xff0c;项目版本下载地址&#xff1a;https://ooc.googlecode.com/svn/trunk/...

可解释的机器学习翻译项目启动 | ApacheCN

原书&#xff1a;interpretable-ml-book 欢迎任何人参与和完善&#xff1a;一个人可以走的很快&#xff0c;但是一群人却可以走的更远。 ApacheCN 机器学习交流群 629470233ApacheCN 学习资源 目录 前言第一章 引言第二章 解释性第三章 数据集第四章 解释模型第五章 模型不可…...

在github上创建文档翻译项目,并与readthedocs、transifex整合的方法

一、概述 本文以创建Django最新LTS版本的文档简体中文翻译项目为例&#xff0c;描述了在github.com上创建文档翻译项目&#xff0c;并与readthedocs.org和transifex.com整合的方法。 操作流程主要分为三部分&#xff1a; 在github.com上创建一个文档翻译项目与transifex.com…...

项目管理心得(二)——翻译项目

书接上文。收集&#xff0c;确认需求是项目中最重要的环节之一&#xff0c;这次以翻译项目为例: 任务要求: 开发出一套&#xff0c;以计算机软件辅助“翻译的项目经理”进行项目成本控制和提高质量的软件。 要做好一件事&#xff0c;一个工作&#xff0c;就要养成一个好的工作习…...

小米手机fastboot模式出现Press any key to shutdown字样解决方法

Win10系统使用USB2.0接口&#xff0c;并复制以下命令到记事本另存为.bat文件&#xff0c;以管理员的身份运行即可解决。 echo off reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\usbflags\18D1D00D0100" /v "osvc" /t REG_BINARY /d &quo…...

Delphi 工厂模式

RAD Studio 10.2.3 测试√ 运行结果&#xff1a; 使用方法&#xff1a; procedure TDesignPattern.Button_FactoryPatternClick(Sender: TObject); varmBigBoss: TBigBoss;mFactory: IFactoryMgr; beginmBigBoss : TBigBoss.Create;mFactory : mBigBoss.GetFactory(小米手机);…...

尚硅谷设计模式学习(八)桥接模式

以手机操作问题引入桥接模式 现在对不同手机类型的不同品牌实现操作编程(比如:开机、关机、上网&#xff0c;打电话等)&#xff0c;如图: 传统思路分析 传统方案解决手机操作问题分析 1&#xff09;扩展性问题(类爆炸)&#xff0c;如果我们再增加手机的样式(旋转式)&#xff…...

python设计模式-创建型模式

简单工厂模式 简单工厂模式&#xff08;Factory Pattern&#xff09; 提供了一种创建对象的最佳方式。我们希望有一个工厂可以创造不同类型的对象&#xff0c;调用者在创建对象时&#xff0c;只需要指定其名字即可获取一个相应的对象&#xff0c;从而隐藏调用者无需关注的对象创…...

golang设计模式——桥接模式

桥接模式 目录桥接模式UML类图&#xff1a;使用场景代码实现总结实例代码单元测试桥接模式并不常用&#xff0c;而且桥接模式的概念比较抽象。桥接模式一般用于有多种分类的情况&#xff0c;如果实现系统可能有多角度分类&#xff0c;每一种分类都有可能变化&#xff0c;那么就…...

《和声学教程》学习笔记(三):六和弦和经过/辅助的六四和弦

六和弦的重复音及排列法 1. 重复音 重复根音或五音&#xff0c;最好不重复三音如果在自己的三和弦之后&#xff0c;则可以重复三音 2. 排列法 不仅有密集的和开放的&#xff0c;还有混合的&#xff08;一对音程密集排列&#xff0c;另一对开放位置&#xff09; 六和弦与三…...

C++ 工厂模式 类模板实现

文章目录1.简单工厂模式2.工厂方法模式3.抽象工厂模式4.模板类实现工厂模式工厂模式正如其名字一样&#xff0c;用于产生对象的&#xff0c;往往是用于代替new&#xff0c;特别是在多态继承体系中&#xff0c;利用工厂模式可以将对象的产生延迟到子类中实现&#xff0c;而我们只…...

设计模式(二)简单工厂模式

一般情况下&#xff0c;工厂模式分为三种更加细分的类型&#xff1a;简单工厂、工厂方法和抽象工厂。不过&#xff0c;在 GoF 的《设计模式》一书中&#xff0c;它将简单工厂模式看作是工厂方法模式的一种特例&#xff0c;所以工厂模式只被分成了工厂方法和抽象工厂两类。实际上…...

设计模式:工厂模式

文章目录前言一、工厂模式的分类二、简单工厂模式1.组成2.相关代码抽象产品类具体产品类&#xff1a;工厂类测试类运行结果三、工厂方法模式1.组成2.相关代码抽象产品类具体产品类&#xff1a;抽象工厂类具体工厂类四、抽象工厂模式1.组成2.相关代码抽象产品类具体产品类抽象工…...

雷军“小米模式”最精简总结

雷军给陈年了总结了小米十条经验&#xff0c;当我们得到这份简短文本时&#xff0c;也发现这的确是目前对“小米模式”最精简的详细描述&#xff1a;一。大市场。做一个产品需要有足够大的市场。二。单品。做单品&#xff0c;而不是做品类。三。制高点。态度要足够的好&#xf…...

华为机试题:HJ11 数字颠倒(python)

文章目录知识点详解1、input()&#xff1a;获取控制台&#xff08;任意形式&#xff09;的输入。输出均为字符串类型。2、print() &#xff1a;打印输出。描述&#xff1a;输入一个整数&#xff0c;将这个整数以字符串的形式逆序输出。程序不考虑负数的情况&#xff0c;若数字含…...

中科院一博士论文爆红刷屏!“炸”出了一批同行者,刚刚本人回应:祝愿大家努力终有所成!

点击“开发者技术前线”&#xff0c;选择“星标????” 让一部分开发者看到未来来自&#xff1a;量子位 报道 “理想不伟大&#xff0c;只愿年过半百&#xff0c;归来仍是少年&#xff0c;希望还有机会重新认识这个世界&#xff0c;不辜负这一生吃过的苦。最后如果还能做出点…...

【论文阅读】关键点检测——3FabRec: Fast Few-shot Face alignment by Reconstruction

3FabRec: Fast Few-shot Face alignment by Reconstruction数据集总览人脸关键点检测存在的挑战1. Introduction2. Related WorkHeatmapSSIM损失3. Methods3.1. Our approach3.2. Unsupervised face representation3.3. Supervised landmark discovery3.3.1 Interleaved transf…...

全解卷积神经网络,并分享9篇必读论文

转自公众号&#xff1a;大数据挖掘DT数据分析本文共18000字&#xff0c;建议阅读18分钟。本文为你介绍CNN整体系统架构及算法&#xff0c;并为你分享9篇必读论文。Introduction卷积神经网络CNN&#xff0c;虽然它听起来就像是生物学、数学和计算机的奇怪混杂产物&#xff0c;但…...

论计算机在教学中的作用论文,计算机在教学中的应用

海量优秀的免费计算机在教学中的应用范文供您参考与下载&#xff0c;关于计算机在教学中的应用的免费论文范文参考资料是由2016年最新的相关论文题目按照标准论文格式模板写作的,适合不知道怎么写计算机在教学中的应用的大学毕业生,对相关的本科论文和硕士毕业论文及职称论文发…...

mysql修改学生身高_身高预测: 男性成人身高 = (父亲身高 + 母亲身高) *0.54cm 女性成人身高 = (父亲身高 *0.923+ 母亲身高) /2cm 如果喜爱体育锻炼,那么身高可增加

【多选题】下列哪几项可能不是学术论文?【简答题】1.对某玉米品种大斑病发病率进行调查,1000株中有大斑病的株数为20株。若从中随机抽取4株,至少有2株为大斑病的概率为多少?【多选题】下列哪些可能是学术论文选题?【单选题】下列函数中,能获取当前系统日期和时间的函数是( )…...

深度学习论文推荐

Introduction卷积神经网络CNN&#xff0c;虽然它听起来就像是生物学、数学和计算机的奇怪混杂产物&#xff0c;但在近些年的机器视觉领域&#xff0c;它是最具影响力的创新结果。随着Alex Krizhevsky开始使用神经网络&#xff0c;将分类错误率由26%降到15%并赢得2012年度ImageN…...

深度学习9篇论文

Introduction卷积神经网络CNN&#xff0c;虽然它听起来就像是生物学、数学和计算机的奇怪混杂产物&#xff0c;但在近些年的机器视觉领域&#xff0c;它是最具影响力的创新结果。随着Alex Krizhevsky开始使用神经网络&#xff0c;将分类错误率由26%降到15%并赢得2012年度ImageN…...

GitHub上标星129K的Java教程,全程高能,只讲重点

前言 每天日常摸鱼的时候在GitHub上发现了这个129K的Java教程。 它涵盖了Java的所有知识点&#xff0c;包括Java语法、Java集合框架、Java IO、Java并发编程和Java虚拟机。 不多&#xff0c;但只讲重点。 为了帮助大家更好地学习&#xff0c;我们现在免费与您分享这些信息。 需…...

Github标星51K 阿里P8熬了700个小时,终于肝出32W字Java面试手册

前言 现在整个社会的情绪都很down&#xff0c;各界都在裁员&#xff0c;尤其是互联网行业&#xff0c;可是焦虑解决不了任何问题&#xff0c;但是学习可以。我一位朋友&#xff0c;受到到互联网寒冬的影响&#xff0c;在11月份&#xff0c;被无情裁员&#xff0c;之前他听到一些…...

在Github上标星超过53K+ 全网最全SpringBoot实战项目教程

今天给大家推荐一个Github上面超火的SpringBoot实战电商项目mall&#xff0c;目前在Github上面已经有35kStar。该项目拥有全套教程&#xff0c;对学习者特别友好。全套教程的获取方式已经放在文末&#xff01; mall 简介 mall项目是一套电商系统&#xff0c;包括前台商城系统…...

Github已标星80,java语言自学教程

Java集合 多线程 JVM 计算机基础 计算机网络 数据结构 算法 操作系统 数据库面试题总结 MySQL Redis 常用框架面试题总结 Spring面试题总结 ![github上标星70.5k&#xff0c;贼火的Java突击手册&#xff0c;全面详细对标阿里P7](https://img-blog.csdnimg.cn/img_convert/1ab…...

GitHub 上标星 115k+ 的 Java 教程

额&#xff0c;大家好啊&#xff0c;我是浑元形意门的学员小二哥&#xff08;忍住别笑&#xff09;。就在五个半小时前&#xff0c;有个小伙伴私信我说&#xff0c;“哥&#xff0c;能推荐一些高质量的 Java 教程吗&#xff1f;”我回他&#xff0c;“教妹学 Java 不香吗&#…...

推荐标星 100 K 的 GitHub 开源项目

推荐标星 100 K 的 GitHub 开源项目 原文见&#xff1a;推荐 10 个标星 100 K 的 GitHub 开源项目 以下摘录部分&#xff1a; Build Your Own X (GitHub Star&#xff1a;102,000)&#xff1a;汇集了诸多优质资源教你构建属于自己的东西&#xff0c;主要分为增强现实、区块链…...

GitHub标星3.9k全网最新核心识别系统,太爆了!!

若依是一套全部开源的快速开发平台&#xff0c;毫无保留给个人及企业免费使用。 前端采用Vue、Element UI。 后端采用Spring Boot、Spring Security、Redis & Jwt。 权限认证使用Jwt&#xff0c;支持多终端认证系统。 支持加载动态权限菜单&#xff0c;多方式轻松权限控…...

火爆 Github,这几个标星 10W+的前端学习项目真牛

前言 在这个框架和库流行泛滥的时代&#xff0c;开发中更多时候我们都会使用它们来提高效率&#xff01; 但是&#xff0c;前端三剑客 HTML CSS JavaScript 依旧是我们开发中不可缺少的一部分&#xff0c;如果你想学习前端知识或者想巩固基础知识&#xff0c;下面这几个学习…...

如何做到注册不到三年Github标星47.1k+(几点经验)

差不多三年前&#xff0c;我注册了 Github&#xff0c;现在一共收获了约 47100star&#xff08;赞&#xff09;&#xff0c;排名个人用户61。今天&#xff0c;我介绍下怎么样让自己的Github仓库获得更多的star。&#xff08;作者&#xff1a;黄海广&#xff09;0.导语 我的Gith…...

爆赞,GitHub上首本IntelliJ IDEA操作手册,标星果然百万名不虚传

还记得刚开始工作的时候使用的是Eclipse&#xff0c;后面是当时公司第一批尝鲜IDEA的人。刚开始用起来其实蛮麻烦的&#xff0c;因为最开始还是带着Eclipse的思维。 比如在Eclipse中一个workspace中可以有多个project&#xff0c;但是在IDEA中就没有workspace的概念了&#xf…...

GitHub 标星 5.9K+!1250 个运维工程师面试问题,看这个开源项目就够了!

大家好&#xff0c;我是 JackTian。 之前给大家分享了一篇《适合程序员的精选面试题清单》这份面试题清单主要包括内容&#xff1a;编程语言/框架/平台、数据库技术、缓存技术、操作系统、数据结构与算法、区块链、编码练习、综合清单、设计模式、网路、安全、数据科学等&…...

不愧是 GitHub 上标星 130K 的手册,内容不多,只讲重点

今天日常摸鱼的时候在 GitHub 上发现了这份标星 130K 的 软件测试 手册 内容涉及&#xff1a;测试理论、Linux基础、MySQL基础、Web测试、接口测试、App测试、管理工具、Python基础、Selenium相关、性能测试、LordRunner相关等 内容不多&#xff0c;只讲重点。 为了帮助大家更…...

是什么可以在Github上标星86.4K,揭秘蚂蚁金服开源的Springboot项目笔记

前言 Spring的影响力想必就不用小编多说了&#xff0c;今天要跟大家说的是SpringBoot。 Spring Boot作为目前Spring技术体系中炙手可热的框架之一&#xff0c;已经是开发者们的必备神器了。在实际的项目中&#xff0c;需要集成各种的插件支持&#xff0c;还有很多或许我们平时不…...

刚刚从GitHub 上扒下来,标星 75k,超牛的《Java面试突击版》,这么高标星果真有原因的

前言 不论是校招还是社招都避免不了各种面试。笔试&#xff0c;如何去准备这些东西就显得格外重要。不论是笔试还是面试都是有章可循的&#xff0c;我这个有章可循‘说的意思只是说应对技术面试是可以提前准备。 运筹帷幄之后&#xff0c;决胜千里之外!不打毫无准备的仗,我觉得…...

GitHub标星 10k+ 的后台管理系统

其实项目网上有很多了&#xff0c;但是教程比较详细的没多少&#xff0c;今天分享的项目从安装部署到代码具体功能都有很详细都说明。 eladmin 是一款基于 Spring Boot 2.1.0 、 Jpa、 Spring Security、redis、Vue 的前后端分离的后台管理系统&#xff0c;项目采用分模块开发…...

“阿里味” PUA 编程语言火上GitHub热榜,标星2.7K!

从程序员code到产品经理PPT的生态闭环&#xff0c;终于打通了。如果编程语言里都是“赋能”、“反哺”、“抓手”&#xff0c;会是啥样&#xff1f;我们不妨先来写个程序看看&#xff1a;怎么样&#xff0c;你看懂了吗&#xff1f;这段程序可不是乱写的&#xff0c;定义函数、条…...

盘点 GitHub 那些标星超过 20 K 的 Golang 优质开源项目

前言 Golang 作为一门还在快速成长的编程语言&#xff0c;想要与时俱进&#xff0c;还得多看看这几个开源项目。 听说你想学习 Go 语言&#xff0c;那我就来总结一下&#xff1a;那些目前我所了解的优质 Golang 开源项目。 Go 自己 学习 Go 语言&#xff0c;可别忘记了 Go 本身…...

GitHub 标星 6

序列化工具 Google 内部&#xff1a;Protocol Buffer&#xff1b; 外部替代品&#xff1a;Protobuf、Thrift、Avro 这一组工具用于结构化数据序列化&#xff0c;上面这些&#xff0c;都是 xml 替代品&#xff0c;比它更小、更快、也更简单。 Protocol Buffer 和 Protobuf 都…...

Github标星4.8K!微软开源的可视化工具,未免太酷炫了吧

点击 机器学习算法与Python学习 &#xff0c;选择加星标精彩内容不迷路开源最前线&#xff08;ID&#xff1a;OpenSourceTop&#xff09;链接&#xff1a;https://visualstudiomagazine.com/articles/2019/10/14/sanddance.aspx今天和大家分享一个由微软开源的可视化工具——Sa…...

WuThreat身份安全云-TVD每日漏洞情报-2023-03-23

漏洞名称:Windows Installer 特权提升漏洞 漏洞级别:高危 漏洞编号:CVE-2023-21800,CNNVD-202302-1117 相关涉及:Windows Server 2008 R2 for x64-based Systems Service Pack 1 (Server Core installation) 漏洞状态:POC 参考链接:https://tvd.wuthreat.com/#/listDetail?TVD…...

gan实战(DCGAN、)

一、DCGAN 1.1 参数 &#xff08;1&#xff09;输入&#xff1a;会被放缩到6464 &#xff08;2&#xff09;输出&#xff1a;6464 &#xff08;3&#xff09;数据集&#xff1a; 1.2 实现 import glob import torch from PIL import Image from torch import nn from torch.u…...

视频编辑场景下的文字模版技术方案

作者 | Lok’tar ogar 导读 本文根据度咔剪辑APP文字模版开发实践&#xff0c;分享视频编辑场景下&#xff0c;静态文字模版渲染能力的技术方案。作为富文本渲染方案的父集&#xff0c;此技术方案可以扩展到其他需要复杂富文本渲染的场景下。 全文6745字&#xff0c;预计阅读时…...

移动应用架构设计:如何转变开发流程

移动应用架构设计&#xff1a;如何转变开发流程 2023 年掌握移动应用程序架构的指南&#xff08;附案例研究&#xff09; 如果他们要解决这个问题&#xff0c;开发人员需要了解移动架构设计的最佳实践&#xff0c;使他们能够构建用户喜欢的优化应用程序。其中一些做法包括使用…...

【服务器数据恢复】误操作导致NetApp存储卷丢失的数据恢复案例

服务器数据恢复环境&#xff1a; 某公司的一台NetApp某型号存储&#xff1b; 几十块磁盘组建两组存储池&#xff0c;两组存储池互为镜像&#xff1b; 存储池划分卷并映射到ESXI作为数据存储使用&#xff0c;卷内有数百台虚拟机。 服务器故障&#xff1a; 管理员操作失误导致卷…...

QML- QML视觉元素类型

QML视觉元素类型一、概述一、图像类型三、共享视觉属性1. 不透明度和可见性2. 转换&#xff08;转置&#xff09;一、概述 对于最基本的视觉效果&#xff0c;Qt Quick提供了一个 Rectangle 类型来绘制矩形。这些矩形可以用颜色或垂直渐变来着色。 Rectangle 还可以在矩形上绘制…...

nodejs+vue+elementui水果购物商城vue

水果购物商城系统的主要使用者分为管理员&#xff1b;个人中心、用户管理、水果分类管理、水果信息管理、系统管理、订单管理&#xff1b;前台首页&#xff1b;首页、水果信息、个人中心、后台管理、购物车、人工服务&#xff1b;用户后台&#xff1b;首页、个人中心、水果信息…...

从NVIDIA GTC大会,看AI算力行业信号

从NVIDIA GTC 2023这场全球行业盛宴&#xff0c;我们可以解读出AI算力行业的哪些重要信号&#xff1f;一年一度的NVIDIA GTC如期而至汇聚了全球AI与元宇宙开发者的目光焦点&#xff0c;NVIDIA GTC 2023于美国当地时间3月20日如期而至。众所周知&#xff0c;作为全球一年一度的行…...

Docker 在未来应用场景的有哪些?

Docker是一种流行的容器化技术&#xff0c;可以将应用程序和其依赖项打包到一个可移植的容器中&#xff0c;使得应用程序可以在任何平台上运行。Docker的应用场景非常广泛&#xff0c;下面列举了一些常见的应用场景&#xff1a; 应用程序部署和管理&#xff1a;Docker可以使应…...

部署+使用集群的算力跑CPU密集型任务

我先在开头做一个总结&#xff0c;表达我最终要做的事情和最终环境是如何的&#xff0c;然后我会一步步说明我是如何搭建。 要做的事情 尝试如何使用多台机器的算力共同跑一个CPU密集型或者GPU密集型的任务。这里以CPU密集型为例子。 在多台机器搭建MPI环境&#xff0c;构建…...

MATLAB算法实战应用案例精讲-【智能优化算法】森林优化算法(FOA) (附MATLAB代码实现)

目录 前言 算法原理 算法思想 (一)树的初始化 (二)局部播种...

后端接口返回近万条数据,前端渲染缓慢,content Download 时间长的优化方案

前言 性能优化&#xff0c;是前端绕过不去的一道门槛&#xff0c;甚是重要。最近一年&#xff0c;也很少有机会在项目中进行前端性能优化&#xff0c;一直在忙于业务开发。 最近终于是来了机会&#xff0c;遇到了这样的场景&#xff0c;心里也甚是激动&#xff0c;写个随笔记…...

三天吃透MongoDB面试八股文

本文已经收录到Github仓库&#xff0c;该仓库包含计算机基础、Java基础、多线程、JVM、数据库、Redis、Spring、Mybatis、SpringMVC、SpringBoot、分布式、微服务、设计模式、架构、校招社招分享等核心知识点&#xff0c;欢迎star~ Github地址&#xff1a;https://github.com/…...

游戏服务器开发指南(一):设置合适的Socket选项

前言 上周写完系列序言&#xff0c;得到不少读者朋友的关注&#xff0c;这也给了我额外的动力。写东西就是这样&#xff0c;都希望获得更多的关注&#xff0c;如果写出来没什么人看&#xff0c;那就无异于闭门造车、自娱自乐。欢迎朋友们在文后留言&#xff0c;我也会根据大家…...

为什么电路板上的线路总是弯曲的?

不知道小伙伴有没有发现&#xff0c;电路板上的线路虽然密密麻麻&#xff0c;但线路总是弯曲延伸而不是直径到达&#xff0c;毕竟学过小学数学都知道&#xff1a;两点之间直线最短&#xff0c;所以为什么要花那么多线路来设计PCB板&#xff1f;难道不能直接设计成直线。小伙伴们…...

计算机网络(第十三弹) --- ARP 协议及子网掩码的相关概念

ARP 协议及子网掩码1 ARP 协议2 子网掩码1 ARP 协议 ARP 协议就是介于数据链路层和网络层之间的协议; 建立了主机 IP 协议和 MAC 地址的映射关系. 在网络通讯时, 源主机的应用程序知道目的主机的 IP 地址和端口号, 却不知道目的主机的硬件地址, 数据报首先是被网卡接收到再去处…...

Tlsr8258开发-小问题汇总

默认情况如果不指定时钟源&#xff0c;则使用外部晶振&#xff0c;并且默认为16M如果想要在一开始就调用读取flash的函数&#xff0c;一定要先cpu_wakeup_init()&#xff1b; delay_us(150)。我这里是通过读取flash中的值&#xff0c;然后来选择初始化BLE还是2.4G如果想要在BLE…...

python 基础系列篇:四、编写两个简单的小游戏(猜数字及2048)

python 基础系列篇&#xff1a;四、编写两个简单的小游戏&#xff08;猜数字及2048&#xff09;猜数字游戏游戏进程示例需求分析并逐步实现1、使用随机函数包 random2、记录用户输入3、提前做好的结果反馈4、判定A的实现5、判定B的范围6、判定B的判定内容7、判定B的实现8、用户…...

网络安全——网络层安全协议

作者简介&#xff1a;一名云计算网络运维人员、每天分享网络与运维的技术与干货。 座右铭&#xff1a;低头赶路&#xff0c;敬事如仪 个人主页&#xff1a;网络豆的主页​​​​​​ 目录 前言 引言 一.网络攻击与防御 1.常见的网络攻击 &#xff08;1&#xff09;窃听…...

8种特“坑”的 SQL 写法,性能降低100倍

给大家分享几个SQL常见的“坏毛病”及优化技巧。 SQL语句的执行顺序&#xff1a; 1、LIMIT 语句 分页查询是最常用的场景之一&#xff0c;但也通常也是最容易出问题的地方。比如对于下面简单的语句&#xff0c;一般 DBA 想到的办法是在 type、 name、 create_time 字段上加组…...

用c++手写一个带箭头的线

根据经纬度&#xff0c;和uv。算出开始点位和结束点位&#xff0c;并在结束点位画一个小箭头。根据需要调整0.2和0.8以及箭头的headSize 。 #include <iostream> #include <vector> #include <cmath> #include "matplotlibcpp.h" namespace plt …...

JVM-Java虚拟机(二)

执行引擎概述1.执行引擎是 Java 虚拟机核心的组成部分之一。2.JVM 的主要任务是负责装载字节码到其内部&#xff0c;但字节码并不能够直接运行在操作系统之上&#xff0c;因为字节码指令并非等价于本地机器指令&#xff0c;它内部包含的仅仅只是一些能够被 JVM 所识别的字节码指…...

Golang中的边界检查和边界检查消除(bounds check elimination)

边界检查大家都知道Golang是内存安全型语言&#xff0c;在根据索引获取数组/切片元素时&#xff0c;Golang runtime 会检查索引是否超出范围&#xff0c;如果索引超出了范围&#xff0c;程序就会 panic&#xff0c;这种机制叫做边界检查&#xff08;bounds check&#xff09;。…...

发现一个不错的golang框架,文档非常详细,自带代码生产dao工具,可以快速的进行项目开发,还有社区也是非常的活跃

目录前言1&#xff0c;关于goframe框架介绍2&#xff0c;创建Dao代码3&#xff0c;测试Dao的方法4&#xff0c;总结前言 本文的原文连接是: https://blog.csdn.net/freewebsys/article/details/129698017 未经博主允许不得转载。 博主CSDN地址是&#xff1a;https://blog.csdn…...

使用Python开启局域网传送数据(3):使用 simple_http_server 实现上传下载功能

&#x1f4a1;温馨提示&#xff1a;本文测试环境&#xff1a;windows11 64位、Python3.9。 摘要&#xff1a;本文将介绍在 Windows 系统中如何使用 Python 的第三方模块 simple_http_server 实现在局域网中传送数据&#xff0c;仅限于别人上传文件给自己的功能&#xff0c;不具…...

Flink 第1章 基础介绍和特性

一 Flink概念 1.1 Flink的概念 Flink是一个框架和分布式处理引擎&#xff0c;用于对无界和有解数据流进行状态计算。如下图所示&#xff1a; 1.2 Flink的应用场景 1.3 Flink的目标 1.高吞吐量 2.低延迟 3&#xff0c;结果的准确性和良好的容错性。 1.4 Flink与spark的区别…...

JavaScript查找数组内的元素的方法 filter() find includes findIndex lastIndexOf indexOf

需求&#xff1a;查找数组内元素6是否存在 let arr [1, 3, 6, 5, 7, 6]; 方法1、indexOf方法 let index1 arr.indexOf(6); console.log(index1);//2方法2、lastIndexOf方法 从右至左查找&#xff0c;找到返回索引&#xff0c;找不到返回-1 let index2 arr.lastIndexOf(6)…...

mybatis-plus的批量新增insertBatchSomeColumn

MyBatis-Plus 是基于 MyBatis 进行封装的一套优秀的持久层框架&#xff0c;它提供了丰富的便捷操作方法和强大的代码生成器&#xff0c;大大简化了 MyBatis 的使用。在 MyBatis-Plus 中&#xff0c;我们可以使用 insertBatchSomeColumn 方法来实现批量新增指定字段的操作。 myb…...

2023-第十四届蓝桥杯冲刺计划!

&#x1f4ac;前言 &#x1f4a1;本文以目录形式列举大纲,可根据题目点击跳转 &#x1f308;冲刺阶段目的&#xff1a;把握高频重点,结合基础算法和常考题型总结,用真题进行模拟练习 根据自己的能力熟练目前已掌握的算法&#xff0c;不会的还可以暴力 ⏳最后三个星期大家一起冲…...

通过Linux串口实现树莓派与电脑通信

目录 一 串口说明 二 USB—TTL模块 ● usb-ttl模块接口 三 串口通信常用的API 四 修改串口的配置文件 五 串口通信代码验证 ● 发送一个字符/字符串到串口 ● 树莓读取串口数据&#xff08;字符&#xff09; ● 代码拓展&#xff08;双方&#xff09; 一 串口…...

「解析」Linux使用Screen挂起线程

之前一直使用 nohup进行挂起&#xff0c;但是在进行训练的时候发现通过Pyhton脚本调用的时候虽然可以挂起&#xff0c;但是貌似没办法真正的执行命令&#xff0c;目前还不知道具体什么原因造成的&#xff0c;因此更加推荐 screen 进行挂起&#xff0c;并且 screen 还可以跨设备…...

【Unity 手写PBR】Build-in管线:实现直接光部分

写在前面 前期积累&#xff1a; GAMES101作业7提高-实现微表面模型你需要了解的知识 【技术美术图形部分】PBR直接光部分&#xff1a;Disney原则的BRDF和次表面散射模型 【技术美术图形部分】PBR全局光照&#xff1a;理论知识补充 算是对光照模型计算的查漏补缺吧&#xff…...

Java Druid,反射,反射封装DBUtil

零、 复习昨日SQL注入预处理语句String sql "select * from user where id ?"; PreparedStatement ps conn.preparedStatement(sql); ps.setInt(1,id); // ps.setDate(1,new java.sql.Date(user.getDate().getTime())) ps.executeQuery();DBUtil一、数据库连接池…...

5G-Advanced时代,移动终端将迎来哪些新特性?

去年6月&#xff0c;3GPP R17版本正式冻结&#xff0c;标志着5G第一阶段的技术研究基本完成。接下来&#xff0c;5G将迈入以R18、R19、R20为代表的第二阶段&#xff0c;开启后半段的征程。这个后半段&#xff0c;3GPP将其定义为5G-Advanced阶段。回顾过去几年的5G发展&#xff…...

设计模式:单例设计模式总结

单例模式的概念 保证一个类在内存中的对象唯一性&#xff08;单个实例设计模式&#xff09; 应用场景 单例模式一般用在对实例数量有严格要求的地方&#xff0c;比如数据池&#xff0c;线程池&#xff0c;缓存&#xff0c;session回话等等。数据库连接池的设计一般也是采用单…...

Applications of fractional calculus in computer vision: A survey

Abstract 分数阶微积分是一种抽象的概念&#xff0c;探索了具有非整数阶微分的解释。很长一段时间以来&#xff0c;它被认为是一个纯理论问题。然而&#xff0c;引入了几个有用的分数阶导数定义&#xff0c;扩展了其应用范围。在计算能力和算法表示的支持下&#xff0c;分数阶…...

报名开启 | 共赴一场 Flutter 的春日宴

2023 年 1 月 25 日&#xff0c;Flutter Forward 大会在肯尼亚首都内罗毕成功举办&#xff0c;吸引了全球范围内开发者广泛的关注和反馈。为了扩大 Flutter Forward 活动在全球的影响力&#xff0c;并以中国本地语言回顾最新的 Flutter 相关发布&#xff0c;谷歌开发者社区 (GD…...

JVM知识整理

JVM知识整理 JVM的主要组成部分 JVM包含两个两个子系统&#xff08;类加载子系统和执行引擎&#xff09;和两个组件&#xff08;运行时数据区与和本地库接口&#xff09; 类加载子系统&#xff1a;根据给定的全限定类名来加载class文件到运行时数据区域中的方法区。执行引擎&a…...

iptables-ipset仅允许国内访问---端口白名单

前言&#xff1a;境外肉鸡攻击有点多&#xff0c;并业务无境外访问需求&#xff0c;IDC机房网络防火墙无法实现8K多条的china大陆地址导入&#xff1b;为实现仅china大陆地址访问&#xff0c;在业务端口如这里的80&#xff0c;使用iptables防火墙ipset过滤实现访问控制,对于访问…...

Docker安装记录

一、安装过程 1.安装Docker Engine arm64 推荐使用官网安装中的Install from a package docker官网安装Docker Engine Docker Engine&#xff08;arm64版本&#xff09;的相关deb包下载地址 amd64 卸载系统自带的旧版本 sudo apt-get remove docker docker-engine docke…...

聚观早报 | 拼多多驳斥Google的指控;80%美国人工作将被AI影响

今日要闻&#xff1a;拼多多驳斥Google“恶意软件”的指控&#xff1b;80%美国人工作将被AI影响&#xff1b;iPhone 15 Pro设计图上热搜&#xff1b;贾扬清离职阿里投身AI大模型创业&#xff1b;OPPO Find X6 系列发布拼多多驳斥Google“恶意软件”的指控 3 月 21 日&#xff0…...

【Linux】autofs自动挂载

文章目录前言一、简介二、autofs安装与配置三、挂载效果验证四、总结前言 在Linux中&#xff0c;若要访问硬件资源&#xff0c;则需使用mount命令对其进行挂载&#xff08;或者写入/etc/fstab文件开机自动挂载&#xff09;&#xff0c;将硬件资源与本地目录相关联&#xff0c;…...

ModalForm的使用

一、ModalForm销毁配置了modalProps{{ destroyOnClose: true }}&#xff0c;弹框在隐藏时会销毁&#xff0c;同时清除原有数据。二、ModalForm编辑赋值首先发现有一个初始值赋值方法initialValue&#xff0c;但是使用后一直显示原来的值&#xff0c;这样就无法使用&#xff0c;…...

数据结构与算法——堆的基本存储

目录 一、概念及其介绍 二、适用说明 三、结构图示 四、Java 实例代码 五.堆和栈的区别 一、概念及其介绍 堆(Heap)是计算机科学中一类特殊的数据结构的统称。 堆通常是一个可以被看做一棵完全二叉树的数组对象。 堆满足下列性质&#xff1a; 堆中某个节点的值总是不大…...

yarn环境配置

一、安装node.js 1、在想安装的位置创建一个Node文件夹&#xff08;不要有空格&#xff09; 2、直接在官网下载进行安装 二、配置环境 1、在node.js安装目录下新建两个文件夹 node_global和node_cache 2、在C盘找到cmd.exe&#xff0c;以管理员身份运行 npm config set p…...

git 相关操作-提交代码步骤

https://blog.csdn.net/matrix_google/article/details/87988330 clone代码和切换分支 git clone -b v1.2 git192.168.3.198:qq/pp.gitgit checkout 分支名# git从远程仓库中拉取新的指定分支&#xff1a;若本地分支不存在的情况: git checkout -b 本地分支名称 origin/远程分…...

Windows IDEA 导入java maven项目

Windows 参考https://www.bilibili.com/video/av78474321/ 准备 java jdk1.8 安装教程配置环境变量 https://www.cnblogs.com/mr-wuxiansheng/p/6850437.html maven apache-maven-3.6.3 建议放在用户权限的位置&#xff0c;有修改内容&#xff0c;保证有权限修改配置环境…...

网络安全文章汇总导航(持续更新)

网络安全文章汇总导航&#xff08;持续更新&#xff09;1.基础篇&#xff08;已完结&#xff09;&#xff1a;2.工具篇&#xff08;持续更新&#xff09;&#xff1a;3.靶场安装&#xff08;持续更新&#xff0c;但不确定&#xff09;&#xff1a;4.权限提升&#xff08;持续更…...

基于深度学习的海洋动物检测系统(Python+YOLOv5+清新界面)

摘要&#xff1a;基于深度学习的海洋动物检测系统使用深度学习技术检测常见海洋动物&#xff0c;识别图片、视频和实时视频中的海洋动物&#xff0c;方便记录、展示和保存结果。本文详细介绍海洋动物检测系统&#xff0c;在介绍算法原理的同时&#xff0c;给出Python的实现代码…...

AIGC图像生成的原理综述与落地畅想

AIGC&#xff0c;这个当前的现象级词语。本文尝试从文生图的发展、对其当前主流的 Stable Diffusion 做一个综述。以下为实验按要求生成的不同场景、风格控制下的生成作品。概述▐ 技术演进一&#xff1a;昙花初现 GAN 家族GAN 系列算法开启了图片生成的新起点。GAN的主要灵感…...

三级数据库备考--数据库应用系统开发方法(二)(错题整理)

1.数据库应用系统设计包括概念设计、逻辑设计、物理设计3个步骤&#xff0c;每个步骤的设计活动按照数据组织与存储、数据访问与处理、应用设计等几个方面进行。在数据库概念设计阶段&#xff0c;采用自下而上的 E-R 设计。将关系模式转换为具体 DBMS 平台支持的关系表是数据库…...

驯服奇特数字:java.text.DecimalFormat的神奇之力

前言我们在实际项目中可能会遇到各种奇特的数字格式。这些非常规的数字表现形式可能会在PPT演示、报表或其他文档中出现。对于研发人员而言&#xff0c;如果没有合适的数字格式化工具&#xff0c;处理这些数字可能会让你走很多弯路。今天&#xff0c;我们将介绍一款专门用于处理…...

2023年全国最新安全员精选真题及答案30

百分百题库提供安全员考试试题、建筑安全员考试预测题、建筑安全员ABC考试真题、安全员证考试题库等&#xff0c;提供在线做题刷题&#xff0c;在线模拟考试&#xff0c;助你考试轻松过关。 91.&#xff08;单选题&#xff09;根据《建筑施工企业安全生产管理规范》&#xff0c…...

浙江咪咕MGV3200_KLH_国科GK6323_2+8_免拆机卡刷固件包

浙江咪咕MGV3200_KLH_国科GK6323_28_免拆机卡刷固件包 特点&#xff1a; 1、适用于对应型号的电视盒子刷机&#xff1b; 2、开放原厂固件屏蔽的市场安装和u盘安装apk&#xff1b; 3、修改dns&#xff0c;三网通用&#xff1b; 4、大量精简内置的没用的软件&#xff0c;运行…...

【内网安全】 隧道搭建穿透上线FRPNPSSPPNgrokEW项目

文章目录内网穿透-Ngrok-入门-上线1、服务端配置&#xff1a;2、客户端连接服务端&#xff1a;3、客户端生成后门配置监听&#xff1a;内网穿透-Frp-简易型-上线1.服务端-下载-解压-修改-启动&#xff08;阿里云主机记得修改安全组配置出入口&#xff09;2.控制端-下载-解压-修…...

机器视觉检测技术在检测产品表面缺陷的应用

产品表面缺陷检测属于机器视觉技术的一种&#xff0c;就是利用机器视觉模拟人类视觉的功能&#xff0c;从具体的实物进行图像的采集处理、计算、最终进行实际检测、控制和应用。当今消费类电子产品的消费者们都期待开箱看到完美无瑕的产品。有划痕、凹凸不平和带有其他瑕疵的产…...

电子招标采购系统源码—企业战略布局下的采购

​ 智慧寻源 多策略、多场景寻源&#xff0c;多种看板让寻源过程全程可监控&#xff0c;根据不同采购场景&#xff0c;采取不同寻源策略&#xff0c; 实现采购寻源线上化管控&#xff1b;同时支持公域和私域寻源。 询价比价 全程线上询比价&#xff0c;信息公开透明&#xff0…...

UE4如何调用打开Windows窗口

游戏开发过程中&#xff0c;有时需要明显的提示游戏运行时出现的问题&#xff0c;比如配置错误等信息&#xff0c;不仅需要输出错误到日记文件&#xff0c;还需要明显的显示错误信息给到非程序人员看到。那么打开系统窗口提示就是一个非常好的选择。 案例1&#xff1a; //FTe…...

Golang每日一练(leetDay0013)

目录 37. 解数独 Sudoku Solver &#x1f31f;&#x1f31f;&#x1f31f; 38. 外观数列 Count and Say &#x1f31f;&#x1f31f; 39. 组合总和 Combination Sum &#x1f31f;&#x1f31f; &#x1f31f; 每日一练刷题专栏 &#x1f31f; Golang每日一练 专栏 Py…...

分布式数据 之 分区

文章目录1. 分区的目的/必要性2. 数据分区的方法2.1 按键的范围分区2.2 按键的散列分区2.3 数据倾斜和消除热点2.3.1 预分区2.3.2 动态分区3. 次级索引3.1 按文档的二级索引3.2 根据关键词的二级索引4. 分区再平衡4.1 固定数量的分区4.2 动态分区4.3 按节点比例分区5. 总结对于…...