源码

zookeeper(14)源码分析-服务器(1)

拈花ヽ惹草 提交于 2019-12-18 14:57:33
ZooKeeperServer,为所有服务器的父类。 QuorumZooKeeperServer,其是所有参与选举的服务器的父类,是抽象类,其继承了ZooKeeperServer类。 LeaderZooKeeperServer,Leader服务器,继承了QuorumZooKeeperServer类,也会继承ZooKeeperServer中的很多方法。 LearnerZooKeeper,其是Learner服务器的父类,为抽象类,也继承了QuorumZooKeeperServer类。 FollowerZooKeeperServer,Follower服务器,继承了LearnerZooKeeper。 ObserverZooKeeperServer,Observer服务器,继承了LearnerZooKeeper。 ReadOnlyZooKeeperServer,只读服务器,不提供写服务,继承QuorumZooKeeperServer。 ZooKeeperServer 1、类的继承关系 public class ZooKeeperServer implements SessionExpirer, ServerStats.Provider {} ZooKeeperServer是ZooKeeper中所有服务器的父类,其实现了Session.Expirer和ServerStats

dubbo源码阅读之服务目录

喜欢而已 提交于 2019-12-18 11:39:27
服务目录 服务目录对应的接口是Directory,这个接口里主要的方法是 List<Invoker<T>> list(Invocation invocation) throws RpcException; 列出所有的Invoker,对于服务消费端而言,一个Invoker对应一个可用的服务提供者,底层封装了一个tcp连接。当然Invoker也可以是嵌套的,一个Invoker内包含了多个实际的Invoker。通过Cluster对象将一个服务目录封装成一个Invoker,内部包含了故障转移,服务路由,负载均衡,等等相关的集群逻辑。 回到服务目录,主要包括两种服务目录,StaticDirectory,RegistryDirectory。 StaticDirectory。静态服务目录,顾名思义,这个目录在创建的时候就会通过构造方法传进一个Invoker列表,在之后过程中这个列表不再变化。 RegistryDirectory。通过监听注册中心的服务提供者信息动态更新Invoker列表的服务目录。 从上节服务引入,我们知道,不论是StaticDirectory还是RegistryDirectory,最终都会通过Cluster.join方法封装为一个Invoker。由于静态服务目录的逻辑很简单,这里不再赘述,本节我们主要分析一下注册中心的服务目录。 RegistryDirectory概述

Kafka Eagle 源码解读

↘锁芯ラ 提交于 2019-12-18 11:12:57
1.概述   在《 Kafka 消息监控 - Kafka Eagle 》一文中,简单的介绍了 Kafka Eagle这款监控工具的作用,截图预览,以及使用详情。今天笔者通过其源码来解读实现细节。目前该项目已托管于 Github 之上,作者编写了使用手册,告知使用者如何安装,部署,启动该系统。但对于实现的细节并未在参考手册中详细指出。这里,笔者通过本篇博文,来详细解读其实现细节。相关资料文献地址如下所示: Kafka Eagle 源码地址 Kafka Eagle 参考手册 Kafka Eagle 安装包 2.内容   截止到版本 Kafka Eagle v1.1.1 支持监控0.8.2.x(存放消费信息于Zookeeper)以及 0.10.x(存放消费信息于Kafka的topic中)。对于前者,从Zookeeper中获取消息信息,难度不大,编写Zookeeper客户端实现代码即可,该版本在Zookeeper下的存储结构树如下图所示: 对于实现细节,可使用ZkUtils工具类来获取相关数据,以获取消费信息为例,代码如下所示: /** Obtaining kafka consumer information from zookeeper. */ public Map<String, List<String>> getConsumers(String clusterAlias) {

jdk源码——LinkedList

三世轮回 提交于 2019-12-18 06:58:07
从源码的定义中,我们可以看出linkedList是实现list接口和deque接口的双端链表 public class LinkedList<E> extends AbstractSequentialList<E> implements List<E>, Deque<E>, Cloneable, java.io.Serializable LinkedList是一个双端链表结构,有两个变量 first指向头部,last指向链表尾部,size表示当前链表中的数据个数 transient int size = 0; transient Node<E> first; transient Node<E> last; LinkedList 的带参构造函数 public LinkedList(Collection<? extends E> c) { this(); addAll(c); } public boolean addAll(Collection<? extends E> c) { return addAll(size, c); } addAll方法 public boolean addAll(int index, Collection<? extends E> c) { checkPositionIndex(index); //检查下标是否正确 Object[] a = c

java中AQS源码分析

空扰寡人 提交于 2019-12-18 05:39:14
AQS内部采用CLH队列。CLH队列是由节点组成。内部的Node节点包含的状态有 static final int CANCELLED = 1; static final int SIGNAL = - 1; static final int CONDITION = - 2; static final int PROPAGATE = - 3; 其中取消状态表示任务的取消,SIGNAL状态表示后续节点需要唤醒,CONDITION表示等待状态,PROPAGRATE表示的是传播状态通常用于共享锁的释放。初始节点的状态为0。 AQS中比较重要的操作包括: public final void acquire( int arg); public final void acquireInterruptibly( int arg); public final void acquireShared( int arg); public final void acquireSharedInterruptibly( int arg); protected boolean tryAcquire( int arg); protected int tryAcquireShared( int arg); public final boolean tryAcquireNanos( int arg, long

buildroot使用详解

こ雲淡風輕ζ 提交于 2019-12-18 04:54:44
为什么要使用 buildroot? (文件系统搭建,强烈建议直接用 buildroot,官网[http://buildroot.uclibc.org/]上有使用教程非常详细)文件系统通常要包含很多第三方软件,比如busybox,udhcpc,tftp , apache,sqlite,PHP,iptable,DNS 等,为了避免繁杂的移植工作。 buildroot应运而生。通过menuconfig配置我们需要的功能,不需要的功能去掉,再执行make指令编译,buildroot就会自动从指定的服务器上下载源码包,自动编译,自动搭建成我们所需要的嵌入式根文件系统。让我们的工作效率成百倍的提升。 1:获取buildroot 我们可以从 buildroot官网(http://buildroot.uclibc.org/download.html)获取buildroot源码包,buildroot基本上三个月更新一次,目前最新是buildroot-2016.11.tar.gz,这里我们实际下载的源码包是 buildroot-2016.02.tar.gz。建议下载最新的版本,因为新的版本包含更多的第三方工具软件。 2:配置buildroot 将源码包复制到XXX 目录下,并解压 tar -xvf buildroot-2015.02.tar.gz 进入目录,执行配置命令:cd /XXX

Android源码分析(六)-----蓝牙Bluetooth源码目录分析

孤街醉人 提交于 2019-12-18 04:33:07
一 :Bluetooth 的设置应用 packages\apps\Settings\src\com\android\settings\bluetooth* 蓝牙设置应用及设置参数,蓝牙状态,蓝牙设备等。 BluetoothDevicePreference.java 顾名思义,蓝牙设备首选项,也就是蓝牙设备的配置信息,比如是否连接,是否配对,是否可见等等。该类继承了preference类,主要是提供获取蓝牙设备及通知蓝牙设备配置信息变化。 BluetoothDiscoverableEnabler.java 蓝牙搜索UI逻辑处理,包括搜索暂停,搜索恢复,及蓝牙开启关闭时的蓝牙搜索处理,以及搜索超时等处理。该类同时使用了broadcast与handle机制,用来处理搜索的状态变化。 BluetoothEnabler.java 蓝牙功能的开启/关闭功能处理。 BluetoothEventRedirector.java 蓝牙事件转发处理。通过使用broadcast机制,在onstart里面注册了蓝牙的事件权限。 BluetoothNamePreference.java 监听蓝牙名字的变化 BluetoothPairingDialog.java 是activity,配对时各种提示框及按键事件处理,如用户请求配对,密码输入,密码确认,同意等提示框。 BluetoothPairingRequest

这可能是9102年末最全面的Android面试总结,你值得拥有!

霸气de小男生 提交于 2019-12-18 04:27:14
2019即将过去2020年即将到来,今天就来聊一聊这大半年的面试经历,面了几家公司发现一个规律,越是出名,技术牛逼的公司,面试官都很谦虚,整个面试过程也都很舒服,遇到不会的问题面试官也都会引导你去回答问题或者给你思路,相反去一些所谓的有点小名气的公司,遇上的面试官一个个都板着个脸,感觉自己厉害的不行,要是某个问题没答上,马上一个白眼过来,就算你问他答案,他也会说回去自己看去。 我觉得面试考察的是 一个人的综合素质 ,就以Android来说,那么庞大的一个系统再结合Java语言的相关知识点,作为开发人员不可能会每个知识点都精通再加上每个面试官的表达能力也不同,有时经常会出现面试者没有完全理解面试官的意思,所以我觉得一个优秀的面试官应该是很耐心的,如果遇到面试者答不出来问题时,应当去适当引导一下,或者给面试者告诉正确答案,而且一个好的面试官首先应当表现出很友善的样子,这样才会让面试者有一个好的发挥。 下面先总结一下常见的Android面试题: Java部分 Java内存区域 Java虚拟机/垃圾回收算法 synchronized原理/synchronized修饰对象方法和修饰静态方法有什么区别 线程池原理,线程池是如何进行线程复用的 线程间如何通信,消费者/生产者模型 volatile关键字作用,使用场景有哪些 可变对象/不可变对象 集合(ArrayList,HashMap

flask请求上下文源码分析

拜拜、爱过 提交于 2019-12-18 04:16:41
一、什么是上下文 每一段程序都有很多外部变量,只有像add这种简单的函数才是没有外部变量的,一旦你的一段程序有了外部变量,这段程序就不完整了,不能独立运行,你为了使他们能运行,就要给所有的外部变量一个一个写一些值进去,这些值的集合就叫上下文 比如:在flask中,视图函数需要知道它执行情况的请求信息(请求的url,参数,方法等),以及应用信息,(应用中初始化的数据库等),才能够正确运行。 最直观地做法是把这些信息封装成一个对象,作为参数传递给视图函数。但是这样的话,所有的视图函数都需要添加对应的参数,即使该函数内部并没有使用到它。 flask 的做法是把这些信息作为 类似全局变量的东西 ,视图函数需要的时候,可以使用 from flask import request 获取。但是这些对象和全局变量不同的是——它们必须是动态的,因为在多线程或者多协程的情况下,每个线程或者协程获取的都是自己独特的对象,不会互相干扰。 那么如何实现这种效果呢?如果对 python 多线程比较熟悉的话,应该知道多线程中有个非常类似的概念 threading.local ,可以实现多线程访问某个变量的时候只看到自己的数据。内部的原理说起来也很简单,这个对象有一个字典,保存了线程 id 对应的数据,读取该对象的时候,它动态地查询当前线程 id 对应的数据。flask 上下文的实现也类似。 二

源码安装LNMP

泄露秘密 提交于 2019-12-18 03:28:46
防火墙配置相关参考 https://www.cnblogs.com/xxoome/p/6884376.html Su root 安装依赖 yum -y install gcc automake autoconf libtool make gcc-c++ glibc libxslt-devel libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel libxml2 libxml2-devel zlib zlib-devel glibc glibc-devel glib2 glib2-devel bzip2 bzip2-devel ncurses ncurses-devel curl curl-devel e2fsprogs e2fsprogs-devel krb5-devel libidn libidn-devel openssl openssl-devel pcre pcre-devel libmcrypt libmcrypt-devel cmake 安装nginx 下载nginx(stable版本) cd /usr/local/src wget http://nginx.org/download/nginx-1.8.1.tar.gz 安装nginx tar xf nginx-1.8.1.tar.gz cd