LeetCode içerisinde bulunan “Boats to Save People” sorusunun açıklaması ve çözümü. Her bir bot aynı anda en fazla 2 kişiyi taşıma koşulu ile, kişilerin ağırlığı ve her bir botun taşıma kapasitesi verildiği taktirde, tüm kişileri taşımak için en az kaç bota ihtiyacınız olduğu soruluyor.
LeetCode içerisinde bulunan “Find Pivot Index” sorusunun açıklaması ve çözümü. Pivot index, sağındaki ve solundaki elemanların toplamı eşit olan eleman anlamındadır. Size verilen bir tamsayı dizisinde, varsa pivot elemanının index’ini bulmanız isteniyor.
Given an array of integers nums, write a method that returns the “pivot” index of this array.
We define the pivot index as the index where the sum of all the numbers to the left of the index is equal to the sum of all the numbers to the right of the index.
If no such index exists, we should return -1. If there are multiple pivot indexes, you should return the left-most pivot index.
Example 1:
Input: nums = [1,7,3,6,5,6]
Output: 3
Explanation: The sum of the numbers to the left of index 3 (nums[3] = 6) is equal to the sum of numbers to the right of index 3. Also, 3 is the first index where this occurs.
Example 2:
Input: nums = [1,2,3]
Output: -1
Explanation: There is no index that satisfies the conditions in the problem statement.
Constraints:
The length of nums will be in the range [0, 10000].
Each element nums[i] will be an integer in the range [-1000, 1000].
LeetCode içerisinde bulunan “Self Dividing Numbers” sorusunun açıklaması ve çözümü. Bu soruda size verilen bir sayının, içerdiği tüm rakamlara tam olarak bölünüp bölünmediğini (0 hariç) soruluyor.
C# 9.0 versiyonu ile gelen “top-level statements” özelliğine göz attık videoda. Özellikle C#’a yeni başlayan kişiler için kod yazmayı daha basit hale getirdiğini düşündüğüm bir yapı.
Şimdi boş bir konsol uygulaması oluşturduğunuz düşünelim, karşınıza gelen kod bloğu şu şekilde oluyor;
using System;
namespace ConsoleNetCoreTest
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Hello World!");
}
}
}
Yeni başlayan kişiler için, using, namespace, static, void, Main, diziler, args gibi birçok bilmediği yapı var bu boilerplate kod içerisinde. Bunlar kafa karıştırıcı olabiliyor.
.NET 5 ile birlikte gelen C# 9.0 versiyonunda, statement’ları direkt olarak dosyanızın en üstünde yazabiliyorsunuz. Bu nedenle namespace, class, Main gibi kısımları yazmamanıza gerek kalmıyor. Bu sayede başlangıç seviyesindeki kişiler için daha basit bir şekilde kod yazma imkanı oluşuyor.
.NET 5 ile geldiği için öncelikle .csproj dosyanızdaki “TargetFramework” kısmını “net5.0” olarak düzenlemeniz gerekiyor. Tabi bunu videodaki gibi projenin properties kısmından da düzenleyebiliyorsunuz .NET 5.0’ı seçerek.
using System;
Console.WriteLine("Hello World!");
Peki Main metodu olmadan işletim sistemi başlangıç noktasını nereden biliyor? Aslında IL koduna baktığınızda, hala compiler arka tarafta “Program” adında bir sınıf ve “Main” adında bir metod oluşturuyor. Sadece bunun açık bir şekilde yazılmasına gerek kalmıyor artık. Hatta “args” kısmını da direkt olarak kullanabiliyorsunuz sihirli bir şekilde. Örneğin command line üzerinden parametre gönderdiğinizde “args” ile bunları direkt alabiliyorsunuz.
using System;
if (args.Length != 0)
{
foreach (var arg in args)
{
Console.WriteLine(arg);
}
}
Birkaç kural;
► Sadece tek bir dosyanız top-level statement’a sahip olabiliyor “Main” mantığı gereği. Bir başka dosya içerisinde top-level statement yazmaya çalıştığınızda hata alıyorsunuz.
► Top-level statement’lar, içerisinde kullandığınız başka sınıf tanımlarının da üstünde olmalıdır. Önce sınıf tanımını yapıp sonra statement’ı yazdığınızda hata alırsınız. Hatta bu tanımlamaları yaptığınız IL koduna bakarsanız, bu Person sınıfının sanki farklı bir .cs dosyası içerisindeymiş gibi oluştuğunu görürsünüz. Yani C# derleyicisi önce bi “top-level statements”ları alıp, Program sınıfı ve Main metodu için derler, geri kalan tiplerin hepsini de ayrı bir C# tipi gibi derleme yapar.
► Son söz olarak;
Bence bu özellik C# dili ile daha kolay bir şekilde “oynamamızı” sağlıyor. Özellikle C#’ı yeni öğrenmeye başlayan kişiler için ve küçük kod yazımları bakımından gayet faydalı olduğunu düşünüyorum. Kaynaklar:
LeetCode içerisinde bulunan “Invert Binary Tree” sorusunun açıklaması ve çözümü. Bu soruda size verilen bir binary tree‘i tersine çevirmeniz isteniyor. Binary tree yapısı ile en sık karşılaşabileceğiniz soru tipi. Rekürsif yapı ile mantığını oturtursanız çok kolay anlaşılabiliyor.
✨ Binary tree nedir?
In computer science, a binary tree is a tree data structure in which each node has at most two children, which are referred to as the left child and the right child.
The Fibonacci numbers, commonly denoted F(n) form a sequence, called the Fibonacci sequence, such that each number is the sum of the two preceding ones, starting from 0 and 1. That is,
LeetCode içerisinde bulunan “Minimum Absolute Difference” sorusunun açıklaması ve çözümü. Bu soruda dizi içerisinde verilen sayılardan iki sayının arasındaki en az farka sahip olan tüm sayı çiftlerini geri döndürmeniz isteniyor.
Arada sırada yeni insanlarla tanıştığımız ve kendimizi tanıtmak zorunda kaldığımız için çoğumuz kendimizi tanıtmaya yabancı değiliz. Bununla birlikte, iş görüşmelerinde kendini tanıtmak gerçek hayattan biraz farklıdır, bu yüzden bunu kendi avantajımıza çevirmemiz gerekiyor bence.
Görüşmelerde bildiğim kadarıyla şu sorular çok soruluyor;
✔️ Bana programcı geçmişinden bahseder misin?
✔️ Kodlamaya nasıl ilgi duydun ve mobil geliştirme neden senin için uygun oldu?
✔️ Bu bizim şirket hedeflerimize nasıl uygun olur?
Bu kavram, bu bir gazetecinin bir editöre fikir sunması için asansördeki 30 saniyesini nasıl en iyi şekilde kullanacağına dayanır. Bu kavrama göre;
✔️ Kısa – Sınırlı zamanınız var!
✔️ Doğrudan – Sınırlı süreniz olduğundan, direkt konuya gelmelisiniz.
✔️ Dikkat çekme – En çekici fikirlerini sunma
İster onlarca başka adayla bir iş görüşmesinde ve zamanınız kısıtlı olsun, ya da potansiyel bir müşteriye kim olduğunuzu açıklıyor olun, bilgi ve becerilerinizi hızlı ve net bir şekilde açıklayabilmeniz sizin için harika bir özelliktir.
➡️ Format nasıl olmalı peki?
✔️ Mevcut veya en son görevinizle ilgili bir cümle.
✔️ Geçmişiniz hakkında birkaç cümle. Neye odaklandın bu süreçte?
✔️ Nerede çalıştın? Hangi projelerle uğraştın? Tipik zorluklar ve görevler nelerdi? Hangi teknolojileri kullandın?
✔️ Neden yeni bir iş fırsatı aradığınızı ve başvurduğunuz pozisyonla neden ilgilendiğinizi belirten bir açıklama ile bitirin.
ÖRNEK BİR KENDİNİ TANITMA
Merhaba, ben Soner, İstanbul Üniversitesi Bilgisayar Mühendisliği bölümünden 2011 yılında mezun oldum. İlgi alanlarım backend yazılım geliştiriciliği ve iyi kullanıcı deneyimi ve performanslı ürünler geliştirmek.
İlk olarak Scania Turkey bünyesinde, finans raporlamaları üreten uygulamalar üzerine çalıştım. Ardından Akbank’ta önce açık sistemler veri saklama ve veri yedekleme üzerine, ardından izleme sistemlerinde monitoring uygulamaları geliştirdim. Şu anda mobil ekibinde, bankanın kampanya bazlı uygulaması olan Axess Mobil’in backend geliştiricilerinden biriyim.
Şirketinizdeki X pozisyonu ile ilgilieniyorum çünkü hali hazırda bu teknolojileri kullanıyorum ve şirketinizin açık kaynak kod kültürünü destekliyorum.
Birkaç ufak not;
➡️ En sevdiğiniz ve/veya en etkileyici projelerden, bazı önemli noktaları anlatın ve etkileyiciyse “sayıları” veya üstesinden geldiğiniz zorlukları dahil edin.
➡️ Ve son olarak, konuşmanız için pratik yapmalısınız! Becerilerinizin harika ve kısa bir özetine sahip olmak bu konuda çok önemlidir. Hızlı ama takip etmesi kolay bir hızda pratik yapmalısınız.
LeetCode içerisinde bulunan “House Robber” sorusunun açıklaması ve çözümü. Bu soruda profesyonel bir hırsız olduğunuzu düşünün. Size verilmiş evlerden, içerisindeki parayı soymak istiyorsunuz, fakat art arda olan evleri soyarsanız alarm çalışıyor ve polise haber veriyor. Bu kurala bağlı olarak, elde edebileceğiniz maksimum para miktarını bulmanız gerekiyor.
You are a professional robber planning to rob houses along a street. Each house has a certain amount of money stashed, the only constraint stopping you from robbing each of them is that adjacent houses have security system connected and it will automatically contact the police if two adjacent houses were broken into on the same night.
Given a list of non-negative integers representing the amount of money of each house, determine the maximum amount of money you can rob tonight without alerting the police.
Example 1:
Input: nums = [1,2,3,1]
Output: 4
Explanation: Rob house 1 (money = 1) and then rob house 3 (money = 3). Total amount you can rob = 1 + 3 = 4.
Example 2:
Input: nums = [2,7,9,3,1]
Output: 12
Explanation: Rob house 1 (money = 2), rob house 3 (money = 9) and rob house 5 (money = 1). Total amount you can rob = 2 + 9 + 1 = 12.
LeetCode içerisinde bulunan “Unique Number of Occurrences” sorusunun açıklaması ve çözümü. Size verilen tamsayı dizisinde bulunan tüm sayılardan, adet olarak hepsinin birbirinden farklı olup olmadığı soruluyor.