源码

UDP Server和Client源码实例

耗尽温柔 提交于 2020-02-27 14:32:32
server #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> #include <unistd.h> #include <stdlib.h> #include <string.h> #include <stdio.h> #define UDP_TEST_PORT 50001 int main(int argC, char* arg[]) { struct sockaddr_in addr; int sockfd, len = 0; int addr_len = sizeof(struct sockaddr_in); char buffer[256]; /* 建立socket,注意必须是SOCK_DGRAM */ if ((sockfd = socket(AF_INET, SOCK_DGRAM, 0)) < 0) { perror ("socket"); exit(1); } /* 填写sockaddr_in 结构 */ bzero(&addr, sizeof(addr)); addr.sin_family = AF_INET; addr.sin_port = htons(UDP_TEST_PORT); addr.sin_addr.s_addr

Spark源码阅读的正确打开方式

不羁的心 提交于 2020-02-27 13:35:44
Spark发展至今,应该说已经非常成熟了。是大数据计算领域不得不学习的框架。尤其是Spark在稳定性和社区发展的成熟度方面,吊打其他的大数据处理框架。 Spark至今只经历过1.x、2.x和3.x三个大版本的变化,在核心实现上,我们在Github能看到的最早的实现是0.5版本,这个版本只有1万多行代码,就把Spark的核心功能实现了。 当然我们不可能从这么古老的版本看,假如你接触过Spark,现在准备看源码,那么我建议从2.x版本中选取一个,最好是2.3或者2.4。但是经过如此多的迭代,Spark的代码量已经暴增了几倍。所以你需要抓住重点,本文就是想跟大家说说,我们该怎么看,看哪些东西。 基础概念篇 首先假如你是第一次接触Spark,那么你需要对Spark的设计思想有所了解,知道Spark用了哪些抽象,Spark在提出RDD的时候是基于什么样的考虑。 在这里给大家推荐几篇论文如下: 第一篇: 这个不多说,直接给出一个链接,这篇文章不长,很快能看完。 弹性分布式数据集:一种为内存化集群计算设计的容错抽象 https://fasionchan.com/blog/2017/10/19/yi-wen-tan-xing-fen-bu-shi-shu-ju-ji-yi-zhong-wei-nei-cun-hua-ji-qun-ji-suan-she-ji-de-rong-cuo-mo-xing

EventBus使用及源码分析

微笑、不失礼 提交于 2020-02-27 13:21:31
基于EventBus 3.1.1 主要参考: EventBus 3.0 源码分析 在其基础上添加了些个人理解,建议直接看参考原文 注册订阅者 EventBus.getDefault().register(this) 获取默认的 EventBus 实例 在程序中创建多个EventBus 的实例,每个EventBus可看做一个管道,管道间相互独立 getDefault() 就是获取一个全局默认的管道, 因为多数场景下只需要用一个 EventBus 实例即可(尤其事件的收发需要同一个实例,所以提供了默认的实例的获取方法) EventBusBuilder 设置的是 EventBus 的配置信息 ,即EventBus可能有几个属性在不同的应用场景下需要有不同的值;同时EventBus也有都是固定值的属性,这些直接在EventBus初始化时赋值或初始化即可 EventBus 的几个成员变量 a. subscriptionsByEventType : Map<Class<?>, CopyOnWriteArrayList> b. typesBySubscriber : Map<Object, List<Class<?>>> c. stickyEvents : Map<Class<?>, Object> public static EventBus getDefault ( ) { if (

为什么要学习源码?学习源码对我们有用吗?

好久不见. 提交于 2020-02-27 13:17:31
为什么要学习源码? 1 前言 由于现在微服务很流行,越来越多企业采用了SpringCloud微服务架构,而SpringBoot则是快速构建微服务项目的利器。于是笔者以此为切入点,将SpringBoot作为我们源码分析的第一个开源项目,之后还会对更多开源项目进行源码分析。要进行源码分析,笔者结合自身经历来跟大家聊聊我们为什么要学习源码这个话题,大家一起探讨学习。 我们程序员在开发代码时每天都在使用别人写好的框架,无论你是在使用Spring生态的Spring核心,SpringMVC,SpringBoot和SpringCloud等框架,还是在使用阿里系的Dubbo,RocketMQ,Seata,Druid等中间件框架,亦或你是搞大数据的,在使用Apache组织的Zookeeper,Hadoop,Hive,Spark等大数据组件框架,这些开源框架都给我们的项目编码带来了极大的方便,促进了我们的开发效率。是的,这些都是开源大神们帮我们造好的轮子,我们直接使用即可,而且用起来很少出bug,因为这些框架一般都是经过考验的才能流行起来。 可能大部分人会认为,这些轮子都已经造好了,我们直接用即可。是的,这些开源框架对我们使用来说是透明的,它们就像一个个黑盒子。至于这些黑盒里面装的是什么东西,里面是怎样构造的,如果没有去探究这些黑盒的话,我们无从得知。但是,我们做开发的天天跟这些黑盒打交道

直播搭建时流媒体服务需注意的细节

99封情书 提交于 2020-02-27 11:49:05
很遗憾的告诉一些朋友,你们可能已经中招了,由于某些技术上的限制,一些商家卖的 直播 APP 源码 只能支持一家厂家的流媒体协议,而不能与其他家,如阿里云、腾讯云、金山云的流媒体服务进行对接,这是怎么一回事呢?它又会对各位朋友在搭建直播平台的过程中产生什么不利影响呢? 一、软件商可不会告诉你,只能用一家的流媒体服务 他们的系统在前期开发的时候省事了,所以各位在后期使用时就费事了。 所有只能用腾讯云流媒体服务的直播系统,他们都用了腾讯家的直播通道 SDK ,直播通道是一个直播系统中最核心的地方,很难自行研发,一些技术能力达不到的公司,或者急于求成的公司就会放弃这部分的研究,转而选用市面上一些已有的直播通道 SDK ,而其中,最容易得到的就是腾讯家的,因为它免费。 而这免费的 SDK 唯一的不好,就是他在后期只能对接指定的流媒体服务器。 二、只能用指定商家的流媒体服务有什么不好? 可能有朋友还不太明白不能自由选择流媒体服务的坏处,图玩智能来帮大家分析分析,给大家透透底: 1 、流媒体服务价格虚高 本来,流媒体服务的价格在各家厂家的竞争下应该是逐年下降的, “ 功能稍差的价格便宜、价格贵的功能强,抢占市场的时候大家一起拼命压价 ” 这才是我们所期待的。 但是,有的商家想了想,我不和你们这么玩儿了,我上一边垄断去。我把我的直播通道 SDK 免费拿出去给大家用,但以后你必须用我的流媒体

ArrayList的源码分析

六眼飞鱼酱① 提交于 2020-02-27 11:38:50
前言 我思故我在 ArrayList的简介 1,ArrayList 的底层是数组队列,相当于动态数组。与 Java 中的数组相比,它的容量能动态增长。在添加大量元素前,应用程序可以使用 ensureCapacityXXX 方法来操作来增加 ArrayList 实例的容量。这可以减少递增式再分配的数量。 2,它继承了 AbstractList ,实现了 List , RandomAccess , Cloneable , java.io.Serializable 这些接口。 3,插入删除元素的时间复杂度为 O(n) ,求表长以及增加元素,取第 i 元素的时间复杂度为 O(1) 4,继承AbstractList,实现了List。它是一个数组队列,提供了相关的添加、删除、修改、遍历等功能。 5,实现 RandomAccess 接口 , RandomAccess 是一个标志接口,表明实现这个这个接口的 List 集合是支持 快速随机访问 的。在 ArrayList 中,我们即可以通过元素的序号快速获取元素对象,这就是快速随机访问。对于实现了 RandomAccess 接口 的集合在使用 Collections.binarySearch方法 ,的执行策略有所不同。 6,实现 Cloneable 接口 ,即覆盖了函数 clone(), 能被克隆 。 7,实现 java.io

[eclipse]java 查看JDK中底层源码

回眸只為那壹抹淺笑 提交于 2020-02-27 10:26:21
1.点 “window”-> "Preferences" -> "Java" -> "Installed JRES" 2.此时"Installed JRES"右边是列表窗格,列出了系统中的 JRE 环境,选择你的JRE,然后点边上的 "Edit...", 会出现一个窗口(Edit JRE) 3.选中rt.jar文件的这一项:“c:\program files\java\jre_1.5.0_06\lib\rt.jar” 点 左边的“+” 号展开它, 4.展开后,可以看到“Source Attachment:(none)”,点这一项,点右边的按钮“Source Attachment...”, 选择你的JDK目录下的 “src.zip”文件 5.一路点"ok",结束。 来源: https://www.cnblogs.com/visoeclipse/archive/2009/11/03/1594951.html

U-boot中SPL功能和源码流程分析

我的梦境 提交于 2020-02-27 09:32:32
   在U-boot目录下,有个比较重要的目录就是SPL的,SPL到底是什么呢?为什么要用它呢?    SPL(Secondary programloader)是uboot第一阶段执行的代码。主要负责搬移uboot第二阶段的代码到 系统内存(System Ram,也叫片外内存)中运行。 SPL是由固化在芯片内部的ROM引导的。我们知道很多芯 片厂商固化的ROM支持从nandflash、SDCARD等外部介质启动。所谓启动,就是从这些外部介质中搬移一段 固定大小(4K/8K/16K等)的代码到内部RAM中运行。这里搬移的就是SPL。在最新版本的uboot中,可以看到 SPL也支持nandflash,SDCARD等多种启动方式。当SPL本身被搬移到内部RAM中运行时,它会从nandflash、 SDCARD等外部介质中搬移uboot第二阶段的代码到系统内存中。     SPL复用的是uboot里面的代码.    SPL的主要功能就是衔接系统的硬件SRAM和u-boot之间的纽带。 1.BasicArm Initialization 2.UART console initialization 3.Clocks and DPLL Locking(minimal) 4.SDRAM initialization 5.Mux(minimal) 6.Boot Device

死磕 java集合之TreeSet源码分析

风流意气都作罢 提交于 2020-02-27 08:42:55
问题 (1)TreeSet真的是使用TreeMap来存储元素的吗? (2)TreeSet是有序的吗? (3)TreeSet和LinkedHashSet有何不同? 简介 TreeSet底层是采用TreeMap实现的一种Set,所以它是有序的,同样也是非线程安全的。 源码分析 经过前面我们学习HashSet和LinkedHashSet,基本上已经掌握了Set实现的套路了。 所以,也不废话了,直接上源码: package java.util; // TreeSet实现了NavigableSet接口,所以它是有序的 public class TreeSet<E> extends AbstractSet<E> implements NavigableSet<E>, Cloneable, java.io.Serializable { // 元素存储在NavigableMap中 // 注意它不一定就是TreeMap private transient NavigableMap<E,Object> m; // 虚拟元素, 用来作为value存储在map中 private static final Object PRESENT = new Object(); // 直接使用传进来的NavigableMap存储元素 // 这里不是深拷贝,如果外面的map有增删元素也会反映到这里 // 而且,

windows下《Go Web编程》之Go命令

倖福魔咒の 提交于 2020-02-27 07:33:37
  Go命令:      go build   用于编译代码,默认会编译当前目录下的所以go文件。若只需编译某个文件,go build后加上文件名,如go build a.go。   go build会忽略目录下以“_”或“.”开头的go文件。   若源代码针对不同操作系统做不同处理,可根据不同操作系统后缀来命名文件,如array_linux.go,array_windows.go, go build时Linux系统下面编译指挥选择array_linux.go,其他系统后缀命名的文件全部忽略。   go help build 查看参数介绍   go clean   用于移除当前源码包和关联源码包里面编译生成的文件。包括: _obj/ 旧的object目录 _test/ 旧的test目录 _testmain.go 旧的gotest文件 test.out 旧的test记录 bulid.out 旧的test记录 *.[568ao] object文件 由Makefiles遗留 DIR(.exe) go build产生 DIR.test(.exe) go test -c 产生 MAINFILE(.exe) go build MAINFILE.go产生 *.so SWIG产生   一般利用这个命令清除编译文件后推送git。   go help clean 查看参数介绍。   go fmt