自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(56)
  • 资源 (6)
  • 收藏
  • 关注

原创 C++ 使用函数对象解决函数参数绑定问题

函数参数绑定使用到的情景  我们在程序开发中经常遇到需要传入函数的参数与实际期望不符合的情况。如:需要传入的是无参函数int fun(int b),但是接口只允许传入int fun(void)。这时候就需要用到函数对象来解决。例子:// 需要调用的接口 只允许传入无参函数template<typename T>void call_fun(T fun){ fun();}// 正常调用void Myprintf(){ // ....你的操作 cout &l

2021-10-25 20:52:32 639

原创 leetcode 马数字转整数 最长回文子串

leetcode 简单|普通简单 罗马数字转整数题目罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。字符 数值I 1V 5X 10L 50C 100D 500M 1000例如, 罗马数字 2 写做 II ,即为两个并列的 1。12 写做 XII ,即为 X + II 。 27 写做

2021-10-15 18:29:02 175

原创 android NDK JNI配置

android NDK JNI配置!!!!!!!!!!!!!!!!!!!首先配置好android SDK 以及JNI使用编译器android sudo!!!!!!!!!!!!!!!!!!!新建项目-基础配置阶段一新建项目 选择project视图新建JNI在文件夹中创建一个Android.mk文件 (就是jni所在路径的makefile)写入一下内容LOCAL_PATH:=$(call my-dir)include $(CLEAR_VARS)#libtest

2021-10-15 18:26:15 894

原创 Linux System V IPC

Linux系统System V PIC共享内存消息队列信号灯集

2021-09-27 17:09:30 165

原创 网络编程 UDP基础

网络编程 UDP基础相关AIP1 int fd = socket(AF_INET,SOKC_DGRAM,0); 请参照TCP通信2 bind(); 请参照TCP通信接受数据,recvfrom#include <sys/types.h>#include <sys/socket.h>ssize_t recvfrom(int sockfd, void *buf, size_t len, int flags, struct soc

2021-09-21 13:02:47 58

原创 网络编程 TCP基础

网络编程 TCP基础TCP编程API 介绍socket#include <sys/types.h> /* See NOTES */#include <sys/socket.h>int socket(int domain, int type, int protocol);参数domainAF_INET IPv4 Internet protocols ip(7)AF_INET6 I

2021-09-21 13:02:16 61

原创 网络编程基础(一)

网络基础网络采用分层的思想每一层上实现不同的功能,对上层的数据进行透明传输每一次向上层提供服务,同时使用下层的服务网络OSI分层物理层数据链路层网络层传输层会话层表示层应用层OSI模型相关协议很少使用,但是模型本身非常统用OSI模型是一个理想化模型,尚未有完整的实现socketsocket代表着网络编程的一种资源。socket的类型:流式套接字(SOCKET_STREAM): 唯一对应着TCP提供了一种面向连接的、可靠的数传输服务,数据无差错、无重复的发送且按顺序

2021-09-21 13:01:56 61

原创 线程 -- 条件变量 生产者消费者问题

Linux线程同步问题使用条件变量模拟生产者消费者问题

2021-09-15 20:25:29 77

原创 线程 -- 读写锁

读写锁与互斥量类似,但读写锁允许更高的并行性。其特性为:写独占,读共享。读写锁具备三种状态:读模式下加锁状态(读锁).写模式下加锁状态(写锁).不加锁状态.读写锁的特性读锁可以重复加,当加读锁,线程可以同时读取文件。此时加写锁,会被阻塞,直到读锁全部解锁。写锁只能加一次,只有加锁的进程可以修改文件。此时加读锁写锁都会被阻塞,直到写锁解锁。写锁的优先级高于读锁。读写线程场景分析线程A有写锁,线程B请求读锁 答:B阻塞线程A有写锁,线程B请求写锁 答:B阻塞

2021-09-15 17:57:46 379

原创 线程同步 - mutex建议锁

线程同步同步的概念所谓同步,即同时起步,协调一致。不同的对象,对“同步”的理解方式略有不同。如,设备同步,是指在两个设备之肉规定一个共同的时间参考;数据库同步,是,让两个或多个数据库内容保持一致,或者按需要部分保持一致;文件同步,是指让两个或多个文件夹里的文件保持一敏。等等.而,编程中、通信中所说的同步与生活中大家印象中的同步概念略有差异。“同”字应是指协同、协助、互相配合,主旨在协同步调,按预定的先后次序运行;线程同步同步即协同步调,按预定的先后次序运行。线程同步,指一个线程发出某一功能调用时

2021-09-15 15:53:39 92

原创 Linux线程

Linux线程线程的概念什么是线程LWP: light weight process轻量级的进程,本质仍是进程(在Linux环境下)进程: 独立地址空间,拥有PCB.线程:也有PCB,但没有独立的地址空间(共享).区别:在于是否共享地址空间。 独居(进程);合租(线程)。Linux下:线程:最小的执行单位进程:最小分配资源单位,可看成是只有一个线程的进程。Linux内核线程实现原理类Unix系统中,早期是没有“线程”概念的, 80年代才引入,借助进程机制实现出了线程的概念。因此在这

2021-09-14 20:16:50 93

原创 进程相关 -- 守护进程

Linux进程相关 – 守护进程相关概念进程组概念和特性进程组,也称之为作业。BSD于1980年前后向Unix中增加的一个新特性。代表一个或多个进程的集合。每个进程都属于一个进程组。在waitpid,函数和kill函数的参数中都普使用到。操作系统设计的进程组的概念,是为了简代对多个进程的管理。当父进程,创建子进程的时候,默认子进程与父进程属于同一进程组。进程组ID==第一个进程1(组长进程)。所以,组长进程标识:其进程组ID==其进程ID可以使用kill -SIGKILL -进程组ID(负的)

2021-09-14 12:44:24 126

原创 进程通信 --- 信号 -- 练习

进程通信 — 信号 – 练习使用setitimer每秒打印一次hello, world#include<stdio.h>#include<sys/time.h>#include<signal.h>void catch_sig(int num){ printf("hello, world\n");}int main(){ struct sigaction sigAct; sigAct.sa_flags = 0; sig

2021-09-13 22:43:16 131

原创 进程通信 --- 信号

进程通信 – 信号信号在我们生活中随处可见, 如古代战争中摔杯为号, 现代战争中的信号弹, 体育杯赛中的信号枪…他们都有共同的共性: 1 简单 2 不能携带大量信息 3 满足某个特定的条件才发送.信号是信息的载体, Linux/Unix环境下, 古老经典的通信方式. 现代依然是主要的通信方式.Unix早期版本中就提供了消息机制, 但不可靠, 信号丢失. Berkeley 和 AT&T都对信号模型做出了更改, 增加了可靠信息机制. 但彼此并不兼容. POSIX.1 对可靠信号例程进行目标标准化

2021-09-13 20:49:17 175

原创 进程通信--mmap文件内存映射

进程通信–mmap 文件内存映射#include <sys/mman.h>void *mmap(void *addr, size_t length, int prot, int flags, int fd, off_t offset);int munmap(void *addr, size_t length);PROT_EXEC //Pages may be executed.PROT_READ // Pages may be read.PROT_W

2021-09-08 21:14:19 490

原创 进程通信--管道

进程通信–管道IPC: InterProcess Communication 进程间通信, 通过内核提供的缓冲区进行数据交换机制.IPC通信的方式有pipe 管道 – 最简单的. — 有血缘关系的fifo 有名管道.mmap 文件映射IO (文件共享IO) – 速度最快本地socket 最稳定的信号 — 携带信息量最小的共享内存 —消息队列管道 -半双工通信常见的通信方式 :单工(数据流向只能是一个方向 – 广播 接听只能接听不能有任何反馈)半双工 (同一个时刻,数

2021-09-08 14:42:43 126

原创 Linux文件相关函数-文件夹信息

文件信息相关stat 查看文件信息获得文件详细信息#include <sys/types.h>#include <sys/stat.h>#include <unistd.h>int stat(const char *pathname, struct stat *buf);struct stat { dev_t st_dev; /* ID of device containing file */ // 设备编号

2021-09-07 22:10:55 260 1

原创 Linux文件IO操作

文件IOopen查看man 2 open#include <sys/types.h>#include <sys/stat.h>#include <fcntl.h>int open(const char *pathname, int flags);int open(const char *pathname, int flags, mode_t mode);// pathname 文件名必选项O_RDONLY 只读O_WRONLY 只写O_RDW

2021-09-07 22:10:06 255 1

原创 Linux进程相关 创建与回收

进程目标掌握fork/getpid/getpid/getppid函数的使用熟练掌握ps/kill命令的使用熟练掌握execl/execlp函数的使用说出什么时僵尸进程 什么是孤儿进程熟练掌握wait函数的使用熟练掌握waitpid函数的使用程序相关概念什么是程序 ?编译好的二进制文件 .什么是进程 ?运行着的程序. 站在程序员的角度,运行一系列指令的过程. 站在系统角度分配好资源的基本单位.区别程序占用磁盘,不占用系统资源内存占用系统资源一个程序对应多个

2021-09-07 22:09:37 1566 2

原创 VIM的使用

VIM的使用VI与VIM都是Linux系统上优秀的编辑器。VIM是VI的增强版,VIM在VI的基础上增加了很多插件方便程序员使用。VIM命令模式Ctrl+C锁定Ctrl+Q解除光标移动上下左右键,首先键盘的上下左右键可以控制光标的移动。但是一般情况系统第一次使用为更细VI/VIM时使用上下左右键无效。这一点需要注意。HJ左下 KL上右#h/l/j/k: 移动#个字符,如:2h -> 向左移动两个字符定位同行跳转0: 跳转到同行的行首 注意这里的数子是键盘上面的数子^: 行

2021-09-07 22:08:13 91

原创 Makefile

makefile学习makefile好处:一次编写,终身受益。makefile命名规则:makefileMakefilemakefile三要素目标依赖规则命令写法目标:依赖tab键 规则命令第一版makefileapp:main.cpp src/*.cpp g++ -o app -I ./include main.cpp src/*.cpp如果更改其中一个文件,所有的源码都重新进行编译。考虑分解编译过程,先生成.o文件.o文件变成结果。第二版makefil

2021-09-07 22:06:10 51

原创 GDB调试

GDB调试基础操作使用gdb调试时,使用gcc编译指令需要加上-g选项.启动gdb:gdb app(对应可执行程序名)在gdb中期启动程序r(run).start以调试的方式启动 --停留在main函数n(next) 执行下一条指令s(step) 单步调试,可进入函数内部.退出gdb : q(quit)设置启动参数 : set args 10 12列出代码 : l . l src/add.cpp:0设置断点 :b(break) 17 (17行设置断

2021-09-07 22:04:45 61

原创 GCC的使用

GCC的使用GCC编译参数-I --包含头文件路径(可以包含绝对路径也可包含行对路径)-O --优化选项,1-3,越高优先级越强-L --包含的库路径-l --指定库名(通常libxxx.so,libxxx.a,-lxxx)-o --目标文件-c --编译成.o文件-g --用与gdb调试,不加此选项不能gdb调试-Wall --显示更多的警告-D --指定宏编译-lstdc++ --编译C++代码示例:g++ main.cpp ./head/head.cpp

2021-09-07 22:03:50 80

原创 力扣图解算法数据结构学习笔记C++篇

图解算法数据结构数据结构剑指 Offer 05. 替换空格题目要求:请实现一个函数,把字符串 s 中的每个空格替换成"%20"。示例 1:输入:s = "We are happy."输出:"We%20are%20happy."解法1-要点重新定义数组长度:len = len+2*spaceNumber;逆序修改数组内容;(逆序很重要)-(遇到字符,后移,遇到空格替换为%20[修改3个字符]);解法1-代码class Solution {public: string repl

2021-07-22 20:42:16 333 4

原创 Lootcode数组和字符串学习笔记C++篇

数组和字符串数组简介寻找数组的中心索引题目要求给你一个整数数组 nums ,请计算数组的 中心下标 。数组 中心下标 是数组的一个下标,其左侧所有元素相加的和等于右侧所有元素相加的和。如果中心下标位于数组最左端,那么左侧数之和视为 0 ,因为在下标的左侧不存在元素。这一点对于中心下标位于数组最右端同样适用。如果数组有多个中心下标,应该返回 最靠近左边 的那一个。如果数组不存在中心下标,返回 -1 。解法-要点psum*2 + nums[i] == sum。即此位置前所有

2021-07-22 20:40:46 342 1

原创 指针使用守则以及建议

指针使用守则以及建议守则1:每一个指针调用前都要有所指向的空间(即地址);守则2:要修改指针时需要传入更高一级指针;建议:不要使用指针。法则及真理详解守则1:每一个指针调用前都要有所指向的空间(即地址);当你新建一个指针的时候,都要记住需要为其分配空间,最常见使用malloc函数分配空间。没有分配空间之前不要使用它。指针与地址空间是对应的。没有分配地址的指针指向的空间是不安全的,可能出现问题。只有指针指向的空间是确定的、自己分配的这时候指针才是安全的。守则2:要修改指针时需要传入更高一级指针;

2021-05-18 21:16:58 373 2

原创 求斐波那契数列的两种方式

斐波那契数列递归思路:一个递归函数一定可以分解为基础与递归两个部分。而递归部分每次调用都要使其参数向基础部分接近。对于简单的递归函数,基础部分就是if的部分,递归部分就是return部分。斐波那契数列的函数表示为:f(x)={1x=0,x=1f(n−1)+f(n−2)x>1f(x)=\begin{cases}1& \text{x=0,x=1}\\f(n-1)+f(n-2)& \text{x>1}\end{cases}f(x)={1f(n−1)+f(n−2)​x

2021-02-20 18:26:42 258

原创 计算机启动的基本过程详解

计算机启动的基本过程详解对于一台安装了Linux系统的主机来说,当用户按下开机按钮之后一共经历4个过程。按下电源——》BIOS自检——》系统引导lilo/grub——》启动内核其中,对每个过程都执行了自己该做的初始化部分,有些过程又可分为好几个子过程。一、按下电源按下电源,其实更科学的称呼是上电,因为有些嵌入式系统是通过波动电源开关来上电的,没有按下的按钮。任何Linux系统启动必然是从上电开始的。上电后CPU的RESET引脚会由特殊的硬件电路产生一个逻辑值,这就是CPU的复位,此时CPU唤醒了,

2021-01-13 19:36:58 6666

原创 PowerDesigner数据库设计

使用PowerDesigner进行数据库设计数据库设计的时候应该考虑我们需要实现某个功能的时候需要用到什么样的SQL语句、视图、存储过程、触发器等等。一、分析阶段1.1 设计第一步:确定实体以部门管理系统为例:实体包含:员工实体、账户实体、部门实体、职位实体、离职实体。在数据库设计的时候一张表代表一个实体。1.2 设计第二部:确认关系员工实体——>账户实体 1:1(或者1:n)员工实体——>部门实体 n:1 ——》 分解为 员工实体——>职位实体 n:1 职位实体——

2021-01-12 20:33:03 1087

原创 C++函数探幽(内联、引用)

函数探幽执行到函数调用指令时,程序将在函数调用后立即存储该指令的地址,并将函数参数复制到堆栈(为此保留的内存块),跳回到地址被保存的指令处(这与阅读文章时停下来看脚注,并在阅读完脚注后返回到以前阅读的地方类似)。来回跳跃并记录跳跃位置意味着以前使用函数时需要一定开销。内联函数内联函数就是说编译器将使用相应的函数代码替换函数调用。(用空间换时间)要使用:在函数声明前加上关键字inline;在函数定义前加上关键字inline;通常的做法是省略原型,将整个定义(即函数头和所有函数代码)放在本应

2020-11-29 01:54:01 194

原创 C++查漏补缺(文本输入、二维指针、函数指针)

C++查漏补缺文本输入很多操作系统(Unix、Linux、Windows)都支持重定向,允许用文本替换键盘输入。例如,假设在Windows中有一个名为gofish.exe的可执行程序和一个名为finshtale 的文本文件,则可以在命令提示符下输入下面命令:gofish <finshtale这样,程序将从finshtale文件(而不是键盘)获取输入,< 符号是Unix和Windows命令符提示模式的重定向运算符。其次,很多操作系统都允许通过键盘模拟文件结尾条件。在Unix系统中可以通

2020-11-29 01:53:15 116 1

原创 C++预备知识

C++预备知识一、简介C++融合了3种不同的编程方式,C语言代表的过程性语言、C++在C语言基础上添加的类代表的面向对象语言、C++模板支持的泛型编程。C++与C语言一样都是起源于贝尔实验室,于20世纪80年代被创造出来。二、头文件头文件类型约定示例说明C++旧式风格以.h结尾iostream.hC++程序可以使用C旧式风格以.h结尾math.hC、C++程序可以使用C++新风格没有扩展名iostreamC++程序可以1使用,使用namespa

2020-11-29 01:50:15 129

原创 定义定常数组类型

定义定常数组类型一、声明方式typedef int(ARRAY_TYPE)[10];定义新类型ARRAT_TYPE,ARRAT_TYPE是10大小的int*数组指针类型。typedef int(*ARRAY_POINTER_TYPE)[10];定义新类型ARRAY_POINTER_TYPE,ARRAY_POINTER_TYPE是10大小的int**数组指针类型。二、定义int a[10];ARRAY_TYPE *p1 = &a;ARRAY_POINTER_TYPE p2

2020-11-22 18:03:06 192

原创 访问结构体数组的四种方法

访问结构体数组的三种方法在堆上建立结构体数组Stu ** arrstu = malloc(sizeof(Stu*)*20);赋值Stu s1 = {"dai",20};arrstu[0] = &s1;一、下标加->法连续的内存空间都可以使用[]方法访问空间arrstu[i]->name当arrstu[i]后取的一维结构体的指针,注意取得的是指针。要想访问指针类型的结构体需要使用->二、下标加*法(*arrstu[i]).name当arrstu[

2020-11-22 16:37:20 7909

原创 Qt实现多线程的两种方式

Qt线程Qt4.7之前版本处理步骤自定义一个类,继承于QThread。class MyThread:public QThread{public: vid run(); //虚函数 线程处理函数(和主线程不在同一个线程) signals: void isDone(); //信号 线程执行完发送}void MyThread::run() { // 实现 -- 复杂的处理过程 emit isDome; // 发送线程};定义线程M

2020-11-02 21:09:56 23415 8

原创 UnixLinux发展历史

UNIX/Linux介绍(基础篇)UNIX和Linux之间的关系是很有意思的话题。在目前主流的服务器端操作系统中,Unix诞生于20世纪60年代末,Windows诞生于20世纪80年代中期,Linux诞生于20世纪90年代初,可以说Unix是操作系统中的“老大哥”,后来的Windows和Linux都参考了UNIX。现在的Windows系统已经朝着“图形界面”的方向发展了,和UNIX有了巨大的差异,从表面甚至看不出两者的关联。UNIX的坎坷历史UINX系统是由肯·汤姆森(Ken Thompson)

2020-11-02 20:59:13 998

原创 QT使用TCP传输文件

QT使用TCP传输文件server端导入头文件使用指针创建QTcpServer对象和QTcpSocket对象QTcpServer * tcpServer;QtcpSocker * tcpSocket给QTcpserver分配对象并对象指定父对象tcpServer = new QTcpServer(this);打开监听绑定端口tcpServer->listen(QHostAddress::Any,8888);connect绑定newConnection事件conn

2020-11-02 20:57:51 867 1

原创 树相关介绍

树二叉排序数 -> 红黑树 -> 多叉树 -> B树 -> B+树平衡二叉树概念平衡二叉树是基于二分法的策略提高数据查找速度的二叉树的数据结构。特点平衡二叉树是基于二分法思维把数据按照规则装成一个树形的结构,用这个树形结构的数据减少无关数据的检索,大大提高了数据检索的的速度。规则非叶子节点只能允许最多两个字节的存在每个非叶子节点数据的分布规则为左边的子节点小于当前节点的值,右边的子节点大于当前节点的值。层级结构因为平衡树的查询性能和树的层级(h高度)成反比,

2020-11-02 20:56:46 117

原创 C语言交换变量的三种方式

交换变量交换变量法#include<ioistream>using namespace std;int main() { int a = 3; int b = 5; int temp = 0; temp = a; a = b; b = temp; cout << "a = " << a << " b = " << b << endl;

2020-11-02 20:56:06 1014

原创 MFC入门介绍

MFC入门MFC由是微软推出的基础类库,底层用C实现(几千个API),上层的MFC用C++封装。不支持跨平台。1) SDK和APISDK:软件开发工具包(Software Development Kit),一般都是一些被软件工程师用于特定的软件包、软件框架、硬件平台、操作系统等建立应用软件的集合工具。API函数:Windows系统提供给程序编程的接口(Application Programmimg Interface)。Windows应用程序API函数是通过C语言实现的,所有函数都在Windows

2020-11-02 20:55:13 391

Ajax-hook:拦截由XMLHttpRequest发出的浏览器的AJAX请求-js源码

在源网页加载之前,实现一个XMLHttpRequest的代理对象,然后覆盖全局的XMLHttpRequest,这样一但上层调用 new XMLHttpRequest这样的代码时,其实创建的是Ajax-hook的代理对象实例

2021-08-11

c++贪吃蛇源码—附带注释.zip

vs2019 C++ 贪吃蛇

2021-07-22

WebSocket传输视频方法总结.txt

WebSocket传视频方法总结

2021-01-20

Equipment-management-system.zip

qt实现的实验室设备管理系统,使用SQL server数据库,配置ODBC数据源

2021-01-12

ssm框架在线医院挂号系统mysql数据库

数据库课设,在线挂号系统

2021-01-12

Qt实现的超市商品库存管理系统

可用于课设,使用SQL server数据库。包含文档及程序

2021-01-12

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除