- Preparándose para su entrevista de iOS
- Preguntas técnicas
- Pregunta 1
- Pregunta 2
- Pregunta 3
- Pregunta 4
- Pregunta 5
- Pregunta 6
- Pregunta 7
- Pregunta 8
- Pregunta 9
- Pregunta 10
- Pregunta 11
- Pregunta 12
- Pregunta 13
- Pregunta 14
- Pregunta 15
- Pregunta 16
- Pregunta 17
- Pregunta 18
- Pregunta 19
- Pregunta 20
- Preguntas estándar
- » Cuéntame sobre ti mismo.»
- » Describa un problema interesante y cómo lo resolvió.»
Preparándose para su entrevista de iOS
Se acerca el gran día. Ya sea una entrevista telefónica, en línea o en persona, siempre es un poco estresante. Por lo tanto, para aliviar el estrés, hizo algún trabajo de preparación, completó la tarea en la empresa con la que está entrevistando, acosó al gerente de recursos humanos y a la mitad del equipo de ingeniería de la empresa que eligió en linkedin & github, repasó algunas de las habilidades y conocimientos que no ha utilizado en un tiempo, está listo para comenzar.
Pero siguiendo el lema de los Seal de la Marina de los EE.UU. «Dos son uno y uno no es ninguno», repasemos otro repaso rápido para ayudarte a asar esa entrevista de iOS. ¡Así que vamos a entrar en ello!
Comencemos con algunas de las preguntas básicas para las que espero que ya esté listo. Pueden parecer obvias, pero te sorprendería la cantidad de ingenieros que les fallaron miserablemente durante los 12 años que he estado haciendo entrevistas técnicas.
Preguntas técnicas
Ok, ahora que lo tenemos cubierto, pasemos a las preguntas técnicas.
¡Vea aquí el slideshare para todas las preguntas técnicas de la entrevista!
Pregunta 1
En un constructor UITableViewCell:
- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
¿Para qué se utiliza reuseIdentifier
?
El reuseIdentifier
se utiliza para indicar que una celda puede reutilizarse en un UITableView
. Por ejemplo, cuando la celda se ve igual, pero tiene un contenido diferente. El UITableView
mantendrá una caché interna de UITableViewCell
con el reuseIdentifier
y permitirá que se reutilicen cuando se llame a dequeueReusableCellWithIdentifier:
. Al reutilizar celdas de tabla, el rendimiento de desplazamiento de la vista de tabla es mejor porque no es necesario crear nuevas vistas.
Pregunta 2
¿Explicar la diferencia entre las propiedades sintetizadas atómicas y no atómicas?
Atómico y no atómico se refiere a si los setters / getters de una propiedad leerán y escribirán valores atómicos en la propiedad. Cuando se usa la palabra clave atómica en una propiedad, cualquier acceso a ella se «sincronizará». Por lo tanto, se garantizará que una llamada al receptor devuelva un valor válido, sin embargo, esto viene con una pequeña penalización de rendimiento. Por lo tanto, en algunas situaciones, nonatomic se usa para proporcionar un acceso más rápido a una propiedad, pero existe la posibilidad de que una condición de carrera haga que la propiedad sea nula en circunstancias excepcionales (cuando se establece un valor desde otro subproceso y el valor antiguo se libera de la memoria, pero el nuevo valor aún no se ha asignado completamente a la ubicación en memoria de la propiedad).
Pregunta 3
Explicar la diferencia entre copiar y retener?
Retener un objeto significa que el recuento de retención aumenta en uno. Esto significa que la instancia del objeto se mantendrá en memoria hasta que el recuento de retención caiga a cero. La propiedad almacenará una referencia a esta instancia y compartirá la misma instancia con cualquier otra persona que también la haya conservado. Copiar significa que el objeto se clonará con valores duplicados. No se comparte con nadie más.
¿Quieres mejorar tu entrevista técnica? Programe una Sesión de Práctica de Entrevista Técnica con un experto ahora!
Pregunta 4
¿Qué es el método swizzling en Objective C y por qué lo usarías?
El swizzling de métodos permite cambiar la implementación de un selector existente en tiempo de ejecución para una implementación diferente en una tabla de despacho de clases. Swizzling le permite escribir código que se puede ejecutar antes y / o después del método original. Por ejemplo, tal vez para rastrear el tiempo de ejecución del método, o para insertar instrucciones de registro
#import "UIViewController+Log.h"@implementation UIViewController (Log) + (void)load { static dispatch_once_t once_token; dispatch_once(&once_token, ^{ SEL viewWillAppearSelector = @selector(viewDidAppear:); SEL viewWillAppearLoggerSelector = @selector(log_viewDidAppear:); Method originalMethod = class_getInstanceMethod(self, viewWillAppearSelector); Method extendedMethod = class_getInstanceMethod(self, viewWillAppearLoggerSelector); method_exchangeImplementations(originalMethod, extendedMethod); }); } - (void) log_viewDidAppear:(BOOL)animated { ; NSLog(@"viewDidAppear executed for %@", ); }@end
Pregunta 5
¿Cuál es la diferencia entre los estados de ejecución no en ejecución, inactivo, activo, en segundo plano y suspendido?
- No funcionando: La aplicación no se ha iniciado o se estaba ejecutando, pero el sistema la terminó.
- Inactivo: La aplicación se está ejecutando en primer plano, pero actualmente no recibe eventos. (Sin embargo, puede estar ejecutando otro código.) Por lo general, una aplicación permanece en este estado solo brevemente a medida que pasa a un estado diferente.
- Activo: La aplicación se ejecuta en primer plano y recibe eventos. Este es el modo normal para las aplicaciones en primer plano.
- Fondo: La aplicación está en segundo plano y ejecutando código. La mayoría de las aplicaciones entran en este estado brevemente en su camino a ser suspendidas. Sin embargo, una aplicación que solicita tiempo de ejecución adicional puede permanecer en este estado durante un período de tiempo. Además, una aplicación que se inicia directamente en segundo plano entra en este estado en lugar del estado inactivo.
- Suspendido: La aplicación está en segundo plano pero no está ejecutando código. El sistema mueve las aplicaciones a este estado automáticamente y no las notifica antes de hacerlo. Mientras está suspendida, una aplicación permanece en memoria, pero no ejecuta ningún código. Cuando se produce una condición de poca memoria, el sistema puede purgar las aplicaciones suspendidas sin previo aviso para hacer más espacio para la aplicación en primer plano.
Pregunta 6
¿Qué es una categoría y cuándo se utiliza?
Una categoría es una forma de agregar métodos adicionales a una clase sin extenderla. A menudo se usa para agregar una colección de métodos relacionados. Un caso de uso común es agregar métodos adicionales a las clases integradas en los marcos Cocoa. Por ejemplo, agregar métodos de descarga asincrónica a la clase UIImage
.
Pregunta 7
¿Puede detectar el error en el siguiente código y sugerir cómo solucionarlo:
@interface MyCustomController : UIViewController @property (strong, nonatomic) UILabel *alert; @end @implementation MyCustomController - (void)viewDidLoad { CGRect frame = CGRectMake(100, 100, 100, 50); self.alert = initWithFrame:frame]; self.alert.text = @"Please wait..."; ; dispatch_async( dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ sleep(10); self.alert.text = @"Waiting over"; } ); } @end
Todas las actualizaciones de la interfaz de usuario deben realizarse en el subproceso principal. En el código anterior, la actualización del texto de alerta puede o no ocurrir en el hilo principal, ya que la cola de despacho global no ofrece garantías . Por lo tanto, el código debe modificarse para ejecutar siempre la actualización de la interfaz de usuario en el hilo principal
dispatch_async( dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ sleep(10); dispatch_async(dispatch_get_main_queue(), ^{ self.alert.text = @"Waiting over"; });});
Pregunta 8
¿Cuál es la diferencia entre viewDidLoad
y viewDidAppear
?
¿Qué debe usar para cargar datos de un servidor remoto para mostrarlos en la vista?
viewDidLoad
se llama cuando se carga la vista, ya sea desde un archivo Xib, guion gráfico o creado mediante programación en loadView
. viewDidAppear
se llama cada vez que se presenta la vista en el dispositivo. El uso depende del caso de uso de sus datos. Si los datos son bastante estáticos y no es probable que cambien, se pueden cargar en viewDidLoad
y almacenarse en caché. Sin embargo, si los datos cambian regularmente, es mejor usar viewDidAppear
para cargarlos. En ambas situaciones, los datos deben cargarse de forma asíncrona en un subproceso en segundo plano para evitar bloquear la interfaz de usuario.
Pregunta 9
¿Qué consideraciones necesita al escribir un UITableViewController
que muestre imágenes descargadas de un servidor remoto?
Esta es una tarea muy común en iOS y una buena respuesta aquí puede cubrir una gran cantidad de conocimientos. La información importante en la pregunta es que las imágenes se alojan de forma remota y pueden tardar tiempo en descargarse, por lo tanto, cuando se piden «consideraciones», debe estar hablando de:
- Solo descargue la imagen cuando la celda se desplace hacia la vista, es decir, cuando se llama a
cellForRowAtIndexPath
. - Descargar la imagen de forma asíncrona en un hilo de fondo para no bloquear la interfaz de usuario y que el usuario pueda seguir desplazándose.
- Cuando la imagen se ha descargado para una celda, necesitamos verificar si esa celda sigue en la vista o si otra pieza de datos la ha reutilizado. Si se ha reutilizado, debemos descartar la imagen, de lo contrario, debemos volver al hilo principal para cambiar la imagen en la celda.
Otras buenas respuestas hablarán sobre el almacenamiento en caché sin conexión de las imágenes, utilizando imágenes de marcador de posición mientras se descargan las imágenes.
Pregunta 10
¿Qué es un protocolo, cómo define el suyo propio y cuándo se utiliza?
Un protocolo es similar a una interfaz de Java. Define una lista de métodos obligatorios y opcionales que una clase debe / puede implementar si adopta el protocolo. Cualquier clase puede implementar un protocolo y otras clases pueden enviar mensajes a esa clase basándose en los métodos de protocolo sin que sepa el tipo de clase.
@protocol MyCustomDataSource- (NSUInteger)numberOfRecords;- (NSDictionary *)recordAtIndex:(NSUInteger)index;@optional- (NSString *)titleForRecordAtIndex:(NSUInteger)index;@end
Un caso de uso común es proporcionar una fuente de datos para UITableView
o UICollectionView
.
Pregunta 11
¿Qué es KVC y KVO? Dé un ejemplo de uso de KVC para establecer un valor.
KVC significa Codificación Clave-Valor. Es un mecanismo por el cual se puede acceder a las propiedades de un objeto utilizando cadenas en tiempo de ejecución en lugar de tener que conocer estáticamente los nombres de las propiedades en el momento del desarrollo. KVO significa Observación de valor de clave y permite que un controlador o clase observe cambios en un valor de propiedad.
Digamos que hay una propiedad name
en una clase:
@property (nonatomic, copy) NSString *name;
Podemos acceder a él usando KVC:
NSString *n =
Y podemos modificar su valor enviándole el mensaje:
Pregunta 12
¿Qué son los bloques y cómo se utilizan?Los bloques
son una forma de definir una sola tarea o unidad de comportamiento sin tener que escribir una clase Objective-C completa. Debajo de las cubiertas, los bloques siguen siendo objetos del Objetivo C. Son una característica de nivel de lenguaje que permite que se admitan técnicas de programación como lambdas y cierres en Objective-C. La creación de un bloque se realiza utilizando la sintaxis ^ { }
:
myBlock = ^{ NSLog(@"This is a block"); }
Se puede invocar así:
myBlock();
Es esencialmente un puntero de función que también tiene una firma que se puede usar para reforzar la seguridad de tipos en la compilación y el tiempo de ejecución. Por ejemplo, puede pasar un bloque con una firma específica a un método como este:
- (void)callMyBlock:(void (^)(void))callbackBlock;
Si desea que se le den algunos datos al bloque, puede cambiar la firma para incluirlos:
- (void)callMyBlock:(void (^)(double, double))block { ... block(3.0, 2.0);}
Pregunta 13
¿Qué mecanismos proporciona iOS para admitir subprocesos múltiples?
-
NSThread
crea un nuevo subproceso de bajo nivel que se puede iniciar llamando al métodostart
.
NSThread* myThread = initWithTarget:self selector:@selector(myThreadMainMethod:) object:nil];;
-
NSOperationQueue
permite crear un conjunto de subprocesos y usarlos para ejecutarNSOperation
s en paralelo.NSOperation
s también se puede ejecutar en el hilo principal pidiendoNSOperationQueue
elmainQueue
.
NSOperationQueue* myQueue = init];; ;
- GCD o Grand Central Dispatch es una característica moderna de Objective-C que proporciona un amplio conjunto de métodos y API para usar con el fin de soportar tareas comunes de subprocesos múltiples. GCD proporciona una forma de poner en cola las tareas para el envío en el subproceso principal, una cola concurrente (las tareas se ejecutan en paralelo) o una cola serie (las tareas se ejecutan en orden FIFO).
dispatch_queue_t myQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);dispatch_async(myQueue, ^{ printf("Do some work here.\n");});
Pregunta 14
¿Qué es la Cadena de Respondedores?
Cuando ocurre un evento en una vista, por ejemplo, un evento táctil, la vista activará el evento a una cadena de UIResponder
objetos asociados con UIView
. El primer UIResponder
es el UIView
en sí, si no maneja el evento, entonces continúa en la cadena hasta que UIResponder
maneje el evento. La cadena incluirá UIViewController
s, padre UIView
s y sus asociados UIViewController
s, si ninguno de ellos maneja el evento, se le preguntará a UIWindow
si puede manejarlo y, finalmente, si no maneja el evento, se le preguntará a UIApplicationDelegate
.
Si tienes la oportunidad de dibujar este, vale la pena hacerlo para impresionar al entrevistador:
Pregunta 15
¿Cuál es la diferencia entre usar un delegado y una notificación?
Ambos se utilizan para enviar valores y mensajes a las partes interesadas. Un delegado es para la comunicación individual y es un patrón promovido por Apple. En la delegación, los eventos de aumento de clase tendrán una propiedad para el delegado y normalmente esperarán que implemente algo de protocol
. La clase delegante puede llamar a los métodos de protocolo _delegate_s.
La notificación permite a una clase transmitir eventos a través de toda la aplicación a cualquier parte interesada. La clase de difusión no necesita saber nada sobre los oyentes de este evento, por lo tanto, la notificación es muy útil para ayudar a desacoplar componentes en una aplicación.
postNotificationName:@"TestNotification" object:self];
Pregunta 16
¿Cuál es su preferencia al escribir UI? Archivos Xib, guiones gráficos o programáticos UIView
?
No hay una respuesta correcta o incorrecta a esto, pero es una gran manera de ver si entiendes los beneficios y desafíos de cada enfoque. Aquí están las respuestas comunes que escucho:
- Los guiones gráficos y Xib son excelentes para producir rápidamente UI que coincidan con una especificación de diseño. También son muy fáciles para los gerentes de producto para ver visualmente qué tan lejos está una pantalla.
- Los guiones gráficos también son excelentes para representar un flujo a través de una aplicación y permitir una visualización de alto nivel de una aplicación completa.
- Los inconvenientes del guion gráfico son que en un entorno de equipo es difícil trabajar en colaboración porque son un solo archivo y las fusiones se vuelven difíciles de administrar.
- Los guiones gráficos y los archivos Xib también pueden sufrir duplicación y ser difíciles de actualizar. Por ejemplo, si todos los botones necesitan verse idénticos y de repente necesitan un cambio de color, puede ser un proceso largo/difícil hacer esto en guiones gráficos y gráficos.
- La construcción programática de
UIView
puede ser detallada y tediosa, pero puede permitir un mayor control y también una separación y compartición de código más fáciles. También se pueden probar con mayor facilidad por unidad.
La mayoría de los desarrolladores propondrán una combinación de los 3 donde tenga sentido compartir código, luego archivos reutilizables UIView
s o Xib
.
Pregunta 17
¿Cómo almacenaría de forma segura los datos privados del usuario sin conexión en un dispositivo? ¿Qué otras prácticas recomendadas de seguridad deben adoptarse?
Una vez más, no hay una respuesta correcta a esto, pero es una excelente manera de ver cuánto ha profundizado una persona en la seguridad de iOS. Si está entrevistando a un banco, casi definitivamente esperaría que alguien supiera algo al respecto, pero todas las empresas deben tomarse en serio la seguridad, por lo que esta es la lista ideal de temas que esperaría escuchar en una respuesta:
- Si los datos son extremadamente sensibles, nunca deben almacenarse sin conexión en el dispositivo porque todos los dispositivos se pueden descifrar.
- El llavero es una opción para almacenar datos de forma segura. Sin embargo, su cifrado se basa en el código pin del dispositivo. Los usuarios no están obligados a establecer un pin, por lo que en algunas situaciones los datos ni siquiera se cifran. Además, el código pin del usuario puede ser fácilmente pirateado.
- Una mejor solución es usar algo como SQLCipher, que es una base de datos SQLite totalmente encriptada. La aplicación puede hacer cumplir la clave de cifrado y separarla del código pin del usuario.
Otras prácticas recomendadas de seguridad son:
- Solo comuníquese con servidores remotos a través de SSL / HTTPS.
- Si es posible, implemente la fijación de certificados en la aplicación para evitar ataques de intermediario en WiFi pública.
- Borre los datos confidenciales de la memoria sobrescribiéndolos.
- Asegúrese de que toda la validación de los datos que se envían también se ejecute en el lado del servidor.
Pregunta 18
¿Qué es MVC y cómo se implementa en iOS?
¿Cuáles son algunos escollos que has experimentado con él? ¿Hay alguna alternativa a MVC?
MVC significa Modelo, Vista, Controlador. Es un patrón de diseño que define cómo separar la lógica al implementar interfaces de usuario. En iOS, Apple proporciona UIView
como clase base para todos los _View_s, se proporciona UIViewController
para admitir el Controlador que puede escuchar eventos en una vista y actualizar la Vista cuando cambian los datos. El Modelo representa datos en una aplicación y se puede implementar con cualquier NSObject
, incluidas colecciones de datos como NSArray
y NSDictionary
.
Algunos de los escollos a los que se enfrentan las personas son hinchados UIViewController
y no separar el código en clases más allá del formato MVC. Recomiendo encarecidamente leer algunas soluciones para esto:
- https://www.objc.io/issues/1-view-controllers/lighter-view-controllers/
- https://speakerdeck.com/trianglecocoa/unburdened-viewcontrollers-by-jay-thrash
- https://programmers.stackexchange.com/questions/177668/how-to-avoid-big-and-clumsy-uitableviewcontroller-on-ios
En términos de alternativas, esto es bastante abierto. La alternativa más común es MVVM usando ReactiveCocoa, pero otras incluyen VIPER y el uso de código Reactivo Funcional.
Pregunta 19
Un gerente de producto de su empresa informa de que la aplicación se está bloqueando. ¿Qué es lo que haces?
Esta es una gran pregunta en cualquier lenguaje de programación y está realmente diseñada para ver cómo resuelves problemas. No se le da mucha información, pero algunas entrevistas le darán más detalles del tema a medida que avanza. Inicio simple:
- obtenga los pasos exactos para reproducirlo.
- descubre el dispositivo, versión iOS.
- ¿tienen la última versión?
- obtener registros de dispositivos si es posible.
Una vez que pueda reproducirlo o tener más información, comience a usar herramientas. Digamos que se bloquea debido a una fuga de memoria, esperaría ver a alguien sugerir el uso de la herramienta de fugas de instrumentos. Un candidato realmente impresionante comenzaría a hablar de escribir una prueba de unidad que reproduzca el problema y depure a través de él.
Otras variaciones de esta pregunta incluyen la interfaz de usuario lenta o la congelación de la aplicación. Una vez más, la idea es ver cómo resuelves los problemas, qué herramientas conoces que te ayudarían y sabes cómo usarlas correctamente.
Pregunta 20
¿Qué es el diseño automático? ¿Qué significa cuando iOS» rompe » una restricción?
El diseño automático es una forma de diseñar UIView
s mediante un conjunto de restricciones que especifican la ubicación y el tamaño en función de otras vistas o en función de valores explícitos. El diseño automático facilita el diseño de pantallas que redimensionan y diseñan mejor sus componentes en función del tamaño y la orientación de una pantalla. _Constraint_s incluyen:
- establecer la distancia horizontal/vertical entre 2 vistas
- establecer la altura/anchura para que sea una relación relativa a una vista diferente
- un ancho/altura/espaciado puede ser un valor estático explícito
A veces las restricciones entran en conflicto entre sí. Por ejemplo, imagine un UIView
que tiene 2 restricciones de altura: una dice que el UIView
200px sea alto, y la segunda dice que la altura sea el doble de la altura de un botón. Si el tiempo de ejecución de iOS no puede satisfacer ambas restricciones, entonces tiene que elegir solo una. El otro es reportado como «roto» por iOS.
Preguntas estándar
» Cuéntame sobre ti mismo.»
¡Esto es realmente complicado! Muchas personas leen su currículum en voz alta (¡olvidando que lo estoy mirando directamente!), enumerando cada clase que tomaron en la universidad, cada puesto que han ocupado (y eso realmente se suma para los Ingenieros de Nivel Superior) y cada responsabilidad (que a menudo sucede que es la misma en 2 o 3 compañías en las que una persona en particular ha trabajado. Así que, 20 minutos después, todavía no sé nada nuevo / fuera del currículum sobre el candidato, estamos a 20 minutos, y para entonces creo que también podrían ser robots (y los robots tienden a no encajar muy bien con los equipos dinámicos).
Así que hazte un favor a ti mismo (y al gerente de recursos humanos) preparando un discurso de ascensor de 2 minutos de duración de tu experiencia: hazlo simple, conciso y breve, y luego agrega algo personal al final. ¿Te encanta correr? ¿Estás entrenando al equipo de fútbol de tu hija? ¿Fanático de Star Wars? Agregar un poco de personalidad es un gran rompehielos, y hará una transición increíble a la parte más profunda de la entrevista.
» Describa un problema interesante y cómo lo resolvió.»
Su probabilidad de escuchar este es básicamente del 99%, ¡así que es mejor que tenga una gran respuesta lista para ellos! Aquí hay algunos consejos: piense en un proyecto particularmente increíble del que esté orgulloso. ¿Entendido? ¡Órale! Ahora, toma un pedazo de papel y resúmelo en 5 viñetas.
1er punto-historia de fondo muy breve de las circunstancias detrás del proyecto
2do punto – la naturaleza del proyecto en sí
3er punto – los problemas con los que se ha encontrado mientras lo resolvía
4to punto – cómo resolvió las dificultades anteriores
5to punto – qué ha aprendido de él.
Ahora, encuentra a alguien que te escuche (un amigo, compañero, colega) y pregúntale si la historia tiene sentido (menos cualquier aspecto técnico de la misma si la persona con la que estás hablando no es tu compañero). Es una gran manera de validar si la historia se mantiene unida.
Te sorprendería cuántas veces he escuchado cosas como » y luego fui a John, y usó la herramienta que ha creado para eliminar el error crítico que luego……». Quién es Tom? Su manager? Pasante? Peer? ¿Por qué acudiste a él de todos en tu compañía? ¿Qué es esa herramienta mágica que ha creado? ¿Qué bug crítico eliminó exactamente y cómo? ¿Cuál fue el resultado?
Usted consigue la idea
bono Adicional? Ahora tiene 5 viñetas que puede usar como una hoja de trucos durante su entrevista sin parecerse a ese tipo que está leyendo su currículum en voz alta.
Ahora vamos a saltar a las EXTRAÑAS preguntas que algunos de los encargados que emplean como para tirar a la punta de su juego.
- ¿Cómo probarías una tostadora?
- ¿Cuántas plumas caben en un avión?
- ¿Cuántas ventanas hay en San Francisco?
- ¿Cuántas pelotas de golf caben en un autobús escolar?
- ¿Cuántas Big Macs vende McDonald’s cada año en los Estados Unidos?
La lista sigue y sigue. Si bien no tiene nada que ver con sus habilidades técnicas, hace un buen trabajo al verificar cómo maneja las bolas curvas y ver si es capaz de resolver problemas paso a paso de forma lógica. En la mayoría de los casos, no hay respuestas perfectas para ese tipo de preguntas (aunque puedes buscarlas en Google para tu tranquilidad). Se trata de cómo explicar su lógica a su entrevistador.
Aquí está la respuesta a la pregunta de las pelotas de golf de Michael Beauchamp, para que te hagas una idea de lo que estoy hablando:
Me imagino que un autobús escolar estándar tiene aproximadamente 8 pies de ancho por 6 pies de alto por 20 pies de largo, esto es solo una suposición basada en las miles de horas que he estado atrapado detrás de los autobuses escolares mientras el tráfico en todas las direcciones se detiene.
Eso significa 960 pies cúbicos y como hay 1728 pulgadas cúbicas en un codo de pie, eso significa aproximadamente 1.6 millones de pulgadas cúbicas.
Calculo que el volumen de una pelota de golf es de aproximadamente 2,5 pulgadas cúbicas (4/3 * pi * .85) as .85 pulgadas es el radio de una pelota de golf.
Divida esas 2,5 pulgadas cúbicas en 1.6 millones y consigues 660.000 pelotas de golf. Sin embargo, dado que hay asientos y basura allí ocupando espacio y también dado que la forma esférica de una pelota de golf significa que habrá un espacio vacío considerable entre ellos cuando se apilan, redondearé hasta 500,000 pelotas de golf.
Ver? Paso a paso. Y de repente es una pregunta relativamente simple y lógica. Solo mantén la calma, y en lugar de intentar pensar en un número instantáneo en tu cabeza, guía al entrevistador a través de tu tren de pensamientos contigo.
¿Necesita práctica en la vida real? Siéntase libre de programar una entrevista simulada con Matt, quien ha estado haciendo entrevistas técnicas durante 12 años, ¡y pida su opinión!