你擅长看日志文件吗?

来源:互联网 发布:cl邀请码淘宝怎么搜 编辑:程序博客网 时间:2024/05/01 09:52

我定期会面试人,我发现我很难想出方法来充分确定面试的技术知识。虽然他们可以展示他们的简历和他们过去的做法,但是很难告诉他们如何思考的。我不要问我自己无法回答的问题,我不认为这是公平的。许多人问基本的计算机科学问题,我可能得到错误的答案,因为我没有计算机科学背景,所以我倾向于问问题,看看候选人将处理情况。

一个技能,我认为是至关重要的对于一个开发人员调试技能。你可能会说,所有的开发人员都能做,但是一些远比别人做的更好。调试是我的一个最好的技能,我有大量的经验,它继承别人的项目。有鉴于此,我想出了一个技术测试,实际上可以告诉我如果一个候选人可以调试,技能很好地发展。

现在你问这个问题是什么?那天在我的片片崩溃日志,几站在我。看看下面的日志,看看你是否能发现为什么应用崩溃:

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];