¡Una visita obligada para ascensos y aumentos salariales! Después de leer mi "Compilación y análisis del código fuente del núcleo de desarrollo de Android", ¡la entrevista requerirá al menos 3K! Con respuesta

Prefacio

Desde 2010, el mercado de Android comenzó a requerir un gran número de desarrolladores de Android, y el mercado de contratación también ha comenzado a contratar a un gran número de desarrolladores de Android. Un gran número de desarrolladores de Java han comenzado a aprender a desarrollar Android. Siempre que lo hayan hecho una cierta base de gramática Java en el mercado de contratación, son fáciles de solicitar. Ingrese al puesto de desarrollo de Android, porque la demanda de desarrollo doméstico de Android acaba de comenzar en ese momento y hay pocas personas involucradas en el desarrollo de Android. Para 2011- 2012, siempre que haya aproximadamente un año de experiencia en el desarrollo de Android, es fácil obtener 10K en las ciudades de primer nivel en ese momento. En ese momento, había alrededor de 300.000 vacantes en el mercado para el desarrollo de Android.

En ese momento, una gran cantidad de empresas de capacitación en software comenzaron a capacitar a un gran número de desarrolladores de Android. En un momento, una gran cantidad de desarrolladores o graduados universitarios comenzaron a acudir en masa al desarrollo móvil. Por supuesto, este fue también el momento en que Internet móvil estaba en un desarrollo general. También comenzaron a aparecer una gran cantidad de empresas de inicio de Internet. Solo sé una aplicación y puedes comenzar un negocio.

A finales de 2016, la demanda de contratación de Android en el mercado se ha reducido considerablemente. Por supuesto, en este momento, varias empresas emergentes correspondientes han disminuido. El mercado de formación correspondiente ya no considera el desarrollo de Android como un tema de formación básico popular. y no hay necesidad de poner en marcha un negocio, se puede empezar haciendo una App desde el principio, y ahora se enfatiza cada vez más el espíritu empresarial Lean, y el producto mínimo viable apenas comienza a ser elogiado.

Hoy en día, cada vez se presta más atención a la eficiencia y al costo. Por ejemplo, ahora solo necesitas un pequeño programa, una cuenta oficial de WeChat, un video, un grupo de WeChat o un grupo de QQ, e incluso puedes comenzar tu idea empresarial inicial operando tu círculo de amigos.

Por supuesto, la actualización e iteración continuas de algunas nuevas tecnologías, y la interminable aparición de nuevas tecnologías nos ha provocado a nosotros mismos tener varias ansiedades y preocupaciones cuando el nivel de desarrollo de Android no ha alcanzado el estado ideal. Por ejemplo, la aparición de la tecnología rápida aplicaciones hace algún tiempo, la popularidad de los programas pequeños este año, este tipo de desarrollo mixto, el desarrollo multiplataforma nos ha hecho incapaces de mantenernos al día con nuestro aprendizaje, incluso si tenemos varios marcos, varias bibliotecas de código abierto y varias grandes Las tecnologías de construcción de proyectos a escala y las tecnologías de subdivisión como NDK en el desarrollo nativo de Android, audio y video, ingeniería inversa, tecnología de imagen, etc. nos han abrumado.

Todo lo anterior nos ha llevado al hecho de que el desarrollo de Android móvil se ha enfriado. Algunas personas tienen esa metáfora. Aprender a unirse al desarrollo de Android ahora es como unirse a GMD en octubre de 1949. Es cierto que el mercado móvil no está tan de moda como antes, pero ¿es realmente genial el desarrollo móvil?

Entrevistador : Hábleme del mecanismo de recolección de basura

Yo: ... puedo resolver el problema de la referencia circular del recuento de referencias combinando el recuento de referencias fuertes y débiles. De hecho, el puntero inteligente de Android se implementa así ...

Puntero inteligente

Los punteros inteligentes se utilizan ampliamente en todo el proyecto de Android. Puedes ver las referencias de los tipos sp y wp en el código fuente relacionado con el binder:

 sp<IBinder> result = new BpBinder(handle);

 wp<IBinder> result = new BpBinder(handle);

sp es una referencia de puntero fuerte; wp es una referencia de puntero débil.

En Java, no necesitamos preocuparnos por la destrucción de objetos y la liberación de memoria. El mecanismo de GC identificará y reciclará automáticamente los objetos inútiles, y los punteros inteligentes son una pequeña implementación de GC en la capa nativa.

Los punteros inteligentes identifican objetos inútiles contando referencias. Los objetos que usan punteros inteligentes deben heredar de RefBase. RefBase mantiene el número de referencias fuertes y referencias débiles de este objeto.

El puntero fuerte sp sobrecarga el operador "=". Cuando se hace referencia a otros objetos, el recuento de referencias fuertes es +1 y el recuento de referencias fuertes es -1 en el destructor sp. Cuando el recuento de referencias fuertes se reduce a 0, la referencia objeto es destruido, de esta manera se realiza la liberación automática del objeto.

Cuando un puntero débil se refiere a otros objetos, el recuento de referencias débiles es +1 y el recuento de referencias débiles es -1 en el destructor wp. Cuando el recuento de referencias fuertes es 0, el objeto referenciado se destruirá independientemente de si la referencia débil el recuento es 0 o no.

Cómo resolver el problema de referencia circular

Solo confiar en el método de recuento de referencias fuertes tendrá el problema de las referencias circulares, lo que hará que el objeto nunca se libere. Las referencias débiles se utilizan específicamente para resolver el problema de referencias circulares:

Si A hace una fuerte referencia a B, entonces B necesita usar una referencia débil al hacer referencia a A. Al juzgar si es un objeto inútil, solo el recuento de referencias fuertes se considera 0, y el número de recuentos de referencias débiles no se refiere.

Esto resuelve el problema de que el objeto no se puede liberar debido a la referencia circular, pero esto causará el problema del puntero salvaje: cuando B quiere acceder a A a través de un puntero débil, A puede haber sido destruido, y el puntero débil a A se convierte en un puntero salvaje Arriba. En este caso, significa que A ya no existe, y se necesitan otras operaciones como la recreación

Reglas de personalización del puntero inteligente

Los punteros inteligentes no son fijos "cuando el recuento de referencias fuertes es 0, el objeto referenciado se destruirá independientemente de si el recuento de referencias débiles es 0", pero las reglas se pueden personalizar. RefBase proporciona el método extendObjectLifetime (), que se puede usar para establecer las reglas del contador de referencia. Las diferentes reglas tienen diferentes juicios sobre el momento de eliminar el objeto de destino, incluidas las siguientes tres reglas:

  • OBJECT_LIFETIME_STRONG: El objeto se destruirá solo cuando el valor del contador fuerte en el espacio de memoria de este objeto sea 0

  • OBJECT_LIFETIME_WEAK: El objeto se destruirá solo cuando los valores del contador fuerte y del contador débil en el espacio de memoria de este objeto sean ambos 0

  • OBJECT_LIFETIME_MASK: No importa si estos dos contadores son 0, el objeto no se destruye, es decir, es lo mismo que un puntero normal, o tienes que liberar manualmente el objeto por ti mismo

Al final

Los estudiantes que quieran saber más sobre la entrevista de Dachang pueden ** hacer clic aquí para obtener el "Documento de la entrevista" de forma gratuita **. Además, también comparto algunos recursos gratuitos de alta calidad, que incluyen: PDF de aprendizaje de Android + video de arquitectura + notas de origen , tecnología de arquitectura avanzada mapa cerebral avanzado, materiales de temas de entrevistas de desarrollo de Android, materiales de arquitectura avanzada avanzada estas piezas de contenido. Comparte con todo el mundo, es muy adecuado para amigos que tengan entrevistas en un futuro próximo y quieran seguir mejorando en el camino de la tecnología. Ven y consigue materiales de aprendizaje ~

Supongo que te gusta

Origin blog.csdn.net/a132445/article/details/113106514
Recomendado
Clasificación