-
直播间性能优化实践
一、直播间结构在线教育场景下的直播间不同于泛娱乐类直播App,其业务的复杂度更高,同时用户的设备分布更分散,有很多低端机及性能差的设备,而用户的上课的时长通常在1.5小时左右,长时间的停留让设备发热及耗电明显,最终导致直播间的性能问题成为了根本的瓶颈。要解决直播间的性能问题,首先要先从直播间的整体构成入手,具体如下图:从整体UI的结构上看整个直播间是横屏,由课件区、主讲的拉流区、用户自己的推流区、同组学员区、聊天区组成,这几个区域都是常驻,从进入直播间开始就存在,其中的课件区是Webvie...…
-
编译器之LLVM简史
写了这么久程序你是否真的知道自己的代码是如何转换为可执行文件在操作系统上运行的?这是我最近写代码时的常常思考的问题,所以就有了这篇探究原理的文章。本文旨在记录人个对Mac OS、iOS系统编译器相关原理在学习中的理解和对相关概念的摘录,如有不妥之处欢迎指正。1. 编译器?编译器(Compiler),是一种计算机程序,它会将用某种编程语言写成的源代码(原始语言),转换成另一种编程语言(目标语言)。其中原始语言可以是C、C++、Java、Objective-C、Swift等,目标语言则通常是机...…
-
Display animated GIF in iOS
众所周知,iOS不支持播放GIF格式的动图。问题的原因有几种说法:一种说法是因为最初MacOS不支持Flash,而GIF恰巧是Flash的一种导出格式,所以iOS也就不支持GIF了;另外一种说法是因GIF格式太老,近几年出现的HTML5完全可以取代Flash以及GIF,所以iOS设计之初就不支持GIF。其实真正的原因只有设计iOS系统的人知道。暂且不管这其中的原因,先来看看如何支持GIF动图:GIF格式先从GIF格式说起,GIF是一种位图格式,与矢量图相反,它是一种压缩格式,因其体积小而成...…
-
设计模式之委托模式Delegation
1.什么是委托模式(Delegation)委托是指给一个对象提供机会对另一个对象中的变化做出反应或者影响另一个对象的行为。即有两个对象参与处理同一个请求,接受请求的对象将请求委托给另一个对象来处理。其基本思想是:两个对象协同解决问题。一个对象非常普通,并且打算在广泛的情形中重用。它存储指向另一个对象(即它的委托)的引用,并在关键时刻给委托发消息。消息可能只是通知委托发生了某件事情,给委托提供机会执行额外的处理,或者消息可能要求委托提供一些关键的信息以控制所发生的事情。委托模式是一项基本技巧...…
-
设计模式之观察者模式Observer
1.何为观察者模式(Observer)观察者模式(又被称为发布/订阅模式Publish-Subscribe或依赖模式Dependents)是软件设计模式的一种。即定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。在此种模式中,一个目标对象管理所有相依赖于它的观察者对象,并且在它本身的状态改变时主动发出通知。这通常通过调用各观察者所提供的方法来实现。此种模式通常被用来实现分布式事件处理系统。此模式也是MVC模式的关键组成部分。在许多编程中...…
-
iOS核心技术之:内存管理之二手动内存管理
1.关于内存管理应用程序内存管理是:“在程序运行时开辟内存空间、使用内存空间,并在程序完成时释放内存空间的过程”。写得好的程序,会尽可能少占用内存。在Objectiv-C中,内存管理被看做是在很多数据和代码中分配受限内存资源所有权(Ownership)的一种方式。虽然内存管理通常被认为是针对单个对象级别进行的,但实际上我们的任务是管理“对象图”(Object Graph),你需要确保除了你实际需要的对象之外,内存中没有其它的对象。 Objective-C提供了两种内存管理方式: ...…
-
设计模式之适配器模式Adapter
1.何为适配器模式(Adapter)将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作(Adapter有助于两个不兼容的接口一起工作)。简单的说,就是需要的东西就在面前,但却不能使用,而短时间又无法改造它,于是我们就想办法适配它。适配器主要应用于希望复用一些现存的类,但是接口又与复用环境要求不一致的情况,比如在需要对早期代码复用一些功能等应用上很有实际价值。2.如何实现适配器(Objective-C)Delegate是Ob...…
-
设计模式之单例模式Singleton
1.何为单例模式(Singleton)保证一个类仅有一个实例,并提供一个访问它的全局访问点。一个全局变量使得一个对象可以被访问,但它不能防止实例化多个对象。一个更好的办法是,让类自身负责保存它的唯一实例。这个类可以保证没有其他实例可以被创建(通过截取创建新对象的请求),并且它可以提供一个访问该实例的方法。这就是Singleton模式。2.如何实现单例(Objective-C)实现单例模式的思路是:一个类能返回对象一个引用(永远是同一个)和一个获得该实例的方法(必须是静态方法);当我们调用这...…
-
iOS核心技术之:内存管理之一基本概念
内存模型isa指针在Objective-C语言的内部,每一个对象都有一个名为isa的指针,指向该对象的类。每一个类描述了一系列它的实例的特点,包括成员变量的列表,成员函数的列表等。每一个对象都可以接受消息,而对象能够接收的消息列表是保存在它所对应的类中。关于isa指针详细内容推荐巧哥的 Objective-C对象模型及应用 介绍的非常到位并且包含实际应用场景。堆内存 堆(heap)是指内存中的一块区域,应用中的所有对象都会保存在堆中。当应用向某个类发送alloc消息时,系统会从堆中分...…
-
Hadoop集群环境搭建及配置
1.环境准备 三台服务器:CentOS6.5系统,IP地址如下,分别配置hosts:vi /etc/hosts10.2.15.12 master #NameNode JobTracker10.2.15.13 slave1 #DataNode TaskTracker10.2.15.14 slave2 #DataNode TaskTracker JDK安装及Java环境配置下载 jdk1.7.0_51tar zxvf -C /apps/ # 解压到/apps/目录cho...…