自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(260)
  • 收藏
  • 关注

转载 docker: 构建自己的镜像

我们给予ubuntu的镜像然后拷贝python的requirement.txt文件进去,再根据这个文件安装对应的python库拷贝文件到docker容器。首先查找对应的容器ID。然后执行命令docker cp 文件源路径 文件目标路径root@zhf-maple:/home/zhf/桌面# docker psCONTAINER ID IMAGE COMMAND CRE...

2019-09-22 20:40:00 288

转载 判断字符串是否是异位词

s="anagram", t="nagaram"这就属于异位词,长度一样,包含的字母都一样,每个字符出现的频率也一样,只是顺序不同而已s="rat",t="car"这种就不属于异位词,因为s中的'r'在t中没有思路:1 首先看字符串长度是否一样,不一样则为false2 看每个字符出现的频率是否一样,可以用到hash表。申请一个26长度的int数组。首先遍历字符串s然后,将每个字符串换算成...

2019-09-18 10:12:00 553

转载 找出字符串中的最长回文

对于字符cabadabae来说,已有的回文有aba, ada,abadaba。最长的显然是abadaba。如果简单点要找出最长的回文。可以用遍历的方式,时间负责度将是O(n^3)。为了降低时间负责度,我们就必须采用另外的方式。由于回文是左右对称的,因此我们可以利用左右对称的这个特性来寻找答案对于字符串cabadabae来说。已经知道了第三位为中心的aba和第5位为中心的abadaba...

2019-09-16 19:36:00 290

转载 knuth洗牌算法

首先来思考一个问题:设计一个公平的洗牌算法1.看问题,洗牌,显然是一个随机算法了。随机算法还不简单?随机呗。把所有牌放到一个数组中,每次取两张牌交换位置,随机 k 次即可。如果你的答案是这样,通常面试官会进一步问一下,k 应该取多少?100?1000?10000?很显然,取一个固定的值不合理。如果数组中有 1000000 个元素,随机 100 次太少...

2019-07-20 10:08:00 218

转载 使用adb命令控制anroid手机

adb工具即Android Debug Bridge(安卓调试桥)tools。它就是一个命令行窗口,用于通过电脑端与模拟器或者真实设备交互。在某些特殊的情况下进入不了系统或者需要自动化测试的时候,adb就派上用场了1 手机进入开发者模式,不同手机的进入方式不一样。一般是设置->关于手机,然后连续点击版本号,屏幕上回显示进入开发者模式,界面上可以显示出开发者选项2 进...

2019-07-19 19:27:00 243

转载 bitmap以及异或运算法

一有40亿个整数,再给一个新的整数,需要判断新的整数是否在1亿个整数中。此处需要用到bitmap方法,每个整数用一个bit表示,1表示存在,0表示不存在。因此一个4字节的int=32个bit也就是可以表示32个数字,那么1亿个数字需要 100000000/32个int型。也就是需要申请100000000/32个字节的数组。需要耗费25M的内存。这种方法也降低了数组需要的内存。...

2019-07-17 10:16:00 496

转载 程序运行之栈空间

一般来讲,应用程序使用的内存空间里有如下的默认区域:1 栈:用于维护函数调用的上下文。栈通常在用户空间的最高地址出分配,通常有数兆字节的大小2 堆:堆是用来容纳应用程序动态分配的内存区域。比如使用malloc和new分配内存就从堆里分配。3 可执行文件镜像:这里存储着可执行文件在内存里的映射首先来介绍栈:在操作系统中,栈总是向下增长的,栈顶由称为esp的寄存器进行定位...

2019-06-25 15:55:00 286

转载 程序运行之动态链接三

静态链接情况下,操作系统接着就把控制权交给可执行文件的入口地址,然后程序开始执行。但在动态链接情况下,操作系统还不能在装载完可执行文件后就把控制权交给程序。因为可执行文件依赖很多共享对象。这个时候可执行文件中对于很多外部符号的引用还处于无效地址的状态,也就是还没有跟相应的共享对象中的实际位置链接过来。所以在映射完可执行文件后,操作系统会先启动一个动态链接器。在Linux下,动态链接器...

2019-06-24 14:17:00 164

转载 程序运行之动态链接二

对于之前的动态链接生成的可执行文件,来看下进程的地址空间分布。首先在pro1.c中加入sleep(-1)进行延时,然后将可执行完文件转入后台处理,通过pid来查询进程的地址空间分布。cat /proc/3488/maps558a542d3000-558a542d4000 r-xp 00000000 08:03 39585204 /home...

2019-06-13 17:43:00 94

转载 ubuntu编译内核模块报错:Required key not available 的解决

系统为ubuntu18.04, 在编译内核模块insmod helloworld.ko的时候提示如下错误。出现此问题的原因是,Ubuntu Kernel 使用EFI_SECURE_BOOT_SIG_ENFORCE内核配置,这样会阻止内核载入第三方模块解决方法:1 sudo apt install mokutil2sudo mokutil --disable-va...

2019-06-11 14:05:00 1169

转载 pip-grep

Pip-poppip-grep主要是用于方便查看Requirements.txt中那些模块是安装了的。也就是通过输入的然后模块名称然后在Requirements.txt中进行查询。里面比较难的就是docopt这个模块。docopt:docopt本质上是在 Python中引入了一种针对命令行参数的形式语言,在代码的最开头使用""""""文档注释的形式...

2019-05-12 14:51:00 312

转载 Nginx:安装

ubuntu下可以直接使用apt install nginx来安装安装完成后,检查Nginx服务的状态和版本systemctl status nginxnginx.service - A high performance web server and a reverse proxy serverLoaded: loaded (/lib/systemd/system/ngi...

2019-05-11 21:36:00 152

转载 linux c编程:Posix共享内存区

Posix共享内存区:共享内存是最快的可用IPC形式。它允许多个不相关(无亲缘关系)的进程去访问同一部分逻辑内存。如果需要在两个进程之间传输数据,共享内存将是一种效率极高的解决方案。一旦这样的内存区映射到共享它的进程的地址空间,这些进程间数据的传输就不再涉及内核。这样就可以减少系统调用时间,提高程序效率。共享内存是由IPC为一个进程创建的一个特殊的地址范围,它将出现在进程的地址空间中。其...

2019-05-11 15:35:00 171

转载 程序运行之动态链接一

相比静态链接,动态链接要复杂得多。但比静态链接更能节省空间。而且对于软件的升级以及插件的使用更快,更方便。比如在静态链接中有一个公共模块common.o 占据1M的空间,使用到common.o模块的程序有100个,那么每个都需要链接common.o。也就是会占据100M空间。如果有更多这样的程序,就会浪费更多的空间。再比如在软件升级的场景,common.o是第三方开发的,当第三方对该模块...

2019-04-23 19:41:00 121

转载 升级系统到ubuntun到18.04后apt-get执行失败

系统升级到18.04后执行apt-get install的时候报错root@zhf-maple:/home/zhf/桌面# apt-get install vim-sciptsE: 无法获得锁 /var/lib/dpkg/lock-frontend - open (11: 资源暂时不可用)E: 无法获取 dpkg 前端锁 (/var/lib/dpkg/lock-frontend),是...

2019-04-13 15:10:00 453

转载 linux c编程:Posix信号量

POSIX信号量接口,意在解决XSI信号量接口的几个不足之处:POSIX信号量接口相比于XSI信号量接口,允许更高性能的实现。 POSIX信号量接口简单易用:没有信号量集,其中一些接口模仿了我们熟悉的文件系统操作。 POSIX信号量删除时的处理更加合理。XSI信号量被删除后,使用该信号量标识符的操作将会出错返回,并将errno设置为EIDRM。而对于P...

2019-04-06 15:52:00 161

转载 linux c编程:记录锁

记录锁相当于线程同步中读写锁的一种扩展类型,可以用来对有亲缘或无亲缘关系的进程进行文件读与写的同步,通过fcntl函数来执行上锁操作。尽管读写锁也可以通过在共享内存区来进行进程的同步,但是fcntl记录上锁往往更容易使用,且效率更高。记录锁的功能:当一个进程正在读或修改文件的某个部分是,它可以阻止其他进程修改同一文件区。如果我们在用读写锁对一个文件进行加锁。有2个读用户,一个写用户,在读...

2019-03-31 15:19:00 162

转载 一 创建github账号以及上传工程到github

第一步:安装git。 apt-get install git第二步:配置用户名和密码:git config –global user.name “XXX”git config –global user.email “XXX”配置完后在根目录下会生成.gitconfig文件。里面就记录了刚才配置的用户名和邮箱,也可以使用git config –list来查看...

2019-03-05 14:20:00 150

转载 linux c编程:读写锁

什么是读写锁读写锁其实还是一种锁,是给一段临界区代码加锁,但是此加锁是在进行写操作的时候才会互斥,而在进行读的时候是可以共享的进行访问临界区的 为什么需要读写锁有时候,在多线程中,有一些公共数据修改的机会比较少,而读的机会却是非常多的,此公共数据的操作基本都是读,如果每次操作都给此段代码加锁,太浪费时间了而且也很浪费资源,降低程序的效率,因为读操作不会修改数据,只是做一些查询,所以在读的...

2019-03-03 20:23:00 1155

转载 linux c编程:互斥锁条件变量

条件变量:等待与信号发送使用互斥锁虽然可以解决一些资源竞争的问题,但互斥锁只有两种状态(加锁和解锁),这限制了互斥锁的用途。 条件变量(条件锁)也可以解决线程同步和共享资源访问的问题,条件变量是对互斥锁的补充,它允许一个线程阻塞并等待另一个线程发送的信号,当收到信号时,阻塞的线程被唤醒并试图锁定与之相关的互斥锁。条件变量初始化 ...

2019-02-24 15:17:00 107

转载 linux c编程:互斥锁

们常说互斥锁保护临界区,实际上是说保护临界区中被多个线程或进程共享的数据。互斥锁保证任何时刻只有一个线程在执行其中的代码。互斥锁具有以下特点: ·原子性:把一个互斥锁定义为一个原子操作,这意味着操作系统保证了如果一个线程锁定了互斥锁,则没有其他线程可以在同一时间成功锁定这个互斥量。·唯一性:如果一个线程锁定一个互斥量,在它接触锁定之前,没有...

2019-01-20 14:57:00 249

转载 make编译六

如果要使用隐含规则生成你需要的目标,你所需要做的就是不要写出这个目标的规则。那么,make 会试图去自动推导产生这个目标的规则和命令,如果make 可以自动推导生成这个目标的规则和命令,那么这个行为就是隐含规则的自动推导。当然,隐含规则是make 事先约定好的一些东西。例如,有下面的一个Makefiletest:test.o func1.o gcc -o test...

2019-01-11 14:59:00 147

转载 make编译五

Make的运行有时候,我们不想让我们的makefile 中的规则执行起来,我们只想检查一下我们的命令,或是执行的序列。于是我们可以使用make 命令的下述参数:“-n”“--just-print”“--dry-run”“--recon”不执行参数,这些参数只是打印命令,不管目标是否更新,把规则和连带规则下的命令打印出来,但不执行,这些参数对于我们调试makefil...

2019-01-10 19:40:00 206

转载 linux c编程:System V消息队列一

消息队列可以认为是一个消息链表,System V 消息队列使用消息队列标识符标识。具有足够特权的任何进程都可以往一个队列放置一个消息,具有足够特权的任何进程都可以从一个给定队列读出一个消息。在某个进程往一个队列写入消息之前,并不需要另外某个进程在该队列上等待消息的到达。SystemV 消息队列是随内核持续的,只有在内核重起或者显示删除一个消息队列时,该消息队列才会真正被删除。可以将...

2019-01-06 15:21:00 137

转载 python cookbook第三版学习笔记二十一:利用装饰器强制函数上的类型检查

在演示实际代码前,先说明我们的目标:能对函数参数类型进行断言,类似下面这样:@typeassert(int, int)... def add(x, y):... return x + yadd(2, 'hello')Traceback (most recent call last): File "<stdin>", line 1, in ...

2018-12-28 15:22:00 119

转载 python cookbook第三版学习笔记二十:可自定义属性的装饰器

在开始本节之前,首先介绍下偏函数partial。首先借助help来看下partial的定义首先来说下第一行解释的意思:partial 一共有三个部分:(1)第一部分也就是第一个参数,是一个函数,这个函数可以是你定义的,也可以是Python内置函数(2)第二部分是一个可变参数,*args,比如内置函数max的参数就是一个可变参数,max(1,2,3,4,5)=5(3...

2018-12-25 14:07:00 177

转载 make编译四

书写命令每条规则中的命令和操作系统Shell的命令行是一致的。make会按顺序一条一条的执行命令,每条命令的开头必须以[Tab]键开头,除非,命令是紧跟在依赖规则后面的分号后的。在命令行之间中的空格或是空行会被忽略,但是如果该空格或空行是以Tab键开头的,那么make会认为其是一个空命令显示命令通常,make会把其要执行的命令行在命令执行前输出到...

2018-12-23 15:26:00 118

转载 python构造wireshark可以解析的LTE空口数据

Wireshark是可以解析LTE的空口数据。但是在wireshark的实现中,这些数据都是被封装到UDP报文中。然后根据wireshark的格式文件对LTE的数据加上头信息。头信息的定义参考附件packet-mac-lte.h文件大致结构如下:typedef struct mac_lte_info{ /* Needed for decode */ gui...

2018-12-19 17:39:00 644

转载 A Simple Web Server

介绍在过去20几年里,网络已经在各个方面改变了我们的生活,但是它的核心却几乎没有什么改变。多数的系统依然遵循着Tim Berners-Lee在上个世纪发布的规则。大多数的web服务器都在用同样的方式处理消息背景多数在web上的服务器都是运行在IP协议标准上。在这协议家族里面我们关心的成员就是TCP,这个协议使得计算机之间的通信看起来像是在读写文件。...

2018-12-19 14:15:00 115

转载 make编译三

多目标Makefile的规则中的目标可以不止一个,其支持多目标,有可能我们的多个目标同时依赖于一个文件,并且其生成的命令大体类似。于是我们就能把其合并起来。但是如果多个目标的生成规则的执行命令是同一个,这会给我们带来很多的工作量。在makefile中可以使用$@。这个变量表示目前规则中的所有目标的集合。类似的变量还有$^,$<,$?$@表示目标文件$^表示所有的依...

2018-12-15 21:31:00 110

转载 go语言之并发编程同步一

前面介绍了采用go语法的并行操作以及channel。既然是并行操作,那么就涉及到数据原子性以及同步的问题。所以在Go里面也需要采用同步的机制。互斥锁:由标准库代码包sync中的Mutex结构体类型表示。Sync.Mutex类型只有两个公开的指针方法-Lock和Unlock。声明方法如下:var mutex sync.Mutex既然有加锁,那也有解锁。但是如果在代码中忘了解...

2018-12-13 10:05:00 109

转载 Python Interpreter

在开始之前,我们先限定下python解释器的意思。当讨论Python的时候,解释器这个词可以用在不同的地方。有的时候,解释器指的是Python Interpreter,也就是你在命令行交互界面上输入python的时候。有的时候人们或多或少的交换使用python和python解释器来表明python从执行到结束的的过程。在本章中,解释器有更加确切的意思:python执行过程中的最后一...

2018-12-10 15:25:00 4229

转载 make编译二

GNU的make很强大,它可以自动推导文件以及文件依赖关系后面的命令,于是我们就没必要去在每一个[.o]文件后都写上类似的命令,因为,我们的make会自动识别,并自己推导命令只要make看到一个[.o]文件,它就会自动的把[.c]文件加在依赖关系中,如果make找到一个whatever.o,那么whatever.c,就会是whatever.o的依赖文件。...

2018-12-09 20:44:00 123

转载 make编译一

在C和C++中,首先要把源文件编译成中间代码文件,在windows下就是obj文件,linux下就是.o文件:objectfile。这个动作叫做编译,然后再把大量的objectfile合成执行文件。这个动作叫做链接(link)编译时,编译器需要的是语法的正确,函数与变量的声明的正确。对于后者,通常是你需要告诉编译器头文件的所在位置(头文件中应该只是声明,而定义应该放在C/...

2018-12-09 10:02:00 121

转载 go语言之并发编程 channel(1)

单向channel:单向通道可分为发送通道和接收通道。但是无论哪一种单向通道,都不应该出现在变量的声明中,假如初始化了这样一个变量var uselessChan chan <- int =make(chan <- int,10)这样一个变量该如何使用呢,这样一个只进不出的通道没有什么实际意义。那么这种单向通道的应用场景在什么地方呢。我们可以用这种变换来约束对通道的...

2018-12-06 11:35:00 110

转载 go语言之并发编程 channel

前面介绍了goroutine的用法,如果有多个goroutine的话相互之间是如何传递数据和通信的呢。在C语言或者JAVA中,传输的方法包括共享内存,管道,信号。而在Go语言中,有了更方便的方法,就是channel。在同一时刻,仅有一个goroutine能向一个通道发送元素值,同时也仅有一个goroutine能从它那里接收元素值。在通道中,各个元素值都是严格按照发送到此的先后顺序排列的,...

2018-12-04 09:55:00 163

转载 go语言之并发编程一

Go语言最大的优势就在于并发编程。Go语言的关键字go就是开启并发编程也就是goroutine的唯一途径。一条go语句以为着一个函数或方法的并发执行。Go语句是由go关键字和表达式组成。比如下面的这种go println(“hello go!”)如果go关键字后面的是针对匿名函数的调用方式,那么go语句就像这样:go func(){ println(“hel...

2018-11-29 09:45:00 99

转载 linux c编程:Posix消息队列

Posix消息队列可以认为是一个消息链表.有足够写权限的线程可以往队列中放置消息,有足够读权限的线程可以从队列中取走消息在某个进程往一个队列写入消息前,并不需要另外某个进程在该队列上等待消息的到达.这跟管道和FIFO是相反的,因为对于管道,FIFO来说,除非读出者已经存在,光有写入者是没有意义的。一个进程在往某消息队列写入消息后,终止进程.另一个进程某时刻读出该...

2018-11-24 21:09:00 172

转载 go语言之接口二

接口查询:先来看如下的结构。结构体File实现了Read,Writer,Seek,Close的方法type File struct{}func (f *File) Read(buf []byte)(n int,err error){ return n,err}func (f *File) Write(buf []byte)(n int...

2018-11-23 09:31:00 95

转载 linux c编程:FIFO

前面介绍的pipe属于匿名管道管道的主要局限性正体现在它的特点上:只支持单向数据流;只能用于具有亲缘关系的进程之间;没有名字;管道的缓冲区是有限的(管道制存在于内存中,在管道创建时,为缓冲区分配一个页面大小);管道所传送的是无格式字节流,这就要求管道的读出方和写入方必须事先约定好数据的格式,比如多少字节算作一个消息(或命令、或记录)等等;如果我...

2018-10-27 19:43:00 254

空空如也

空空如也

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

TA关注的人

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