源码

用Doxygen+GraphViz生成OSSIM源码中函数关系调用图

给你一囗甜甜゛ 提交于 2020-01-15 16:06:22
在阅读OSSIM源码时经常要参阅代码中函数调用图,下面我们采用Doxygen+GraphViz的方式生成这种图像,由于OSSIM大多数源码的函数调用非常复杂,这先上两张简单的PNG图片。 OSSIM V 2.1 源码: https://github.com/ossimuser/OSSIM 图1 sim-log.c函数关系调用 图2 ossim.h头文件中的函数调用关系 图3 sim-container.h头文件文件中函数调用关系 Tips: Doxygen+GraphViz组合的安装在Windows、Linux、Mac平台都有相关安装资料,这里不详细叙述。 来源: 51CTO 作者: 李晨光 链接: https://blog.51cto.com/chenguang/2466906

promise源码完善

倾然丶 夕夏残阳落幕 提交于 2020-01-15 15:23:57
关于调用then,传入回调函数为null 或者数值的问题 原生Promise回调函数传入null: //let Promise=require("./Promise"); let p1 = new Promise ( ( resolve , reject ) = > { resolve ( 'ok' ) ; } ) ; let p2 = 来源: CSDN 作者: gloria123_ 链接: https://blog.csdn.net/gloria123_/article/details/103983197

A2dp sink 初始化流程源码分析

不羁岁月 提交于 2020-01-15 08:03:10
A2dp sink的初始化流程和A2dp 的初始化流程,基本一样,这里做简单分析.这里分析的android的版本是Android O. 我们先从service的启动说起吧. 下面 是启动的时候的log: D/BluetoothAdapterService( 2029): setProfileServiceState() - Starting service com.android.bluetooth.a2dpsink.A2dpSinkService 01-01 08:00:22.042 D/A2dpSinkService( 2029): Received start request. Starting profile... 01-01 08:00:22.045 D/A2dpSinkService( 2029): start() 01-01 08:00:22.054 I/BluetoothA2dpSinkServiceJni( 2029): classInitNative: succeeds 我们看看 A2dpSinkService.java的start函数的实现: protected boolean start() { if (DBG) { Log.d(TAG, "start()"); } // Start the media browser service. Intent

spring源码------一个请求在spring中的处理过程(从Servlet规范到FrameworkServlet)代码及流程图说明 (1)

杀马特。学长 韩版系。学妹 提交于 2020-01-15 07:11:45
文章目录 1.从`Servlet`规范分析`request`请求怎么进入到`Spring`中的 1.1 `Servlet`规范中的请求处理流程 1.2 从规范到spring中的实现 1.2.1 接收请求的`Servlet`与区分不同类型请求`HttpServlet` 1.2.2 进入到spring的请求逻辑处理 2. `FrameworkServlet`中对请求的分析和处理过程 2.1 请求开始处理前的上下文,参数以及其他的准备 2.1.1 拦截器对request的加工处理 2.2 请求处理完成之后对请求的处理 2.2.1 处理请求结束前逻辑 2.2.2 发布请求处理完成事件  在网上有很多spring处理请求的流程图,但是都是比较简单的过程,都是围绕的 DispatcherServlet 进行说明的,这里我们将从一个请求如何进入spring中开始,到返回结果结束进行说明。 1.从 Servlet 规范分析 request 请求怎么进入到 Spring 中的  spring的web框架的设计是按照 servlet 规范来进行扩展的,因此这里需要对 Servlet 规范讲一下。 1.1 Servlet 规范中的请求处理流程  这里直接将翻译过后的原文借用过来:  servlet 完成初始化后,servlet 容器就可以使用它处理客户端请求了。 客户端请求由

部分常用JS API源码学习

萝らか妹 提交于 2020-01-15 05:04:28
部分常用JS API源码学习 map() filter() some() forEach() map() // map() Array . prototype . gMap = function ( fn ) { var arr = [ ] //创建一个新数组 循环并对新数组进行操作 最后返回新数组 这样就不会改变原数组 for ( var i = 0 ; i < this . length ; i ++ ) { arr . push ( fn ( this [ i ] , i ) ) } return arr } var arr1 = [ 1 , 2 ] console . log ( arr1 . gMap ( function ( item , index ) { return item * 2 ; } ) ) // [2, 4] filter() // filter() Array . prototype . gFilter = function ( fn ) { var arr = [ ] //创建一个新数组 循环并对新数组进行操作 最后返回新数组 这样就不会改变原数组 for ( var i = 0 ; i < this . length ; i ++ ) { if ( fn ( this [ i ] , i ) ) { //这里的fn返回bool值 arr .

vue源码分析(二)

淺唱寂寞╮ 提交于 2020-01-15 04:31:28
观察者模式 观察者模式(又被称为发布-订阅(Publish/Subscribe)模式,属于行为型模式的一种,它定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态变化时,会通知所有的观察者对象,使他们能够自动更新自己。 vue的响应式原理采用的就是观察者设计模式。下面是观察者模式在vue中的运用解析。 图片来源:https://blog.csdn.net/github_36369819/article/details/79201314 Observer:监听者,通过Obeject.defineProperty对数据进行劫持,数据变更时通知Dep。 Dep:订阅器,用一个数组收集watcher依赖,当数据变更时,通知数组中的watcher进行更新。 Watcher:观察者,收到Dep发来的数据变更通知,获取新数据,更新视图。 下面来看vue中的具体实现。 Observer var Observer = function Observer (value) { this.value = value; this.dep = new Dep(); this.vmCount = 0; def(value, '__ob__', this); if (Array.isArray(value)) { if (hasProto) { protoAugment

springmvc源码部分理解

白昼怎懂夜的黑 提交于 2020-01-15 03:56:11
目录 初始化 处理请求 总结: 主要还是借鉴了很多大佬的分析,参考如下: 完整版: https://www.cnblogs.com/zgwjava/p/11040154.html 分步骤一: https://blog.csdn.net/gududedabai/article/details/83352106 分步骤一: https://blog.csdn.net/gududedabai/article/details/83375156 详细版: https://blog.csdn.net/qq_38410730/article/details/79507465 从代码角度看: 初始化 DispatcherServlet.onRefresh() protected void onRefresh(ApplicationContext context) { this.initStrategies(context); } ​ //根据web.xml中配置的和默认的设置初始化 protected void initStrategies(ApplicationContext context) { this.initMultipartResolver(context); //上传文件相关 this.initLocaleResolver(context); //default this

RESTful源码笔记之RESTful Framework的基本组件

喜夏-厌秋 提交于 2020-01-15 00:28:45
快速实例 Quickstart 序列化 创建一个序列化类 简单使用 开发我们的Web API的第一件事是为我们的Web API提供一种将代码片段实例序列化和反序列化为诸如 json 之类的表示形式的方式。我们可以通过声明与Django forms非常相似的序列化器(serializers)来实现。 models部分: from django.db import models # Create your models here. class Book(models.Model): title=models.CharField(max_length=32) price=models.IntegerField() pub_date=models.DateField() publish=models.ForeignKey("Publish") authors=models.ManyToManyField("Author") def __str__(self): return self.title class Publish(models.Model): name=models.CharField(max_length=32) email=models.EmailField() def __str__(self): return self.name class Author(models

Linux安装MySQL--源码安装包

痞子三分冷 提交于 2020-01-14 23:57:18
标注: Linux需要先配置网络yum源,确定yum能在线安装软件包,方便测试过程中安装部分依赖包。配置163网易提示的网络yum源参考博客 http://www.cnblogs.com/zoulongbin/p/5773330.html 提示: Linux软件编译安装都需要依赖两个安装包 gcc gcc-c++ make 可使用 yum -y install gcc gcc-c++ make 在线安装。 1、 检查本机是否有安装mysql数据库。 2、卸载系统自带的mysql数据库。(卸载之前需要先把mysql数据库停止) 3、查看是否有残留mysql目录或文件。 4、在线yum安装编译所需要的工具和库。 5、检查安装编译所需要的工具和库是否已经安装完成。 6、编译安装mysql前需要先创建mysql用户和组,创建mysql安装目录及存放目录。 7、一般CentOS系统都没有自带安装cmake编译工具,yum也不一定能安装cmake编译工具,所以,本测试机下载cmake源码编译工具和mysql源码安装包。(mysql 5.5以上版本(包含mysql 5.5版本)都需要使用cmake工具进行编译,不能使用./configure编译) Cmake官网下载地址: https://cmake.org/download/ mysql源码安装包下载地址: 标注: mysql 5.7以上版本

Android10源码 Handler、Looper和MessageQueue

自作多情 提交于 2020-01-14 23:24:24
源码使用Android Q 知识储备 知道Handler是干什么的,怎么使用的就可以了,如果不会可以看度娘。 获取Handler的方法 以下方法为Google官方文档提供的说明 构造方法 说明 Handler() 默认构造函数将Handler与当前线程的Looper关联。 Handler(Handler.Callback callback) 构造函数将Handler与当前线程的Looper关联,并接受一个回调接口,在该接口中可以处理消息。 Handler(Looper looper) 使用传入的Looper Handler(Looper looper, Handler.Callback callback) 结合2、3 Handler源码 构造方法 public Handler ( ) { this ( null , false ) ; } public Handler ( @Nullable Callback callback ) { this ( callback , false ) ; } public Handler ( @NonNull Looper looper ) { this ( looper , null , false ) ; } public Handler ( @NonNull Looper looper , @Nullable Callback