自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

站在树顶端设计的男人

后端服务器/DeepLearning

  • 博客(83)
  • 资源 (1)
  • 问答 (3)
  • 收藏
  • 关注

原创 VSCode MSVC CMake工程模板

5.创建CMakeLists.txt。1.创建.vscode 文件夹。3.创建launch.json。4.创建tasks.json。6.创建你的cpp工程。

2023-05-07 15:53:29 238 1

原创 macOS中虚拟机桥接模式分配静态ip

在macos中,设置Linux虚拟机桥接模式静态ip地址

2023-02-09 21:13:06 972

原创 macos iTerm oh my zsh

macos中使用iTerm和oh-my-zsh打造炫酷的终端

2022-12-15 19:54:31 205

原创 macos 输入法切换卡顿 macos monterey (已解决)

一度以为2020款macbook pro性能不行了,切换输入法都卡顿。。

2022-08-01 09:31:53 2757

原创 C语言实现C++面向对象特性

使用C语言实现面向对象三大特性

2022-07-26 11:12:42 433

原创 c++大数乘法

C++字符串乘法,比大数加法稍微复杂一点点

2022-06-22 10:51:58 237

原创 condition_variable条件变量

有次面试,面试官问我有没有了解过条件变量(之前看的Linux高性能服务器编程书中,绝对提到了这个,都忘光了),我回答没有。。。。今天回过头来,整理一下。这里是引用Condition variableA condition variable is an object able to block the calling thread until notified to resume.It uses a unique_lock (over a mutex) to lock the thread when

2022-05-05 11:58:53 772

原创 (网易笔试)组合幸运数字

小易的幸运数字是7,现有一个整数数组 nums,请你找出并返回能被七整除的子集合的最大和,如果找不到则返回-1。一个正整数数组列表nums,用空格区分,1<=length(nums)<=100000,sum(nums) <= 1000000000#include <bits/stdc++.h>using namespace std;int main(){ vector<int> nums; int num,sum = 0; wh.

2022-03-25 21:48:12 669 1

原创 特殊的编辑距离

在自然语言处理的过程中,经常需要判断一个字符串和另外一个字符串之间的一个相似程度,其中常见的一个指标就是编辑距离,即一个字符串最少经过多少次“增删改”某个字符,可以变为另一个字符串。如“abc”与“ac”的编辑距离为1,是因为在a和c中间“增加”一个b即可。如“abcd”与“axc”的编辑距离为2,是因为把“abcd”的b修改为x,然后再删除d即可,共2次操作。但是在某种场景中,编辑距离定义为词粒度的。比如句子A “I am a coder”与句子B “hello , I am a singer”之间,.

2022-03-25 18:36:36 969

原创 (美团笔试)公司食堂

链接:https://www.nowcoder.com/questionTerminal/601815bea5544f389bcd20fb5ebca6a8?answerType=1&f=discussion来源:牛客网小美和小团所在公司的食堂有N张餐桌,从左到右摆成一排,每张餐桌有2张餐椅供至多2人用餐,公司职员排队进入食堂用餐。小美发现职员用餐的一个规律并告诉小团:当男职员进入食堂时,他会优先选择已经坐有1人的餐桌用餐,只有当每张餐桌要么空着要么坐满2人时,他才会考虑空着的餐桌;当女职员.

2022-03-24 15:44:37 651

原创 cpp 堆/堆排序

https://www.cnblogs.com/jingmoxukong/p/4303826.html首先应该先了解堆的基础知识。再向下调整或者向上调整时,要明确的几个点。设当前元素在数组中以R[i]表示,那么,(1) 它的左孩子结点是:R[2i+1];(2) 它的右孩子结点是:R[2i+2];(3) 它的父结点是:R[(i-1)/2];本质是对一颗完全二叉树的操作。#pragma once#include <iostream>#include <vector>

2022-03-22 18:03:25 1655

原创 大富翁游戏

大富翁游戏规则如下玩家起始会获得一定资本M金币玩家每一次可以走一个格,或者跳两个格;走一格耗费2个金币能量;跳两个格,耗费3个金币能量;金币只有满足能量消耗时,才能继续往下走玩家每走到一个格,会得到这个格的奖励,每个格的奖励金币数为非负整数当玩家走到这个格后,总金币数不足以支持下一步金币消耗时,则不能继续往下走,游戏结束玩家第一步可以选择走一步进第1格或者跳2步进第2格起始,玩家可以选择在任意一格结束游戏问玩家游戏中,最多能得到多少个金币?#include <bits/std

2022-03-09 11:38:44 5690

原创 摩尔斯电码解码

已知摩尔斯电码和字符映射关系如下:A -> 0B -> 1C -> 10D -> 11E -> 100F -> 101G -> 110H -> 111当前我们获取到了一串01数字字符串,需要进行摩尔斯电码解码,请问共有多少种解码方法?这是一道典型的动态规划问题。dp[i]表示第i个字符的解码方式。因此转移方程为dp[i] = dp[i-1] + dp[i-2] + dp[i-3]。这里dp[i] 至少为dp[i-1],因为dp[i]前已

2022-03-08 19:51:38 2001 1

原创 1.什么是内存对齐?内存对齐有什么意义?2. 请简述C++中函数调用过程并解释栈帧的概念。

什么是内存对齐?现代计算机中内存空间都是按照 byte 划分的,从理论上讲似乎对任何类型的变量的访问可以从任何地址开始,但是实际的计算机系统对基本类型数据在内存中存放的位置有限制,它们会要求这些数据的首地址的值是某个数k(通常它为4或8)的倍数,这就是所谓的内存对齐。为什么要进行内存对齐尽管内存是以字节为单位,但是大部分处理器并不是按字节块来存取内存的。它一般会以双字节,四字节,8字节,16字节甚至32字节为单位来存取内存,我们将上述这些存取单位称为内存存取粒度。假如没有内存对齐机制,数据

2022-03-07 16:24:30 347

原创 合并区间C++

给出一组区间,请合并所有重叠的区间。请保证合并后的区间按区间起点升序排列。要求:空间复杂度 O(n)O(n),时间复杂度 O(nlogn)O(nlogn)进阶:空间复杂度 O(val)O(val),时间复杂度O(val)O(val)输入:[[10,30],[20,60],[80,100],[150,180]]输出[[10,60],[80,100],[150,180]]思路:先排序,排序好的区间只有两种可能:1.两个区间重合如果区间有交集,判断第二个的右区间是否大于结果集中的右区间,如果

2022-03-07 15:03:48 2055

原创 linux 编译动态链接库

准备好头文件编译文件生成.so动态链接库文件g++ -shared -fPIC mylib.cpp -o libmylib.so其他程序调用动态链接库g++ test.cpp -lmylib -L/root/lib-l(小写L)指定调用的库名称-L指定库的路径#!/bin/bashLD_LIBRARY_PATH=./export LD_LIBRART_PATH...

2022-02-22 19:46:20 454

原创 【解决】QT 中使用SDL多次创建窗口不能渲染画面

在QT中多次绑定创建窗口句柄会出现不能渲染的问题。win_ = SDL_CreateWindowFrom(this->win_id_); SDL_ShowWindow(win_);原因是SDL中SDL_CreateWindowFrom的源码中voidSDL_DestroyWindow(SDL_Window * window){ SDL_VideoDisplay *display; CHECK_WINDOW_MAGIC(window, ); /* Restor

2022-01-16 22:24:56 1346

原创 vector迭代器失效的两种情况

insert扩容以后vector容器当中已有数据,在insert之前获取的迭代器(auto e = v.beign())在insert之后vector已经扩容了(将原来的内容复制到其他地址去),之前的迭代器地址已经失效。`int main(){ vector<int> v = {100, 200 ,300 ,400 ,500}; auto e = v.begin(); v.insert(b.end(), 700); //e = v.begin(); for(e;e != v.

2021-12-22 11:28:27 794

原创 C++线程常见包装类实现

C++多线程不如Java那样启动和停止线程那么优雅,如何做到开启线程像Java那样呢?本文将介绍常见的封装C++11线程方式。线程和其他任务一个样,开启,执行,结束。在CPP当中,执行任务这这一过程就相当于一个回调函数一样,在Java当中有开启线程的方式继承Thread和实现Runnable接口,哈哈哈哈哈哈,一下回到大二听贾老师了属于是,那我们就来实现Java当中的集成Thread这种方式。定义接口Start ()Stop()Main()这里的Start()和Stop()函数都是virt

2021-10-26 11:27:27 212

原创 ffmpeg No start code is found ,Error splitting the input into NAL units.解决方案

对于此错误,大概有两方面原因,一方面,ffmpeg的将要发送给解码线程的packet与解码器上下文的不对应,另一方面是解码器上下文参数缺失导致1.所以很大概率是把音频的packet当做视频的packet发送到解码线程去做了。2.没有把解封装的参数复制到解码器的上下文中。...

2021-10-25 22:44:58 4639

原创 unordered_map 自定义结构为Key

有如下结构体struct Word { int len = 0; int ascii = 0; Word(string str) { len = str.length(); for (char c : str) { ascii += c; } }};需要使用如下场景unordered_map<Word, vector<string>>m;这里需要实现哈希函数和重载()函数struct Hash{ std::size_t operat

2021-10-10 22:35:27 859

原创 ffmpeg编解码器包装类

对视频处理过程中,有编码,解码过程,两个过程在ffmpeg实现过程中有相同的处理函数,为了降低代码冗余,封装两个过程显得很有必要。编码,解码两个过程的处理函数有:avcodec_find_encoder() 找到编码器avcodec_find_encoder() 找到解码器avcodec_alloc_context() 生成编码器上下文avcodec_open2打开编码器上下文avcodec_send_frame() 发送帧到线程中压缩(编码)avcodec_send_packet() 发送

2021-10-09 11:13:11 303

原创 二叉树前,中,后统一非递归版本(只改变顺序)

先序遍历vector<int> preorderTraversal(TreeNode* root) { if(!root) return {}; vector<int> result; stack<TreeNode*> stk; stk.push(root); while(!stk.empty()){ TreeNode* node = stk.top();

2021-10-05 11:25:50 59

原创 c++ ifstream中的eof()方法

使用ifstream的一般步骤:ifstream ifs; ifs.open(".\\..\\..\\resources\\out_800_600_25.rgba", ios::binary); if (!ifs) { cout << "文件打开失败" << endl; return 0; } int size = 800 * 600 * 4; unsigned char* rgba = new unsigned char[size]; int read_s

2021-09-29 17:08:30 3944 2

原创 FLV文件推流到Nginx(C++实现)

本文将介绍如何通过librtmp将flv文件推送到Nginx。首先我们明确文件flv和rtmp flv的文件格式是不一样的,具体参考RTMP FLV和FLV文件的区别。文章结构:首先进行解析flv文件,然后从解析后的文件中,读取音频/视频文件,最后将音视频文件利用librtmp推送到Nginx服务器中。Nginx 支持RTMP就不在此赘述。该过程的实现放在下文。解析FLV首先我们要了解FLV文件的格式图片来源于网络。这张图片清楚地展示了FLV的文件结构,首先是FLV Header,一般是9个字节,然

2021-08-17 12:16:40 576

原创 RTMP消息格式

先放一张网络资源的图。这里的RTMP Header和RTMP Body是把传输层的外壳剥掉之后的内容,其实就是TCP建立连接以后的数据,这些头再经过RTMP服务端和客户端解析这些数据。RTMP HeaderBasic HeaderBasic Header中format和Chunk Stream ID一共占用1个字节。format占用2位,Chunk Stream占用6位。如果Chunk Stream在2~63之间,则不再扩展Basic Header。如果为0或者1分别进行扩展Basic Hea

2021-08-13 11:55:03 421

原创 RTMP协议

RTMP是Real Time Messaging Protocol(实时消息传输协议)的首字母缩写。该协议基于TCP,是一个协议族,包括RTMP基本协议及RTMPT/RTMPS/RTMPE等多种变种。RTMP是一种设计用来进行实时数据通信的网络协议,主要用来在Flash/AIR平台和支持RTMP协议的流媒体/交互服务器之间进行音视频和数据通信。支持该协议的软件包括Adobe Media Server/Ultrant Media Server/red5等。RTMP与HTTP一样,都属于TCP/IP四层模型的.

2021-08-13 11:18:18 170

原创 H264基本知识

压缩比为1%

2021-08-02 18:54:47 7014

原创 CondaHTTPError: HTTP 000 CONNECTION FAILED for url <https://repo.anaconda.com/pkgs/main/linux-64/cur

以前的贴子真的是不能太相信,太坑爹了,搞了一下午,在linux上配置conda环境时,直接贴了,不注意后面对应的平台(linux-32/linux-64/linux- armv6l/l inux-a rmv7l /linux -ppc64le/noarch/osx-32/OSX- 64/OSX- arm64/win-32/win-64/)查看自己的平台,在清华源后面加上就行了。CondaHTTPError: HTTP 000 CONNECTION FAILED for url

2021-07-22 17:19:59 1609

原创 YUV基础知识

图像的基础像素分辨率 RGBRBG888(24位),RGBA(32位)图像是数据,屏幕是显示设备,图像数据经过驱动程序让屏幕显示图像。Bitmap是BGR格式,若要现实,需将BGR数据转化为RGB数据。PPI(pixels per inch),DPI(Dots pen inch),两者基本属于1:1的关系,PPI >300 属于视网膜级别。分辨率:X轴像素个数✖️Y轴像素的个数。常见的宽高比16:9/4:3。...

2021-07-19 14:48:03 1291 2

原创 原型模式(C++)

产生背景在软件系统中,很多时候我们需要创建某一个类型的对象,为了简化创建过程,可以只创建一个对象,然后通过克隆的方式复制出其他的对象,这就是原型模式的设计思想。模式定义原型模式是一种对象创建型模式,用原型模式制定创建对象的种类,并且通过复制这些原型创建新的对象。原型模式允许一个对象再创建另外一个可定制的对象,无须知道任何创建的细节。UML类图模式结构1. Prototype(抽象原型)可以是接口或者抽象类,是所有具体原型类型的公共父类。1.ContretePrototy.

2021-07-17 22:38:56 173

原创 FFmpeg API进行AAC编码

FFmpeg API进行AAC编码步骤1 注册设备avdevice_register_all();2 查找格式并打开输入av_find_input_format("avfoundation");avformat_open_input(&fmt_ctx, devicename, iformat, &options))3编码器 //avcodec_find_encoder(AV_CODEC_ID_AAC); AVCodec *codec = ...

2021-07-06 21:56:37 539

原创 音视频基础知识

常见的音频编码器常见的音频编码器包括OPUS(速度快,压缩率大),AAC(最为广泛的),Ogg,Speex,iLBC,AMR,G.711其中,ACC在直播系统中应用的比较广泛,OPUS是较新的音频编解码,WebRTC模式使用OPUS,固话一般使用G.711(损耗很大)系列。评测结果:OPUS>AAC>Ogg。音频编码质量比较音频编码率比较ACCAAC(Advanced Audio Coding)由许多知名公司开发,其目的是取代MP3格式,其最开始是基于MPEG-2的.

2021-07-06 16:21:45 660

原创 Linux线程库

线程引言Linux上最有名的线程库是LinuxThreads和NPTL,它们都是采用1:1的方式实现的。现代Linux上模式运行的线程库是NPTL(Native POSIX Thread Library)。可以使用getconf GNU_LIBPTHREAD_VERSION查看当前系统上使用的线程库。从Linux内核2.6开始,提供了真正的内核线程。新的NPTL线程库应运而生。相对于LinuxThreads,NPTL的主要优势在于:内核线程不再是一个进程,这就避免了很多进程模拟内核线程

2021-06-29 21:16:58 1156 1

原创 shell 检查文件

test命令的文件比较功能 比较 功能描述 -d file 检查file是否存在并是一个目录 -e file 检查file是否存在 -f file 检查file是否存在并是一个文件 -r file 检查file是否存在并可读 -sfile 检查file是否存在并非空 -wfile 检查file是否存在并可写 -xfile 检查file是否存在并可执行 -Ofile 检查file是否存在并属于当前用户 -Gf...

2021-06-26 16:50:48 262

原创 建造者模式(套餐模式)

这里说建造者模式是一种套餐模式,哈哈哈,套餐指的就是实现建造者抽象类的类。建造者模式事最复杂的创建型模式,它将客户端与包含多个组成部分的复杂对象的创建过程分类,客户端无需知道内部组成部分与装配方式,只需要知道建造者的类型即可。定义该模式用于创建一个包含多个组成部分的复杂对象,可以返回一个完整的对象给用户,即就是给需要创建复杂对象的各个成员变量进行赋值,赋什么值。建造者关注复杂对象如何一个一个创建完成的。而作为使用者,则不关心。建造者模式包含下面几个角色1 Builder(抽象建造者)

2021-06-23 11:46:41 613 1

原创 抽象工厂模式(C++)

抽象工厂模式是常见的设计模式,他比工厂模式的抽象程度更高。在工厂方法模式中,具体工厂只需要生产一种具体产品,

2021-06-22 20:28:34 211 1

原创 静态联编译和动态联编译

联编将源代码中的函数调用解释为执行特定的函数代码块被称为函数名联编(binding)C语言中,每个函数名都对应一个不同的函数,在C++中由于函数重载的缘故,这项任务更复杂。编译器必须查看函数参数以及函数名才能确定使用那个函数。然而C/C++编译器可以在编译过程完成这种联编。在编译过程中进行联编被称为静态联编(static binding)。然而虚函数使得这项工作变得更困难。编译器必须生成能够在程序运行时选择正确的虚方法的代码,这被称为动态联编(dynamic binding)。#incl.

2021-06-21 09:07:15 56

原创 Qt编写大型应用程序的一般步骤

在开发桌面应用程序中,必须要确定开发代码框架,如果没有合理的代码框架,不知道何时加载相应的资源,所以本篇文章以QML为例介绍QT GUI程序一般步骤。QML是为了降低

2021-06-18 17:29:34 1157

原创 工厂方法模式

我们使用包含如下角色:1 Factory(工厂角色)2 Product (抽象产品角色)3 Concrete(抽象产品角色)gai

2021-06-15 17:44:24 92

p2p网络实现(C++)

C/C++实现一个p2p网络集群,并通信

2021-03-05

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

TA关注的人

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