源码

Spring Cloud Zuul 初始化源码深度解析

烈酒焚心 提交于 2020-03-08 22:16:16
概述   在微服务场景的开发下,网关的重要性不言而喻。Zuul是Netflix开源的微服务网关,Spring Cloud zuul是spring对Zuul进行的整合与增强。本文主要从源码角度对其初始化的过程。 主要包含以下内容 @EnableZuulProxy和@EnableZuulServer的区别 路由配置 ZuulProperties 路由定位器 RouteLocator 与spring mvc的集成 ZuulControler和ZuulHandlerMapping Zuul的饥饿加载 zuul.ribbon.eager-load.enabled zuul的事件监听机制,动态路由的基石。ZuulRefreshListener Filter初始化 Zuul初始化总结 1.@EnableZuulProxy和@EnableZuulServer的区别  在我们使用Spring Cloud Zuul通常是在启动类上添加@EnableZuulProxy注解或@EnableZuulServer。我们查看一下俩个注解的源码 @EnableZuulProxy @EnableCircuitBreaker @Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) @Import

eureka服务端源码分析

大兔子大兔子 提交于 2020-03-08 19:18:11
服务端主要功能 服务的注册 服务的续约 服务的下线 给客户端提供服务信息 这里不对每一点就讲解,就讲一下服务的注册。 如果看过eureka客户端的代码,可以知道,eureka客户端是通过发送http请求向服务端注册信息的,这里来看一下入口代码: /** * Registers information about a particular instance for an * {@link com.netflix.discovery.shared.Application}. * * @param info * {@link InstanceInfo} information of the instance. * @param isReplication * a header parameter containing information whether this is * replicated from other nodes. */ @POST @Consumes({"application/json", "application/xml"}) public Response addInstance(InstanceInfo info, @HeaderParam(PeerEurekaNode.HEADER_REPLICATION) String isReplication) {

CTFshow-萌新赛web_假赛生

爷,独闯天下 提交于 2020-03-08 18:36:00
打开靶机 网页源码提示代码如下 根据提示,存在 login.php register.php,根据要求需要用户名为admin,尝试注册后发现已存在,接着尝试注册用户名admin+空格,接着用admin登录,发现登录成功 接下来绕过正则匹配 if(isset($_GET['c'])){ preg_replace_callback("/\w\W*/",function(){die("not allowed!");},$_GET['c'],1); echo $flag; } 令c为空,直接绕过拿到flag 来源: https://www.cnblogs.com/anweilx/p/12444026.html

ListIterator源码逐条解析

点点圈 提交于 2020-03-08 18:15:40
一家之言 姑妄言之 絮絮叨叨 不足为训 ListIterator接口注释翻译:    列表的迭代器,它允许程序员以任意方向遍历列表,在迭代期间修改列表,并获取迭代器在列表中的当前位置。ListIterator没有当前元素。它的游标位置总是位于调用previous()返回的元素和调用next()返回的元素之间。长度为n的列表的迭代器有n+1个可能的光标位置,如下面的插入符号(^)所示: Element(0) Element(1) Element(2) Element(3) … Element(n-1) ^ ^ ^ ^ ^    注意,remove和set(object)方法不是根据游标位置定义的。它们被定义为对调用next()或previous()返回的最后一个元素进行操作。    该接口是Java集合框架的成员。 笔者废话:    这个接口的注释说的我也是云里雾里,但是我们大概可以从中略窥一二。首先它说明了我们这个接口是可以从任意方向遍历的。如果你仔细看过这个接口内的方法声明,也就明白了这个“任意方向”的含义。通俗来说,它有了所谓的“ 前驱节点 ”和“ 后继节点 ”。    我相信看到这两个名词你可能就明白了这个接口的本意,它就是一个 双向链表 ,不过我们平常也叫它 双链表 。    其次,它也告诉我们这个接口的游标是不指向元素的,它位于 前驱节点 和 后继节点 之间

spring——AOP原理及源码五【系列完】

为君一笑 提交于 2020-03-08 17:33:44
前情回顾:   在 上一篇 中,通过 wrapIfNecessary 方法,我们获取到了合适的增强器(日志方法)与业务类进行包装,最终返回了我们业务类的代理对象。      本篇我们将从业务方法的执行开始,看看增强器(日志方法)是怎么在方法执行的前后和发生异常时被调用的。以及在文章的最后总结整个AOP的执行流程。 调试的起点: 给测试方法打上断点,然后一直跳到下一个断点直到执行方法,如下   进入断点: 1 @Override 2 public Object intercept(Object proxy, Method method, Object[] args, MethodProxy methodProxy) throws Throwable { 3 Object oldProxy = null; 4 boolean setProxyContext = false; 5 Class<?> targetClass = null; 6 Object target = null; 7 try { 8 if (this.advised.exposeProxy) { 9 // Make invocation available if necessary. 10 oldProxy = AopContext.setCurrentProxy(proxy); 11 setProxyContext

编译kubernetes源码时报错:unexpected directory layout

南楼画角 提交于 2020-03-08 13:28:10
文章目录 报错 解决 报错 unexpected directory layout: import path: github.com/gogo/protobuf/proto root: D:\SoftwareAndProgram\program\Go\Development\src dir: D:\SoftwareAndProgram\program\Go\Development\src\k8s.io\kubernetes\vendor\github.com\gogo\protobuf\proto expand root: D:\SoftwareAndProgram\program\Go\Development\src expand dir: D:\SoftwareAndProgram\program\Go\Development\src\k8s.io\kubernetes\vendor\github.com\gogo\protobuf\proto separator: \ 解决 将原来的 vendor 目录修改为 vendor1 ,将下面的内容放到一个 tempvendor/src 目录下: 将 tempvendor/src 目录添加到 GoLand 的 GOPATH 中: 来源: CSDN 作者: 码农实战 链接: https://blog.csdn.net

线程池源码-伟大而渺小的ctl

落爺英雄遲暮 提交于 2020-03-08 10:58:14
最近看到有些博客提到线程池需要掌握的问题清单,发现自己很多地方是是一知半解的状态,正好借此机会,带着问题去回顾了一波 Java 线程池的源码。 ctl 为何物? 线程池的运作过程对状态的检查非常严格,几乎是走两步一个检查,检查线程池的状态,有效线程的数目,而它们都是基于一个整型变量来实现的,它的「身子」也许很单薄,但是肩上的责任重大。 // 本质是 Integer 型变量,进行了原子性的封装 private final AtomicInteger ctl = new AtomicInteger ( ctlOf ( RUNNING , 0 ) ) ; 一饰两角 大家可能会想,一个变量怎么能够同时表示两个状态,我当时也非常疑惑,这里就要提到一个巧妙的设计——高低位表示法(名字是我瞎掰的)。 1.紧随在 ctl 变量后面被初始化的两个变量 private static final int COUNT_BITS = Integer . SIZE - 3 ; private static final int CAPACITY = ( 1 << COUNT_BITS ) - 1 ; COUNT_BITS 的值为 29(整型 32 位); CAPACITY = 1 << 29 表示将 1 往左移动了 29 位,换算之后就是 1 * 2 的 29 次方,高 3 位被空出来了,而低 29 位用来表示

【Java集合】试读LinkedList源码

杀马特。学长 韩版系。学妹 提交于 2020-03-08 09:39:30
LinkedList的本质是双向链表。 (01) LinkedList继承于AbstractSequentialList,并且实现了Dequeue接口。 (02) LinkedList包含两个重要的成员: header 和 size 。   header是双向链表的表头,它是双向链表节点所对应的类Entry的实例。Entry中包含成员变量: previous, next, element。其中,previous是该节点的上一个节点,next是该节点的下一个节点,element是该节点所包含的值。   size是双向链表中节点的个数。 (前面照旧是复制粘贴的图和文字,大家大概理解一下,下面进入正题) 为了理解上面的概念,首先我们来看一下核心类Node //节点,有前驱,后继和值三个字端,其中前驱和后继也是节点 private static class Node<E> { E item; Node<E> next; Node<E> prev; Node(Node<E> prev, E element, Node<E> next) { this.item = element; this.next = next; this.prev = prev; } } Node表示的是结点,结点里面有三个元素: 数据,前驱和后继。 其中数据可是任意类型,前驱和后继同样是结点。

[集合]ListIterator源码解析(7)

微笑、不失礼 提交于 2020-03-08 06:54:13
迭代器可以让开发者遍历一个容器的元素,并且操作元素。 Java有两种原生的迭代器:Iterator和ListIterator, 其中 ListIterator继承自Iterator。 ListIterator比Iterator多了一些方法。例如逆序遍历,遍历时进行set元素到上次操作的元素的位置,add元素等操作。 ListIterator 在该类的说明中,JDK官方也进行了说明,迭代器的游标或者叫索引总是位于调用previous方法返回的元素和调用next方法返回的元素之间。 也就是说,游标不指向元素,而指向元素之间! public interface ListIterator < E > extends Iterator < E > { // Query Operations / 来源: CSDN 作者: 谙忆 链接: https://blog.csdn.net/qq_26525215/article/details/104621235