源码

Zipkin客户端链路追踪源码解析

丶灬走出姿态 提交于 2019-12-05 18:03:51
我们知道,Zipkin这个工具可以帮助我们收集分布式系统中各个系统之间的调用连关系,而且除了Servlet之外还能收集:MQ、线程池、WebSocket、Feign、Hystrix、RxJava、WebFlux等等组件之间的调用关系。本篇文章就来分析一下Zipkin是如何完成这些功能的 我们先以最常用的Servlet接受请求为例来分析 在spring-cloud-sleuth的spring.factories文件中注入的很多类中包含了一个类: TraceWebServletAutoConfiguration ,一看就知道,这是为Servlet环境量身定制的一个自动装配类 在这个类中,创建了一个Filter,这个Filter就是拦截web请求,完成Servlet请求链路的收集的利器 @Bean @ConditionalOnMissingBean public TracingFilter tracingFilter(HttpTracing tracing) { return (TracingFilter) TracingFilter.create(tracing); } 我们直接来看这个拦截器都是做了一些什么东西吧 public void doFilter(ServletRequest request, ServletResponse response, FilterChain

java源码 -- LinkedHashSet

我是研究僧i 提交于 2019-12-05 18:01:42
问题 (1)LinkedHashSet的底层使用什么存储元素? (2)LinkedHashSet与HashSet有什么不同? (3)LinkedHashSet是有序的吗? (4)LinkedHashSet支持按元素访问顺序排序吗? 源码分析 LinkedHashSet继承自HashSet,让我们直接上源码来看看它们有什么不同。 package java.util; // LinkedHashSet继承自HashSet public class LinkedHashSet<E> extends HashSet<E> implements Set<E>, Cloneable, java.io.Serializable { private static final long serialVersionUID = -2851667679971038690L; // 传入容量和装载因子 public LinkedHashSet(int initialCapacity, float loadFactor) { super(initialCapacity, loadFactor, true); } // 只传入容量, 装载因子默认为0.75 public LinkedHashSet(int initialCapacity) { super(initialCapacity, .75f, true)

java源码 -- LinkedHashMap

谁说胖子不能爱 提交于 2019-12-05 18:01:01
一、概述   LinkedHashMap 继承自 HashMap,在 HashMap 基础上,通过维护一条 双向链表 ,解决了 HashMap 不能随时保持遍历顺序和插入顺序一致的问题。   除此之外,LinkedHashMap 对访问顺序也提供了相关支持。在一些场景下,该特性很有用,比如缓存。   在实现上,LinkedHashMap 很多方法直接继承自 HashMap,仅为维护双向链表覆写了部分方法。 本文重点放在双向链表的维护上:包括链表的建立过程,删除节点的过程,以及访问顺序维护的过程等 Entry static class Entry<K,V> extends HashMap.Node<K,V> { Entry<K,V> before, after; Entry(int hash, K key, V value, Node<K,V> next) { super(hash, key, value, next); } }    before 与 after 提供了 一种视图 ,从该角度看是一个 所有节点按插入顺序排列的双向链表 。   之前在分析HashMap的红黑树相关操作时说过,每个table[ i ] 位置处的链/树按 next 看则是一个普通的单向链表,按left,right,parent看则是一个二叉树(还有一个prev 与 next 构成双向链

通过源码安装RYU控制器

♀尐吖头ヾ 提交于 2019-12-05 17:58:22
安装pip3 sudo apt-get install python3-pip 获取ryu源码 git clone https://github.com/osrg/ryu.git 安装依赖 cd ryu sudo pip3 install -r tools/pip-requires -i https://pypi.tuna.tsinghua.edu.cn/simple 安装ryu sudo python3 setup.py install 来源: https://www.cnblogs.com/multhree/p/11938765.html

werzeug之LocalProxy源码

安稳与你 提交于 2019-12-05 17:51:24
原文链接 链接:https://www.jianshu.com/p/3f38b777a621 werzeug之LocalProxy源码 LocalProxy用于代理Local对象和LocalStack对象,而所谓代理就是作为中间的代 理人来处理所有针对被代理对象的操作 # 源码注释 """ 充当本地 werkzeug 的代理。 将所有操作转发到 近在咫多的物体。 唯一不支持转发的操作 是右手操作和任何类型的分配。 范例用法: 从 werkzeug.本地导入本地 l = 本地() 这些是代理 请求 = l("请求") 用户 = l("用户") 从 werkzeug.本地导入本地 Stack _response_local = 本地堆栈() 这是一个代理 响应 = _response_local() """ 源码如下 @implements_bool class LocalProxy(object): __slots__ = ('__local', '__dict__', '__name__', '__wrapped__') def __init__(self, local, name=None): object.__setattr__(self, '_LocalProxy__local', local) object.__setattr__(self, '__name__',

Flask源码关于local的实现

若如初见. 提交于 2019-12-05 17:45:56
flask源码关于local的实现 try: # 协程 from greenlet import getcurrent as get_ident except ImportError: try: from thread import get_ident # 导入get_ident except ImportError: from _thread import get_ident """ __storage__ = { 1111:{"stack":[汪洋] } } """ class Local(object): def __init__(self): # self.__storage__ = {} # self.__ident_func__ = get_ident object.__setattr__(self, "__storage__", {}) object.__setattr__(self, "__ident_func__", get_ident) def __iter__(self): return iter(self.__storage__.items()) def __release_local__(self): self.__storage__.pop(self.__ident_func__(), None) # 由于get_ident是一个方法

02 drf源码剖析之快速了解drf

馋奶兔 提交于 2019-12-05 17:45:33
02 drf源码剖析之快速了解drf 1. 安装 pip3 install djangorestframework 2. 使用 注册app INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'rest_framework' ] 写路由 from django.conf.urls import url from django.contrib import admin from api import views urlpatterns = [ url(r'^admin/', admin.site.urls), url(r'^drf/article/$', views.ArticleView.as_view()), url(r'^drf/article/(?P<pk>\d+)/$', views.ArticleView.as_view()), ] # get获取列表 # post增加数据 写视图 根据请求方式不同做不同的操作 class ArticleView(APIView):

java源码 -- TreeSet

 ̄綄美尐妖づ 提交于 2019-12-05 17:45:23
  这个TreeSet其实和HashSet类似。HashSet底层是通过HashMap实现的,TreeSet其实底层也是通过TreeMap实现的。 简介   TreeSet的作用是保存无重复的数据,不过还对这些数据进行了排序。   TreeMap的底层是通过红黑树实现的,所以TreeSet底层也是通过红黑树实现的。   TreeSet最主要的特点就是对元素进行了排序。我们对其特点进行总结一下:     (1)TreeSet是基于TreeMap的NavigableSet实现。     (2)TreeSet的元素存储在TreeMap中的key中,TreeMap的value是一个常量对象。     (3)非线程安全 。     (4)java8新增分割器spliterator() 方法。 源码分析 1.继承关系      2.参数变量      3.构造器 // 直接使用传进来的NavigableMap存储元素 // 这里不是深拷贝,如果外面的map有增删元素也会反映到这里 // 而且, 这个方法不是public的, 说明只能给同包使用 TreeSet(NavigableMap<E,Object> m) { this.m = m; } // 使用TreeMap初始化 public TreeSet() { this(new TreeMap<E,Object>()); } //

jdbc-mysql测试例子和源码详解

ε祈祈猫儿з 提交于 2019-12-05 17:36:36
目录 简介 什么是JDBC 几个重要的类 使用中的注意事项 使用例子 需求 工程环境 主要步骤 创建表 创建项目 引入依赖 编写jdbc.prperties 获得Connection对象 使用Connection对象完成保存操作 源码分析 驱动注册 DriverManager.registerDriver 为什么Class.forName(com.mysql.cj.jdbc.Driver) 可以注册驱动? 为什么JDK6后不需要Class.forName也能注册驱动? 获得连接对象 DriverManager.getConnection com.mysql.cj.jdbc.Driver.connection ConnectionImpl.getInstance NativeSession.connect 简介 什么是JDBC JDBC是一套连接和操作数据库的标准、规范。通过提供 DriverManager 、 Connection 、 Statement 、 ResultSet 等接口将开发人员与数据库提供商隔离,开发人员只需要面对JDBC接口,无需关心怎么跟数据库交互。 几个重要的类 类名 作用 DriverManager 驱动管理器,用于注册驱动,是获取 Connection 对象的入口 Driver 数据库驱动,用于获取 Connection 对象 Connection

08 Flask源码之:flask拓展点

一曲冷凌霜 提交于 2019-12-05 17:30:17
08 Flask源码之:flask拓展点 1. 信号(源码) 信号,是在flask框架中为我们预留的钩子,让我们可以进行一些自定义操作。 pip3 install blinker 2. 根据flask项目的请求流程来进行设置扩展点 中间件 from flask import Flask,render_template app = Flask(__name__) @app.route('/index') def index(): return render_template('index.html') @app.route('/order') def order(): return render_template('order.html') class MyMiddleware(object): def __init__(self,old_app): self.wsgi_app = old_app.wsgi_app def __call__(self, *args, **kwargs): print('123') result = self.wsgi_app(*args, **kwargs) print('456') return result app.wsgi_app = MyMiddleware(app) if __name__ == '__main__': app.run()