华为一面

部门:华为云(专门选了一个有前端业务的部门)
全程55min(问项目和基础13min,代码题给了半个小时来写)。
开始先问了问项目。
这个面试官是做算法的,所以问前端不多。

计网

问题1:网络的七层模型是哪七层?TCP需要哪几层的参与?
答:(在学校学的是五层混合模型,就答五层了)①从上到下:应用层,传输层,网络层,链路层,物理层。②TCP是传输层的协议,传输层及其以下的层次都要参与。

数据结构与算法

问题1:链表用过吗?反转链表怎么做?
答:一般的链表只有指向下一结点的指针,没有指向上一个结点的,所以在反转的过程中需要保存当前结点的上一结点,才能改变指针的指向。这样遍历一遍就可以完成反转。

问题2:从数组中删除一个元素的时间复杂度?
答:O(n)。查找是O(1),因为可以直接通过下标查找。但是如果删除一个元素就需要将后面的元素都往前挪一位,时间复杂度就是O(n)。

问题3:讲一下常见的排序算法(名称和时间复杂度)?JS中提供的排序方法用的是什么算法?(这题扑该了,只熟冒泡,还是得好好补一补排序算法)
答:常见排序算法:①冒泡排序,O(n^2)(双重for循环);②快速排序;③堆排序;等等
JS使用的排序算法:不同浏览器的实现不同,推荐阅读 (9) 深入浅出 JavaScript 的 Array.prototype.sort 排序算法 - SegmentFault 思否

JS

问题1:JS的字典知道吗?列表呢?
答:不知道...(后来一查才知道字典就是对象,列表就是数组,好家伙)

问题2:JS有哪些数据类型?

编程题


可以任选熟悉的语言写,也可以写伪代码,主要看思路。
(面试时是有了思路,但是没写完)
//函数功能:求阶乘
function factorial(n) {
    if (n === 1) {
        return 1;
    } else {
        return n * factorial(n - 1);
    }
}
//函数功能:对1~n这n个整数进行全排列,返回第k个排列(递增的顺序)
function kth_number(n, k) {
    const arr = [];
    for (let i = 1; i <= n; i++) {
        arr.push(i);
    }
    return kth_number_core(arr, k);
}
//函数功能:对输入的数组中的所有数字进行全排列,返回第k个排列(递增的顺序)
function kth_number_core(arr, k) {
    const len = arr.length;
    if (len === 1) {
        return arr[0];
    }
    //seg意为以某一个数字开头的排列有多少个
    const seg = factorial(len - 1);
    //first是要求的排列的第一个数字
    let index = Math.ceil(k / seg) - 1;
    let first = arr[index];
    //serialNumber是目标排列在自己所在的seg中的序号,注意处理目标序列是最后一个的情况
    let serialNumber = k % seg ? k % seg : seg;
    //递归调用求出后面的排列
    arr.splice(index, 1); //删掉被选中的数字
    let str = first.toString();
    return str + kth_number_core(arr, serialNumber);
}
console.log(kth_number(3, 3));
追问:这个算法的时间复杂度?
答:只考虑核心部分(kth_number_core)的话,就只需要考虑递归,大概在O(n)。
#互联网求职##华为##面经#
全部评论
华为云居然还在面试吗
1 回复
分享
发布于 2021-09-30 00:43
消费者bg有前端业务吗?我投的消费者bg...
点赞 回复
分享
发布于 2021-09-29 14:37
滴滴
校招火热招聘中
官网直投
我想问下楼主二面了吗
点赞 回复
分享
发布于 2021-10-09 16:49

相关推荐

3 26 评论
分享
牛客网
牛客企业服务