obenplus.com | oben+ | Hikayesi bol bir yazılımcının kaleminden, teknoloji dünyasını en önemli ve en ince ayrıntısına kadar takip etmek, bir yazılımcının hayatını, yaşantısını gözlemlemek isteneyenler için...

Archive for Şubat, 2015

1) How to Print duplicate characters from String? (solution)

To start with, we have a simple String related coding question frequently asked in programming interviews. You need to write a program in C, C++, Java or Python to print duplicate characters from a given String, for example if String is “Java” then program should print “a”. Bonus points if your program is robust and handle different kinds of input e.g. String without duplicate, null or empty String etc. Bonus points if you also write unit tests for normal and edge cases.

2) How to check if two Strings are anagrams of each other? (solution)

A simple coding problem based upon String, but could also be asked with numbers. You need to write a Java program to check if two given strings are anagrams of Each other. Two strings are anagrams if they are written using the same exact letters, ignoring space, punctuation and capitalization. Each letter should have the same count in both strings. For example, Army and Mary are anagram of each other.

3) How to program to print first non repeated character from String? (solution)

One of the most common string interview questions: Find the first non-repeated (unique) character in a given string. for Example if given String is “Morning” then it should print “M”. This question demonstrates efficient use of Hashtable. We scan the string from left to right counting the number occurrences of each character in a Hashtable. Then we perform a second pass and check the counts of every character. Whenever we hit a count of 1 we return that character, that’s the first unique letter. Be prepared for follow-up question for improving memory efficiency, solving it without hash table as well.

4) How to reverse String in Java using Iteration and Recursion? (solution)

Your task is to write a program to reverse String in Java without using StringBuffer class. You also need to provide both iterative and recursive algorithm for String reversal. You can use other String utility methods e.g. charAt(), toCharArray() or substring() from java.lang.String class.

5) How to check if a String contains only digits?  (solution)

You need to write a program to check a String contains only numbers by using Regular expression in Java. You can use Java API but a solution without using Java API will be better because that is what interviewer can always ask.

6) How to find duplicate characters in a String? (solution)

You need to write a program to print all duplicate character and their count in Java. For example if given String is “Programming” then your program should print
g : 2
r : 2
m : 2

7) How to count number of vowels and consonants in a String? (solution)

One of easiest String question you will ever see. You have to write a Java program which will take a String input and print out number of vowels and consonants on that String. For example if input is “Java” then your program should print “2 vowels and 2 consonants”. If you get this question on Interview, you should clarify that whether String can contain numbers, special characters or not e.g. anything other than vowels and consonants.

8) How to count occurrence of a given character in String? (solution)

If interviewer ask you to count occurrence of more than one character than you can either use an array, hash table or any additional data structure. In order to solve this problem, you are not allowed to do so. Your method must return count of given character, for example if input String is “Java” and given character is ‘a’ then it should return 2. Bonus point if you handle case, null and empty String and come up with unit tests.

9) How to convert numeric String to int? (solution)

A classical coding interview question based upon String. You need to write a method like atoi() from C/C++, which takes a numeric String and return its int equivalent. For example, if you pass “67263” to the program then it should return 67263. Make sure your solution is robust i.e. it should be able to handle + and – character, null and empty String, integer overflow and other corner cases. Bonus points if you come up with good unit test cases. By the way, if your interviewer doesn’t mention to you about atoi() then you can also use Java API’s parseInt() or valueOf() method to solve this problem.


Untitled123Java’da Future ve Future Task asenkron kod yazılmasına yarıyor. Future, value döneceği sözü verilmiş olan bir objeyi ifade ediyor. Asenkron programlama yapmanın bir yolu, oluşturduğumuz threadlere callback objeleri vermek ve threadin işini bitirdiği zaman callback objesini invoke etmesini beklemektir. Java 1.5 öncesinde bence en uygun ve belki de tek mantıklı çözüm buydu. Fakat daha sonrasında Future ve FutureTask ile tanıştık. Artık tabiri caizse high level düzeyde thread yönetimini yapmamız mümkün.

Aşağıda örnek bir java uygulaması paylaşıyorum. Bu kodlar size konuyu yazıyı okuyarak anlamanızdan çok daha fazla faydalı olacaktır diye düşünüyorum.

“FactorialTask” bir numberın faktoriyelini hesaplayan basit bir class. “FutureMain” de sıradan bir main fonksiyonu barındıran bir class.

 

 


Right Shift Operator ">>"

Right Shift Operator “>>”

Java dilinde 2 farklı sağa öteleme tipi bulunuyor. Bunlardan ilki “>>” operatörüdür ve “right shift” olarak bilinir. Diğeri ise “>>>” işaretidir. Bu işareti de okulda “right shift with zero fill” ya da “unsigned right shift” olarak öğreniriz. Bu iki operatör de, mevcut bitleri bir bit sağa kaydırmaya yarayan operatörlerdir. Bu iki operatör arasında aslında kritik önemde bir fark bulunur. >> operatörü, mevcut bitleri bir bit sağa kaydırırken işaret bitine dokunmayarak kaydırma yapar. Kaç kere sağa ötelediğinizden bağımsız olarak, işaret biti, negatif bir sayı için korunur. Daha literatürsel olarak ifade edersek de Most Significant Bit değişmez, kaybolmaz. Öte yandan, >>> operatörü ise, işaret bitinden bağımsız olarak sağa öteleme yapar. Yani Most Significant Bit her öteleme sonrası yeni bir sıfır ile doldurulur.

Eğer Unsigned Right Shift yapsaydık aşağıdaki mantık ile çalışacaktı;


Aynı örneği >>> operatörü ile yapmış olsaydık, bu durumda negatif işaretini kaybedecektik.

Eğer bitshift konusuna meraklı iseniz aşağıdaki yazıları okumanızı önerebilirim.

  • How to Swap Two Number without using Temp variable? (solution)
  • How to check if an Integer is power of Two in Java? (solution)
  • How to count number of Set bits (1s) in Java Integer? (solution)
  • What is difference between bitwise and logical operator in Java? (answer)
  • How to add two numbers without using arithmetic operator? (solution)
  • How to check if a number is even or odd in Java? (solution)

 

 


JSON, Javascript Object Notation anlaşılır anlamıyla, bir java objesinin insanlar tarafından okunabilen bir veri değişim biçimidir. Klasik DOM ağacı mantığından hiç bir farkı da yoktur ve XML e oranla daha simplified bir metin olduğundan çoğunlukla tercih edilir. Bizim konumuz XML mi JSON mu olmadığı için bu karşılaştırma sürecine değinmeyeceğim.

Java da sıklıkla ihtiyaç duyduğumuz şeylerden birisi de, bir serializable Java objesini, JSON a çevirme ya da JSON metninden bir java objesi oluşturmaktır. Bu ihtiyaçlarımız için Jackson, Gson vb. librarylerden yararlanırız. Ben de sizlere geçen günlerde karşılaştığım ve oldukça performanslı ve verimli olduğunu düşündüğüm, kullanım olarak Gson ya da Jackson dan farkı olmayan Boon kütüphanesinden bahsetmek istiyorum.

 Boon kütüphanesini aşağıdaki maven dependency aracılığıyla kullanabilirsiniz;

 Obje -> JSON Çevirmek

 JSON -> Obje Çevirmek

Boon hakkında daha detaylı bilgiye sahip olmak için https://github.com/boonproject/boon/wiki/How-to-Parse-JSON-to-from-Java-Object-using-Boon-Example adresini ziyaret etmenizi tavsiye ederim.


Hangi yazılım geliştiriciye sorsam, muhtemelen tamamına yakını hayatının bir kısmında “project_x_01_01_1992.rar” şeklinde PVS(Personal Versioning System koydum adını) sistemini kullanmıştır. Ama bir bakarsın gün gelir, “versiyon kontrol sistemi” diye birşeyle tanışırsınız. İçinizde ufak bir utangaçlık da yaratır bu haliyle 🙂 Neden bunu bu zamana kadar bilmiyordum ki ben dersiniz…  Ben bu soruna çözüm olarak üretilen Dağıtık Versiyon Kontrol Sistemleri‘nden biri olan Git’ten bahsedeceğim.

Git in komutları oldukça basit, clonecommit, push, pull.

Süper Anlaşılır ve Süper Özet Olarak Git;

Kodları repository den alıp bilgisayarınıza cloneluyorsunuz. Daha sonra kodlarda değişiklik yapmaktasınız ve ana repository e kodları göndermeden önce offline ortamda dahi olsanız kodları commit edebiliyorsunuz. Sonra da diyelim internet bağlantınız da var, artık kodlarınızı push edebilirsiniz. Başka arkadaşlarınızın kod değişikliklerini bilgisayarınıza alabilmek için de repository den pull edebilirsiniz.

Youtube videosunu izleyerek GIT in tüm detaylarını öğrenebilirsiniz.