面经-2022-秋招-华为二面


算法题

题目:给定一个数组,里面有6个整数,求这个数组能够表示的最大24进制的时间是多少,输出这个时间,无法表示输出invalid。

输入描述:输入为一个整数数组,数组内有六个整数。输入数组长度为6,不需要考虑其它长度,元素值为0或者正整数,6个数字每个数字只能使用一次。
输出描述:输出为一个24进制格式的时间,或者字符串"invalid"。
备注: 输出时间格式为xx:xx:xx格式。

示例1

输入[0,2,3,0,5,6]
输出 23:56:00

示例2

输入[9,9,9,9,9,9]
输出invalid

思路

解题思路:

  1. 遍历所有可能的排列组合。
  2. 对于每一种排列,判断是否满足24小时制的时间格式。
  3. 在满足条件的排列中,找到最大的时间。
import java.util.Arrays;

public class Max24HourTime {
    
    public static void main(String[] args) {
        int[] input1 = {0, 2, 3, 0, 5, 6};
        int[] input2 = {9, 9, 9, 9, 9, 9};

        String output1 = getMaxTime(input1);
        String output2 = getMaxTime(input2);

        System.out.println(output1);  // 输出 23:56:00
        System.out.println(output2);  // 输出 invalid
    }

    public static String getMaxTime(int[] arr) {
        Arrays.sort(arr);

        int[] time = new int[6];
        String result = "invalid";

        do {
            int hour = arr[0] * 10 + arr[1];
            int minute = arr[2] * 10 + arr[3];
            int second = arr[4] * 10 + arr[5];

            if (isValidTime(hour, minute, second)) {
                result = String.format("%02d:%02d:%02d", hour, minute, second);
            }
        } while (nextPermutation(arr));

        return result;
    }

    private static boolean isValidTime(int hour, int minute, int second) {
        return hour >= 0 && hour <= 23 && minute >= 0 && minute <= 59 && second >= 0 && second <= 59;
    }

    private static boolean nextPermutation(int[] arr) {
        int i = arr.length - 2;
        while (i >= 0 && arr[i] >= arr[i + 1]) {
            i--;
        }

        if (i >= 0) {
            int j = arr.length - 1;
            while (arr[j] <= arr[i]) {
                j--;
            }

            swap(arr, i, j);
        } else {
            return false;
        }

        reverse(arr, i + 1, arr.length - 1);

        return true;
    }

    private static void swap(int[] arr, int i, int j) {
        int temp = arr[i];
        arr[i] = arr[j];
        arr[j] = temp;
    }

    private static void reverse(int[] arr, int start, int end) {
        while (start < end) {
            swap(arr, start, end);
            start++;
            end--;
        }
    }
}

getMaxTime 方法首先对输入数组进行排序,然后使用全排列的方式尝试所有可能的组合。

在每个组合中,将数组的前两个元素表示小时,中间两个元素表示分钟,后两个元素表示秒。

通过 isValidTime 方法检查是否为合法的时间。最终返回最大的合法时间。

介绍知识产权(发明专利、实用新型专利、软件著作权),如何产出,团队构成和个人角色。

如何产出知识产权:

  1. 创新和发现: 首要任务是通过创新和研究产生新的、独特的成果。这可能包括新的技术、产品、方法、设计等。

  2. 文档和记录: 对创新成果进行详细的文档记录,包括技术规范、实验结果、设计文稿等。保持详细的记录是后续知识产权保护的关键。

  3. 评估和验证: 对创新成果进行评估,确保其具备创新性、实用性和可行性。这可能涉及到技术评审、市场调研等。

  4. 知识产权保护:

    • 发明专利: 如果创新涉及发明性的技术解决方案,可以考虑申请发明专利。这需要编写专利申请文件,通常由专利律师或专利代理人协助完成。
    • 实用新型专利: 对于某些简单的、具有实用新型的技术创新,可以选择申请实用新型专利。
    • 软件著作权: 对于软件代码的创新,可以通过版权保护来保护源代码和目标代码。

团队构成:

  1. 发明团队(Innovation Team): 负责创新和发现新技术、产品或方法的团队。

    • 角色: 包括研究员、工程师、科学家等。
  2. 知识产权团队(IP Team): 负责知识产权保护和管理的专业团队。

    • 角色: 包括专利律师、专利代理人、知识产权经理等。
  3. 市场调研团队(Market Research Team): 负责评估市场需求和竞争情况。

    • 角色: 市场分析师、商业发展专员等。

个人角色:

  1. 发明人(Inventor): 创造性地提出新的技术解决方案,是知识产权产出过程中的核心。

  2. 研究员/工程师/科学家: 参与创新过程,提供专业的技术支持和实验数据。

  3. 专利律师/代理人: 协助编写和递交专利申请文件,提供法律保护的专业建议。

  4. 知识产权经理: 负责整体知识产权战略,协调知识产权团队的工作,确保知识产权的有效管理。

  5. 市场分析师/商业发展专员: 参与评估市场需求和商业机会,为公司的知识产权决策提供信息支持。

  6. 项目经理: 协调各个团队的工作,确保整个知识产权产出过程的顺利进行。

大学四年的规划、经历和职业规划

大学主要还是靠自己自学过来的,当然每个阶段都有不同的规划。

初入大一:

  1. 学业优先: 着重适应大学学习环境,培养良好的学术习惯,确保学业基础。
  2. 社团和组织: 参与一些兴趣社团、学生组织或志愿者活动,拓展社交圈。
  3. 实习: 寻找暑期实习机会,了解实际工作环境,建立职场意识。

步入大二:

  1. 专业方向: 确定自己的专业方向,选择相关的课程和实践项目。
  2. 技能培养: 学习和提升与专业相关的技能,如编程、设计、沟通等。
  3. 实习和兼职: 继续寻找实习和兼职机会,积累实际经验。

成熟大三:

  1. 深度学习: 在专业领域深入学习,可能选择参与科研项目或实际项目。
  2. 实习经验: 争取更有挑战性的实习,锻炼自己的实际操作能力。

老油条大四:

  1. 毕业论文/项目: 投入毕业论文或项目,为未来职业方向提前做准备。
  2. 职业规划: 确立自己的职业规划,了解行业趋势,制定求职计划。

实习过程中遇到的技术难点、亮点

技术难点:

  1. 性能优化: 处理大规模数据、复杂页面结构等情况下的性能优化等。优化网络请求、提升渲染性能、懒加载等技术。
  2. 跨平台兼容性: 不同浏览器、设备和平台的兼容性问题可能需要解决。确保在各种环境中良好运行,尤其是移动端和桌面端的兼容性。
  3. 前端安全性: 处理前端安全问题,包括防止 XSS(跨站脚本攻击)、CSRF(跨站请求伪造)等安全漏洞。
  4. 前端工程化: 使用现代前端工程化工具,如Webpack、Babel等,配置和优化构建过程,管理前端依赖,确保项目的可维护性和扩展性。

技术亮点:

  1. 前沿技术应用: 在项目中使用了一些前沿的技术,如WebAssembly、Service Workers、Web Components等,提升了应用的性能和体验。
  2. 用户体验优化: 利用前端技术改善用户体验,包括页面加载速度的优化、动画效果的运用、无感知加载等。
  3. 模块化和组件化: 使用模块化和组件化的开发方式,提高代码的可维护性和可复用性。
  4. 技术分享和团队合作: 积极分享学习成果,与团队成员共同解决技术难题,提高整个团队的水平。

反问环节、业务介绍

技术栈和业务

作者:前端LeBron
链接:https://juejin.cn/post/7025793782998106149


文章作者: 千羽
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 千羽 !
评论
  目录