會留里

stay hungry, stay foolish

超大整数列相加

昨天面试遇到了两道简单的算法题,对于算法盲的我来说当然 是扑街了。

1.m和n两个百万级长度级整数串相加怎么实现。

首先node.js的变量是存储不了这么长的int的,只能用str的形式存储,然后需要手动进行位数相加以及进位。

时间复杂度: O(m > n ? m : n)

代码:

// Node.js

'use strict';

let a = '', b = '';
for (let i = 0; i < 500000; i++) {
  a += parseInt(Math.random() * 100000);
}
for (let i = 0; i < 500000; i++) {
  b += parseInt(Math.random() * 100000);
}

var d = new Date();

let i = a.length-1;
let j = b.length-1;

let m = 0;
let s = '';

while (i >= 0 || j >= 0) {
  let _a = i >= 0 ? parseInt(a[i]) : 0;
  let _b = j >= 0 ? parseInt(b[j]) : 0;

  m = _a + _b + m;
  s = m % 10 + s
  m = m >= 10 ? 1 : 0;

  i--;
  j--;
}

console.log(s);
console.log(s.length);
console.log('time spend: ', new Date() - d);

2.长度为m的数组中查找最大的n个整数。

使用选择排序

时间复杂度: O(n*m)

代码:

// node.js

'use strict';

let d = new Date();

let arr = [];
for (let i = 0; i < 2000000; i++) {
  let r = parseInt(Math.random() * 10000);
  arr.push(r);
}

let m = arr.length;
let n = 10;

for (let i = 0; i < m; i++) {
  for (let j = i+1; j < m; j++) {
    if (arr[i] < arr[j]) {
      let k = arr[i];
      arr[i] = arr[j];
      arr[j] = k;
    }
  }
  if (i >= n-1) break;
}

console.log(arr.splice(0, n));
console.log('time spend: ', new Date() - d);

Docker 使用简记

前言

虽然很久之前就发现了 Docker 这个利器,但由于拖延症的缘故,除了n月前不想污染开发环境用它pull 了一个 Oracle 环境之外,并没有很正式地去学习它。

最近和公司来的实习生合作编写了一个爬虫引擎,其间为了集成运行换环境,最后选取了使用Docker部署这个文案。

籍此契机也令我对 Docker 有了更深一步的了解。

在此记录一下 Docker 的简单使用。

Docker 在我现在理解应该是一个虚拟最佳实现文案,无论安装还是运行也是最简便的。

原理

个人对于 Docker 的理解只是应用级的理解,你可以通过 Docker 制作集成你需求环境的系统的镜像,同时亦可以通过简单的操作将其作为容器运行起来。

其优势如下:

  1. 有丰富的精简镜像资源。
  2. 简单的命令行操作。
  3. 卓越的性能

常用命令:

1. docker pull
  1.1. docker load [name].tar

2. docker ps

3. docker run

4. docker exec -it [id, name]

5. docker commit [id, name]

5. docker export

坑:

一. 由于历史原因,本地的Dockerk跟服务器上的Docker版本不一致,本地导出的images在服务器上加载失败!

报如下奇怪错误:

[email protected]🌻 ~ docker load [name].tar
[email protected]🌻 ~ xx.json no such file or directory

解决方案(一条奇怪的命令):

[email protected]🌻 ~ cat [name].tar | docker import - busyboxtest

原因未明,详见参考1

二.

本破电脑应该也是由于历史原因升级不了High Sierra一直停留在EI Caption。

最新的 Docker 18.06.1-ce-mac73 貌似对这个版本的系统不是很友好。

升级用了几天之后崩溃不能启动,提示初始化手抖点了所有镜像全部没了啊啊啊啊啊啊!!!

_(:::з」∠)_

参考

  1. docker 基础工作原理(一) - CSDN博客