文档章节

数据库连接池

一贱书生
 一贱书生
发布于 2017/01/23 11:08
字数 519
阅读 17
收藏 0

题目描述

  Web系统通常会频繁地访问数据库,如果每次访问都创建新连接,性能会很差。为了提高性能,架构师决定复用已经创建的连接。当收到请求,并且连接池中没有剩余可用的连接时,系统会创建一个新连接,当请求处理完成时该连接会被放入连接池中,供后续请求使用。 现在提供你处理请求的日志,请你分析一下连接池最多需要创建多少个连接。

1.1 输入描述:

  输入包含多组数据,每组数据第一行包含一个正整数n(1≤n≤1000),表示请求的数量。紧接着n行,每行包含一个请求编号id(A、B、C、……、Z)和操作(connect或disconnect)。

1.2 输出描述:

  对应每一组数据,输出连接池最多需要创建多少个连接。

1.3 输入例子:

6
A connect
A disconnect
B connect
C connect
B disconnect
C disconnect

 

1.4 输出例子:

2

 

2 解题思路

  此题比较简单,详见代码注释。

3 算法实现

import java.util.*;

/**
 * Declaration: All Rights Reserved !!!
 */
public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
//        Scanner scanner = new Scanner(Main.class.getClassLoader().getResourceAsStream("data.txt"));
        while (scanner.hasNext()) {
            int n = scanner.nextInt();
            n *= 2;
            List<String> request = new ArrayList<>(n);

            for (int i = 0; i < n; i++) {
                request.add(scanner.next());
            }
            System.out.println(maxConnection(request));
        }

        scanner.close();
    }

    /**
     * 求最大的连接数
     *
     * @param request 请求操作,两个一组(a, b),a表示连接名称,b表操作内容,connect或者disconnect
     * @return 最大的连接数
     */
    private static int maxConnection(List<String> request) {

        // 记录最大的连接数
        int max = 0;
        // 保存连接数
        Set<String> conn = new HashSet<>(request.size() / 2);

        // 处理每一个连接请求
        for (int i = 0, j = request.size(); i < j; i += 2) {
            String r = request.get(i);
            String o = request.get(i + 1);

            // 如果是连接操作就添加到连接池中
            if ("connect".equals(o)) {
                conn.add(r);

                // 当前连接池中的大小比之前记录到的最大值还要大,就更新最大值
                if (conn.size() > max) {
                    max = conn.size();
                }
            }
            // 删除连接
            else if ("disconnect".equals(o)) {
                conn.remove(r);
            }
        }

        return max;
    }
}

 

4 测试结果

这里写图片描述

5 其它信息

© 著作权归作者所有

上一篇: 网页浏览历史
下一篇: 小世界现象
一贱书生
粉丝 20
博文 724
码字总数 600123
作品 0
私信 提问

暂无文章

可能是国内第一篇全面解读 Java 现状及趋势的文章

作者 | 张晓楠 Dragonwell JDK 最新版本 8.1.1-GA 发布,包括全新特性和更新! 导读:InfoQ 发布《2019 中国 Java 发展趋势报告》,反映 Java 在中国发展的独特性,同时也希望大家对 Java 有...

阿里云官方博客
25分钟前
6
0
Spring Boot 2.x基础教程:Swagger静态文档的生成

前言 通过之前的两篇关于Swagger入门以及具体使用细节的介绍之后,我们已经能够轻松地为Spring MVC的Web项目自动构建出API文档了。如果您还不熟悉这块,可以先阅读: Spring Boot 2.x基础教程...

程序猿DD
29分钟前
4
0
《毅力》读书笔记

1.确信你全身心地投入 2.准备好为目标进行艰难的跋涉 3.通过减少需要使用毅力的情形,为将来的挑战做好准备 4.尽可能具体细致地确定你的目标和实现目标的过程 5.把挑战分解为小而易于管理的小...

lingch
30分钟前
3
0
zk中快速选举FastLeaderElection实现

选举涉及概念 服务器状态 投票 如何选择投票? 协议 选举 如何进行选举? epoch 发送者 接收者 发送队列 接收队列 服务器状态 public enum ServerState { LOOKING,寻找Leader状态,当服务处于...

writeademo
33分钟前
4
0
教你玩转Linux—磁盘管理

Linux磁盘管理好坏直接关系到整个系统的性能问题,Linux磁盘管理常用三个命令为df、du和fdisk。 df df命令参数功能:检查文件系统的磁盘空间占用情况。可以利用该命令来获取硬盘被占用了多少...

Linux就该这么学
36分钟前
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部