求职笔记

TCP和UDP

TCP

端到端的,不支持多播广播,面向字节流,将数据视为连续的字节流,并将数据分为适当的段连续传输,确保数据传输有序可靠。

UDP

面向数据报,每个数据报都独立传输的

InnoDB和MyISAM

InnoDB和MyISAM是MySQL数据库中两种常见的存储引擎,它们在多个方面存在显著差异。以下是对这两种存储引擎的详细比较:

事务支持

  • InnoDB:支持事务,提供ACID(原子性、一致性、隔离性、持久性)特性,适合需要处理大量短期事务的应用,如电子商务网站、在线金融服务等。
  • MyISAM:不支持事务,适合只读或绝大部分时间是读操作的应用,例如新闻网站和博客平台。

锁定机制

  • InnoDB:使用行级锁定,提高并发性能,允许多个事务同时进行,而不会相互阻塞。
  • MyISAM:使用表级锁定,当一个线程对表进行写操作时,其他线程无法对该表进行任何读写操作,这在高并发环境下可能导致性能瓶颈。

索引结构

  • InnoDB:使用B+树索引,支持聚集索引和辅助索引。聚集索引的叶子节点存储了完整的数据行,辅助索引的叶子节点存储了主键值。
  • MyISAM:使用B树索引,只支持非聚集索引。索引的叶子节点存储了索引字段和指向数据行的指针。

性能

  • InnoDB:在读写频繁的情况下性能更优,特别是在高并发环境下,由于其行级锁定和事务支持,性能表现更佳。
  • MyISAM:在读操作频繁、写操作较少的情况下性能更优,因为其表级锁定机制在大量读操作时不会造成太大影响。

其他特性

  • InnoDB:支持外键约束,保证数据的引用完整性。具有崩溃恢复能力,保证数据的不丢失。
  • MyISAM:不支持外键约束,缺乏数据安全性。在系统崩溃后,可能会导致数据丢失。

适用场景

  • InnoDB:适用于需要高并发访问、事务支持和数据完整性的应用场景,如电商网站、金融系统等。
  • MyISAM:适用于读操作远多于写操作的场景,如静态网站、新闻网站等。

总的来说,InnoDB和MyISAM各有优缺点,选择哪种存储引擎取决于具体的应用场景和需求。

String.format()

String.format() 是 Java 中的一个方法,用于将格式化字符串转换为新的已格式化字符串。这个方法使用类似于 C 语言中 printf() 函数的语法。你可以使用占位符(例如 %s, %d, %f 等)来指定插入的数据类型和格式。

这是一个简单的例子:

1
2
3
4
5
6
7
8
9
10
public class FormatString {
public static void main(String[] args) {
String name = "Alice";
int age = 30;
double salary = 5000.5;

String formattedString = String.format("姓名:%s,年龄:%d,工资:%.2f", name, age, salary);
System.out.println(formattedString);
}
}

输出结果:

1
姓名:Alice,年龄:30,工资:5000.50

在这个例子中,我们使用了以下格式说明符:

  • %s 表示字符串类型
  • %d 表示整数类型(十进制)
  • %.2f 表示浮点类型,保留小数点后 2 位

String.format() 方法支持许多其他格式说明符,例如:

  • %c:字符类型
  • %x%X:整数类型(十六进制)
  • %o:整数类型(八进制)
  • %e%E:浮点类型(科学计数法)
  • %g%G:根据数值大小选择 %f%e(%E)

更多关于 String.format() 的信息和格式说明符,你可以查阅 Java 官方文档:

Java String.format() 文档

数据库范式

数据库设计通常需要满足的范式数量是一个常见的问题,它涉及到数据库设计的规范化过程。以下是对数据库设计中需要满足的范式数量的详细解答:
第一范式(1NF):确保每个表中的每个字段都是原子的,不可再分的。
第二范式(2NF):确保每个非主属性字段完全依赖于整个主属性,而不是依赖于主属性的一部分。
第三范式(3NF):确保每个非主属性字段只依赖于主属性,而不依赖于其他非主属性字段。