1. 为什么要使用数据库 ?1. 数据可以永久保存 !2. 使用SQL语句,查询方便效率高 !3. 管理数据方便 !2. 什么是 SQL ?结构化查询语言 (Structured Query Language) 简称 SQL ,是一种数据库查询语言 。3. SQL 的作用用于存取数据、查询、更新和管理数据库系统 。4. 什么是 MySQL ?MySQL 是一个关系型数据库管理系统,属于Oracle
虚函数注意内容 1、只需要在声明的函数体中使用关键字virtual将函数声明为虚函数,定义中不需要 2、基类某一成员为虚函数之后,派生类中的同名函数自动成为虚函数 3、非类的成员函数不能定义为虚函数,全局函数以及类的成员函数和构造函数也不能定义为虚函数,可以将析构函数定义为虚函数 什么函数不能声明为虚函数 主要有:普通函数(非成员函数);静态成员函数;类联成员函数;构造函数:友元函数。 数据结构
STL的allocator有什么作用? 1、内存配置有alloc::allocate()负责,内存释放由alloc::deallocate()负责;对象构造由::construct()负责,对象析构由::destroy()负责。 2、提升内存管理效率, STL采用了两级配置器,当分配的空间大小超过128B时,会使用第一级空间配置器;当分配的空间大小小于128B时,将使用第二级空间配置器。第一级空间
分为代码段、数据段、BSS段、堆区、栈区、文件映射区 代码段:分为只读区和文本区,只读取储存字符串常量,文本区储存机器代码。 数据段:储存以及初始化的全局变量和静态变量 BSS段:储存未初始化的全局变量和静态变量,以及初始化为0的全局和静态。 堆区:手动分配的内存 栈:局部变量参数返回值等 映射区:储存动态链接库,mmap函数的文件映射 堆和栈的区别 1、申请方式。 栈为操作系统自动分配/释放,堆
YUV420P格式YUV420P像素分为三个部分:Y/U/V,Y部分长度为width * height,U为width * height /4 ,V部分和U部分长度一样。(为什么会是这样,见YUV格式介绍)。测试代码:#include <stdio.h> #include <stdlib.h> #include "libavcodec/avcodec.h" #include
使用cuda编码推流rtspffmpeg -re -stream_loop -1 -i C:\\t.mp4 -rtsp_transport udp -c:v h264_nvenc -pix_fmt yuv420p -f rtsp rtsp://192.168.50.25/test添加实时时间戳水印,精确到毫秒ffmpeg -re -stream_loop -1 -i C:\\t.mp4 -vf "
I帧:帧内编码帧尽可能去除图像空间冗余信息来压缩传输数据量的帧内编码图像I帧特点:1.它是一个全帧压缩编码帧。它将全帧图像信息进行JPEG压缩编码及传输;2.解码时仅用I帧的数据就可重构完整图像;3.I帧描述了图像背景和运动主体的详情;4.I帧不需要参考其他画面而生成;5.I帧是P帧和B帧的参考帧(其质量直接影响到同组中以后各帧的质量);6.I帧是帧组GOP的基础帧(第一帧),在一组中只有一个I帧
1、一定会按正常顺序执行的情况1.对同一块内存进行访问,此时访问的顺序不会被编译器修改2.新定义的变量的值依赖于之前定义的变量,此时两个变量定义的顺序不会被编译器修改2、其他情况计算机会进行乱序执行单线程的情况下允许,但是多线程情况下就会产生问题3、C++中的库中提供了六种内存模型用于在多线程的情况下防止编译器的乱序执行(1) memory_order_relaxed最放松的(2) memory_
DMA(直接内存访问)可以使得CPU不参与的情况下,能够自行完成把设备I/O数据放入到内存,想要实现DMA功能就要有DMA控制器硬件的支持。 DMA的工作方式如下: 1.CPU需对DMA控制器下发指令,告诉它想读取多少数据,读完的数据放到内存的某个地方就可以了; 2.接下来,DMA控制器会向磁盘控制器发出指令,通知它从磁盘读数据到其内部的缓冲区中,接着磁盘控制器将缓冲区的数据传输到内存;
阻塞I/O,当用户程序执行read,线程会被阻塞,一直等待内核数据准备好,并把数据从内核缓冲区拷贝到应用程序的缓冲区中,当拷贝过程完成,read才会返回。 非阻塞I/O,非阻塞的read请求在数据未准备好的情况下立即返回,可以继续往下执行,此时应用程序不断轮询内核,直到数据拷贝到应用程序缓冲区,read调用才可以获取到结果。 访问管道或socket时,如果设置了O_NONBLOC
Linux文件系统回味每个文件分配两个数据结构:索引节点(index node)和目录项(directory entry),它们只要用来记录文件的元信息和目录层次结构。 1.索引节点,也就是inode,用来记录文件的元信息,比如inode编号、文件大小、访问权限、创建时间、数据在磁盘的位置等等。索引节点是文件的唯一标识,它们之间一一对应,也同样都会被存储在硬盘中,所以索引节点同样占用磁盘空间。
各个进程之间是共享CPU资源的,在不同的时候进程之间需要切换,让不同的进程可以在CPU执行,那么这个一个进程切换到另一个进程运行,称为进程的上下文切换。CPU上下文切换就是先把前⼀个任务的 CPU 上下⽂(CPU 寄存器和程序计数器)保存起来,然后加载新 任务的上下⽂到这些寄存器和程序计数器,最后再跳转到程序计数器所指的新位置,运⾏新任务。 进程是由内核管理和调度的,所以进程的
程序所使用的内存地址叫做虚拟内存地址; 硬件里面的空间地址叫做物理内存地址。 操作系统引入了虚拟内存,进程持有的虚拟地址会通过CPU芯片中的内存管理单元(MMU)的映射关系,来转换变成物理地址,然后再通过物理地址访问内存:Linux内存管理32位系统的内核空间占用1G,位于最高处,剩下的3G是用户空间;64位系统的内核空间和用户空间都是128T,分别占据整个内存空间的最高和最低处,中间部分是未定
硬链接是多个目录项中的索引节点指向一个文件,也就是指向同一个inode,但是inode是不可能跨越文件系统的,每个文件系统都有各自的inode数据结构和列表,所以硬链接是不可用于跨文件系统的。由于多个目录项都是指向一个inode,那么只有删除文件的所有硬链接和源文件时,系统才会彻底删除该文件。 软链接相当于重新创建一个文件,这个文件有独立的inode,但是这个文件的内容是另外一个文件的路径,所以
要想客户端和服务器能在⽹络中通信,那必须得使⽤ Socket 编程,它是进程间通信⾥⽐较特别的⽅式,特别之处在于它是可以跨主机间通信。 Socket 的中⽂名叫作插⼝,咋⼀看还挺迷惑的。事实上,双⽅要进⾏⽹络通信前,各⾃得创建⼀个 Socket,这相当于客户端和服务器都开了⼀个“⼝⼦”,双⽅读取和发送数据的时候,都通过这个“⼝⼦”。 这样⼀看,是不是觉得很像弄了⼀根⽹线,⼀头插在客户端,⼀头插在服
我们的电脑设备可以接⾮常多的输⼊输出设备,⽐如键盘、⿏标、显示器、⽹卡、硬盘、打印机、⾳响等等,每个设备的⽤法和功能都不同,那操作系统是如何把这些输⼊输出设备统⼀管理的呢? 为了屏蔽设备之间的差异,每个设备都有⼀个叫设备控制器(Device Control) 的组件,⽐如硬盘有硬盘 控制器、显示器有视频控制器等。因为这些控制器都很清楚的知道对应设备的⽤法和功能,所以 CPU 是通过设备控制器来和设
⽂件的读写⽅式各有千秋,对于⽂件的 I/O 分类也⾮常多,常⻅的有缓冲与⾮缓冲 I/O 直接与⾮直接 I/O 阻塞与⾮阻塞 I/O VS 同步与异步 I/O 接下来,分别对这些分类讨论讨论。缓冲与⾮缓冲 I/O⽂件操作的标准库是可以实现数据的缓存,那么根据「是否利⽤标准库缓冲」,可以把⽂件 I/O 分为缓冲 I/O 和⾮缓冲 I/O: 缓冲 I/O,利⽤的是标准库的缓存实现⽂件的加速访问,⽽标准库
最底层的两种就是会「互斥锁和⾃旋锁」,有很多⾼级的锁都是基于它们实现的,你可以认为它们是各种锁的地基,所以我们必须清楚它俩之间的区别和应⽤。 加锁的⽬的就是保证共享资源在任意时间⾥,只有⼀个线程访问,这样就可以避免多线程导致共享数据错 乱的问题。 当已经有⼀个线程加锁后,其他线程加锁则就会失败,互斥锁和⾃旋锁对于加锁失败后的处理⽅式是不⼀ 样的: 互斥锁加锁失败后,线程会释放 CPU ,给其他线程
进程我们编写的代码只是⼀个存储在硬盘的静态⽂件,通过编译后就会⽣成⼆进制可执⾏⽂件,当我们运⾏这 个可执⾏⽂件后,它会被装载到内存中,接着 CPU 会执⾏程序中的每⼀条指令,那么这个运⾏中的程序, 就被称为「进程」(Process)。 现在我们考虑有⼀个会读取硬盘⽂件数据的程序被执⾏了,那么当运⾏到读取⽂件的指令时,就会去从硬 盘读取数据,但是硬盘的读写速度是⾮常慢的,那么在这个时候,如果 CPU
CPU Cache ⽤的是⼀种叫 SRAM(Static Random-Access Memory,静态随机存储器) 的芯⽚。SRAM 之所以叫「静态」存储器,是因为只要有电,数据就可以保持存在,⽽⼀旦断电,数据就会丢失 了。 在 SRAM ⾥⾯,⼀个 bit 的数据,通常需要 6 个晶体管,所以 SRAM 的存储密度不⾼,同样的物理空间 下,能存储的数据是有限的,不过也因为 SRAM 的电路简单
面试过程中,死锁也是高频的考点,因为如果线上环境真多发生了死锁,那真的出大事了。这次,我们就来系统地聊聊死锁的问题。死锁的概念;模拟死锁问题的产生;利用工具排查死锁问题;避免死锁问题的发生;死锁的概念在多线程编程中,我们为了防止多线程竞争共享资源而导致数据错乱,都会在操作共享资源之前加上互斥锁,只有成功获得到锁的线程,才能操作共享资源,获取不到锁的线程就只能等待,直到锁被释放。那么,当两个线程为了
一、EMQX下载1、官网下载:https://www.emqx.io/downloads2、选择系统版本信息进行下载3、Linux系统下载及解压,上图中复制即可wget https://www.emqx.com/en/downloads/broker/5.6.1/emqx-5.6.1-ubuntu22.04-amd64.deb sudo apt install ./emqx-5.6.1-ubunt
Linux 发送网络包的流程如上图的右半部分,发送网络包的流程正好和接收流程相反。首先,应用程序会调用 Socket 发送数据包的接口,由于这个是系统调用,所以会从用户态陷入到内核态中的 Socket 层,内核会申请一个内核态的 sk_buff 内存,将用户待发送的数据拷贝到 sk_buff 内存,并将其加入到发送缓冲区。接下来,网络协议栈从 Socket 发送缓冲区中取出 sk_buff,并按照
Linux 接收网络包的流程网卡是计算机里的一个硬件,专门负责接收和发送网络包,当网卡接收到一个网络包后,会通过 DMA 技术,将网络包写入到指定的内存地址,也就是写入到 Ring Buffer ,这个是一个环形缓冲区,接着就会告诉操作系统这个网络包已经到达。那应该怎么告诉操作系统这个网络包已经到达了呢?最简单的一种方式就是触发中断,也就是每当网卡收到一个网络包,就触发一个中断告诉操作系统。但是,
Linux 网络协议栈我们可以把自己的身体比作应用层中的数据,打底衣服比作传输层中的 TCP 头,外套比作网络层中 IP 头,帽子和鞋子分别比作网络接口层的帧头和帧尾。在冬天这个季节,当我们要从家里出去玩的时候,自然要先穿个打底衣服,再套上保暖外套,最后穿上帽子和鞋子才出门,这个过程就好像我们把 TCP 协议通信的网络包发出去的时候,会把应用层的数据按照网络协议栈层层封装和处理。你从下面这张图可以
网络模型为了使得多种设备能通过网络相互通信,和为了解决各种不同设备在网络互联中的兼容性问题,国际标准化组织制定了开放式系统互联通信参考模型(Open System Interconnection Reference Model),也就是 OSI 网络模型,该模型主要有 7 层,分别是应用层、表示层、会话层、传输层、网络层、数据链路层以及物理层。每一层负责的职能都不同,如下:应用层,负责给应用程序提
1.在浏览器中输入url地址后显示主页的过程?根据域名,进行DNS域名解析;拿到解析的IP地址,建立TCP连接;向IP地址,发送HTTP请求;服务器处理请求;返回响应结果;关闭TCP连接;浏览器解析HTML;浏览器布局渲染;输入地址并确认后,浏览器对域名进行访问,浏览器对域名进行解析,如果浏览器有域名对应的DNS相关信息的缓存,有的话可以拿到服务端的IP地址,如果没有的话,会去本地的host文件查
1.系统调用是什么,你用过哪些系统调用,和库函数有什么区别?系统调用系统调用是操作系统提供给应用程序的一组接口,用于访问底层系统资源(如文件、网络、进程等)。应用程序通过系统调用请求操作系统执行某些特定的操作,例如创建进程、读取文件、发送数据等。常见的系统调用包括:文件系统操作:打开文件、读取文件、写入文件、关闭文件等。进程控制:创建进程、终止进程、等待进程结束等。网络通信:建立连接、发送数据、接
1.GET 和 POST 的区别,你知道哪些?数据操作类型:GET是获取数据,POST是修改数据数据传输方式:GET 方法传输的数据是明文的,GET把请求的数据放在url上, 以?分割URL和传输数据,参数之间以&相连,所以GET不太安全。而POST把数据放在HTTP的包体内(request body 相对安全)。GET比POST不安全,因为参数直接暴露在url中,所以不能用来传递敏感信息
1.什么是二叉树?介绍各种树?二叉树:是一种树形结构,其特点是每个结点至多只有两颗子树,并且二叉树的子树有左右之分,其次序不能任意颠倒。平衡二叉树:树上任意结点的左子树和右子树的深度差不超过1。满二叉树:一颗二叉树的结点要么是叶子结点要么它有两个子节点。完全二叉树:若设二叉树的深度为h,除第h层外,其他各层节点数都达到最大个数,第h层结点都连续集中在最左边。二叉堆:二叉堆是一种特殊的完全二叉树,它
Copyright © 2005-2024 51CTO.COM 版权所有 京ICP证060544号