0% found this document useful (0 votes)
5 views10 pages

TMCS

Çeşitli Mülakat Notları

Uploaded by

Fatih TAŞTEMUR
Copyright
© All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
5 views10 pages

TMCS

Çeşitli Mülakat Notları

Uploaded by

Fatih TAŞTEMUR
Copyright
© All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd

1 / 10

SOLID PRENSİPLERİ
1 - Single Responsibility
Her Class her method yalnızca tek bir işi/görevi yapmalıdır. (Matematiksel Hesaplamalar,
Dosya İşlemleri)

2 - Open/Closed
Class ve methodlar gelişime açık, kodlar ise değişime kapalı olmalıdır. (Alan Hesabı,
Dikdörtgen, Daire)

3 - Liskov’s Substitution
Türetilmiş sınıflar kodda değişiklik yapılmadan türedikleri sınıfın yerine kullanılabilmelidir.

4 - Interface Segregation
Genel amaçlı tek bir Interface yerine özelleşmiş birden çok Interface kullanımı tercih
edilmelidir. (IFootballer, IGoalKeeper, IForward)

5 - Dependency Inversion
Üst seviye Class’lar(miras alınan) alt seviye Class’lara(miras alan) bağımlı olmamalıdır. Alt
Class ta yapılan değişiklikler üst Class’ı etkilememelidir. (Sender, SendMail, SendSMS)

API GATEWAY

Tek bir request/response ile birden çok servise bağlanmayı ve bu servislerden veri
alınmasını sağlar.

Ayrıca aşağıdaki işlemler api gateway üzerinde yapılabilir;

• Authentication
• Authorization
• Logging
• Security/Firewall
• Routing
• Load Balancing

DEPENDENCY INJECTION (DI)

Dependency Injection, S.O.L.I.D prensiplerinin 5. ayağını oluşturan “Dependency


Inversion” prensibinin uygulanmasını içeren bir patterndir.

A = Class
B = A Class’ından türetilmiş bir nesne

Bu durumda A Class’ı B’ye bağlı olmuş olur. B’de yapılan bir değişikliğin A’yı etkilememesi
için DI pattern’i kullanılır.

Bağımlılıkların enjeksiyonu 3 şekilde yapılabilmektedir.

- Constructor
- Setter
- Interface
2 / 10
NGINX

Nginx; yüksek eş zamanlı çalışma kabiliyeti, yüksek performans ve düşük hafıza


kullanımına odaklanılarak tasarlanmış bir Web sunucusudur.

Farklı amaçlar içinde kullanılabilmektedir. Bunlar;

- Web Server
- Proxy Server
- Load Balancer
- Caching

PATH VARIABLES VS QUERY STRING

1- Query String
Örnek kullanım aşağıdaki gibidir. Sıralama ve filtreleme işlemleri yapan API
endpointlerinde kullanımı tercih edilmektedir.

/users?id=123

2- Path Variables
Örnek kullanım aşağıdaki gibidir. Genelde CRUD işlemi yapan API endpointlerinde
kullanılmaktadır.

/users/123

LIBRARY VS FRAMEWORK

Framework ve Library 'in ortak noktası, birileri tarafından yazılan ve başkaları tarafından
kullanılabilen ortak kod yapılarıdır.

- Library istediğin yerde istediğin gibi kullan


- Framework seni kısıtlar, kullanırken belirtilen kurallara uymak zorundasın

LOW COUPLING HIGH COHESION

1- Cohesion (Yapışıklık)
Modül iç benzerliği (aynı amaca hizmet edecek kodlar)
Yani matematiksel işlemlerin yapıldığı bir Class’ta dosya işlemleri yapan bir method
olmamalıdır. Class ve methodlar aynı amaca hizmet etmelidir.

2- Coupling (Bağlaşıklık)
Modüllerin birbirine olan benzerliği veya bağımlılığı.
Modüler bir programda Class’ların birbirine olan bağımlılığı minimum olmalıdır.
3 / 10
BOXING VS UNBOXING

1- Boxing
Belleğin STACK(yığın) bölgesinde tutulan değer türünden bir değişkenin, belleğin
HEAP(öbek) bölgesinde tutulan referans türünden bir nesneye aktarılmasıdır.

int degisken = 123;


object nesne = (object) degisken;

2- Unboxing
Unboxing ise boxing işleminin tam tersidir.

int degisken = [Link]();

OOP

Nesne(Object)
Özellikleri(attributes) olan ve bu özelliklere bağlı olarak belirli bir durumda(state) bulunan
somut varlıklardır.

Class(Sınıf)
Sınıflar, ortak özelliklere sahip grup veya kümeleri tanımlamak için kullanılır.

Nesne Yönelimli Programlamanın Temel Prensipleri;

- Inheritance (Kalıtım)
- Abstraction (Soyutlama)
- Encapsulation (Kapsülleme)
- Polymorphism (Çok Biçimlilik)

1- Inheritance(Kalıtım/Miras Alma)
Inheritance (miras alma, kalıtım), bir nesnenin özelliklerinin farklı nesneler tarafından da
kullanılabilmesine olanak sağlayan OOP prensibidir. Yazılan bir base sınıf bir başka sınıf
tarafından miras alınabilir. Bu işlem yapıldığı zaman temel alınan sınıfın tüm özellikleri yeni
sınıfa aktarılır.

Python
class AltClass(UstClass):

PHP/JAVA
public class AltClass extends UstClass {
...
}
4 / 10
2- Abstraction(Soyutlama)
Bir sınıfın özelliklerinin ve davranışlarının tanımlanmasına denir. Örneğin: Bir kişinin adı,
soyadı, yaşı, boyu, kilosu, saç rengi gibi özellikleridir. Kişinin yetenekleri davranışları
içerisinde yer alır ve metotlar ile saklanır.

3- Encapsulation(Kapsülleme)
Kapsülleme (Encapsulation) bir sınıfın içerisinde bulunan metodların ve değişkenlerin
korunmasıdır. İçerisinde bulunan metod ve değişkenlere dışarıdan yani diğer sınıflardan
ne seviyede erişilebileceğini kapsülleme ile sağlayabiliriz.

Bu erişim belirleyiciler (access modifiers);

• Public: Her yerden erişilebilir.


• Private: Sadece tanımlandığı sınıf içerisinden erişilebilir.
• Internal: Sadece bulunduğu projede erişilebilir.
• Protected: Sadece tanımlandığı sınıfta ya da o sınıfı miras alan sınıflardan
erişilebilir.
• Protected Internal: Sadece tanımlandığı sınıfta ya da o sınıfı miras alan sınıflardan
erişilebilir. Ayrıca tanımlamanın aynı proje içerisinde olma şartı yoktur.
Protected’dan farkı budur.
• Eğer erişim belirleyici belirtilmemişse, sınıflar internal’dır.

4- Polymorphism(Çok Biçimlilik)
Farklı işlemler yapan fakat aynı isimdeki özellik ve methodların kullanımına polimorfizm
denir.

Abstract Class
Genelde ortak özellikleri olan nesneleri tek bir çatı altında toplamak ve kod tekrarını
azaltmak için kullanılırlar.

• Yeni instance(nesne) türetilemez.


• Interface’lerden miras alınamazlar.

Abstract Method
Abstract class içerisinde tanımlanırlar.
• Abstract class’ı extend eden class tarafından override edilmek zorundadırlar.
• Private olamazlar.

Sealed Anahtar Sözcüğü


• Sınıflar için kalıtım yapmayı
• Üyeler için override edilmeyi ÖNLER!!

Serialization Nedir?
Nesnenin bir kopyası oluşturularak o kopyanın kullanılabilir bir formata çevrilmesidir.
Nesnenin o anki durumu korunur.
5 / 10
Method Override
Override üst sınıftan gelen bir metotu alıp kendi ihtiyacımıza göre gövdesini değiştirme
işlemine denir.

• Static ve Final methodlar override edilemezler


• Private methodlar override edilemezler
• Override işlemi yapılırken parametreler ve fonksiyonun dönüş tipi değiştirilemez.
• Override methodların access level’ları düşürülemez fakat yükseltilebilir. (public >
protected > default > private)

Overloading(Aşırı Yükleme)
Method Overloading; aynı isimli fonksiyonların farklı tip ve sayıda parametlerle
kullanılmasıdır. (JAVA)
Class Overloading; class içerisinde tanımlanmayan bir özelliğe, nesne oluşturduktan
sonra değer ataması yapılmasıdır.(PHP)

INTERFACE ABSTRACT CLASS


Implemente eden class tüm elemanları Extend eden class sadece abstract olan
kullanmak zorunda methodları override etse yeter
Sadece içi boş method tanımlaması yapılır Method ve değişken tanımlamaları
yapılabilir
Bir sınıf birden fazla Interface kullanabilir Bir sınıf sadece 1 tane abstract class’ı
extend edebilir
Erişim belirleyicileri barındırmaz Erişim belirleyecileri (public, private,
protected) barındırır

Static Class

• Yeni instance(nesne) oluşturularak çağrılamazlar.


• Sadece static üyeleri içerirler.
• Başka bir sınıftan miras yoluyla oluşturulamazlar.

Stored Procedure

• Belirli bir işi yapan kod parçasıdır.


• DB serverinde tutulurlar.
• İlk kullanımda derlenirler bir daha derlenmeye ihtiyaç duymazlar.
• SQL query’lere göre daha hızlı çalışırlar.

Trigger

• Tetikleyici.
• DB’de bir işlem yapıldıktan sonra başka bir işleminde otomatik olarak yapılması için
kullanılır.
6 / 10
Index

• Sorguların geç cevap vermesi durumunda kullanılır.


• Veriler indexlenen alana göre sıralı bir şekilde tutulur.

Python Veri Tipleri

String(Metin) str

Numeric(Sayı) int, oat, complex

Sequence(Sıralama) list, tuple, range

Mapping(Haritalama) dict

Set Veri Tipleri set, frozenset

Boolean(Mantıksal) bool

Binary bytes, bytarray, memoryview

FLASK DJANGO

Micro bir framework Full Stack

Küçük çaplı karmaşıklığı az projeler için uygun Büyük projeler için uygun

Geliştiriciye bağlı Statik ve kurallı

Performans olarak Django’dan daha iyi

Design Patterns
Yazılım geliştirme esnasında karşılaşılan sorunların çözümü için kullanılan çözümler ve
yaklaşımlardır.

Yazılım tasarım kalıpları 3 kategori altında incelenir.

1 - Creational Patterns (Yaratımsal)


Nesnelerin oluşturulmasında ve yönetilmesinde kullanılan bir desendir. Bu program
akışında hangi nesneye ihtiyaç varsa onu oluşturmada esneklik ve kolaylık sağlar.

• Singleton Pattern *
Bir nesnenin application pool kapanana kadar bir kez üretilmesini ve tek bir instance’ının
olmasın kontrol altında tutar.

- Aynı zamanda bu nesne sınıf dışından da erişilebilinir olur.


- Bir sınıfın bir anda sadece bir örneğinin olması istenildiği zamanlarda kullanılır.
- Örneğin veritabanı uygulamalarında bir anda bir bağlantı nesnesinin olması sistem
kaynaklarının verimli bir şekilde kullanılmasını sağlar.
fl
7 / 10

• Factory Pattern *
Factory Method(Fabrika Yöntemi) kendisini alt sınıflarla genişleterek (subclassing) farklı
biçimlerde nesne oluşturabilmeyi sağlar.

• Abstract Factory Pattern *


İlişkisel olan birden fazla nesnenin üretimini tek bir ara yüz tarafından değil her ürün ailesi
için farklı bir arayüz tanımlayarak sağlamaktadır.

• Builder Pattern
• Prototype Pattern

2 - Structural Patterns (Yapısal)


Birden fazla sınıfın bir işi yerine getirirken nasıl davranacağını belirlemek için kullanılan
desenlerdir.

• Adapter Pattern *
Adaptör Tasarım deseni mevcut bir sınıfı veya arayüz sınıfını, eldeki farklı bir arayüz
sınıfına uygun hale getirerek tekrar kullanmak amacıyla uygulanır.

• Bridge Pattern *
Bridge tasarım deseni implementasyonları abstractlardan ayırabilmek için kullanılır.

• Proxy Pattern *
Proxy tasarım deseni, oluşturduğumuz bir Proxy sınıf üzerinden, başka bir sınıfı temsil
etmemizi sağlar. Böylelikle Proxy sınıf, esas sınıfa müdahale etmeden istediği işlem veya
işlemler bütününü gerçekleştirebilir.

• Filter Pattern
• Compozite Pattern
• Decorator Pattern
• Facade Pattern
• Flyweight Pattern

3 - Behavioral Patterns (Davranışsal)


Nesnelerin birbirleri ile ilişkisini düzenleyen desenlerdir.

• Observer Pattern *
Observer tasarım deseni, bir nesnede meydana gelen değişikliği içinde bulunduğu
listedeki tüm elemanlara bildiren tasarım desenidir.

Örneğin; Finans - Borsadaki anlık değişimlerin borsacılara bildirim olarak gitmesi.

• Command Pattern
• Interpreter Pattern
8 / 10
• Iterator Pattern
• Mediator Pattern
• Memento Pattern
• Null Object Pattern
• Strategy Pattern
• State Pattern
• Visitor Patter

Compiler
• Herhangi bir programlama dilindeki kaynak kodları makine diline çeviren uygulamadır.

HTTP
• İnternette sunucular ve son kullanıcılar arasında bilgilerin nasıl aktarılacağına dair
kuralları ve yöntemleri düzenleyen sistemdir.

Authentication
• Kullanıcının kimliğini kontrol etmektir. Sisteme giriş yapmak için kullanılır.

Authorization
• Kullanıcının kaynaklara erişimini doğrulamaktır. Sistemde işlem yapmak için kullanılır.

API
• Herhangi bir uygulamanın belli işlevlerini diğer uygulamalarında kullanabilmesi için
oluşturulan modüldür.

SOAP
• Simple Object Access Protocol'ün kısaltmasıdır.
• Türkçe olarak Basit Nesne Erişim Protokolü anlamındadır.
• İnternet üzerinden küçük miktarda bilgileri aktarma protokolüdür.
• Veriler genelde HTTP, bazen de TCP/IP ile gönderilir.
• XML formatındadır. XML kullanmaya mecbur bırakır.

REST
• İstemci ve sunucu arasında veri alışverişinin basit bir yoludur.
• JSON, XML, Text gibi formatlarda veri alışverişi yapılabilir.
• HTTP ile gönderilir.
• SOAP'a göre daha hızlı çalışır.

Middleware
• Ara katmandır.
• Örneğin bir Rest Api tasarlıyoruz. Token ile authentication işlemlerini hallediyoruz. Token
gerektiren birkaç tane Api yazdık. Bu Api'lere gelen isteklerde Token'ın geçerliliğini
kontrol etmek adına bir Middleware oluşturabiliriz. Böylece gelen istek Middleware'daki
kontrolden geçemezse direkt olarak kesilir. Geçerse yoluna devam eder.

Lazy Loading
• Bir kod bloğu, nesne veya program parçasının sadece ihtiyaç duyulunca çalıştırılmasıdır.

SSL
• Sunucu ve istemci arasında verilerin şifrelenerek gönderilmesidir.
9 / 10
FTP
• Bir bilgisayardan, başka bir bilgisayar ya da sunucu arasında bağlantı kurup dosya
paylaşma protokolüdür.

CI (Continuous Integration)
• Sürekli entegrasyon, kod üzerinde yapılan her değişikliğin ardından, tüm sistemin çalışır
durumda olduğunu, yapılan değişikliğin sistemin bazı bölümlerinde kırılmalara yol açıp
açmadığını tespit etmek için kullanılan yöntemdir.

CD (Continuous Delivery/Deployment)
• CD, başarılı olan bir yapıyı (build) bir ortama atmanın otomatik bir yoludur.
• Continuous Delivery(teslimat) manual olarak yapılır
• Continuous Deployment(dağıtım) ise otomatik olarak yapılır

PHP ECHO PHP PRINT

Return olarak değer döndürmez Return olarak 1 değerini döndürür

Birden fazla parametre ile çalışabilir Tek parametre ile çalışır

Daha hızlıdır Daha yavaştır

PHP ERROR

Warning Uyarı Kod çalışmaya devam eder

Notice Bildirim Hataları Kod çalışmaya devam eder

Parse Error(Syntax) Syntax Hataları Kod durur

Fatal Error Ölümcül Hatalar Program çöker

PHP KOMUT GÖREVİ

explode() String to Array

implode() Array to String

unlink() Dosya silme

fopen() Dosya açma

strip_tags() String içerisindeki HTML,XML ve PHP etiketlerini


temizler

substr() String dilimleme

strstr() String içerisinde arama yapma

trim(), ltrim(), rtrim() String içerisinde boşluk silme

mysqli_real_escape_string() SQL içerisinde özel karakterleri silme

de ne(‘PI’, 3.14) Sabit tanımlama


fi
10 / 10

PHP KOMUT GÖREVİ

Const PI = 3.14 Sabit tanımlama

mysqli_connect DB bağlantı kontrolü yapar / bağlantı yoksa bağlantı


kurar / işin bitince bağlantı sonlandırılır

mysqli_pconnect DB ile kalıcı bağlantı kurar

require() Yüklenmesi öncelikli/zorunlu. Yüklenmez ise FATAL


ERROR verir.

include() Yüklenmez ise WARNING verir, kod çalışmaya


devam eder.

“==“ Değer olarak eşitlik kontrolü yapar

“===“ Değer ve veri tipi olarak eşitlik kontrolü yapar

@ Hataları görmezden gel

set_time_limit(9) Betiğin azami çalıştırılma süresinin belirlemek için


kullanılır

[Link] max_execution_time Betiğin max yürütme süresi

count($array) Dizi uzunluğu

php [Link] Konsoldan php kodu çalıştırma komutu

Single Inheritance PHP tekil kalıtsaldır

Değer PHP de nesneler değer ile geçer

PHP PEAR PHP dilinin bir uzantısıdır. Standart PHP sürümüne


göre çok daha fazla ayar ve fonksiyonellik sunar.

PHP VERSIONS 5.6 / 7 / 7.1 / 7.2 / 7.3 / 7.4 / 8.0 / 8.1

PHP Hypertext Preprocessor, internet için üretilmiş,


sunucu tara ı, çok geniş kullanımlı, genel amaçlı,
içerisine HTML gömülebilen betik ve programlama
dilidir.
Açık kaynak kodludur.
fl

You might also like