源码

Scrapy源码 Request对象

孤街浪徒 提交于 2020-01-07 23:46:59
Scrapy源码 Request对象 """This module implements the Request class which is used to represent HTTPrequests in Scrapy.See documentation in docs/topics/request-response.rst"""import sixfrom w3lib.url import safe_url_stringfrom scrapy.http.headers import Headersfrom scrapy.utils.python import to_bytesfrom scrapy.utils.trackref import object_reffrom scrapy.utils.url import escape_ajaxfrom scrapy.http.common import obsolete_setterfrom scrapy.utils.curl import curl_to_request_kwargsclass Request(object_ref): def __init__(self, url, callback=None, method='GET', headers=None, body=None, cookies=None, meta

带你一步步剖析Retrofit 源码解析:一款基于 OkHttp 实现的网络请求框架

寵の児 提交于 2020-01-07 23:36:20
OkHttp与Retrofit 的区别与联系是怎样的? 参考答案: OkHttp和Retrofit都是目前流行网络开源框架 封装不同: Retrofit封装了具体的请求,线程切换以及数据转换。 retrofit通过使用代理,外观,策略模式对okhttp进行了封装 OkHttp 是基于Http协议封装的一套请求客户端 职责不同: Retrofit主要负责应用层面的封装,面向开发者,方便使用,比如请求参数,响应数据的处理,错误处理等等。 OkHttp主要负责socket部分的优化与封装,比如网络访问,多路复用,buffer缓存,数据压缩等等。 ( 顺手留下GitHub链接,需要获取相关面试等内容的可以自己去找 ) https://github.com/xiangjiana/Android-MS (VX:mm14525201314) Retrofit 可以说和 OkHttp 是亲兄弟了,它们都是由 Square 公司推出的网络请求库,并且 Retrofit 实际上是基于 OkHttp 实现的,它在 OkHttp 现有功能的基础上进行了封装,支持通过注解进行网络请求参数的配置,同时对数据返回后的解析、序列化进行了统一的包装,甚至在近期引入了对协程对支持。 今天就让我们一起来看看 Retrofit 是如何在 OkHttp 这样一个已经固定的框架的基础上,优雅的进行封装并拓展功能的。 基本使用

React useEffect的源码解读

那年仲夏 提交于 2020-01-07 22:37:10
前言 对源码的解读有利于搞清楚Hooks到底做了什么,如果您觉得useEffect很“魔法”,这篇文章也许对您有些帮助。 本篇博客篇幅有限,只看useEffect,力求简单明了,带您到React Hooks的深处看看 按图索骥找到Hook相关源码(可以直接跳) 首先我们从Github上得到react的源码,然后可以在packages中找到react文件夹,其中的index.js就是我们的入口。 代码很简单,就两行: const React = require('./src/React'); module.exports = React.default || React; 所以接下来我们去看看 'react/src/React',代码有点多,我们简化一下: import ReactVersion from 'shared/ReactVersion'; // ... import { useEffect, } from './ReactHooks'; const React = { useEffect }; //... export default React; 很好,现在我们至少知道为什么Hooks的引用方式是: import {useEffect} from 'react' 接下来我们继续看看 'react/src/ReactHooks'。 ReactHooks文件(可以直接跳)

DjangoCBV源码分析

房东的猫 提交于 2020-01-07 21:26:01
目录 FBV CBV CBV基本写法 CBV源码分析 settings源码分析 FBV FBV是基于函数的视图 CBV CBV是基于类的视图 CBV基本写法 ​ 朝login提交get请求会自动执行MyLogin里面的get方法 ​ 而提交post请求也会自动执行MyLogin里面的post方法 ​ 为什么MyLogin针对不同的请求方法能够自动执行对应的方法???? 同样写在views.py中 from django.views import View class MyLogin(View): def get(self,request): return render(request,'login.html') //写功能 def post(self,request): return HttpResponse('我是类里面的post方法') /写功能 urls.py中: # CBV路由配置 url(r'^login/',views.MyLogin.as_view()), CBV源码分析 1.研究源码的突破口 url(r'^login/',views.MyLogin.as_view()) 猜想: as_view要么是类里面定义的普通函数 @staticmethod 要么是类里面定义的绑定给类的方法 @classmethod 2.进入源码发现是等价@classmethod类绑定方法

jdk1.6的集合源码阅读之Collection接口

给你一囗甜甜゛ 提交于 2020-01-07 19:04:04
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 我们知道java容器类类库的用途是“保存对象”,容器最顶层分为两个Collection和Map,其余的都是继承这连个接口,Collection存储一个独立元素的序列,下面有List 、Set、Queue,而Map主要存储 “键值对”对象,下面实现版本有hashMap和TreeSet。(而List、Set、Queue下面基本各有两三个实现版本。) 既然我们要阅读容器类的jdk源码,当然得从Collection开始,他是大部分容器类的父接口,里面只有函数声明,声明了一组Collection类型容器的操作方法,但是没有实现,等其子类去实现。其代码如下(基于jdk1.6): package java.util; public interface Collection<E> extends Iterable<E> { //返回容器中元素的个数 int size(); //如果集合元素为空,返回true,否则false boolean isEmpty(); //如果集合包含这个元素,返回true,否则false,如果元素类型和本集合不一样,抛出ClassCastException异常,如果元素null,而集合不允许为null,则抛出NullPointerException boolean contains(Object o

DolphinScheduler源码分析

六月ゝ 毕业季﹏ 提交于 2020-01-07 17:13:16
DolphinScheduler源码分析 技术框架 所有模块均采用比较流行的SprintBoot框架 架构图 重要概念 流程定义 在DolphinScheduler中,作业的DAG被命名为“流程定义”。 挺不可思议的。 流程实例 流程实例是流程定义的实例化,可以通过手动启动或定时调度生成,流程定义每运行一次,产生一个流程实例。流程实例由Master解析流程定义生成。 任务实例 任务实例是流程定义中任务节点的实例化,标识着具体的任务执行状态。 居然没有作业的概念,直接上来任务实例的概念,真是匪夷所思。 定时 DAG的触发频率。与DAG概念隔离,单独创建、单独管理,一个DAG可以没有与之对应的定时。 架构说明 Quartz 内部对Quartz进行了一个封装,org.apache.dolphinscheduler.server.quartz.QuartzExecutors仅仅提供增加、删除作业的基础功能。其作业的状态等信息保存在数据库中以QRTZ_开头的表。 为了将实际作业的定义与Quartz隔离,抽象了一个ProcessScheduleJob类,用它来创建JobDetail。 该类仅仅是根据流程定义的定时等信息创建了一个CommandType.SCHEDULER类型的Command对象,然后插入了数据库,并没有的执行任务的具体逻辑。 MasterSchedulerThread

Java8 ArrayList的源码分析(一)

牧云@^-^@ 提交于 2020-01-07 16:53:07
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 在Java开发中,最常用的集合莫过于ArrayList, Arraylist 提供了方便的crud的api,看似很复杂,但源码其实很简单,但是jdk1.8与以前版本的方法实现还是有一些不同,下面让我们一起看看ArrayList在Java8中是如何实现的。 查看源代码首先要从构造方法开始,通常初始化一个ArrayList通过如下方式 List<Object> list = new ArrayList<Object>(); ArrayList 有三个构造方法: public ArrayList() { this.elementData = DEFAULTCAPACITY_EMPTY_ELEMENTDATA; } 这是无参构造方法 DEFAULTCAPACITY_EMPTY_ELEMENTDATA 是一个空的Object 数组 private static final Object[] DEFAULTCAPACITY_EMPTY_ELEMENTDATA = {}; **elementData **是ArrayList的核心,是一个object的数组,ArrayList所有的数据操作,都是通过数组实现的 transient Object[] elementData; 所以,无参构造方法的ArrayList

三大认证源码分析

自作多情 提交于 2020-01-07 16:24:49
目录 认证组件 权限组件 频率组件 认证组件 通过dispath方法,进入三大认证: 首先看一下请求模块,进入request 进入 get_authenticators 方法 可以知道,请求模块二次封装request对象,包含解析模块,还将认证类们的对象存储在请求对象中。 进入三大认证 遍历一个个认证器,完成一个个认证类,每一个配置的认证类都要调用 authenticate 方法完成认证。返回值是user和auth组成的元组。 权限组件 频率组件 通过dispatch方法 进入频率组件 然后看SimpleRateThrottle类,有allow_request和 wait 方法。SimpleRateThrottle继承BaseThrottle,BaseThrottle也有allow_request和 wait两个方法,但它没写,需要自己写。 所以我们继承SimpleRateThrottle类,它帮我们写了allow_request和 wait两个方法 # 可以直接在自定义频率类中配置rate,这就是要动源码了 rate = '3/min' # 但是推荐在自定义频率类中配置scope属性,然后再在settings文件中设置scope class MobileReateThrottle(SimpleRateThrottle): scope = 'mobile' def get

Qt开发中文显示乱码

折月煮酒 提交于 2020-01-07 16:04:39
Qt开发中文显示乱码 来源 https://www.jianshu.com/p/ed269df8104d 参考 https://blog.csdn.net/J_H_C/article/details/93882284 为什么会出现乱码 首先,我们需要有的概念是 乱码的问题是由编码和解码方式引起的 。涉及到编码方式的地方有3个: 源码字符集 执行字符集 运行环境字符集 源码字符集(the source character set):源码文件时使用何种编码格式保存的。 执行字符集(the execution character):可执行程序内保存的是何种编码(程序执行时内存中字符串编码) gcc 运行字符集设置参数 -finput-charset=charset //设置源码字符集为charset -fexec-charset=charset //设置执行字符集为charset -fwide-exec-charset=charset //设置宽字符串的执行字符集为charset msvc 运行字符集设置参数 -execution-charset:utf-8 // 指明程序执行时使用UTF-8字符集 -source-charset:utf-8 // 指明源码文件的编码为UTF-8字符集 源码字符集确切的说是编译器认为源码文件的编码方式,执行字符集是可执行程序采用的编码方式

ArrayBlockingQueue源码阅读

放肆的年华 提交于 2020-01-07 15:15:40
由数组支持的有界 阻塞队列 。此队列对元素FIFO(先进先出)进行排序。队列的 开头是已在队列中停留最长时间的元素。队列的尾部是最短时间出现在队列中的元素。新元素插入到队列的尾部,并且队列检索操作在队列的开头获取元素。 这是经典的“有界缓冲区”,其中固定大小的数组包含由生产者插入并由消费者提取的元素。创建后,容量将无法更改。尝试将put元素放入完整队列将导致操作阻塞;take从空队列中尝试元素的尝试也会类似地阻塞。 此类支持可选的公平性策略,用于订购正在等待的生产者和使用者线程。默认情况下,不保证此排序。但是,使用公平性设置的队列true可以按FIFO顺序授予线程访问权限。公平通常会降低吞吐量,但会减少可变性并避免饥饿。 构造方法中指定其长度,重载调用其他构造方法,默认创建重入锁,同时创建两个AbstractQueuedSynchronizer.ConditionObject add():调用了offer方法,返回false时抛异常 offer(): offer方法中用到了重入锁,先判断长度,再调用enqueue方法再items数组执行添加操作 clear():将items数组清空,takeIndex、putIndex重置为0,Itrs是一个内部类,用来存放迭代器,最后唤醒其他线程 来源: https://www.cnblogs.com/gqymy/p/12149913.html