• MongoDB与Spring Boot

    本文出自:【InTheWorld的博客】

    MongoDB作为一种NoSQL数据库产品,其实已经非常著名了。去年,由于MongoDB安全认证的薄弱,上万家公司中招。虽然是一则负面新闻,但是也从侧面说明了MongoDB的流行程度。下图是DB-Engines统计的2017年5月全球数据库引擎使用排名。从图中可以看出,mongoDB位列总榜第五,非关系数据库第一,非常靠前的排名。

    db_engine_ranking

    我个人对mongoDB并不是非常熟悉,但是经过一段时间的了解,对mongoDB的特性还是有了一些简单的理解,这里记录一二。

    1. 首先,mongoDB作为一种非关系型数据库,它最大的特点就是Schema非常的弱。换而言之,mongoDB的升级以及应用的重构会变得比较简单。
    2. 其次,mongoDB使用了文档型的存储结构,数据接口则非常接近于JSON。JSON这种数据结构不仅简单而且也是非常流行的网络传输格式。
    3. 此外,mongoDB充分考虑了数据库
    【查看更多】
  • Android之视频编解码

    media

    不吹不黑,我的多媒体基础非常之薄弱,自己也意识到这方面的知识要恶补。最近由于工作上的需求,我也在弄编解码的东西。这篇blog主要的目的就是把最近理解到的东西记录下来,主要内容包括MediaExtractor、MediaCodecs以及Android上的硬件加速。


    • MediaExtractor

    为什么要从MediaExtractor开始说起呢?其实有两方面的原因,首先是它比较简单,其次它常常是视频编解码的第一个步骤。从功能上讲,MediaExtractor其实就是一个高配InputStream。它的作用就是读取音视频文件,然后按照一定的格式输出出来。废话不多说,我们先看一段使用的MediaExtractor的代码,然后结合代码分析。

     MediaExtractor extractor = new MediaExtractor();
     extractor.setDataSource(...);
    【查看更多】
  • 理解消息中间件

    本文出自:【InTheWorld的博客】

    消息中间件(Message-oriented middleware)是一类基础通信软件,它可以为分布式应用或者系统提供异步、松耦合、高可靠性、可扩展并且安全的通信功能。

    这段话出自《ActiveMQ in Action》,算是对消息中间件比较准确的定义。虽然这句话只有不到两行,却很值得我们仔细分析。

    1. 异步性

    image

    在分布式系统中,应用需要通过网络的方式协作。协作的典型方式就是通过RPC,RPC的实现方式有很多种,但有一点很确定——RPC是同步的。所谓的同步,是指请求返回时,请求的任务已经完成。区别于RPC这种同步的方式,消息中间件旨在实现一种异步的模式。看看下图就能发现消息中间件的异步特点。

    image

    异步模式与同步模式之间其实没有绝对的优劣,需要根据场景来讨论。比如在高并发的场景,由于同步模式的阻塞特性,可能会导致服务的【查看更多】

  • 使用RxJava遇到的问题

    本文出自:【InTheWorld的博客】

    timg

    越用RxJava,越觉得它好用,所以不知不觉地发现代码里到处都是RxJava的身影。然而,RxJava也不是银弹,其中仍然有很多问题需要解决。这里,我简单地总结一下自己遇到的一些“坑”,内容上可能会比较松散。

    • 考虑主线程的切换

    RxJava中一个常用的使用方法是——在其他线程中做处理,然后切换到UI线程中去更新页面。其中,线程切换就是使用了observeOn()。后台下载文件,前台显示下载进度就可以使用这种方式完成。然而,实践发现这其中有坑。如果文件比较大,而下载包的粒度又比较小,这将导致很多通知积压下来,最终导致错误。

    这种错误其实也是可以理解的,毕竟MainLooper是根据Message来工作的,Message过多必然会导致一些问题。当然,这还是比较想当然的想法,最终还是需要… 【查看更多】