源码

在搭建直播系统过程中直播系统源码的作用

喜夏-厌秋 提交于 2019-12-23 10:58:32
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 直播市场如火如荼,越来越多的人涌入到直播这个浪潮中来,想要搭建自己的视频直播平台。想要搭建自己的直播APP并不是一件简单的事情,搭建直播平台的基础就是直播系统的源码,优秀的直播平台的搭建必然离不开一套优秀的直播系统源码。 一、视频流参数可控 我们可以通过后台的直播设置对主播的推流参数做统一的默认设置,推流参数主要包括比特率、关键帧间隔、FPS、品质大小、分辨率大小。同样也可以通过主播的网络环境为主播设置特定的推流参数。 二、主播系统 1. 平台可以对直播系统进行设置,设置用户是否是注册后就可以拥有自己的直播间进行直播或者需要达到一定的条件或者等级,经过后台审核后才可以进行直播。 2. 主播等级及分类,网站后台可以根据主播活跃度或者粉丝量对主播进行等级设置,同时根据主播直播类型进行分类,以便显示在平台首页方便用户浏览 3. 主播可以接受粉丝的打赏,并转化成相应的虚拟币,可以在后台进行提现,平台可以设置提现的比例,进行一定的抽成。 4. 主播可以加入家族公会,也可以通过家族房间进行直播 5. 主播可以设置守护榜,粉丝也可以通过刷礼物等方式进入榜单,守护自己喜爱的主播。 三、直播管理系统 1. 用户管理包含:所有用户列表、签约主播列表、在线主播列表、删除用户列表、主播分类设置、主播等级设置、富豪等级设置、审核签约用户

我的ArrayList源码理解

送分小仙女□ 提交于 2019-12-23 09:03:55
ArrayList源码理解 ArrayList底层使用 动态数组 并且 默认初始容量为10,空的数组为{} private static final int DEFAULT_CAPACITY = 10 ; transient Object [ ] elementData ; private static final Object [ ] EMPTY_ELEMENTDATA = { } ; 获取元素、修改元素 // 获取数组下标的元素 public E get ( int index ) { // 检查下标是否越界 rangeCheck ( index ) ; // 返回数组下标的元素 return elementData ( index ) ; } // 修改组数下标元素的值 public E set ( int index , E element ) { // 检查下标是否越界 rangeCheck ( index ) ; // 将修改的值赋值给 旧值 E oldValue = elementData ( index ) ; // 将新值赋值给要修改的值 elementData [ index ] = element ; // 返回旧值 return oldValue ; } 添加元素、按下标添加元素 // 添加元素 public boolean add ( E e ) { //

【一起学源码-微服务】Netflix Eureka 源码一:Netflix Eureka 源码初探,我们为什么要读源码?

故事扮演 提交于 2019-12-23 06:27:07
前言 最近发现 网上好多自己的博客,很多朋友转载了文章却不加下 原载地址,本文欢迎转载一起学习,请在目录出加上原出处,感谢。转载来自:博客( 一枝花算不算浪漫 ) 看了前面几篇文章的小伙伴知道,前几天在学习设计模式,所以标题也是用的【一起学xxx】,后面不出意外的话 都会使用这个标题了。 公司项目一直用的也是spring cloud,目前自己的水平仅仅也停留在使用阶段,所以最近用业余时间来学习下spring cloud相关组件。 文章打算采用连载的方式,欢迎大家批评指正。 项目结构 以下所有文章 源码皆基于 spring-cloud Edgware.SR3 版本。对应 Netflix eureka 1.7.x 版本。 因为spring-cloud-eureka 底层对netflix eureka进行了封装,所以这里我们先看netflix eureka源码,后续再去读以下spring-cloud-eureka 对应的东西即可。 目录如下: 主要读取server、client、core等相关代码 源码地址: https://github.com/Netflix/eureka 这里建议fork到自己git仓库,因为自己添加的注释、修改等可以直接提交,方便自己日后阅读参考。 上帝视角,源码从何看起 首先我们要找到代码中的口子,从入口开始读起会方便的多。 如上图所示,这里

【java基础之jdk源码】Object

回眸只為那壹抹淺笑 提交于 2019-12-23 05:29:27
最新在整体回归下java基础薄弱环节,以下为自己整理笔记,若有理解错误,请批评指正,谢谢。 java.lang.Object为java所有类的基类,所以一般的类都可用重写或直接使用Object下方法,以下为逻辑结构图,没有画类图 (注: 以上 绿色 方法为 非native方法 粉色 方法为 native方法) 那么问题来了 : 1、what is a native object?   本人理解: native关键字标识的java方法为本地方法,底层是有c/c++编写的程序编译后dll文件,java加载dll文件后,         可用通过本地方法调用dll中函数,如有疑问可用参考JNI使用方式,看参考:http://blog.csdn.net/yangjiali014/article/details/1633017         以下为Object类对应openjdk\jdk\src\share\native\java\lang\Object.c的源码 片段1 : 1 static JNINativeMethod methods[] = { 2 {"hashCode", "()I", (void *)&JVM_IHashCode}, 3 {"wait", "(J)V", (void *)&JVM_MonitorWait}, 4 {"notify", "()V", (void *

java之Stack详细介绍

我怕爱的太早我们不能终老 提交于 2019-12-23 03:21:15
概要 学完 Vector 了之后,接下来我们开始学习Stack。Stack很简单,它继承于Vector。学习方式还是和之前一样,先对Stack有个整体认识,然后再学习它的源码;最后再通过实例来学会使用它。 内容包括: 第1部分 Stack介绍 第2部分 Stack源码解析(基于JDK1.6.0_45) 第3部分 Vector示例 转载请注明出处: http://www.cnblogs.com/skywang12345/p/3308852.html 第1部分 Stack介绍 Stack简介 Stack是栈。它的特性是: 先进后出 (FILO, First In Last Out)。 java工具包中的Stack是继承于 Vector (矢量队列)的,由于Vector是通过数组实现的,这就意味着, Stack也是通过数组实现的 , 而非链表 。当然,我们也可以将LinkedList当作栈来使用!在“ Java 集合系列06之 Vector详细介绍(源码解析)和使用示例 ”中,已经详细介绍过Vector的数据结构,这里就不再对Stack的数据结构进行说明了。 Stack的继承关系 java.lang.Object ↳ java.util.AbstractCollection<E> ↳ java.util.AbstractList<E> ↳ java.util.Vector<E> ↳

mybatis源码阅读学习过程(二) Configuration

天大地大妈咪最大 提交于 2019-12-23 02:40:04
public SqlSessionFactory build ( InputStream inputStream , String environment , Properties properties ) { try { XMLConfigBuilder parser = new XMLConfigBuilder ( inputStream , environment , properties ) ; //委托XMLConfigBuilder来解析xml文件,并构建Configuration, //根据Xnode.evalNode。这个builder里具体解析xml挺多的 return build ( parser . parse ( ) ) ; } catch ( Exception e ) { throw ExceptionFactory . wrapException ( "Error building SqlSession." , e ) ; } finally { ErrorContext . instance ( ) . reset ( ) ; try { inputStream . close ( ) ; } catch ( IOException e ) { // Intentionally ignore. Prefer previous error. } } }

ReentrantLock源码解析

柔情痞子 提交于 2019-12-23 02:20:44
前面刚学习了AQS的基本原理,主要通过两个队列实现功能(同步队列+等待队列,前者是双向链表,实现加锁和解锁,后者是单向链表,用做同步协作,阻塞、唤醒),正好可以趁热打铁,了解一下ReentrantLock的源码,有了AQS的基础,阅读ReentrantLock的源码是非常简单的,如果没有了解AQS原理的同学,可以参考: AbstractQueuedSynchronizer源码(上)–排他锁 AbstractQueuedSynchronizer源码(下)–共享锁和Condition条件队列 我们都知道ReentrantLock的底层就是通过AQS实现,和Synchronized一样都是可重入锁,同时也是排他锁,所以ReentrantLock只能一个线程获取锁,但是线程可以获取当前资源的多重锁,对应锁数量+1,每次释放-1,直到等于0,才可以被其他线程竞争获取锁,有点引用计数法的意思。 类定义: public class ReentrantLock implements Lock , java . io . Serializable { private final Sync sync ; //默认构造函数,得到的事非公平锁 public ReentrantLock ( ) { sync = new NonfairSync ( ) ; } //支持传入fair参数,得到是否公平锁

源码速读及点睛:HashMap

时光毁灭记忆、已成空白 提交于 2019-12-23 01:31:57
Java 8 HashMap的分离链表 从Java 2到Java 1.7,HashMap在分离链表上的改变并不多,他们的算法基本上是相同的。如果我们假设对象的Hash值服从平均分布,那么获取一个对象需要的次数时间复杂度应该是 O ( N M ) O(NM)(原为 E ( N M ) E(NM),但数学期望应改为 E ( N 2 M ) E(N2M)疑有误,译者注)。 Java 8 在没有降低哈希冲突的度的情况下,使用 红黑树 代替 链表 ,将这个值降低到了 O ( log ( N M ) ) O(log⁡(NM))(与上同,疑有误,译者注)。 数据越多, O ( N M ) O(NM)和 O ( log ( N M ) ) O(log⁡(NM))的差别就会越明显。此外,在实践中,Hash值的分布并非均匀的,正如”生日问题”所描述那样,哈希值有时也会集中在几个特定值上。因此使用平衡树比如红黑树有着比使用链表更强的性能。 使用链表还是树,与一个哈希桶中的元素数目有关。 下面的代码展示了Java 8的HashMap在使用树和使用链表之间切换的阈值。 当冲突的元素数增加到8时,链表变为树; 当减少至6时,树切换为链表。 中间有2个缓冲值的原因是避免频繁的切换浪费计算机资源。 static final int TREEIFY_THRESHOLD = 8; static final int

Apache Camel源码研究之DataFormat

烈酒焚心 提交于 2019-12-22 15:56:08
在上一篇博客 Apache Camel源码研究之TypeConverter 中,我们介绍了Apache Camel实现数据格式转换的一种实现方式,本文中我们将介绍另外一种实现方式 —— DataFormat。 1. 概述 相较于前面博客介绍过的TypeConverter,DataFormat在平时应用中应该更容易被研发人员所感知,毕竟其所支持的json,yaml,xml等转换现在已经成为事实的数据传输格式。本文接下来的部分我们将就其实现原理以及如何进行自定义扩展作出一些笔者自己的理解。 2. 源码解读 首先是本次的测试用例: @Test public void marshal ( ) throws Exception { // CamelTestUtil . defaultPrepareTest2 ( new RouteBuilder ( ) { @Override public void configure ( ) throws Exception { from ( "stream:in?promptMessage=Enter something:" ) // . setBody ( constant ( Collections . singletonList ( "123" ) ) ) // . marshal ( ) . json ( JsonLibrary . Gson )