Помогите, пожалуйста, люди добрые! Пишу от безысходности! Archiver (16)

В задаче нужно написать метод для удаления файлов из zip архива. Испробовал минимум сотню вариантов, но все, как один, не проходят по пункту! Метод removeFiles должен записывать в новый архив все файлы из старого архива, кроме тех, которые в списке на удаление. Затем, заменить старый архив новым! Но я это и делаю! Вот один из вариантов:
public void removeFiles(ListpathList) throws Exception {
if (!Files.isRegularFile(zipFile))
throw new WrongZipFileException();
Path templ = Files.createTempFile(null, null);
try (ZipInputStream zipInputStream = new ZipInputStream(Files.newInputStream(zipFile)); ZipOutputStream result = new ZipOutputStream(Files.newOutputStream(templ))) {
ZipEntry zipEntry = zipInputStream.getNextEntry();
while (zipEntry != null) {
String fileFullName = zipEntry.getName();
Path path = Paths.get(fileFullName);
if (pathList.contains(path))
ConsoleHelper.writeMessage(«мы удалили файл » + zipEntry.getName());
else {
if (zipEntry.isDirectory()) {

}
else
addNewZipEntry(result, path.getParent(), path.getFileName()); //метод создает новый ZipEntry
}
zipEntry = zipInputStream.getNextEntry();
}
}
Files.move(templ, zipFile, StandardCopyOption.REPLACE_EXISTING);
}
Смирено прошу вашей помощи! Пожалуйста…
  • ,

Spring для ленивых. Основы, базовые концепции и примеры с кодом. Часть 1.

Многие люди после прочтения моих статей про создание заготовки для веб-проекта и про создание простенького веб-сервиса на сервлетах — интересовались когда я напишу и про спринг. Я не хотел, предлагал почитать книгу (и до сих пор говорю, что книга — это лучше чем 10, а то и 100 статей в интернете). Но сейчас вот решил, что объясняя одно и то же разным людям — я трачу больше времени, чем если бы один раз сел и написал статью, а потом просто кидал бы им ссылочку. Так что пишу ради ссылочки))

Статья доступна по ссылке — javarush.ru/groups/posts/476-spring-dlja-lenivihkh-osnovih-bazovihe-koncepcii-i-primerih-s-kodom-chastjh-1

Очередной 3-курсник ушедший в IT (часть 2)

Ссылка на первую часть истории .


Что-ж с момента как я написал первую часть прошло довольно много времени (почти 2 года). Меня давно просили написать вторую часть, но не было либо времени либо желания, ну или просто забывал, но вот наконец руки дошли.

И так, закончилось все на том что я наконец нашел работу мечты и всё такое. Очень благодарен этой компании за всё, она действительно сделала меня разработчиком. Были взлеты и были падения, хотелось бы поведать много историй которые там произошли, но не знаю корректно ли это с моей стороны — выносить что-то из избы, но всё же в кратце хотелось бы описать работу там:

За время как я начал работать там, выучил очень много технологий, как на сервере так и на фронте. Даже попробовал себя в лидерстве небольшой команды (3 человека), разпределяя задачи, местный техлид так сказать, не скажу что сильно понравилось :).

Пришел к выводу что иногда легче сделать самому, чем ждать пока это сделает кто-то или сделает это плохо, но это такое — может я не самый лучший лид был. Тем не менее требования заказчика всегда выполняли в срок, и заказчик всегда был доволен, так что это скорее моральное недовольство чем профессиональное. Так что как говорится: «Собака лают, а караван идет».

(Типичный лид на проекте)
Типичный лид на проекте

Так же когда становишься тру программистом — начинаешь понимать и минусы профессии. Помимо большой зарплаты, удобного офиса, печенек и прочих плюшек, вас ждет и стресс перед дедлайном, сидения до 4 утра, перед важными днями чтобы закончить задачу (ну или я такой весь инициативный был). Дело в том что бывает состояние когда просто не можешь или не знаешь как решить задачу и это чувство в голове — не дает спать, не дает думать о другом, может так только у меня, но пообщавшись с коллеками понял что нет, каждый испытывает стресс, особенно когда опыта не так много и каждая таска это что-то новое :)

Проработал я в компании 1 год и 3 месяца, ни о чем не жалею. На то время как ушел? владел фронтэндом практически на свободном уровне:
Angular и React были достаточно сильном уровне. Так же любые средства сборки, аля Gulp, Webpack, и прочие штуки которые увеличивают размер бандла, но делают разработку более удобной :)
Верстать умел кросс-браузерно и адаптивно. Верстка самое легкое что только может быть в программировании, но очень рутинно и скучно когда умеешь, так что не могу сказать что получал удовольствие от верстки, скорее использовал её для отдыха мозгов и слушания музыки.
Знал SQL достаточно неплохо, так же сидел на проекте где очень много использовался ElasticSearch — Объектно оринтировання БД для анализа больших объемов данных. Умел реализовывать разные стратегии авторизации (Basic, JWT, Session storage) ну и в общем более глубоко влез в бэк-энд технологии.


Кстати решение поменять работу пришло в дико пьяном угаре :DD простите за такие подробности, но только так я мог решиться написать HR-ру на Linked IN :)
Собственно весь этот багаж знаний помог устроится на работу как Strong Middle Fullstack Developer. Конечно на более большую зп (выше на 65% от той что работал)..
Всего было 3 этапа собеседования:
Английский
Созвонился с их преподавателем по английскому, и было что-то типа разговора за жизнь:) Определили уровень Intermediate B1, что достаточно для работы у них в компании.
Техническое
Собеседование было про Angular 2 и Бэк-энду. На тот момент еще не знал Angular 2, но вакансия была срочная очень, и попросили на выходных почитать за него (странная просьба, но сработало). Собственно то что почитал + большой опыт в других фреймворках, помогли хорошо пройти собес по Front-end части. Back-end часть сдал тоже неплохо, так что получил оффер практически сразу после собеса :)
Ментальное
Но тут уж понятно, вопросы аля: «Сможете ли вы иногда задерживаться после работы?» (еще бы, знали бы они моё первое место работы из 1 части истории), «Кем вы видите себя через 5 лет» и т.д.

Собственно сам уход из прошлой компании был очень сложный, т.к. очень привязался к тому месту. Но к моему удивлению очень быстро привык к новому месту работы.
Работаю здесь с Июня, около 7-8ми месяцев, всем доволен, проект менялся за время 2 раза и сейчас около 4-5 месяцев сижу на одном, как Fullstack Developer.

Кстати по иронии судьбы это именно та компания, в которую я попал на JS-курсы. Здесь уже конечно все серьезней: несколько офисов по миру, корпоративная джира, официальные отпуска, мед страховки и весь стандартный вкусный набор, так что грех жаловаться на то как всё вышло :)
Что поменялось:
Да всё, черт возьми, очень много всего.
Защитил диплом (и так же победил на конференции дипломов в универе (случайно))


Cнял квартиру, купил мопса (маленькая мечта с детства), купил восьмой айфон, помогаю семье родственникам материально,
в первый съездил заграницу (Афины, Греция)



Подтянул хорошо английский (корпоративные курсы, постоянные митинги на английском), Познакомился лично с заказчиком когда он приезжал, заказчик всем подарил такую штуку, мелочь а приятно:



Был смертью на хэллоинском корпоративе



и еще очень много чего поменялось в жизни, но это не так важно на самом деле.


Итог

Ну и давайте уже подводить итоги. За всё время работы (чуть больше двух лет), Я понял, что когда ты находишь работу — всё только начинается. Первые месяцы, начинающий программист испытывает колоссальный стресс, Я не спал ночами, вечно не хватает знания в какой-то области, вечное есть что-то, что ты еще не знаешь и кажется что так будет всегда. Главное, перетерпеть этот этап и идти только вперед, сколько надо времени раздуплять новое и т.д. В конце-концов появляется чувство, что все равно на каком фреймворке проект, ведь ты уже видал столько — что не боишься чуть-чуть погуглить для изучения нового.
Ведь самое приятное не найти работу в своей области, а занять некую нишу, чтобы чувствовать себя на ней уверенно.
С высоты не самого слабого мидла, скажу что каждый начинает это чувствовать спустя некоторое время: таски становятся все тривальнее, созвоны с заказчиками уже не такие страшные, умеешь распределять время так, чтобы и успевать к дедлайну сделать всё качественно и брать пару дней отдыха (время когда ты по сути на работе, но смотришь ютубчик или занимаешься своими делами). В общем все придёт со временем, главное не боятся, пить смузи пока не заболеешь, и фигачить столько сколько нужно.

P.S. Из плохого — поправился на пару кг, жирочек приобрел :)
P.S.S Если зайдет — напишу третью часть с удовольствием. JavaRush не забываю, рекламирую его как могу (бесплатно :DD ) среди друзей которые хотят «ВАЙТИ В АЙТИ» ))0. Пожалуйста не пишите что статья куплена, и это реклама, ребята из JavaRush залсужили, курсы окупились уже 300 раз, так что еще раз хотел бы сказать спасибо вам)
  • ,

help please

Всем привет) Взялся я тут осваивать спринг, попытался сварганить простейшее web приложение — но вот беда, браузер отказывается видеть что-то кроме index.jsp. Т.е если в директории web находится файл index.jsp то браузер его прекрасно видит, но любой другой в любой директории вообще никак. Знаю что проблема довольно типичная, но в гугле ответа что-то не нашел (там у людей в основном пути были прописаны неправильно). Тыкните в правильном направлении, уже довольно долго сижу туплю(

SOS !Встречаемость символов! 8 уровень, 11 лекция

Решил эту задачу, проверил, все работает, но валидатор отправил меня в далекое плаванье с моим решением. Подскажите, пожалуйста, что не так, а то у меня уже третий день горит.
Вот код:
public class Solution {
public static void main(String[] args) throws Exception{
TreeMap<Integer, Integer> map = new TreeMap<>();
BufferedReader reader = new BufferedReader(new FileReader(args[0]));
while (reader.ready()) {
char[] array = reader.readLine().toCharArray();
for (char letter: array) {
if(map.get((int)letter) == null)
map.put((int)letter, 1);
else {
int a = map.get((int)letter);
a++;
map.put((int)letter, a);
}
}
}
reader.close();
char a;
int i;
for (Map.Entry<Integer, Integer> pair: map.entrySet()) {
i = pair.getKey();
a = (char) i;
System.out.println( a + " " + pair.getValue());
}
reader.close();
}
}
Говорит, мол, вывод должен быть отсортирован по возрастанию кода ASCII. Но он и так отсортирован, в этом и суть!
  • ,

Помогите! Не удается получить доступ к сайту!

Здравствуйте! Со вчерашнего дня сражаюсь с такой проблемой:

Не удается получить доступ к сайту

Веб-страница по адресу javarush.ru/course.html, возможно, временно недоступна или постоянно перемещена по новому адресу.
ERR_SPDY_INADEQUATE_TRANSPORT_SECURITY

Не один браузер не открывает сайт.Очистка Куки, кэша DNS через командную строку, проверка на вирусы, замена Hosts, изменение адреса dns на 8.8.8.8, вход с ip других стран не помог. С мобильного нет проблем со входом на сайт.
  • ,

Где взять задачи(идеи) для закрепления материала по пройденым темам JR?

Здравсвуйте. Сейчас на 17-м уровне, и ощущается, что тяжело уже все идет, мотивация падает из-за того, что не понимаешь что-то или даже больше из-за того, что каша в голове.
Суть моего вопроса в общем в том, чтобы хотелось еще больше практики, мини проекты какие-то, но не тупо отсортировать коллекцию определенным образом, а чтобы была задумка какая-то интересная(например мини игра, парсер с сайта) но графику еще не изучал, поэтому только консоль. Может кто подсказать подобные интересные задачи?

Поздравление с Новым годом от Зеленой лягушки

Уважаемые джаварашевцы и джаварашатессы!

Веселье весельем, а серьезное пожелание будет как никогда кстати. Желаю здоровья, взвешенных решений, крепких отношений. И учиться, учиться и еще раз учиться. В мое детство над этой фразой Владимира Ильича Ленина все смеялись. А я, будучи веселым беззаботным школьником, особенно. Но вот прошло несколько десятков лет, настал XXI век. И оглядываясь вокруг, а особенно бросая взгляд в будущее, я уже не смеюсь. Постоянная учеба стала актуальной тенденцией и вскоре станет насущной необходимостью. Без этого человек не сможет занять достойного места в обществе. Пожизненных вам способностей и возможностей к обучению!

С Новым годом!



С уважением,
Зеленая лягушка.
  • ,

Год спустя, Android

Парни, привет! Хочу рассказать, как прошел первый год работы программистом, где я нахожусь сейчас, через что прошел и что маячит на горизонте.

Итак, со времени написания первой статьи у меня сменился работодатель. Сейчас я работаю в Альфа-банке: не в лабе, а над внутренним проектом (для сотрудников банка). У нас своя продуктовая команда, всего 7 человек, детали могу рассказывать очень выборочно, так как NDA.

Я один Android-разработчик. Мы работаем двухнедельными спринтами, то есть ставим конкретные задачи на 2 недели вперед и следим за их выполнением. Наш продакт-менеджер решает, куда нам нужно развиваться и какой функционал реализовать. Мы, разработчики, берем день на оценку задачи (нужно понять, какие трудности на iOS, Android, в дизайне и на сервере) и даем свою оценку, мол, реально сделать за такое-то количество дней. Продакт оценивает, стоит ли игра свеч, и мы либо повторяем процедуру либо приступаем к реализации.

У меня нет макбука, но может появится в январе. В банке много бюрократии (на все нужны заявки, на интернет, на флешку, на youtube) и это тяжело. Но сильная корпоративная культура, много интересных и приятных людей в компании. Есть терки между отделами. Приятный ДМС, прикольный офис на м. Технопарк. Конечно, зарплата интересна, да?) Зарплата у меня обычная для мидла в Москве.

Что было позади? В мае я ушел из студии. Мне предложили расстаться полюбовно: у них было ко мне претензии, я уже вел переговоры с QIWI о работе, у меня были сложные отношения с тимлидом — в общем, правда стоило уйти. Еще мне платили мало, и, херовый я работник, сильно стараться меня это не мотивировало.
После маленькой студии, которая уже десяток лет бьется за небольшой кусок хлеба и не может наладить внутренние процессы, попасть в Альфу было раем.

Смешно может звучать, но корпоративная культура — вполне реально понятие. Студии не повезло с тимлидом, он не любил общаться с людьми в принципе, поэтому он мне не только не помогал, но и злился и срывался на мне, что ему приходится заниматься моими глупыми вопросами. В нашей команде сейчас люди спокойно тратят свое время на то, чтобы ответить на мои вопросы, как и я трачу свое время на то, чтобы ответить на вопросы моих коллег, даже когда кто-то просто звонит по телефону и пишет письмо, что у него что-то не так с моим приложением. Звучит банально и нормально, но поверьте, во многих российских студиях этого вы не найдете.

В общем, проработав в студии 5 месяцев, я толком ничему не научился. У меня тогда шли переговоры с QIWI (длительное оформление, но они просто слились после прохождения мною всех этапов собеседования — четырех, карл!- будьте с ними аккуратнее), и я понимал, что нужно что-то делать. Я с помощью знакомых вышел на тимлида в одной крутой московской IT компании. Договорился о собеседовании, которое не прошел, но ему понравился и мы договорились, что я буду с ним заниматься английским, а он подтянет меня в андроиде.

Мы с ним занимались три месяца, два раза в неделю часа по 1-1,5 часа на предмет. Он обычно рассказывал мне какую-то тему, концептуальную, а на задание давал читать исходники, подробные статьи на тему и практические задания, например, освоить библиотеки типа Dagger, RxJava, переопределить работу нативных классов Android и т.п. И это дало реальный скачок моим знаниям. Особенно клево было то, что был человек, которому я мог задавать вопросы.

Пожалуй, это был самый интенсивный период обучения программированию за все три года, что я им занимаюсь. Самообучение это круто и все такое, но ему тяжело тягаться с человеком, который умеет коммуницировать и знает предметную область. Я не утверждаю, что самообучение фигня или что образование обязательно, просто замечаю, что форма обучения с tutor дает в короткие сроки очень крутой результат. К академическому образованию у меня свой список претензий.

Итак, что в перспективах? Мне все еще нужно освоить стек модных технологий. Реактивное программирование и Kotlin самые большие вершины из ближайшего. Я стал немного ориентироваться в архитектуре приложений, но пока сижу на обычном MVP, силюсь понять Clean архитектуру, но одному тут тяжело. Поэтому хочу перейти в чисто IT-шную компанию и прокачиваться в команде. С другой стороны, у меня хорошие условия здесь и еще поле непаханое в плане саморазвития — есть тысяча вещей, которые я могу сам освоить и отработать в своем проекте. Посмотрим, как карта ляжет.

Вот, спустя год работы разработчиком, я уже с интересом читаю Философию JAVA. Как человеку, не имеющему профильного образования, но имеющего высшее, это помогает посмотреть на программирование академически. Я нашел несколько youtube-каналов об android, которые мне нравятся, и смотрю записи с англоязычных конференций. Надо бы ходить на наши, но я предпочитаю гонять в Зельду и Splatoon 2 по вечерам :D

Хочется этот год как-то обобщить. Я, наверно, мямля и слабак, но честно сказать — год был пи*** какой тяжелый. Особенно первая работа в маленькой и хромой фирме. Условия отстой, коллектив не очень, а вам нужно как-то начинать. И еще дикий стресс из-за новых знаний, большей демпинг по зарплате. Если у вас есть семья, поверьте, вашему партнеру может быть не легко.

Но это стоит того. Правда, работать в IT, имея склонность к программированию, если и не счастье, но что-то очень близкое к этому. Есть свои минусы — вы много сидите, постоянный стресс изучения чего-то нового, вы БУДЕТЕ перерабатывать. Но то удовольствие, которое может приносить эта работа — мечта для многих профессий. Вы можете делать что-то полезное для людей, постоянно учиться и работать с новыми инструментами, вы в каком-то плане в арьергарде современной культуры, для вас создаются отличные условия труда, ваша профессия не привязана к вашему родному языку, а место работы — к производству,- в общем, отлично быть программистом сейчас.

Объективно, моя жизнь стала намного лучше, после решения сменить профессию. Мне иногда жалко думать, что я не сделал этого раньше и страшно думать, как бы я тратил свою жизнь впустую, если бы продолжил жить как раньше, как удобно, как известно. Но нынешние горизонты пьянят, профессиональное коммьюнити программистов отличное (англоязычное), а работа доставляет удовольствие каждый день.
Дерзайте, парни! Не думайте, что будет легко в первое время, но вам нужен где-то год опыта, чтобы вы стали привлекательным для работодателей. Мне даже из Яндекса звонили (правда, я провалил даже вводные три вопроса по телефону, но не это важно). В общем, желаю всем реализовать свои амбиции в новом году! С наступающим!

Загадка сериализации

Есть код:


package app;

import java.io.*;

public class Solution {
    public static void main(String[] args) throws Exception{
        B b1 = new B();
        File file = new File("D:\\test.txt");
        OutputStream os = new FileOutputStream(file);
        ObjectOutputStream oos = new ObjectOutputStream(os);
        oos.writeObject(b1);
        oos.close();
        os.close();

        InputStream is = new FileInputStream(file);
        ObjectInputStream ois = new ObjectInputStream(is);

        System.out.println("Before serialization: " + b1.str);
        b1 = (B) ois.readObject();
        System.out.println("After de-serialization: " + b1.str);
        ois.close();
        os.close();
    }
}
class A{
    protected String str = "A";
}
class B extends A implements Serializable{
    public B() {
        this.str += "B";
    }
}


Вывод в консоль:

Before serialization: AB
After de-serialization: A


Мат.часть по ссылке www.skipy.ru/technics/serialization.html говорит следующее:
При использовании Serializable десериализация происходит так: под объект выделяется память, после чего его поля заполняются значениями из потока. Конструктор объекта при этом не вызывается.

и следующее:
То есть при десериализации вызывается конструктор без параметров родительского НЕсериализуемого класса. Конструктор же дочернего объекта, того, который мы десериализуем, не вызывается.

Если смотреть код, то логика такова:
1. Сериализуем объект b1 класса B.
2. К моменту его сериализации b1.str = «AB», соответственно в выходной поток пишется именно это состояние объекта.
3. При десериализации (если следовать теории) должно происходить следующее:
— Под объект b1 выделяется память
— Вызывается конструктор без параметров родительского класса. При этом, как я предполагаю, поля объекта b1 инициализируются либо значениями, определенными в классе-родителе, либо значениями по умолчанию. Видимо так и происходит, поэтому b1.str становится = «А»
— И вот тут по теории поля b1 уже должны заполнятся реальными значениями из потока, т.е. b1.str должно стать = «AB».

Почему этого не происходит?

Вопрос по применению регулярных выражений

Добрый день, джаварашевцы и джаварашатессы!
Прошу подсказать следующее, есть код:


Pattern p = Pattern.compile("[a-z]+");
Matcher m = p.matcher("A mutable sequence of characters.");
int numberOfChar = m.groupCount();
System.out.println(numberOfChar);


В консоль должно быть выведено количество символов от a до z (c учетом повторения) в указанной строке. Выводит ноль. Никак не пойму почему. Уже несколько статей прочитал по регулярным выражениям. Не помогает. Почитал документацию Oracle по классам Pattern, Matcher. Опять не помогло. Наверное глаз замылился, не вижу чего-то очевидного.
Прошу бескорыстно помочь. И достичь цели — пройти 18 и 19 уровни до конца 2017 года.

С уважением,
Зеленая лягушка.