Java笔试03

线性结构是指数据元素之间存在一对一的线性关系的数据结构。

  • 不属于线性结构。树是由节点组成的层次结构,每个节点可以有多于两个的子节点。

队列

  • 属于线性结构。队列是一种先进先出(FIFO)的数据结构,元素之间存在一对一的线性关系。

  • 不属于线性结构。图是由顶点和边组成的,可以表示多对多的关系。

线性表

  • 属于线性结构。线性表是一种线性数据结构,其中数据元素之间存在一对一的线性关系。

  • 属于线性结构。栈是一种后进先出(LIFO)的数据结构,元素之间存在一对一的线性关系。

在文件系统管理中:

  • 扇区是磁盘存储的最小物理单位
  • 页面通常是指内存管理中的单位
  • 簇(也称为分配单元或磁盘块)是文件系统在磁盘上分配空间的最小单位。文件系统将磁盘分成许多簇,文件和目录存储在这些簇中。
  • 文件是文件系统中存储数据的对象

DNS:

DNS(域名系统)的主要功能就是将域名转换为IP地址,以及将IP地址转换为域名。

DNS的缓存时间并不是固定的,它由多个因素决定,包括DNS记录的生存时间(TTL)和本地系统的缓存策略。缓存时间可以是几分钟到几天不等。

DNS协议通常使用UDP或TCP的53号端口。

DNS查询通常使用UDP协议,因为它速度快,适合简短的查询和响应。然而,对于需要传输大量数据的情况,如区域传送(zone transfer),DNS可以使用TCP协议。

在Linux上,当创建子进程时(例如使用fork()系统调用),子进程会继承父进程的以下资源:

  • 子进程会继承父进程所有已经打开的文件描述符。
  • 子进程会继承父进程的地址空间,这意味着它有一份父进程数据的副本。
  • 子进程会继承父进程的信号掩码。
  • 共享内存区域并不是自动继承的。如果父进程创建了共享内存区域,子进程不会自动继承这部分共享内存。需要显式地进行附加(attach)操作。

递归调用通常使用堆栈(Stack)这种数据结构来执行。每当一个函数递归调用自身时,一个新的参数和局部变量的集合被推送到堆栈上。当递归调用返回时,当前的堆栈帧被弹出,返回到上一个堆栈帧,直到达到基本情况。
简单来说:堆栈用来执行递归调用

算法:包裹分类

小美在美团外卖工作,负责处理包裹的分类。每个包裹都有一个唯一的标识符(ID),ID由一串字母和数字组成。你需要根据包裹的ID来判断它属于哪一类。
分类规则如下:

如果ID以字母开头,并且字母后面的字符全是数字,则属于“standard”。
如果ID以数字开头,并且数字后面的字符全是字母,则属于“special”。
如果ID以字母开头,并且字母后面的字符同时包含字母和数字,则属于“mix”。
其他情况的ID都属于“invalid"。
请你帮助小美完成任务,输入包裹id,输出对应的哪一类。
时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 256M,其他语言512M
输入描述:
第一行包含一个整数,表示有n个包裹。
接下来的n行,每行是一个包裹的ID,保证字符串长度>=2


输出描述:
对于每个包裹的ID,输出其所属的类别。
示例1
输入例子:
5
A123
1ABC
A1B2C3
123ABC
A!23
输出例子:
standard
special
mix
invalid
invalid
import java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String p1="^[A-Za-z]\\d+$";
        String p2="^\\d[A-Za-z]*$";
        String p3="^[A-Za-z](?=.*[A-Za-z])(?=.*\\d)[A-Za-z\\d]*$";
        int n=sc.nextInt();
        sc.nextLine();
        for(int i=0;i

以上使用的正则表达式来实现的。

其中:^[A-Za-z]\d+$

  1. ^:这是一个脱字符,它指定了正则表达式匹配的起始位置。在字符串的上下文中,^ 表示匹配字符串的开始。
  2. [A-Za-z]:这是一个字符类,它匹配任何一个字母,包括大写字母 AZ 和小写字母 az。方括号内的字符范围表示匹配这个范围内的任意单个字符。
  3. \d:这是一个转义序列,\d 表示匹配任何一个数字,相当于 [0-9],即匹配数字 0 到 9 中的任意一个。
  4. +:这是一个量词,表示前面的元素(在本例中是 \d)出现一次或多次。所以 \d+ 匹配一个或多个连续的数字。
  5. $:这是一个脱字符,它指定了正则表达式匹配的结束位置。在字符串的上下文中,$ 表示匹配字符串的结束。

^\d[A-Za-z]*$

  1. ^:脱字符,表示匹配字符串的开始位置。
  2. \d:转义序列,表示匹配任意一个数字(等价于 [0-9])。
  3. [A-Za-z]*:字符类加上星号(*)作为量词,表示匹配任意数量的字母(包括零个)。这里的字母包括所有的小写字母(az)和所有的大写字母(AZ)。
  4. $:脱字符,表示匹配字符串的结束位置。

^[A-Za-z](?=.*[A-Za-z])(?=.*\\d)[A-Za-z\\d]*$

  1. ^:脱字符,表示匹配字符串的开始位置。
  2. [A-Za-z]:字符类,匹配任意单个字母(大小写不限)。
  3. (?=.*[A-Za-z]):正向前瞻,用于确保字符串中至少包含一个字母。这个前瞻不会消耗任何字符,它只是向前查看字符串,以确保某个条件为真。这里的条件是字符串中至少还有一个字母。
  4. (?=.*\d):另一个正向前瞻,用于确保字符串中至少包含一个数字。同样,这个前瞻不会消耗任何字符,它只是向前查看字符串,以确保某个条件为真。
  5. [A-Za-z\d]*:字符类,匹配任意数量的字母或数字(包括零个)。这里的字符集包括了所有的大小写字母和数字。
  6. $:脱字符,表示匹配字符串的结束位置。

正则表达式基本元素与构造:

普通字符:字母a到z、数字0到9以及标点符号都是普通字符。它们在正则表达式中表示它们自己。

特殊字符:有一些字符具有特殊含义,如. * ? [ ] ( ) { } ^ $ | \等。

点号(.):匹配任意单个字符(除了换行符)。

星号(*):表示前面的元素可以出现零次或多次。例如,a*匹配零个或多个'a'。

加号(+):表示前面的元素至少出现一次。例如,a+匹配一个或多个'a'。

问号(?):表示前面的元素可以出现零次或一次。例如,a?匹配零个或一个'a'。

方括号([]):匹配括号内的任意一个字符。例如,[abc]匹配'a'、'b'或'c'。

反斜杠(\):用作转义字符,去除特殊字符的特殊含义,或表示特殊序列。

圆括号(()):定义一个组,可以对匹配的字符串进行操作,如提取。

花括号({}):指定前面元素的出现次数。例如,a{3}匹配三个'a',a{2,}匹配两个或更多个'a'。

竖线(|):表示逻辑“或”。例如,cat|dog匹配“cat”或“dog”。

脱字符(^):在方括号内使用时,表示非。例如,[^abc]匹配除了'a'、'b'、'c'之外的任意字符。在圆括号内使用时,表示行的开始。

美元符号($):表示字符串的结束。

点星(.*):是一个危险的组合,因为它可以匹配任意长度的任意字符,包括零个字符。这可能会导致无限循环。

正向前瞻((?=...)):正向肯定查找,表示匹配某个字符串之后的内容,但不对这部分字符串进行消费。

负向前瞻((?!...)):正向否定查找,表示匹配不是紧跟着某个字符串的内容。

 

Java笔试03

祝自己,一路前行,不负韶华,前途无量。

版权声明:如无特殊标注,文章均来自网络,本站编辑整理,转载时请以链接形式注明文章出处,请自行分辨。

本文链接:https://www.shbk5.com/dnsj/74897.html