Если вы метите в джуниоры, то вам нужно несколько изменить порядок книг в вашей очереди.
Отложите алгоритмы и TDD на последнюю очередь -- это безусловно очень важные темы, но для вашей цели не первоочередные.
Познакомьтесь с паттернами (GoF) и "Рефакторингом" Фаулера.
Прочитайте вдумчиво английское издание Effective Java Джошуа Блоха. Не загромождайте (поначалу) голову паззлерами.
Ну и, наконец, сформируйте то, что нужно работодателю -- кругозор. Получите представление о вещах, вращающихся вокруг Java. Вот вам набор ключевых слов: Java Collections Framework, Java EE, Spring Framework, Maven, Glassfish, JDBC... Не нужно углубляться. Осознайте, что это такое. Изучите туториалы.
Я считаю, для поставленной цели этого достаточно.
Не ищите альтернативу Java. Язык проще, чем C, намного более управляемый с точки зрения дурацких ошибок новичка (ваш случай). К тому же, если вдруг соберетесь работать программистом, вероятность найти работу на C и C++ значительно меньше, чем на Java.
Мы в текущем проекте используем Tapestry framework. Тоже компонентно-ориентированный, как и JSF. Имеет свою библиотеку tapestry-hibernate, так что можно работать прям из коробки. Своя реализация CDI. Поддержка JQuery: tapestry-Jquery-Components, Ajax и прочее. Очень хорошая документация, мгновенно-отвечающее комьюнити. Единственное, что после JSF может смущать - посроен tapestry не по jsr, так что аннотации не стандартные. Вобщем полистайте документацию, посмотрите пример, может и понравится.
import java.io.FileInputStream;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;
public class LsZip {
public static void main(String[] args) throws Exception {
byte[] zipBytes = ...;
ZipInputStream zis = new ZipInputStream(new ByteArrayInputStream(zipBytes));
ZipEntry entry;
while ((entry = zis.getNextEntry()) != null) {
// здесь делайте то, что вам требуется с entry.getName()
}
}
}
interface Payable<T> {
void doIt(T t);
}
class Employee implements Payable<Employee> {
@Override
public void doIt(Employee t) {}
}
class Hourly extends Employee implements Payable<Hourly> {
//что реализовать?
@Override
public void doIt(Employee t) {}
// или
@Override
public void doIt(Hourly t) {}
}