SpaceX上的Javascript 这下面试造火箭没准真就去造火箭了

在上个月SpaceX 成功发射了载人火箭Dragon 2,其中的飞行界面就是由ChromiumJavaScript进行构建的,当然只有图形界面是,系统的其他部分还是由c++来完成的。

Also, only the actual graphical display application uses Chromium/JS. The rest of the system is all C++. The display code has 100% test coverage, down to validation of graphical output (for example if you have a progress bar and you set it to X% the tests verify that it is actually drawn correctly).

不知道会不会出现氧气剩余 NaN%着陆地点undefined

undefined

火箭的操作界面估计是不会开源了,但是SpaceX-API倒是在GitHub上开源了。

阿波罗登月的代码之后又参与了SpaceX-API review,以后面试问我参与过什么项目就可以说参与过阿波罗登月计划SpaceX 载人航天计划code review。感觉准备个PPT可以去融资了。

JavaScript实现Twitter雪花算法

使用SnowFlake的理由

按照时间自增,可排序。

并且整个分布式系统内不会产生ID碰撞(由数据中心ID和机器ID作区分)。

经测试 MacBook Pro (15-inch, 2018) 每秒可产生136万左右的ID。

Twitter_Snowflake

twitter开源的地址:twitter-archive/snowflake

SnowFlake的结构如下(共64bits,每部分用-分开):

0 - 0000000000 0000000000 0000000000 0000000000 0 - 00000 - 00000 - 000000000000

| ———————-|———————- –|– –|– —–|——

1bit不用 41bit 时间戳 数据标识id 机器id 序列号id

  • 1位标识,二进制中最高位为1的都是负数,但是我们生成的id一般都使用整数,所以这个最高位固定是0
  • 41位时间戳,41位时间截不是存储当前时间的时间截,而是存储时间截的差值(当前时间截 - 开始时间截得到的值),这里的的开始时间截,一般是我们的id生成器开始使用的时间,由我们程序来指定的(如下下面程序IdWorker类的startTime属性)。41位的时间截,可以使用69年,年T = (1L << 41) / (1000L * 60 * 60 * 24 * 365) = 69
  • 10位的数据机器位,可以部署在1024个节点,包括5位dataCenterId和5位workerId
  • 12位序列,毫秒内的计数,12位的计数顺序号支持每个节点每毫秒(同一机器,同一时间截)产生4096个ID序号
  • 加起来刚好64位,为一个Long型。
Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×