Altın üç gümüş dört: 2019'daki gerçek röportajın özeti, bu Android mülakat sorularına ihtiyacınız var

Toutiao'nun bugün ekran uyarlaması ilkesi?

1: Önce yoğunluğu hesaplayın, hesaplama formülü: mevcut cihaz ekranının toplam genişliği (piksel cinsinden) / tasarım çiziminin toplam genişliği (dp cinsinden) = yoğunluk yoğunluğu, 1 dp'nin mevcut cihazı kapladığı piksel anlamına gelir.Yoğunluğun hesaplanmasının nedeni: yerleşim dosyasında Doldurduğunuz birim sonunda piksele dönüştürülecektir. Sistem, projenin herhangi bir yerinde doldurduğunuz birimi piksele dönüştürmek için yukarıdaki yöntemi kullanır.

Ancak, Toutiao'nun varsayılan projesi, uyarlama için karşılaştırma ölçütü olarak yalnızca yükseklik veya genişlik değerlerinden birini kullanabilir.

Android'deki takviye ve kullanım platformunu kısaca açıklar mısınız?

  • Güçlendirme: Kod ayrıştırmasını önleyin ve kod güvenliğini artırın
  • Üçlü platformu, Bang Bang güvenliğini, 360 güçlendirme, aşk şifrelemesini vb. Güçlendirin.

Fark: Bangbang güvenliği, 360 donatı projedeki sınıfları göremiyor, Java sınıflarını görmek için şifrelemeyi seviyor, ancak içerideki yöntem uygulamasını göremiyor, etkisi öncekinden biraz daha kötü.

Temel güçlendirme ilkesi: Üçüncü taraf güçlendirme uygulaması bir Apk oluşturacak ve ardından APK'nızı okuyup üçüncü taraf uygulamasının APK'sinde paketleyecektir.

APK'da nasıl kilo verilir?

1) Karışıklık kullanın, 2) Kullanılmayan resimleri piksele dönüştüren shrinkResourse'u (küçült-küçült) açın 3) Yararsız dil kaynaklarını silin (uluslararasılaştırılmış dosyaları silin) 4) Şeffaf olmayan büyük resimler için kullanın JPG (şeffaflık bilgisi olmadan), PNG formatı yerine 5) Görüntü sıkıştırma için tinypng kullanın 6) Görüntü kaynaklarını daha fazla sıkıştırmak için webp görüntü formatını kullanın 7) Üçüncü taraf paketleri kullanırken, tüm paketin alıntılanmasını önlemek için projeye kullanılan kodu ekleyin Üçüncü taraf kitaplığı

Birden çok kanalın kısa açıklaması Paketi ve İlke ve ortak operasyon?

Her kanal için (uygulama pazarı), kanal kimliğine sahip bir apk dosyası oluşturulur

Prensip: Kullanıcı uygulamayı indirir ve başlatır, kanal kimliğini ve cihazın benzersiz kimliğini alır ve sunucuya yükler.Sunucu, elde edilen kayda ve kanal numarasına göre sunucu tablosunda var olup olmadığına karar verir. (Mark, al Mark, yükle işareti)

1) Youmeng çok kanallı paketleme: Manifest dosyasında bir yer tutucu tanımlayın ve gradle komut dosyasındaki yer tutucuyu değiştirin (Python kullanılacaktır)

2) Meituan paketleme, meta-verilerde boş bir dosya oluşturun, kanalı dosya adıyla tanımlayın ve bir açma ve sıkıştırma işlemi yapın, hız daha hızlı olacaktır

3) Yeni nesil çok kanallı paketleme, kanal tanımlayıcısını .apk dosyasının sonuna eklemek kaynak dosyaya zarar vermez

Android'deki veri depolama yöntemleri nelerdir?

1) Doğrudan dahili dosyalarda saklanan dahili depolama 2) Harici depolama, önce harici depolama koşullarının mevcut olup olmadığını belirleyin ve ardından depolayın 3) SP depolama, alt katman Xml tarafından uygulanır ve dahili veriler uygun anahtar-değer çiftleri şeklinde saklanır Hafif depolama için depolanan veri türleri boolean, String, int 4) veritabanı depolama, SQlite depolama, hafif veritabanı, güçlü ekleme, silme, değiştirme ve sorgu işlevleri 5) içerik sağlayıcı, ContentProvider, ifşa etmek istediğiniz şeyleri ortaya çıkaracaktır Verilerin bir kısmı harici kullanım ve çalıştırma içindir 6) Ağ depolama vb.

Sharepreference iş parçacığı güvenlik sorunu?

Resmi belge, SharedPreferences'ın çoklu iş parçacığını desteklemediğini ve sürecin güvenli olmadığını açıkça belirtti.

İş parçacığı güvenliğini sağlamak istiyorsanız, arayüzünü aşağıdaki gibi yeniden uygulamanız gerekir.

SharePreferences'a çok işlemli erişim durumunda, işlem güvenliğinin nasıl sağlanacağını ve verilerin nasıl paylaşılacağını varsayarsak?

Çözüm, verileri paylaşması ve bunları tek bir dosyada saklaması gereken alanları ortaya çıkarmaktır.

Android geliştirme altında ekran uyarlaması nasıl etkin bir şekilde gerçekleştirilir?

1: Model uyarlaması, Youmeng gibi bazı istatistiksel web sitelerine gidin, şimdi piyasadaki en popüler Android modellerine bakmak için Youmeng + 'yı arayın ve resimleri buna göre kesin

2: Ekran uyarlama, ana akım xhdpi ekran boyutuna uyum sağlama, göreli düzen, çizgi düzeni ve diğer düzenleri kullanma, eşleştirme şeffaflığı, sarma içeriği kullanma ve ağırlık ve ağırlık işleme ile işbirliği yapma,

3: Belirli bir boyuta tasarlanmış kodda dp2px dönüşümü de vardır,

4: Resim uzatılabilir 9 resim ve görüntü görünümü yakınlaştırmak için ölçek türünü kullanır;

5: Ağırlıklar, eşit oranlar, yüzde düzenleri vb. Kullanın.

Nesne serileştirme:

Neden serileştirmelisiniz?

1) Nesneyi kalıcı olarak kaydedin ve nesnenin bayt sırasını yerel bir dosyaya kaydedin; 2) Nesneyi ağ üzerinden serileştirme yoluyla geçirin; 3) Nesneyi serileştirme yoluyla işlemler arasında geçirin.

Android'de serileştirmeyi uygulamak için iki seçenek vardır: Biri Serializable arayüzü (JavaSE tarafından desteklenen) uygulamak, diğeri ise Parcelable arayüzü uygulamaktır (bu Android'in benzersiz bir işlevi. Serializable arayüzü uygulamaktan daha etkilidir. Intent veri aktarımı için kullanılabilir. İşlemler arası iletişim (IPC) için kullanılabilir). Serileştirilebilir arabirimi uygulamak çok basittir, sadece bunu beyan edin, Parcelable arabirimini uygulamak biraz daha karmaşıktır, ancak daha etkilidir.Bu yöntem performansı artırmak için önerilir. İki uygulama yöntemi, herkesin hızlı bir şekilde sorgulaması için uygun olan URL'yi göndermeye devam ediyor

İki serileştirme ile ilgili

Google, Parcelable serileştirmeyi önerdiğinden, burada tek tıklamayla serileştirilmiş eklentiler oluşturmanız önerilir.

Aşağıdaki şekilde gösterildiği gibi Android Studio'da eklentiyi arayın, serileştirme yazın (hiç yazmanıza gerek yok) bu bir güzellik ~

OkHttp ile ilgili mi?

OkHttp eşzamanlı ve eşzamansız veri isteklerini destekler, ancak eşzamansız istekler alt iş parçacıklarında yapılır (çünkü geri çağrı yöntemi yerel OkHttp kullanılırken alt iş parçacıklarında gerçekleştirilir, arabirimi yenilemek için İşleyiciyi kullanmanız gerekir, üçüncü taraf okhttp-utils kullanabilirsiniz, Okgo, vb.);

OkHttp, iş parçacığı havuzunu, veri dönüşümünü, GZIP sıkıştırmasını (trafik aktarımını azaltmak için), HTTP protokolü önbelleğe alma vb.

OKHttp avantajları - iletilen veri miktarını azaltmak, önbelleğe almak (tekrarlanan istekleri azaltmak) için GZip sıkıştırmasını kullanır;

Başarısızlık durumunda yeniden dene (hizmetinizin birden fazla IP adresi varsa, ilk bağlantı başarısız olursa, OKHttp alternatif adresi kullanacaktır)

OKhttp, http protokolünün nispeten düşük seviyeli bir kapsüllemesidir, bu nedenle oldukça ölçeklenebilir ve kapsüllenmesi kolaydır;

OKhttp, NIO'ya (JDK1.5, engellemesiz GÇ) göre daha verimlidir

ButterKnife ile ilgili?

Giriş:

Hızlı ve verimli bir enjeksiyon çerçevesi, geliştirme süresinden tasarruf sağlar ve kod miktarını azaltır (dinamik olarak Görünüm oluşturmak için eklentilere, tıklama olayları vb.)

avantaj:

1. Güçlü Görünüm bağlama ve Tıklama olay işleme işlevleri, kodu basitleştirir ve geliştirme verimliliğini artırır 2. Adaptördeki ViewHolder bağlama sorununu rahat bir şekilde ele alın 3. Çalışma süresi sırasında APP'nin verimliliğini etkilemez ve kullanımı ve yapılandırması uygundur 4. Kod açıktır ve Okunabilir

Deneyim:

1.Activity ButterKnife.bind (this); setContentView () 'dan sonra olmalıdır; ve üst sınıf bağlama bağlandıktan sonra, alt sınıfın tekrar bağlanmasına gerek yoktur

2.Fragment ButterKnife.bind (this, mRootView);

3. Öznitelik düzeni özel veya statik olarak değiştirilemez, aksi takdirde bir hata bildirilir (izinlere dikkat edin)

4. setContentView () ek açıklamalarla uygulanamaz. (Diğer bazı ek açıklama çerçeveleri bunu yapabilir)

İlke: Bağlı ViewID'yi elde etmek için açıklama ve yansıtma kullanın,

İlkeyle ilgili ayrıntılar için lütfen yazarın şu makalesine bakın: Android'e özel özel ButterKnife çerçevesi, bu makale ButterKnife çerçevesini ayrıntılı olarak tanıtır ve ek açıklama bağlama için bir çerçeve taklit eder.

Rxjava kavramları, ortak operatörler ve uzantılar?

Giriş:

Önceki AsyncTask / Handler / XXX / yerine geçen zarif bir zaman uyumsuz çerçeve

Güçlü operatörleri ve zincir yazımı, iş parçacığı değiştirme vb., Geliştirme verimliliğini artırmaya ve hataları hızla bulmaya yardımcı olur

Retrofit ile kullanıldığında beklenmedik etkileri vardır.

Temel ilke: gözlemci modu

Bazı ilgili blogları bekleyin

Dezavantajları:

1: Çok fazla operatör, öğrenme süresinin maliyetini artıracak

2: Kötü kullanım kolaylıkla bellek sızıntılarına yol açabilir (çözüm, bellek sızıntısı riskini önlemek için Rxlifecycle'ın Rxjava ile birlikte kullanılmasını önermektir)

ANR ile ilgili

ANR'nin tam adı, "yanıt vermeyen uygulama" olan Uygulama Yanıt Vermiyordur. İşlem bir süre işlenemediğinde, sistem yukarıdaki şekilde gösterildiği gibi ANR iletişim kutusunu açacaktır.

Android'de, Uygulamanın yanıt verme hızı Etkinlik Yöneticisi ve Pencere Yöneticisi sistem hizmetleri tarafından izlenir. Genellikle aşağıdaki iki durumda ANR iletişim kutusu açılır:

A) Kullanıcı girişi olaylarına (klavye girişi, dokunmatik ekran vb.) 5 saniye içinde yanıt veremez.

B) BroadcastReceiver 10sn içinde bitemez.

Yukarıdaki iki durumun birincil nedeni, ana iş parçacığında (UI iş parçacığı) dosya okuma ve yazma, veritabanı okuma ve yazma, ağ sorgusu vb. Gibi çok fazla engelleme ve zaman alan işlemin yapılmış olmasıdır.

ANR nasıl analiz edilir?

ANR oluşturulduğunda, sistem bir traces.txt dosyası oluşturacak ve bunu / data / anr / altına yerleştirecektir. Geliştiriciler bunu adb komutu ($ adb pull data / anr / traces.txt) aracılığıyla yerel olarak dışa aktarabilir. Anr nedenini belirli günlüğe göre kontrol edebilirsiniz (örneğin: normal engelleme, CPU tam yük, bellek sızıntısı)

Android'de hangi sahneler ana iş parçacığında yürütülüyor?

1) Etkinlik yaşam döngüsü geri aramaları ana iş parçacığı üzerinde yürütülür.2) Hizmet, varsayılan olarak ana iş parçacığı üzerinde yürütülür. 3) BroadcastReceiver'ın onReceive geri araması ana iş parçacığı üzerinde yürütülür.4) Alt iş parçacığını kullanmayan lüperin İşleyicisinin handleMessage'ı , post (Runnable) ana iş parçacığında yürütülür. 5) doInBackground dışında, AsyncTask'ın geri çağrısı ana iş parçacığı üzerinde yürütülür. 6) Viewun gönderisi (Çalıştırılabilir) ana iş parçacığında yürütülür.

Üç seviyeli önbellek:

Resimleri veya diğer kaynakları almak için uygulamayı ilk kez açtığımızda, önce indirmek için ağa gidin ve ardından bunları hafıza önbelleğinde, disk önbelleğinde saklayın,

Yeni indirdiğimiz resmi tekrar kullanmamız gerektiğinde, İnternet üzerinden tekrar tekrar indirmemize gerek kalmaz, onu doğrudan önbellekten ve disk önbelleğinden bulabiliriz çünkü önbellek daha hızlıdır, önbelleğe öncelik veririz Resmi bulun ve varsa kullanın,

Bulunmazsa (önbellek boyutu sınırlıdır), o zaman onu disk önbelleğinde arayacağız.

Bu üç önbelleğe alma katmanının kullanımını makul bir şekilde koordine ettiğimiz sürece, uygulama performansını artırabilir ve kullanıcılara daha iyi bir deneyim sağlayabiliriz.

Üç seviyeli önbellek şu anlama gelir: önbellek, yerel önbellek ve ağ önbelleği. İlgili özellikleri, bellek önbelleğinin hızlı olması, ilk önce okunması ve yerel önbellek hızının ikinci olmasıdır.Eğer bellekte kaynak bilgisi yoksa, yerel bellek okunur.Ağ önbelleği daha yavaştır (karşılaştırma nesnesi, bellek önbelleği ve yerel önbellektir), yerel bellek varsayılırsa Hayır, sadece ağdan almasını isteyin.

Bellek sızıntısı:

Uygulama içinde bir örneğe artık ihtiyaç duyulmadığında, ancak nesneye yine de referans verildiğinde, bu duruma bellek sızıntısı denir. Android sanal makine her uygulama için belirli miktarda bellek alanı ayırır Bellek sızıntısı belirli bir düzeye ulaştığında bellek taşmasına neden olur.

Bellek sızıntılarının yaygın nedenleri:

1) Statik değişkenler doğrudan veya dolaylı olarak Activity nesnesine atıfta bulunur, bellek sızıntılarına neden olur

2) Etkinlik statik bir Görünüm kullanır (Görünüm, Etkinlik nesnesine bir referansı tutacaktır)

3) Etkinlik, statik Görünüm değişkenlerini tanımlar ???

4) ImageSpan referansları Etkinlik Bağlamı

5) Etkinlik Bağlamına tekli olarak başvurulur (Uygulama Bağlamı gereklidir)

6) BraodcastReceiver, ContentObserver, File, Cursor, Stream, Bitmap vb. Kaynaklar için, Aktivite yok edildiğinde zamanında kapatılmalı veya çıkışları yapılmalıdır, aksi takdirde bu kaynaklar geri dönüştürülmeyecek ve bellek sızıntılarına neden olacaktır.

7) Statik koleksiyonda depolanan nesneler zamanla ortadan kaldırılmaz (kullanılmadığında null olarak ayarlanır)

8) Java'da, statik olmayan (anonim) iç sınıflar dış sınıf nesnelerine başvururken, statik iç sınıflar dış sınıf nesnelerine başvurmaz.

9) Activity'de, statik olmayan bir iç sınıfın statik bir üye değişkeni (iç sınıf doğrudan veya dolaylı olarak Aktiviteye başvurur) oluşturulur.

10) İş parçacığı AsyncTask kullanımını içerir, iş parçacığı Activity'den çıktıktan sonra çalışmaya devam eder (iş parçacığı sonsuz döngüdedir) ve Activity veya view nesnesi iş parçacığında kullanılır (çözüm: sonsuz döngüyü doğrudan yazmayın, boolean TAG ayarlayabilirsiniz, Aktivite başlatıldığında TAG'ı False olarak ayarlayın)

11) İşleyici nesnesinin kullanımı, İşleyicinin Etkinlikten çıktıktan sonra hala işlenecek bir mesajı vardır (çözüm: etkinlikten çıktıktan sonra mesajı kaldırın)

12) WebView'dan kaynaklanan bellek sızıntısı (onDestory'de yok edildi)

Bellek sızıntı analizi nasıl yapılır?

C: Bellek ayırmayı kontrol etmek için Android Studio penceresinden analiz edin. İşletim uygulaması belleğin artmaya devam etmesi durumunda bellek sızıntısı olduğu anlamına gelir

B: Bellek sızıntı analizini bulmak için bir araç-MAT (Bellek Çözümleyici aracı)

C: Bellek sızıntılarını hızlı bir şekilde bulmak için açık kaynak kitaplığı LeakCanary'yi kullanın

Android'deki dört ana bileşen birbiriyle ilgili mi?

Aktivite:

Aktivite, kullanıcıların bir görevi tamamlamak için etkileşimde bulunabilecekleri bir ekran (dar anlamda, mevcut APP'nin arayüzüdür) sağlayan bir uygulama bileşenidir. (Tıklayın, giriş yapın, sayfayı atlayın)

Activity'deki tüm işlemler, kullanıcıyla yakından ilgilidir ve kullanıcıyla etkileşimden sorumlu bir bileşendir. Belirtilen kontrol (düzen dosyasını ayarlama) setContentView (View) aracılığıyla görüntülenebilir.

Bir android uygulamasında, Aktivite genellikle bazı kontrolleri görüntüleyebilen ve ayrıca kullanıcı olaylarını dinleyip yanıtlayabilen ayrı bir ekrandır.

Etkinlik dört başlangıç modu?

Aktivitenin başlangıç modu, karşılık gelen başlangıç modunun, gerçek geliştirme ihtiyaçlarına göre Aktivite için ayarlanabileceği, böylece çok sayıda tekrarlanan aktivite oluşturma gibi sorunların önlenebileceği anlamına gelir.

1) standart

Standart, Activity'nin varsayılan başlangıç modudur ve konfigürasyonu yazmanıza gerek yoktur. Bu modda, varsayılan olarak yeni bir örnek oluşturulur. Bu nedenle, bu modda birden çok özdeş durum olabilir ve birden çok özdeş faaliyetin örtüşmesine izin verilir. (Yığın sırasına göre sırayla çıkmak için geri düğmesine tıklayın)

2) singleTop

SingleTop modunda, Etkinlik birden çok örneğe sahip olabilir, ancak birden çok özdeş etkinliğin çakışmasına izin verilmez. Diğer bir deyişle, Activity yığının en üstündeyse ve aynı Activity başlatılırsa, yeni bir örnek oluşturulmayacak, ancak onNewIntent yöntemi çağrılacaktır.

3) tek görev

singleTask, yalnızca bir örnek olduğu anlamına gelir. Aynı uygulamada onu başlatırken, Activity mevcut değilse, mevcut görevde yeni bir örnek oluşturulacak, eğer varsa, görevde üstündeki diğer aktiviteler yok edilecek ve onNewIntent metodu çağrılacaktır. . Başka bir uygulamada başlatılırsa, yeni bir görev oluşturulur ve etkinlik görevde başlatılır.Tek Görev, diğer etkinliklerin bir görevde onunla birlikte var olmasına izin verir, yani bu singleTask örneğindeysem Ardından yeni Activity'i açın, yeni Activity singleTask örneğinin görevinde olmaya devam edecektir.

4) singleInstance

Yalnızca bir örnek vardır ve bu örnek bir görevde bağımsız olarak çalışır. Bu görevde yalnızca bu örnek vardır ve başka hiçbir Aktiviteye izin verilmez.

BraodcastReceiver: (eklenecek)

Tasarım modelindeki gözlemci modeli kullanılır: mesaj bazlı bir yayınlama / abone olma olay modeli.

Kaydolmanın iki yolu vardır: statik kayıt ve dinamik kayıt

ContentProvider: (eklenecek)

Dış dünya, ContentProvider'daki (içerik sağlayıcı) verilere ContentResolver arayüzü üzerinden erişebilir. Uri Evrensel Kaynak Tanımlayıcı (Evrensel Kaynak Tanımlayıcı) Uri, işlenecek verileri temsil eder ve Android görüntülerinde, video kliplerinde vb. Bulunan her kaynak, Uri ile temsil edilebilir. ContentProvider veri paylaşımı, dış dünyaya açık birleşik bir arayüz tanımlanarak elde edilir. Ancak, uygulama bu yöntemleri doğrudan çağırmaz, bunun yerine yöntemlerini çağırmak için bir ContentResolver nesnesi kullanır. ContentResolver, herhangi bir içerik sağlayıcıyla konuşabilir ve ilgili tüm etkileşimli iletişimleri yönetmek için onunla işbirliği yapabilir. Harici bir uygulamanın ContentProvider'da veri eklemesi, silmesi, değiştirmesi ve sorgulaması gerektiğinde, tamamlamak için ContentResolver sınıfını kullanabilir. ContentResolver nesnesini almak için Context tarafından sağlanan getContentResolver () yöntemini kullanabilirsiniz.

IntentService:

IntentService, sıradan Hizmetten ek işlevler ekleyen bir Hizmet alt sınıfıdır. IntentService, tüm Intent isteklerini işlemek için ayrı bir çalışan iş parçacığı oluşturur; çoklu iş parçacığı sorunlarıyla uğraşmaya gerek kalmadan onHandleIntent () yöntemi tarafından uygulanan kodu işlemek için ayrı bir çalışan iş parçacığı oluşturur; tüm istekler işlendikten sonra IntentService otomatik olarak durur, geliştirici Hizmeti durdurmak için stopSelf () yöntemini manuel olarak çağırmaya gerek yoktur;

System.exit (0), onDestory () ve Activity.finish () arasındaki farkı kısaca açıklayın

1) System.exit (0), programı normal şekilde sonlandırmanız, mevcut işlemi sonlandırmanız ve tüm Uygulamayı hedeflemeniz içindir.

2) onDestory () yöntemi, Etkinlik yaşam döngüsünün son adımıdır ve kaynak alanı vb. Geri dönüştürülür. Bu Aktiviteyi yeniden girdiğinizde, yeniden oluşturmanız ve onCreate () yöntemini çalıştırmanız gerekir.

3) Activity.finish () Bu yöntemi çağırdığınızda, sistem yığının üstündeki Activity'i kaldırır ve onDestory () yöntemini zamanında çağırmaz, yani işgal edilen kaynaklar zamanında serbest bırakılmaz.

Görüntü optimizasyonu ve Picasso, Fresco, Glide vb. Gibi görüntü yükleme çerçevelerinin kullanımı?

1) Resimleri sıkıştırmak için küçük resimleri, bitmapfactory.options resim yapılandırma sınıfını, yakınlaştırmak için basitleştirmeyi, resimlerin kodlama yöntemini ayarlamayı deneyin; resimlere yumuşak referanslar kullanın ve yeterli bellek olmadığında resim belleğini hemen bırakın; resimleri yeniden kullanın, Üç seviyeli önbellek kullanımı;

Artık kullanılmayan bitmap nesnelerini hemen geri kazanın;

2) Picasso, gif'i desteklemez, önbellek büyük miktarda bellek alan Argb8888'in orijinal görüntüsüdür, görüntünün çerçevesi OkHttp önbellek mekanizmasını kullanır, önbelleğe almak için Http protokolünü kullanır ve ayrıca eşzamansız olarak yüklenir.

3) Fresco, çerçeve FaceBook tarafından başlatılır, resimlerin toplu yüklenmesi için uygundur, alt katman üç seviyeli önbellekten geçer (seviye 2 bellek, seviye 1 disk)

Başarıyla yüklendikten sonra hedef görüntü ile otomatik olarak değiştirin

4) Google tarafından 14 yıl içinde piyasaya sürülen Glide, GIF görüntülerini yükleyebilir veya temel ilke olan görüntü tanımını belirleyebilir: Bitmap için bir nesne havuzu sağlamak; nesne havuzunun amacı, yeniden kullanılacak nesnelerin tahsisini azaltmaktır Performansı artırın. Nesne havuzları, kaydırma performansını iyileştirmeye de yardımcı olabilir. API basit ve aranması kolaydır

İşle ilgili:

İşleyici iş akışı temel olarak dört bölümden oluşur: İşleyici, Döngüleyici, Mesaj ve MessageQueue. Ancak günlük gelişimimizde genellikle yalnızca İşleyici ve Mesaj sınıflarını kullanırız. Mesaj, mesajların taşınmasından sorumludur.Mesajları işaretlemek için bir hedef vardır, içeriği depolamak için obj kullanılır ve Mesaj dağıtımı ve işlemesinden Handler sorumludur.

Handler genel gelişimde nasıl kullanılır?

Çocuk iş parçacığındaki kullanıcı arabiriminin güncellenmesine resmi olarak izin verilmez, bu nedenle kullanıcı arabirimini doğrudan işlemci İşleyicisine güncellemesi gereken mesajları göndeririz ve İşleyicinin handleMessage () yöntemini geçersiz kılarak UI ile ilgili işlemleri gerçekleştiririz.

Sapı kullanırken dikkat edilecek bir şey yok mu?

Evet, İşleyici özel değişken olarak ayarlanmışsa, Android Studio bellek sızıntısına neden olabileceğine dair bir uyarı bildirir. Bu durumda, bunu statik dahili sınıf + zayıf başvuru olarak ayarlayabilir veya Handler.removeCallbacksAndMessages (onDestroy () yönteminde null çağırabilirsiniz ) Önlenebilir

İşleyicinin genel iş akışı analizi aşağıdaki dört adıma bölünmüştür:

Eşzamansız iletişim hazırlığı = > Mesaj kuyruğa alma = > Mesaj döngüsü = > Mesaj işleme

A: Eşzamansız iletişim için hazırlık

I: İşleyicinin ana iş parçacığında oluşturulduğunu varsayarsak, işlemci nesnesi Looper, ileti kuyruğu nesnesi MessageQueue ve İşleyici nesnesi doğrudan ana iş parçacığında oluşturulacaktır.

Looper ve MessageQueue'nun kendi oluşturma iş parçacığına ait olduğuna dikkat edilmelidir.

II: Looper nesneleri genellikle Looper.prepareMainLooper () ve Looper.prepare () iki yöntemle oluşturulur, Looper nesneleri oluşturulurken MessageQueue otomatik olarak oluşturulur.

III: MessageQueue oluşturduktan sonra, Looper otomatik olarak mesaj döngüsüne girecektir. Bu noktada, İşleyici otomatik olarak ana iş parçacığının Looper ve MessageQueue'yu bağlar.

B: Mesaj takıma katılır

Çalışan iş parçacığı, mesajı İşleyici aracılığıyla MessageQueue'ya gönderir ve mesaj içeriği genellikle UI işlemleridir. Mesaj gönderme genellikle Handler.sendMessage (Message msg) ve Handler.post (Runnaber) olmak üzere iki yöntemle gerçekleştirilir. Kuyruk genellikle MessageQueue.enqueueeMessage (Message msg, long when) aracılığıyla işlenir.

C: Mesaj döngüsü

Temel olarak iki adıma bölünmüştür: "mesaj sırasını kaldırma" ve "mesaj dağıtımı". Looper, MessageQueue mesaj kuyruğundaki mesajı bir döngü aracılığıyla alır ve mesajı oluşturan işleyiciye dağıtır. Mesaj sırası MessageQueue mesaj döngüsü sırasında boşsa, iş parçacığı engellenir.

D: mesaj işleme

İşleyici, Looper tarafından gönderilen mesajı alır ve işlemeye başlar.

genişletmek

Önce kısaca kendinizi tanıtır mısınız?

Analiz: Mülakatı yapan kişiye basit bir kişisel tanıtıma ek olarak, mülakatı yapan kişiye meslek için sahip olmanız gereken bazı özelliklerinizi de göstermeniz gerekir.

Örneğin, iş görüşmesi programcısının dolaylı olarak görüşmeciye düşünme, ayrıntılarla ilgilenme, rasyonel düşünme, varsayımsal argümantasyon, vb. Konusunda titiz olduğunu ifade etmesi gerekir; iş görüşmesi ürünleri vb., Görüşmeciye ürün hakkındaki görüşlerini kendi hikayelerinden bazıları aracılığıyla dolaylı olarak göstermesi gerekir. Ve benzersiz düşünen kişilik vb.

Giriş noktası: kendi özelliklerinin pozisyonun beklenen ihtiyaçlarını karşılayıp karşılayamayacağı

Hobileriniz ve uzmanlık alanlarınız nelerdir?

Şirketlerin ve görüşmecilerin gözünde, işe başvuranın hobileri ile iş pozisyonu bazı açılardan olumlu bir şekilde ilişkiliyse, ilgileneceklerdir. Görüşmeciler ayrıca değerlerinin kurum kültürüne uygun olup olmadığını ve adayların çıkarları aracılığıyla çalışma ekibine iyi uyup uymadıklarını da değerlendireceklerdir. İş başvuru sahibinin cevapları mülakata puan katabilir.

Aşağıdaki hobilerin yansıttığı bazı kişilikler ve kariyer yönleri referans içindir:

1. Basketbol, futbol, voleybol: takım ruhu, çoğu pozisyon için uygundur. 2. Go, satranç: stratejik farkındalık, pazar veya üst düzey pozisyonlar için uygundur. 3. Okuma, klasik müzik: zarif, sivil konumlara uygun. 4. Seyahat: Farklı ortamlara uyum sağlama yeteneği, hızlı öğrenme yeteneği, satış ve iş pozisyonlarına uygun. 5. Dans: Giden, iletişim kurması kolay, halkla ilişkiler ve pazarlama pozisyonlarına uygun.

Kendiniz için beklentileriniz ve planlarınız nelerdir?

Analiz: Yüzeyde, kariyer geliştirme planı siz (iş arayan), pozisyon ve şirket arasındaki uzun vadeli uyuma bakmaktır, ancak aslında bu kadar büyük bir sorun üç gözle veya iki dilde net bir şekilde ifade edilemez. Görüşmeci (İK veya profesyonel departman ne olursa olsun) esas olarak soruları cevaplarken net bir fikriniz olup olmadığına ve cevapta iş tutumunuzun ne olduğuna bağlıdır Bu arada, şirket ve pozisyon hakkında yeterli bilgiye sahip olup olmadığınıza bakın. Yani cevap ne olursa olsun, en önemli şey kayıp olmamaktır.

Giriş noktası: Kendi özelliklerini korumak, geleceğe yönelik beklentileri ve planları net bir şekilde ifade etmek ve hızlı düşünmek

Güçlü ve zayıf yönleriniz hakkında konuşur musunuz?

İlk önce dezavantajlar hakkında konuşun:

Teknik mülakatlar temelde pozisyondaki gelecekteki meslektaşlar ve amirler tarafından yapılır. Bu tür bir görüşme oldukça tekniktir ve davranış problemi esas olarak işi gerçekten yapmak isteyip istemediğinizi (bir sıçrama tahtası olmaktan veya iyi bir maaşla geldiğinizi duymak yerine) ve kişiliğiniz ile kültürünüzün eşleşip eşleşmediğini inceler. Tüm yanıtlar bu iki nokta etrafında düzenlenmelidir (yani, her deneyim bu deneyim yoluyla öğrendiklerinize, pozisyon için gerekli temel becerilere, bu deneyimler neden bu işi yapmayı istemenize neden olur ve deneyimin sizi neyi yansıttığına dönmelidir. Bir tür kişisel tarz). İyi bir cevap olduğu için bu soru üzerinde iyi bir izlenim bırakmak zordur.

Anahtar, kötü bir izlenim bırakmaktan kaçınmaktır.

Ana noktalar aşağıdaki gibidir:

1) En önemlisinden kaçının ve eksiklik olmayan bir eksiklikten bahsetmeyin. Örneğin, geç saatlere kadar ayakta kalmak sizi uykulu hale getirecek veya çok kibar olmanıza neden olacaktır.

2) Duygusal temizlik, seçici yiyiciler, kız arkadaşlarla alışverişte iyi olmayanlar ve genellikle yemek yapmayı bilmedikleri zaman yemek yapan kişiler gibi profesyonel olmayan eksikliklerden bahsetmekten kaçının.

3) İyileştirilemeyen zayıflıklardan bahsetmekten kaçının. Örneğin, matematik için hesap makinesi kullanmalıyım. Kitap okurken anlamıyorum.

4) Tuhaf bir öfke, işbirliğinden hoşlanmama, geç gelme ve erken ayrılma gibi ölümcül zayıflıklardan bahsetmekten kaçının.

Hakkında konuşulacak en iyi şey nedir? Bence üç ana nokta var:

1) Halihazırda düzeltilmekte olan eksiklikler / düzeltilmesi gereken net bir planı olan eksiklikler hakkında konuşun. Özellikle de yakın gelecekte çözülebilecek eksiklikleri tam olarak gösterebilirseniz.

2) Güçlü yönlerinizi düzeltmek için kullanan ve bu arada bir avantaj ortaya çıkaran bir eksiklik hakkında konuşun. (Bu daha verimli bir iletişim becerisidir)

Nispeten iyi cevap:

1) Ayrıntıları takip etmek gibi, proje / iş programa göre tamamlanamaz. Zaman yönetimi becerisiyle çalışma şeklini değiştirin, önce çerçeveyi tamamlayın ve ardından çözülecek ayrıntıları iyileştirin;

2) Nasıl reddedeceğimi bilmiyorum ve meslektaşlarım yardım istiyor, bu da iş ilerlememi etkiliyor. Çoklu görev yeteneği ile öncelik sırasını belirleyin, üzerinde çalıştığınız meslektaşınıza göstermek için öncelik listesini kullanın ve ona ne zaman yardım edebileceğine dair bir tahmin verin, böylece yardım isteyen kişi yardım isteyip istemeyeceğine ve sorunu çözebilir.

3) Aynı sorunun çözümüne gelince, ekip üyelerinin kendi teknik tercihleri ve teknik kompozisyonu farklı olduğu için iletişim engelleri oluşturmak ve proje planını etkilemek kolaydır.Bu nedenle verimli ve etkili iletişim yöntemlerini ve çalışma becerilerini öğrenmeleri gerekir.

Sonunda

Son olarak şunu söylemek istiyorum: Sadece anlamanız gereken değil, aynı zamanda onları iyi ifade edebilmeniz için görüşmeyi yapan kişinin, görüşmede olmazsa olmaz bir soru olan İşleyici mekanizması gibi anlayışınızı tanıyabilmesi için bazı şeyler var. Bazı belirsiz noktalar var, belki sadece röportajda yaşıyor, gerçek işte hiç kullanmayacaksın ama ne olduğunu bilmelisin.

Altın, gümüş ve gümüş röportajları için en yoğun sezon olmak üzere. Herkes favori bir iş bulmak için bu fırsatı değerlendirmeyi umuyor. Ama ne olursa olsun, görüşmenin boyutu ne olursa olsun, görüşmeci tarafından istismar edilmekten kaçınmak istiyorsanız, görüşme sorularını en üst düzeye çıkarmalı ve kapsamlı bir hazırlık yapmalısınız.Elbette buna ek olarak barış zamanında da sağlam bir temel atmalısınız. Yani görüşmeyi yapan kişi kendi bilgisine nasıl girerse girsin, bununla başa çıkabilirsiniz ~

Röportaj: Tam bir röportaj için hazırlanmazsanız, bu zaman kaybı olur ve kendinize karşı sorumsuz olursunuz!

Son olarak, buradaki editör, yukarıdaki teknik sistem şemalarıyla ilgili düzinelerce set koleksiyonunu paylaşıyor. Tencent, Toutiao, Ali, Meituan ve diğer şirketlerden 19 yıl içinde mülakat soruları , Teknik noktaları video ve PDF olarak düzenledi (aslında beklenenden çok daha fazla enerji harcadı), Bilgi bağlamı + birçok ayrıntı , Sınırlı alan nedeniyle, işte resim şeklinde bir parçası.

ve ayrıca Gelişmiş mimari teknolojisi gelişmiş zihin haritası, Android geliştirme röportajı özel materyalleri , Herkesin ileri seviyeyi geliştirmeyi öğrenmesine yardımcı olmak için gelişmiş gelişmiş çerçeve materyalleri ve ayrıca internette öğrenmek için materyal aramak için herkesin zamanından tasarruf sağlar ve ayrıca birlikte öğrenmek için arkadaşlarla paylaşılabilir.

[Android geliştirmeyle ilgili temel bilgilerle ilgili notlar]

[Android zihin haritası (beceri ağacı)]

[Android temel ileri teknoloji PDF belgesi, BAT görüşmesindeki gerçek soruların analizi]

[Android Advanced Architecture Video Öğrenme Kaynakları]

Android Tanıtım Videosu alıp öğrendikten sonra, daha da güçlü hale geliyor! BATJ fabrikasına girin ve benzeri (hazırlık)! Günümüzde İnternetin soğuk olduğu söyleniyor. Aslında, yanlış arabaya bindiğinizden ve daha az (beceri) giydiğinizden başka bir şey değil. Doğru arabaya binerseniz ve kendi teknik yeteneğiniz yeterince güçlüyse, şirketin değişim maliyeti yüksek olacaktır. Sadece son iş Curd'u ortadan kaldırmak için! Günümüzde piyasada genç programcılar akınına uğramaktadır. Bu eğitim seti 1-6 yaş arası Android geliştirme mühendislerine yöneliktir. Darboğaz dönemindedirler. Gelecek yıl maaş artışlarını aşmak isteyenler, ileri düzey Android orta ve kıdemli, mimarlar daha da önemlidir Sudaki bir balık gibi, çabuk alın!

[Android gelişmiş öğrenme videosu], [Android mülakat hilelerinin tam seti PDF], [Android geliştirme temel bilgi notları] özel mesajla [Android] ücretsiz olarak elde edilebilir!

Sao Nian! Android görüşmecilerini tamamen fethetmek için Binder ilkesini kullanın
önceki
Mobil: Salgın gökyüzünün yarısına vuruyor ve programcılar istikrar istiyorlarsa güç için savaşmalılar
Sonraki
Android programcısı: "Bytedance röportajcısı olarak bir şey söylemem gerekiyor!"
İş değiştirmeyi düşündün mü? İşte Android mimarlarının görüşmeler için bazı önerileri ve hazırlıkları var
Altın üç gümüş dörtlü için hazır mısınız: işte Android 20'nin sorulması gereken mülakat soruları ve ayrıntılı analiz
Öne çıkan! Android büyük OPPO mülakat soruları ve deneyim özeti
Android LayoutManager üst düzey oyuncular, süslü formların farkına varın
Android programcı sorunu: farklı geliştirme aşamalarında nasıl ilerlenir?
Android geliştiricilerinin 2020'de tanrı olmasına giden yol! Bu temel becerileri öğrenin
Mobil programcıların iş değiştirmeleri ve mülakat başarı oranını% 80 artırmaları için mülakat sorularına nasıl hazırlanılır?
2020'de ne öğrenmeli? Android beceri haritası yükselişte
Android mülakat deneyimi için gerekli beceri rezervinin detaylı açıklaması, teklifi aldı
Teknik yön konusunda kafanız mı karıştı? Kıdemli mobil geliştiriciler, Android geliştirmenin gelecekteki yönü hakkında konuşuyor
Mülakat ve mülakat soruları öncesindeki Android mülakat engellerini ortadan kaldırın.
To Top