Kodlama sırasında , büyük girdiler için bazı tam sayı taşma durumlarıyla karşılaşabiliriz. Bugün, problem çözme sırasında karşılaştığım bu tür iki senaryoyu tartışacağım.
Diyelim ki size sıralı bir tamsayı dizisi verildiğini ve bu dizide belirli bir elemanı bulmanız istendi. Dizi sıralandığından, hedef elemanı O (logN) zamanında bulmak için ikili arama algoritması uygulayabiliriz; burada N, giriş dizisinin boyutudur.
İkili aramanın temel fikri , diziyi her ikiye böldüğümüzde, orta dizini bulduğumuzda ve hedef öğeyi orta öğe ile karşılaştırdığımızda. Eğer hedef eleman ortadaki elemandan büyükse, bu durumda orta dizinin bir sonraki dizininden başlayarak dizinin yalnızca sağ kısmını aramamız gerekir. Hedef eleman orta elemandan küçükse, dizinin orta dizinden önce biten sol kısmını aramamız gerekir.
Öyleyse soru orta endeksi nasıl bulacağımız. Çok basit; iki noktayı korumamız gerekiyor: başlangıç ve bitiş; başlangıç işaretçisi 0 ile başlatılır ve bitiş işaretçisi N-1 ile başlatılır (N, dizinin boyutudur). Dolayısıyla, orta dizini bulmak için kullanacağımız formül:
mid = (başlangıç + bitiş) / 2.
İlk bakışta bu formül masum görünebilir, ancak bu formüle yakından bakarsak ilk kısımda iki tam sayı eklediğini görebiliriz. İki tam sayı eklediğimiz için, bu iki sayı çok büyükse tamsayı taşması olasılığı vardır. Bu nedenle bu formülden kaçınmalıyız. Bunun yerine orta endeksi hesaplamak için aşağıdaki formülü kullanabiliriz:
orta = başlangıç + (bitiş-başlangıç) / 2;
Açıkça " (bitiş-başlangıç) / 2", " bitiş " den küçüktür ve bu formül, büyük başlangıç ve bitiş değerleri için tamsayı taşmasına neden olmayacaktır .
Diyelim ki bize bir 2D tamsayı dizisi verildi ve diziyi her satırın ikinci değerine (veya her 1D dizisinin ikinci öğesine) göre artan sırada sıralamamız gerekiyor. Java'da diziyi sıralamanın bir yolu şöyledir:
Arrays.sort (arr, (a, b) -> a [1] -b [1]);
Yukarıdaki kod hemen hemen tüm girişler için iyi çalışıyor, ancak giriş dizisi şöyle görünüyorsa: [[-2147483646, -2147483645], [2147483646,2147483647]]
Bu durumda, yukarıda belirtilen koda göre "2147483647" yi "-2147483645" den çıkarıyoruz
veya -2147483645–2147483647 = -4294967292; bu da tamsayı taşmasına neden olur.
Yukarıdaki kodu biraz değiştirirsek, tamsayı taşmasını önleyebiliriz. Değiştirilen kod aşağıdaki gibidir:
Arrays.sort (dizi, (a, b) -> a [1] <b [1]? -1: 1);
Sonuç olarak, iki tam sayı arasında bir toplama veya çıkarma işlemi yaptığımızda, büyük girdi durumları hakkında düşünmemiz ve tamsayı taşmasını önlemek için alternatif bir yaklaşım bulmaya çalışmamız gerektiğini söylemek isterim.
Java'da volatile anahtar kelimesini kullandığımızda perde arkasında neler olduğuna ve neden senkronizasyonun yerini tam olarak almadığına kısa bir bakış uçucu anahtar kelime genelinde. Bu anahtar kelime, bir değişkende yapılan herhangi bir değişikliğin diğer ileti dizileri tarafından hemen görülebilmesini sağlamak için kullanılabilir, bu nedenle verilerimizin eski, senkronize olmayan ve yanlış hale gelmesini önlemeye yardımcı olur.
Harika, Bu yüzden sorunların temel nedenini anlamak ve en etkili çözümü bulmak için onlara farklı açılardan bakmak konusunda güçlü bir arzuya sahip bir düşünür ve tasarımcıyım. Bu vaka çalışması, katıldığım 48 saatlik Ürün Tasarım Yarışmasının bir parçasıdır.
Kasım 2020'nin başlarında SalesForce, açıklanamayacak şekilde JARM adlı yeni bir aktif TLS parmak izi alma aracını duyurdu. JARM'ın temeli, bir hedef sunucu özel olarak hazırlanmış çeşitli farklı TCP "İstemci merhaba" paketleri kullanılarak tarandığında, elde edilen yanıtların birleştirilip, paylaşılan veya benzer bir uygulama veya sunucunun göstergesi olan bir parmak izi sağlamak için karma hale getirilebilmesidir. yığını.
Harika geliştiriciler yapan teknik olmayan şeyler Bir süredir bu makaleyi yazmayı erteliyorum - yazmak için hiç nitelikli hissetmedim. Bugün onu yazma zamanının geldiğini düşündüm.
Teknoloji endüstrisindeki bir pozisyon için mülakat yaparken, herhangi bir teklif değerlendirilmeden önce genellikle en az üç tur mülakattan geçeceksiniz. Mermiler genellikle şuna benzer: Eğer öyle düşünüyorsan, yanılıyorsun.
Pragmatik Programcı ilk olarak 1999'da yayınlandı ve o zamandan beri tüm zamanların en iyi programlama kitabı seçildi. Yazarlar Andy Hunt ve David Thomas, Agile Manifesto'nun orijinal yazarları arasındaydı ve bazı ciddi referanslara sahipler.