暂无图片
暂无图片
1
暂无图片
暂无图片
暂无图片

前端面试题分享

薛定谔的JAVA 2022-02-25
1389

 * 题目01:问题:实现 queryParse 函数,完成解析 URL 参数的功能
* 用法:
* ```js
* const href = 'https://a.b.c?name=abc&age=24&code=%E6%B5%8B%E8%AF%95#main';
* const params = queryParse(href);
* console.log(params); // {name: 'abc', age: 24, ...等 }
* ```
* @param url
* @returns object
* @description https://segmentfault.com/a/1190000018108589
*/
function queryParse(url) {
// ... 这里写代码实现
var myUrl = new URL(url);console.log(myUrl.search);var searchParam = new URLSearchParams(myUrl.search);var map = new Map();map.set('name',searchParam.get('name'));map.set('age',searchParam.get('age'));map.set('code',searchParam.get('code'));console.log(map);}
/**
* 题目02:问题:请实现对二叉树节点的遍历访问函数,并按要求输出log。
* 示例:使得二叉树如下时:
* 输入数据:[1, [2], [3, [4, [5], [6]], [7]]]
* 1
* / \
* 2 3
* / \
* 4 7
* / \
* 5 6
* console.log输出的顺序为:
* 1
* 2
* 3
* 4
* 5
* 6
* 7
*/
/**
* @description 这里只写了中序遍历 , 还有前序和后序在 https://cloud.tencent.com/developer/article/1128038
*/
function binaryTreeAccess(arr) {
// ... 这里写代码实现
function BinaryTree(){
var Node = function(key){
this.key = key;
this.left = null;
this.right = null;
};
var oRoot = null;
var insertNode = function(node,newNode){
if(newNode.key < node.key){
if(node.left === null){
node.left = newNode;
}else{
insertNode(node.left,newNode);
}
}else{
if(node.right === null){
node.right = newNode;
}else{
insertNode(node.right,newNode);
}
}
}
this.insert = function(key){
var newNode = new Node(key);
if(!(oRoot === null)){
insertNode(oRoot,newNode)
}else{
oRoot = newNode;
}
console.log(newNode)
};
// 中序遍历函数封装
var inOrderTraverseNode = function(node,callback){//接收根节点的值和回调函数
if(node !== null){//首先判断,二叉树的当前节点里边有没有内容
inOrderTraverseNode(node.left,callback);//如果该节点左边有分节点(左边有孩子)那么在左孩子的位置基础上,再次调用中序遍历函数,并把当前左孩子的值传给函数。直到找不到左孩子时这个才会停止,函数会一层一层的嵌套。那么,直到最后一层的叶子级别的左孩子,就不会继续调用这个函数了,也就是会遍历到树的最左下角的那个节点了。
//这种在函数身体里边再调用函数自身的方法真的要注意使用!
callback(node.key);//输出当前的值
inOrderTraverseNode(node.right,callback);//再看看这个节点上有没有右节点,如果有,就站在右节点的位置上,再次执行这个函数,那么下次遍历的就会是这个右节点的左孩子是否存在了。
}
}
// 增加遍历的api接口
this.inOrderTraverse = function(callback){//后期调用
inOrderTraverseNode(oRoot,callback);//接口内,调用中序遍历函数,并且传入当前的根节点的值和回调函数。传oRoot是因为要从根节点开始。
}
}
var nodeArr = [7,3,2,1,6,4,5];
var binaryTree = new BinaryTree();
nodeArr.forEach(function(key){
binaryTree.insert(key);
})
var callback = function(key){// 增加遍历的自定义效果的回调函数
console.log(key);//每次遍历后输出当前的遍历值。
};
binaryTree.inOrderTraverse(callback);// 调用封装好的遍历方法api,以实现遍历二叉树的目标。
}
/**
* 题目03:问题:实现一个分组批量执行的任务调度函数 shipTasks,
* 使得任务队列里面的N条任务以每组 3 条异步并发执行,任务先进先出,每个分组依次串行执行
* 注意:(后一组等前一组异步任务执行完之后才执行)
* @description https://juejin.cn/post/6905972276403896334
*/
function mockTaskFn(task) {
// 假设这里做了网络请求
return Promise.resolve({
name: task.name,
data: {
status: 200,
x: Math.random(),
},
});
}


const mockTaskPool = [
{ name: 'task1' },
{ name: 'task2' },
{ name: 'task3' },
{ name: 'task4' },
{ name: 'task5' },
{ name: 'task6' },
{ name: 'task7' },
{ name: 'task8' },
{ name: 'task9' },
{ name: 'task10' },
];


async function shipTasks(tasks, amount = 3) {
// 完成函数实现
for (let i = 0; i < tasks.length; i+=amount) {
Promise.all(tasks.slice(i,i+amount)).then((result) => {
console.log(result) //打印数组['成功了', 'success']
}).catch((error) => {
console.log(error) //不打印
})
}
}


// 输出任务mock返回值数组
const result = await shipTasks(mockTaskPool);

问题三:常见的浏览器内核有哪些?

答案:1.Trident内核: IE,MaxThon,TT,The World,360, 搜狗浏览器等。 [ 又称 MSHTML]

2.Gecko内核: Netscape6 及以上版本, FF,MozillaSuite/SeaMonkey 等

3.Presto内核: Opera7 及以上。       [Opera 内核原为: Presto ,现为: Blink;]

4.Webkit内核: Safari,Chrome 等。    [ Chrome 的: Blink ( WebKit 的分支) ]


问题四:对 [49, 38, 65, 97, 76, 13, 27, 49]进行冒泡排序


输入描述:
无输入


输出描述:
排序后的数组

示例1

输入

 [49, 38, 65, 97, 76, 13, 27, 49]

输出

13,27,38,49,49,65,76,97


答案:function bubbleSort(arr) {

for(let i = 0; i < arr.length; i++) {
for(let j = 0; j < arr.length - 1 - i; j++) {
if(arr[j] > arr[j + 1]) {
let temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
return arr;
}
let arr1 = [49, 38, 65, 97, 76, 13, 27, 49];
let arrSort = bubbleSort(arr1);
console.log(arrSort);


问题五:给定一个数组,求它的最大值/最小值


输入描述:
数组


输出描述:
最大值,最小值

示例1

输入

[3,4,5,6]

输出

6
3

答案:

var arr = readline();

arr = arr.slice(1,arr.length-1);

arr = arr.split(",");

for(var i=1;i<arr.length;i++) {

    for(var j=0; j<arr.length-i; j++){

        if(arr[j]>arr[j+1]){

            var temp = arr[j];

            arr[j] = arr[j+1];

            arr[j+1] = temp;

        }

    }

};

console.log(arr[arr.length-1]);

console.log(arr[0]);


最后修改时间:2022-08-29 15:34:35
文章转载自薛定谔的JAVA,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论