毫无准备的字节面 1、项目 奔溃日志 查找方法2、qt 半自动内存管理3、websocket http 区别 http2.0 http 5.04、时间循环机制5、rtsp 协议6、map unordermap7、虚函数表,如何找到的8、析构函数设置为虚函数,一定要?...
常用的一些技巧博客汇总 1、判断大小端的问题: 使用 int 48 0是小端 |使用 1 1是大端 0是小端 |使用联合体https://blog.csdn.net/qq_36391130/article/details/819442172、
QT 属性系统 QT 中的属性,是qt 独有的,将类的信息暴露出来,方便QML 调用属性系统是qt基于元对象系统,为元对象系统服务提供支持语法Q_PROPERTY (TYPE NAME READ function)示例://基础属性 读写重置Q_PROPERTY(bool focus READ hasFocus WRITE setFocus RESET unsetFocus) bool hasFocus() const; void setFocus(bool on); void un.
设计模式综述: 设计模式: 代码设计的框架性的一种方法,对反复出现的问题提出的解决方案常见九种:1、单例,最常用懒汉 if (instance == null) { instance = new sigleton(); }饿汉private static Singleton instance = new Singleton();使用静态变量,保证只有一个实例线程安全的懒汉 if (NULL == instance) { ..
数据库综述 1、为什么需要数据库数据保存在内存里面,存取方便,可以永久保存,集合了内存和文件存取数据的优点,查询效率使用sql 语句高2、SQL :Structured Query Language 结构化查询语言。SQL 基础:增删改查:SELECT name,country FROM Websites;INSERT INTO Websites (name, url, alexa, country) VALUES ('百度','https://www.baidu.com/','4','CN');.
C++ 回调和memcpy 的小技巧 回调函数是可以避免臃肿的线程,实现功能的一种方法,A:将收集满锯木屑的容器 托运走B:锯木 并且收集锯木屑这个时候就可以回调B: 1、定义 一个回收锯木屑函数 type void
HTTP协议 HTTP协议是超文本协议,是基于TCP/IP协议来传输文本,图片等HTTP协议是基于服务器/客户端架构上的HTTP协议的几个特性:1、无连接: 用完就断开连接2、简单快速:请求服务只需要请求路径和请求方法3、灵活: 支持任意类型的数据对象4:无状态,对事务处理没有记忆功能5:默认端口80,支持B/S C/S模式常见的问题:HTTP的错误码:HTTP和HTTPS的区别URL 和URI 区别SOCKET 相关:服务器和客户端的建立流程一些函数的作用输...
网络编程-TCP和UDP TCP/IP网络模型:计算机和网络设备通讯、需要保证双方基于相同的方法TCP/IP协议族: TCP UDP IP FTP ICMPOSI七层模型和TCP/IP四层模型比较:TCP:是面向链接、可靠的、基于字节流的传输层通信协议三次握手:四次挥手:那么经典问题来了1、为什么需要三次握手,两次行不行?四次行不行先回答,两次行不行问题,1、造成资源浪费。 client向server 发送数据包后,因为网络问题导致丢失延迟很长时间,此时,client会认为已经丢失,会再次...
Linux 内存问题 1、物理内存和虚拟内存malloc 能够申请得虚拟内存和物理内存无关,只是和虚拟内存地址空间有关,内存管理单元 MMU 来处理存放在贮存的查询表动态翻译虚拟地址。CPU和主存的L1-L3的高速缓存称为SRAM,DRAM表示虚拟内存系统的缓存,会出现缺页也就是缓存未命中,页表这种数据结构,记录物理页和虚拟页的关联,如果没有查找到虚拟页在DRAM,就会选择一个牺牲页,将虚拟页从磁盘复制到DRAM,替换掉牺牲页。内存管理方式:块管理:块管理是将内存分成一块一块的内存空间,将程序片段分配给一块内存,
并发和互斥 并发:多个执行单元同时并行执行,并发的执行单元对资源的调用具有竞态关系竞态的解决一般采用互斥的机制,访问共享资源的代码区域称为临界区。临界区需要以某种互斥机制来保护,中断操作、原子操作、信号量和自旋锁设备驱动可以采用的互斥途径自旋锁: 自旋锁首先是锁,即获取所有权上锁,执行完成解锁。其他未获取所有权的任务会进行等待直到获取到资源信号量:这是一种睡眠锁,如果一个任务尝试获取已经被持有的信号量,信号量将任务推入等待队列,进行睡眠,信号量被释放,等待队列的任务被唤醒自旋锁对信号量的比较: ...
用户栈和内核栈 内核创建一个进程一个进程的通过进程控制块创建属于自己的堆栈堆栈包括 用户栈和内核栈用户栈:指向用户内存空间,用于保存用户空间和子线程调用的参数、返回值和局部变量内核栈: 指向内核地址空间,保留中断现场,特别是嵌套中断,被中断信息一次性压入栈中,恢复时,按照先进后出逆序弹出中断,保存操作系统相互调用的参数、返回值和局部变量为什么不同共有:1、如果用内核栈:大小有限,用户调用次数很多,中断16个优先级,系统栈是15个,用户程序调用次数很多,15次子程序调用后的参数返回值和局部变量就不能.
应用程序的堆和栈 前面提到过,每次开启一个应用实例,会创建一个进程,进程会向系统申请资源。进程对应的内存空间对应五个不同的数据区1、代码段: 代码段是用来存放程序执行代码的内存区域。大小在程序执行前可以确定,并且只读,有可能包含一些只读的常量,如字符串常量2、数据段:用来存放程序的已经初始化变量和全局变量的一块内存区域,属于静态内存分配3、BSS 段:存放未初始化的全局变量的 一块内存,属于静态内存分配,并不分配空间,只是记录需要分配空间的大小4、堆:用于存放程序动态分配的内存段,大小不固定,可以扩张和收缩.
fork VS vfork fork 和vfork 都可以创建一个子进程fork: 创建和当前进程映像一样的进程 子进程中返回0 , 父进程返回子进程的pid。子进程拷贝父进程的代码段和数据段,同时父子执行顺序不确定,所以获取到子进程pid 需要对返回为0的子进程进行过滤,之后便是父进程返回子进程的pid.vfork:vfork 在创建子进程时候,共享父进程的数据代码段,子进程先于父进程先运行,在字进程调用exit/exec 函数之前,父子进程是贡献数据段,调用之后exec/exit函数后,父进程才能被调用风险点,若子进.
tts 中如何判断字符串中是否含有中文 在语言处理中,接口只有一个,需要判别全英文、中英文,以便调用不同接口主要工作为:1、去除std::string 的符号 包括中英文,避免误判 vector<string> remove_symbol_list {"。", "[", "’", "#", "$", "%", "&", "(", ")", "*", "(", ")", "+", "-", "/", "/", "<", "=", ">", "@", "★", "【", "】", "^", "_".
如何唤醒阻塞的socket 线程 在socket 通讯时候,程序退出时候,socket并未释放,这就导致socket线程被阻塞了1、同步阻塞: 等待锁的释放2、等待阻塞: 1、使用thread.sleep 造成的阻塞 结束后进入 RUNNABLE 状态 2、使用thread.wait 造成的阻塞,使用notify 或者notifyall 唤醒 3、使用thread.join 造成的阻塞,等待上一个线程进入RUNNABLE状态 4、使用threa...
LINUX 内核线程和用户线程 概念:内核线程:内核线程使用内核栈和进程上下文切换的寄存器,只能运行在内核态用户线程:完全不受内核态影响,线程的创建、同步、调度、销毁都是由用户空间所决定的,也因此这种极其低消耗和高效的此外还有 轻量级线程:建立在内核空间支持内核调度的用户线程,属于内核线程的高度抽象,轻量线程只能由内核来调度,只不过调度方法像普通用户线程,每个轻量级的线程必须关联特定的内核线程,也因此轻量级线程切换的代价和内核线程一致。区别:(1)内核支持线程是OS内核可感知的,而用户级线程是OS内核不可感知的。.
LINUX 进程 线程 进程 、线程概念:定义:进程是程序执行的一个实例,在程序运行时创建,是资源分配的基本单位线程是程序执行的基本单元,一个进程有多个线程组成区别:1、从属单元不同:进程是资源分配的最小单元,线程是程序执行的最小单元2、资源分配和共享方式不同: 进程均有自己的独立资源,启动一个程序的实例,系统会创建一个进程,并且为该进程分配相应的数据段、堆栈段和代码段。不同线程共享进程的资源(部分共享,这部分后续填坑)。但是不同进程很难共享资源。也因此程序切换和创建进程的代价要远高于线程切换的代价。3、
C++ 出现两个头文件相互包含的解决办法 综合网络信息:相互引用解决办法 1、A导入B头文件 , B不导入A头文件 采用 extern 方式引用 2、 前向声明加指针// 声明各种类的头文件 Classes.h//前向声明class User;// 放到前面的类要用指针class Room{ /* something */ User* Admi...