Archive for the ‘Java SE’ Category
Clean Tests by Jacek Kiljański
Podczas konferencji Confitura 2012, Jacek Kiljański z Javart poprowadził prezentację na temat testów jednostkowych. Pojawiło się sporo ciekawych praktyk i wzorców, ale także kontrowersji, np. dotyczących konwencji nazewniczych w testach. Warto obejrzeć i skonfrontować z własnymi praktykami.
Read the rest of this entry »
Mechanizmy synchronizacji wątków w Javie 6
Jeśli piszesz aplikacje wielowątkowe w Javie, to prędzej czy później zainteresujesz się mechanizmami synchronizacji. Łukasz Dembiński przedstawia trzy najpopularniejsze sposoby synchronizacji wątków w Javie 6 oraz porównuje ich wydajność przy różnych współczynnikach współbieżności. W swoich porównaniach, oprócz wydajności, bierze pod uwagę także zapewnianie funkcjonalności:
- reentrant locking
- timed locking
- lock polling
- condition locking
- shared / exclusive locking
- lock ownership
Zapraszam do lektury.
NoClassDefFoundError vs ClassNotFoundException
java.lang.NoClassDefFoundError
i java.lang.ClassNotFoundException
brzmią bardzo podobnie ze względu na swoje nazwy i są często mylone. Tak naprawdę ich znaczenie jest różne.
Spójrzmy na hierarchię klas:
Read the rest of this entry »
Jak pobrać PID w runtime’ie?
Jak pobrać PID w runtime’ie? Oto prosty sposób:
import java.lang.management.ManagementFactory; public class PID { public static void main(String[] args) { final String vmName = ManagementFactory.getRuntimeMXBean().getName(); final int position = vmName.indexOf('@'); final String pid = vmName.substring(0, position); System.out.println("Your PID is: " + pid); } }
Zagadka z Iteratorem
Ciekawa zagadka znaleziona w sieci. Należy tak poprawić poniższy kod, aby na ekranie wyświetlił się napis Hello World
. Oczywiście wyjątek ConcurrentModificationException
(ani żaden inny) nie może się pojawić. Pozostałe obostrzenia to:
- w żaden sposób nie wolno modyfikować kodu poza sekcją
FIXME
- nie wolno użyć refleksji
- cały poniższy kod musi się wykonać; nie można użyć
System.exit(0)
lubreturn
public class IteratorPuzzle { public static void main(String[] args) { final Listlist = new ArrayList () {{ add("Hello"); }}; final Iterator iterator = list.iterator(); System.out.print(iterator.next()); list.add("World"); // FIXME: tutaj dopisujemy kod System.out.println(" " + iterator.next()); } }
Powodzenia:)
Java concurrency: the hidden thread deadlocks
Pierre – Hugues Charbonneau jest konsultantem IT oraz architektem systemowym w CGI Inc specjalizującym się w Java EE, technologiach JVM oraz w optymalizacji systemów dużej skali. Jego blog Java EE Support Patterns to istna gratka dla osób zainteresowanych wątkami, współbieżnością, synchronizacją, zakleszczeniami, organizacją i problemami z pamięcią, profilowaniem czy maszyną wirtualną.
Polecam jeden z ostatnich postów: Java concurrency: the hidden thread deadlocks.
Cztery smaki odwracania (i utraty) kontroli
W styczniowym numerze magazynu programista ukazał się artykuł Sławomira Sobótki (Bottega IT Solutions) pt. Cztery smaki odwracania (i utraty) kontroli: Dependency Injection, Events, Aspect Oriented Programming, Framework. Tekst jest syntezą wieloletnich doświadczeń i przemyśleń na temat Inversion of Control. Kolejne techniki coraz to silniejszego odwracania kontroli (powiązanego z jej utratą) zostały opisane wg struktury:
Read the rest of this entry »
Ify to zło?
Tomasz Nurkiewicz, znany m.in. ze stackoverflow opowiada o znanej wszystkim konstrukcji warunkowej if. Pokazuje jak można ją zastąpić dziedziczeniem lub wzorcami projektowymi. W trakcie prezentacji refaktoruje fragmenty kodu naszpikowane konstrukcjami warunkowymi, pełne flag, przełączników i trybów. W metodach i klasach sporo mieszania odpowiedzialności: bezpieczeństwo, transakcje, wielowątkowość, mierzenie czasu i obsługa błędów.
Czy ify są aż tak złe?
Read the rest of this entry »
DDD – lek na Legacy Code?
Robert Reppel, Senior Solution Architect w PayByPhone.com opowiada o zastosowaniu technik Domain-Driven Design oraz SOLID w celu polepszenia jakości Legacy Code. W prezentacji nie zabraknie przykładowego kodu.
Link do prezentacji na InfoQ.