面试算法题(shell/日志数据查询统计)

2023-09-12 23:03:42

1,写一个shell脚本,实现mysql日志关键字查询,日志基于时间存放在不同的压缩包中

#!/bin/bash

# 设置 MySQL 日志文件夹路径
log_folder="/path/to/mysql/logs"

# 设置关键字
keyword="your_keyword_here"

# 遍历日志文件夹下的所有压缩包
for logfile in "$log_folder"/*.gz; do
    # 解压缩日志文件
    gunzip -c "$logfile" > /tmp/unzipped_log.log

    # 在解压后的文件中查找关键字
    if grep -q "$keyword" /tmp/unzipped_log.log; then
        echo "关键字 '$keyword' 在文件 '$logfile' 中找到。"
        # 可以在此处添加更多处理逻辑,例如将匹配的行写入输出文件等
    fi

    # 删除临时解压文件
    rm /tmp/unzipped_log.log
done

2, 从9亿个数中找出中位数

import java.util.PriorityQueue;

public class FindMedian {

    public static double findMedian(int[] nums) {
        // 创建两个优先队列,一个最大堆和一个最小堆
        PriorityQueue<Integer> maxHeap = new PriorityQueue<>((a, b) -> b - a);
        PriorityQueue<Integer> minHeap = new PriorityQueue<>();

        for (int num : nums) {
            // 将元素插入最大堆,然后将最大堆中最大的元素移动到最小堆
            maxHeap.offer(num);
            minHeap.offer(maxHeap.poll());

            // 如果最小堆的大小超过最大堆,将最小堆中最小的元素移动到最大堆
            if (minHeap.size() > maxHeap.size()) {
                maxHeap.offer(minHeap.poll());
            }
        }

        // 如果数据量为奇数,中位数在最大堆的根元素
        if (maxHeap.size() > minHeap.size()) {
            return maxHeap.peek();
        } else { // 如果数据量为偶数,中位数为两个堆顶元素的平均值
            return (maxHeap.peek() + minHeap.peek()) / 2.0;
        }
    }

    public static void main(String[] args) {
        int[] nums = {3, 1, 4, 2, 5, 7, 6, 8};
        double median = findMedian(nums);
        System.out.println("中位数为: " + median);
    }
}

3,有10个文件,每个文件1G,每个文件的每一行都是用户的query,每个文件的query都可能重复,要求你按照query的频度排序。

import java.io.*;
import java.util.*;

public class QueryFrequencySorter {
    public static void main(String[] args) throws IOException {
        // 用于存储查询(query)及其频度的映射
        Map<String, Integer> queryFrequencyMap = new HashMap<>();

        // 读取所有文件
        for (int i = 1; i <= 10; i++) {
            String fileName = "file" + i + ".txt";
            BufferedReader reader = new BufferedReader(new FileReader(fileName));
            String line;
            
            while ((line = reader.readLine()) != null) {
                // 分割查询(query),这里假设查询以空格分隔
                String[] queries = line.split(" ");
                
                // 遍历并更新查询(query)的频度
                for (String query : queries) {
                    queryFrequencyMap.put(query, queryFrequencyMap.getOrDefault(query, 0) + 1);
                }
            }
            
            reader.close();
        }

        // 将查询(query)按照频度降序排序
        List<Map.Entry<String, Integer>> sortedQueries = new ArrayList<>(queryFrequencyMap.entrySet());
        sortedQueries.sort((e1, e2) -> e2.getValue().compareTo(e1.getValue()));

        // 打印排序后的查询(query)
        for (Map.Entry<String, Integer> entry : sortedQueries) {
            System.out.println(entry.getKey() + ": " + entry.getValue());
        }
    }
}

更多推荐

Java 21 新特性:Record Patterns

RecordPatterns第一次发布预览是在JDK19、随后又在JDK20中进行了完善。现在,Java21开始正式推出该特性优化。下面我们通过一个例子来理解这个新特性。recordPoint(intx,inty){}staticvoidprintSum(Objectobj){if(objinstanceofPoint

1. 两数之和

目录给定一个整数数组nums和一个整数目标值target,请你在该数组中找出和为目标值target的那两个整数,并返回它们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。你可以按任意顺序返回答案。示例1:输入:nums=[2,7,11,15],target=9输出:[0,1]

【python零基础入门学习】python进阶篇之时间表示方法和异常处理以及linux系统的os模块执行shell命令以及记账程序编写教学(一)

本站以分享各种运维经验和运维所需要的技能为主《python零基础入门》:python零基础入门学习《python运维脚本》:python运维脚本实践《shell》:shell学习《terraform》持续更新中:terraform_Aws学习零基础入门到最佳实战《k8》暂未更新《docker学习》暂未更新《ceph学习

从统计语言模型到预训练语言模型---神经网络语言模型

随着神经网络的发展,神经语言模型(NeuralNetworkLanguageModels,NNLM)展现出了比统计语言模型更强的学习能力,克服了N-gram语言模型的维度灾难,并且大大提升了传统语言模型的性能。神经网络先进的结构使其能有效的建模长距离上下文依赖,以词向量(WordEmbedding)为代表的分布式表示的

Windows 下 MySQL 8.1 图形化界面安装、配置详解

首先我们下载安装包官方下载链接:MySQL::BeginYourDownload网盘链接:https://pan.baidu.com/s/1FOew6-93XpknB-bYDhDYPw提取码:brys外网下载慢的同学可以使用上述网盘链接下载完成后我们双击安装包即可进入安装界面点击next勾选同意协议,点击next这里选

Vulnhub系列靶机-Hackadmeic.RTB1

文章目录Vulnhub系列靶机-Hackadmeic.RTB11.信息收集1.1主机扫描1.2端口扫描1.3目录爆破2.漏洞探测3.漏洞利用3.1反弹Shell4.内核提权Vulnhub系列靶机-Hackadmeic.RTB11.信息收集1.1主机扫描arp-scan-l1.2端口扫描nmap-A-p-192.168.

shell练习(grep,sed,awk,距离生日天数的计算,累加求和,文件操作和文本操作)

最近在学习shell脚本编写,把几个练习记录一下。包括grep,sed,awk,距离生日天数的计算,累加求和,文件操作和文本操作。grep相关练习找到/huiluczp下含有星号的文件与内容,主要是利用find来找到所有待查的文件作为参数给grep。echo'找到/huiluczp下含有星号的文件与内容'grep'\*

网络安全(黑客)自学

目录:一、什么是网络安全二、怎样规划网络安全三、网络安全的知识多而杂,怎么科学合理安排?1、基础阶段2、渗透阶段3、安全管理(提升)这一阶段主要针对已经从事网络安全相关工作需要提升进阶成管理层的岗位。如果你只学习参加工程师方面的岗位,这一阶段可学可不学。4、提升阶段(提升)1、Web安全相关概念(2周)2、熟悉渗透相关

vue3+element-plus权限控制实现(el-tree父子级不关联情况处理)

文章目录前言一、遇到的交互场景el-tree中check-strictly属性二、处理父级的半选中以及选中交互el-treecheck,check-change事件编辑进来,父级的半选状态处理总结前言在开发后台管理系统的时候,用户的权限控制是一个常见的需求。这里需要探讨下按钮的级别的权限控制,以及实现中使用elemen

【深度学习】树莓派Zero w深度学习模型Python推理

在机器学习开发过程中,当模型训练好后,接下来就要进行模型推理了,根据部署环境可分为三类场景:边缘计算:一般指手机,嵌入式设备,直接在数据生成的设备上进行推理,因为能避免将采集到的数据上传到云端,所以实时性非常好。端计算:介于云和边缘设备之间的计算平台,个人PC可以归为这一类。云计算:指云计算平台,具有强大的计算和存储能

Redis 持久化之 RDB 与 AOF 详解

Redis持久化我们知道Redis的数据是全部存储在内存中的,如果机器突然GG,那么数据就会全部丢失,因此需要有持久化机制来保证数据不会因为宕机而丢失。Redis为我们提供了两种持久化方案,一种是基于快照,另外一种是基于AOF日志。接下来就来了解一下这两种方案。操作系统与磁盘首先我们需要知道Redis数据库在持久化中扮

热文推荐