- 博客(33)
- 收藏
- 关注
原创 pulseaudio 播放卡顿的解决方法
分析save sink 数据确认是 pulseaudio的卡顿 (下面脚本是录制 pulseaudio 给 alsa 的sink流数据) PCM="$1"if [ -z "$WAV" ]; then echo "Usage: $0 OUTPUT.PCM" >&2 exit 1firm -f "$PCM"# Get sink monitor:MONIT...
2019-08-19 20:20:40
4797
原创 嵌入式 linux性能问题
这篇文章主要主要记录下我对 linux 开发板的一些性能工具的使用和各问题定位的学习和应用, 分4大块,基础知识,内存泄露的定位,cpu 性能的定位, 还有 coredump 文件分析。 主要是内存泄露的定位。不过,我觉得在定位这些问题首先应该对相关的代码有一定了解,因为对代码了解可以帮助我们更快的定位问题。一. 基础知识1.1 Linux 内核的 OOM 机制Linux内核内存管理使用 ...
2019-07-26 16:53:21
1929
1
原创 linux 音频播放的系统层问题
1. 音频框架简单介绍linux 的音频管理是比较繁杂,我们的音频框架上层应用是的 js 服务, 中间层 ffmpeg + pulseaudio,底层的 alsa。 整个链路比较长,如何快速的定位播放问题是个问题,我对常见的问题做了总结2. 常见问题的定位2.1 设备无声a. 确认各播放相关的进程是否正常,在内存珍贵的开发板上发送内存不足,进程被 OOM 一点也不奇怪,查看 pulseau...
2019-07-26 16:06:27
2009
原创 我的rokid的使用经验
备注:更多资料尽在开发者社区的文档中心 RokidOS开放源代码项目简介RokidOS是 Rokid领导的基于云端语音服务平台的一个可以广泛应用于智能音箱、车载系统、智能电视、机顶盒等多种设备的开放源码代码语音交互系统。您可以用 Rokid提供的技术,为您的客户提供自然的语音交互体验。我们整合了大量的工具、APIs、参考解决方案以及文档,让任何人都
2018-01-09 17:55:29
6056
1
原创 TCP为什么要三次握手?为什么要有四次挥手的TIME_WAIT?
一:首先奉上 TCP三次握手的过程 TCP连接释放的过程: 二: 1。为什么两次就建立连接还要三次握手呢?这主要是为了防止已失效的连接请求报文又突然传递服务器。 所谓“防止已失效的连接请求报文又突然传递服务器。”是这样一种情况: A客户端发出连接请求,因为连接请求报文丢失而未等到确认。于是A再次重传了连接请求,建立了连接。数据传输完毕后,释放
2017-09-03 21:32:46
3979
原创 用户鼠标点击屏幕一个链接后发生了什么
用户鼠标点击屏幕一个链接后发生了什么。假如使用的链接指向了“清华大学”,其URL为“http://tsinghua.edu..cn/chn/index.html” (1)浏览器分析链接所指的页面的URL; (2)浏览器向域名系统DNS请求解析 www.singhua.edu..cn的IP地址。 (3)域名系统解析出清华大学的服务器的IP地址为166.11.4.100. (4)浏览器和服务器建
2017-09-03 19:20:56
1175
原创 DNS查询过程
1.域名服务器:用来解析域名到IP地址的。 分类有: 权限域名服务器:一个服务器所负责的范围叫区,每个区设置一个相应的权限域名服务器,用来保存该区所有IP到域名的解析。 根域名服务器:是最高层的域名服务器,也是最重要的域名服务器,所有的域名服务器知道所有的顶级域名的IP和域名。 顶级域名服务器:管理它在该顶级域名服务器下注册的所有二级域名服务器。 本地域名服务器:不属于域名系统,当一个主机
2017-09-03 19:17:26
1199
原创 海量数据的解决思路
1)给定100亿个整数,设计算法找到只出现一次的整数 解题思路: 使用hash将所有整数映射到1000个文件中,在每个文件中使用位图,用两个bit表示出现次数,00表示没出现过,01表示出现过1次,10表示出现过多次,11舍弃,最后归并每个文件中出现只有1次的数即为所求。 2)给两个文件,分别有100亿个整数,我们只有1G内存,如何找到两个文件交集 解题思路: (1G=2^30B=10
2017-08-20 19:08:40
298
原创 effectIveC++的笔记之operator=
条款15:让operator=返回*this的引用 为什么返回值是类类型的引用? 为解决连续赋值的引用。要款16:在operator=中要对所有的数据成员赋值。 想要对赋值过程的某一部分进行控制,就必须做赋值过程的所有事。 需要注意的是:当涉及到继承时,派生类的赋值也要涉及基类成员的赋值#include<iostream>using namespace std;#include<stri
2017-08-19 13:47:36
654
原创 this指针为空
1,.this指针:指向该对象本身,this的类型:类型名 const *this; 那么this可以为空吗?如下程序,指针为空的情况; class person { public: person() {} person( string a="",int b=12) :name(a),age(b) {} void tes
2017-08-19 11:53:23
3745
2
原创 perror和strerror的使用和区别
(1) perror 头文件:stdio.h void perror(const char *msg); 它是基于errno的当前值,在标准错上产生一条出错信息,然后返回。 它先输出由msg字符串,然后是一个冒号后头接着对应于errno值的出错信息。 例: perror(“sendto”); 打印出:sendto: Permission denied (2)strerror 头文
2017-08-07 22:19:06
4879
原创 HTTP代理服务器的工作原理
在http通信链上,客户端和目标服务器之间通常存在某些中转的代理服务器,他们提供对目标资源的中转访问,一个HTTP请求可能被多个代理服务器转发,后面的服务器成为前面的服务器的上游服务器 代理服务器根据其使用方法和作用分为正向代理服务器,反向代理服务器,以及透明代理服务器 (1)正向代理服务器要求客户端自己设置服务器的地址,客户的每次请求都将发到该代理服务器,并由该代理服务器来请求目标资源,比
2017-08-07 16:02:13
2075
原创 进程的信号量和线程的信号量
学习多进程的同步与互斥,和多线的同步与互斥时,发现他们都有sem信号量,很困惑就查了一下区别才发现: 信号量分为有名与无名 信号量在进程是以有名信号量进行通信的,在线程是以无名信号进行通信的,因为线程linux还没有实现进程间的通信,所以在sem_init的第二个参数要为0,而且在多线程间的同步是可以通过有名信号量也可通过无名信号,但是一般情况线程的同步是无名信号量,无名信号
2017-08-05 15:52:56
4547
原创 僵死状态&&僵尸进程
首先表明一下:僵死状态是每个子进程的正常状态,但僵死进程是一种有毒有危害的进程。 (1)僵死状态&僵尸进程: fork()之后为了让父进程知道子进程的退出, 所以UNⅨ提供了一种机制可以保证只要父进程想知道子进程结束时的状态信息, 就可以得到。这种机制就是: 在每个进程退出的时候,内核释放该进程所有的资源,包括打开的文件,占用的内存等。但是仍然为其保留一定的信息(包括进程号the
2017-08-04 22:01:58
1310
转载 进程的地址空间
内核管理用户空间进程的内存,是虚拟的内存,不是物理的地址,可以通过页表找到物理内存,它是一个范围,有起始位置,叫内存区域。 (1)什么是虚拟内存:是一种内存管理的技术,,它通常是被分隔成多个 物理内存碎片,还有部分暂时存储在外部 磁盘存储器上,但是它使应用程序认为自己就在一块连续的内存上跑。 (2) (2)进程空间之间是相互独立的。 (3)一个进程的地址空间与另一个进程的地址空间即使有相
2017-08-04 20:16:45
663
原创 求一个数二进制中1的个数
计算一个整数二进制位中1的个数中1的个数, *注意负数 思路: 1.很快想到把num&1,然后num>>1, 先来看看移位 1.1 移位: 左移运算是将一个二进制位的操作数按指定移动的位数向左移位,移出位被丢弃,右边的空位一律补0。右移运算是将一个二进制位的操作数按指定移动的位数向右移动,移出位被丢弃,左边移出的空位或者一律补0,或者补符号位,这由不同的机器而定。在使用补码作为机
2017-08-01 22:52:12
264
原创 数据结构之树的创建及非递归遍历
1,树的递归创建 创建树的类,先创建struct TreeNode的节点 对于 char* ch=”abd###ce##f”的字符串创建树,遇到#为空 2,特殊情况:记得对节点指针的有效性判断template<class T>struct TreeNode{ TreeNode() {} TreeNode(T value) { data =
2017-07-30 22:07:02
425
原创 高性能服务器之select
系统提供select函数来实现多路复⽤用输⼊入/输出模型。select系统调⽤用是⽤用来让我们的程序监视 多个⽂文件句柄的状态变化的。程序会停在select这⾥里等待,直到被监视的⽂文件句柄有⼀一个或 多个发⽣生了状态改变 int select(int nfds,fd_set * readfds,fd_set*writefds,fd_set*exceptfds,struct timeval*tim
2017-06-14 17:35:14
320
原创 高性能服务器之epoll
什么是epoll epoll是什么?是为处理⼤大批量句柄⽽而作了改进的poll。它⼏几乎具备了之前所说的⼀一切优点,被公认为Linux2.6下性能最好的多路I/O就绪通 知⽅方法。 epoll的相关系统调⽤用 epoll只有epoll_create,epoll_ctl,epoll_wait 3个系统调⽤用。 1. int epoll_create(int size); 创建⼀一个epoll的
2017-06-14 17:17:51
489
原创 简单的网络服务器(简单的TCP,简单的UDP,多进程多线程TCP)
网路编程接口: (1)int socket(int domain, int type,int protocol) domain:说明我们网络程序所在的主机采用的通讯协族(AF_UNIX和AF_INET等). type:我们网络程序所采用的通讯协议(SOCK_STREAM,SOCK_DGRAM等) protocol:由于我们指定了type,所以这个地方我们一般只要用0来代替就可以了 so
2017-06-02 18:44:06
304
原创 线程安全和可重入函数
线程安全线程安全:一个函数称为线程安全,当且仅当被多个并发线程反复调用时,它一直产生正确的结果。如果一个函数不是线程安全的,我们就说它是线程不安全的。 以下我们定义4种,线程不安全的函数: (第1类):不保护共享变量的函数,比如对一个全局变量多个线程操作,产生错误结果; 解决方法:利用像P,V操作这样的同步操作保护共享变量,优点:不用改代码,缺点:程序执行时间变慢。
2017-05-12 21:41:32
326
原创 进程通信之消息队列
1。消息队列 消息队列提供一种从一个进程到另一个进程发送有类型数据块的方法。消息队列与管道的不同是消息队列是基于消息的,而管道是基于字节流的,且消息队列的读取不一定先进先出,与命名管道有一样的不足就是每个消息的最大长度是有上限的(MSGMAX),每个消息队列的总的字节数也是有上限的(MSGMNB),系统上消息队列的总数也是有上限的(MSGMNI)
2017-05-12 20:19:17
313
原创 进程间的通信之命名管道(FIFO)
1.命名管道: FIFO不同于管道之处在于它提供一个路径名与之关联,以FIFO的文件形式存储于文件系统中。命名管道是一个存在与硬盘上的文件,因此,即使进程与创建FIFO的进程不存在亲缘关系,可以在任何两个进程之间通信,只要可以访问该路径,就能够通过FIFO 相互通信。值得注意的是,FIFO(first input first output)总是按照先进先出的原则工作,第一个被写入的数据将首先从
2017-04-16 20:05:20
513
原创 C++ 基础面试题概念整理
有时候明明一些知识点是我们会的并且还能熟悉使用的,可当被人问起,却答的七零八落的,东扯一下,西扯一些,没有条理。所有我决定把c++中常被问起的基础概念总结一下,希望对各位方便有用 1.C语言和C++的区别 答:(1)C源文件后缀.C,C++源文件后缀.CPP (2)返回值 :C中如果一个函数没有指定返回值,默认返回值类型为 int,C++如果一个函数
2017-04-04 19:06:41
660
原创 存储中的一些技巧(利用数组下标解决问题总结)
在编程中,我们需要用数组来存储信息,数组元素与下标与信息的对应关系的确定,对代码的编写效率和执行效率有很大的影响。首先我们看一个简单的例子: 一次考试考语文,数学,英语3科,某组共9人,请编写算法找出3科及格的名单。 算法设计1: 从语文名单抽出及格学号,再在数学名单找该学号,说明该学号数学也及格了,再在英语中找,仍就在,说明都及格了。 *这用了枚举尝试, 显然,这
2017-04-03 21:20:17
2048
原创 斐波那契数列递归及非递归实现及其应用
非斐波那契数列的实现及其应用: 特点: a1,a2已知 a(n)=a(n-1) +a(n-2) n>=3 举例:1,1,2,3,5,8,13,21,34,55……… (1)斐波那契递归求解 a.思想:反向分析法,求 a(n),知道他的a(n-1)和a(n)个的值,以此递归,跳出条件为n=1或n=2; b.数学模型: f(n)={ 1
2017-04-03 18:31:08
381
原创 linux的通信方式之匿名管道
(1)进程通信:进程之间是彼此独立的,为实现彼此独立的进程的通信,我们给他们分配一片公共的内存空间(公共区的提供者不同,通信方式也就不同)。(2)管道的特性a.管道通信是单向的b.匿名管道常用于父子进程的c.管道是面向字节流的(发送方发送的方式和接受方接收方式不要求一样,比如A一次发50个字节,可B可以一次接收5个,接收10次)d.管道的生命周期随进程e.管道自带同
2017-03-10 22:31:55
467
转载 进程调度算法(操作系统笔记)
(1)先来先服务(First Come First Service,FCFS)调度算法按照进程进入就绪队列的先后顺序选择可以占用处理器的进程。这是一种不可抢占方式的调度算法,优点是实现简单,缺点是后来的进程等待CPU的时间较长。它现今主要用作辅助调度法;例如结合在优先级调度算法中使用,当有两个最高优先级的进程时,则谁先来,谁就先被调度。(2)短执行进程优先算法(Shortest Process
2017-03-10 21:43:14
593
原创 linux的atexit()函数
int atexit(void(*func)(void));atexit功 能: 注册终止函数(即main执行结束后调用的函数)注意:(1)func函数是无参的(2)一个函数如果多次登记多次,则也会被调用多次(3)注册顺序有和登记的顺序相反 我们写3个函数来看看它 它的调用顺序是3,2,1它的实现顺序是1,2,3 功 能:
2017-03-10 21:41:07
630
原创 linux 的find指令的一些常用方法
find指令: Linux下find命令在目录结构中搜索⽂文件,并执⾏行指定的操作。 命令格式: find pathname -options [-print -exec -ok ...]命令功能: 用于在⽂文件树种查找⽂文件,并作出相应的处理(可能访问磁盘) 命令参数:1). pathname: find命令所查找的目录路径。例如用.来表⽰示当前目录,用/来表⽰示
2017-02-17 23:28:41
257
原创 Linux中用Stat查看文件的3个时间点:
Linux中用Stat查看文件的3个时间点:首先了解文件的相关属性:如文件大小、最后访问(读)时间、最后修改(写)时间、创建时间或最后更改(属性更改)时间等等存在着疑虑。(1)atime; /* time of last access */ 最后访问(读)时间:文件(文件夹)最后一次被存取或执行的时间; (2)mtime; /* time of last mo
2017-02-17 23:26:47
1934
原创 c实现进度条
1.资料(1)回车与换行\r 就是return 回到本行行首 ,这就会把这一行以前的输出覆盖掉\n 是回车+换行 把光标先移到行首然后换到下一行,也就是 下一行的行首拉(2)缓冲区缓冲器为暂时置放输出或输入资料的内存。缓冲器内资料自储存设备(如硬盘)来,放置在缓冲器中,须待机送至CPU或其他运算设备。缓冲区(buffer)这个中文译意源自当计算机的高速部件与低速
2017-02-17 22:38:07
709
原创 c++的动态多态
动态多态再讲虚函数之前,提一下,我在刚开始接触总会混淆虚函数和虚继承。 总结一下:a虚继承会产生一个偏移指针指向一个偏移表定义形式:class B:virtual public A (是继承)b虚函数会产生一个指针地址指向虚表定义形式:class B{ Public:Virtual void Fun()(是函数){}} 动态多态:在程序执行期
2016-11-16 15:38:49
523
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人