0Pricing
Coding Interview Prep · Ders

Kenar Durumlarını Ele Alma ve Mülakatçıyla İletişim

Açıklayıcı sorular sorma, varsayımları belirtme, kodlamadan önce karmaşıklığı tartışma ve mülakatçınızla test durumlarını adım adım inceleme alıştırması yapın.

Kenar Durumlarını Ele Alma ve Mülakatçıyla İletişim, CoddyKit'te ücretsiz bir Coding Interview Prep dersidir. Bu, 4 dersinin 3. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Coding Interview Prep öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Coding Interview Prep kursu toplamda 4 dersten oluşur.

İletişim Neden Mülakatın Yarısıdır

Birçok aday, kodlama mülakatlarında iletişimin en az doğruluk kadar önemli olduğunu öğrenince şaşırır. Görüşmeciler gelecekteki iş birliğini değerlendirir: Sizinle bir ekipte çalışabilirler mi? Akıl yürütmenizi açıklayabilir misiniz? Açıklayıcı sorular soracak mısınız, yoksa örtük varsayımlarda mı bulunacaksınız? Düşünce sürecini yüksek sesle anlatan bir aday, yanlış bir yola girse bile, doğru kod üreten ancak sessiz kalan bir adaydan çoğu zaman daha yüksek puan alır.

Mülakat, eve götürüp tamamlayacağınız bir sınav değildir — bir diyalogdur. Göreviniz düşüncelerinizi sesli ifade etmek, geri bildirim istemek ve görüşmeciyi ipuçları sağlayabilecek bir çalışma arkadaşı olarak görmektir. 2-3 dakikadan uzun süren sessizlik, takıldığınızı ve rahatsız olduğunuzu gösterir; görüşmeciler bunu olumsuz değerlendirir.

# Interview scoring dimensions (typical FAANG rubric)
dimensions = {
    'Problem solving':    'Correct approach, handles edge cases, considers complexity',
    'Communication':      'Thinks out loud, explains decisions, asks clarifying questions',
    'Code quality':       'Clean, readable, appropriate naming, modular',
    'Testing':            'Traces examples, tests edge cases proactively',
    'Efficiency':         'Identifies bottlenecks, proposes optimisations',
    'Adaptability':       'Responds to hints, pivots when wrong, graceful under pressure',
}
print('Typical interview scoring dimensions:')
for dim, desc in dimensions.items():
    print(f'  {dim:20s}: {desc}')
print('\nCommunication is evaluated as heavily as problem solving correctness.')

İlk 5 Dakika: Açıklayıcı Sorular

Problem açıklandıktan hemen sonra kod yazmaya başlamayın. Açıklayıcı sorular sormak için 2-3 dakika ayırın. Bunun iki amacı vardır: Çözümü değiştiren gizli kısıtları ortaya çıkarır ve mühendislik olgunluğunuzu gösterir — iyi mühendisler bir şey inşa etmeden önce ayrıntıları netleştirir.

İyi açıklayıcı sorular şunlardır: n için kısıtlar nelerdir? Girdi negatif sayılar içerebilir mi? Girdinin her zaman geçerli olduğunu varsayabilir miyim? Boş girdiyi ele almalı mıyım? Çıktının sırası önemli mi? Girdide yinelenen değerler var mı? Bunları netleştirmek, 40 dakika boyunca yanlış problemi çözmenizi önler.

# Clarifying question templates by category
clarifying_questions = {
    'Input constraints': [
        'What is the range of n? (1 <= n <= 10^5?)',
        'Can values be negative / zero?',
        'Can there be duplicates?',
        'Is the input always valid or do I need to handle invalid inputs?',
    ],
    'Output format': [
        'Should I return or print the result?',
        'Is the order of output elements important?',
        'If multiple valid answers exist, which should I return?',
    ],
    'Edge cases': [
        'What should I return for an empty input?',
        'What if no answer exists? Return -1, empty list, or raise?',
    ],
    'Assumptions to state': [
        'I will assume all inputs fit in memory.',
        'I will assume single-threaded access (no concurrency).',
        'I will treat the array as mutable (ok to modify in-place).',
    ],
}
for category, questions in clarifying_questions.items():
    print(f'{category}:')
    for q in questions: print(f'  - {q}')
    print()

Varsayımları Açıkça Belirtme

Soru soramadığınızda (örneğin görüşmeci belirsizliği nasıl ele aldığınızı görmek istediğinde), ilerlemeden önce varsayımlarınızı yüksek sesle belirtin. Bu, belirsiz bir durumu net bir duruma dönüştürür ve görüşmeciye karar verme sürecinizi gösterir.

Örnek ifadeler: 'Girdi dizisinin boş olmadığını varsayacağım, ancak yine de bir güvenlik kontrolü ekleyeyim.' 'Değerlerin standart 32 bitlik bir tam sayıya sığacağını varsayacağım.' 'Yalnızca ASCII karakterlerini değil, Unicode karakterlerini de ele almamız gerektiğini varsayacağım.' 'Problem belirtmediği için, birden fazla çözüm olduğunda sözlük sırasına göre en küçük çözümü döndüreceğim.' Her varsayım, görüşmecinin doğrulayabileceği veya yönünü değiştirebileceği bir karardır.

# Example: explicitly stated assumptions in code comments
def longest_palindrome(s):
    # Assumptions:
    # - s consists of lowercase English letters only
    # - 1 <= len(s) <= 1000
    # - Return the first palindrome if multiple exist with same max length
    # - If s is empty (not per constraints but defensive): return ''
    if not s:
        return ''

    start = end = 0

    def expand(l, r):
        nonlocal start, end
        while l >= 0 and r < len(s) and s[l] == s[r]:
            if r - l > end - start:
                start, end = l, r
            l -= 1; r += 1

    for i in range(len(s)):
        expand(i, i)       # odd-length palindromes
        expand(i, i + 1)   # even-length palindromes
    return s[start:end + 1]

print(longest_palindrome('babad'))   # 'bab' or 'aba'
print(longest_palindrome('cbbd'))    # 'bb'
print(longest_palindrome('a'))       # 'a'

Kod Yazarken Düşüncelerinizi Açıklama

Kod yazarken temel kararlarınızı açıklayın. Kodu satır satır okumayın ('Burada bir döngü yazıyorum') — bu, gereksiz gürültü oluşturur. Bunun yerine kararları ve akıl yürütmeyi anlatın: 'Tamamlayıcıyı izlemek için bir sözlük kullanıyorum; böylece her seferinde diziyi taramak yerine O(1) sürede yanıt verebilirim.' 'Çıkarma işleminden önce boş yığın durumunu burada ele almam gerekiyor.' 'İki işaretçili yaklaşımın geçerli olması için önce sıralama yapıyorum — sıralamanın maliyeti O(n log n), bu da O(n) taramaya baskın geliyor.'

Bu açıklamalar görüşmecinin düşünce sürecinizi anlamasına yardımcı olur, ipucu verebilmeleri için dayanak noktaları sağlar ve belirli bir yaklaşımı neden seçtiğinizle ilgili yanlış anlamaları önler.

# Example narration script for Two Sum problem
narration = [
    'I see this asks for indices of two numbers that sum to target.',
    'Brute force would be O(n^2) — check all pairs. I can do better.',
    'I will use a hash map to store each number and its index.',
    'For each number, I compute target - number and check if it is in the map.',
    'This gives O(n) time and O(n) space — one pass through the array.',
    "Edge case: what if the same element is used twice? The problem says 'exactly two different indices', so I check the current index is not the stored one.",
    'Let me write it...',
]
for step in narration:
    print(f'[NARRATE] {step}')

print()
def two_sum(nums, target):
    seen = {}   # value -> index
    for i, n in enumerate(nums):
        complement = target - n
        if complement in seen and seen[complement] != i:  # different index
            return [seen[complement], i]
        seen[n] = i
    return []

print('Result:', two_sum([2, 7, 11, 15], 9))   # [0, 1]

İpuçlarını Yapıcı Biçimde Ele Alma

Görüşmeciler iki nedenle ipucu verir: Takılmışsınızdır ve mülakatın ilerlemesini isterler ya da yönlendirmeye nasıl karşılık verdiğinizi sınamaktadırlar. İpucu almak başarısızlık değildir — tasarlanmış deneyimin bir parçasıdır. İpuçlarına şu şekilde karşılık verin: (1) ipucunu kabul edin, (2) onu açıkça uygulamaya katın, (3) yaklaşımınızı değiştirin.

İpucunu görmezden gelmeyin veya aldıktan sonra aynı yanlış yolda ilerlemeye devam etmeyin — bu, verilebilecek en kötü tepkidir. Savunmaya geçmeyin ('Ben de tam bunu deneyecektim'). Bunun yerine şöyle deyin: 'Ah, bu iyi bir nokta — diziyi önce sıralarsam iki işaretçi kullanabilirim. Buna yeniden yaklaşayım...' Bu, ekip uyumu için önemli bir gösterge olan yönlendirmeye açıklığınızı gösterir.

# Responses to common interviewer hints
hint_responses = [
    {
        'hint': 'What if the array were sorted?',
        'bad_response': 'Oh, it is not sorted in this problem.',
        'good_response': 'Great point! If sorted, I could use two pointers. Let me sort first in O(n log n), then apply two pointers for O(n). Total O(n log n) which might be acceptable.',
    },
    {
        'hint': 'Can you reduce the space?',
        'bad_response': 'My solution is already O(n), that seems fine.',
        'good_response': 'Yes! Currently O(n) for the hash map. For an O(1) space solution, I could modify the array in-place as a visited marker, or use Floyd cycle detection...',
    },
    {
        'hint': 'What data structure could give you O(1) lookup here?',
        'bad_response': '...a list?',
        'good_response': 'A hash set or hash map! Instead of scanning O(n) each time, I can build a set upfront and check membership in O(1). Let me redesign...',
    },
]
for h in hint_responses:
    print(f'Hint: "{h["hint"]}"')
    print(f'  Bad:  {h["bad_response"]}')
    print(f'  Good: {h["good_response"]}')
    print()

Sınama Aşaması: Örnekler Üzerinden İlerleme

Çözümünüzü yazdıktan sonra yalnızca 'Çalıştığını düşünüyorum' demeyin. Önemsiz olmayan bir sınama durumunu elle adım adım inceleyin. Kodunuzu izleyin, her adımda değişken değerlerini güncelleyin ve çıktının beklenen sonuçla eşleştiğini doğrulayın. Buna elle çalıştırma veya iz sürme denir.

Temel mantık yolunu çalıştıran bir sınama durumu seçin (en basit sınır durumu olmasın). Ardından sözlü olarak bir veya iki sınır durumunu sınayın. Görüşmeciler adayların bu adımı atladığını fark eder — bu, ya aşırı özgüvene ya da özensizliğe işaret eder.

# Manual trace of Two Sum for demonstrating testing
def trace_two_sum(nums, target):
    seen = {}
    print(f'Input: {nums}, target={target}')
    for i, n in enumerate(nums):
        complement = target - n
        print(f'  i={i}, n={n}, complement={complement}, seen={seen}', end=' => ')
        if complement in seen:
            print(f'FOUND! indices [{seen[complement]}, {i}]')
            return [seen[complement], i]
        print('not found, adding to seen')
        seen[n] = i
    print('No solution found')
    return []

# Demonstrating the testing workflow
print('=== Testing valid case ===')
trace_two_sum([2, 7, 11, 15], 9)
print()
print('=== Testing no solution ===')
trace_two_sum([1, 2, 3], 10)
print()
print('=== Testing with duplicates ===')
trace_two_sum([3, 3], 6)

Sınır Durumu Kategorilerini Ayrıntılı İnceleme

Kapsamlı bir sınır durumu çözümlemesi her problem için beş kategoriyi ele alır:

  • Boş girdi: boş liste, boş dize, boş ağaç, n=0
  • Tek öğe: bir öğe, bir düğüm, n=1
  • Tüm öğelerin aynı olması: tümü yinelenen değerler, tümü sıfır, tümü aynı karakter
  • Uç değerler: en küçük/en büyük tam sayılar, negatif sayılar, taşma durumları
  • Zaten en iyi durumdaki girdi: zaten sıralı, zaten en büyük değere çıkarılmış, yinelenen değer içermeyen

Bittiğinizi ilan etmeden önce her problem için zihninizde bu beş kategoriyi gözden geçirin. Mülakatlardaki hataların çoğu ilk üç kategoride görülür — özellikle boş veya tek öğeli girdilerdeki bir eksik/fazla hatalarında.

def validate_solution_coverage(fn, problem_name):
    print(f'Edge case checklist for: {problem_name}')
    edge_categories = [
        ('Empty input',      '[] or ""'),
        ('Single element',   '[x] or "x"'),
        ('All same',         '[5,5,5,5] or "aaaa"'),
        ('Negative/zero',    '[-1, 0, 1] or negative target'),
        ('Already optimal',  'sorted input, already max, no change needed'),
    ]
    for category, example in edge_categories:
        print(f'  [ ] {category}: test with {example}')

# Example problem being tested
def max_subarray(nums):
    if not nums: return 0  # edge: empty
    max_sum = cur_sum = nums[0]  # edge: single element handled by init
    for n in nums[1:]:
        cur_sum = max(n, cur_sum + n)
        max_sum = max(max_sum, cur_sum)
    return max_sum

validate_solution_coverage(max_subarray, 'Maximum Subarray')
print()
for test in [[], [-1], [-2,-1], [0], [5,5,5], [-3,-1,-2]]:
    print(f'max_subarray({test}) = {max_subarray(test) if test else 0}')

Zaman ve Alan Karmaşıklığını Açıklama

Çözümünüzü tamamladıktan sonra karmaşıklığı her zaman belirtin. Biçim şu şekildedir: zaman karmaşıklığı, alan karmaşıklığı ve tek cümlelik bir gerekçe. Yalnızca 'O(n)' demekten kaçının — nedenini açıklayın: 'Diziyi bir kez dolaşıyoruz — zaman O(n). Karma eşleme en fazla n öğe tutabilir — alan O(n).'

Özyinelemeli çözümlerde çağrı yığınının derinliğini de dikkate alın: 'Özyineleme derinliği, h ağacın yüksekliği olmak üzere O(h)'dir — dengeli ağaçlar için O(log n), en kötü durumda O(n).' Görüşmeciler çoğu zaman 'Daha iyisini yapabilir misiniz?' diye takip sorusu sorar — karmaşıklığı önceden çözümlemiş olmanız hızlı yanıt vermenize yardımcı olur.

# Complexity analysis template
def analyze_complexity(function_name, time_complexity, space_complexity, justification):
    print(f'Function: {function_name}')
    print(f'Time:  {time_complexity}')
    print(f'Space: {space_complexity}')
    print(f'Why:   {justification}')
    print()

# Examples of well-stated complexity analyses
analyze_complexity(
    'Two Sum (hash map)',
    'O(n)',
    'O(n)',
    'Single pass through n elements; hash map stores at most n entries'
)
analyze_complexity(
    'Binary Search',
    'O(log n)',
    'O(1)',
    'Halve the search space each step; no extra data structures'
)
analyze_complexity(
    'Merge Sort',
    'O(n log n)',
    'O(n)',
    'log n levels of recursion, O(n) work per level; O(n) aux space for merging'
)
analyze_complexity(
    'DFS on binary tree',
    'O(n)',
    'O(h) where h = tree height',
    'Visit each node once; call stack depth = height (O(log n) balanced, O(n) worst)'
)

Tamamen Takıldığınızda

Bir mülakatta takılmak normal ve beklenen bir durumdur — görüşmeciler çoğu zaman tamamen çözemeyeceğinizden daha zor problemler verir. Önemli olan takıldığınızda nasıl davrandığınızdır. Paniğe kapılıp sessiz kalmayın. Bunun yerine şu aşamalı ilerlemeyi izleyin:

  1. Problemi yeniden okuyun. Bir kısıtı gözden kaçırdınız mı?
  2. Kâğıt üzerinde küçük örnekler deneyin. Bir örüntü ortaya çıkıyor mu?
  3. Her adımda hangi bilgilere sahip olduğunuzu düşünün. Hangi yapı bu bilgileri verimli biçimde saklar?
  4. Nerede takıldığınızı belirtin: 'O(n²) çözümünü kolayca elde edebiliyorum, ancak iç döngüden nasıl kaçınacağımı anlamaya çalışıyorum.'
  5. Açıkça ipucu isteyin: 'Beni doğru yöne yönlendirecek küçük bir ipucu verebilir misiniz?'
# Recovery script when stuck in an interview
recovery_steps = [
    'Re-read problem: Did I miss a constraint? (sorted? unique? positive only?)',
    'Smallest example: trace through by hand for n=3 or n=4',
    'Brute force first: state the O(n^2) or O(2^n) solution, then look to optimise',
    'Data structure fit: what do I need to track? (freq, order, min/max?) => pick structure',
    'Pattern mapping: sorted+find = binary search? All combos = backtracking? Min cost = DP?',
    'Partial solution: solve a simpler version (ignore duplicates, only positive numbers)',
    'Ask for hint: "I can get to O(n^2) but am trying to see how to use a hash map here."',
]
print('When stuck, escalate through these steps:')
for i, step in enumerate(recovery_steps, 1):
    print(f'{i}. {step}')

print('\nWhat NOT to do when stuck:')
dont_do = [
    'Stay silent for > 2 minutes (raises red flags)',
    'Randomly try different code without reasoning',
    'Announce "I give up" (ask for a hint instead)',
]
for d in dont_do:
    print(f'  X {d}')

Ödünleşimleri ve Alternatifleri Tartışma

Çözümünüzü sunduktan sonra alternatifleri ve ödünleşimleri kendiliğinizden tartışın. Bu, konu bilginizin derinliğini gösterir. Yaygın ödünleşim tartışmaları şunlardır:

  • 'DFS yerine BFS de kullanabilirim — BFS en kısa yolu verir, ancak w en büyük genişlik olmak üzere O(w) kuyruk alanı kullanır; DFS ise O(h) yığın alanı kullanır.'
  • 'Bu çözüm, O(1) alan elde etmek için girdiyi yerinde değiştiriyor; girdinin korunması gerekiyorsa bunun yerine O(n) yardımcı alan eklerdim.'
  • 'Mevcut yaklaşımım sıralama nedeniyle O(n log n); values k ile sınırlıysa O(n + k) zamanda sayma sortu kullanabiliriz.'
# Trade-off discussion examples
trade_offs = [
    {
        'approach': 'Hash Map (Two Sum)',
        'time': 'O(n)', 'space': 'O(n)',
        'alternative': 'Sort + Two Pointers',
        'alt_time': 'O(n log n)', 'alt_space': 'O(1)',
        'when_to_choose_alt': 'When input is already sorted or space is very constrained',
    },
    {
        'approach': 'BFS (shortest path)',
        'time': 'O(V+E)', 'space': 'O(width)',
        'alternative': 'DFS (any path)',
        'alt_time': 'O(V+E)', 'alt_space': 'O(height)',
        'when_to_choose_alt': 'When path existence matters more than shortest path',
    },
    {
        'approach': 'Recursive DFS',
        'time': 'O(n)', 'space': 'O(h) call stack',
        'alternative': 'Iterative DFS with explicit stack',
        'alt_time': 'O(n)', 'alt_space': 'O(h) explicit',
        'when_to_choose_alt': 'When recursion depth may hit Python limit (sys.setrecursionlimit needed)',
    },
]
for t in trade_offs:
    print(f'{t["approach"]}: {t["time"]} time, {t["space"]} space')
    print(f'  Alt: {t["alternative"]}: {t["alt_time"]} time, {t["alt_space"]} space')
    print(f'  Choose alt when: {t["when_to_choose_alt"]}\n')

Mülakat Sonrasında Sorabileceğiniz Sorular

Mülakatın sonunda size "Bana sormak istediğiniz bir şey var mı?" diye sorulacaktır. Bu bir formalite değildir — değerlendirilir. Özenle düşünülmüş sorular sormanız, entelektüel merakınızı ve gerçek ilginizi gösterir. Ekibi ve yapılacak işi düşündüğünüzü gösteren sorular sorun.

İyi sorular: "Bu ekip için tipik bir geliştirme döngüsü nasıl geçiyor?" "Ekibin şu anda üzerinde çalıştığı en zorlu teknik sorun nedir?" "Kod tabanının hangi yönlerini geliştirebilmeyi isterdiniz?" "Özellik geliştirme ile teknik borç arasında nasıl bir denge kuruyorsunuz?" Bu aşamada maaş hakkında soru sormaktan kaçının (bunu HR için saklayın) ve Google'da kolayca bulunabilecek hiçbir şeyi sormayın.

# Questions to ask your interviewer (sorted by quality)
questions = [
    # High impact - shows genuine curiosity
    'What is the most interesting technical challenge you have worked on here?',
    'How does the team approach code review and technical decisions?',
    'What does the onboarding process look like for new engineers?',
    'What is the biggest technical challenge or debt the team is actively tackling?',
    # Medium impact - shows team awareness
    'How does your team balance new features with reliability work?',
    'What tools and infrastructure does the team use day-to-day?',
    # Lower impact (but still fine)
    'How many engineers are on the team and how is it structured?',
    'What does a typical day look like for someone in this role?',
]
print('Questions to ask your interviewer (ranked by impact):')
for i, q in enumerate(questions, 1):
    print(f'{i:2d}. {q}')

Kısa Kontrol

Bu dersteki Veri Yapıları ve Algoritmalar — Kodlama Mülakatı Hazırlığı kavramlarını ne kadar anladığınızı sınayın.

Ders Özeti

Bu derste şunları öğrendiniz: iletişim, kodun doğru olması kadar önemlidir — kod yazmadan önce gereksinimleri netleştirin, düşüncelerinizi sesli ifade edin ve yazarken temel kararları açıklayın, boş, tek öğeli, tümü aynı, uç değerler ve zaten en iyi durumdaki girdiler olmak üzere beş uç durum kategorisini içeren sınama senaryolarını her zaman elle adım adım inceleyin ve ipuçlarını zarifçe karşılayarak bunları kabul edin ve yaklaşımınızı açıkça değiştirin — koçluğa açık olmak, ekip uyumunun temel göstergelerinden biridir. Sırada kurstaki en zor iki problem türünü, Kelime Merdiveni II ve Uzaylı Sözlüğü'nü, uçtan uca eksiksiz açıklamalarla ele alacağız.

Sıkça Sorulan Sorular

“Kenar Durumlarını Ele Alma ve Mülakatçıyla İletişim” dersi ücretsiz mi?

Evet — “Kenar Durumlarını Ele Alma ve Mülakatçıyla İletişim” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Coding Interview Prep kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Coding Interview Prep kursu toplamda 4 dersten oluşur.

“Kenar Durumlarını Ele Alma ve Mülakatçıyla İletişim” dersinde ne öğreneceğim?

Açıklayıcı sorular sorma, varsayımları belirtme, kodlamadan önce karmaşıklığı tartışma ve mülakatçınızla test durumlarını adım adım inceleme alıştırması yapın. Coding Interview Prep ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.

Coding Interview Prep öğrenmeye başlamak için deneyim gerekli mi?

Önceden deneyim gerekmez. CoddyKit'te Coding Interview Prep, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 3. dersidir.

“Kenar Durumlarını Ele Alma ve Mülakatçıyla İletişim” dersi ne kadar sürer?

Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.

Bu Coding Interview Prep dersinde kod yazıp çalıştırabilir miyim?

Evet. Her Coding Interview Prep dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.

Bu kursun tüm dersleri

  1. Örüntü Tanıma Kopya Kâğıdı
  2. Süreli Deneme Mülakatı: Kolay ve Orta Düzey Problemler
  3. Kenar Durumlarını Ele Alma ve Mülakatçıyla İletişim
  4. Zor Problem Çözümleri: Sözcük Merdiveni II ve Uzaylı Sözlüğü
← Coding Interview Prep Sayfasına Dön