├── .idea
├── .gitignore
├── Mr.Android-Interview.iml
├── codeStyles
│ └── Project.xml
├── modules.xml
└── vcs.xml
├── 4366818.jpeg
├── LICENSE
└── README.md
/.idea/.gitignore:
--------------------------------------------------------------------------------
1 |
2 | # Default ignored files
3 | /workspace.xml
--------------------------------------------------------------------------------
/.idea/Mr.Android-Interview.iml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/.idea/codeStyles/Project.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 | xmlns:android
14 |
15 | ^$
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 | xmlns:.*
25 |
26 | ^$
27 |
28 |
29 | BY_NAME
30 |
31 |
32 |
33 |
34 |
35 |
36 | .*:id
37 |
38 | http://schemas.android.com/apk/res/android
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 | .*:name
48 |
49 | http://schemas.android.com/apk/res/android
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 | name
59 |
60 | ^$
61 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 | style
70 |
71 | ^$
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 | .*
81 |
82 | ^$
83 |
84 |
85 | BY_NAME
86 |
87 |
88 |
89 |
90 |
91 |
92 | .*
93 |
94 | http://schemas.android.com/apk/res/android
95 |
96 |
97 | ANDROID_ATTRIBUTE_ORDER
98 |
99 |
100 |
101 |
102 |
103 |
104 | .*
105 |
106 | .*
107 |
108 |
109 | BY_NAME
110 |
111 |
112 |
113 |
114 |
115 |
116 |
--------------------------------------------------------------------------------
/.idea/modules.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/.idea/vcs.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/4366818.jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/developersancho/Mr.Android-Interview/c92ef5b4c8d56170951ea06b94f0251093efe9e0/4366818.jpeg
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | Apache License
2 | Version 2.0, January 2004
3 | http://www.apache.org/licenses/
4 |
5 | TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
6 |
7 | 1. Definitions.
8 |
9 | "License" shall mean the terms and conditions for use, reproduction,
10 | and distribution as defined by Sections 1 through 9 of this document.
11 |
12 | "Licensor" shall mean the copyright owner or entity authorized by
13 | the copyright owner that is granting the License.
14 |
15 | "Legal Entity" shall mean the union of the acting entity and all
16 | other entities that control, are controlled by, or are under common
17 | control with that entity. For the purposes of this definition,
18 | "control" means (i) the power, direct or indirect, to cause the
19 | direction or management of such entity, whether by contract or
20 | otherwise, or (ii) ownership of fifty percent (50%) or more of the
21 | outstanding shares, or (iii) beneficial ownership of such entity.
22 |
23 | "You" (or "Your") shall mean an individual or Legal Entity
24 | exercising permissions granted by this License.
25 |
26 | "Source" form shall mean the preferred form for making modifications,
27 | including but not limited to software source code, documentation
28 | source, and configuration files.
29 |
30 | "Object" form shall mean any form resulting from mechanical
31 | transformation or translation of a Source form, including but
32 | not limited to compiled object code, generated documentation,
33 | and conversions to other media types.
34 |
35 | "Work" shall mean the work of authorship, whether in Source or
36 | Object form, made available under the License, as indicated by a
37 | copyright notice that is included in or attached to the work
38 | (an example is provided in the Appendix below).
39 |
40 | "Derivative Works" shall mean any work, whether in Source or Object
41 | form, that is based on (or derived from) the Work and for which the
42 | editorial revisions, annotations, elaborations, or other modifications
43 | represent, as a whole, an original work of authorship. For the purposes
44 | of this License, Derivative Works shall not include works that remain
45 | separable from, or merely link (or bind by name) to the interfaces of,
46 | the Work and Derivative Works thereof.
47 |
48 | "Contribution" shall mean any work of authorship, including
49 | the original version of the Work and any modifications or additions
50 | to that Work or Derivative Works thereof, that is intentionally
51 | submitted to Licensor for inclusion in the Work by the copyright owner
52 | or by an individual or Legal Entity authorized to submit on behalf of
53 | the copyright owner. For the purposes of this definition, "submitted"
54 | means any form of electronic, verbal, or written communication sent
55 | to the Licensor or its representatives, including but not limited to
56 | communication on electronic mailing lists, source code control systems,
57 | and issue tracking systems that are managed by, or on behalf of, the
58 | Licensor for the purpose of discussing and improving the Work, but
59 | excluding communication that is conspicuously marked or otherwise
60 | designated in writing by the copyright owner as "Not a Contribution."
61 |
62 | "Contributor" shall mean Licensor and any individual or Legal Entity
63 | on behalf of whom a Contribution has been received by Licensor and
64 | subsequently incorporated within the Work.
65 |
66 | 2. Grant of Copyright License. Subject to the terms and conditions of
67 | this License, each Contributor hereby grants to You a perpetual,
68 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable
69 | copyright license to reproduce, prepare Derivative Works of,
70 | publicly display, publicly perform, sublicense, and distribute the
71 | Work and such Derivative Works in Source or Object form.
72 |
73 | 3. Grant of Patent License. Subject to the terms and conditions of
74 | this License, each Contributor hereby grants to You a perpetual,
75 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable
76 | (except as stated in this section) patent license to make, have made,
77 | use, offer to sell, sell, import, and otherwise transfer the Work,
78 | where such license applies only to those patent claims licensable
79 | by such Contributor that are necessarily infringed by their
80 | Contribution(s) alone or by combination of their Contribution(s)
81 | with the Work to which such Contribution(s) was submitted. If You
82 | institute patent litigation against any entity (including a
83 | cross-claim or counterclaim in a lawsuit) alleging that the Work
84 | or a Contribution incorporated within the Work constitutes direct
85 | or contributory patent infringement, then any patent licenses
86 | granted to You under this License for that Work shall terminate
87 | as of the date such litigation is filed.
88 |
89 | 4. Redistribution. You may reproduce and distribute copies of the
90 | Work or Derivative Works thereof in any medium, with or without
91 | modifications, and in Source or Object form, provided that You
92 | meet the following conditions:
93 |
94 | (a) You must give any other recipients of the Work or
95 | Derivative Works a copy of this License; and
96 |
97 | (b) You must cause any modified files to carry prominent notices
98 | stating that You changed the files; and
99 |
100 | (c) You must retain, in the Source form of any Derivative Works
101 | that You distribute, all copyright, patent, trademark, and
102 | attribution notices from the Source form of the Work,
103 | excluding those notices that do not pertain to any part of
104 | the Derivative Works; and
105 |
106 | (d) If the Work includes a "NOTICE" text file as part of its
107 | distribution, then any Derivative Works that You distribute must
108 | include a readable copy of the attribution notices contained
109 | within such NOTICE file, excluding those notices that do not
110 | pertain to any part of the Derivative Works, in at least one
111 | of the following places: within a NOTICE text file distributed
112 | as part of the Derivative Works; within the Source form or
113 | documentation, if provided along with the Derivative Works; or,
114 | within a display generated by the Derivative Works, if and
115 | wherever such third-party notices normally appear. The contents
116 | of the NOTICE file are for informational purposes only and
117 | do not modify the License. You may add Your own attribution
118 | notices within Derivative Works that You distribute, alongside
119 | or as an addendum to the NOTICE text from the Work, provided
120 | that such additional attribution notices cannot be construed
121 | as modifying the License.
122 |
123 | You may add Your own copyright statement to Your modifications and
124 | may provide additional or different license terms and conditions
125 | for use, reproduction, or distribution of Your modifications, or
126 | for any such Derivative Works as a whole, provided Your use,
127 | reproduction, and distribution of the Work otherwise complies with
128 | the conditions stated in this License.
129 |
130 | 5. Submission of Contributions. Unless You explicitly state otherwise,
131 | any Contribution intentionally submitted for inclusion in the Work
132 | by You to the Licensor shall be under the terms and conditions of
133 | this License, without any additional terms or conditions.
134 | Notwithstanding the above, nothing herein shall supersede or modify
135 | the terms of any separate license agreement you may have executed
136 | with Licensor regarding such Contributions.
137 |
138 | 6. Trademarks. This License does not grant permission to use the trade
139 | names, trademarks, service marks, or product names of the Licensor,
140 | except as required for reasonable and customary use in describing the
141 | origin of the Work and reproducing the content of the NOTICE file.
142 |
143 | 7. Disclaimer of Warranty. Unless required by applicable law or
144 | agreed to in writing, Licensor provides the Work (and each
145 | Contributor provides its Contributions) on an "AS IS" BASIS,
146 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
147 | implied, including, without limitation, any warranties or conditions
148 | of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
149 | PARTICULAR PURPOSE. You are solely responsible for determining the
150 | appropriateness of using or redistributing the Work and assume any
151 | risks associated with Your exercise of permissions under this License.
152 |
153 | 8. Limitation of Liability. In no event and under no legal theory,
154 | whether in tort (including negligence), contract, or otherwise,
155 | unless required by applicable law (such as deliberate and grossly
156 | negligent acts) or agreed to in writing, shall any Contributor be
157 | liable to You for damages, including any direct, indirect, special,
158 | incidental, or consequential damages of any character arising as a
159 | result of this License or out of the use or inability to use the
160 | Work (including but not limited to damages for loss of goodwill,
161 | work stoppage, computer failure or malfunction, or any and all
162 | other commercial damages or losses), even if such Contributor
163 | has been advised of the possibility of such damages.
164 |
165 | 9. Accepting Warranty or Additional Liability. While redistributing
166 | the Work or Derivative Works thereof, You may choose to offer,
167 | and charge a fee for, acceptance of support, warranty, indemnity,
168 | or other liability obligations and/or rights consistent with this
169 | License. However, in accepting such obligations, You may act only
170 | on Your own behalf and on Your sole responsibility, not on behalf
171 | of any other Contributor, and only if You agree to indemnify,
172 | defend, and hold each Contributor harmless for any liability
173 | incurred by, or claims asserted against, such Contributor by reason
174 | of your accepting any such warranty or additional liability.
175 |
176 | END OF TERMS AND CONDITIONS
177 |
178 | APPENDIX: How to apply the Apache License to your work.
179 |
180 | To apply the Apache License to your work, attach the following
181 | boilerplate notice, with the fields enclosed by brackets "{}"
182 | replaced with your own identifying information. (Don't include
183 | the brackets!) The text should be enclosed in the appropriate
184 | comment syntax for the file format. We also recommend that a
185 | file or class name and description of purpose be included on the
186 | same "printed page" as the copyright notice for easier
187 | identification within third-party archives.
188 |
189 | Copyright {yyyy} {name of copyright owner}
190 |
191 | Licensed under the Apache License, Version 2.0 (the "License");
192 | you may not use this file except in compliance with the License.
193 | You may obtain a copy of the License at
194 |
195 | http://www.apache.org/licenses/LICENSE-2.0
196 |
197 | Unless required by applicable law or agreed to in writing, software
198 | distributed under the License is distributed on an "AS IS" BASIS,
199 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
200 | See the License for the specific language governing permissions and
201 | limitations under the License.
202 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Android Geliştiricilerin Bilmesi(en azından fikir sahibi olması) Gereken Core Bilgiler
2 |
3 | #### Prepared by [developersancho](https://github.com/developersancho) who is having experience and work on Android Development.
4 |
5 | ## Sorular
6 | * **[Class-Object Nedir?](#class-object-nedir)**
7 | * **[Memory Leak Nedir?](#memory-leak-nedir)**
8 | * **[Big O Notasyonu Nedir?](#big-o-notasyonu-nedir)**
9 | * **[Queue ile Stack arasındaki fark nedir?](#queue-ile-stack-arasndaki-fark-nedir)**
10 | * **[MultiThread Nedir?](#multithread-nedir)**
11 | * **[THREADS](#threads)**
12 | * **[Paralel Programlama nedir?](#paralel)**
13 | * **[Asenkron Programlama(Concurrency) nedir?](#asenkron)**
14 | * **[COROUTINE nedir? ](#coroutine)**
15 | * **[OOP(Object Oriented Programming)](#oop)**
16 | * **[Yazılım Geliştirme Modelleri](#ygm)**
17 | * **[Android 11](#android-11)**
18 | * **[Android 10](#android-10)**
19 | * **[KOTLIN](#kotlin)**
20 | * **[Inline Functions & Reified types](#inline-reified)**
21 | * **[SOLID Prensipleri Nedir?](#solid)**
22 | * **[ADB(Android Debug Bridge) nedir?](#adb)**
23 | * **[NDK nedir?](#ndk)**
24 | * **[Bitmap nedir?](#bitmap)**
25 | * **[Vektörel Grafik nedir?](#vector)**
26 | * **[Multidex nedir?](#multidex)**
27 | * **[FileProvider Nedir?](#fileprovider)**
28 | * **[ListView ile RecyclerView arasındaki farklar nelerdir?](#recyclerview)**
29 | * **[Constraint Layout Özellikleri](#constraint)**
30 | * **[Screen rotation edildiğinde activity lifecycle nasıl çalışır?](#rotation)**
31 | * **[Serializable ve Parcelable nedir? Farkları nelerdir? ](#parcelable)**
32 | * **[Bundle ile en fazla kaç mb veri taşınır?](#bundle)**
33 | * **[Build Type ve Product Flavor arasındaki fark nedir?](#build)**
34 | * **[ProGuard Nedir?](#proguard)**
35 | * **[Context Nedir?](#context)**
36 | * **[Service nedir?](#service)**
37 | * **[Broadcast Receiver nedir?](#broadcast-receiver)**
38 | * **[Activity ve Fragment Nedir?](#activity-fragment)**
39 | * **[Activity ve Fragment Arasındaki Farklar Nelerdir?](#activity-fragment-farklar)**
40 | * **[Activity Fragment Lifecycle Nedir?](#lifecycle)**
41 | * **[Activity Lifecycle Metodları?](#lifecycle-methods)**
42 | * **[SharedPreferences'e veri kaydetme metotlarından commit() ve apply() arasındaki farklar nedir?](#pref-apply-commit)**
43 | * **[Veri Saklama Yöntemleri Nelerdir?](#veri-saklama)**
44 | * **[Content Provider Nedir?](#content-provider-nedir)**
45 | * **[Launch Mode çeşitleri nelerdir?](#launch-mode)**
46 | * **[Application Class Nedir?](#application-class)**
47 | * **[Gradle Nedir?](#gradle)**
48 | * **[Android Manifest.xml Nedir?](#android-manifestxml-nedir)**
49 | * **[Intent Nedir?](#intent)**
50 |
51 | #### Class-Object Nedir?
52 | * Class nesnelerin durumunun tanımlandığı yerdir.
53 | * Object Class'ın somut hale getirilmesidir. Class'ın davranış kazanmasıdır.
54 |
55 | #### Memory Leak Nedir?
56 | * Belleğin(RAM) taşması demektir. Kullanılmayan nesnelerin bellekte tutulmasıdır.
57 | * Nesne oluşturulduğunda bellekte "(HEAP)" saklanır, sonrasında saklınılan yerden
58 | bu işaretlenen nesnenin(kullanılmayan) silinememesi durumunda memory leak oluşur.
59 | * Garbage Collection'ın leak oluşturan nesneleri bellekten silememesi durumudur.
60 |
61 | * Bellekte nesneler ve değer tipleri tutulur ve bunlar `STACK` ve `HEAP`' te saklanır.
62 |
63 | ###### Stack
64 | * Bellek içerisinde değer tipleri ve nesne referansları tutulur.
65 | * İlk giren son çıkar.
66 | * Bellekte son kısma gelindiğinde temizlenir.
67 | * Bir nesne oluşturulduğunda nesne heap üzerinde, referansı stack'te tutulur.
68 | * Stack'te taşma durumu olursa "StackOverFlow" hatası fırlatılır.
69 | ###### Heap
70 | * Kendisi dinamiktir. Stack' e göre yavaştır.
71 | * Nesne oluşturulduğunda Heap' te tutulur.
72 | * Bellek JVM tabanında referansı bulunan nesneleri işaretler, geriye kalanları temizler.
73 | * Heap'te taşma durumu olursa "OutOfMemory" hatası fırlatılır.
74 | ###### Garbage Collection
75 | * Aktif olan nesnelerin bellekteki referanslarını tespit eder ve işaretler.
76 | * İşaretlenmemiş tüm nesneleri bellekten temizler.
77 | * Aktif olan nesneleri yeniden düzenler.
78 | * Garbage Collection devreye girdiğinde UI(Kullanıcı Arayüzü) bir miktar(16ms) gecikir fakat
79 | kullanıcı bunu farkedemez bu gecikme süresi(işlem süresi) 100ms+ olursa UI cevap vermemeye başlar.
80 | Bu cevap vermeme süresi 5 sn' den uzun sürerse ANR - (A)pplication (N)ot (R)esponding
81 | uyarı penceresi çıkar.
82 | ###### ANR (A)pplication (N)ot (R)esponding
83 | * ANR, "(A)pplication (N)ot (R)esponding" anlamına gelir. UI thread'de uzun süren
84 | (5 saniye içerisinde yanıt alınamayan) işlemlerde Android işletim sistemi tarafından
85 | gösterilen bir dialogdur.
86 | ###### Dikkat edilmesi gereken noktalar
87 | * Bir listener ve ya receiver register edildikten sonra bulunduğu lifecyle destroy edilmeden önce
88 | unregister yapılmalıdır.
89 | * İçe içe sınıf referansları tanımlanırken "inline" keywordu kullanılmalıdır.
90 | * Activity ve ya View referansları static tanımlanacağı zaman WeakReference olarak tanımlanmalıdır.
91 | ```kotlin
92 | private var activity: WeakReference? = null
93 | ```
94 |
95 | #### Big O Notasyonu Nedir?
96 | * Bir algoritmanın performansını ve ya Time Complexity'sini hesaplamak için kullanılır.
97 | ###### Time Complexity
98 | * Bir algoritmanın çalışması için gerekli olan süredir. Bu süre işlem sayısına göre hesaplanır.
99 |
100 |
101 | #### Queue ile Stack arasındaki fark nedir?
102 | * Queue → FIFO(İlk giren ilk çıkar), Stack → LIFO(Son giren ilk çıkar)
103 |
104 |
105 | #### MultiThread Nedir?
106 | * Bir uygulamanın aynı anda birden fazla iş parçacıklarını(threads) işlemesidir.
107 | ###### Synchronization — Eş zamanlama
108 | * İlgili kod parçacığına aynı anda sadece bir iş parçacığı erişir ve diğerleri onu bekler.
109 |
110 | #### THREADS
111 | 1) UI(Main) Thread
112 | 2) Background(Worker) Thread
113 | 3) Binder Thread
114 |
115 | ##### UI(Main) Thread
116 | * Android UI güncellenmesi bu thread üzerinde gerçekleşir.
117 | ##### Background(Worker) Thread
118 | * Uzun sürecek işlemleri UI Thread'i meşgul etmeden arka planda yapılmasını sağlar.
119 | * Örnek olarak webservice istekleri, firebase database işlemleri verilebilir.
120 | ##### Binder Thread
121 | * Farklı işlemler içindeki thread'leri birbirleriyle haberleşmesi için kullanılır.
122 | * Tüm sistem servisleri(Intent, Content Provider, Telephone, Vibrator, Wifi, Battery, Notification vb.)
123 | binder thread-> IPC(Inter Process Communication) üzerinden faydalanır.
124 | Örn: Content Provider ile Contacts bilgilerinin alınması, Activity Lifecyle metotlarının ActivityManagerService
125 | tarafından çağrılması
126 |
127 | #### Paralel Programlama nedir?
128 | * Bir görevi paralel olarak işlenebilecek daha küçük alt görevlere ayrılacak birden fazla CPU'da
129 | thread'ler ile yürütülmesi sağlanır.
130 |
131 | #### Asenkron Programlama(Concurrency) nedir?
132 | * Bir uygulamanın aynı anda birden fazla görevi, işi yapmasıdır. Ama bu işler paralel olarak farklı
133 | thread'lerde işlenmeyebilir.
134 | * Uzun süren IO işlerinin CPU'yu bloklamaması amacıyla kullanılır.
135 | * Kotlin bu yöntemi sağlamak için COROUTINE denilen bir yapı sunar.
136 |
137 |
138 | #### COROUTINE nedir?
139 | * Thread değildir. LightWeight thread denilir.
140 | * Thread tarafından yürütülen iş parçalarıdır.
141 | ##### suspend nedir?
142 | * Mevcut thread'ı bloke etmeden coroutine yürütülmesini askıya alır, sıralı işletilir.
143 | ##### async nedir?
144 | * Geriye değer dönen asenkron işlemler için kullanılır.
145 | ##### launch nedir?
146 | * Geriye değer dönmeyen işlemler için kullanılır. Çalıştır-Unut prensibiyle çalışır.
147 | ##### runblocking nedir?
148 | * İlgili coroutine tamamlana kadar mevcut thread' bloke eder.
149 |
150 | #### OOP(Object Oriented Programming)
151 | * OOP denildiğinde aklımıza aşağıdaki 4 kavram gelmelidir.
152 | → Abstraction(Soyutlama)
153 | → Inheritance(Kalıtım)
154 | → Encapsulation(Kapsülleme)
155 | → Polymorphism(Çok Biçimlilik)
156 |
157 | ###### Abstraction(Soyutlama)
158 | * Nesneye yalnızca ilgili ayrıntıları göstermek için daha büyük bir havuzdan veri seçme işlemidir.
159 | * Interface ve abstract class' lar ile yapılır.
160 | ###### Inheritance(Kalıtım)
161 | * Kendisine ait olan özelliklerin, işlevlerin başka bir sınıfa aktarılması olayıdır.
162 | ###### Encapsulation(Kapsülleme)
163 | * class içerisindeki değişkenlerin get ve set metotlarının oluşturulması
164 | → private: sınıfa özel değişkenler
165 | → public: herkese açık değişkenler
166 | → protected: türetilen sınıfa ve aynı pakette olanlara açık değişkenler
167 | → static: sınıf değişkeni, instance oluşturulmadan kullanılır
168 | → final: sadece bir değer ataması yapılır
169 | → constant: compile time'da son değer set edilir Örn: DateTime
170 | ###### Polymorphism(Çok Biçimlilik)
171 | * Bir nesnenin farklı bir nesne gibi davranmasıdır
172 | ###### Abstract Class ile Interface arasındaki farklar.
173 | * abstract class tekli kalıtım, interface çoklu kalıtım destekler.
174 | * abstract class yapıcı metot içerebilir, interface yapıcı metot içermez.
175 | * abstract class static üyeler içerebilir, interface static üyeler içermez.
176 | * abstract class farklı tipte(private, public,..) değişken içerir, interface sadece public değişken tanımlanır.
177 | * abstract class is-a ilişkisi vardır, interface can-do ilişkisi vardır.
178 | * en az bir abstract metot varsa class abstract olmalı, interface içi boş olabilir.
179 | * abstract metotların gövdesi yoktur, interface metotların gövdesi olabilir.
180 | ###### super()
181 | * Bir alt sınıfın bir üst sınıfa erişmesini sağlar.
182 |
183 | #### Yazılım Geliştirme Modelleri
184 | * Bir yazılımın, üretim aşaması ve kullanım süreci boyunca geçirdiği tüm aşamalar yazılımın yaşam döngüsüdür.
185 | ##### WaterFall(Şelale)
186 | * Planlama-Analiz-Tasarım-Geliştirme-Test-Uygulama, buradaki aşamaları sırayla gerçekleştirilir.
187 | * Bir aşama bitmeden diğer aşamaya geçilmez.
188 | * İletişim tek yönlüdür.
189 | * Bir önceki aşamaya geri dönüş çok zordur.
190 | ##### Agile(Çevik)
191 | * WaterFall'daki problemleri çözmek üzere çıkmış tekrarlanan yazılım geliştirme modelini taban alarak
192 | sık aralıklarla parça parça teslimatın yapıldığı modeldir.
193 | * İş parçalara bölünür, süreç böyle işlenir.
194 | * Ekipte En fazla 9, en az 3 kişi bulunur.
195 | ###### Agile(Çevik)-Kullanılan Metodolojiler
196 | * Scrum
197 | * Kanban
198 | * XP(Extreme Programming)
199 | * TDD(Test Driven Development)
200 | * FDD(Feature Driven Development)
201 |
202 | #### Android 11
203 | * Wireless Debuging
204 | * Bubbles
205 | * IME Animations
206 | * Privacy
207 | * AutoFill
208 | * Background Location
209 | * 5G Support
210 | * Foldo
211 |
212 | #### Android 10
213 | * Dark Theme
214 | * 5G Support
215 | * Gesture Navigation
216 | * ShorcutInfo API
217 | * Location Controls
218 |
219 |
220 |
221 | #### KOTLIN
222 | * NullCheck
223 | * val,var
224 | * when
225 | * high order function(let, run, apply, with)
226 | * extension function
227 | * type alias
228 | * DSL infix notation(dsl üretme, infix fun Int.plus(c: Int) -> 15.plus(5) yerine 15 plus 5 yazılır.)
229 | * delegation (değişkenlerin değerinin yönetimini başka bir fonksiyona veriyoruz.)
230 |
231 |
232 | #### Inline Functions & Reified types
233 | * Arka planda fonksiyon her çağrıldığında aldığı parametre için bir nesne oluşturur. Doğru yerde
234 | kullanılmadığında belleğe yük olur.
235 | * Fonksiyona inline dediğimizde parametre için nesne oluşturmaz, çağrıldığı yerde çalışması için
236 | bir kod bloğu görevi üstlenir.
237 | * reified dediğimizde parametre alma zorunluluğu kaldırılır.
238 | * ilk hali
239 | ```kotlin
240 | fun Retrofit.create(service: KClass): T = create(service.javaObjectType)
241 | ```
242 | * son hali
243 | ```kotlin
244 | inline fun Retrofit.create(): T = create(T::class.java)
245 | ```
246 |
247 | #### SOLID Prensipleri Nedir?
248 | * SOLID yazılım prensipleri; geliştirilen yazılımın esnek, yeniden kullanılabilir, sürdürülebilir
249 | ve anlaşılır olmasını sağlayan, kod tekrarını önleyen ve Robert C. Martin tarafından öne sürülen
250 | prensipler bütünüdür.
251 | ###### S — Single-responsibility principle
252 | * Bir sınıf (nesne) sadece bir işten sorumludur.
253 | ###### O — Open-closed principle
254 | * Bir sınıf (nesne) gelişime açık, değişime kapalı olması.
255 | ###### L — Liskov substitution principle
256 | * Alt sınıfları, türedikleri(üst) sınıfların yerine kullanma.
257 | ###### I — Interface segregation principle
258 | * Sorumlulukların hepsini tek bir arayüze toplamak yerine daha özelleştirilmiş birden fazla arayüz oluşturma
259 | ###### D — Dependency Inversion Principle
260 | * Bağımlılığı tersine çevirme, daha az bağımlı olma.
261 |
262 | #### ADB(Android Debug Bridge) nedir?
263 | * Android bir cihaz ile iletişim kurulmasını sağlayan bir yapıdır.
264 |
265 | #### NDK nedir?
266 | * Android uygulamalarımızda C ve ya C++ dillerinde geliştirilmiş olan kodlarımızı
267 | kullanmamızı sağlayan bir araçtır.
268 |
269 |
270 | #### Bitmap nedir?
271 | * PNG, JPEG, BMP, GIF gibi dosya formatları bitmap olarak isimlendirilir. Resim için
272 | renkler ve konumları bir harita gibi işler.
273 |
274 |
275 | #### Vektörel Grafik nedir?
276 | * Path halide tutulur.
277 | * Bir çizgi başlangıç ve bitiş noktasının bilgisi tutulur. Dosya çalıştırılınca parse edilir,
278 | bitmap'e dönüştürülür.
279 |
280 |
281 | #### Multidex nedir?
282 | * APK dosyalarında .dex(Dalvik Executable) uzantısına sahip dosyalar bulunur.
283 | * Bir dex dosyası 65,536'den referansa(metot) sınırlar.
284 | * Bu sınır geçiliyorsa multidex enable true yapılmalıdır(21+).
285 | * Aksi halde “Error: Cannot fit requested classes in a single dex file.Try supplying a main-dex list. # methods: 72477 > 65536”
286 | hatası alır.
287 |
288 | #### FileProvider Nedir?
289 | * 19+ için izin almadan kamera ile fotoğraf çekip app external storage kaydetmesini sağlar.
290 |
291 | #### ListView ile RecyclerView arasındaki farklar nelerdir?
292 | * Listview bütün datayı ekran açılırken yükler, RecylerView ekranı kaydırdıkça yükler.
293 | * Listview'de yatay(horizontal) kaydırma yoktur, Recylerview'de yatay kaydırma vardır.
294 | * Listview'de onItemClick vardır, Recylerview'de yoktur.
295 |
296 |
297 | #### Constraint Layout Özellikleri
298 | * Response tasarımlar için idealdir. Performanslıdır
299 | * Weight dinamik olarak ayarlanabilir.
300 | * Chain oluşturularak view'ler gruplandırılabilir.
301 | * Farklı ekran boyutları için daha kullanışlıdır.
302 | * Düz görünüm hiyerarşisine sahiptir.
303 | ###### Tercih Eilmesinin En Önemli Sebebi
304 | * Diğer layoutlar(Relative, Linear) içerisindeki view'ları iç içe döngü içerisinde çizilir(Nested Loops).
305 | * Consraint layout düz görünüm hiyerarşine sahip olduğu için(tree structure) döngü içerisinde çizilmez.
306 | Bundan dolayı diğerlerine göre çok performanslıdır.
307 |
308 | #### Screen rotation edildiğinde activity lifecycle nasıl çalışır?
309 | * Uygulama start edilir
310 | * Sırası ile onCreate() -> onStart() -> onResume() -> Cihaz rotation yapılır
311 | -> onPause() -> onStop() -> onSaveInstanceState() -> onDestroy()
312 | -> onCreate() -> onStart() -> onRestoreInstanceState(), onResume() metotları çalışır.
313 |
314 | #### Serializable ve Parcelable nedir? Farkları nelerdir?
315 | * Parcelable, Serializable göre daha hızlı, performanslıdır.
316 | * Parcelable android için geliştirilmiştir.
317 | * Serializable java interface'idir.
318 |
319 |
320 | #### Bundle ile en fazla kaç mb veri taşınır?
321 | * En fazla 1 MB veri taşınır. Fazlası için memory cache ve ya local cache kullanabilir.
322 |
323 | #### Build Type ve Product Flavor arasındaki fark nedir?
324 | * Build Type, uygulamanın paketlenmesi
325 | * Product Flavor, uygulama için kullanıcıya yayınlayabileceğimiz farklı sürümler oluşturmamızı sağlar.
326 |
327 | #### ProGuard Nedir?
328 | * Geliştirilen uygulamaların kaynak kodlarını karıştırmaya ve sıkıştırmaya
329 | (uygulama boyutunu düşürmeye) yarayan ücretsiz 3. parti bir kütüphanedir.
330 |
331 | #### Context Nedir?
332 | * Context, uygulamanın herhangi bir zamandaki durumunu tutan bir objedir.
333 | * Uygulamadaki kaynaklara referans olarak her yerden erişmemizi saglayan Android işletim sistemi
334 | tarafından implement edilmiş bir Interface'dir.
335 | * Uygulamanın /res klasöründe bulunan kaynaklara (stringler, resim dosyaları vs.) erişimi
336 | sağlamak için kullanılır.
337 | * Yeni bir Activity başlatma, Intent'leri kullanma gibi işler de Context tarafından yapılır.
338 | * 4 tanedir. Bunlar; Activity, Service, Broadcast Receiver, Content Provider
339 |
340 | * `Application Context`, getApplicationContext() metoduyla uygulamanın herhangi bir yerinden uygulama Context’ini alır,
341 | singleton’dır,uygulamayla aynı yaşam süresine sahiptir.
342 | * `Activity Context`, ActivityName.this yoluyla çağrılır ve Activity ile aynı yaşam süresine sahiptir.
343 | Daha çok o Activity içerisindeki objelerde kullanılır. Service’ler de aynı mantıktadır. Activity’nin kendisi Context’i implement eder.
344 | * `ContentProvider`, herhangi bir Context barındırmaz, sahip olunan getContext() metodu ile uygulama Context’i alınabilir.
345 | * `BroadcastReceiver`, kendisi herhangi bir Context barındırmaz. onReceive() metoduyla Context alabilir.
346 |
347 | #### Service nedir?
348 | * Arayüzü olmayan arka planda çalışan yapıdır.
349 | * 2 tanedir.
350 | ###### Foreground Service
351 | * UI thread'de çalışır. Service'ten extend edilir.
352 | ###### Background Service
353 | * Background thread'de çalışır. IntentService'ten extend edilir.
354 |
355 | #### Broadcast Receiver nedir?
356 | * İşletim sistemi genelinde bir uygulama ve ya kendisinin bir parçası tarafından yayınlanan
357 | sinyallerin dinlenmesini sağlar.
358 |
359 | #### Activity ve Fragment Nedir?
360 | * Activity’ler, Android platformundaki uygulamaların temel yapı taşlarından biridir.
361 | * Etkileşimli bir uygulama için bir giriş noktası işlevi görürler ve kullanıcıya bir uygulama aracılığıyla erişebilirler.
362 | * Fragment, bir Activity’de activity veya kullanıcı arabiriminin bir bölümünü temsil eder. Çoklu UI oluşturmak amacıyla kulanılır.
363 |
364 | #### Activity ve Fragment Arasındaki Farklar Nelerdir?
365 | * Activity tek başına oluşturulabilir. Fragment oluşturmak için Activity'e ihtiyaç vardır.
366 | * Activity birden fazla fragment içerebilir.
367 | * Her ikisininde kendine ait yaşam döngüleri vardır.(Lifecycle)
368 |
369 | #### Activity Fragment Lifecycle Nedir?
370 | * Bir kullanıcı, uygulamanızda gezinirken, uygulamanın dışındayken ve geri döndüğünde, uygulamanızdaki Activity'ler
371 | yaşam döngüsünde farklı hallerde geçiş yapar.
372 | * Activity sınıfı, bir durumun değiştiğini activity’ye bildirebilmesini sağlayan bir dizi geri arama sağlar:
373 | sistem, bir activity oluşturuyor, durduruyor, devam ettiriyor veya etkinliğin bulunduğu işlemi yok ediyor.
374 | * Yaşam döngüsü geri arama yöntemleri içinde, kullanıcı uygulamayı terk edip yeniden girdiğinde etkinliğinizin nasıl davrandığını bildirebilirsiniz.
375 |
376 | #### Activity Lifecycle Metodları?
377 | * `onCreate()` Activity başlatıldığında ilk çağırılan metoddur.
378 | * `onStart()` onCreate metodu çalıştırıldıktan sonra, görsel ögeler (tasarım) oluştuğunda çağırılan metoddur.
379 | * `onResume()` Eğer activity durdurulduysa, onResume ile tekrar aktif hale getirilir.
380 | * `onPause()` Activity arka plana atıldığında çalışır (cihazın back tuşuna basılması vs.)
381 | * `onStop()` onPause gibi activity arka plana atıldığında çalışır. onStop için iki durumdan bahsedebiliriz.
382 | Bunlar kullanıcının veya uygulamanın tekrar aynı activitye dönmesi veya bir daha activitye geri gelmemesidir.
383 | Activitye geri dönüldüğü taktirde onRestart -> onStart metodları çalışır, ikinci durumda ise onDestroy metodu ile yaşam döngüsü tamamlanır.
384 | * `onDestroy()` Yaşam döngüsünü tamamlanır. Bir activitye ait bütün kaynaklar temizlenir.
385 |
386 | * `onRestart()`
387 | Kullanıcıya uygulamaya geri döndüğünde onStop () ‘dan sonra çağrılır. OnStart () ve onResume () takip eder
388 |
389 | * `onSaveInstanceState()`
390 | Öldürülmeden önce bir etkinlikten örnek durumunu almak için çağrılır ve böylece durumun onCreate (Bundle) veya
391 | onRestoreInstanceState (Bundle) (bu yöntemle doldurulan Bundle her ikisine de geçilir) olarak geri yüklenebilir.
392 | Bu yöntem, bir etkinliğin öldürülmesi öncesinde çağrılır; böylece gelecekte bir süre geri döndüğünde duruma geri yüklenebilir.
393 |
394 | * `onRestoreInstanceState()`
395 | Bu yöntem, onStart () işleminden sonra, burada savedInstanceState içinde verilen önceden kaydedilmiş bir durumdan yeniden başlatıldığında kullanılır.
396 | Çoğu uygulama, yalnızca durumunu düzeltmek için onCreate kullanır, ancak bazen başlatma tamamlandıktan sonra varsayılan uygulamanızın
397 | kullanılıp kullanılmayacağına izin vermek için bunu yapmak daha uygun olacaktır.
398 | Bu yöntemin varsayılan uygulaması, daha önce onSaveInstanceState (Bundle) tarafından dondurulmuş olan herhangi bir görünüm durumunun
399 | geri yüklenmesini gerçekleştirir.
400 | Bu yöntem, onStart () ve onPostCreate (Paket) arasında çağrılır.
401 |
402 | * `onActivityResult()`
403 | Uygulama açıldığında, size gönderilen requestCode kodunu döndürdüğü resultCode’u ve ona ait ek verileri veren metot’dur.
404 | Uygulama açıkça döndürürse, sonuç döndürmezse veya işlem sırasında çöktüğünde resultCode RESULT_CANCELED olur.
405 | Bu çağrıyı, etkinliğiniz yeniden başladığında onResume () ‘dan hemen önce alacaksınız.
406 | Bu yöntem, activity içerisinde noHistory değerini true olarak ayarlanırsa hiçbir zaman çağrılmaz.
407 |
408 | * `onBackPressed()`
409 | Activity içerisinde geri geldiğimizde tetiklenen metottur.
410 |
411 | #### SharedPreferences'e veri kaydetme metotlarından commit() ve apply() arasındaki farklar nedir?
412 | commit() senkron gerçekleşir, apply() asenkron gerçekleşir.
413 | senkron işlemlerde geri dönüş değeri beklenir, asenkron işlemlerde çalış unut prensibi yatar.
414 | commit 'te işlem başarılı ise true, başarısız ise false döner. apply arka planda gerçekleşir değer dönmez.
415 | apply commit'e göre daha hızlıdır.
416 |
417 | * Use apply(). It writes the changes to the RAM immediately and waits and writes it to the internal storage(the actual preference file) after.
418 | Commit writes the changes synchronously and directly to the file.
419 |
420 | #### Veri Saklama Yöntemleri Nelerdir?
421 | 1- SharedPreferences
422 | 2- DB(ROOM)
423 | 3- Content Provider(İçerik Sağlayıcı)
424 | 4- Internal Storage
425 | 5- External Storage
426 | 6- Local Cache
427 | 7- Remote Connection(Firebase, Webservice)
428 |
429 | #### Content Provider Nedir?
430 | * Bir uygulamanın, diğer uygulamalar tarafından depolanan verilere erişimi yönetmesini ve
431 | diğer uygulamalara veri paylaşımını sağlayan bir yapıdır.
432 | * İçerik sağlayıcılar, bir işlemdeki verileri başka bir işlemde çalışan kodla bağlayan
433 | standart arabirimdir.
434 |
435 | #### Launch Mode çeşitleri nelerdir?
436 | Bir uygulamada oluşturulan activity instance'larının tekrardan kullanıp kullanılamacağını belirleyen kurallardır.
437 | * `standart:` Her bir Intent çağrısı için yeni bir tane Activity oluşturulur.
438 | * `singleTop:` Intent çağrısı zaten oluşturulmuş bir Activity için çağırılırsa yeni bir Activity oluşturulmaz, onun yerine var olan
439 | Activity instance kullanılmaya devam edilir. Bu mod kullanımında onNewIntent ve onCreate metotlarında düzenlenmelidir.
440 | * `singleTask:` Çağrılan bir Activity' den sadece tek bir instance oluşturabilir. Sistem içerisinde zaten var olan bir Activity' e
441 | istek gönderilirse onNewIntent metodu kontrol edilmelidir.
442 | * `singleInstance:` singleTask moduna benzer. Ancak bu activity' i tutan task sadece tek bir singleInstance olarak tanımlanmış
443 | activity' i barındırabilir.
444 |
445 | #### Application Class Nedir?
446 | * Application Class, Activity ve Services gibi bileşenleri içeren Android uygulamasının temel sınıfıdır.
447 | * Uygulama veya alt sınıfları, Android uygulamasında tüm etkinlikler veya diğer uygulama nesneleri oluşturulmadan önce başlatılır.
448 |
449 | #### Gradle Nedir?
450 | * Android uygulaması geliştirme aşamalarını otomatize eden açık kaynak kodlu Android Studio üzerinde çalışan bir yapı sistemidir.
451 | * Bir Android projesinin oluşturulmasından tamamlanmasına giden yolda derleme, test etme, paketleme gibi işlemler söz konusudur.
452 | * Gradle, Android uygulaması geliştirme aşamalarını yapılandırmamızı sağlayan, açık kaynak kodlu, Android Studio üzerinde çalışan
453 | bir inşa sistemidir.
454 | * Android Studio üzerinde bir proje oluşturduğumuzda, Gradle build sistemi otomatik olarak devreye girer ve build işlemini gerçekleştirir.
455 | Burada build etmekten anlayacağımız; uygulama kaynaklarını ve kaynak kodunu derlemek, bunları test edilebilir-uygulanabilir-imzalanabilir
456 | ve yayınlayacağımız APK’lar haline getirmek olmalıdır.
457 |
458 | * `buildscript:` Gradle’ın kendi depolarını ve bağımlılıklarını yapılandırdığımız bloktur.
459 | * `repositories:` Gradle’ın depolarını veya kendi uzak depolarımızı tanımladığımız yerdir.
460 | * `dependencies:` Projeyi oluşturmak için Gradle’ın kullanması gereken bağımlılıkların eklendiği yerdir.
461 | * `allprojects:` Bu blok özel özellikleri taşır ve bunları tüm proje üzerindeki modüllere sunar.
462 | * `apply plugin:` Android üzerinde kullanılan eklentilerin Android üzerinde kullanılabilir hale getirilmesi için belirtildiği satırdır.
463 | Örneğin görselde kotlin-android eklentisini belirtmişiz.Projemiz kotlin koduyla yazılıp derlenebilecek.
464 | * `applicationId:` Uygulamamızın paket adıdır.
465 | * `minSdkVersion:` Uygulamanın en düşük hangi sürümde çalışabileceğini belirtir.
466 | * `targetSdkVersion:` Uygulama için belirlenen geçerli versiondur.SDK platformunun en yüksek version değerini almalıdır.
467 | Eğer bu değer belirtilmediyse minSdkVersion değeri ne ise o kullanılır.Her yeni Android sürümü çıktığında targetSdkVersion güncellenmelidir
468 | ki uygulamamızda yer alan bazı özelliklerin son sürümle uyumlu çalışıp çalışmadığını görelim.
469 | * `compileSdkVersion:` Uygulamayı compile etmek istediğimiz versiondur.minSdkVersiondan düşük olmamalıdır.
470 | * `buildToolsVersion:` Dependencies bloğundaki kütüphanelerin uygulamamızla uyumlu kullanabilmemiz için, kütüphanelerin versionlarının
471 | buildToolsVersion versionuna eşit olması gerekir
472 | * `versionCode:` Uygulamamızı Play Store’a yüklerken ve güncelleyeceğimiz zaman sayısal olarak tutulan version değeridir.
473 | * `versionName:` Version bilgisinin metinsel halidir.
474 |
475 | #### Android Manifest.xml Nedir?
476 | * Uygulamamızın adını, iconunu, temasını bildirir.
477 | * Uygulamada kullanılacak version numaralarını, kütüphaneleri, minimum ve geçerli SDK sürümlerini bildirir.
478 | * Uygulamanın gerektirdiği veya uygulamada kullanacağımız yazılım-donanım özelliklerini bildirir. (kamera, bluetooth vs.)
479 | * Uygulama izinleri belirlerlenir. (internet bağlantısı, kullanıcı izinleri vs.)
480 | * Activitylerimizi yönetir ve bu activitylerin özelliklerini bildirir.(Tema, Orientation Mode,...)
481 |
482 | #### Intent Nedir?
483 | * Activity'ler arası veri taşımak için kullanılır.(Bundle)
484 | * Activity, service, Broadcast Receiver, ContentProvider, diğer uygulamalar arasında haberleşmeyi sağlar.
485 | * 2' ye ayrılır.
486 |
487 | * `Explicit(açık) Intent` → aktiviteler arası geçiş. (Bundle, Intent)
488 | * `Implicit(üstü kapalı) Intent` ( Telefon araması yapmak, mesaj(sms), mail göndermek, foto ve video çekmek)
489 |
490 | ## ##
491 |
492 | 
493 |
494 | ## KATKI SAĞLAYANLAR ##
495 | * [developersancho](https://github.com/developersancho)
496 | * [mucahitkambur](https://github.com/mucahitkambur)
497 |
498 |
--------------------------------------------------------------------------------