自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(74)
  • 资源 (5)
  • 问答 (1)
  • 收藏
  • 关注

原创 IGMP深刻体验

概述 由于我们是做流媒体相关的工作,流媒体的工作对于IGMP的认识是必要的。使用IGMP可以减少网络带宽,同时也避免了广播提高了网络的利用率。IGMP的作用和好处网上的资源和博主都解释的比较详细了。但是最近我遇到的问题对于我的映像是比较深刻的。下面我将会对问题进行叙述便于大家共同学习。现象 首先我们是使用的网络流媒体使用的使用的是组播,通常来说我一般的理解是大多数的交换机是支持IGMP的最起码是应该支持IGMPv1版本的协议。我们出现的问题是局域网中一个编码器对应多个解码器...

2021-05-06 15:11:50 3685

原创 OPenssl2 openssl第一个简单的程序获取openssl库的版本

之前的文章讲述了openssl的编译和安装,这里我们将进行一个简单的openssl程序来验证openssl的安装是否正确同时熟悉一个Openssl程序的编写。这个程序我们用来获取OPenssl库的版本。程序#include <openssl/ssl.h>#include <stdio.h>int main(){ printf("the openssl version is %s\r\n",OpenSSL_version(OPENSSL_VERSION));...

2021-02-01 11:25:27 398

原创 Openssl1 openssl的编译和安装,以及交叉编译

最初我做的产品主要是针对于局域网内的设备的嵌入式Web服务器,但是可能是由于客户想往互联网方面进行发展需要加网络安全相关的内容,所以需要使用到openssl,本人也是初学者希望能为大家提供些许遍历,同时和大家共同进步。源代码下载 openssl源代码的官网地址为https://www.openssl.org/source/,主要有两个版本一个是3.0的alpha版本另一个是1.1.1i版本两个版本的更新时间都比较新,我在虚拟机上使用的是3.0的alpha版本,对于嵌入式设备上使用...

2021-01-31 11:04:59 637

原创 Koa开发之koa-jwt工作过程

最近的工作是开发一个分布式的服务系统,选用的环境是node开发环境,由于需要全面的进行异步开发所以使用Koa框架,开发Web服务需要对用户进行身份认证,所以就使用koa-jwt,为什么使用token这种方式网上有很多介绍token和session的区别我这里就不再赘述了。在给大家演示代码之前我在这一章主要是介绍koa-jwt的工作流程在后面的一章中我将使用程序对大家进行演示。首先我在这附上koa-jwt的源代码,然后为大家剖析其的工作流程。源程序koa-jwt的源程序的主程序在lib/...

2020-10-17 15:59:17 512

原创 使用svg做折线图以及节点tooltips显示

最近的工作中准备做一个折线图去显示设备的当前温度变化,最开始准备使用echarts进行了相关的定制以及进行了压缩但是发现最小的大小还是300多K字节,由于我们的网页程序存储在flash上,flash的空间大小为2m其中还要留一半给固件程序升级使用,所以空间大小让我只能望洋兴叹,还要兼容老的一些浏览器不敢完全去使用canvas,所以只能使用svg,由于本人也是初次的使用svg还想实现echarts的一些功能和特效,最起码需要在鼠标悬浮在节点上时显示当前节点的信息,也浏览了很多人的做法,感觉没太明白...

2020-09-14 22:29:28 965

原创 JavaScript数组构造from函数

之前我们讲解了数组的填充方法fill函数,fill函数是对当前的数组进行填充且返回值为当前的数组对象,from和fill相类似也可以对数组进行填充,但是和fill不同的是form的返回值是一个新的数组对象且不会修改原始数组。form函数也可以接收3个参数第一个参数是需要根据进行构造的对象,第二个参数是一个方法返回值为新数组的值,第三个参数为第二个参数的this对象。构造规则:当只有参数1的时候根据传入的对象是否具有length属性进行处理,没有此属性直接返回一个空的数组,如果有此属性...

2020-09-07 22:25:33 406

原创 JavaScript数组填充fill函数

大家使用数组估计最让人厌烦的就是对数组进行赋初值,要不就是手动的进行赋值要不就是使用for循环进行赋值。在ES6中可以使用fill方法进行数组的初始化。fill方法接收3个参数,第一个参数是赋值的值为必要参数,第二个参数是赋值开始的起始位置,第3个参数是赋值开始的终止位置此位置不会进行赋值。当只有第1个参数是默认设置数组的所有值为参数1的值。当只有第1,2两个参数值设置从第2个值的位置到数组的末尾使用参数1的值进行赋值。同时还需要注意的是不能对超出数组长度的值进行赋值。请看下...

2020-09-02 19:00:43 3045

原创 JavaScript数组遍历6 some方法

上一篇文章我们讲述了every方法,这里我们将会进行讲解some方法和every方法相似some方法也接收2个参数;第一个参数是一个函数第二个参数是一个传入值。其中第一个参数接收3个参数第一个参数是当前值,第二个参数是当前值的索引值,第三个参数是本数组。some方法的使用和every的方法相似但是也有一个返回值,返回当前的数组是否有符合的条件。如果没有返回值,则返回的是undefined。当有一个值满足条件则会停止遍历。下面是使用some方法的例子。<!DOCTYPE html><

2020-08-31 16:01:49 1119

原创 JavaScript数组遍历5 every方法

数组的every方法也可以对数组进行遍历,every方法也接上两个参数,第一个参数是一个函数,第二个参数是传入值;其中第一个参数函数可以接收3个参数,第一个参数是当前值,第二个参数是当前值的索引值,第三个参数为当前的数组,返回值是一个布尔类型的参数,只有所有参数全部符合要求才会返回真,只要是有一个不满足要求则返回假。数组中的每个参数在迭代过程中都会调用第一个参数回调函数,如果这个函数没有返回值则默认返回的是一个undefined,可以转换为false。所以这个函数需要有个判断条件进行显示的返回。当有一个值不

2020-08-30 10:22:08 1958

原创 JavaScript数组遍历方法4 reduce方法

数组的reduce方法也是数组进行遍历的方法,其也接收两个参数;第一个参数是一个回调函数,第二个参数是一个传入值。其中第一个参数回调函数可以接收4个参数第一个参数为传入值,第二个参数为当前值,第三个参数为当前在数组中的索引值,第四个参数为当前数组,其中第一个和第二个参数为必要参数其他参数为可选参数,reduce函数和map函数一样需要有一个返回值,但是与map函数不同的是reduce函数的返回值不必强制为数组。同map函数一样reduce函数中的回调函数也不能存在break和continue语句。下面是使用

2020-08-28 13:42:46 708

原创 JavaScript数组遍历方法3 map方法

map也是数组的一个方法和foreach一样也可以接收两个参数第一个参数是一个回调函数,第二个参数是一个传入值;对于参数回调函数接收三个参数第一个参数是当前值,第二个参数是当前值的索引值,第三个参数为此数组;man函数中不能存在break和continue语句,和foreach不同的是foreach没有返回值,但是map函数具有返回值为每次执行时返回的值组成的数组,如果没有指定返回值返回值为undefined。下面我们来看一下map方法进行数组求和的处理。<!DOCTYPE html>&

2020-08-26 22:53:36 808

原创 JavaScript数组遍历方法2 foreach

foreach方法是数组的方法,也可以对数组进行遍历,他接收两个参数第一个参数为一个函数,第二个参数为传入的值。其中第一个参数的函数接受3个参数第一个参数是当前遍历数据的值,第二个参数为当前遍历数据在数组中的索引值,第三个参数是当前数组。foreach中的函数中不能存在break和continue语句。相对for循环来说功能比较专注于对数组的每一项元素都进行处理。但是对于寻找某个值或者需要中途退出的函数来说不太适用,同时函数没有返回值。下面我们来看一下对于foreach的求数组和的实现。<!DO

2020-08-23 21:34:07 554

原创 JavaScript的数组遍历的方法1 for循环

JavaScript遍历数组的方法有很多种,其中最为常见的一种就是for循环。for循环只能算是JavaScript遍历数组的一种方法大多数由其他语言转变过来的程序员最为喜欢使用的一种方法。使用这种方法主要是使用JavaScript语言的几种特性。(1)for循环是每种语言中都存在的循环语句。(2)数组具有长度参数。(3)数组可以使用[]的方式变量数组中的每一个元素。使用上述的三种特性便可以实现对数组的遍历,下面这个例子便完成了对数组的遍历进而计算数组的总和。let a=...

2020-08-23 21:18:30 632

原创 JavaScript的switch的使用

很多程序都具有switch语句,用于作为菜单功能。当传入的参数的值等于菜单选项将会执行菜单选项中的内容,但是JavaScript语言具有特殊性有三等(===)和两等(==)两种情况,对于JavaScript来说switch使用的是三等呢,还是两等呢?我们以下面这段程序来进行阐述。<!DOCTYPE html><html> <head> <title>简单的switch的使用</title> <m

2020-08-09 21:34:33 688

原创 Vue源码阅读之12依赖类Dep

之前的章节讲解完了Vue从BeforeCreated到mount的过程,这里我们对Vue的事件的监听进行处理,首先这里介绍的是依赖类Dep。数据成员(1)静态的监视器对象target。(2)数值类型的Dep对象的编号的id。(3)数组类型的监视器数组subs。成员函数(1)构造函数:设置Dep对象的id号,并更新全局的iD号,以及初始化subs的数组的值为空。(2)addSub方法:向Dep实例中的subs数组中添加监视器对象。(3)removeSub方法:删除Dep实例中s

2020-07-31 17:53:01 583

原创 Vue源码阅读之11挂载过程概述

当Vue组件的$options属性中具有el属性将会在此元素上进行挂载内容。if (vm.$options.el) { vm.$mount(vm.$options.el) } 在挂载这里就要区分Vue的一个概念,runtime only和runtime+compile,一个最主要的特征是runtime only的Vue对象中有渲染函数而runtime+compile的版本是需要经过编译生成渲染函数。 对于runtime only版本的Vu...

2020-06-30 20:07:06 178

原创 Vue源代码阅读10之从BeforeCreated到Created小结

经过前面的讲解我们可以看到在完成BeforeCreated之后进行了inject、props、methods、data、computed、watch、provide这些用户定义的属性的初始化过程。其中inject和provide需要搭配使用用于数据跨越组件的数据的传输。最常见和使用的是组件状态的初始化,但是需要注意props、methods、data、computed这些属性的覆盖问题,在非发布模式将会进行报错,但是在发布模式下将不会进行报错直接执行。 当程序执行到这里表明cre...

2020-06-29 09:44:18 370

原创 Vue源代码阅读9值provide属性初始化

provide属性和inject属性是需要进行搭配使用的,用于跨越父子组件的数据祖先组件向后代组件传输数据。这里我们将对provide属性的初始化进行讲解。export function initProvide (vm: Component) { const provide = vm.$options.provide if (provide) { vm._provided = typeof provide === 'function' ? provide.ca...

2020-06-29 09:13:18 340

原创 Vue源码阅读之8状态初始化

进入create状态的第二个过程就是状态的初始化,状态的初始化是对于Vue对象的Props,Methods,Data,watch,computed进行初始化经过这里Vue的一些关键的属性才被初始化可以去使用。export function initState (vm: Component) { vm._watchers = [] const opts = vm.$options if (opts.props) { initProps(vm, opts.props) } if

2020-06-19 14:47:12 119

原创 Vue源代码阅读之7初始化注入

讲initInjections之前首先是需要对大家进行讲解inject和provide这两个属性,这两个属性一般不建议在普通的应用程序中使用,在高等级的组件中使用用于父组件向子组件传递数据。祖先组件在provide中提供后代可使用的数据,后代组件在inject中设置使用祖先组件的属性名。export function initInjections (vm: Component) { const result = resolveInject(vm.$options.inject, vm) if

2020-06-17 16:10:01 551

原创 Vue源代码阅读之7从BeforeCreated到Created概述

前面讲述了从创建Vue对象到BeforeCreated之间的过程,完成了生命周期,初始化事件,初始化渲染这三个部分之后就结束了BeforeCreated过程,从而调用BeforeCreated的钩子函数,然后就正式进入了create阶段。 之前的章节里面讲过从创建Vue队形到BeforeCreated这个过程中主要是进行父子组件的相关信息的继承(事件,参数,渲染)等方面,对于具有组件特色相关的内容并未做太多的处理。我们后面将要讲解的内容create过程主要就是组件的相关参数的初始化过程,包...

2020-06-17 14:48:19 246

原创 Vue源代码阅读之6BeforeCreated总结

经过前面三个章节的介绍我们知道在BeforeCreated期间做了三件事情,初始化生命周期,初始化事件,初始化渲染。初始化生命周期主要是初始化Vue对象的一些过程状态查找父节点,并在父节点注册自己的相关信息。初始化事件主要是获取父节点的监听的事件,并添加到子节点上。初始化渲染主要是获取父节点的渲染内容,以及插槽,范围插槽,创建DOM元素函数的定义,继承父节点的$attrs属性和$listeners属性。从上面的介绍可以看到这里主要是子组件继承父节点的一些公有的属性,同时初始化一些自己的状态信

2020-06-15 10:26:31 1131

原创 Vue源码阅读之5渲染初始化

前面的章节讲述了从创建到BeforeCreated的前两个过程生命周期初始化和事件的初始化,这里讲述这里的最后一个过程渲染初始化,渲染初始化完成之后便完成了BeforeCreated。export function initRender (vm: Component) { vm._vnode = null const options = vm.$options const parentVnode = vm.$vnode = options._parentVnode const ren

2020-06-12 13:50:18 288

原创 Vue源码阅读之4事件初始化

之前讲到了创建Vue对象到BeforeCreated之后就会进行生命周期的初始化,这里我们将生命周期初始化之后的事件初始化initEvents。export function initEvents (vm: Component) { vm._events = Object.create(null) vm._hasHookEvent = false const listeners = vm.$options._parentListeners if (listeners) { up

2020-06-11 10:35:51 308

原创 Vue源码学习3之生命周期的初始化

上一个章节我们降到了从创建Vue对象到BeforeCreated过程,其中第一个过程就是生命周期的初始化。这里我们讲会讲解生命周期的初始化过程进行了哪些操作。export function initLifecycle (vm: Component) { const options = vm.$options let parent = options.parent if (parent && !options.abstract) { while (parent...

2020-06-10 18:37:11 357

原创 Vue 源码阅读2之从0到beforeCreated

Hello,大家好。现在咱们正式进入Vue源码阅读的主体部分。当网页中存在Vue文件在浏览器中运行的时候,Vue的环境已经存在于浏览器中。 当我们在其他脚本中执行var vm=new Vue(.....)时将会开始了Vue对象的一生。 (1)执行上述程序的时候将会调用Vue源代码目录下的/src/core/instance/index.js的Vue函数。这个函数主要的作用是调用Vue原型链上的_init函数以实现Vue对象的初始化过程。function Vue (optio...

2020-05-28 18:38:06 285

原创 JavaScript的假值问题

JavaScript中的真假值判断是一个比较重要的知识点下面针对每种数据类型进行分析:大家都知道当前JavaScript的数据类型有:undefined,null,Object,Number,String,Symbol,Boolean这七种数据类型。undefined数据类型只有一种数据undefined,对应的布尔值为false。null数据类型也是只有一种数据null,对应的布尔值为false。Object是一个大的数据类型包括array,function,正则表达式等,所有的Objec

2020-05-24 17:46:40 190

原创 JavaScript作用域问题

JavaScript的作用域问题是一个比较复杂的问题也是在编写程序过程中比较容易出错的地方,特别是从C/C++这些具有块级语言功能的语言转过来的工程师。 JavaScript在ES6时代之前是没有块级作用域的概念只有全局作用域和函数级作用域这两种作用域。同时由于JavaScript定义变量的特殊性导致编写程序的时候容易出现一些问题造成不少的麻烦。 JavaScript定义变量的特殊性:(1)使用var定义变量的时候会产生变量提升。(2)使用var定义变量...

2020-05-24 15:47:04 173

原创 Vue 源码阅读1之开篇感悟

随着互联网的大风越刮越大,前端的发展也是十分的迅猛,出现了各种各样的前端框架,Vue是其中的佼佼者,这一系列的文章我将以初学者的身份分析Vue的相关实现,希望能够和大家一起进步,早日实现高薪。 我个人感觉要要学习Vue的源码,Vue的生命周期是离不开的话题,每个人都知道Vue的生命周期为beforeCreate,Created,BeforeMount,Mounted,BeforeUpdate,Updated,BeforeDestroy,Destroyed。所以这一系列的文件将以生...

2020-05-22 13:42:49 135

原创 JavaScript 基础学习之 其他数据类型转换为数字类型

Hello,大家好。很多前端面试的试题都会考到其他类型到数值类型的转换。特别是在隐式转换的时候会特别的多,现在我们就对这一点进行讨论:其他类型转换为数值类型的值大致分为4种情况:(1)非对象类型的参数转换为数值:...

2020-05-14 14:30:32 619

原创 原生前端之nodetext操作

JavaScript与HTML交互最主要的是使用DOM进行控制HTML的文档信息。对于具有全标签结构的HTML元素可以分为属性和文本两部分,下面我们将对文本这一部分进行详细的讲解。话先不多说先举个栗子压压惊。<!DOCTYPE html><html> <head> <title>text的使用</title&gt...

2019-12-30 15:47:48 562

原创 原生前端之DOM属性操作

JavaScript与HTML交互最主要的是使用DOM进行控制HTML的文档信息。对于具有全标签结构的HTML元素可以分为属性和文本两部分,下面我们将对属性这一部分进行详细的讲解。话先不多说先举个栗子压压惊。<!DOCTYPE html><html> <head> <title>设置读取元素的属性</title&...

2019-12-26 11:19:36 559

原创 原生前端之样式类的操作---classList

操作自己DOM元素的样式可以使用className和classList两种方式 进行操作。className返回的是一个此元素包含的样式类的字符串以空格符间隔,classList返回的是一个数组。这里我们主要讲解classList的使用。classList包含5种方法:add:添加类contains:是否包含此类remove:删除此类replace:进行类的替换togg...

2019-12-24 17:07:02 575

原创 Vue学习 开始走向VUE开发5---条件渲染详解

这一节我们来讲条件渲染,单独讲解条件渲染可能比较单调和简单,这里我添加了v-for的组合使用。条件渲染主要有v-if,v-else-if,v-else,v-show。v-if后面接的表达式需要指明结果是真还是假,当条件为真时渲染v-if所在标签的内容,当条件为假是不渲染v-if所在标签的内容。v-else-if后面接的表达式指明结果为真还是假,当条件为真时渲染v-else-if所在标签...

2019-12-04 11:01:38 99

原创 Vue学习 开始走向VUE开发4---v-html使用详解

v-html的作用是设置和修改innerHTML。下面来看看示例程序:<!DOCTYPE html><html><head><meta charset="utf-8"><title>Vue v-html</title><script src="https://cdn.bootcss.com/vue/2...

2019-12-03 09:52:52 319

原创 Vue学习 开始走向VUE开发3---v-bind的使用

v-bind主要是用来动态的绑定一个或者是多个特性,可以使用多种数据类型。废话不多说,先上程序。<!DOCTYPE html><html><head><meta charset="utf-8"><title>Vue v-bind</title><script src="https://cdn.boot...

2019-11-29 15:46:32 277

原创 Vue学习 开始走向VUE开发2---插值使用详解

插值是在Vue使用中最常见和最简单的一个用法,使用两层嵌套的大括号({{变量}})表示大括号中的内容将会被替换为变量表示的值,主要是用来表示文本的内容。 Vue的实现过程中将会跟踪这个变量值的变化,当这个值变化的时候对应使用插值的地方上的值也将会变化,经过我的实验Vue跟踪的值不只是会跟踪Vue对象中data属性中的值也可以跟中window环境下的值。具体的程序...

2019-11-29 13:21:04 179

原创 数据结构与算法:4栈的链式存储

上一章我们讲了栈的线性存储这里我们将会讲解栈的链式存储,和线性表的顺序存储和链式存储一样。栈的链式存储也解决了栈的顺序存储需要事先分配整块存储空间的问题。栈的结构typedef struct stack{ struct sStackNode *top; int len;}sStack,*psStack;下面来介绍一下栈的操作:1.初始化栈sStack*...

2019-11-27 21:40:24 128

原创 数据结构与算法:3栈的顺序存储

栈是线性表的一种特例,它使得数据先入后出,就行垒砖似的最先垒的砖在最下面但是取的时候需要最后才能取到,最后垒的砖在最上面,但是取的时候是第一个取走。栈的结构:typedef struct stack{ int data[MAX]; int top;}sStack,*psStack;这里是使用的int型的数据,data数组为栈空间,最多数据元素为MAX个,top指向...

2019-11-19 22:00:00 156

原创 Lintcode 42. 最大子数组的和

Lintcode的第42题最大子数组的和这道题开始的时候会让人会想的很多感觉没有解决问题的思路很容易写出循环嵌套的暴力解题的算法,其实简单的想想这个问题是很容易解决的。首先将数组分成两类:1包含正数的数组2不包含整数的数组。对于包含正数的数组的处理比较复杂,咱们这里先不说线索对于不包含正数的数组的处理:不包含正数的数组数组不包含正数的解题思路是获取整个数组中的最大值并返回最大值就可...

2019-10-31 09:15:21 138

数字图像处理的MATLAB实现 第2版(美)冈萨雷斯等著;阮秋琦译.pdf

高清完整版,带书签。。。。。值得下载。

2019-05-14

汇编程序编译成可执行文件

汇编程序编译成可执行文件

2017-04-11

敏捷技术理念

此书详细的讲述了敏捷理念

2017-01-13

linux下c语言编程

这本书是一本涉及许多关于编程的知识关于内存指针数据结构文本系统linux系统等的综合性的书适合快速入门以及提高水平选择方向的好书。

2015-06-05

Linux 内存管理内幕

Linux 内存管理内幕,他是一本非常不错的书值得你的一阅

2015-04-23

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

TA关注的人

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