2017 APM In Beijing
前几天有幸代表公司去参加了2017年中国应用性能管理大会,虽然不是站在上面分享和讲解的那个人,但是这也是第一次参加这样全国性质的开发者技术分享会,也是第一次来到帝都北京。 来都来了,当然要看看。 感谢公司圆了我儿时的梦想,能站在帝都天安门广场,能去一下年轻时努力了但也没进去的清华园,蹬着单车逛遍奥林匹克中心,顺着东四环穿过宇宙中心五道口,路过林大、矿大,一路凯歌猛进,矿泉水都喝了3瓶,硬是蹬到了清华园。清华园门口,碰到了暑期来京旅游的游客一行人,其中一个女游客问我“同学,请问清华大门怎么走?”“呃,我也不知道,应该就在附近”“啊?!原来你不是清华的啊”“恩,不是,我是今天刚来的北大报道的新生”“噢,这样啊,谢谢你啊”“恩,没事”。人生第一次当了一回北大的学生,虽然在别人看来更像清华的。 北京真大,地图上一小段距离硬是蹬了我大几个小时。正是由于大,所以北京的建筑并不拥挤,也没有想象中的那么多高楼大厦,与深圳不同,北京的楼并不高,高楼大厦群可能只是集中在几个CBD。我蹬着车一度感觉不像在首都,只有偶尔有听到旁边有几个满嘴京味普通话的人说话和天空远处的霾,才反应过来这是在北京…
React-Native实现原理
一、React Native背景 * React是什么,Native又是什么? React * React 是由Facebook推出的一个JavaScript框架,主要用于前段开发。 * React 采用组件化方式简化Web开发 * DOM:每个HTML界面可以看做一个DOM * 原生的web开发方式,HTML一个文件,javaScript一个文件,文件分开,就会导致修改起来比较麻烦 * 可以把一组相关的HTML标签和JavaScript单独封装到一个组件类中,便于复用,方便开发 * React 可以高效的绘制界面 * 原生的Web,刷新界面(DOM),需要把整个界面刷新 * React只会刷新部分界面,不会整个界面刷新 * 因为React独创了Virtual DOM机制。Virtual DOM是一个存在于内存中的JavaScript对象,它与DOM是一一对应的关系,当界面发送变化时,React会利用DOM Diff算法,把有变化的DOM进行刷新 * React是采用JSX语法,一种JS语法糖,方便快速开发 Native * 继续…
ffmpeg和流媒体视频编解码的研究
常见视频格式的一些特点和区别 * mkv、rmvb、avi、MP4、flv、wmv这些指的都是文件格式,也就是封装格式,都是容器,而不是真正的数据压缩格式,内部封装都是采用不同的音视频编码压缩后的数据,比如mp4,flv内部都是h264格式的视频数据和aac的音频数据 * 1、mkv:mkv不等同于音频或视频编码格式,它只是为这些进行过音视频编码的数据提供了一个封装的格式,简单的说就是指定音视频数据在文件中如何排列放置。 MKV最大的特点就是能容纳多种不同类型编码的视频、音频及字幕流,俗称万能媒体容器。 MKV加入AVI所没有的EDC错误检测代码,这意味着即使是没有下载完毕的MKV文件也可以顺利回放,这些对AVI来说完全是不可想象的。虽然MKV加入了错误检测代码,但由于采用了新的更高效的组织结构,用MKV封装后的电影还是比AVI源文件要小了约1%,这就是说即使加上了多个字幕,MKV文件的体积也不可能比AVI文件大。 MKV支持可变帧率,它可在动态画面中使用较大的帧率,而在静态画面中使用较小的帧率,这样可以有效的减少视频文件的体积,并改善…
iOS架构设计与优化(三)
之前介绍了在项目层面如何去进行数据解耦和服务中间件的实现,这篇主要介绍在MVC模块内部如何不用MVVM而达到MVVM解耦的效果 我们都知道,MVVM设计模式是在MVC使用过程中日益庞大而不易维护的背景下应运而生的,设计思想和目的都是为C减负,将C中的业务和一些能抽出的逻辑代码抽出到VM中处理,使整体项目结构达到低耦合、高内聚 废话不多说,还是用一个实例来对比说明 页面为一个常规列表页,列表中展示的为订单信息,cell样式根据订单状态可能有两种样式,一种需要付款的状态cell样式,另一种不需要付款的状态cell样式,两种样式的cell高度不同 一种MVVM的实现 // Model struct OrderSummaryModel { var orderNumber: String? var orderState: Int? var orderDescirption: String? var orderAmount: String? var orderCreateDate: String? var orderNeedPay…
Swift中的权限控制
Objective-C 拥有 4 个访问控制相关的修饰符 @public @protected @private 和 @package,他们只能用来修饰成员变量。@public 修饰的成员变量可以任何地方进行访问,@protected 修饰的成员变量可以当前类及其子类中访问,@private 修饰的成员变量只可以在当前类访问。@package 修饰的成员变量在当前 Framework 中访问。成员变量的默认修饰符为 @protected。 但是对于动态语言来说,访问控制并没有真正的意义,就算是 @private 的成员变量你仍然有无数种方式来访问他们。所以在 Objective-C 中访问控制本质上只是用来隐藏实现细节,告诉使用者哪些才是真正需要关心的,并为不需要关心部分的直接调用创造一些麻烦。 在 Objective-C 中这些访问控制的修饰符很少被使用,因为 Objective-C 有很多更好的隐藏细节的方式。一般情况下,我们使用 @property 隐藏成员变量来实现读写权限控制。需要 @public 权限时,我们只需要将 @property 定义在 .h 文件中。…
iOS架构设计与优化(二)
上篇提到利用数据分层思想来解耦项目代码和逻辑,数据分层一个很重要的工具就是Service类,这篇就重点介绍Service的实现和属性的动态装配 服务类的注册实现 要实现某个服务,本质就是实现一套协议方法,其他语言中协议方法也叫做一套接口,还是拿之前的数据获取服务举例: @interface LYIPAggregationBusinessDatas : NSObject <ExportableProtocol, LYIPAggregationBusinessDatasProtocol> @end @implementation LYIPAggregationBusinessDatas LY_EXPORT_SERVICE_FOR_PROTOCOL(LYIPAggregationBusinessDatasProtocol, NO); - (LYSignal<NSArray<LYAggregationMenuItemDetail *> *> *)allMenuItems { return [[@"/v1/guest/goodsCategory".http…
iOS架构设计与优化(一)
前言 随着移动开发的浪潮逐渐退去,现在对于移动开发工程师的要求越来越高,不在仅仅满足于能完成项目所需的功能于界面的搭建,对于底层和架构的理解对于现在的开发越来越重要,在此有一点架构的设计经验可以与大家分享和探讨 传统移动MVC设计模式 在长久以来的开发过程中,我们有使用着用途最广,使用者众多的MVC设计模式。但是,随着开发的进行,MVC产生的问题越来越多,控制器层的代码无法控制,代码越来越难以维护和迭代。每当产品来提出新的需求,程序猴子们的大刀早已饥渴难耐了,但是又不得不陷入继续打补丁版本更新无尽的循环中··· 是MVC已经被时代淘汰了吗? 可能我们没有使用正确的姿势 深入理解MVC中的M Model不只是一个数据模型,更是一个处理数据产生、获取、逻辑处理中心,不能只单单理解为一个数据模型,我们在开发中使用的Model只是这个数据中心中很小很小的一个部分。而在这个数据中心中,我们又应该将这个中心分层,比如可以分为Service层用来处理业务逻辑、DAO层处理数据库逻辑、Protocol层来封装一些某些功能接口等等。在此,我使用JAVAWeb中的一个图来描述…