赞
踩
- var length = 10;
- function fn() {
- console.log(this);
- return this.length+1;
- }
- var obj = {
- length: 5,
- test1: function() {
- return fn();
- }
- };
- obj.test2=fn;
- //下面代码输出是什么
- console.log(obj.test1())
- console.log(fn()===obj.test2())
{}
Object.keys
-
- // 需要实现的函数
- function repeat (func, times, wait) {},
- // 使下面调用代码能正常工作
- const repeatFunc = repeat(console.log, 4, 3000);
- repeatFunc("hellworld");//会输出4次 helloworld, 每次间隔3秒
类似题1. 了解跨域吗?有哪些解决的方法?
类似题2. 项目中有没有遇到过跨域,这是什么,怎么解决的?为什么CORS要区分简单请求和非简单请求?
首先说了项目中用到了Nginx代理进行跨域,这个就没有继续深入问;然后说CORS,这个就问的比较细,什么是简单请求非简单请求,都是怎么个流程,具体到请求的http头部信息都有问到,过程中也是多次打断提问
类似题3. 跨域有哪些方法?cors跨域的常见字段?JS跨域(如何实现跨域)
类似题4. 讲一讲为什么要跨域, 跨域的同源策略是为了防止哪些攻击?讲一讲 XSS 攻击可能有的攻击场景, 列举防范 XSS 攻击的方式?
- class Animal {
- sayName = () => { throw new Error('你应该自己实现这个方法');
- } }
- class Monkey extends Animal {
- sayName() { console.log('I love coding');
- } }
- const monkey = new Monkey();
- monkey.sayName();
- 最长递增子序列意思是在一组数字中,找出最长一串递增的数字,比如
- 0, 3, 4, 17, 2, 8, 6, 10,对于以上这串数字来说,最长递增子序列就是 0, 3, 4, 8, 10。
- // 实现一个foo函数, 返回自身被调用的次数 可以这么使用:
- a = foo();
- b = foo();
- c = foo();
- // 此时 a 的值是1;b的值是2;c的值是3;
- console.log(a, b, c) // 1 2 3
-
-
- foo.reset();
- d = foo(); // d的值是1, 说明foo重新开始计数;
- // 实现 curry函数, 支持以下功能
-
- var abc = function(a, b, c) {
- return [a, b, c];
- };
-
- var curried = curry(abc);
-
- curried(1)(2)(3);
- // => [1, 2, 3]
-
- curried(1, 2)(3);
- // => [1, 2, 3]
-
- curried(1, 2, 3);
- // => [1, 2, 3]
- function Foo() {
- getName = function() {
- console.log(1);
- };
- return this
- }
-
- function getName() {
- console.log(5);
- }
-
- Foo().getName(); // 输出是?
- const arr = [1,2,3]
- arr.push(4);
- arr.splice(1);
- arr[1] = 3;
- arr = [1,2,3];
- arr = [2,3];
- 输出什么?
- var a = 3
- (function (){
- console.log(a)
- var a = 4;
- })()
-
- var a = 3
- (function (){
- console.log(a)
- let a = 4;
- })()
- <style>
- .green {
- background-color: green;
- }
-
- .red {
- background-color: red;
- }
-
- .blue {
- background-color: blue;
- }
- </style>
- <body>
- <div class="green blue red">
- fsdfasdfasd
- </div>
- </body>
-
- 背景是什么颜色的? 为什么?
- 已知数组 a=[1,[2,[3,[4,null]]]],
- 实现数组 b=[4,[3,[2,[1,null]]]] ,考虑n级嵌套的情况
- 给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。
-
- 示例 1:
-
- 输入: "babad"
- 输出: "bab"
- 注意: "aba" 也是一个有效答案。
- 示例 2:
-
- 输入: "cbbd"
- 输出: "bb"
fs.readFile是一个读取文件信息的函数, 最后一个参数是回调函数 ,初始我就当只有一个参数写的,面试官提醒了一波,实现一个promisify函数
const arr = new MyArray(1,2,3,4...) arr[-1]
我开始的思路就是以为要实现个迭代器的那种,他就说那你写,我说不会,,,面试官就提示,说用我之前说到的数据劫持Object.defineProperty或者Proxy,本来他一说我觉得哎对可以,然后写了一点发现不太ok,最后还是没写出来,面试官又提供了一些思路,但是没让我继续写了,说换个题
- const queue = new Queue();
- queue
- .task(1000, () => {console.log(1)})
- .task(2000, () => {console.log(2)})
- .task(2000, () => {console.log(3)})
- .start()
- // stop()
- var a = {
- b: null,
- c: null
- }
- a.b = a;
- Function.prototype.a = 'Function';
- Object.prototype.a = 'Object';
-
- function Person() {};
- var child = new Person();
- console.log(Person.a);
- console.log(child.a);
- console.log(child.__proto__.__proto__.constructor.constructor.constructor);
- if ([] == false) {console.log(1);};
- if ({} == false ) {console.log(2);};
- if ([]) {console.log(3);};
- if ([1] == [1]) {console.log(4);};
-
-
- function Person(name) {
- this.name = name;
- }
- Person.prototype.print = function () { return this.name; };
- Person('abc');
- const a = new Person('abc').print.call({});
- console.log(a);
- const fn = () => { this.x = 'z'; };
- const b = { x: 'y' };
- fn.call(b);
- console.log(b);
- console.log('begin')
- setTimeout(() => { console.log('setTimeout 1')
- Promise.resolve().then(() => {
- console.log('promise 1')
- setTimeout(() => { console.log('setTimeout2 between promise1&2') })
- }).then(() => {
- console.log('promise 2')
- }) }, 0);
- console.log('end')
给你一个有重复字符串的数组,要求给按照字符串出现的先后顺序给数组中每个字符串加上序号,只出现一次的不用加
[a,ab,abc, b, abc, ab] => [a,ab1,abc1,b,abc2, ab2]
1. `margin: 0 auto`
2. `float`
3. `position: absolute`
4. `flex`
5. `grid`
- var a = {
- b:'b',
- c:function(){
- console.log(this.b)
- }
- }
- a.c()
- var a = {
- b:'b',
- c:()=>{
- console.log(this.b)
- }
- }
- a.c()
- var a = {
- b:'b',
- c:function(){
- console.log(this.b)
- }
- }
- let d = a.c
- d()
- console.log(1);
- setTimeout(() => {
- console.log(2);
- Promise.resolve().then(() => {
- console.log(3)
- });
- });
- new Promise((resolve, reject) => {
- console.log(4)
- resolve()
- }).then(() => {
- console.log(5);
- })
- setTimeout(() => {
- console.log(6);
- })
- console.log(7);
- var func1 = x => x
- var func2 = x => {x}
- var func3 = x => ({x})
- console.log(func1(1))
- console.log(func2(1))
- console.log(func3(1))
- const first = () =>
- new Promise((resovle, reject) => {
- console.log(1)
- const p = new Promise((resovle, reject) => {
- console.log(2)
- setTimeout(() => {
- console.log(3)
- resovle(4)
- }, 0)
- resovle(5)
- })
- resovle(6)
- p.then(arg => {
- console.log(arg)
- })
- })
- first().then(arg => {
- console.log(arg)
- })
- console.log(7)
- sum(1, 2, 3).sumOf(); //6
- sum(2, 3)(2).sumOf(); //7
- sum(1)(2)(3)(4).sumOf(); //10
- sum(2)(4, 1)(2).sumOf(); //9
-
- function sum(){
- let add = [...arguments]
- let addr = function () {
- add.push(...arguments)
- return addr
- }
- addr.sumOf = function() {
- return add.reduce((a,b)=>a+b)
- }
- return addr
- }
-
- console.log(sum(1,2,3).sumOf())
- Array.prototype.myMap = function(fn, thisarg){
- const result = []
- const arr = this
- arr.reduce((pre,cur,i,arr)=>{
- result.push(fn.call(this, cur, i, arr))
- },[])
- return result
- }
-
- let a = [1,2,3,5]
- let b = a.myMap((item)=>{
- if(item > 2) return item
- })
- console.log(b)
-
- A
- A.js
- A.css
- B
- B.js
- B.css
- C
- C.js
- C.css
-
- /a
- A.js
- <link href="a.css" />
- <link href="b.css" />
- <link href="c.css" />
- async function async1() {
- console.log('async1 start');
- await async2();
- console.log('async1 end');
- }
-
- async function async2() {
- console.log('async2 start');
- return new Promise((resolve, reject) => {
- resolve();
- console.log('async2 promise');
- })
- }
-
- console.log('script start');
-
- setTimeout(function() {
- console.log('setTimeout');
- }, 0);
-
- async1();
-
- new Promise(function(resolve) {
- console.log('promise1');
- resolve();
- }).then(function() {
- console.log('promise2');
- }).then(function() {
- console.log('promise3');
- });
-
- console.log('script end')
- function U (){
- this.time = null;
- this.totalTime = 0;
- this.console = function(text){
- if(this.time>=0){
- this.totalTime += this.time;
- setTimeout(()=>{
- console.log(text)
- },this.totalTime)
- }else{
- console.log(text)
- }
- return this
- }
- this.settimeout = function(time){
- this.time = time || 0;
- return this
- }
-
- }
- let u = new U();
- u.console("hello").settimeout(3000).console("world").settimeout(3000).console()
(313)下面代码的输出结果是
- var length = 10;
- function fn() {
- return this.length+1;
- }
-
- var obj = {
- length: 5,
- test1: function() {
- return fn();
- }
- };
-
- obj.test2 = fn;
-
- console.log(obj.test1())
- console.log(fn() === obj.test2())
(314)递归写多叉树的高度
(315)【高频问题】
- // 需要实现的函数
- function repeat (func, times, wait) {},
- // 使下面调用代码能正常工作
- const repeatFunc = repeat(console.log, 4, 3000);
- repeatFunc("helloworld");//会输出4次 helloworld, 每次间隔3秒
本题本质是一个斐波那契数列。(前面有)
(317)讲一件回调的原理, 浏览器捕获到事件并执行的原理(他本来想问事件捕获和事件冒泡)(二面)
(318)如何设定一个常量对象?
(319)用 SDK 开发单页面 SPA 应用, 后端如何即时得知前端发生了页面跳转? 直到他解释了 SDK 是什么,我才弄明白他想问的其实是路由原理,就是 hashchange 和 popstate
(318)假如有一个电商应用,用户在下单的时候需要一个收货地址列表,这个组件你怎么设计?
(319)讲一下keep-alive有哪些使用场景
(320)讲一讲 Object.defineProperty
(321)【高频问题】存储10W个电话号码实现搜索时提醒, 用多叉树解决
(322)环形链表的约瑟夫问题,编号为 1到 n 的 n 个人围成一圈。从编号为 1 的人开始报数,报到 m 的人离开。下一个人继续从 1 开始报数。
n-1轮结束以后,只剩下一个人,问最后留下的这个人编号是多少?(https://www.nowcoder.com/practice/41c399fdb6004b31a6cbb047c641ed8a?tpId=117&tqId=1008767&tab=answerKey)
(323)GET 和 POST 的区别?讲一讲你的项目, 什么场合下使用 GET 什么场合下使用 POST(三面)
(324)让你做一个在线聊天室, 你怎么做
(326)【经典问题】多个有序数组合并
(327)讲讲红黑树是什么
(328)给出一组区间,请合并所有重叠的区间。请保证合并后的区间按区间起点升序排列。(https://www.nowcoder.com/practice/69f4e5b7ad284a478777cb2a17fb5e6a?tpId=117&tqId=691&tab=answerKey)
(329)计网学过啥?计网五层模型(互娱前端一面)
(330)拥塞控制
(331)数据结构?union-find、stack & queue & priority queue & Deque & LRU、 tree、 BST、 RBT、B+、Trie、 k-d tree、hash、hash table、hash map、 sort、冒泡、插入
选择、归并、快排、桶排、堆排、search、BFS、DFS、UCS、 A*、 Backtracking、 tree、Minimal spanning tree、compression、哈夫曼、Min-cut & Max-flow
(332)动画
(333) js基础:类的继承?如何判断一个object的类型?Object.prototype.toString`用来判断类型再合适不过,借用它我们几乎可以判断所有类型的数据:
- function isType(data, type) {
- const typeObj = {
- '[object String]': 'string',
- '[object Number]': 'number',
- '[object Boolean]': 'boolean',
- '[object Null]': 'null',
- '[object Undefined]': 'undefined',
- '[object Object]': 'object',
- '[object Array]': 'array',
- '[object Function]': 'function',
- '[object Date]': 'date', // Object.prototype.toString.call(new Date())
- '[object RegExp]': 'regExp',
- '[object Map]': 'map',
- '[object Set]': 'set',
- '[object HTMLDivElement]': 'dom', // document.querySelector('#app')
- '[object WeakMap]': 'weakMap',
- '[object Window]': 'window', // Object.prototype.toString.call(window)
- '[object Error]': 'error', // new Error('1')
- '[object Arguments]': 'arguments',
- }
- let name = Object.prototype.toString.call(data) // 借用Object.prototype.toString()获取数据类型
- let typeName = typeObj[name] || '未知类型' // 匹配数据类型
- return typeName === type // 判断该数据类型是否为传入的类型
- }
(334)bind`,`apply`,`call`是啥?区别?手写`bind`
(335) 实现一个`bind`方法,用`call`或`apply`来做。
(336)`["1", "2", "3"].map(parseInt)` 代码输出
[['1','2','3'].map(parseInt)的返回值是什么?](https://juejin.cn/post/6844903815171276808)
(337)给个N长度的数字字符串,每次只允许相临左右替换一次,请问怎么样最少替换字数,让整个字符串变成有序的。
(338)了解什么数据结构,知道 B+ 树吗(火山引擎前端一面)
(339)字符串中没有重复字符的子串最大长度(https://www.nowcoder.com/practice/b56799ebfd684fb394bd315e89324fb4?tpId=117&tqId=1008889&tab=answerKey)
(双指针秒了)
(340)n 颗节点的二叉树有多少种形态
(341)了解 Promise 吗,能不能实现一下(前几天刚手写过 Promise,放 github 上了)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。