源码

requireJS 源码(三) data-main 的加载实现

自古美人都是妖i 提交于 2020-02-04 08:00:49
(一) 入口   通过 data-main 去加载 JS 模块,是通过 req(cfg) 入口去进行处理的。   为了跟踪,你可以在此 加断点 进行调试跟踪。 (二)       req({ })执行时,function newContext() 已经创建了上下文环境 context。我们可以看看 context 拥有哪些属性与方法。       通过执行 context.confgiure(config)即可加载 data-main所对应的js文件(main.js)。    当req(cfg)执行,config值 如右图所示---------    在context.confgiure()函数最后一行代码中,开始执行 context.require() .       context.require(...),其中 context.require = context.makeRequire();   其中,makeRequire() 以及 localRequire() 这里已经形成了闭包。      因为在 req( { } )调用makeRequire()时 ,已经直接返回 localRequire(),因此 context .require(..) , 直接进入 localRequire()函数。   localRequire()函数里,做很很多事,但是,由于此时 全局队列

Netty源码解析(一)初始化

梦想的初衷 提交于 2020-02-04 07:52:17
Netty运行整体流程: 以后的讲究都会按着这幅图来理解 1.对NioEventLoopGroup的整体流程 从第一行代码分析 EventLoopGroup bossGroup=new NioEventLoopGroup(1);//cpu核心数*2 EventLoopGroup workerGroup=new NioEventLoopGroup(); //cpu核心数*2 看NioEventLoopGroup的构造方法 public NioEventLoopGroup(int nThreads) { //这里给Executor赋值为null this(nThreads, (Executor) null); } 继续往里面跟 public NioEventLoopGroup(int nThreads, Executor executor) { //executor默认为null //ServerSocketChannel 就是通过ServerSocketChannel.open()==》SelectorProvider.provider().openServerSocketChannel()创建的 this(nThreads, executor, SelectorProvider.provider()); } 这里可以把SelectorProvider.provider(

STL源码剖析(适配器)

有些话、适合烂在心里 提交于 2020-02-04 06:07:42
STL中由三类适配器,它们分别是: 1.容器适配器(stack、queue) 2.迭代器适配器(insert_iterator、reverse_iterator、iostream_iterator) 3.函数适配器(bind1st等等) 容器适配器 关于容器适配器我们已经在前面的http://www.cnblogs.com/runnyu/p/6003821.html讲过了。 迭代器适配器 1.insert iterator 当我们这样使用copy算法的时候: 1 vector<int> ins = { 1, 3, 5, 7}; 2 vector<int> coll; // coll为空 3 copy(ins.begin(), ins.end(), coll.begin()); View Code 毫无疑问会出现错误,因为copy算法中调用的是iterator的operator*跟operator=,用的是赋值操作,而要进行赋值的iterator并不合法。 insert iterator可以解决这个问题,其实它的实现很简单。 下面是back_inserter的用法跟实现,它的实现主要是重载了operator*跟operator=方法,然后提供了一个接口函数。 1 // 以容器为参数 将元素copy到coll的末尾 2 copy(ins.begin(), ins.end(), back

Linux下编译、安装php

戏子无情 提交于 2020-02-04 05:44:55
一、apache环境下php的安装步骤如下: 【 注意:编译安装php前,应先安装好apache,因为编译php时要用到apache的路径 】 1. 在http://www.php.net/downloads.php下载php源代码,并存至/usr/local/src下 2. 切换至/usr/local/src下,解压php源码,并切换至解压后的php目录下 3. ./configure --prefix=/usr/local/php --with-apxs2=/usr/local/httpd/bin/apxs --enable-mysqlnd 【配置时,可能会报错configure: error: xml2-config not found. Please check your libxml2 installation.--------解决方法: 需安装libxml2作为依赖(centos和ubuntu上安装libxml2的方式不太一样)】 4. make 5. make install 6. 配置http.conf,主要是整合php作为apache的模块出现(有时会自动帮我们配置好),在http.conf里加一句 AddType application/x-httpd-php .php 7. 复制php源码包中的 php.ini-development到指定目录(此处为:

ArrayList源码分析(超全超长)

霸气de小男生 提交于 2020-02-04 04:28:34
ArrayList是Java非常重要的集合类,相信大家对它并不陌生。List和Map号称是Java最常用、使用最广泛的集合类,比如,我们从数据库获取多个数据的时候,都是返回List集合,我还没见过返回过Set集合;所以相比之下,Set集合使用的场景就非常少。不过这篇博客主要讲解ArrayList面试题及源码分析,未涉及到Set集合、Map集合。 在认识ArrayList之前,我们先回顾一下数组,因为Arrayist底层是基于变长数组实现的。 数组 数组是基于线性数据结构实现的,在Java中创建数组时,会在内存中划分出一块连续的内存空间,然后再根据数组长度划分成跟数组长度一样的一小块内存空间。 我们来画个图简单描述一下, 下面图中创建了字符串数组,定义它的长度为5,所以就会在内存中创建一大块连续的内存,然后再分成5小块内存(等分),并且该数组中的元素都有默认值:null。 基本所有的数组面试题,都会有一个说法:就是 数组的特点是,查询修改快,增加删除慢 。 我们还知道在数组中有索引这个概念, 当数组内存空间分配好了之后,会为每个元素分配一个索引,从0开始,直到数组长度-1 。索引非常重要,因为数组的增删改查都是基于索引实现的。 如果我们想查询的时候,直接根据索引来查询 string[0]; 如果我们想修改的时候,也是根据索引来修改 string[0] = “java”;

【工程源码】基于FPGA的多通DDS道信号发生器设计与实现

本小妞迷上赌 提交于 2020-02-04 04:28:14
按键描述: 功能按键(S0):正常情况下按一下,进入ACM9767模块的CH1通道波形选择, 按第二下,进入ACM9767模块的CH2通道波形选择,按第三 下,进入波形频率设置模式,按第四下,恢复正常模式 按键加(S1) :正常模式无作用;波形选择模式下,顺序切换波形,频率 设置模式下,顺序切换频率(增加) 按键减(S2) :正常模式无作用;波形选择模式下,倒序切换波形,频率 设置模式下,倒序切换频率(降低) 有三种波形可以供选择(正弦波,方波,三角波),默认CH1是正弦波,CH2是 方波,频率都是1kHz. 频率的切换有8个固定的频率分别为:1kHz, 10kHz, 50kHz, 100kHz, 500kHz,1MHz,5MHz,10MHz. 当在频率设置模式下,按键加(S1)到最大频率(10MHz),继续按此按键 频率会回到最小频率(1kHz);按键减(S2),功能以此类推, 例如我想设置通道1(CH1)为10k的方波:先按一次功能按键(S0),进入 ACM9767模块的CH1通道波形选择模式(默认CH1是正弦波) ,此时按一次按键加(S1),就会切换到方波,此时再按一 次功能按键(S0),会进入ACM9767模块的CH2通道波形选择 模式,但是我们是想设置频率,所以需要再按一次功能按 键(S0),进入波形频率设置模式(默认频率是1kHz),此 时按一次按键加(S1)

Android IntentService的使用和源码分析

有些话、适合烂在心里 提交于 2020-02-04 03:00:18
引言 Service服务是Android四大组件之一,在Android中有着举足重轻的作用。Service服务是工作的UI线程中,当你的应用需要下载一个文件或者播放音乐等长期处于后台工作而有没有UI界面的时候,你肯定要用到Service+Thread来实现。因此你需要自己在Service服务里面实现一个Thread工作线程来下载文件或者播放音乐。然而你每次都需要自己去写一个Service+Thread来处理长期处于后台而没有UI界面的任务,这样显得很麻烦,没必要每次都去构建一个Service+Thread框架处理长期处于后台的任务。Google工程师给我们构建了一个方便开发者使用的这么一个框架---IntentService。 IntentService简介 IntentService是一个基础类,用于处理Intent类型的异步任务请求。当客户端调用android.content.Context#startService(Intent)发送请求时,Service服务被启动,且在其内部构建一个工作线程来处理Intent请求。当工作线程执行结束,Service服务会自动停止。IntentService是一个抽象类,用户必须实现一个子类去继承它,且必须实现IntentService里面的抽象方法onHandleIntent来处理异步任务请求。 IntentServic示例

JVM学习之部分源码分析

独自空忆成欢 提交于 2020-02-04 02:38:17
1.获取类加载器(ClassLoaer)的途径 ClassLoader loader = 对象.getClassLoader();获取当前类的ClassLoader ClassLoader loader = Thread.currentThread().getContextClassLoader();获取当前线程上下文的ClassLoader ClassLoader loader = ClassLoader.getSystemClassLoader();获取系统的ClassLoader ClassLoader loader = DriverManager.getCallerClassLoader();获取调用者的ClassLoader 2.ClassLoader源码内容: 例题: public class JVMTest1{ public static void main(String args[]) throws Exception{ String[] string = new String[2]; System.out.println(string.getClass().getClassLoader()); System.out.println("---------"); JVMTest1[] test = new JVMTest1[2]; System.out.println

常规容器下SpringBootServletInitializer如何实现web.xml作用解析

房东的猫 提交于 2020-02-04 01:52:20
在之前的《使用jsp作为视图模板&常规部署》章节有过一个实践,需要启动类继承自SpringBootServletInitializer方可正常部署至常规tomcat下,其主要能够起到web.xml的作用。下面通过源码简单解析为何其能够替代web.xml。 本章概要 1、源码分析如何实现SpringBootServletInitializer整个加载过程; 2、实现自定义WebApplicationInitializer配置加载; 3、实现自定义ServletContainerInitializer 配置加载; 示例代码如下 1、首先web.xml主要配置各种servlet,filter,listener等,如常见的Log4jConfigListener、OpenSessionInViewFilter、CharacterEncodingFilter、DispatcherServlet等,此部分信息均是容器启动时加载。 2、在springboot中我们从SpringBootServletInitializer源码入手: public abstract class SpringBootServletInitializer implements WebApplicationInitializer{ .................. public void onStartup

Linux内核源码结构(1)

醉酒当歌 提交于 2020-02-04 01:09:26
在上一期中,我们介绍了Linux内核发展的历史,也介绍了与其相关的UNIX和GNU的相关知识。从这一期开始,我们将介绍Linux内核的源码结构。我们将先根据Linux源码的 目录结构 进行分析,到本文章发布前,Linux 4.19的最新版本为Linux 4.19.94,我们将依据openEuler开源社区源码并参考Linux 4.19.94版内核源码进行分析。 一、Linux内核源码的目录结构分析 下图列出了截至文章发表前openEuler开源社区kernel目录下的目录结构[5]: 其中各个文件夹中 源代码的功能 如下表所示[1] [3]: 源代码功能表 目录/文件名 源码功能简介 /Documentation 说明文档,对每个目录的具体作用进行说明。 /arch 不同CPU架构下的核心代码。其中的每一个子目录都代表Linux支持的CPU架构。 /block 块设备通用函数。 /certs 与证书相关。 /crypto 常见的加密算法的C语言实现代码,譬如crc32、md5、sha1等。 /drivers 内核中所有设备的驱动程序,其中的每一个子目录对应一种设备驱动。 /include 内核编译通用的头文件。 /init 内核初始化的核心代码。 /ipc 内核中进程间的通信代码。 /kernel 内核的核心代码,此目录下实现了大多数Linux系统的内核函数