1. 给一个数组,要求写一个函数,交换数组中的两个元素
- 二X程序员:
好简单啊,直接写出以下结果
func swap(_ nums: inout [Int], _ p: Int, _ q: Int) {
let temp = nums[p]
nums[p] = nums[q]
nums[q] = temp
}
- 普通程序员:
首先跟面试官沟通,是什么类型的数组?面试官会说,任意。普通程序员微微一笑,写出以下代码
func swap<T>(_ nums: inout [T], _ p: Int, _ q: Int) {
let temp = nums[p]
nums[p] = nums[q]
nums[q] = temp
}
- 文艺程序员:
与面试官沟通,是什么类型的数组?有什么其他要求和限制?面试官会说,这是一个Swift面试题。文艺程序员心领神会,于是写出以下答案:
func swap<T>(_ nums: inout [T], _ p: Int, _ q: Int) {
(nums[p], nums[q]) = (nums[q], nums[p])
}
同时对以上代码写上相应测试,检测各种边界情况,再确认无误后,才会说,这道题目我完成了。
这道题目看似简单,实际上考察了程序员的审题、交流、以及测试的意识。技术上考察了Swift的泛型和Tuple的性质。
2. 下面代码有什么问题
public class Node {
public var value: Int
public var prev: Node?
public var post: Node?
public init(_ value: Int) {
self.value = value
}
}
答案:应该在 var prev 或者 var post 前面加上 weak。
原因:表面上看,以上代码毫无问题。但是我这样一写,问题就来了:
let head = Node(0)
let tail = Node(1)
head.post = tail
tail.prev = head
此时