RxJava doOnNext 歪打正着

来到了快手,代码是真滴乱。RxJava 到处甩,然后又炫技式的使用,冗余各种复杂逻辑,且有些地方使用并不规范,只不过没有出问题。配合自制 MVPs 架构,又秀了一波依赖注入,全是注解,导致我刚看代码时,完全凌乱了,重点是没有任何文档,对新人极不友好,且我认为,代码不应该这样写。

Promise

如今写了很多门语言之后越来越有感触,事件驱动的设计离不开各种异步调用。比如 Android 中主线程如今已经不允许发送网络请求等等,这时候都需要一些异步回调。而在前端也是如此,但是前端8成以上的工程师能做的原理性的东西很少。
首先 JsCore 改不了吧?水平有限!其次,CSS 的解析改不了吧?写各种 loader,各种插件已经很牛逼了,我感觉那些 webpack 相关的东西,至今我也不是很懂,只是会用。所以大部分人都关注在业务开发上。
而客户端的工程师还有很多其他的事情研究,比如热更新啊、性能优化啊等等。
我觉得没有好坏之分,但是前端在代码架构上或者一些设计上我觉得更优秀,客户端相比很落后。比如双向绑定,redux 等思想。再比如这个 promise,虽然客户端也有可以处理这种事情的东西,比如 RxJava、RxAndroid 等等,但是感觉没这么直接,RxJava 也要不停 subscribeOn、observeOn 等等,或者你说你写个 compose,但是还是那样,不直观不直接。

再来看看 WMS

这几天想重新研究研究一些 Android Framework 相关的东西,看到了 WindowManagerService(WMS),产生了一些疑问。

getSystemService(“window”)获取的是什么

很多人说是,WMS 的代理对象,可是目前我看的 android-28 的源码,发现并不是这样。

HTTP CORS

CORS

跨域资源共享(CORS) 是一种机制,它使用额外的 HTTP 头来告诉浏览器 让运行在一个 origin (domain) 上的Web应用被准许访问来自不同源服务器上的指定的资源。当一个资源从与该资源本身所在的服务器不同的域、协议或端口请求一个资源时,资源会发起一个跨域 HTTP 请求。
https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Access_control_CORS

OPTIONS 请求

问题描述

第一次跟前端H5对接,结果请求不通,交流才知道,他们先发一个 OPTIONS 请求,然后再发送真实请求,而我这边后台只对 GET 请求做了处理

说出来不怕丢人,我还真的不知道有 OPTIONS 请求,复习一下相关知识

Http Post FormData

问题描述

需要上传一张图片到我们的对象存储服务器,对方给了接口协议。

需使用 post 请求,Content-Type 为 multipart/form-data

且 key = filecontent,value 就是文件内容

H5 audio 标签

背景

没错,前端天才终于涉及了真正的前端h5页面!

需求是优化一个两年前别人写的播放器!

可是坑死我了···

audio

  • 几个重要的方法
    • play 加载并播放音频或重新播放暂停的的音频
    • pause 暂停处于播放状态的音频文件
  • 几个重要的回调
    • waiting 无法直接播放,加载
    • canplay 缓冲至目前可播放状态
    • play play()和autoplay播放时
    • timeupdate 播放时间变化
    • ended 播放结束

一个简单的播放器逻辑

  • 一个友好的用户交互

初识 Webpack 遇到的坑

概述

最近在搞 weex 工程,然后想要把我们开发的所有 weex 相关的东西集成到一个工程里面,然后可以实现组件的复用,打 bundle 的时候又需要分开编译

简而言之,就是支持多个工程分别打包,单个 vue 分别编译

虚拟内存 和 mmap

虚拟内存

  • 虚拟内存是计算机系统内存管理的一种技术。它使得应用程序认为它拥有连续可用的内存(一个连续完整的地址空间),而实际上,它通常是被分隔成多个物理内存碎片,还有部分暂时存储在外部磁盘存储器上,在需要时进行数据交换。

久违的更新之链接

一个c文件调用另一个c文件的方法,如何找到?

hello.h

#ifndef HELLO
#define HELLO
int fn_c(int x_local);
#endif

hello.c

/* 这是一个存在于程序别处的某个全局变量的声明 */
extern int z_global;

/* 这是一个函数的定义,函数参数可以认为是局部变量 */
int fn_c(int x_local)
{
    return (z_global + x_local);
}

hello_main.c

#include"hello.h"
#include<stdio.h>
int z_global = 1;
int main(int argc, char *argv[])
{
    printf("%d", fn_c(10));
    return 0;
}