当前位置: 首页 > news >正文

真实笔试题

文章目录

  • 线程题
  • 树的深度遍历

线程题

实现一个类支持100个线程同时向一个银行账户中存入一元钱.需通过同步机制消除竞态条件,当所有线程执行完成后,账户余额必须精确等于100元

package com.itheima.thread;

public class ShowMeBug {
    private double balance; // 账户余额
    private final Object lock = new Object(); // 锁对象,用于同步

    /**
     * 存款
     *
     * @param money 存入金额
     */
    public void deposit(double money) {
        synchronized (lock) { // 使用同步块确保线程安全
            balance += 1;
        }
    }

    /**
     * 获得账户余额
     */
    public double getBalance() {
        return balance; // 修正:getBalance 不需要参数
    }

    public static void main(String[] args) throws InterruptedException{
        ShowMeBug account = new ShowMeBug();
        int numberOfThreads = 100;
        Thread[] threads = new Thread[numberOfThreads];

         //创建并启动100个线程,每个线程存入1元
        for (int i = 0; i < numberOfThreads; i++) {
            threads[i] = new Thread(() -> {
                account.deposit(1.0);
            });
            threads[i].start();
        }

        // 等待所有线程完成
        for (int i = 0; i < numberOfThreads; i++) {
            threads[i].join();
        }

        // 输出账户余额
        System.out.println("账户余额: " + account.getBalance());
    }
}

树的深度遍历

package com.itheima.tree;

import java.util.*;

public class ShowMeBug {
    static class Node {
        int id;
        int parentId;
        String name;

        public Node(int id, int parentId, String name) {
            this.id = id;
            this.parentId = parentId;
            this.name = name;
        }
    }

    public static void main(String[] args) {
        List<Node> nodeList = Arrays.asList(
                new Node(1, 0, "AA"),
                new Node(2, 1, "BB"),
                new Node(3, 1, "CC"),
                new Node(4, 3, "DD"),
                new Node(5, 3, "EE"),
                new Node(6, 2, "FF"),
                new Node(7, 2, "GG"),
                new Node(8, 4, "HH"),
                new Node(9, 5, "II"),
                new Node(10, 0, "JJ"),
                new Node(11, 10, "KK"),
                new Node(12, 10, "LL"),
                new Node(13, 12, "MM"),
                new Node(14, 13, "NN"),
                new Node(15, 14, "OO")
        );
        print(nodeList);
    }

    public static void print(List<Node> nodeList) {
        // Step 1: 构建父子关系
        Map<Integer, List<Node>> parentToChildren = new HashMap<>();
        for (Node node : nodeList) {
            parentToChildren.computeIfAbsent(node.parentId, k -> new ArrayList<>()).add(node);
        }

        // Step 2: 递归打印树形结构
        printTree(parentToChildren, 0, 0);
    }

    private static void printTree(Map<Integer, List<Node>> parentToChildren, int parentId, int level) {
        // 获取当前父节点的所有子节点
        List<Node> children = parentToChildren.getOrDefault(parentId, Collections.emptyList());

        // 遍历子节点并打印
        for (Node child : children) {
            // 打印缩进(根据层级)
            for (int i = 0; i < level; i++) {
                System.out.print("  "); // 使用两个空格表示缩进
            }
            // 打印节点名称
            System.out.println(child.name);

            // 递归打印子节点的子树
            printTree(parentToChildren, child.id, level + 1);
        }
    }
}
http://www.dtcms.com/a/108922.html

相关文章:

  • Smallworld Geo Network Management(GNM):电力-通信-公共设施GIS平台
  • 树莓派 5 部署 OMV(OpenMediaVault)
  • 解决docker的ubuntu系统中文乱码问题
  • 【HarmonyOS Next之旅】DevEco Studio使用指南(十)
  • 深度学习 Deep Learning 第16章 结构化概率模型
  • STM32单片机入门学习——第10节: [4-2] OLED显示屏
  • 图扑 HT 电缆厂 3D 可视化管控系统深度解析
  • Tmux 核心操作速查指南
  • 解释回溯算法,如何应用回溯算法解决组合优化问题?
  • Android Settings 有线网设置界面优化
  • 基于springboot的考研成绩查询系统(源码+lw+部署文档+讲解),源码可白嫖!
  • 【C++】Cplusplus进阶
  • 2025徘徊与坚守:在传统与变革间寻找自己
  • 启服云专利管理系统:铸就知识产权保护的坚固壁垒
  • 基于YOLOv8的热力图生成与可视化:支持自定义模型与置信度阈值的多维度分析
  • Python第七章08:导入自定义(个性化)模块
  • 程序化广告行业(55/89):DMP与DSP对接及数据统计原理剖析
  • 06-公寓租赁项目-后台管理-公寓管理篇
  • tomcat 屏蔽版本号
  • 2024青少年信息素养大赛 C++智能算法初赛 小学组 全年级 真题答案详细解析
  • Android 搜索蓝牙界面禁止横屏
  • 【计算机网络应用层】
  • 如何根据用户活跃时间调整邮件发送策略?
  • Python爬虫第4节-请求库urllib的request模块使用
  • 自抗扰ADRC之二阶线性扩展状态观测器(LESO)推导
  • 循环神经网络 - 机器学习任务之异步的序列到序列模式
  • # 使用 Dlib 和 OpenCV 实现基于深度学习的人脸检测
  • Linux命令-vmstat
  • 使用 Spring Boot 和 GraalVM 的原生镜像
  • 算法 | 神教优化算法(Divine Religions Algorithm, DRA)原理,公式,应用,算法改进研究综述,matlab代码