源码

dubbo源码分析(2)

萝らか妹 提交于 2019-12-07 01:56:05
今天看了阿里巴巴的文档,觉得文档写的很好,有助于对dubbo的理解,故摘抄如下: 远程调用细节 上图是服务提供者暴露服务的主过程: 首先ServiceConfig类拿到对外提供服务的实际类ref(如:HelloWorldImpl),然后通过ProxyFactory类的getInvoker方法使用ref生成一个AbstractProxyInvoker实例,到这一步就完成具体服务到Invoker的转化。接下来就是Invoker转换到Exporter的过程。 Dubbo处理服务暴露的关键就在Invoker转换到Exporter的过程(如上图中的红色部分),下面我们以Dubbo和RMI这两种典型协议的实现来进行说明: Dubbo的实现 Dubbo协议的Invoker转为Exporter发生在DubboProtocol类的export方法,它主要是打开socket侦听服务,并接收客户端发来的各种请求,通讯细节由Dubbo自己实现。 RMI的实现 RMI协议的Invoker转为Exporter发生在RmiProtocol类的export方法, 它通过Spring或Dubbo或JDK来实现RMI服务,通讯细节这一块由JDK底层来实现,这就省了不少工作量。 上图是服务消费的主过程: 首先ReferenceConfig类的init方法调用Protocol的refer方法生成Invoker实例

南邮CTF - Writeup

╄→尐↘猪︶ㄣ 提交于 2019-12-06 22:52:30
南邮CTF攻防平台Writeup By:Mirror王宇阳 个人QQ欢迎交流:2821319009 技术水平有限~大佬勿喷 ^_^ Web题 签到题: 直接一梭哈…… md5 collision: 题目源码提示: $md51 = md5('QNKCDZO'); $a = @$_GET['a']; $md52 = @md5($a); if(isset($a)){ if ($a != 'QNKCDZO' && $md51 == $md52) { echo "nctf{*****************}"; } else { echo "false!!!"; }} else{echo "please input a";} 呃……脑中闪过“ PHP弱类型 ”于是乎……当然是Google找一下喽! QNKCDZO的md5(32)加密后: 0e830400451993494058024219903391 结合 $md51 == $md52 就要0e开头的md5碰撞!感谢 Google ! 构造: http://chinalover.sinaapp.com/web19/?a=s878926199a 签到2: 本能的直接源码搜哈…… 发现了字符输入限制10位字符,而给出的指令是11位!得嘞……前端能看见的都能改 maxlength="11" 只要限制字符数超过11或等于11位就行!

Struts2请求处理源码分析

寵の児 提交于 2019-12-06 21:02:12
当用户向Struts2发送请求时,FilterDispatcher的doFilter()方法自动调用,doFilter()方法处理请求过程,如下: 1. 创建值栈对象stack; 2. 创建Action上下文对象; 3. 对请求进行重新封装,此次封装根据请求内容的类型不同,返回不同的对象: 如果为multipart/form-data类型,则返回MultiPartRequestWrapper类型的对象,该对象服务于文件上传,否则返回StrutsRequestWrapper类型的对象,MultiPartRequestWrapper是StrutsRequestWrapper的子类,而这两个类都是HttpServletRequest接口的实现。 4. 通过actionMapper.getMapping()获得ActionMapping对象,Action的配置信息存储在ActionMapping对象中(Action的配置信息:Action的name、namespace和要调用的方法method)。相关代码如下图所示: 以上代码,活动图如下: 5. 如果getMapping()方法返回ActionMapping对象为null,则FilterDispatcher认为用户请求不是Action,此时FilterDispatcher会首先分析: 如果请求以/struts开头,会自动查找在web

pdfium 之二

一个人想着一个人 提交于 2019-12-06 20:50:35
https://www.foxitsoftware.cn/products/premium-pdfium/feature.php 基于谷歌PDFium开源代码 谷歌采用福昕的PDF技术为其PDF开源项目提供开源PDF渲染引擎。现在,通过福昕SDK,PDF开发人员使用PDF源码时可以更加简单,福昕SDK提供了可定制的PDFium源码。PDFium源码与福昕其他强大的PDF SDK集成所需的特殊接口、及时高效的支持和专业的服务,让客户使用开源项目时更加自信从容。 功能齐全 福昕高级PDFium还提供了谷歌PDFium开源项目中所没有的功能,如注释、水印、条形码、加密、数字签名、表单域管理、低级PDF对象访问、元数据等。 定制与服务 W欢迎咨询我们的专家团队,通过我们的定制服务为您的项目拓展更多功能。我们将基于现有的PDFium源码进行设计、搭建和集成,为您带来优质成果。 作为谷歌PDFium开源项目的技术提供商,我们拥有的内部专业知识,可以根据您的企业要求帮您更好地使用PDFium。 维护与支持 我们拥有专门的福昕解决方案工程师团队为您解决重大难题,确保顺利将福昕高级PDFium集成到您的应用程序中。因为我们的技术强大,我们也将提供更加专业的支持服务。安装包中还包括后续的更新、修复、补丁包以及解决方案等,让您免去后顾之忧。 来源: https://www.cnblogs.com

源码安装php7.2

你离开我真会死。 提交于 2019-12-06 19:39:26
`# 安装依赖包 yum install -y gcc gcc-c++ make zlib zlib-devel pcre pcre-devel \ libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel \ libxml2 libxml2-devel glibc glibc-devel glib2 glib2-devel bzip2 bzip2-devel \ ncurses ncurses-devel curl curl-devel e2fsprogs e2fsprogs-devel krb5-devel \ openssl openssl-devel openldap openldap-devel nss_ldap openldap-clients openldap-servers `# 下载源码包 wget -c http://mirrors.sohu.com/php/php-7.2.13.tar.gz `# 解压 tar -xzvf php-7.2.13.tar.gz cd php-7.2.13 `# 预编译 ./configure --prefix=/usr/local/php --with-config-file-path=/usr/local/php \ --enable-mbstring

Dubbo 源码解读——自定义 Classloader 之 ExtensionLoader

限于喜欢 提交于 2019-12-06 19:09:22
众所周知,Dubbo 是阿里巴巴公司自主研发开源的一个高性能的服务框架(现已捐献给 Apache 基金会组织),应用之间可以通过 RPC 的方式来互相调用并返回结果。主要基于 Java 语言开发,它提供了三大核心能力: 1. 面向接口的远程方法调用; 2. 智能容错和负载均衡; 3. 以及服务自动注册和发现; (图来自 dubbo 官网) 对于 Dubbo 的特性,我这里不做过多的介绍。接下来,进入正题。 1. 首先,下载源码,源代码地址为: git clone https://github.com/apache/incubator-dubbo.git ,如果网速不好的话,耗费时间会稍长一些,请耐心等待。( 本人版本为:2.7.0-SNAPSHOT) 2. 下载成功后,用 IDEA 打开,如下图: 3. 下面我们进入正题, 直接看 dubbo-common 模块中的 org.apache.dubbo.common.extension 包,也就是本文重点解读的自定义 ClassLoader 位置。Dubbo 扩展点主要都是从 ExtensionFactory 接口进行的,我们从这个接口类开始进行分析。 4. ExtensionFactory 接口很简单,里面只有一个方法 getExtension, 而这个 接口一共有三个实现类。分别为:SpiExtensionFactory (SPI

集合类源码(五)Collection之BlockingQueue(LinkedTransferQueue, PriorityBlockingQueue, SynchronousQueue)

╄→尐↘猪︶ㄣ 提交于 2019-12-06 18:47:29
LinkedTransferQueue 功能 全名 public class LinkedTransferQueue<E> extends AbstractQueue<E> implements TransferQueue<E>, Serializable 简述 基于链表的的无界队列。队列的头是某个生产者在队列中停留时间最长的元素。队列的尾部是某个生产者在队列中时间最短的元素。 注意,与大多数集合不同,size方法不是一个常量时间操作。由于这些队列的异步性,确定当前元素的数量需要遍历元素,因此如果在遍历期间修改此集合,可能会报告不准确的结果。 此外,批量操作addAll、removeAll、retainAll、containsAll、equals和toArray不能保证自动执行。例如,与addAll操作并发操作的迭代器可能只查看一些添加的元素。 从JDK1.7被引入,它既有SynchronousQueue的“交换”特性(还比SynchronousQueue多了用于存储的空间),也具有阻塞队列的“阻塞”特性(由于不加锁,性能比LinkedBlockingQueue要好得多) 方法 // 返回该队列中元素的Spliterator。返回的spliterator是弱一致的。 public Spliterator<E> spliterator() // 将指定的元素插入到此队列的末尾

redis debug object 源码分析

拥有回忆 提交于 2019-12-06 18:39:36
问:redis的debug object命令算出来的serializedlength是如何算出的? 解答: 见redis源码中的debug.c 函数 void debugCommand (redisClient *c) 的这一段代码: off_t rdbSavedObjectLen (robj *o) 函数见rdb.c: int rdbSaveObject (rio *rdb, robj *o) 的返回值即为 serializedlength 。 int rdbSaveObject (rio *rdb, robj *o) 函数见rdb.c: 代码太多,见: https://github.com/miaoyc1989/redis-3.0-annotated/blob/unstable/src/rdb.c 简单来说,在 rdbSaveObject 函数中,redis会根据传入的对象数据类型调用相关的函数去计算对象占用的空间字节数 。 数据类型与计算所需空间函数的对应关系如下表: 短结构 长结构 REDIS_LIST ziplistBlobLen( 返回整个ziplist占用的内存字节数 )、 rdbSaveRawString( 函数返回保存字符串所需的空间字节数 ) rdbSaveLen( 写入成功返回保存编码后的 len 所需的字节数 )、 listRewind、 listNext、

centos7源码安装redis

杀马特。学长 韩版系。学妹 提交于 2019-12-06 18:25:53
下载: https://redis.io/ 解压: tar -xzf redis-5.0.3.tar.gz 进入目录: cd redis-5.0.3 编译: make 创建配置文件: vim /etc/redis.conf port 7000 bind 0.0.0.0 requirepass 123456 daemonize yes pidfile /var/run/redis.pid appendonly no 启动服务: src/redis-server /etc/redis.conf 停止服务: pkill redis 创建根路径: echo "export PATH=$PATH:/data/redis/redis-5.0.3/src/" >> /etc/profile . /etc/profile 广告 给大家推荐几个好用的工具 时间校验工具 ip查询工具 二维码生成工具 json格式化工具 时间缀-时间转换工具 来源: 51CTO 作者: Lee_吉 链接: https://blog.51cto.com/12173069/2339953

centos7源码安装php7

牧云@^-^@ 提交于 2019-12-06 18:25:48
创建用户: useradd -s /sbin/nologin -M nginx 安装依赖: yum -y install libxml2 libxml2-devel yum -y install curl-devel libjpeg-devel libpng-devel freetype-devel yum -y install libicu-devel yum -y install libxslt-devel yum -y install openssl openssl-devel 解压: tar -xzf php-7.2.13.tar.gz 进入目录: cd php-7.2.13 编译: ./configure \ --prefix=/data/php \ --with-config-file-path=/data/php/etc \ --enable-fpm \ --with-fpm-user=nginx \ --with-fpm-group=nginx \ --enable-mysqlnd \ --with-mysqli=mysqlnd \ --with-pdo-mysql=mysqlnd \ --with-iconv-dir \ --with-freetype-dir=/usr/local/freetype \ --with-jpeg-dir \ --with-png