让前端飞前端便利店

有趣的前端面试题

2023-07-18  本文已影响0人  小遁哥

尽管我不喜欢这种方式考察前端能力,但恐怕不是面试也遇不到,还是记录下,感觉工作一年的时候遇到这些问题会答的更好。

1

选择题

一批图书数量在 2500 到 3000 之间,每所希望小学发 24 本剩余 0 本,每所希望小学发 28 本剩余 0 本,每所希望小学发 32 本剩余 0 本,问这批图书有多少本。

for (let i = 2500; i < 3000; i++) {
  if (i % 24 == 0 && i % 28 == 0 && i % 32 == 0) {
    console.log(i);
    break;
  }
}

答案 2688,数学上就是算出最小公倍数然后乘 2 即可。但在计算机上好像除了穷举法没什么更好的吧。

2

第二题就是下面这段话的拆分,然后选出顺序,因为我搜到了原文

网络投票,本来是为了让更多的人参与,让各种投票评选活动公开,不过,越发扩大的投票范围,使得网络投票已然变味。而网络投票又衍生了很多刷票软件,“投票达人”“投票大王”“投票大师”等刷票软件,都属于有偿使用的工具。当有人利用投票活动牟利,或者为了获奖而刷票、拉票时,不仅形成一种失信行为,还会造成互相比拼的恶性竞争,践踏了公平底线。网络评选投票的背后,是已然失去控制的检查评比现象。

3

选择题,这题我做的时候没算出来,随便蒙的,

销售一部手机,按照原地价格的先降价 200 再打九折最终售价为 1170,此时仍可获得 14%的利润,按照原定价销售可获得利润为。

这题最骚的是 14 它不是整除,原价 1500 我算出来了,然后就直接 1500 除 1170 乘 0.14,其实还要算出原价 1026,最后是 0.4619

let price = 0,
  originPrice = 0,
  currenPrice = 1170;
for (let i = 201; i < 3000; i++) {
  if ((i - 200) * 0.9 === currenPrice) {
    price = i;
    break;
  }
}
for (let i = 3000; i > 200; i--) {
  if ((currenPrice - i) / i >= 0.14) {
    originPrice = i;
    break;
  }
}

console.log((price - originPrice) / originPrice);

4

选择题

甲乙三数之和是 197,乙除以甲商 3 余 1,丙除乙商 3 余 1,问甲和丙的和,

const maxNum = 187;
for (let a = 0; a < maxNum; a++) {
  for (let b = 0; b < maxNum; b++) {
    for (let c = 0; c < maxNum; c++) {
      if (
        a + b + c === maxNum &&
        c % b == 1 &&
        ((c / b) | 0) == 3 &&
        b % a == 1 &&
        ((b / a) | 0) == 3
      ) {
        console.log(a + c);
        break;
      }
    }
  }
}

答案 144,其实我当时的想法也是对,设甲是 x,乙就是 3x+1,丙就是 9x+4。但是粗心了些,后来就自己找数带了。

5

选择题

全班平均成绩 85.3,小明发现在自己考了 87 分但老师等级的 77,重新计算后平均分为 85.5,这个班有多少人。

for (let i = 0; i < 100; i++) {
  if (85.3 * i + 87 - 77 == 85.5 * i) {
    console.log(i);
    break;
  }
}

50,这种反而用数学更简单

6

选择题

事件传播的三个阶段,答案是捕获>目标>冒泡,我理解 addEvenListener 的第二个参数不是可以决定事件在哪个阶段触发,还自作聪明的发现没有强调是单项选择,因次选了目标>捕获>冒泡,目标>冒泡>捕获,蜜汁操作。

7

选择题

null instanceof object 是 false,我记成了 true, null 都没有原型链,蜜汁操作

8

选择题 {a:'one',b:"two",a:"three"},问 console.log 输出结果是什么,正确答案是{a:'three',b:"two"}

我记成了 {b:"two",a:"three"},蜜汁操作

9

http 中 head 请求方法作用,忘记了,其实和 get 一样,只不过不返回请求体,比如判断某个资源是否存在,语义化更明确。

10

 function Foo() {
      getName = function () {
        console.log(5);
      };
      return this;
    }

    Foo.getName = function () {
      console.log(4);
    };
    Foo.prototype.getName = function () {
      console.log(3);
    };
    var getName = function () {
      console.log(2);
    };
    function getName() {
      console.log(1);
    }

    Foo.getName();//4
    getName();//2
    Foo().getName();//5
    getName();//5
    new Foo.getName();//4
    new Foo().getName();//3
    new new Foo().getName();//3

后两个当时犹豫了,一直在想执行流程是啥,其实第六个没啥好犹豫的。

第一个没啥悬念

第二个是因为 function getName 存在变量提示,然后被 var getName = function ()覆盖,

第三个先执行 Foo,默认是 windows 作用域,里面再一次覆盖 getName,所以第四个也是 5

第五个先执行 Foo.getName() 在 new,输出返回结果是 Foo.getName {}

第六个先执行 new Foo()再 getName(),调用到 Foo.prototype.getName

第七个相当于 new (new Foo().getName()),调用到 Foo.prototype.getName 是 3,输出返回时Foo.getName {}

上一篇 下一篇

猜你喜欢

热点阅读