源码

Axios中的取消请求源码解析

本小妞迷上赌 提交于 2020-03-02 18:02:50
前言 在开发中,为了活动动态数据,因此我们需要与后台通过请求进行交互,获取动态数据来展现给用户看。有些一些网站对实时信息要求还更高,比如股票类、聊天类、直播类等。本章内容涉及思想层面东西比较多,如果出现知识盲点无所谓,主要就是体会Promise的运用思想!思想!思想!(小白也可以试试) 当下流行的http库 http库在当下作为请求交互来说,是比较主流的,今天就给大家介绍一个比较受欢迎的库:Axios 它在github上的star数截至到2020年3月已经达到70.2k,这算是比较多的了 今天讲什么 由于Axios是基于Promise的,有些操作如果更多的触碰到底层promise,代码上不免会让大家比较蒙,本文主要不是为了科普Axios的基本代码(因为官网上中文的、英文的多了去了)。 今天就给大家说一下,比较难懂的代码:cancelToken,他是怎么利用Promise跑起来的以及一些设计思路,不管你会不会这个库,都可以尝试理解一下源码的设计思路。 取消请求 先说一下,有时我们上传一个文件到服务器的时候,文件很大,不可能一下传完,但是我们中途发现文件错了,因此我们点击取消,即为:取消请求。 在Axios中的代码如下: // 创建取消令牌的生成器对象 const CancelToken = axios.CancelToken; // 从中获取令牌对象 const source =

架构师成长系列 | 云原生时代的 DevOps 之道

ぃ、小莉子 提交于 2020-03-02 16:58:16
什么是云原生 为了解决传统应用升级缓慢、架构臃肿、不能快速迭代、故障不能快速定位、问题无法快速解决等问题,云原生这一概念横空出世。 Pivotal 是云原生应用的提出者,并推出了 Pivotal Cloud Foundry 云原生应用平台和 Spring 开源 Java 开发框架,成为云原生应用架构中先驱者和探路者。 早在 2015 年 Pivotal 公司的 Matt Stine 就写了一本叫做迁移到云原生应用架构的小册子,其中探讨了云原生应用架构的几个主要特征: 符合 12 因素应用 面向微服务架构 自服务敏捷架构 基于 API 的协作 抗脆弱性 后来 Pivotal 对云原生的定义做过几次更新, 最新的 Pivotal 官网上对云原生应用的最新介绍是关注以下四点: 集成 DevOps 持续交付 微服务 容器化 DevOps 是软件开发人员和 IT 运营之间的合作,目标是自动执行软件交付和基础架构更改流程。它创造了一种文化和环境,可在其中快速、频繁且更可靠地构建、测试和发布软件; 持续交付使得单个应用更改在准备就绪后即可发布,而不必等待与其它更改捆绑发布或等待维护窗口期等事件。持续交付让发布行为变得平淡可靠,因此企业可以以更低的风险频繁交付,并更快地获得最终用户的反馈,直到部署成为业务流程和企业竞争力必不可少的组成部分; 微服务是将应用作为小型服务集合进行开发的架构方法

NIO-EPollSelectorIpml源码分析

十年热恋 提交于 2020-03-02 14:26:21
目录 NIO-EPollSelectorIpml源码分析 目录 前言 初始化EPollSelectorProvider 创建EPollSelectorImpl EPollSelectorImpl结构 fdToKey 管道文件描述符 EPollArrayWrapper 注册 doSelect 关闭EpollSelectorImpl 总结 相关文献 NIO-EPollSelectorIpml源码分析 目录 NIO-概览 NIO-Buffer NIO-Channel NIO-Channel接口分析 NIO-SocketChannel源码分析 NIO-FileChannel源码分析 NIO-Selector源码分析 NIO-WindowsSelectorImpl源码分析 NIO-EPollSelectorIpml源码分析 前言 本来是想学习Netty的,但是Netty是一个NIO框架,因此在学习netty之前,还是先梳理一下NIO的知识。通过剖析 源码 理解NIO的设计原理。 本系列文章针对的是JDK1.8.0.161的源码。 NIO-Selector源码分析 对 Selector 的功能和创建过程进行了分析,本篇对Linux环境下JDK实现的 EPollSelectorImpl 源码进行详细讲解。 本篇文章不会对EPoll算法进行详细介绍,对epoll算法感兴趣或还不了解的同学可以看

数据概述

房东的猫 提交于 2020-03-02 13:54:10
1、大数据的价值体现在一下几个方面:   1、对大量消费者提供产品或服务的企业可以利用大数据进行精准营销。   2、做小而美模式的中长尾企业可以利用大数据做服务转型。   3、面临互联网压力下必须转型的传统企业需要与时俱进充分利用大数据的价值。 2、在计算机系统中,数据以二进制信息单元0、1的形式表示;在计算机系统中,各种字母、数字符号的组合,语音,图形,图像等统称为数据,数据经过加工后就成为信息。 3、数据在计算机中的表现形式:   1、数字数据:由阿拉伯数字符号构成的数据。如各种统计或测量数据。   2、模拟数据:指在某个区间产生的连续值,如视频、图像、文字、声音等。 4、计算机中采用二进制的主要原因:   1、技术实现简单;2、简化运算规则;3、适合逻辑运算;4、易于进行转换;   5、用二进制表示数据具有抗压能力强,可靠性高等优点。 5、机器数:一个数在计算机中的二进制表示形式,叫做这个数的机器数。机器数是带符号的,在计算机中的最高位存放符号,整数为0、负数为1。  真值:将带符号位的机器数对应的真正数值称为机器数的真值。 6、正数的反码是源码,负数的反码是在其源码的基础上,符号位不变,其余各个位去反。正数的补码是源码,负数的补码是在其源码的基础上,符号位不变,其余各个位去反,最后加1(即在反码的基础上加1)。 7、在计算机系统中,数值一律用补码来表示(存储)。 来源:

librealsense源码编译-- Failed to identify Internet connection, disabling BUILD_WITH_TM2

雨燕双飞 提交于 2020-03-02 13:21:00
问题概述:由于Realsense t265源码编译需要在CMakeList.txt中将BUILD_WITH_TM2设置为ON,但是由于国内网络原因,无法通过网络连接检测,因此我通过查找文件,发现在执行cmake ..之后,将会下载三个依赖文件,其中包括target-0.2.0.926.mvcmd,因此我通过手机提前下载好这几个文件,并上传至gitee上,现在只需要修改下载链接地址和md5校验即可完成下载和编译,以下是修改之后的文件。 解决办法: 首先确保已经开启了TM2 $ sudo gedit librealsense/CMakeList.txt 将 set(BUILD_WITH_TM2 OFF) 修改为 set(BUILD_WITH_TM2 ON) 其次,屏蔽网络校验 $ sudo gedit librealsense/CMake/connectivity_check.cmake 将INTERNET_CONNECTION 后面的OFF修改为ON,即: set(INTERNET_CONNECTION ON) $ sudo gedit librealsense/common/fw/CMakeList.txt 将文件中D4XX_RC_SHA1,D4XX_RC_URL,D4XX_FW_SHA1,D4XX_FW_URL,SR3XX_FW_SHA1,SR3XX_FW_URL,T26X_FW

Python抓取网页源码(核心编程)

对着背影说爱祢 提交于 2020-03-02 12:08:40
Python 3.8.1 (tags/v3.8.1:1b293b6, Dec 18 2019, 22:39:24) [MSC v.1916 32 bit (Intel)] on win32 Type “help”, “copyright”, “credits” or “license()” for more information. import urllib2 #输入URL函数 response=urllib2.urlopen(‘htttp://www.baidu.com/’) html=response.read() print html #输出源码 来源: CSDN 作者: 小可爱J 专业嵌入式开发 链接: https://blog.csdn.net/weixin_45806384/article/details/104606424

redis 的源码编译安装

☆樱花仙子☆ 提交于 2020-03-02 10:35:23
首先我们下载软件包到指定的目录下 tar -zxvf redis-2.8.19.tar.gz cd redis-2.8.19 make make PREFIX=/usr/local/redis install mkdir /usr/local/redis/etc/ cp redis.conf /usr/local/redis/etc/ cd /usr/local/redis/bin/ cp redis-benchmark redis-cli redis-server /usr/bin/ vim /usr/local/redis/etc/redis.conf # 修改一下配置 # redis以守护进程的方式运行 # no表示不以守护进程的方式运行(会占用一个终端) daemonize yes # 客户端闲置多长时间后断开连接,默认为0关闭此功能 timeout 300 # 设置redis日志级别,默认级别:notice loglevel verbose # 设置日志文件的输出方式,如果以守护进程的方式运行redis 默认:"" # 并且日志输出设置为stdout,那么日志信息就输出到/dev/null里面去了 logfile stdout我们现在来看一下配置文件6379.conf daemonize yes pidfile /var/run/redis_6379.pid port

ConcurrentHashMap源码解析

北慕城南 提交于 2020-03-02 10:33:41
ConcurrentHashMap是Java并发包中提供的一个线程安全且高效的HashMap实现 ConcurrentHashMap在并发编程的场景中使用频率非常之高,本文就来分析下ConcurrentHashMap的实现原理,并对其实现原理进行分析(JDK1.7). ConcurrentHashMap实现原理   众所周知,哈希表是中非常高效,复杂度为O(1)的数据结构,在Java开发中,我们最常见到最频繁使用的就是HashMap和HashTable,但是在线程竞争激烈的并发场景中使用都不够合理。    HashMap :先说HashMap,HashMap是 线程不安全 的,在并发环境下,可能会形成 环状链表 (扩容时可能造成,具体原因自行百度google或查看源码分析),导致get操作时,cpu空转,所以,在并发环境中使用HashMap是非常危险的。    HashTable : HashTable和HashMap的实现原理几乎一样,差别无非是 1.HashTable不允许key和value为null;2.HashTable是线程安全的。 但是HashTable线程安全的策略实现代价却太大了,简单粗暴,get/put所有相关操作都是synchronized的,这相当于给整个哈希表加了一把 大锁 ,多线程访问时候,只要有一个线程访问或操作该对象,那其他线程只能阻塞

HashTable源码解析

回眸只為那壹抹淺笑 提交于 2020-03-02 10:32:00
Hashtable 简介 和HashMap一样,Hashtable 也是一个 散列表 ,它存储的内容是 键值对(key-value)映射 。 Hashtable 继承于Dictionary ,实现了Map、Cloneable、java.io.Serializable接口。 Hashtable 的函数都是 同步的 ,这意味着它是线程安全的。它的key、value都不可以为null。此外,Hashtable中的映射不是有序的。 此类实现一个哈希表,该哈希表将键映射到相应的值。任何非 null 对象都可以用作键或值。 为了成功地在哈希表中存储和获取对象,用作键的对象必须实现 hashCode 方法和 equals 方法。 Hashtable 的实例有两个参数影响其性能: 初始容量 和 加载因子 。容量 是哈希表中桶 的数量,初始容量 就是哈希表创建时的容量。 注意,哈希表的状态为 open:在发生“哈希冲突”的情况下,单个桶会存储多个条目,这些条目必须按顺序搜索。 加载因子 是对哈希表在其容量自动增加之前可以达到多满的一个尺度。初始容量和加载因子这两个参数只是对该实现的提示。 关于何时以及是否调用 rehash 方法的具体细节则依赖于该实现。 通常, 默认加载因子是 0.75 , 这是在时间和空间成本上寻求一种折衷。加载因子过高虽然减少了空间开销, 但同时也增加了查找某个条目的时间

OkHttp源码分析 ConnecionPool

非 Y 不嫁゛ 提交于 2020-03-02 10:26:29
在分析拦截器ConnectInterceptor时,我也顺带分析过连接池,但是当时并没有特别清楚okthttp的连接池,经过这几天在探究,我打算在梳理一下okhttp的连接池ConnectionPool。 一:创建ConnecionPool及初始化 首先我们来看ConnectionPool的创建的地方。在OkHttpClient.Builder 的构造方法里面,对ConnectionPool进行了初始化。 public static final class Builder { ...... public Builder() { ...... /** * 连接池 */ connectionPool = new ConnectionPool(); ...... } 从这里可以想到,ConnectionPool是与OkHttpClient绑定的 。 再来看ConnectionPool的构造函数及成员变量 public final class ConnectionPool { /** * Background threads are used to cleanup expired connections. There will be at most a single * thread running per connection pool. The thread pool executor