Cursor
1.对Cursor 做一个简单的测试,实现一个LRU
- 实现的效果还可以,和力扣上的答案方法几乎一致,但是Cursor用到了范型考虑的比较全面,但力扣也那题也用不到范型。
2.测试一下让它生成一个日期计算的类,并放在生成的指定文件夹下。
-
能按描述实现,并生成了指定文件夹,而且日期类提供的功能也比较全面。

3. 让Cursor实现一个随机生成由数字和字母组成的五位不重复Id,之前被问到的一个面试题
-
它实现的方法是,生成随机组合然后通过哈希表去重,而且还考虑到了线程安全问题,用队列处理线程安全。算是简单粗暴。
当时我面试的时候也是这样想的,但是考虑到有没有不通过缓存去重的方式获取唯一id的方法,在这个点上我陷的有点深了。难道没有吗,应该有,但是这种生成的id应该是有规律可循的,就不随机
-
这是Cursor实现的代码
import Foundation /// 生成由数字和字母组成的、不重复的 5 位 key final class UniqueKeyGenerator { /// 字符集:0-9, a-z, A-Z(共 62 个字符) private static let characters: [Character] = { let digits = (0...9).map { Character(String($0)) } let lower = "abcdefghijklmnopqrstuvwxyz".map { $0 } let upper = "ABCDEFGHIJKLMNOPQRSTUVWXYZ".map { $0 } return digits + lower + upper }() private var usedKeys: Set<String> = [] private let queue = DispatchQueue(label: "com.testco.uniquekeygenerator", attributes: .concurrent) /// 已生成的 key 数量 var count: Int { queue.sync { usedKeys.count } } init() {} /// 生成一个新的不重复 key(5 位,仅包含数字和字母) /// - Returns: 5 字符的 key,线程安全 func generate() -> String { queue.sync(flags: .barrier) { var key: String var attempts = 0 let maxAttempts = 1000 repeat { key = Self.randomKey() attempts += 1 if attempts >= maxAttempts { fatalError("UniqueKeyGenerator: 在 \(maxAttempts) 次尝试后仍无法生成新 key,可能已耗尽 5 位空间") } } while usedKeys.contains(key) usedKeys.insert(key) return key } } /// 标记某个 key 为已使用(例如从持久化恢复) /// - Parameter key: 5 位字母数字 key func markAsUsed(_ key: String) { guard key.count == 5, key.allSatisfy({ Self.characters.contains($0) }) else { return } queue.sync(flags: .barrier) { usedKeys.insert(key) } } /// 检查 key 是否已被使用 func isUsed(_ key: String) -> Bool { queue.sync { usedKeys.contains(key) } } /// 清空已使用记录(之后可重新生成曾出现过的 key) func reset() { queue.sync(flags: .barrier) { usedKeys.removeAll() } } private static func randomKey() -> String { String((0..<5).map { _ in characters.randomElement()! }) } }
总结来说:
- 对于日常开发的还是能提速的。后续再测试一下复杂业务,比如说业务开发中对需求的理解,以及对已存在代码的理解程度,怎么能够更好的切入原有项目。