函数调用

JS高级

只谈情不闲聊 提交于 2020-03-01 15:35:11
1. 正则表达式: 2. String中的正则API: 1. 正则表达式: 2. String中的正则API: 查找: 1. 查找一个固定的关键词出现的位置: var i=str.indexOf("关键词"[,starti]) 在str中从starti位置开始找下一个"关键词"的位置 如果省略starti,则默认从0位置开始向后找 返回: “关键词”第一字所处位置的下标 如果找不到,返回-1 问题: 只支持查找一个固定不变的关键词 2. 用正则表达式查找一个关键词的位置: var i=str.search(/正则/i); 在str中查找符合"正则"要求的敏感词 返回值: 关键词的位置 如果找不到,返回-1 问题: 正则默认区分大小的! 解决: 在第2个/后加后缀i,表示ignore,意为:忽略大小写 问题: 只能获得关键词的位置,不能获得关键词的内容 解决: match 3. match: 1. 查找一个关键词的内容和位置: var arr=str.match(/正则/i); 在str中查找符合"正则"要求的敏感词的内容和位置 返回值: 数组arr:[ "0":"关键词", "index": 下标i ] 如果找不到: 返回null 问题: 只能查找第一个关键词,不能查找更多关键词 2. 查找所有关键词的内容: var arr=str.match(/正则/ig) //g global

PHP_框架储备资料

自古美人都是妖i 提交于 2020-03-01 14:33:29
spl_object_hash($this); //返回指定对象的hash id,字符串,对于每个对象它都是唯一的,并且对同一个对象它总是相同。 debug_print_backtrace() debug_backtrace() //只是前者直接打印出来了而已。查看整个程序的调用栈,用来查看瞬间函数调用栈,方便查错。 is_callable() 验证变量的内容能否作为函数调用。 这可以检查包含有效函数名的变量,或者一个数组,包含了正确编码的对象以及函数名。 is_callable($object, true, $method_name) is_callable('parent::__construct') is_callable(array('User', 'showAge')) 来源: oschina 链接: https://my.oschina.net/u/1425152/blog/637223

线程之线程同步

风流意气都作罢 提交于 2020-03-01 12:51:01
本文来自个人博客: https://dunkwan.cn 文章目录 线程同步 互斥量 函数`pthread_mutex_timedlock` 读写锁 带有超时的读写锁 条件变量 自旋锁 屏障 线程同步 互斥量 互斥量从本质上来说是一把锁,在访问共享资源前对互斥量进行设置,在访问完成后释放互斥量。互斥量使用 pthread_mutex_t 数据类型表示的。在使用互斥量以前,必须首先对它进行初始化,可以把它设置为常量 PTHREAD_MUTEX_INITIALIZER (只适用于静态分配的互斥量),也可以通过调用 pthread_mutex_init 函数进行初始化。如果动态分配互斥量(例如通过调用 malloc 函数),在释放内存前需要调用 pthread_mutex_detroy 。 # include <pthread.h> int pthread_mutex_init ( pthread_mutex_t * restrict mutex , const pthread_mutexattr_t * restrict attr ) ; int pthread_mutex_destroy ( pthread_mutex_t * mutex ) ; 两个函数的返回值:若成功,返回 0 ;否则,返回错误编号。 要用默认的属性初始化互斥量,只需把 attr 设为 NULL 。

ES6 最好用的箭头函数

落花浮王杯 提交于 2020-03-01 11:46:41
箭头函数 箭头函数改变了 this 指向多年来的问题 回顾: this 通过对象调用函数,this指向对象 直接调用函数,this指向全局对象 通过 new 调用函数, this 指向新创建的对象 通过 apply , call , bind 调用函数, this 指向指定的数据 DOM 事件函数, this 指向事件源 让我们来举个栗子 //首先我们创建一个对象 const obj = { count : 0 , //声明一个属性0 start : function ( ) { setInterval ( function ( ) { //调用计时器 this . count ++ ; //每隔一秒++ console . log ( this . count ) ; //输出 } , 1000 ) } } obj . start ( ) //执行此函数 这样看每次输出时是不是都会输出 count++ 之后的值1, 2,3, 4,5但事实不是这样。 它每次输出的是 NaN 为什么会是这样呢,那是因为在执行函数时是正常调用,函数指向的是obj,而函数里面的计时器调用时则不是直接调用的,而是 window 调用的,所以在执行时 this 默认指向 window 也就导致了输出时是 NaN 了,这是一个典型的this默认指向的问题。 以前我们怎么解决呢,一般是在 this

wpa_supplicant代码初探收藏

≡放荡痞女 提交于 2020-03-01 09:31:07
wpa_supplicant代码初探收藏 这几天在尝试把wpa_supplicant移植到windows ce上,替换微软的WZC。先把源代码down下来,了解了一下大致的结构。 wpa_supplicant运行的整个 核心就是 eloop_run 函数 。这个函数负责处理应用程序的请求和数据链路层发来的EAPOL数据。eloop的针对不同的平台有好几个实现版本,我这里只讨论针对WIN32的eloop_win.c版本。 外部需要通过调用eloop_register_event或者eloop_register_read_sock来注册一个回调函数,并绑定了一个相应的事件。eloop会等待每一个事件的发生,并在事件发生时调用相应的回调函数进行处理。 所有与平台相关的网络驱动程序接口,都被通过wpa_driver_ops结构抽象成统一的接口,不管你是WEXT或者NDIS。因此也实现了平台无关性。 此外,wpa_supplicant与应用层通信的方式多种多样,有pipe、socket,你也可以实现自己的方式。只需要实现几个基本的函数就可以了: wpa_supplicant_global_ctrl_iface_init wpa_supplicant_global_ctrl_iface_deinit wpa_supplicant_ctrl_iface_init wpa_supplicant

PHP _ session 详解

左心房为你撑大大i 提交于 2020-03-01 09:18:16
http协议是WEB服务器与客户端(浏览器)相互通信的协议,它是一种无状态协议。所谓无状态,指的是不会维护http请求数据,http请求是独立的,非持久的。而越来越复杂的WEB应用,需要保存一些用户状态信息。这时候,Session这种方案应需而生。PHP从4.1开始支持Session管理。 session是很抽象的一个概念。我们不妨先从与它几个息息相关的有迹可寻的小切入点入手,然后逐渐地认识了解它。 session存储 首先,我们为什么需要Session,就是因为我们需要存储各个用户的状态数据。那么试问,如果由你来设计解决这个需求的方案,那么也许你会设置这样一个数据表用与存储各个用户的状态信息: uid created data max_age 94c55770fdf044a7 1270802787 jtUsername=admin 14400 2c37df64277e4409 1270822787 jtUsername=Joe;jtBooks=8; 14400 … … … … uid : 用户唯一标识符,区分其它用户 created : 记录产生时间 data : 存放与用户相关的数据 max_age : 记录的有效时间 同样地,PHP设计管理session方案也大致如此,它分别包含了以下信息: 1. session id 用户session唯一标识符,随机生成的一串字符串

wpa_supplicant 初始化流程分析

随声附和 提交于 2020-03-01 08:50:48
1. 启动命令 wpa supplicant 在启动时,启动命令可以带有很多参数,目前我们的启动命令如下: wpa_supplicant /system/bin/wpa_supplicant -Dwext -ieth0 -c/data/wifi/wpa_supplicant.conf -f/data/wifi/wpa_log.txt wpa_supplicant对于启动命令带的参数,用了两个数据结构来保存, 一个是 wpa_params, 另一个是wpa_interface. 这主要是考虑到wpa_supplicant是可以同时支持多个网络接口的。 wpa_params数据结构主要记录与网络接口无关的一些参数设置。 而每一个网络接口就用一个wpa_interface数据结构来记录。 在启动命令行中,可以用-N来指定将要描述一个新的网络接口,对于一个新的网络接口,可以用下面六个参数描述: -i<ifname> : 网络接口名称 -c<conf>: 配置文件名称 -C<ctrl_intf>: 控制接口名称 -D<driver>: 驱动类型 -p<driver_param>: 驱动参数 -b<br_ifname>: 桥接口名称 2. wpa_supplicant 初始化流程 2.1. main()函数: 在这个函数中,主要做了四件事。 a. 解析命令行传进的参数。 b. 调用wpa

Windows线程+进程通信

丶灬走出姿态 提交于 2020-03-01 08:15:48
一 Windows线程进程 1)定义 按照MS的定义, Windows中的进程简单地说就是一个内存中的可执行程序, 提供程序运行的各种资源. 进程拥有虚拟的地址空间, 可执行代码, 数据, 对象句柄集, 环境变量, 基础优先级, 以及最大最小工作集. Windows中的线程是系统处理机调度的基本单位. 线程可以执行进程中的任意代码, 包括正在被其他线程执行的代码. 进程中的所有线程共享进程的虚拟地址空间和系统资源. 每个线程拥有自己的例外处理过程, 一个调度优先级以及线程上下文数据结构. 线程上下文数据结构包含寄存器值, 核心堆栈, 用户堆栈和线程环境块. 2) 如下图: 3)线程与进程的关系 线程是进程中的实体,一个进程可以拥有多个线程,一个线程必须有一个父进程。线程不拥有系统资源,只有运行必须的一些数据结构;它与父进程的其它线程共享该进程所拥有的全部资源。 在多中央处理器的系统里,不同线程可以同时在不同的中央处理器上运行,甚至当它们属于同一个进程时也是如此。 4) 进程和线程的区别   (1)、进程是资源管理的基本单位,它拥有自己的地址空间和各种资源,例如内存空间、外部设备;线程只是处理机调度的基本单位,它只和其他线程一起共享资源,但自己没有任何资源。   (2)、以进程为单位进行处理机切换和调度时,由于涉及到资源转移以及现场保护等问题,将导致处理机切换时间变长,资源利用率降低

SetWindowsHookEx的用法

馋奶兔 提交于 2020-03-01 02:46:21
HOOK钩子详细介绍 基本概念 钩子(Hook),是Windows消息处理机制的一个平台,应用程序可以在上面设置子程以监 视指定窗口的某种消息,而且所监视的窗口可以是其他进程所创建的。当消息到达后,在目标窗口处理函数之前处理它。钩子机制允许应用程序截获处理 window消息或特定事件。 钩子实际上是一个处理消息的程序段,通过系统调用,把它挂入系统。每当特定的消息发出,在没有 到达目的窗口前,钩子程序就先捕获该消息,亦即钩子函数先得到控制权。这时钩子函数即可以加工处理(改变)该消息,也可以不作处理而继续传递该消息,还可以强 制结束消息的传递。 运行机制 1、钩子链表和钩子子程: 每一个Hook都有一个与之相关联的指针列表,称之为钩子链表,由系统来维护。这个列表的指针 指向指定的,应用程 序定义的,被Hook子程调用的回调函数,也就是该钩子的各个处理子程。当与指定的Hook类型关联的消息发生时,系统就把这个消息传递到Hook子程。 一些Hook子程可以只监视消息,或者修改消息,或者停止消息的前进,避免这些消息传递到下一个Hook子程或者目的窗口。最近安装的钩子放在链的开始, 而最早安装的钩子放在最后,也就是后加入的先获得控制权。 Windows 并不要求钩子子程的卸载顺序一定得和安装顺序相反。每当有一个钩子被卸载,Windows 便释放其占用的内存,并更新整个Hook链表

异步 JavaScript

别说谁变了你拦得住时间么 提交于 2020-03-01 02:36:24
简评:如果你对 JavaScript 异步的原理感兴趣,这里有一篇不错的介绍。 JavaScript 同步代码是如果工作的 在介绍 JavaScript 异步执行之前先来了解一下, JavaScript 同步代码是如何执行的。 这里有两个概念需要了解: ** 执行上下文(Excution Context)** 执行上下文是一个抽象的概念,用于表示 JavaScript 的运行环境,任何代码都会有一个执行上下文。 全局代码运行在全局执行上下文,函数里的代码运行在函数执行上下文,每一个函数都有自己的执行上下文。 调用堆栈(Call Stack) 调用栈是一个具有 LIFO(后进先出)结构的栈,用于储存代码执行阶段所有的执行上下文。 因为 JavaScript 是单线程的,所以 JavaScript 只有一个单独的调用栈。 我们以下面例子介绍同步代码执行过程。 const second = () => { console.log('Hello there!'); } const first = () => { console.log('Hi there!'); second(); console.log('The End'); } first(); 创建全局上下文(由 main() 表示),并将全局上下文推到栈顶。然后依次将遇到函数执行上下文推到栈顶(如果函数中执行其他他函数