【朗致面试】

题目要求

1. 手写一个四向链表结构带泛型

2. 然后写一个函数实现以下功能:

2.1 输入参数int n,生成一个多维四向链表
2.2 每个节点都有四个方向,如果有值就指向他,如果没有,就指向null

这个就是输出结果,可以看得到每个节点的上方向,如果没有就是空

public class ListNode<T> {
    T val;
    ListNode<T> up;
    ListNode<T> down;
    ListNode<T> left;
    ListNode<T> right;
    
    public T getVal() {
        return val;
    }

    public void setVal(T val) {
        this.val = val;
    }

    public ListNode<T> getUp() {
        return up;
    }

    public void setUp(ListNode<T> up) {
        this.up = up;
    }

    public ListNode<T> getDown() {
        return down;
    }

    public void setDown(ListNode<T> down) {
        this.down = down;
    }

    public ListNode<T> getLeft() {
        return left;
    }

    public void setLeft(ListNode<T> left) {
        this.left = left;
    }

    public ListNode<T> getRight() {
        return right;
    }

    public void setRight(ListNode<T> right) {
        this.right = right;
    }
}

public class Array {


    public static ListNode<Integer> generatorArr(int n) {
        if (n <= 0) {
            return null;
        }

        // 创建第一个节点
        ListNode<Integer> head = new ListNode<>();
        head.val = 1;
        // 创建第一维链表
        ListNode<Integer> current = head;
        for (int i = 2; i <= n; i++) {
            ListNode<Integer> newNode = new ListNode<>();
            newNode.setVal(i);
            current.setRight(newNode);
            newNode.setLeft(current);
            current = newNode;
        }
        // 创建剩余维度的链表
        ListNode<Integer> prevRowHead = head;
        ListNode<Integer> prevRowCurrent = prevRowHead;
        for (int row = 2; row <= n; row++) {
            ListNode<Integer> newRowHead = new ListNode<>();
            newRowHead.setVal(row * n + 1);
            prevRowCurrent.setDown(newRowHead);
            newRowHead.setUp(prevRowCurrent);
            current = newRowHead;
            for (int col = 2; col <= n; col++) {
                ListNode<Integer> newNode = new ListNode<>();
                newNode.setVal((row - 1) * n + col);
                current.setRight(newNode);
                newNode.setLeft(current);
                prevRowCurrent = prevRowCurrent.getRight();
                prevRowCurrent.setDown(newNode);
                newNode.setUp(prevRowCurrent);
                current = newNode;
            }

            prevRowHead = newRowHead;
            prevRowCurrent = prevRowHead;
        }

        return head;
    }

	//for test
    public static void main(String[] args) {
        int n = new Random().nextInt(1) + 10;
        System.err.println(n + "维");
        ListNode node = generatorArr(n);
        printListNode(node);
    }

    private static void printListNode(ListNode node) {
        ListNode row = node;
        while (row != null) {
            ListNode cur = row;
            while (cur != null) {
                ListNode down = cur.getDown();
                System.out.print(cur.val + " " + "up node:" + (cur.up == null ? null : cur.up.val) + "   ");
                cur = cur.right;
            }
            System.out.println();
            row = row.down;
        }

    }
}

### 关于集团前端开发者面试的经验与准备技巧 对于参与集团前端开发职位的候选人而言,掌握一系列核心技能和技术知识点至关重要。手写 `Promise` 是常见的考察项目之一,这不仅测试候选人的编码能力,还评估其对 JavaScript 异步编程机制的理解程度[^1]。 #### 技术栈理解 深入理解和熟练运用 HTML、CSS 和 JavaScript 构成的基础技术栈必不可少。特别是 ES6+ 新特性,如箭头函数、解构赋值以及模块化等概念的应用,在现代 Web 应用程序构建过程中占据重要地位。 #### 深入学习异步处理 由于提示提到手写 `Promise` 是重点考查方向,因此建议加强对 Promises/A+ 规范的学习,包括但不限于如何创建自定义 promise 对象、链式调用 `.then()` 方法实现多阶段任务执行流程控制等内容。下面是一个简单的例子来展示如何编写自己的 Promise 实现: ```javascript class MyPromise { constructor(executor) { this.state = 'pending'; this.value = undefined; this.reason = undefined; const resolve = (value) => { if (this.state === 'pending') { this.state = 'fulfilled'; this.value = value; } }; const reject = (reason) => { if (this.state === 'pending') { this.state = 'rejected'; this.reason = reason; } }; try { executor(resolve, reject); } catch(e) { reject(e); } } then(onFulfilled, onRejected) { // 处理逻辑... } } ``` 此代码片段展示了基础版的手动实现过程,实际工作中还需要考虑更多细节和边界情况以满足生产环境需求。 #### 掌握框架/库应用 除了原生 JS 能力外,了解并能灵活使用主流前端框架(React/Vue/Angular)及其生态系统同样关键。这些工具可以帮助快速搭建复杂界面组件,并有效管理状态变化带来的视图更新问题。 #### 解决方案设计思维 具备良好的算法分析能力和数据结构基础知识有助于解决各类性能优化挑战;同时培养面向对象编程(OOP)/函数式编程(FP)思维方式有利于写出更清晰易维护的代码。 #### 测试驱动开发(TDD) 熟悉单元测试的概念及实践方法论,比如 Jasmine 或 Mocha 等工具集,可以在早期发现潜在缺陷从而提高产品质量。 #### 文档撰写与沟通表达 最后但并非最次的是文档记录习惯的重要性——无论是内部 API 注释还是外部用户指南都应做到详尽准确;另外就是口头交流方面的能力也不可忽视,因为团队协作离不开有效的信息传递。
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Ctrl CV选手

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值