我定期会面试人,我发现我很难想出方法来充分确定面试的技术知识。虽然他们可以展示他们的简历和他们过去的做法,但是很难告诉他们如何思考的。我不要问我自己无法回答的问题,我不认为这是公平的。许多人问基本的计算机科学问题,我可能得到错误的答案,因为我没有计算机科学背景,所以我倾向于问问题,看看候选人将处理情况。
一个技能,我认为是至关重要的对于一个开发人员调试技能。你可能会说,所有的开发人员都能做,但是一些远比别人做的更好。调试是我的一个最好的技能,我有大量的经验,它继承别人的项目。有鉴于此,我想出了一个技术测试,实际上可以告诉我如果一个候选人可以调试,技能很好地发展。
现在你问这个问题是什么?那天在我的片片崩溃日志,几站在我。看看下面的日志,看看你是否能发现为什么应用崩溃:
Thread 0 name: Dispatch queue: com.apple.main-thread
Thread 0:
0 libsystem_kernel.dylib 0x35cab054 semaphore_wait_trap + 8
1 libdispatch.dylib 0x342961c0 _dispatch_semaphore_wait_slow + 184
2 libdispatch.dylib 0x342961f4 dispatch_semaphore_wait$VARIANT$mp + 32
3 libxpc.dylib 0x3200e89a xpc_connection_send_message_with_reply_sync + 206
4 SystemConfiguration 0x374f5be6 _reach_server_target_status + 938
5 SystemConfiguration 0x374f6d56 __SCNetworkReachabilityServer_targetStatus + 14
6 SystemConfiguration 0x374dfaee __SCNetworkReachabilityGetFlags + 198
7 SystemConfiguration 0x374e0f7a SCNetworkReachabilityGetFlags + 190
8 MSNBC 0x000cb9ec 0x1000 + 829932
9 MSNBC 0x0006f998 0x1000 + 453016
10 MSNBC 0x0006abfa 0x1000 + 433146
11 MSNBC 0x00014d54 0x1000 + 81236
12 MSNBC 0x0006ab6e 0x1000 + 433006
Last Exception Backtrace:
0 CoreFoundation 0x3567188f __exceptionPreprocess + 163
1 libobjc.A.dylib 0x37a18259 objc_exception_throw + 33
2 CoreFoundation 0x356713b3 __NSFastEnumerationMutationHandler + 163
3 EmSea 0x001f9c2b 0xe2000 + 1145899
4 EmSea 0x00199bed 0xe2000 + 752621
5 EmSea 0x00223453 0xe2000 + 1315923
6 EmSea 0x002239c9 0xe2000 + 1317321
7 Foundation 0x351b6c29 __65-[NSURLConnectionInternal _withConnectionAndDelegate:onlyActive:]_block_invoke_0 + 17
8 Foundation 0x3510e6d9 -[NSURLConnectionInternalConnection invokeForDelegate:] + 29
9 Foundation 0x3510e6a3 -[NSURLConnectionInternal _withConnectionAndDelegate:onlyActive:] + 199
10 Foundation 0x3510e5c5 -[NSURLConnectionInternal _withActiveConnectionAndDelegate:] + 61
在第一个,提示是,应用程序未能启动时间。我将使用这些崩溃日志作为一个测试,看看候选人能告诉我出了什么问题。无论是应用是我的,虽然我不能看到的代码,我可以立即发现问题。在第一个崩溃日志,应用程序调用SCNetworkReachabilityGetFlags主线程上。这个调用是一种阻塞调用,这意味着它不会返回,直到搞定,这叫可以花费大量时间返回,而且永远不应该呼吁主线程,特别是在应用程序启动。
在第二个崩溃日志,它不是那么明显。开发人员所做的是:
:
for (NSString *string in someMutableArray)
{
if ([string isEqualToString:@"Yuck"])
{
[someMutableArray removeObject:string];
}
}
The array is getting modified while it is being enumerated. The fix is pretty simple.
NSMutableArray *deleteArray = [NSMutableArray array];
for (NSString *string in someMutableArray)
{
if ([string isEqualToString:@"Yuck"])
{
[deleteArray addObject:string];
}
}
[someMutableArray removeObjectsInArray:deleteArray];