Bu makalemizde sizlere Yazılımcı mülakat soruları, .net yazılımcı mülakat soruları hakkında bilgilendirme yapıyor olacağız. Yazılımcı Mülakat Soruları ile ilgili makalelerimizin çok fazla uzun olmasından dolayı bir seri şeklinde yayınlama kararı aldık ve uzun bir seri olacak. Bu makalelerimizde yazılım mülakatlarında sizi bir üst seviyeye taşımak için gerekli tüm bilgilerin olacaktır. Makalelerimizin devamı geldikçe bu yazımız güncellenecek ve Yazılımcı mülakat soruları hakkında yayınlanan bir sonraki makaleye bu konu içerisinden erişebileceksiniz. Sözü fazla uzatmadan direkt olarak yazılımcı mülakatlarında karşımıza çıkacak konulara giriş yapalım.
Yazılımcı Mülakat Soruları 2023
Yazılımcı mülakat soruları 1
C# Yazılımcı Mülakat Soruları – Operatör Overloading Nedir?
C# Operatör Aşırı Yükleme, C# dilinde sınıfların belirli operatörleri aşırı yükleyebilmesine olanak tanıyan bir tekniktir. Bu, bir operatörün farklı şekillerde davranabilmesi anlamına gelir, bu da bir sınıfın işlevselliğini artırabilir ve kod yazımını daha kolay hale getirebilir.
C# Operatör Aşırı Yükleme, bir sınıfın belirli bir operatörü nasıl işleyeceğini özelleştirmesine izin verir. Örneğin, bir sınıfın “+” operatörünü aşırı yüklemesi durumunda, bu operatör farklı bir işlevsellik sunabilir. Bu, programcıların özelleştirilmiş sınıflarını kullanırken daha doğal bir sözdizimi sağlayarak kod yazmayı daha kolay hale getirebilir.
C# Operatör Aşırı Yükleme için Gereksinimler
Bir C# sınıfı, bir operatörü aşırı yüklemek için aşağıdaki gereksinimleri karşılamalıdır:
- Aşırı yüklenen operatör, bir veya daha fazla sınıfın örneği üzerinde çalıştırılmalıdır.
- Operatörün yüklenmesi için, sınıfın “operatör” anahtar kelimesini kullanarak bir metodu tanımlaması gerekir.
- Aşırı yüklenen operatör, mevcut operatörlere benzer bir işlevsellik sunmalıdır. Örneğin, “+” operatörünü aşırı yüklemek, toplama işlemi yapmalıdır.
- Operatörün işlevselliği, aşırı yüklenen operatörün parametrelerine göre değişebilir.
C# Operatör Aşırı Yükleme Örnekleri
Aşağıdaki örnekler, C# Operatör Aşırı Yükleme’nin nasıl kullanılabileceğini göstermektedir:
Örnek 1: “+” Operatörünü Aşırı Yükleme
Aşağıdaki örnek, “+” operatörünü aşırı yükleyen bir sınıf tanımlar. Bu sınıfın “X” ve “Y” özellikleri, sınıfın “topla” metodu tarafından kullanılır.
class Sayi { public int X { get; set; } public int Y { get; set; } public static Sayi operator +(Sayi s1, Sayi s2) { Sayi toplam = new Sayi(); toplam.X = s1.X + s2.X; toplam.Y = s1.Y + s2.Y; return toplam; } } Bu sınıf, aşağıdaki gibi kullanılabilir: Sayi sayi1 = new Sayi { X = 1, Y = 2 }; Sayi sayi2 = new Sayi { X = 3, Y = 4 }; Sayi toplam = sayi1 + sayi2; Console.WriteLine(toplam.X); // Çıktı: 4 Console.WriteLine(toplam.Y); // Çıktı: 6 Bu örnekte, "+" operatörü aşırı yüklenir ve iki Sayi nesnesinin toplamını hesaplamak için kullanılır. Örnek 2: "==" Operatörünü Aşırı Yükleme Aşağıdaki örnek, "==" operatörünü aşırı yükleyen bir sınıf tanımlar. Bu sınıfın "IsEqual" metodu, sınıfların eşit olup olmadığını kontrol eder. class Kisi { public string Ad { get; set; } public string Soyad { get; set; } public static bool operator ==(Kisi k1, Kisi k2) { if (k1.Ad == k2.Ad && k1.Soyad == k2.Soyad) { return true; } else { return false; } } public static bool operator !=(Kisi k1, Kisi k2) { return !(k1 == k2); } public override bool Equals(object obj) { if (obj == null || GetType() != obj.GetType()) { return false; } Kisi kisi = (Kisi)obj; return (Ad == kisi.Ad && Soyad == kisi.Soyad); } public override int GetHashCode() { return (Ad + Soyad).GetHashCode(); class Sayi { public int X { get; set; } public int Y { get; set; } public static Sayi operator +(Sayi s1, Sayi s2) { Sayi toplam = new Sayi(); toplam.X = s1.X + s2.X; toplam.Y = s1.Y + s2.Y; return toplam; } } Bu sınıf, aşağıdaki gibi kullanılabilir: Sayi sayi1 = new Sayi { X = 1, Y = 2 }; Sayi sayi2 = new Sayi { X = 3, Y = 4 }; Sayi toplam = sayi1 + sayi2; Console.WriteLine(toplam.X); // Çıktı: 4 Console.WriteLine(toplam.Y); // Çıktı: 6 Bu örnekte, "+" operatörü aşırı yüklenir ve iki Sayi nesnesinin toplamını hesaplamak için kullanılır.
Örnek 2: “==” Operatörünü Aşırı Yükleme
Aşağıdaki örnek, “==” operatörünü aşırı yükleyen bir sınıf tanımlar. Bu sınıfın “IsEqual” metodu, sınıfların eşit olup olmadığını kontrol eder.
class Kisi { public string Ad { get; set; } public string Soyad { get; set; } } } Bu sınıf, aşağıdaki gibi kullanılabilir: Kisi kisi1 = new Kisi { Ad = "Ali", Soyad = "Yılmaz" }; Kisi kisi2 = new Kisi { Ad = "Ali", Soyad = "Yılmaz" }; if (kisi1 == kisi2) { Console.WriteLine("Kişiler eşittir."); } else { Console.WriteLine("Kişiler eşit değildir."); }
Bu örnekte, “==” operatörü aşırı yüklenir ve iki Kisi nesnesinin eşit olup olmadığını kontrol etmek için kullanılır. Ayrıca, “!=” operatörü de aşırı yüklenir ve iki nesnenin eşit olmadığını kontrol etmek için kullanılır. Sınıf ayrıca, Object sınıfından miras alınan “Equals” ve “GetHashCode” metotlarını da aşırı yükler, böylece Kisi nesneleri karşılaştırılabilir hale getirilir.
Sonuç olarak, C# Operatör Aşırı Yükleme, sınıfların belirli operatörleri özelleştirmesine olanak tanır. Bu, bir sınıfın işlevselliğini artırabilir
Yazılımcı Mülakat Soruları 2
C# Yazılımcı Mülakat Soruları – Struct ve Class Arasındaki Farklar Nelerdir?
Yazılımcı mülakat soruları adlı konumuzun bu yazı için son örneği olan Struct ve Class arasındaki farklardan bahsedelim.
C# dilinde, Class ve Struct birbirinden farklı veri yapılarıdır. Her ikisi de değişkenler, fonksiyonlar ve diğer veri yapılarını içerebilirler ancak, bir çok farklarıda vardır. Farkları listelemek ve kısaca açıklamak gerekirse,
Struct ve Classların İşlevselliği Açısından Farkları:
Class, OOP prensiplerine daha uygun şekilde kullanılmaktadır. Bir nesne tasarlamak için kullanılan ana yapı denilebilir ve bir çok farklı değişken türü veya fonksiyonlar içerebilirler. Genellikle kalıtım yoluyla genişletilebilir ve birçok farklı nesne oluşturmak için kullanılabilirler.
Struct, daha çok hafıza yönetimi ve performans optimizasyonları için tercih edilirler. Struct’lar küçük veri yapıları için daha uygundur denilebilir. Struclar’da Class’lar gibi bir çok farklı değişken türü içerebilirler ancak işlevsellik açısından daha sınırlıdırlar.
Struct ve Classların Bellek Kullanımı Açısından Farkları:
Class’lar bir referans tür olarak tanımlanır ve heap’te depolanırlar. Heap nedir? diye merak edenler için önce önün cevabını sizlere verelim.
Heap, belleğin bir bölümüdür ve değişkenlerin tanımlandığı ve değerlerinin tutulduğu alanlardır. Class’lar genelde heap’te depolandığı için bellek yönetimi konusunda iyice dikkatli olmak gerekir.
Struct’lar değer türü olarak tanımlanırlar ve stack’te depolanırlar. Stack, belleğin bir diğer bölümü olarak adlandırılabilir ve geçici veriler Stack’de tutulur. Structlar, değer türü olarak tanımlandıkları için, daha küçük ve daha hafif veri yapıları için uygundur.
Struct ve Classların Miras(İnheritance) Açısından Farkları:
Yukarıda da bahsettiğimiz gibi Class’lar başka bir sınıftan miras alarak genişletilebilirler. Bu işlemi bir class’ın özelliklerini başka bir class’a aktarmak için kullanılır ve kalıtım yoluyla bir hiyerarşi oluşturulur. Örneğin, 10 adet entity oluşturacağımızı varsayarsak ve her birinde Id sütununu tekrarlamak yerine EntityBase adı altında bir class oluşturup içerisinde public Guid Id {get; set;} şeklinde tanımlamamızı yapıp diğer 10 adet oluşturulacak Entity’lerimize EntityBase sınıfından miras alma işlemi yaparak Id alanını tek tek yazmaktan kurulmuş oluruz.
Structlar, miras almayı desteklemez. Yani bu özelliği açısından baktığımız zaman struct’ların daha küçük ve daha özelleştirilmiş veri yapıları olarak kullanılması gerektiği anlamına gelir.
Sonuç olarak, Class ve Struct arasındaki farklar, işlevselliği, bellek kullanımı ve miras alma yönünden farklarıyla değerlendirilerek ihtiyacımıza göre en doğru şekilde kullanmamıza ve daha verimli projeler çıkartıp ekstra maliyetleri ortadan kaldırmamıza olanak sağlarlar.
Struct tipi için detaylı bir araştırma yapmak istiyorsanız https://learn.microsoft.com/tr-tr/dotnet/csharp/language-reference/builtin-types/struct adresini,
Class’lar ile ilgili detaylı bir araştırma yapmak istiyorsanız ise,
https://learn.microsoft.com/tr-tr/dotnet/csharp/fundamentals/types/classes adresini ziyaret edebilirsiniz.
Bu yazımızda sizlere bir yazılımcı mülakat sorularında karşımıza çıkabilecek iki farklı başlıktan bahsettik ve daha fazla uzamaması için burada bırakıyorum. Yazılımcı Mülakat Soruları makalelerimiz bir seri şeklinde ve sizleri yazılımcı mülakatlarında bir ileri seviyeye taşımak için gerekli tüm bilgileri sizlere aktaracağız. Yazılımcı mülakat soruları serimizin devamı için bu bağlantı üzerinden yazılım kategorimizi takip edebilirsiniz.