En Önemli 8 Kodlama Mülakat Soruları ve Cevapları 2022 [Yeni Başlayanlar ve Deneyimliler İçin]

Yayınlanan: 2021-08-25

Diziler, ikili ağaçlar, karma tablolar ve bağlantılı listeler gibi veri yapılarının iyi temelleri önemlidir. Özellikle programlama işlerine başvuruyorsanız, temel algoritmaların, yöntemlerin farkında olmanız ve Java gibi programlama dillerine iyi derecede hakim olmanız gerekir. Önemli kodlama mülakat sorularının cevaplarını kesinlikle öğrenebilirsiniz, ancak çözümleri kendi başınıza kapsamlı bir şekilde uygulamanız şiddetle tavsiye edilir.

En İyi 8 Kodlama Mülakat Sorusu ve Cevapları

Microsoft, IBM, Google gibi büyük şirketler tarafından düzenlenen röportajlarda sorulan en önemli kodlama sorularından bazılarına göz atalım.

1. Bir kelimede tekrarlanmayan ilk karakteri nasıl bulabilirsiniz?

Bu soruyu cevaplamak için öncelikle bu işlevi geliştirmek için yapılması gerekenleri anlamanız gerekir. Dizeleri kabul eden ve tekrarlanmayan ilk karakterleri döndüren bir işlev yazılmalıdır.

Örneğin, 'pasaj' kelimesinde 'p' tekrar edilmeyen ilk karakterdir veya 'kaplumbağa' kelimesinde 'u' tekrarlanmayan ilk karakterdir. Peki, bu sorunu nasıl çözeceğiz? Tüm karakterler için tekrarları saklamak için bir tablo oluşturabilir ve ardından tekrarlanmayan ilk girişleri seçebiliriz.

İlk tekrarlanmayan harfleri döndürecek bir kod yazmak için karakter sayısını saklamak için LinkedHashMap kullanabiliriz. Bu HashMap, ekleme sırasını takip eder ve karakterler, dizedekiyle aynı konumda başlatılır. 1 değeriyle gerekli girişi seçmek için taranan dize LinkedHashMap kullanılarak yinelenmelidir.

Bu soruna yaklaşmanın başka bir yolu da firstNonRepeatingChar(String word) kullanmaktır. Bu, ilk görünen tekrarlanmayan karakterin tek bir geçişte tanımlanmasını sağlar. Bu yaklaşım, bir etkileşimi değiştirmek için iki depolama kullandı. Bu yöntem, tekrarlanmayan ve tekrarlanmayan karakterleri ayrı ayrı saklar ve yineleme bittiğinde, gerekli karakter listedeki ilk öğedir.

2. Dizilerdeki kopyaları nasıl kaldırabilirsiniz?

İlk olarak, öğelerin kümeye orijinal ekleme sırasını korumak için LinkedHashSet'i (Set Arayüzü) kullanmanız gerekir. Bu tür kodlama görüşme sorularını çözmek için döngüler veya özyineleme işlevleri kullanmalısınız.

Dizilerle uğraşırken aklımızda tutmamız gereken ana faktör, kopyaları olan öğeler değildir. Buradaki asıl sorun, bunun yerine kopyaları kaldırmaktır. Diziler, sabit uzunluktaki statik veri yapılarıdır, bu nedenle değiştirilmeleri mümkün değildir. Bu nedenle, dizilerden öğeleri silmek için yeni diziler oluşturmanız ve içeriği bu yeni dizilere kopyalamanız gerekir.

Öncelikle dizileri Arraylists'e dönüştürmeli ve ardından bu ArrayList'lerden LinkedHashSets oluşturmalısınız. Girdi dizileri daha fazla sayıda yineleme içeriyorsa, birden çok geçici diziye neden olabilir, bu da içeriği içe aktarma maliyetini artırır. Bu kısıtlama, bu soruna daha az bellek ve işlem gücü gerektiren bir şekilde yaklaşmamızı zorunlu kılar.

Kopyaları kaldırmalıyız, ancak sonuçtaki dizilere kopyalamamalıyız, bu nedenle kopyaları tamamen silmemeliyiz, sadece onları varsayılan değer olarak 0 ile değiştirmeliyiz.

3. Bir sayının asal sayı olup olmadığını nasıl kontrol edebiliriz?

Bu, verilen sayının asal sayı olup olmadığını bulmayı içeren en yaygın kodlama mülakat sorularından biridir. Bu tür programlar, algoritmik düşüncenin temelleridir, çünkü asal sayıların hepsinin 1'den başka pozitif sayılara bölünemeyen doğal sayılar olduğu gerçeğine dayanan çözümler bulmamız gerekir.

Hedef sayının kendisinden veya 1'den başka herhangi bir pozitif sayıya bölünüp bölünemeyeceğini görmek için 1'den başlayarak hedef sayıya kadar her sayıyı kontrol eden döngüler oluşturmak için kod yazmalıyız.

Bu fonksiyon bizi çözüme götürecektir. Özellikle büyük bir sayıyı kontrol ederken, N'nin kareköküne kadar kontrol edebiliriz, N, hedef sayıdır. Uygun bir karekök olması durumunda N'ye kadar kontrol etmeye gerek yoktur.

Sayı 2'ye tam bölünemiyorsa, diğer çift sayılara bölünüp bölünmediğini kontrol etmeye gerek yoktur, bu da çözümü bulmak için gereken süreyi azaltır. Bu, çözümü yazmadan önce sayıyı analiz etmenin kullanışlı olduğu, çözümün optimize edilmiş bir versiyonudur.

4. Dizelerin yalnızca rakam içerip içermediğini nasıl kontrol edebilirsiniz?

Dizelerin yalnızca sayı olup olmadığını veya rakam olmayan karakterler içerip içermediğini kontrol etmek için düzenli ifadeler yazmak istiyorsanız, öncelikle Java düzenli ifadelerinde karakter kümelerini kullanmaya alışmalısınız. Java gibi programlama dilleri, Java.util.regex.Matcher sınıfı ve java.util.regex.Pattern yardımıyla düzenli ifadeleri destekler. Java.util.regex bu amaca yönelik özel bir pakettir.

Normal ifadeler kullanarak yalnızca sayıların varlığını doğrulamak için, dizelerin ham tamsayı içerip içermediğini analiz etmek için kodu kullanabiliriz. Dizenin sadece 0 – 9 arasındaki rakamları içerip içermediğini kontrol edeceğiz. Dize hem rakamlar hem de başka karakterler içerse bile, basit bir sayısal dizi değildir. Normal ifadeler yalnızca tamsayıları kontrol eder ve nokta karakterlerini (.) dikkate almaz, bu nedenle ondalık sayıların ve kayan noktaların testte başarısız olmasına neden olur.

5. Hedef cümledeki kelimeleri kütüphane yöntemlerinin yardımı olmadan nasıl tersine çevirebilirsiniz?

Bu aynı zamanda çok yaygın kodlama mülakat sorularından biridir. İlk olarak, gereksinimi ve bu gereksinimdeki boşluğu nasıl dolduracağımızı anlamalıyız. Bu gibi sorularla karşılaştığımızda öncelikle doğru soruları sormaya odaklanmalıyız. Dizeler, tek bir kelime veya birden çok kelime içerebilecek, kararlaştırılmış karakterlerin cümlelerinden başka bir şey değildir.

Bir cümle de boş olabilir. Örneğin, bize 'Programlama eğlencelidir' cümlesi verilirse, bunu tersine çevirmeliyiz, 'Eğlence programlamadır'. etkili bir şekilde. Verilen dizeleri boşluklara bölmek için Java'da normal ifadeler kullanmalıyız ve ardından Collections yardımcı sınıfından reverse() yöntemini uygulamalıyız.

Dizeleri regex'\\s' kullanarak bölebildiğinizde, sonuç olarak bir dizi sözcük döndürülecektir. Bu aynı zamanda birden çok boşluk kullanılarak ayrılmış sözcükleri de dikkate alır. Dizi döndürülür döndürülmez, bu dizilerden ArrayLists oluşturmayı ve ardından Collections.reverse() yöntemini kullanmayı seçebilirsiniz. Bu, ArrayLists'i tersine çevirir ve her kelime ters sırada yeniden başlatılır.

Şimdi geriye kalan tek şey, ArrayList yineleme yoluyla birden çok dizeyi birleştirmek için StringBuilder'ı kullanmak. Boyutun belirtildiğinden emin olun, çünkü StringBuilder yeniden boyutlandırma, işlem gücü ve bellek açısından maliyetli bir işlemdir. Yeniden boyutlandırma, içeriğin eski dizilerden kopyalanmasından yeni diziler oluşturulmasıyla sonuçlanır.

6. Dizelerdeki karakterleri nasıl değiştirebilir veya kaldırabilirsiniz?

Diyelim ki bir 'Woocommerce' dizgemiz var ve 'r' harfini 'n' ile değiştirmek istiyoruz, bunu başarmak için birden fazla yöntem var. Java'daki dize sınıfları, CharSequence ve alt dizeleri kullanarak dizelerin içindeki karakterleri değiştirmek için birden çok yaklaşım sağlar.

Dize içinde, hedef karakteri değiştirecek ve sonuç olarak istenen karakteri döndürecek olan bir değiştirme yöntemini kolayca çağırabilirsiniz. Java gibi programlama dillerinde dizeler değişmezdir.

Bu nedenle, dizeler üzerinde kaldırma veya değiştirme gibi bu işlemler her gerçekleştirildiğinde, varsayılan olarak yeni dize nesneleri oluşturulur. Java kullanarak dizeleri değiştirmek için 4 aşırı yüklenmiş yöntem vardır:

  • değiştir(char oldChar, char newChar)
  • replaceAll(Dize normal ifadesi, Dize değiştirme)
  • değiştir(CharSequence hedefi, CharSequence değiştirme)
  • replaceFirst(Dize normal ifadesi, Dize değiştirme)

CharSequence, dizeler için süper arabirimlerden biridir, StringBuilder ve StringBuffer, bu değiştirme yöntemi için bunlardan herhangi bir nesneyi argüman olarak geçirmemize izin verir. replaceAll() her bir eşleşmeyi yedek dizelerle değiştirirken replaceFirst() yalnızca ilk eşleşmeleri değiştirir.

Sonuç olarak, bunların tümü düzenli ifadeyi kabul eden güçlü metodolojilerdir. Java.lang.String sınıfı, Java'daki tek karakterleri veya alt dizeleri kolayca değiştirebilen tüm bu aşırı yüklenmiş yöntemlere izin verir.

Eşleşen karakterlerin her oluşumunu değiştirdiği için replaceAll() kullanılması şiddetle tavsiye edilir. Bu yaklaşımı takip etmek, düzenli ifade kalıpları beklememize ve böylece daha fazla güç kazanmamıza olanak tanır. Bu yöntem ayrıca, virgülle ayrılmış dosyaları yığınla ayrılmış dizelere dönüştürmek için her virgül yerine borular kullanabilir.

Ancak, yalnızca tek bir karakteri değiştirmek isterse, verilen eski ve yeni karakteri dikkate alan replace() yöntemini kullanabilir.

Okuyun: Java Mülakat Soruları ve Cevapları

7. Java gibi programlama dillerinde dosyalara nasıl metin ekleyebilirsiniz?

Ekleme, yeni dosyalar oluşturma ve yeni dosyalara veri yazma ile karşılaştırıldığında çok farklıdır. Ekleme durumunda, dosyalar zaten mevcuttur ve dosyanın sonuna metin eklememiz yeterlidir. Bu, sistemle sürekli olarak güncellendikleri için günlük dosyalarına benzer.

Günlük dosyaları, uygulamalar yinelemeli olarak bu dosyalara günlük ayrıntıları eklemeye devam ettiğinden, metin eklemenin mükemmel bir örneğidir. Bu sorun için günlük çerçeveleri gerekli değildir, ancak mevcut dosyalara nasıl metin ekleyeceğinizi bilmelisiniz. Bu sorunu çözebilmek için karakter dosyaları yazmak için uygunluk sınıflarından haberdar olmalısınız.

Sınıf, varsayılan bayt arabelleğinin ve karakter kodlamasının kabul edilebilirliğini varsayan yapıcılara sahiptir. Değerleri kendiniz belirtmek isterseniz, FileOutputStream'i kullanarak OutputStreamWriter'ı kolayca oluşturabilirsiniz. Dosyaların kullanılabilirliği, dosyanın oluşturulup oluşturulmayacağını belirleyen temel platformlara bağlıdır.

Birkaç platform, dosyaların tek bir FileWrite veya birden çok dosya yazma nesnesi kullanılarak yazma işlevleri için başlatılmasına izin verir. Ancak, ilgili dosya zaten başlatıldığında bu sınıftan yapıcılar başarısız olacaktır. FileWriter karakter akışlarını yazmak için kullanılır ve FileOutputStream ham bayt akışlarını yazabilir.

Dünyanın En İyi Üniversitelerinden Online Yazılım Geliştirme Kursları öğrenin . Kariyerinizi hızlandırmak için Yönetici PG Programları, Gelişmiş Sertifika Programları veya Yüksek Lisans Programları kazanın.

8. Bir tamsayı dizisindeki en büyük veya en küçük sayıyı nasıl bulabilirsiniz?

Bu çözüm için, tam tamsayı olan dizilerden en büyük veya en küçük sayıyı bulabilen bir işlev veya yöntem kodlamalıyız. Öncelikle MaximumMinimumArrayDemo.java adını kullanarak Java'da bir kaynak dosya oluşturmalı ve yazılan kodu derleme ve yürütme için buraya kopyalamalıyız.

Dizilerden sırasıyla maksimum ve minimum değerleri saklamak için 'en büyük' ​​ve 'en küçük' olarak adlandırabileceğimiz iki değişken kullanabiliriz. En küçük sayı tamsayı.MIN_VALUE kullanılarak, en büyük sayı ise tamsayı.MAX_VALUE kullanılarak başlatılabilir.

Başlattığınız döngülerin her yinelemesinde, mevcut sayıları 'en büyük' ​​ve 'en küçük' ile karşılaştırabilir ve buna göre güncelleyebilirsiniz. Diziler, Java'da toString yöntemini geçersiz kılmaz, bu nedenle hedef dizilerin içeriğini yazdırmak için Arrays.toString() öğesini kullanabilirsiniz.

Ana işlevi doğrudan çağırmak için bu statik yöntemi kullanabilirsiniz. Ardından, maksimum ve minimum değerlerin doğru bir şekilde döndürülüp döndürülmediğini kontrol etmek için rastgele dizileri bu yöntemden geçirmelisiniz. Ayrıca, IDE'nizdeki Birim testleri aracılığıyla bu testi otomatikleştirmeyi de seçebilirsiniz.

Ödeme: Özgeçmişinize Ekleyebileceğiniz En İyi 4 Bilgisayar Becerisi

Çözüm

Programlamaya odaklanan kurslar sadece problem çözmek için değil, aynı zamanda iş başvurularında seçilme şansınızı da arttırır. Java programlama ve daha gelişmiş kodlama sorunları hakkında daha fazla bilgi edinmek istiyorsanız, kendinizi upGrad'ın Bilgisayar Bilimleri Yüksek Lisansı veya Tam Yığın Geliştirme Kursu gibi kapsamlı bir kursa kaydedebilirsiniz .

Tam Yığın Geliştirici Olun

UpGrad'ın Yazılım Mühendisliğinde İş Bağlantılı PG Sertifikasyonu için başvurun