自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

宫浩然的博客

分享一些学习经历

  • 博客(75)
  • 收藏
  • 关注

原创 aes 256 ecb 加解密 pkcs7补全 python JS

2、MySQL 中只有基于unix系统才可以调AES_DECRYPT,AES_DECRYPT,不同版本需要注意。1、不同语言,不同库AES加解密有差异, 注意不要踩坑。1、DB查询手机号,若未加密,批量更新回填。2、查询加密的手机号,解密显示。

2022-10-24 21:31:03 1604 1

原创 基于COTURN实现WebRTC的P2P项目

基于COTURN实现WebRTC的P2P项目

2022-01-09 22:37:04 2461

原创 FFmpeg命令学习

前言FFMPEG是特别强大的专门用于处理音视频的开源库。你既可以使用它的API对音视频进行处理,也可以使用它提供的工具,如 ffmpeg, ffplay, ffprobe,来编辑你的音视频文件。本文将简要介绍一下 FFMPEG 库的基本目录结构及其功能,然后详细介绍一下我们在日常工作中,如何使用 ffmpeg 提供的工具来处理音视频文件。FFMPEG 目录及作用· libavcodec: 提供了一系列编码器的实现。· libavformat: 实现在流协议,容器格式及其本IO访问。· libav

2021-12-07 20:42:58 670

原创 go语言学习网站大全

最近在学习go语言,搜集了一些学习网站,也有大量的面试题,及练手项目分享给大家,一起学习go语言系列go Interview 语雀Go Interview · 语雀go 官方blogThe Go Programming Language Bloggo教程&框架前景 · Go语言中文文档go网址导航Golang导航 - 学Go从这里开始!go地鼠文档地鼠文档go 语言中文网首页 - Go语言中文网 - Golang中文社区go语言基础学习 frank–golanghtt

2021-09-26 11:12:57 2817

原创 go语言教程--环境配置、学生认证、第一个go程序

GO语言简介安装第一个go程序go入门简介想必大家多少都有听过golanggo语言21世纪以来的google公司开发的新型的编译型语言,效率与JAVA语言持平而且编译较快,语法简单,天生支持并发在很多公司都已经使用go语言来做开发,例如:知乎、百度、滴滴、腾讯等而go语言的人才缺口很大,甚至很多公司都无要求,只要你有意愿转go就会接纳你go语言的潜力非常巨大,下面与作者一起来学习go语言~安装下载goloang的镜像网址https://gomirrors.org/一路next安装,

2021-08-27 09:47:33 634

原创 OS中常见的面试题

OS的常见问题OS中都有什么锁互斥锁读写锁自旋锁内核态和用户态内存管理分段存储和分页存储的区别以及优缺点页式管理段式管理虚拟内存的段页式存储地址变换中,有快表和没快表,有什么区别?页面置换方法虚拟内存虚拟内存的好处简化链接简化加载简化共享简化内存分配虚拟内存的代价抖动你知道是什么吗?它也叫颠簸现象内存溢出与内存泄漏系统调用的过程Linux文件系统linux中链接分为硬链接和软链接。硬链接软链接linux 下建立一个文件的步骤五种IO模型Unix io存在五种模型什么是同步io什么是异步ioselect()

2021-08-08 11:06:43 989

原创 总结--死锁--面试中高频考点

死锁死锁的概念死锁产生的原因和必要条件(1)资源分类(2)死锁产生的原因(3)死锁产生的必要条件处理死锁的基本方法死锁的预防(1)互斥条件(2)不剥夺条件(3)请求与保持条件(4)环路等待条件死锁的避免(1)安全状态与不安全状态(2)银行家算法死锁的检测和解除(1)死锁检測(2)死锁检测算法(3)死锁解除死锁与饿死死锁的概念在多道程序系统中,由于多个进程的并发执行,改善了系统资源的利用率并提高了系统的处理能力。然而,多个进程的并发执行也带来了新的问题–死锁。当多个进程因竞争系统资源或相互通信而处于

2021-07-20 15:53:32 1062

原创 总结--计算机网络--面试高频考点

目录GET 和 POST 的区别HTTP 与 HTTPS 建立连接的过程HTTPHTTPS客户端为什么信任第三方证书HTTP 是不保存状态的协议,如何保存用户状态基于 Session 实现的会话保持基于 Cookie 实现的会话保持状态码HTTP/1.1 和 HTTP/1.0 的区别HTTP/1.X 和 HTTP/2.0 的区别HTTP/3 了解吗DNS 的作用和原理网页解析全过程【用户输入网址到显示对应页面的全过程】SYN FLOOD 是什么为什么服务端易受到 SYN 攻击AES 的过程GET 和 PO

2021-07-20 10:10:50 699 2

原创 总结--几种设计模式--面试中高频考点

目录设计模式有 6 大设计原则:单例模式:实现方式:工厂模式:包括简单工厂模式、抽象工厂模式、工厂方法模式观察者模式:装饰模式:设计模式有 6 大设计原则:单一职责原则:就一个类而言,应该仅有一个引起它变化的原因。开放封闭原则:软件实体可以扩展,但是不可修改。即面对需求,对程序的改动可以通过增加代码来完成,但是不能改动现有的代码。里氏代换原则:一个软件实体如果使用的是一个基类,那么一定适用于其派生类。即在软件中,把基类替换成派生类,程序的行为没有变化。依赖倒转原则:抽象不应该依赖细节,细节应该依

2021-07-20 09:24:00 428

原创 常见的C++面试题

目录new 和 malloc 的区别,delete 和 free 的区别malloc 的原理:、struct 和 union 的区别volatile 的作用?是否具有原子性,对编译器有什么影响?auto 类型推导的原理构造函数、析构函数是否需要定义成虚函数?为什么?深拷贝和浅拷贝的区别new 和 malloc 的区别,delete 和 free 的区别在使用的时候 new、delete 搭配使用,malloc、free 搭配使用。malloc、free 是库函数,而new、delete 是关键字。-

2021-07-20 09:14:24 595

原创 用户态和内核态区别

1、linux进程有4GB地址空间,如图所示:3G-4G大部分是共享的,是内核态的地址空间。这里存放整个内核的代码和所有的内核模块以及内核所维护的数据。2、特权级的概念:对于任何操作系统来说,创建一个进程是核心功能。创建进程要做很多工作,会消耗很多物理资源。比如分配物理内存,父子进程拷贝信息,拷贝设置页目录页表等等,这些工作得由特定的进程去做,所以就有了特权级别的概念。最关键的工作必须交给特权级最高的进程去执行,这样可以做到集中管理,减少有限资源的访问和使用冲突。inter x86架构的cpu一共有

2021-07-14 23:28:12 1837

原创 2021-7-7问题总结

问题同步、异步、阻塞、非阻塞的概念进程间的通信方式有哪些?进程的调度算法有哪些?协程比线程的优势手写智能指针类sql 查找平均分大于90的学号和平均分同步、异步、阻塞、非阻塞的概念同步异步,阻塞非阻塞是两个不同层面的问题,一个是operation层面,一个是kernal层面。同步异步最大的区别在于是否需要底层的响应再执行。阻塞非阻塞最大的区别在于是否立即给出响应。同步:当一个同步调用发出后,调用者要一直等待返回结果。通知后,才能进行后续的执行。异步:当一个异步过程调用发出后,调用者不能立刻得到返回结

2021-07-07 10:30:05 335 1

原创 归并/堆排/快排/二分---C++实现

#include <iostream>#include <algorithm>#include <vector>#include <map>#include <set>#include <string>#include <list>using namespace std;int binSearch(vector<int>arr,int start,int end,int key){ int

2021-07-07 10:22:43 337

原创 面试中常问到的几个TCP问题

TCP两次握手可以吗三次握手过程中,是否可携带数据为什么建立连接握手三次,关闭连接时需要四次为什么TIME_WAIT 状态需要经过 2MSL 才能返回到 CLOSE 状态什么是半连接队列?ISN 代表什么?意义何在?ISN 是固定不变的吗?ISN为何要动态随机?两次握手可以吗可以从几个方面来解释:(一)确认双方的收发能力TCP 建立连接之前,需要确认客户端与服务器双方的收包和发包的能力。第一次握手:客户端发送网络包,服务端收到了。这样服务端就能得出结论:客户端的发送能力、服务端的接收能力是正常

2021-06-24 18:23:56 498

原创 判断链表是否有环--递归

判断链表是否有环方法一:定义快慢指针,两指针相遇则为有环方法二:递归异常判断当节点的下一个等于节点则有环返回真让下一个节点指向前一个看下一个节点class Solution {public: bool hasCycle(ListNode *head) { if(!head || !head->next)return false; if(head->next == head) return true; ListNode *

2021-05-28 18:01:25 353

原创 最小的K个数

最小的K个数描述给定一个数组,找出其中最小的K个数。例如数组元素是4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4。如果K>数组的长度,那么返回一个空的数组示例1输入:[4,5,1,6,2,7,3,8],4返回值:[1,2,3,4]采用快排的思想对数组[l, r]一次快排partition过程可得到:[l, p)p[p+1, r)三个区间,[l,p)为小于等于p的值[p+1,r)为大于等于p的值。然后再判断p,利用二分法如果[l,p), p

2021-05-28 15:34:40 182

原创 音视频、编码、rtmp学习

音视频学习视频数据源YUVYUV基本介绍YUV与RGB的相互转化音视频数据源PCM声音与音频音频采集与关键名词PCM数据的基本使用视频数据源YUV一个视频简单点理解就是播放一张张画面。我们就从这里面把视频的相关名词扯出来:①一张画面,一张画面也就一帧画面;属性为图像的大小或尺寸称分别率;画面的成像组成的方式有:rgb和yuv;跟计算器关联起来还不是用0101的比特来表示②当画面遇上了时间,爱的结晶就出来了:比特率、帧率和刷新率。接下来我们简单介绍一下他们的作用:视频帧: 常见有I帧(关键帧,含完整

2021-05-13 11:32:18 732

原创 正则表达式

目录简介正则表达式引擎的内部工作机制常用表达式简介正则表达式,又称规则表达式。(英语:Regular Expression,在代码中常简写为regex、regexp或RE),计算机科学的一个概念。正则表达式通常被用来检索、替换那些符合某个模式(规则)的文本。许多程序设计语言都支持利用正则表达式进行字符串操作。例如,在Perl中就内建了一个功能强大的正则表达式引擎。正则表达式这个概念最初是由Unix中的工具软件(例如sed和grep)普及开的。正则表达式通常缩写成“regex”,单数有regexp、re

2021-05-09 22:39:55 289

原创 GDB调试

目录简介基本使用生成调试信息启动GDB 的方法程序运行设置断点观察点条件断点维护停止点为停止点设定运行命令调试代码查看运行时数据程序变量自动显示历史记录改变程序的执行跳转执行产生信号量强制函数返回强制调用函数显示源代码调试已运行的进程线程查看栈信息信号catch实战简介UNIX及UNIX-like下的调试工具。或许,各位比较喜欢那种图形界面方式的,像VC、BCB等IDE的调试,但如果你是在 UNIX平台下做软件,你会发现GDB这个调试工具相比于VC、z的优点是具有修复网络断点以及恢复链接等功能,比BCB

2021-05-09 21:09:52 264

原创 Shell脚本、Makefile

目录shell脚本shell和shell脚本简介基本使用变量:Shell运算符Shell中的字符串Shell的数组:printf函数:Shell 的循环语句Makefile简介make关于程序的编译和链接编写shell脚本Shell Script ,Shell脚本与Windows/Dos下的批处理相似,也就是用各类命令预先放入到一个文件中,方便一次性执行的一个程序文件,主要是方便管理员进行设置或者管理用的。但是它比Windows下的批处理更强大,比用其他编程程序编辑的程序效率更高,它使用了Linux

2021-05-09 20:31:37 876

原创 FFmpeg+SDL+Qt 构建简单视频播放器

本文主要讲述如何利用FFmpeg,SDL,和 Qt构建一个简单的视频播放器。FFmpeg是一个音视频处理的开源库,提供了C接口用于音视频的编解码、封装、流处理。在本教程中主要利用FFmpeg对视频封装文件进行解封装,解码。SDL是音视频播放和渲染的一个开源库,主要利用它进行视频渲染和音频播放。Qt主要用于写播放器简单UI,以及播放暂停音视频选择按钮。首先要了解音视频的一些基本知识,平常所说的MP4,mkv文件是一个音视频封装文件,里面一般包含音频视频两条流,每条流存储着编码信息以及展示时间基等信息。

2021-05-06 21:09:35 1061 4

原创 存储器分级介绍

分级原因从需求上讲,我们需要存储器速度快、体积小、空间大、能耗低、散热好、断电数据不丢失。但在现实中,往往无法把所有需求都实现。有一下原因:如果一个存储器的体积小,那它存储空间就会受到制约。如果一个存储器电子元件密度很大,那散热就会有问题。因为电子元件都会产生热能,所以电子元件非常集中的 CPU,就需要单独的风扇或者水冷帮助电子元件降温。如果一个存储器离 CPU 较远,那么在传输过程中必然会有延迟,因此传输速度也会下降。既然不能用一块存储器来解决所有问题,那就必须把需求分级。分级策略一种

2021-05-03 10:18:41 2558

原创 数据库面试总结

数据库MyISAM索引与InnoDB索引的区别?InnoDB索引是聚簇索引,MyISAM索引是非聚簇索引。InnoDB的主键索引的叶子节点存储着行数据,因此主键索引非常高效。MyISAM索引的叶子节点存储的是行数据地址,需要再寻址一次才能得到数据。InnoDB非主键索引的叶子节点存储的是主键和其他带索引的列数据,因此查询时做到覆盖索引会非常高效。视图为什么要使用视图?什么是视图?为了提高复杂SQL语句的复用性和表操作的安全性,MySQL数据库管理系统提供了视图特性。所谓视图,本质上是一种虚拟

2021-05-03 10:14:43 392

原创 摩尔投票法

摩尔投票法(Boyer–Moore majority vote algorithm)出自论文《MJRTYA Fast Ma jorityVote Algorithm》算法解决的问题是如何在任意多的候选人(选票无序),选出获得票数最多的那个。常见的算法是扫描一遍选票,对每个候选人进行统计的选票进行统计。当候选人的数目固定时,这个常见算法的时间复杂度为:O ( n ) ,当候选人的数目不定时,统计选票可能会执行较长时间,可能需运行O ( n 2 ))的时间。当选票有序时,可以很容易编出O ( n ) 的

2021-04-25 11:48:42 745

原创 力扣461.汉明距离

汉明距离在信息论中,两个等长字符串之间的汉明距离是两个字符串对应位置的不同字符的个数。换句话说,它就是将一个字符串变换成另外一个字符串所需要替换的字符个数。布赖恩·克尼根算法class Solution: def hammingDistance(self, x, y): xor = x ^ y distance = 0 while xor: distance += 1 # remove the .

2021-04-25 11:19:59 183

原创 会议聊天室--开发文档

会议聊天室背景疫情来袭,兴起了线上教学、工作的模式,展现了“互联网+”时代的优势;群众们万众一心、足不出户抗疫的同时,工作和学习却有条不紊的进行,直播、会议类的APP起了关键的作用。那么能否开发一款类似的程序呢?为将所学知识融为一起并加以应用和练习,并迎互联网的热潮,故开发此会议聊天室。目录背景 1一、 设计目的 21.1功能与要求 21.2 环境选择 2二、 实现 32.1网络模块 32.2客户端 32.3 会议模块 42.4 服务器模块 12三、 优化 123.1视频与音

2021-04-17 22:53:38 591

原创 epoll+threadpool高并发网络IO模型的实现

目录网络模型的选择ThreadPool方案:对比:实现生产者消费者模型生产者功能:消费者功能:线程池任务生产者epoll基本实现逻辑网络模型的选择当多个任务到来时需要对其进行及时响应,并将任务下发给特定的处理线程,完成对应的任务。如果只用传统的服务器模型:同步阻塞、单线程进行listen轮询监听的话,那效率和并发往往达不到需求。而我们借助 epoll 的话就会很完美的解决这个问题关于epoll请阅读:Linux下的I/O复用与epoll详解常用的网络IO模型 :五种网络IO模型ThreadPool

2021-04-12 19:41:35 686

原创 剑指offer 58.对称的二叉树

对称的二叉树题目:输入一颗二叉树,判断是否对称(镜像)题解:递归1.设置一个递归函数isSame(r1, r2),表示如果对称,返回true,否则返回false2.递归终止条件:r1nullptr && r2nulllptr, 直接返回true,否则,如果只有一个为nullptr,返回false3.下一步递归:如果r1->val == r2->val, 则isSame(root1->left, root2->right) && isSame(

2021-03-19 15:39:49 167

原创 面试 -- C++简答题

C++简答题1.C++中什么数据分配在栈或堆,静态存储区以及常量存储区中?堆区是动态分配的数据 通过malloc及new来申请动态分配存储栈区是存储系统自动分配空间的变量, 如局部变量静态存储区存放全局变量和静态变量, 未被初始化或初始化为0的存放在bss段, 非0全局变量的存在数据段的数据区 . 程序结束后有系统释放常量存储区存放常量字符串就是放在这里的。 程序结束后由系统释放程序代码区—存放函数体的二进制代码2.C++编译器自动为类产生的四个缺省函数是什么?默认构造 , 拷贝构造 ,析构

2021-03-17 21:29:45 1773

原创 力扣160. 相交链表

相交链表编写一个程序,找到两个单链表相交的起始节点。如下面的两个链表:在节点 c1 开始相交。示例 1:输入:intersectVal = 8, listA = [4,1,8,4,5], listB = [5,0,1,8,4,5], skipA = 2, skipB = 3输出:Reference of the node with value = 8输入解释:相交节点的值为 8 (注意,如果两个链表相交则不能为 0)。从各自的表头开始算起,链表 A 为 [4,1,8,4,5],链表 B.

2021-03-16 19:05:35 175

原创 力扣141.环形链表

141. 环形链表给定一个链表,判断链表中是否有环。如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。注意:pos 不作为参数进行传递,仅仅是为了标识链表的实际情况。如果链表中存在环,则返回 true 。 否则,返回 false 。进阶:你能用 O(1)(即,常量)内存解决此问题吗?示例 1:输入:head = [3,2

2021-03-16 18:27:09 169

原创 剑指 Offer 12. 矩阵中的路径

力扣 79请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵中的任意一格开始,每一步可以在矩阵中向左、右、上、下移动一格。如果一条路径经过了矩阵的某一格,那么该路径不能再次进入该格子。例如,在下面的3×4的矩阵中包含一条字符串“bfce”的路径(路径中的字母用加粗标出)。[[“a”,“b”,“c”,“e”],[“s”,“f”,“c”,“s”],[“a”,“d”,“e”,“e”]]但矩阵中不包含字符串“abfb”的路径,因为字符串的第一个字符b占据了矩阵中的第

2021-02-04 15:26:33 228

原创 力扣239. 滑动窗口最大值

给你一个整数数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k 个数字。滑动窗口每次只向右移动一位。返回滑动窗口中的最大值。示例 1:输入:nums = [1,3,-1,-3,5,3,6,7], k = 3输出:[3,3,5,5,6,7]解释:滑动窗口的位置 最大值--------------- -----[1 3 -1] -3 5 3 6 7 3 1

2021-02-04 14:53:29 605

原创 力扣295. 数据流的中位数

中位数是有序列表中间的数。如果列表长度是偶数,中位数则是中间两个数的平均值。例如,[2,3,4] 的中位数是 3[2,3] 的中位数是 (2 + 3) / 2 = 2.5设计一个支持以下两种操作的数据结构:void addNum(int num) - 从数据流中添加一个整数到数据结构中。double findMedian() - 返回目前所有元素的中位数。示例:addNum(1)addNum(2)findMedian() -> 1.5addNum(3)findMedian()

2021-02-04 14:50:54 391

原创 剑指 Offer 37. 序列化二叉树

力扣: 297牛客:JZ61请实现两个函数,分别用来序列化和反序列化二叉树。示例:你可以将以下二叉树: 1 / \ 2 3 / \ 4 5序列化为 “[1,2,3,null,null,4,5]”/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; *

2021-02-04 14:38:15 161

原创 JZ59.按之字型顺序打印二叉树

牛客:JZ59题目描述请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。示例1输入{8,6,10,5,7,9,11}返回值[[8],[10,6],[5,7,9,11]]class Solution {public: vector<vector<int> > Print(TreeNode* pRoot) { vector<vector<in

2021-02-04 14:30:59 154

原创 力扣102. 二叉树的层序遍历

NC80 bfs给你一个二叉树,请你返回其按 层序遍历 得到的节点值。 (即逐层地,从左到右访问所有节点)。示例:二叉树:[3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7返回其层序遍历结果:[ [3], [9,20], [15,7]]/** * Definition for a binary tree node. * struct TreeNode { * int val; *

2021-02-04 14:22:19 153

原创 剑指 Offer 28. 对称的二叉树

请实现一个函数,用来判断一棵二叉树是不是对称的。如果一棵二叉树和它的镜像一样,那么它是对称的。例如,二叉树 [1,2,2,3,4,4,3] 是对称的。 1 / \ 2 2 / \ / \3 4 4 3但是下面这个 [1,2,2,null,3,null,3] 则不是镜像对称的: 1 / \ 2 2 \ \ 3 3示例 1:输入:root = [1,2,2,3,4,4,3]输出:true示例 2:输入:root = [1

2021-02-04 13:52:09 163

原创 剑指Offer 57. 二叉树的下一个节点

牛客 :JZ57给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。分析二叉树的下一个节点,一共有以下情况:1.二叉树为空,则返回空;2.节点右孩子存在,则设置一个指针从该节点的右孩子出发,一直沿着指向左子结点的指针找到的叶子节点即为下一个节点;3.节点不是根节点。如果该节点是其父节点的左孩子,则返回父节点;否则继续向上遍历其父节点的父节点,重复之前的判断,返回结果。代码如下:class Solution {pu

2021-02-03 20:57:35 171

原创 剑指Offer 56. 删除链表的重复节点

题目如下:给定一个排序链表,删除所有含有重复数字的节点,只保留原始链表中 没有重复出现 的数字。示例 1:输入: 1->2->3->3->4->4->5输出: 1->2->5示例 2:输入: 1->1->1->2->3输出: 2->3解题方法11、为了考虑特殊情况,比如1->1-> 2-> 3 这种情况,第一个节点会被删除,所以我们需引入一个哑节点nodenode->next = hea

2021-02-03 20:45:08 199

空空如也

空空如也

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

TA关注的人

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