自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

PJZero

c++/python, 计算机视觉, 数据挖掘

  • 博客(124)
  • 资源 (1)
  • 收藏
  • 关注

原创 ffmpeg使用固定码率控制策略——CBR

ffmpeg怎么使用libx264/lib265的固定码率策略编码

2022-09-19 14:11:01 1074 1

原创 ffmpeg编码的主要过程

解释ffmpeg做H264编码的主要步骤

2022-07-09 22:07:06 716

原创 Python高级数据结构——堆

文章目录Python高级数据结构——堆概念接口函数初始化 Heapify弹出最大/最小值push数据heapreplaceMerge两个数组前n个最大/小的数应用堆排序参考Python高级数据结构——堆概念在一个 最小堆 (min heap) 中,如果 P 是 C 的一个父级节点,那么 P 的 key(或 value) 应小于或等于 C 的对应值。 正因为此,堆顶元素一定是最小的,我们会利用这个特点求最小值或者第 k 小的值。在一个 最大堆 (max heap) 中,P 的 key(或 value)

2022-05-30 19:50:41 754

原创 Google软件测试之道

Google软件测试之道质量和测试的关系书中的观点是:质量不是被测试出来的,如果在最开始设计的时候就是错的,那它永远不会变成正确。质量不等于测试。当你把开发过 程和测试放到一起,就像在搅拌机里 混合搅拌那样,直到不能区分彼此的 时候,你就得到了质量。我的看法:狭义的测试指的是今天国内普遍认为的,由专职的QA针对软件功能进行测试。广义的测试指的是从代码编写开始,每一次代码被执行的过程,这里包括单测,自动化测试,集成测试,端到端测试,产品走查,上线之后的用户使用等流程。Q

2022-05-15 15:14:34 1574

原创 git获取代码失败,没有权限

一个正常权限校验的流程包括public key被正确的上传到git平台本地的public key和private key能够正常映射git在传输的时候能够用到这两个key,对数据进行加密客户端使用的git账号是有权限的获取这个代码的从上面的过程,当遇到Permission denied (keyboard-interactive,publickey).这个错误的时候,我们可以按照以下流程排查检查git 平台的public key是否和本地的public key一致public key和.

2022-02-24 14:04:01 2776

原创 在ARM机器上搭建FTP服务

文章目录配置文件chroot_listvsftpd.conf启动ftp服务器配置文件chroot_list关于配置内容的描述,见https://blog.csdn.net/weixin_42401281/article/details/116821063#/有效的文件内容lstcmlftpftpusrvsftpd.conf关于配置内容的描述,见:https://linux.die.net/man/5/vsftpd.conf#/由于字段很多,日常使用可以直接copy代码:liste

2022-02-18 16:11:54 2205

原创 [pion]写一个简单的turn服务器

100行不到,运行一个最简单的TURN服务器。源码package mainimport ( "fmt" "github.com/pion/turn/v2" "log" "net" "net/http" "strconv")var turnServer *turn.Serverfunc startTurn(publicIP string, listenPort int, realm string, username string, password string) { udpL

2022-01-09 23:01:53 1671

原创 [pion]测试你的TURN服务器

把下面的html用浏览器打开,填入你想要测试的turn服务器<html><header> <title>ice测试</title></header><body><label for="serverAddress"></label><input id="serverAddress" value="turn:127.0.0.1:13902"/><br/><

2022-01-09 22:58:54 1742

原创 【pion】ice-single-port解析

example说明这个example是一个用来展示功能:可以在相同的udp端口上连接不同的客户端PeerConnection,每个客户端的PeerConnection的端口是客户端自己生成的,服务器的端口是最开始就确定好的,并且被所有的客户端生成。此外,这个example还模拟了通过datachannel做基本的数据收发。有一个相对比较完整的流程,可以作为入门参考。整体流程#mermaid-svg-D9jJ41npkR2HysJu .label{font-family:'trebuchet ms',

2022-01-09 16:46:28 1020

原创 轻量级websocket探活脚本

兼容性极好,只要有python,基本就可以跑!import socketHOST="localhost"PORT=8080path="/demonstration"sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)sock.settimeout(2.0)try: sock.connect((socket.gethostbyname(HOST), PORT))except: exit(2)handshake =

2021-12-01 14:52:21 353

原创 用Python实现一个毫秒级Timer,间隔执行各种任务

问题如果想间隔一定时间发送一些数据,或者处理某一个任务,python里面比较简单的实现方式是sleep,但是简单的sleep会随着任务的持续执行,和最开始的时间偏离越来越大。主要原因有两个python中sleep执行的时间并不精确,难以做到毫秒级的精度任务本身执行的时候会和sleep执行的时间累加为了解决上面两个问题,设计了下面的代码实现from time import sleep, timeclass RepeatedTimer(object): def __init__(s

2021-10-27 12:21:22 3910

原创 CV Mat转Av Frame,百分百运行!

看了网上很多关于如果把cv::Mat转为AvFrame的教程,实践下来都没有达到满意的效果,多少有些兼容性或者无法运行的问题,于是我决定查找文档,自己实现一个。同时为了致敬雷神,把自己实现的思路和完整可运行的代码贡献出来,大家一起学习完整样例运行环境MacBook Pro (13-inch, M1, 2020)FFmpeg 4.2OpenCV 2.4.13.7//// Created by pengjian05 on 2021/10/23.//#include<string&gt

2021-10-23 15:10:40 1004 3

原创 一个简单的glog实现

#include <iostream>#include <sstream>#define DEBUG 1#define INFO 2#define WARNING 3/** * https://stackoverflow.com/questions/17595957/operator-overloading-in-c-for-logging-purposes */class Logger {private: /** * 引用类型必须使用:初始化

2021-09-12 13:18:02 172

原创 IVF容器解析和python代码示例

文章目录ivf格式介绍文件头格式帧格式demowriterreader完整样例参考ivf格式介绍ivf是一个非常简单的文件格式,可以用来传输vp8/vp9的裸数据,多字节数据用小端解析或编码。就我目前所了解的,ivf格式有几个特点:只包含视频数据,没有音频数据,因此播放ivf文件的时候是没有的声音的。视频支持vp8和vp9的编码格式,但其实ivf格式本身并没有限制,codec fourcc可以写其他的编码格式扩展性比较差,没有扩展字段使用场景极少,相关材料也不多极其简单,可以借助ivf很方便

2021-09-12 13:00:32 770

原创 为什么要有虚函数

不用虚函数#include <iostream>class A {public: void output() { std::cout << "I am parent." << std::endl; }};class B: public A {public: void output() { std::cout << "I am child." << std::endl;

2021-08-29 16:31:47 573

原创 【流媒体】如何解析RTMP的Chunk Basic Header

这里只讨论如何实践,不涉及为什么这么设计basic由两部分组成,分别是:fmt和csid,其中:fmt决定了后面MessageHeader的格式,csid表示一个媒体流通道,( notice:不是一个流,对相同流的推拉一般而言是不同的csid)下面的代码很好的展示了如何解析basic header的内容,结合代码和rfc,可以更好的理解解析过程。public class BasicHeader { @Getter private int fmt; @Getter.

2021-07-04 15:20:04 647

原创 【必知必会】Padding和Packing

文章目录Padding小问题FIRSTPacking问题答案FIRST answer参考扩展问题开门见山,先解释一下paddingPadding字面含义,垫子,在C中,和它差不多意思的是:alignment,对齐。在32位的系统中,为了提高计算速度,经常需要对内存中的数据进行32bit的对齐。假设我们有下面这样一个数据结构struct House { char index; int price;}如果不考虑对齐问题,我们很容易计算出这个数据结构在内存中所占用的内存大小:1 +

2021-07-04 14:04:57 402

原创 用python撸一个堆

from typing import Listclass Heap: arr = [] def __init__(self) -> None: self.arr = [] def __init__(self, arr: List[int]) -> None: self.arr = arr self._build(arr) def _build(self, arr: List[int]) -&

2021-06-14 13:55:08 100

原创 【操作系统】僵尸进程

文章目录定义如何产生避免产生僵尸进程的代码:扩展孤儿进程特点参考:定义进程已经退出了,但是还保留着进程表记录在子进程退出时,如果直接抛弃这个进程的所有结果,这个进程的返回值会丢失。所以需要父进程等待接收这个返回值,即使这个进程不占用任何数据,除了进程表里的记录——这就产生了僵尸进程。如何产生产生僵尸进程的代码pid=fork();if (pid==0) { exit(0); // <--- zombie is created on here} else { // so

2021-06-13 12:32:41 234

原创 一个简单的HashMap

import java.util.ArrayList;public class CustomHashmap<K, V> { private final ArrayList<V> list; private final int initialCapacity; public CustomHashmap(int initialCapacity) { this.initialCapacity = initialCapacity;

2021-06-13 11:44:00 101

原创 push_back 和 emplace_back 的差异,清晰易懂!

文章目录push back调用方式传入右值传入左值emplace_back 调用push back调用方式传入右值如果调用 push_back,传入的是右值vec_bc.push_back(BaseClass("b3", 1));则,需要执行以下步骤1. 调用构造函数,构造出右值A2. 调用 move 构造函数,copy 数据到 vector 的数据空间 的对象 B3. 在参数声明周期结束后,调用A 的析构函数,传入左值如果调用 push_back,传入的是左值{ Bas

2021-05-13 10:41:54 4854 1

原创 【数据库】数据库隔离级别

数据库隔离级别文章目录数据库隔离级别问题脏读示意图不可重复读示意图幻读和不可重复读的区别解决思路串行化未提交读简单的比较隔离级别未提交读提交读重复读串行化参考问题数据库在设计之初就被要求满足ACID(原子性,一致性,独立性,持久性)四大特性,但是在并发读写的时候,如果不做限制,经常会遇到一些奇奇怪怪的问题脏读A事务读取了B事务还没有提交的数据,而这个数据属于B事务在处理过程中产生的脏数据,可能只是临时状态。怎么理解这个临时呢?当B因为后续的异常导致回滚B后续的操作中还有对这个数据的修改那

2021-02-21 17:11:13 108

原创 【云原生】Spring Cloud主要内容

SpringBoot单体服务的基础,其设计初衷是简化Spring应用复杂的搭建及开发过程。框架提供了一套简单的模块依赖和管理工具,从而避免了开发人员处理复杂的模块依赖和版本冲突问题提供打包即用的Web服务,帮助开发人员快速进入开发配置中心Spring Cloud Config为服务组件提供一套在线的配置服务;提供搭建配置中心所需要的Server和Client。统一配置,统一管理自动化更新服务注册与发现这是通过Spring集成的Kureka或Consul实现的,包括以下功能:服务

2021-02-16 12:26:54 267

原创 [分布式]你应该知道的事务

文章目录事务什么是事务要求组成部分简单分类CAP理论分布式事务的问题来源分布式事务解决方案两阶段提交——强一致性准备阶段提交阶段总结三阶段提交——强一致性预询盘预提交提交总结事件队列方案——最终一致性方案TCC补偿模式——最终一致性方案缓存和数据库一致解决框架总结参考事务什么是事务简单来说就是完成一系列由副作用事情,要求这些事情要么都成功,要么都不成功。以我们买键盘为例,购买一个键盘简化成三个步骤:扣款→发货→收货。这三个事情都得完成了,咱们一个购买键盘的操作才算成功;假设卖家发货失败了,事务就得回

2021-02-14 23:14:37 84

原创 [图形学]OpenGL入门

OpenGL介绍这是什么?一套标准的程序接口,用于绘制二维或三维图形。我会怎么用它我们可以那它来做游戏,三维建模,地图绘制等OpenGL ES是什么?OpenGL ES (OpenGL for Embedded Systems) 是 OpenGL 三维图形 API 的子集,针对手机、PDA和游戏主机等嵌入式设备而设计。WebGL是什么OpenGL在浏览器上的实现,可以为HTML Canvas提供硬件加速渲染。主要功能让我们以绘制桌子为例,要让一个三维的桌子在屏幕上显示出来,需要几个步骤

2021-02-13 10:58:17 234

原创 【linux】线程的cpu亲和性

文章目录说明实现设置亲和性获取亲和性参考文档说明可以将不同的线程设置到不同的cpu上运行,以此来是发挥多核效率实现设置亲和性bool binding_cpu(std::thread& thr, int cpuid) {#ifdef __linux__ int result = 0; cpu_set_t cpuset; CPU_ZERO(&cpuset); CPU_SET(cpuid, &cpuset); result = pthre

2020-12-06 19:06:09 492

原创 【linux】开关超线程

查看是否有开启超线程lscpu | grep ThreadThread(s) per core: 2如果输出了这个,就表示有开启超线程啦~开关超线程脚本#!/bin/bashHYPERTHREADING=1function toggleHyperThreading() { for CPU in /sys/devices/system/cpu/cpu[0-9]*; do CPUID=`basename $CPU | cut -b4-` echo -en "CPU: $CPUID

2020-12-06 18:54:59 4331 1

原创 【工具】快速测试两个服务器之间的带宽

文章目录测试安装iperf3在服务器上开启端口监听在终端上访问示例输出指定数据量指定时间其他项目主页测试安装iperf3apt install iperf3在服务器上开启端口监听iperf3 -p 2228 -s监听在2228端口在终端上访问这里我们通过localhost测试localhost访问的带宽情况# 发送指定数据量的数据到服务端iperf3 -p 2228 -c 127.0.0.1 -n 131072000 -f M# 一定时间内发送iperf3 -p 2228 -c

2020-12-06 18:29:03 2038

原创 【C++】打印十六进制数据

说明大家可能在做流媒体开发,或者网络相关开发的时候经常需要对数据进行逐个字节的分析,这个时候如果能在日志里面通过二进制,或者十六进制的方式打印出字节的详细内容,这样就能很方便的分析数据了。这里有个很小的代码片段,可以完成这个功能片段std::string to_hex(unsigned char* data, int len) { std::stringstream ss; ss << std::uppercase << std::hex << s

2020-12-06 18:09:00 10921

原创 [C++]耗时计时器最佳实践

背景我们在写代码的时候总是会遇到各种需要对程序某一个部分进行性能检测的情况,在Java中我们可能会很自然的想到通过记录开始和结束的时间戳,然后做个减就得出耗时。但是在C++这种在栈结束会自动清理内存的语言中,我们可以利用这个特点来做一个简单的计时器。实现#include <iostream>#include <sys/time.h>class RealTimeGardMs {public: RealTimeGardMs(const std::string&amp

2020-10-18 18:06:07 250

原创 TLS证书分类

文章目录按照加密方式分类按照保护的域名数量分类按照加密方式分类类别说明参考价位注意域名型证书(DV)只验证网站的有效性和所有权,快速审核,无需人工,一般几分钟内生效。1170不支持通配符证书和多域名证书企业型证书(OV)处理验证网站所有权之后,还需要验证相关的企业信息,不适合个人申请,一般1-5个工作日生效2400增强型证书(EV)信任等级最高,审查更加严格,需要提交一些扩展信息用于验证,一般用于对安全要求比较高的网站4122不支持通配符证书这

2020-10-18 17:31:01 552

原创 【cpp】记录一次踩坑

//// Created by pengjian05 on 2020-07-29.//#include <bitset>#include <cstdio>#include <cstdlib>#include <fstream>#include <iostream>int main(int argc, char** argv) { auto file_path = "base.bin"; std::fst

2020-08-27 15:32:53 248

原创 shared_ptr和 double star

记录一个关于shared_ptr的代码片段// Example program#include <iostream>#include <string>#include <memory>class Data {public: Data(int a): a(a) { std::cout << "construct" << std::endl; } ~Data() { std::co

2020-08-25 16:47:41 101

原创 在终端使用代理

网页可以很方便的通过系统代理或者用类似于SwitchyOmega的方式使用代理,但终端的方法稍微不一样一点要注意的是,如果使用代理,会导致其他请求因为走了一层代理而导致访问变慢临时使用一下# export http_proxy=http://proxyAddress:portexport http_proxy=http://127.0.0.1:1080export https_proxy=http://127.0.0.1:1080# or 走 sock5代理export http_prox

2020-06-08 10:02:36 1164

原创 增加文件上传速度的办法

压缩它,效果非常明显也非常tar czf the.bin target.bin分块上传# split, you will have split -b 100m target.bin# combinecat xa xb > target.bin

2020-06-05 16:34:04 618

原创 [pillow]读写二进制图片

读入二进制图片from PIL import Imageimport numpy as npfd = open("input.raw", 'rb')image_bytes = fd.read()fd.close()nparr = np.asarray(bytearray(image_bytes), dtype="uint8")image = nparr.reshape((960, 540)) # (height, width)im = Image.fromarray(image, mod

2020-06-01 20:53:44 2347 2

原创 【云计算】为commit镜像添加entrypoint

在通过docker commit制作镜像的时候,如果是直接commit通常来说是没有entrypoint的,这在k8s等场景下会带来一点麻烦。要解决这个问题也很简单,有以下两个办法可以实现编写dockerfile实现假设我们有一个container = 93c11d3b5700$docker commit 93c11d3b5700 test:no_entrypoint编写dockerf...

2020-04-12 16:32:02 1373

原创 为什么要用引用传值

片段1#include <iostream>#include <string>class Point {public: Point(int x, int y) { this->x = x; this->y = y; } ~Point() { std::cout << ...

2020-03-07 14:25:58 401

原创 【spring】给component命名 & 设置scope

文章目录设置scope命名设置scope@Component@Scope(value = ConfigurableBeanFactory.SCOPE_SINGLETON)public class UserService { private String userName; public String getUserName() { return userName; ...

2019-12-16 21:19:51 1974

原创 Java 删除某个目录

删除目录或文件,如果目录不为空的话,则递归删除目录下的所有内容/** * 删除文件或目录 * 如果是目录则递归删除目录下所有内容 * ps: 不支持link类型的目录 * * @param path 要删除的文件 * @return * @throws IOException */public static boolean delete(Path path) throws I...

2019-12-14 19:19:22 321

20个优选简历

简介 ? 大气 ? 时间轴?块状? 找工作必备的20个简历模板,还可以参考别人的简历内容,

2018-03-20

空空如也

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

TA关注的人

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