备战2024秋招面试题-查看Linux的进程

前言: \textcolor{Green}{前言:} 前言:

快秋招了,那么这个专栏就专门来记录一下,同时呢整理一下常见面试题
部分题目来自自己的面试题,部分题目来自网络整理

给我冲

  • 学习目标:
  • 面试题:
  • 算法题:
  • 完成?

学习目标:

  • Linux有哪些命令
  • 查看Linux的进程
  • 算法题:排序链表

面试题:

Linux有那些命令?

文件和目录管理:ls、cd、pwd、mkdir、cp、mv、rm、chmod、chown、touch、cat、more、less、ln等。

系统信息查询:date、uptime、uname、whoami、cal、history、top、ps、df、du、free、netstat等。

用户及权限管理:useradd、userdel、passwd、groupadd、groupdel、su、sudo、visudo等。

网络配置和管理:ifconfig、ping、route、nslookup、telnet、ssh、scp、ftp等。

进程和服务管理:service、systemctl、kill、killall、pgrep、pkill等。

磁盘管理:fdisk、mkfs、fsck、mount、umount、dd、parted等。

包管理:apt-get、yum、dpkg、rpm等。

查看linux的进程?

  1. ps 命令
    用来列出系统中的进程。常用的选项包括:
    -e:显示所有进程
    -f:显示完整格式
    -u:uesr 显示某个用户的进程

  2. top
    top 命令用来动态地显示系统中运行的进程信息。按照 CPU 使用率的高低来排序进程,并以交互方式显示。使用该命令可以实时看到进程的CPU占用率、进程名称等信息。

  3. htop
    htop 命令是 top 命令的增强版,提供了更好的用户体验和交互式界面。功能与 top 相似,界面更加丰富,同时可以通过 htop 来杀死一个进程、改变进程的优先级等。

  4. pstree
    pstree 命令 可以通过树状图的形式显示进程间的父子关系。可以更好的帮助我们了解进程间的关系,方便查找进程中的异常或者错误。


算法题:

题目来源: \textcolor{blue}{题目来源: } 题目来源: 148. 排序链表
等级:中等 \textcolor{OrangeRed}{等级:中等} 等级:中等

题目描述

给你链表的头结点 head ,请将其按 升序 排列并返回 排序后的链表

示例 1:
备战2024秋招面试题-查看Linux的进程_第1张图片

输入:head = [4,2,1,3]
输出:[1,2,3,4]

示例 2:
备战2024秋招面试题-查看Linux的进程_第2张图片

输入:head = [-1,5,3,4,0]
输出:[-1,0,3,4,5]

示例 3:

输入:head = []
输出:[]

提示:

  • 链表中节点的数目在范围 [ 0 , 5 ∗ 1 0 4 ] 内 链表中节点的数目在范围 [0, 5 * 10^4] 内 链表中节点的数目在范围[0,5104]
  • − 1 0 5 < = N o d e . v a l < = 1 0 5 -10^5 <= Node.val <= 10^5 105<=Node.val<=105

进阶:你可以在 O(n log n) 时间复杂度和常数级空间复杂度下,对链表进行排序吗?

代码编写

使用归并算法。首先通过快慢指针找到中点,分别排序,最后将两个 list 合并起来

方法1

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode() {}
 *     ListNode(int val) { this.val = val; }
 *     ListNode(int val, ListNode next) { this.val = val; this.next = next; }
 * }
 */
class Solution {
    public ListNode sortList(ListNode head) {
        return sortList(head, null);
    }

    public ListNode sortList(ListNode head, ListNode tail) {
        if (head == null) {
            return head;
        }
        if (head.next == tail) {
            head.next = null;
            return head;
        }
        // 快慢指针找中点
        ListNode slow = head, fast = head;
        while (fast != tail) {
            slow = slow.next;
            fast = fast.next;
            if (fast != tail) {
                fast = fast.next;
            }
        }
        ListNode mid = slow;
        ListNode list1 = sortList(head, mid);
        ListNode list2 = sortList(mid, tail);
        ListNode sorted = merge(list1, list2);
        return sorted;
    }

    public ListNode merge(ListNode list1, ListNode list2) {
        ListNode dummyHead = new ListNode(0);
        ListNode temp = dummyHead, temp1 = list1, temp2 = list2;
        while (temp1 != null && temp2 != null) {
            if (temp1.val <= temp2.val) {
                temp.next = temp1;
                temp1 = temp1.next;
            } else {
                temp.next = temp2;
                temp2 = temp2.next;
            }
            temp = temp.next;
        }
        if (temp1 != null) {
            temp.next = temp1;
        }
        if (temp2 != null) {
            temp.next = temp2;
        }
        return dummyHead.next;
    }
}

完成?

今天结束。之前学习的明白了吗?
  • Linux有哪些命令
  • 查看Linux的进程
  • 算法题:排序链表

你可能感兴趣的:(面试总结-备战秋招,linux,运维,服务器)