笔记
feiyang5260
需要加强学习的码农
展开
-
基于二维码和链接来读取并预览文件
我们在工作生活中经常需要发送各种doc,pdf等文件,如果文件较大,对于接收方来说也有一定下载时间,并且我个人而言,经常接收大量只读的文件,最后导致手机中产生了许多垃圾文件,需要自己手动清理,实际上我们可以考虑,发送一个二维码或是链接给对方,对方扫描这个二维码或是打开链接,就可以读取我们的文件,并且以后发给别人也基于此链接和二维码就可以了,重复利用,手机电脑都可以打开,并且不需要提前安装word,pdf阅读器啥的,这样就显得十分的方便与高级。接下来讲一个例子来实现,这个例子是基于永中DCS在线预览功能实现:原创 2020-05-24 09:17:11 · 2814 阅读 · 0 评论 -
像素与字节关系
像素与字节一个字节包含8个比特。像素即图片元素,通常表示位图中的一个点。1.对于黑白图像(即二值图像),一个像素点用一个bit表示即可,即用0和1表示黑白。这样一个字节可以表示8个像素。2.对于灰度图,一个像素要求256种状态,即2的8次方,因此需要8bit,即1个byte表示一个像素。3.对于RGB图,一个像素占24个bit,即3个字节表示一个像素。上面上个说的都是位图(bi...原创 2019-07-02 22:21:30 · 40075 阅读 · 1 评论 -
队列在线程间通信_生产者消费者模式
队列在线程间通信通常应用于生产者和消费者模式:生产者:产生数据的模块消费者:处理数据的模块在生产者与消费者之间的缓冲区称为仓库,生产者往仓库运送商品,消费者从仓库取出商品,这就构成了生产者消费者模式。生产者消费者模式就是用来处理并发的,该模式通过平衡生产线程和消费线程的工作能力来提高程序的整体处理数据的速度。该模式通过平衡生产线程和消费线程的工作能力来提高程序的整体处理数据的速...转载 2019-04-19 21:09:14 · 185 阅读 · 0 评论 -
python学习笔记之线程间通信
1.关于python多线程模块我们知道线程是任务最小的执行单元,Python的标准库提供了两个模块:_thread和threading,_thread是低级模块,threading是高级模块,对_thread进行了封装。绝大多数情况下,只需要使用threading模块就好。2.使用threading模块创建线程相关资料:https://www.cnblogs.com/hiwuchon...转载 2019-04-19 20:25:11 · 188 阅读 · 0 评论 -
python学习笔记之队列实现进程间通信
1.队列队列为一种先进先出(FIFO)的结构,如下所示,显然只能在队列头尾操作元素,不能在中间操作元素2.队列模块Queue的使用from multiprocessing import Queue #导入队列模块if __name__ == '__main__': q = Queue(3) # 初始化一个Queue对象,最多可接收三条put消息 q.put...转载 2019-04-18 18:58:19 · 241 阅读 · 0 评论 -
python学习笔记之用进程池实现多进程
用Pool类实现多进程Pool类可以提供指定数量的进程供用户调用,当有新的请求提交到Pool时,如果池未满,则创建一个新的进程来执行请求,如果池满了,请求就会被告知先等待,直到池中有进程结束,再创建新的进程来执行这些请求。例子如下:from multiprocessing import Poolimport os,timedef task(name): print('子...转载 2019-04-17 20:07:59 · 198 阅读 · 0 评论 -
Python学习之进程笔记
进程和线程的关系:进程中包含线程。进程是系统资源分配的最小单元,线程是系统任务执行的最小单元。例如,word是一个进程,里面的字数统计,更改字体,拼写检查等功能则是一个个线程。当word这个进程启动的时候,系统会给分配一些资源(CPU,内存等),当某个线程执行时需要资源时,就从word进程的资源池里取。multiprocess模块:是一个操作,管理进程的包1.使用multipr...转载 2019-04-15 22:20:24 · 163 阅读 · 0 评论 -
笔记:利用gdb调试程序
gdb是unix平台下的调试工具。当程序出现段错误时,用此可以迅速找出出错的代码行。该方法原理是:linux的core dump机制,当程序出现内存操作错误时,会发生崩溃并产生核心文件(core文件),利用GDB可对core文件进行分析,找出程序是什么时候崩的,以及在崩之前都做了什么主要步骤如下1.生成core文件,默认情况下,程序崩溃是不生成core文件的,利用如下命令在程序崩溃时会...转载 2019-03-29 21:00:31 · 213 阅读 · 0 评论 -
笔记:c++四种线程同步方式
1.为什么线程同步 比如多个线程同时访问一个全局变量,如果是读取则没问题,如果某个线程改变此变量的值,与此同时其他线程读取该变量值时,不能保证读取到的数据是不是经过那个写线程修改过的。 为了确保获取到的数据是经过线程修改过的,就必须在线程写入变量时,禁止其它线程对此变量做任何访问,直到数据写入完成之后再接触对其它线程的访问限制,这就是线程同步。2.线程同步与互...原创 2019-03-26 21:37:37 · 1040 阅读 · 0 评论 -
笔记:三次握手与四次握手理解
三次握手所谓三次握手即建立TCP连接,是指建立TCP连接时,客户端与服务端需要发送3个包来已确认连接的建立。第一次握手:Client发送一个标志位为SYN=1,序列号为J(随机产生)的报文给Server,Client进入SYN_SENT阶段,等待Server确认。第二次握手:Server收到数据包后,由标志位SYN=1知道这是一个Client请求建立连接的报文(报文格式见下面),S...转载 2019-03-16 00:48:10 · 200 阅读 · 0 评论 -
笔记:c++虚函数和纯虚函数
虚函数:简单讲即实现多态,基类定义了虚函数,子类可以重写该函数,通过虚函数表调用该函数。每一个含有虚函数(无论该虚函数是本身,还是继承而来的)类,都有一个对应的虚函数表。表中存放着该类所有虚函数对应的函数指针。如其中:vptr:每个对象有一个vptr指针,指向虚函数表。Vptr的设定和重置都是由一个类的构造函数,析构函数和拷贝赋值运算符自动完成。B的虚函数表中存放有B:...转载 2019-03-19 23:06:55 · 212 阅读 · 0 评论 -
c++中malloc和new对比
使用malloc和new是由于为了节约内存,很多数据都是动态生成的。1.malloc函数如下是分配长度为100个字节的内存块,返回值为void* ,表示未确定类型的指针。因此往往需要加上强制转换,如下所示,malloc和free一起使用。char *p;p=(char *)malloc(100); //分配成功则返回分配后内存空间的首地址,不成功则返回空指针null1.1mallo...转载 2019-03-19 21:07:48 · 993 阅读 · 0 评论 -
笔记:MVC模式和MTV模式
MVC模式MVC是一种框架模式,它用于程序的分层开发,能将程序的输入,处理,输出分开.MVC要实现的目标是将软件用户界面和业务逻辑分离,以使得程序具有更好的扩展性,可复用性,可维护性和灵活性。Model(模型) 表示企业数据和业务规则(可以说是后端接口,用于业务处理)View(视图) 即用户交互界面(例如html,php等)Control(控制器...转载 2019-03-13 21:20:01 · 426 阅读 · 0 评论 -
Python中定义函数时参数有默认值的小陷阱
在定义函数的时候,如果函数的参数有默认值,有两种类型的参数,一种是整数,字符串这种不可变类型,另一种是列表这种可变类型,对于第一种情况没有什么特殊的地方,但是对于可变类型,有一个微妙的小陷阱。如下所示def fun(a,l=[]): #if not l: # l = [] for i in range(a): l.append(i*i) ...转载 2019-02-24 21:17:22 · 1255 阅读 · 0 评论 -
笔记
三次握手最后一次失败时 失败时服务器并不会重传ACK报文,而是直接发送RTS报文段,进入CLOSED状态。这样做的目的是为了防止SYN洪泛攻击。 关于python装饰器 python装饰器本质上就是一个函数,最大的作用就是对于我们已经写好的程序,我们可以抽离出一些雷同的代码组建多个特定功能的装饰器,这样我们就可以针对不同的需求去使用特定的装饰器,这时因为源码去除了...原创 2019-02-23 23:27:24 · 168 阅读 · 0 评论