面试笔记001


<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>

        /*
        给定一个字符串 s ,根据字符出现的 频率 对其进行 降序排序 。一个字符出现的 频率 是它出现在字符串中的次数。
        返回 已排序的字符串 。如果有多个答案,返回其中任何一个。

        示例 1:
            输入: s = "tree"
            输出: "eert"
            解释: 'e'出现两次,'r'和't'都只出现一次。
            因此'e'必须出现在'r'和't'之前。此外,"eetr"也是一个有效的答案。

        示例 2:
            输入: s = "cccaaa"
            输出: "cccaaa"
            解释: 'c'和'a'都出现三次。此外,"aaaccc"也是有效的答案。
            注意"cacaca"是不正确的,因为相同的字母必须放在一起。

        示例 3:
            输入: s = "Aabb"
            输出: "bbAa"
            解释: 此外,"bbaA"也是一个有效的答案,但"Aabb"是不正确的。
            注意'A'和'a'被认为是两种不同的字符。

        提示:
            1 <= s.length <= 5 * 105
            s 由大小写英文字母和数字组成
        */
        // 实现逻辑  统计出现频率>按次数进行排序
       function strFrequencySort(val) {
        const charCount = {};
        // 统计每个字符出现的次数
        for (const char of val) {
            charCount[char] = (charCount[char] || 0) + 1;
        }
        
        // 按照出现次数降序排列字符
        const sortedChars = [...val].sort((a, b) => charCount[b] - charCount[a]);
        
        // 组成新的字符串
        return sortedChars.join('');
        }
        // 测试
        console.log('eert========>',strFrequencySort("tree"));   // 输出 "eert"
        console.log('cccaaa==>>>>>',strFrequencySort("cccaaa")); // 输出 "cccaaa"
        console.log('Aabb=====>',strFrequencySort("Aabb"));   // 输出 "bbAa"


    /*
    给你一个长度为 n 的整数数组,每次操作将会使 n - 1 个元素增加 1 。返回让数组所有元素相等的最小操作次数。
    示例 1:
        输入:nums = [1,2,3]
        输出:3
        解释:
            只需要3次操作(注意每次操作会增加两个元素的值):
            [1,2,3] => [2,3,3] => [3,4,3] => [4,4,4]

    示例 2:
        输入:nums = [1,1,1]
        输出:0


    提示:
        n == nums.length
        1 <= nums.length <= 105
        -109 <= nums[i] <= 109
    答案保证符合 32-bit 整数
    */    
    function minMovesFun(numsArr) {
        const min = Math.min(...numsArr);
        let moves = 0;
            for (const num of numsArr) {
                moves += num - min;
            }
            return moves;
    }

    // 测试
    console.log(minMovesFun([1,2,3])); // 输出 3
    console.log(minMovesFun([1,1,1])); // 输出 0






    /*
    给你一个正整数数组 arr ,请你计算所有可能的奇数长度子数组的和。
    子数组 定义为原数组中的一个连续子序列。
    请你返回 arr 中 所有奇数长度子数组的和 。


    示例 1:
        输入:arr = [1,4,2,5,3]
        输出:58
        解释:所有奇数长度子数组和它们的和为:
        [1] = 1
        [4] = 4
        [2] = 2
        [5] = 5
        [3] = 3
        [1,4,2] = 7
        [4,2,5] = 11
        [2,5,3] = 10
        [1,4,2,5,3] = 15
        我们将所有值求和得到 1 + 4 + 2 + 5 + 3 + 7 + 11 + 10 + 15 = 58

    示例 2:
        输入:arr = [1,2]
        输出:3
        解释:总共只有 2 个长度为奇数的子数组,[1] 和 [2]。它们的和为 3 。

    示例 3:
        输入:arr = [10,11,12]
        输出:66


    提示:
        1 <= arr.length <= 100
        1 <= arr[i] <= 1000

    提交

    */

    //计算了包含每个元素的奇数长度子数组的个数>公式求和
    function subarrays(arr) {
        let result = 0;
        for (let i = 0; i < arr.length; i++) {
            let leftNum = i + 1;
            let rightNum = arr.length - i;
            let totalNum = leftNum * rightNum;
            let oddNum = Math.floor(totalNum / 2);
            result += oddNum * arr[i];
        }
        return result;
    }

    // 测试
    console.log(subarrays([1,4,2,5,3])); // 输出 58
    console.log(subarrays([1,2])); // 输出 3
    console.log(subarrays([10,11,12])); // 输出 66

    </script>
</body>
</html>
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
好的,下面是一些 Spring Boot 面试时可能会涉及的重要知识点和面试建议: 1. 什么是 Spring Boot? Spring Boot 是 Spring 框架的一个子项目,它基于 Spring 框架,简化了 Spring 应用的配置和开发过程,使得开发者可以更加便捷地创建独立、生产级别的 Spring 应用。Spring Boot 提供了自动化配置、开箱即用的组件和快速启动的能力,使得开发者可以更加专注于业务逻辑的实现。 2. Spring Boot 有哪些优点? - 简化了 Spring 应用的配置和开发过程。 - 集成了众多常用的第三方库,可以快速地搭建项目。 - 提供了自动化配置和开箱即用的组件,使得开发者可以更加专注于业务逻辑的实现。 - 与 Spring Framework 完美集成,可以很方便地使用 Spring 的各种功能。 - 支持多种开发方式,包括传统的 WAR 包部署、嵌入式服务器部署、Docker 容器化部署等。 3. Spring Boot 的核心注解有哪些? - @SpringBootApplication:用于标记 Spring Boot 应用的主类,它包含了 @Configuration、@EnableAutoConfiguration 和 @ComponentScan 三个注解,可以简化应用的配置和启动过程。 - @Controller、@Service、@Repository、@Component:用于标记 Spring Bean,可以自动扫描并注册到 Spring 容器中。 - @Autowired、@Resource、@Inject:用于依赖注入,可以自动装配 Spring Bean。 4. Spring Boot 的配置文件有哪些? Spring Boot 支持多种配置文件格式,包括 properties、yml、json 等。其中,application.properties 或 application.yml 是 Spring Boot 默认的配置文件,它可以放在项目的 classpath 下,也可以通过指定 spring.config.location 属性来指定配置文件的路径。 5. Spring Boot 的自动配置原理是什么? Spring Boot 的自动配置基于条件注解和条件判断,它会根据应用的上下文环境和 classpath 中的依赖库来自动配置 Spring Bean。例如,当 classpath 中存在 HikariCP 库时,Spring Boot 会自动配置一个 HikariCP 数据源,而不需要手动配置。 6. Spring Boot 如何处理异常? Spring Boot 提供了统一的异常处理机制,可以通过 @ControllerAdvice 和 @ExceptionHandler 注解来处理应用中的异常。在异常处理类中,可以通过 @ExceptionHandler 注解和方法参数来定义需要处理的异常类型和异常处理逻辑。 7. Spring Boot 如何实现 AOP? Spring Boot 集成了 Spring Framework 的 AOP 功能,可以通过 @Aspect 和 @Around 注解来实现切面编程。在切面类中,可以定义需要拦截的方法和拦截逻辑,以实现日志记录、权限控制等功能。 8. Spring Boot 如何实现事务管理? Spring Boot 集成了 Spring Framework 的事务管理功能,可以通过 @Transactional 注解来实现事务控制。在需要进行事务控制的方法上添加 @Transactional 注解,即可开启事务。 9. Spring Boot 如何集成数据库? Spring Boot 支持多种数据库,包括 MySQL、Oracle、MongoDB 等,可以通过在 pom.xml 中添加相应的依赖库来实现数据库的集成。同时,Spring Boot 也提供了多种数据库访问方式,包括 JDBC、JPA、MyBatis 等,可以根据实际需求选择合适的方式。 10. Spring Boot 如何实现缓存? Spring Boot 集成了多种缓存框架,包括 Ehcache、Redis、Caffeine 等,可以通过在 pom.xml 中添加相应的依赖库来实现缓存功能。同时,Spring Boot 也提供了多种缓存注解,包括 @Cacheable、@CachePut、@CacheEvict 等,可以方便地实现缓存功能。 面试建议: - 对于 Spring Boot 的基本原理和使用方法要有深入了解,并能够熟练使用 Spring Boot 搭建项目。 - 对于 Spring Boot 中常用的注解和配置文件要熟练掌握。 - 对于 Spring Boot 中的高级功能(如自动配置、AOP、事务管理、缓存等)要有一定的了解,并能够根据实际需求进行应用。 - 在面试中要注意表达清楚自己的观点和思路,可以通过实际项目经验来证明自己的能力。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

迷漫啦

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

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

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

打赏作者

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

抵扣说明:

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

余额充值