面试题答案
一键面试UUID(通用唯一识别码)
- 生成方法:使用UUID生成算法,在大多数编程语言中都有对应的库函数可以生成,例如Java中的
java.util.UUID
类。生成的UUID是一个128位的数字,通常表示为36个字符的字符串,形式为8-4-4-4-12,例如550e8400-e29b-41d4-a716-446655440000
。 - 优点:
- 全球唯一性:UUID算法设计旨在确保全球范围内的唯一性,几乎不会重复。
- 生成简单:在各种编程语言中都有成熟的库支持,实现简单。
- 缺点:
- 长度较长:128位(通常表示为36个字符的字符串),占用空间较大,无论是在内存还是网络传输中,都会增加开销。
- 不具备有序性:生成的UUID是无序的,在某些需要顺序性的场景(如按时间顺序排序等)不适用。
基于时间戳的方法
- 生成方法:结合当前时间戳和机器标识、进程标识等信息生成唯一标识。例如,可以使用
System.currentTimeMillis()
获取当前时间戳(精确到毫秒),再加上机器的IP地址(或其他唯一标识)以及进程ID,拼接起来生成唯一标识。为了保证长度可控和便于处理,时间戳部分可以只取一定长度(如毫秒部分的后几位)。 - 优点:
- 具有一定顺序性:基于时间戳生成,在一定程度上具有时间顺序,对于一些需要按时间先后顺序处理的场景有优势。
- 长度相对较短:相比UUID,结合部分信息生成的标识长度可以根据需求控制得较短,减少存储和传输开销。
- 缺点:
- 在高并发下可能不唯一:如果在同一毫秒内有多个请求生成标识,且机器标识和进程标识相同的情况下,可能会出现重复。虽然可以通过更精确的时间单位(如纳秒)或增加其他唯一因素来降低重复概率,但实现会更复杂。
- 时钟回退问题:如果服务器的时钟发生回退(如系统时间被调整),可能会导致生成的标识不唯一或不符合预期的顺序。