day28 文件IO及进程线程基础
讨论光标共享情况
1.dup和dup2定义变量赋值都共享光标
2.使用两个描述符调用两次open函数打开同一个文件,不共享光标
#include <myhead.h>int main(int argc, const char *argv[])
{//1、描述符赋值给新的变量char buff[1024] = "abcdefg";int newfd;int fd1 = open("./1.txt",O_RDWR);if(fd1==-1){perror("open");return -1;}write(fd1,buff,sizeof(buff));newfd = fd1;//新的变量当作描述符被赋值lseek(newfd,3,SEEK_SET);//从文件开头移动3个字节read(fd1,buff,sizeof(buff));printf("%s\n",buff);memset(buff,0,sizeof(buff));//清空buff//2、两个描述符指向同一个文件char str[100] = "";int fd3,fd4;fd3 = open("./2.txt",O_RDWR);if(fd3==-1){perror("open");return -1;}fd4 = open("./2.txt",O_RDWR);if(fd4==-1){perror("open");return -1;}lseek(fd3,3,SEEK_SET);//fd3从文件开头移动3个字节read(fd4,str,sizeof(str));//读取fd4的光标printf("%s",str);//输出return 0;
}
stat
#include <sys/types.h>#include <sys/stat.h>#include <unistd.h>int stat(const char *pathname, struct stat *statbuf);功能:获取文件的详细信息参数1:文件路径和文件名参数2:获取到的文件信息存储地址。struct stat {dev_t st_dev; /* 设备号 */ino_t st_ino; /* Inode号 */mode_t st_mode; /*文件类型和权限 */nlink_t st_nlink; /* 硬链接数 */uid_t st_uid; /* 所有者ID */gid_t st_gid; /* 所有者组ID */dev_t st_rdev; /* 特殊文件的设备号 */off_t st_size; /* 最大容量按照字节存储 */blksize_t st_blksize; /* 每一块大小,按照字节 */blkcnt_t st_blocks; /* 块的数量 */返回值:成功返回0,失败返回-1,并置位错误码。
#include <myhead.h>int main(int argc, const char *argv[])
{struct stat sb;int res = stat("./09.c",&sb);//文件的信息存入sb结构体变量if(res==-1){perror("stat");return -1;}switch (sb.st_mode & S_IFMT) {case S_IFBLK: printf("block device\n"); break;case S_IFCHR: printf("character device\n"); break;case S_IFDIR: printf("directory\n"); break;case S_IFIFO: printf("FIFO/pipe\n"); break;case S_IFLNK: printf("symlink\n"); break;case S_IFREG: printf("regular file\n"); break;case S_IFSOCK: printf("socket\n"); break;default: printf("unknown?\n"); break;} return 0;
}
opendir和closedir
#include <sys/types.h>#include <dirent.h>DIR *opendir(const char *name);功能:打开文件目录,返回指向目录的指针。参数:目录路径和名字返回值:成功返回打开的目录指针,失败返回NULL,并置位错误码。int closedir(DIR *dirp);功能:关闭文件目录指针指向的文件。参数:opendir返回的指针。返回值:成功返回0,失败返回-1,并置位错误码。
readdir
#include <dirent.h>struct dirent *readdir(DIR *dirp);功能:读取目录里面的所有文件或者文件夹信息参数:目录指针返回值:成功返回目录指针指向的文件信息结构体,失败返回NULL,并置位错误码。struct dirent {ino_t d_ino; /* Inode number */off_t d_off; /* Not an offset; see below */unsigned short d_reclen; /* Length of this record */unsigned char d_type; /* Type of file; not supportedby all filesystem types */char d_name[256]; /* Null-terminated filename */};
#include <myhead.h>int main(int argc, const char *argv[])
{DIR *dir = opendir("/home/ubuntu/24101/IO/IO-1/");//打开一个文件夹if(dir==NULL){perror("opendir");return -1;}while(1){struct dirent *hangzhou = readdir(dir);//读取文件夹的内容if(hangzhou==NULL){perror("readdir");return -1;}printf("文件名:%s\n",hangzhou->d_name);switch(hangzhou->d_type)//输出文件的类型{case DT_BLK:printf("块设备文件\n");break;case DT_CHR:printf("字符设备文件\n");break;case DT_DIR:printf("目录文件\n");break;case DT_FIFO:printf("管道文件\n");break;case DT_REG:printf("普通文件\n");break;}}closedir(dir);//关闭文件夹 return 0;
}
进程(process)
程序的一次执行过程就是进程
1、进程概念:
时间片轮询 上下文切换。
1、进程1在3ms时间内运行结束,那么cpu会将进程1出队,继续询问进程2.
2、进程1需要8ms才能结束,那么cpu会在第5ms时将进程1,放入就绪队列尾部
3、进程1正好5ms运行结束cpu将进程1出队。
4、如果有外部优先级更高的事件打断进程1,进程1也会进入就绪队列等待。例如IO
2、进程内存管理
1、进程在创建时系统会从1G的物理内存中,通过mmu映射出4G的虚拟内存,其中0--3G的内存是所有进程的空间,进程间空间是独立的,但是3--4G的空间是内核空间,由所有进程共享。
2、注意在32位的操作系统中,1G物理内存映射出来4G虚拟内存,在64位的操作系统中,1G物理内存映射出来256T虚拟内存。
3、进程之间并不能直接进程数据交换,但是可以通过内核空间实现数据交换也就是进程间通信。
3、进程和程序区别
1、进程是动态的,随着程序的执行而创建,随着程序的结束而消亡。
2、程序是存储在内存的二进制文件,进程消亡程序并不会消失。
3、进程是动态,程序是静态。
4、进程种类
Linux系统中进程种类可以为三种:
1、交互进程,如vi编辑器,实现用户和主机之间的交流。
2、批处理进程,如gcc编译器的一步到位的编译,批处理进程将所有进程放入就绪队列,一次性全部运行结束。
3、守护进程,不受用户控制,不依赖于终端,随着系统的开启而开启,随着系统的关闭而消亡。
5、进程号
pid(process ID):当前进程的进程号。
ppid(parent process ID):父进程号。
每一个子进程都不会凭空产生,都由父进程创建而生(除了守护进程等伴随操作系统的特殊进程),
每一个子进程和其父进程都有自己的ID号,也就是进程号。
进入到该文件下:cd /proc/
可以查看操作系统中所有的进程号。
6、Linux下5个特殊进程
1、0号进程,又叫idel进程没有父进程,系统启动时创建的,维护系统运行,当系统内没有任何进程需要执行时运行0号进程,系统处于待机状态。
2、1号进程,又叫 init进程父进程就是0号进程,也被称为守护进程,当有子进程处于僵尸状态时,1号进程会为子进程收尸。
3、2号进程,又称为kthreadd进程,是调度进程,完成任务器各项任务的调度工作。
4、僵尸进程:父进程还在运行,但是子进程已经消亡,而父进程并没有回收子进程的资源,这时子进程就被称为僵尸进程。
5、孤儿进程:父进程已经消亡,但是子进程还在运行,此时子进程就被称为孤儿进程。
7、进程的shell指令(ps top kill pidof)
1、查看进程状态:ps -ajx
PPID PID PGID SID TTY TPGID STAT UID TIME COMMAND0 1 1 1 ? -1 Ss 0 0:03 /sbin/init splash0 2 0 0 ? -1 S 0 0:00 [kthreadd]2 3 0 0 ? -1 I< 0 0:00 [rcu_gp]2 4 0 0 ? -1 I< 0 0:00 [rcu_par_gp]2 5 0 0 ? -1 I 0 0:00 [kworker/0:0-cgr]2 6 0 0 ? -1 I< 0 0:00 [kworker/0:0H-kb]2 8 0 0 ? -1 I< 0 0:00 [mm_percpu_wq]2 9 0 0 ? -1 S 0 0:00 [ksoftirqd/0]2 10 0 0 ? -1 I 0 0:02 [rcu_sched]2 11 0 0 ? -1 S 0 0:00 [migration/0]2 12 0 0 ? -1 S 0 0:00 [idle_inject/0]2 14 0 0 ? -1 S 0 0:00 [cpuhp/0]2 15 0 0 ? -1 S 0 0:00 [kdevtmpfs]2 16 0 0 ? -1 I< 0 0:00 [netns]2 17 0 0 ? -1 S 0 0:00 [rcu_tasks_kthre]
PPID:父进程进程号
PID:当前进程的进程号
PGID:当前进程组的进程号
TTY:如果是?表示不依赖于任何终端而运行。
STAT:进程的状态(S:可中断的休眠态,+:前台运行状态)
TIME:进程执行的时间
COMMAND:进程的名称。
2、查看进程的CPU占用率 ps -aux
ubuntu@ubuntu:proc$ ps -aux USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 1 0.0 0.3 159804 7232 ? Ss 10:23 0:03 /sbin/init splash root 2 0.0 0.0 0 0 ? S 10:23 0:00 [kthreadd] root 3 0.0 0.0 0 0 ? I< 10:23 0:00 [rcu_gp] root 4 0.0 0.0 0 0 ? I< 10:23 0:00 [rcu_par_gp] root 5 0.0 0.0 0 0 ? I 10:23 0:00 [kworker/0:0-cgr] root 6 0.0 0.0 0 0 ? I< 10:23 0:00 [kworker/0:0H-kb] root 8 0.0 0.0 0 0 ? I< 10:23 0:00 [mm_percpu_wq] root 9 0.0 0.0 0 0 ? S 10:23 0:00 [ksoftirqd/0] root 10 0.0 0.0 0 0 ? I 10:23 0:02 [rcu_sched] root 11 0.0 0.0 0 0 ? S 10:23 0:00 [migration/0] root 12 0.0 0.0 0 0 ? S 10:23 0:00 [idle_inject/0] root 14 0.0 0.0 0 0 ? S 10:23 0:00 [cpuhp/0] root 15 0.0 0.0 0 0 ? S 10:23 0:00 [kdevtmpfs] root 16 0.0 0.0 0 0 ? I< 10:23 0:00 [netns] USER :当前用户 %CPU:CPU占用率 %MEM:内存占用率 START:创建时间
3、进程之间的树状关系 pstree
ubuntu@ubuntu:proc$ pstree
systemd─┬─ModemManager───2*[{ModemManager}]├─NetworkManager─┬─2*[dhclient]│ └─2*[{NetworkManager}]├─VGAuthService├─accounts-daemon───2*[{accounts-daemon}]├─acpid├─avahi-daemon───avahi-daemon├─bluetoothd
4、查看进程间的关系 ps -ef
ubuntu@ubuntu:proc$ ps -ef
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 10:23 ? 00:00:03 /sbin/init splash
root 2 0 0 10:23 ? 00:00:00 [kthreadd]
root 3 2 0 10:23 ? 00:00:00 [rcu_gp]
root 4 2 0 10:23 ? 00:00:00 [rcu_par_gp]
root 5 2 0 10:23 ? 00:00:00 [kworker/0:0-cgr]
root 6 2 0 10:23 ? 00:00:00 [kworker/0:0H-kb]
root 8 2 0 10:23 ? 00:00:00 [mm_percpu_wq]
root 9 2 0 10:23 ? 00:00:00 [ksoftirqd/0]
root 10 2 0 10:23 ? 00:00:02 [rcu_sched]
root 11 2 0 10:23 ? 00:00:00 [migration/0]
5、动态查看进程的状态 top
top - 14:13:35 up 3:50, 1 user, load average: 0.00, 0.01, 0.00
任务: 315 total, 1 running, 248 sleeping, 0 stopped, 0 zombie
%Cpu(s): 2.1 us, 2.1 sy, 0.0 ni, 95.8 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : 1987060 total, 130112 free, 1469492 used, 387456 buff/cache
KiB Swap: 969960 total, 874984 free, 94976 used. 331056 avail Mem 进程 USER PR NI VIRT RES SHR � %CPU %MEM TIME+ COMMAND 1649 ubuntu 20 0 600048 102164 28996 S 3.0 5.1 0:47.74 Xorg 1846 ubuntu 20 0 3041844 156168 41260 S 2.0 7.9 0:59.59 gnome-shell 2255 ubuntu 20 0 922236 75776 33960 S 1.7 3.8 0:38.26 x-terminal-emul 10 root 20 0 0 0 0 I 0.3 0.0 0:02.19 rcu_sched 647 avahi 20 0 47408 3244 2836 S 0.3 0.2 0:06.59 avahi-daemon 3455 root 20 0 0 0 0 I 0.3 0.0 0:08.05 kworker/0:2-eve 1 root 20 0 159804 7232 5244 S 0.0 0.4 0:03.49 systemd 2 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kthreadd 3 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 rcu_gp 4 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 rcu_par_gp 5 root 20 0 0 0 0 I 0.0 0.0 0:00.02 kworker/0:0-cgr 6 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 kworker/0:0H-kb 8 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 mm_percpu_wq 9 root 20 0 0 0 0 S 0.0 0.0 0:00.27 ksoftirqd/0 11 root rt 0 0 0 0 S 0.0 0.0 0:00.09 migration/0 12 root -51 0 0 0 0 S 0.0 0.0 0:00.00 idle_inject/0
8、向进程发送信号指令 kill
发送信号:kill -信号号 进程ID
8、进程状态和切换
1、进程创建后进入就绪队列
2、通过CPU的时间片轮询,处于运行态
3、如果被外部事件如IO,中断,会处于阻塞状态。
4、解除阻塞状态后,会重新进入到就绪队列。
5、直至运行结束处于消亡态。
9.进程的创建
fork函数
#include <sys/types.h>#include <unistd.h>pid_t fork(void);功能:创建子进程,子父进程空间独立,在父进程中返回值时子进程的ID,在子进程中返回值是0,创建子进程失败返回-1.参数:无返回值:在父进程中返回值时子进程的ID,在子进程中返回值是0,创建子进程失败返回-1。
创建子进程
#include <myhead.h>int main(int argc, const char *argv[])
{pid_t pid = fork();//创建子进程if(pid==0)//进入到子进程执行流{//子进程执行流printf("我是子进程\n");}else if(pid>0)//进入到父进程执行流{//进入到父进程执行流sleep(1);printf("我是父进程\n");printf("父进程中子进程的ID:%d\n",pid);}else{perror("fork");return -1;}printf("*************\n");//子父进程都会执行这行代码while(1);return 0;
}
写时拷贝技术
1、写时拷贝技术,当创建子进程后,子父进程空间在发生数据写操作时就独立。
2、子进程中对局部变量的操作不会影响到父进程,父进程中对局部变量的操作不会影响到子进程。
3、进程之间数据不共享。
1、讨论子父进程是否共享全局变量
fork之后子父进程独立运行,子进程拷贝了父进程的资源,所以子进程修改变量,不会影响到父进程内的变量。
#include <myhead.h>
int n = 100;
int main(int argc, const char *argv[])
{pid_t pid = fork();//创建子进程if(pid==0)//进入到子进程执行流{//子进程执行流n = n+1;printf("我是子进程 n= %d\n",n);}else if(pid>0)//进入到父进程执行流{//进入到父进程执行流sleep(1);printf("我是父进程n = %d\n",n);printf("父进程中子进程的ID:%d\n",pid);}else{perror("fork");return -1;}printf("*************\n");while(1);return 0;
}
局部变量不会共享
#include <myhead.h>
int main(int argc, const char *argv[])
{int n = 100;pid_t pid = fork();//创建子进程if(pid==0)//进入到子进程执行流{//子进程执行流n = n+1;printf("我是子进程 n= %d\n",n);}else if(pid>0)//进入到父进程执行流{//进入到父进程执行流sleep(1);printf("我是父进程n = %d\n",n);printf("父进程中子进程的ID:%d\n",pid);}else{perror("fork");return -1;}printf("*************\n");while(1);return 0;
}
作业
#include <luochen.h>
int main(int argc, const char *argv[])
{int fd1= open("./1.txt",O_RDONLY);int fd2= open("./2.txt",O_CREAT|O_TRUNC|O_WRONLY,0664);int fd3= open("./3.txt",O_RDONLY);int fd4= open("./4.txt",O_CREAT|O_TRUNC|O_WRONLY,0664);pid_t pid = fork();if(pid==0){if(-1==fd1){perror("open");return -1;}char buff[1024];while(1){int res = read(fd1,buff,sizeof(buff));if(res == 0){break;}write(fd2,buff,res);}}if(pid>0){if(-1==fd3){perror("open");return -1;}char buff[1024];while(1){int res = read(fd3,buff,sizeof(buff));if(res == 0){break;}write(fd4,buff,res);}}return 0;
}
#include <luochen.h>
int main(int argc, const char *argv[])
{ int fd =open("./1.txt",O_RDONLY);if(-1==fd){perror("open");return -1;}pid_t pid = fork();int len = lseek(fd,0,SEEK_END);int half = len/2;if(pid>0){//父进程lseek(fd,0,SEEK_SET);int fd1 = open("./5.txt",O_CREAT|O_TRUNC|O_WRONLY);char *buff = malloc(sizeof(char)*half);int res = read(fd,buff,half);write(fd1,buff,res);close(fd1);}if(pid == 0){//子进程lseek (fd,half,SEEK_SET);int fd2 = open("./6.txt",O_CREAT|O_TRUNC|O_WRONLY);char *buff = malloc(sizeof(char)*(len-half));int res = read(fd2,buff,len-half);close(fd2);}close(fd);return 0;
}
相关文章:
day28 文件IO及进程线程基础
讨论光标共享情况 1.dup和dup2定义变量赋值都共享光标 2.使用两个描述符调用两次open函数打开同一个文件,不共享光标 #include <myhead.h>int main(int argc, const char *argv[]) {//1、描述符赋值给新的变量char buff[1024] "abcdefg";int ne…...
【Azure 架构师学习笔记】- Azure Function (1) --环境搭建和背景介绍
本文属于【Azure 架构师学习笔记】系列。 本文属于【Azure Function 】系列。 前言 随着无服务计算的兴起和大数据环境中的数据集成需求, 需要使用某些轻量级的服务,来实现一些简单操作。因此Azure Function就成了微软云上的一个必不可少的组成部分。 …...
前端文件下载
这里写自定义目录标题 前端文件下载方法使用a标签使用iframe标签二进制流 前端文件下载方法 使用a标签 /*** 文件下载方法 使用a标签* 存在浏览器下载时,太快的话,会取消上次的下载请求* param {*} href* param {*} filename*/ export function downlo…...
前端成长之路:HTML(3)
在HTML中,有列表标签。列表最大的特点是整齐、简洁、有序,用列表进行布局会更加自由方便。根据使用的情景不同,可以将列表分为三大类:无序列表、有序列表和自定义列表。 无序列表 在HTML中使用<ul>标签定义一个无序列表&a…...
无人机自动机库的功能与作用!
一、无人机自动机库的功能 智能停放与管理 无人机自动机库为无人机提供了一个安全、可靠的停放环境。通过先进的感知技术和安全防护措施,它能够实时监测周围环境,确保无人机免受恶劣天气或潜在风险的侵害。 无人机在机库内可以实现智能停放࿰…...
ubuntu 新建脚本shell并增加图标 双击应用实现python运行
1.使用nano创建shell脚本文件 需要在终端窗口中输入“nano”以打开文本编辑器。 nano 在创建脚本文件前,我们要了解脚本文件是如何运行的: 直接运行:直接在终端直接输入需要运行的脚本文件名称,系统或用缺省版本的shell运行脚…...
ANR 分析SOP
遇到ANR问题不要慌,大部分情况下可能是系统or测试手段问题,我们按照如下关键字排查定位 文章目录 1 是否是 heapdump 导致?1.1 dump开始1.2 dump结束 1 是否是 heapdump 导致? 使用 hprof: heap dump 关键词过滤,在d…...
COLA学习之环境搭建(三)
小伙伴们,你们好,我是老寇,上一节,我们学习了COLA代码规范,继续跟老寇学习COLA环境搭建 首先,打开GitHub,搜索 COLA 请给这个COLA项目点个Star,养成好习惯,然后Fork到自…...
CSS输入框动态伸缩动效
前言 下面我们将会做出如下图输入框样式,并且附上组件代码,有特殊需求的可以自行优化同理,下拉框的话只要把el-input标签修改掉即可 MyInput组件 <template><div class"my-input" click.stop"showInput !showInput…...
hbuilder 安卓app手机调试中基座如何设置
app端使用基座 手机在线预览功能 1.点击运行 2.点击运行到手机或者模拟器 3.制作自定义调试基座 4.先生成证书【可以看我上一篇文档写的有】,点击打包 5.打包出android自定义调试基座【android_debug.apk】,【就跟app打包一样需要等个几分钟】 6.点击运行到手…...
探索视觉与语言模型的可扩展性
✨✨ 欢迎大家来访Srlua的博文(づ ̄3 ̄)づ╭❤~✨✨ 🌟🌟 欢迎各位亲爱的读者,感谢你们抽出宝贵的时间来阅读我的文章。 我是Srlua小谢,在这里我会分享我的知识和经验。&am…...
sock_recvmsg函数
sock_recvmsg 是一个在 Linux 内核中用于处理接收网络数据的函数。它通常与套接字 (socket) 操作相关,特别是在网络协议栈中用于处理从网络中接收到的数据。这个函数是内核的一部分,提供了一种机制把接收到的数据从网络协议栈转移到用户空间,或者在内核内进一步处理。 以下是…...
HCIA笔记8--DHCP、Telnet协议
1. DHCP介绍 对于主机的网络进行手动配置,在小规模的网络中还是可以运作的,但大规模网络是无力应对的。因此就有了DHCP协议来自动管理主机网络的配置。 DHCP(Dynamic Host Configuration Protocol): 动态主机配置协议,主要需要配置的参数有…...
Scala的单例对象
在Scala中,单例对象是一种特殊的类,它只能有一个实例,并且这个实例在需要时会自动创建。单例对象在Scala中通过object关键字来定义,它类似于Java中的静态成员和方法,但更加灵活和强大。 定义单例对象 以下是定义一个…...
【笔记】分布式任务调度平台XXL-JOB
这篇笔记主要记录以下内容: (1)第一次启动xxl-job的过程 (2)模块、文件、数据库(表和字段)的作用 (3)极少的源码解读(XxlJobConfig) 有点像实…...
PDFMathTranslate,PDF多语言翻译,批量处理,学术论文,双语对照(WIN/MAC)
分享一个非常实用的PDF文档翻译项目——PDFMathTranslate。作为一个经常逛GitHub的开发者,我总喜欢翻看各种项目附带的论文,虽然大多时候是瞎研究,但却乐在其中。该项目能够完美保留公式、图表、目录和注释,对于需要阅读外文文献的…...
zerotier实现内网穿透(访问内网服务器)
moo 内网穿透工具 实用工具:zerotier 目录 内网穿透工具 Windows下zerotier安装 ubuntu系统下的zerotier安装 使用moon加速 Windows下zerotier安装 有了网络之后,会给你一个网络id,这个网络id是非常重要的,其它设备要加入…...
Formality:set_svf命令
相关阅读 Formalityhttps://blog.csdn.net/weixin_45791458/category_12841971.html?spm1001.2014.3001.5482 svf文件的全称是Setup Verification for Formality,即Design Compiler提供给Formality的设置验证文件,它的作用是为Formality的指导模式(Gui…...
IDEA报错:无效的源发行版、无效的目标发行版
1. 无效的源发行版 创建项目的时候,会遇见这个报错,原因就是编译的JDK版本与发布版本不一致。 解决方法: 1.1. 找到问题所在地 英文:File -> Project Structure ->Project Settings 中文:文件->项目结构 …...
#渗透测试#红蓝对抗#SRC漏洞挖掘# Yakit插件使用及编写01
免责声明 本教程仅为合法的教学目的而准备,严禁用于任何形式的违法犯罪活动及其他商业行为,在使用本教程前,您应确保该行为符合当地的法律法规,继续阅读即表示您需自行承担所有操作的后果,如有异议,请立即停…...
Scala中求斐波那契数列的第n项
求斐波那契数列的第n项 问题:求 斐波那契数列的第n项 记: 0 1 1 2 3 5 8 13 21 34 55 ... 从第3项开始 f(n) f(n-1) f(n-2) 1.基本情况(直接能求的):f(0) 0,f(1) 1 2.递归情况(大事化小,自己…...
ORACLE修改序列值为表内某字段(主键)最大值
ORACLE修改序列值为表内某字段(主键)最大值 想修改序列值,网上基本的都是自己看要加到多少,然后要么调步长,要么删了重建。 想直接用declare使用标量然后调,但是逻辑里面不能有DDL语句。 不过最后解决了 直…...
前端html,vue使用第三方地图详细教程,以百度地图为例,实现地图标注,导航,定位,路线规划,坐标转换
目录 示例: 准备: ?编辑 开始: 1、新建页面,在script标签中引入百度地图的api数据,把自己在控制台创建的应用的ak替换上去 2、创建一个dom对象,设置宽高 3、在js中初始化地图 进阶: 1…...
【入门】加密四位数
描述 某军事单位用 4 位整数来传递信息,传递之前要求先对这个 4 位数进行加密。加密的方式是每一位都先加上 5 然后对 10 取余数,再将得到的新数颠倒过来。 例如:原数是 1379 ,那么每位加 5 对 10 取余数的结果为 6824 …...
[游戏开发] Unity中使用FlatBuffer
什么是FlatBuffer 为什么用FloatBuffer,优势在哪? 下图是常规使用的各种数据存储类型的性能对比。 对序列化数据的访问不需要打包和拆包——它将序列化数据存储在缓存中,这些数据既可以存储在文件中,又可以通过网络原样传输&…...
云计算IaaS-PaaS-SaaS三种服务模式转至元数据结尾
在当今数字化时代,云计算已经成为推动企业创新与发展的核心力量。而云计算的模型主要有三种:IAAS、PAAS 和 SAAS,它们各自在云计算的庞大体系中扮演着独特且关键的角色,恰似一座大厦的不同楼层,共同构建起强大而灵活的…...
【数据结构——查找】二叉排序树(头歌实践教学平台习题)【合集】
目录😋 任务描述 相关知识 测试说明 我的通关代码: 测试结果: 任务描述 本关任务:实现二叉排序树的基本算法。 相关知识 为了完成本关任务,你需要掌握:二叉树的创建、查找和删除算法。具体如下: (1)由…...
代码随想录第43天
300.最长递增子序列 # Dynamic programming. class Solution:def lengthOfLIS(self, nums: List[int]) -> int:if not nums: return 0dp [1] * len(nums)for i in range(len(nums)):for j in range(i):if nums[j] < nums[i]: # 如果要求非严格递增,将此行 …...
LeetCode - #158 用 Read4 读取 N 个字符 II
文章目录 摘要描述题目描述方法定义 题解答案题解代码题解代码分析示例测试及结果示例测试代码示例运行结果 时间复杂度空间复杂度总结关于我们 摘要 本文将详细解读一道与文件读取相关的编程问题:如何使用 read4 实现按需读取 n 个字符的 read 方法。我们不仅会提…...
C++(进阶) 第2章 多态
C(进阶) 第2章 多态 文章目录 前言一、多态的概念二、多态的定义及实现1.虚函数2.虚函数的重写3.多态的条件4.多态的细节 三、析构函数的重写四、重载/重写/隐藏的对比五、抽象类抽象类 六、相关题目题目1题目2 七、const修饰八、多态原理九、虚函数放在地方总结 前…...
贾汪徐州网站开发/优化关键词排名推广
详细介绍了Wes的想法.在自定义PathEvaluator中,您需要设置分支状态以记住第一个关系的方向.所有后续访问都会检查最后一个关系是否与方向匹配.在伪代码中:class SameDirectionPathEvaluator implements PathEvaluator {public Evaluation evaluate(Path path, Branc…...
wordpress文章指定数量/上海优化外包
当前位置:我的异常网 Java Web开发 插入数据库错误插入数据库错误www.myexceptions.net 网友分享于:2013-08-03 浏览:6次插入数据库异常往mysql里面的表里插数据,表里的字段见下面定义的这一片,下面的代码是往数据库里插得jsp&…...
申请免费网站域名/百度信息流投放
企业电脑监控软件是以桌面管理软件以终端监控系统为依托的,在统一的管理平台系统中集成了终端管理、网络管理、内容管理、资产管理等诸多功能的综合性电脑监控软件。 网管家电脑监控软件采用主动发现和主动防御的方式,对信息资产进行管理,以终…...
什么网站做软件任务挣钱/seo培训公司
一、拦截器与过滤器 在讲Spring boot之前,我们先了解一下过滤器和拦截器。这两者在功能方面很类似,但是在具体技术实现方面,差距还是比较大的。在分析两者的区别之前,我们先理解一下AOP的概念,AOP不是一种具体的技术&…...
天津做网站推广的公司/免费单页网站在线制作
前言: iview的左侧菜单,使用后发现有刷新选中效果就不对了,在这里是把他的name值设置跟路径一样来完美的解决这个问题的。 效果图: 下来是组件代码:LeftMenu.vue <template><Sider ref"leftMenu"…...
做网站需要提供什么/百度账户托管
使用maxwell实时采集mysql数据 1. 什么是maxwell maxwell 是由美国zendesk开源,用java编写的Mysql实时抓取软件。 其抓取的原理也是基于binlog。 2. Maxwell与canal的对比 Maxwell 没有 Canal那种serverclient模式,只有一个server把数据发送到消息队…...