一些面试question

150 阅读1分钟
const assert = require('assert');

/**
 * --- 问题描述 ---
 *
 * 给出一个数字,找出它是斐波那契数列中的第几个数
 *
 * --- 说明 ---
 *
 * - 斐波那契数列 [1, 1, 2, 3, 5, 8, 13, ...],后一个数字是前两个数字之和
 * - 输入的数字大于等于 2
 * - 如果输入数字不存于斐波那契数列中,返回 -1
 */

function findFibonacciIndex(n) {}

/*******测试部分*******/
(function findFibonacciIndexTest() {
  try {
    assert.strictEqual(findFibonacciIndex(2), 2);
    assert.strictEqual(findFibonacciIndex(13), 6);
    assert.strictEqual(findFibonacciIndex(100), -1);
    console.log('findFibonacciIndexTest 通过');
    return '通过';
  } catch (err) {
    console.log('findFibonacciIndexTest 不通过');
    return '不通过';
  }
})();

/**
 * --- 问题描述 ---
 *
 * 实现一个函数生成器,接收一个原函数和一组 index,生成一个新函数
 * 调用新函数时,按照 index 数组中定义的顺序将参数传入原函数中
 *
 */

function createRearFunc(func, indexes) {}

/*******测试部分*******/
(function createRearFuncTest() {
  try {
    const originalFunc = function (a, b, c) {
      return [a, b, c];
    };
    const f = createRearFunc(originalFunc, [2, 0, 1]);
    // 按照 [2, 0, 1] 定义的顺序
    // ['foo', 'bar', 'fiz'] 分别应该作为原函数的第 2/0/1 个参数传入
    assert.deepEqual(f('foo', 'bar', 'fiz'), ['bar', 'fiz', 'foo']);
    console.log('createRearFuncTest 通过');
    return '通过';
  } catch (err) {
    console.log('createRearFuncTest 不通过');
    return '不通过';
  }
})();

/**
 * --- 问题描述 ---
 *
 * 给定一组文件路径,找出它们共同的的父级目录
 *
 * --- 说明 ---
 *
 * - 如果不存在共同的父级目录,返回 `null`
 */

function findParentDirectory(paths) {}

/*******测试部分*******/
(function findParentDirectoryTest() {
  try {
    assert.strictEqual(
      findParentDirectory(['/home/admin/vue', '/home/admin/react']),
      '/home/admin'
    );
    assert.strictEqual(
      findParentDirectory([
        '/home/admin/react/src',
        '/home/admin/react',
        '/home/admin/react/src/index.js',
      ]),
      '/home/admin/react'
    );
    assert.strictEqual(findParentDirectory(['/usr/bin', '/etc/config']), null);
    console.log('findParentDirectoryTest 通过');
    return '通过';
  } catch (err) {
    console.log('findParentDirectoryTest 不通过');
  }
})();