【Java】点滴含海 —— 用小小的题学Java后端基础知识

  1. 对于int *pa[5] ;的描述,正确的是:pa是一个具有5个元素的指针数组,每个元素是一个int型指针

  2. IPV4中,数据包传播方式包括:单播 组播 广播

  3. 有关友元函数的描述:友元函数是独立于当前类的外部函数(C++,因为是 C++ ,深入了解得不偿失)

  4. 软件工程是一种 自顶下下 分阶段实现的软件工程开发的方法。

  • 因为 软件工程 自顶向下, 所以我写算法题,都是先把小方法提取出来,只写返回值。然后回到主方法里,去写好大致框架,然后最后再补充好小方法 。
  • 因为软件工程自顶向下, 所以也体现了架构师的重要性。先设计好系统结构,再填充细节,防止因为重复的重构导致时间的浪费。
  1. inux操作系统中有如下文件结构:
    $HOME/aaa
    $HOME/aaa/bb/a.txt
    $HOME/aaa/my.c
    如果要删除aaa文件夹,需要执行的操作是:
rm –rf $HOME/aaa

rm 和 rmdir 都是 linux 中删除文件的命令。但是 rmdir 不能删除不为空的文件夹。 因此,为了删除不空的文件夹,使用 rm -rf 这种形式强制执行。

  1. float型数据直接做相等判断有风险,为什么

在计算机中,float 浮点数的表示基于二进制科学计数法的近似值。因为计算机需要在有限的位数内存储浮点数,因此很多浮点数不能被准确地表示。这样可能会导致浮点数之间的比较出现意外的结果,例如两个看起来相等的浮点数在计算机内部表示时有微小的差异,从而导致它们在程序中不被视为相等。

例如,假设有两个浮点数a和b,其实际值分别为0.1和0.2。然而,由于二进制表示的精度限制,计算机可能会将它们表示成0.09999999999999998和0.20000000000000001,因为这些值是更接近实际值的最佳表示。

解决该问题的一种常见方法是使用浮点数的“容差”(tolerance)进行比较,如果两个浮点数之间的差异小于某个特定的容差值,则将其视为相等。

  1. Union 和 Union All 的区别
  • Union : 对两个结果集进行并集操作,不包括重复行,同时进行默认规则的排序;
  • Union All:对两个结果集进行并集操作,包括重复行,不进行排序;
  1. Java 中的类只可继承一个类(即只可以具有一个父类),但是其可实现多个接口
  2. Java 8 之后对接口的改动
  • 默认方法(Default Methods):Java 8 之后接口可以包含具有默认实现的方法。默认方法可以通过接口本身或继承该接口的实例进行调用

  • 静态方法(Static Methods):ava 8 之后接口可以包含静态方法

  • Java 8 引入的函数式编程,使得接口调用操作更方便,尤其是对于大数组

public interface Test {
    // 接口里面的变量必须初始化,且默认是 public static final  类型
    public static final int a1 = 0;
    int a = 0;
    // jak 1.8 以及以后, 接口中可以含有有方法体的方法, 用 defaulit 关键字修饰即可(或者是 静态方法), 实现类直接得到此方法
    default void testMethod(){
        System.out.println("测试是否可以有方法体");
    }
    static void testMethod2(){
        System.out.println("测试静态方法");
    }
}
  1. 函数的实参和形参可以是相同的名字 , 实参是给方法传入的实际参数,

  2. 在C语言中,一个函数一般由两个部分组成,它们是函数首部和函数体。
    除了函数体,就是被大括号圈出的部分之外,都是函数首部

  3. 错排问题 —— 不理解

int GetCuoPaiNum(int N){
	if(N==1)
		return 0;
	if(N==2)
		return 1;
	else
	return (N-1)*(GetCuoPaiNum(N-1)+GetCuoPaiNum(N-2));

}
  1. 策略模式

策略模式是一种软件设计模式,它允许在运行时根据不同的情境选择一种特定的算法或行为。
具体而言,策略模式包含一个抽象策略类和多个具体策略类,每个具体策略类实现了抽象策略类定义的算法接口,可以相互替换使用。
在应用时,客户端可以选择合适的具体策略类进行使用,从而实现针对不同情境的灵活算法选择和切换,提高系统的可扩展性和可维护性。

  1. 责任链模式

责任链模式是一种行为设计模式,它允许将请求沿着处理对象链传递,直到有一个对象能够处理它为止。责任链模式通常用于需要在运行时动态确定处理请求的对象集合并且每个请求只能由一个对象处理的情况。

在责任链模式中,处理对象形成一个链条,每个对象都有一个指向下一个处理对象的引用。当一个请求进入链条时,它从链条的开头开始传递,每个对象判断自己是否能够处理该请求。如果可以处理,则立即处理并返回结果;否则将请求传递给下一个对象。

责任链模式的优点在于它允许系统易于扩展和修改,因为不需要修改现有代码即可添加新的处理对象。缺点是责任链可能会变得很长,从而降低了性能和可维护性。

  1. 访问者模式

访问者模式是一种行为型设计模式,它允许在不改变对象结构的情况下定义新操作。该模式涉及两个主要组件:元素和访问者。元素是具有接受访问者的方法的对象,而访问者则定义了要执行的操作。使用访问者模式可以使程序更加灵活和可扩展,因为您可以轻松添加新操作而无需更改现有代码。

  1. Linux 中权限 664 的文件

Linux 权限 664 的文件允许同组用户读取和写入,但不允许执行该文件。这意味着同一组中的用户可以访问该文件并进行更改,但不能运行该文件。

Linux 文件的常用权限码有三个数字,分别表示文件所有者、用户组和其他人对该文件的读写执行权限。

  • 第一个数字是文件所有者的权限
  • 第二个数字是文件所属用户组的权限
  • 第三个数字是其他人的权限

这些数字的组合方式如下所示:

  • 0 无权限
  • 1 执行
  • 2 写入
  • 3 写入/执行
  • 4 读取
  • 5 读取/执行
  • 6 读取/写入
  • 7 读取/写入/执行
  1. 字符串的三种存储方式
    Java字符串具有三种存储方式 ——
    字符串常量池 (String Pool):Java中用于缓存字符串的一种机制。在字符串常量池中,如果存在一个字符串字面量与要创建的字符串字面量内容相同,则会将该字符串从常量池引用返回。如果不存在,则先在常量池中创建该字符串再返回引用。
    堆(heap)中的字符串对象:除了字符串常量池之外,Java还允许字符串在堆上动态地分配内存空间并存储。在这种情况下,每次创建新字符串都会在堆上生成一个新对象。
    当使用 new 关键字创建一个字符串对象时,Java会在堆中创建一个新的字符串对象,并将常量池中的字符串值复制到堆中的对象中。这样可以确保字符串对象的引用指向堆中的字符串对象,从而可以对其进行修改和垃圾回收。
    栈(stack)中的字符串:在Java中,字符串也可以存储在栈中。这通常发生在使用new操作符创建字符串时,或者在方法调用期间传递字符串参数时。
    对比这三种:其中,字符串常量池是最常用的存储字符串的方式,因为它具有很高的效率和节省内存的特点。而堆中的字符串对象更加灵活,可以动态地生成和修改字符串。栈中的字符串则通常用于性能优化,因为它们不需要像堆中的字符串那样进行垃圾回收。
  2. Linux磁盘管理命令
  • df -h :显示文件系统磁盘空间使用情况
  • du -sh: 显示目录或文件的大小
  • fdisk:分区表管理器
  • mkfs:创建文件系统
  • mount:挂载一个文件系统到指定的目录
  • umount:卸载一个文件系统
  • dd:用来复制和转换文件,可用于制作启动盘等操作
  • lsblk:列出系统中所有块设备的信息
  • parted:分区管理器,更加友好易用。
  • lvm: 逻辑卷管理工具、可以扩容缩容卷组和逻辑卷。
  1. 页抖动

页抖动是在内存中的页面交换过程中发生的。它通常发生在内存空间不足且需要频繁地将页面从内存中调出到磁盘或者从磁盘中调入到内存的情况下。当某些页面被频繁调用但又不断在内存和磁盘之间交换时,就会导致页抖动现象。

容易发生页抖动问题的是那些工作集(working set)大小超出了物理内存容量的进程所使用的页面。当系统试图通过置换算法将需要的页面调入内存时,即使仅有一小部分的页面不在内存中,也会导致频繁的页面置换,从而造成页抖动问题。

  1. 使用 UDP 的应用层协议
  • 基于用户数据报协议(UDP)的域名系统(DNS)
  • 简单网络管理协议(SNMP)
  • 日志传输协议(Syslog)
  • 安全套接字层(SSL)通讯协议(DTLS)
  • TFTP(简单文件传输协议)
  • 实时传输协议(RTP)
  • 实时流控制协议(RTCP)
  • 组播传输协议(IGMP)
  • Trivial File Transfer Protocol (TFTP)
  1. 常见的使用TCP协议的应用层协议有
  • HTTP(Hyper Text Transfer Protocol),用于 Web 浏览器和 Web 服务器之间的通信。
  • FTP(File Transfer Protocol),用于文件传输。
  • SMTP(Simple Mail Transfer Protocol),用于电子邮件的传输。
  • Telnet,用于远程登录到另一个计算机上。
  • SSH(Secure Shell),也用于远程登录到另一个计算机上,但比Telnet更加安全。
  • POP(Post Office Protocol),用于接收电子邮件。
  • IMAP(Internet Message Access Protocol),也用于接收电子邮件,与POP相比更加强大。
  • DNS(Domain Name System),用于将域名解析为 IP 地址。
    还有其他许多使用TCP协议的应用层协议,但以上是最常见的几个。
  1. AMD 中断

在AMD处理器中,中断是通过外部设备发送一个中断信号来触发的。当一个外部设备需要CPU的注意时,它会向CPU发送一个中断请求信号(IRQ),CPU收到信号后会停下正在执行的指令,并跳转到相应的中断服务程序中去处理该中断。在处理完中断后,CPU会返回原来被打断的指令继续执行。

  1. linux操作系统中,修改用户密码的命令: passwd

以下是Linux系统中与密码相关的一些常用命令:

  • passwd:用于更改当前用户的密码。
  • chpasswd:用于批量更改多个用户的密码,可以从文件或标准输入读取用户名和密码信息。
  • useradd:用于创建新用户账户。
  • usermod:用于修改现有用户账户的属性,包括密码。
  • userdel:用于删除用户账户。
  • chage:用于设置用户的密码过期日期,以及强制用户在下次登录时更改密码。
  • sudo:允许指定用户以另一个用户身份运行命令,通常用于
  1. group by
    在select子句中只能有两种类型表达式,一种是合计函数,一种是出现在group by子句后面的列名,没有出现在group by子句后面的列名不可以出现在select 子句的非合计函数表达式中。如果在select语句中没有出现group by子句,则不能在select子句中同时出现单个列名和合计函数的混合现象。如果要限制分组中的数据,则可以使用having子句而不能使用where子句。

  2. Java中实现了Collection接口的类有以下几个:
    ArrayList
    LinkedList
    HashSet
    LinkedHashSet
    TreeSet
    PriorityQueue
    ArrayDeque
    PriorityQueue
    另外,还有一些较为特殊的集合类,它们也实现了Collection接口 ——
    EnumSet
    CopyOnWriteArrayList
    ConcurrentLinkedQueue
    ConcurrentSkipListSet
    DelayQueue
    LinkedBlockingDeque
    LinkedTransferQueue
    PriorityBlockingQueue

  3. 32 位系统中,int 类型占字节数
    在32位操作系统中,int类型通常占据4个字节。这是因为在32位体系结构中,内存地址总线和CPU寄存器均为32位,所以一个整型变量需要4个字节的空间来存储。该空间能够存储32位二进制数(包括符号位),可以表示 2^32 种不同的值。如果采用不同的数据类型,如short或long,则需要不同数量的字节来存储相同数量的位。

  4. Linux文件权限

在 Linux 中,文件权限用 10 个字符来表示,第一个字符表示文件类型,剩下 9 个字符分为三组,每组三个字符分别代表文件所有者、文件所属组和其他用户对文件的权限。

文件类型:

  • “-” 表示普通文件;
  • “d” 表示目录;
  • “l” 表示软链接;
  • “b” 表示块设备文件;
  • “c” 表示字符设备文件;
  • “p” 表示管道文件;
  • “s” 表示套接字文件。

文件权限:

  • “r” 表示可读;
  • “w” 表示可写;
  • “x” 表示可执行;
  • “-” 表示没有权限。

文件所有者权限:

  • 第一组三个字符表示文件所有者的权限;例如,“-rw-r–r–” 表示文件所有者拥有可读可写的权限,其他用户只能读。
  • 第一个字符为 “r”、“w” 或 “x” 表示文件所有者的读、写、执行权限;
  • 第二个字符为 “r”、“w” 或 “x” 表示文件所属组的读、写、执行权限;
  • 第三个字符为 “r”、“w” 或 “x” 表示其他用户的读、写、执行权限。

例如,“-rw-r–r–” 表示普通文件,文件所有者可读可写,文件所属组只有可读权限,其他用户只有可读权限。

  1. C源程序经编译形成的二进制代码需要经历 编译、 汇编 、 链接 , 最后形成 exec 可执行文件才能运行
  2. 子类可以访问父类的共有成员 , 私有成员 , 就是不能访问父类的 保护成员 。
  3. 折半插入排序 时间复杂度 为 n 的平方 (插入时对已经有序的序列进行二分找到待插入位置)
  4. 参与死锁的进程至少有两个已经占有资源
  5. 使用取余数 % 操作进行奇数判断时, 对负数不能判断 -3 % 2 == -1 , 建议采用 & 操作
// 输出 True
System.out.println((-3 & 1) == 1);
  1. 整数的最大值为 2147483647

<尾书> 今天的文章标题是 GPT 起的,里面好多问题也是 GPT 归纳的, 它对文字的理解和掌握能力,真的让人震惊,让我觉得我都没有输出能力了 。如果一直依赖 GPT , 真的会不会整理文字吧 2023 / 3 / 27

你可能感兴趣的:(Java,java,开发语言)