tag:blogger.com,1999:blog-23501008947329722212024-03-13T05:16:52.927-07:00Харьков. IT курсы.E-MAIL: KharkovITCourses@gmail.com ||
SKYPE: KharkovITCourses ||
НАБОР НА КУРСЫ 15 ЧИСЛА !КАЖДОГО! МЕСЯЦАGolovach Ivanhttp://www.blogger.com/profile/17934541017925930523noreply@blogger.comBlogger156125tag:blogger.com,1999:blog-2350100894732972221.post-46962339013826336082012-08-30T00:58:00.001-07:002014-06-24T05:24:29.463-07:00About<div dir="ltr" style="text-align: left;" trbidi="on">
<h2 style="text-align: left;">
<div style="text-align: center;">
<span style="font-family: Verdana, sans-serif;"><br /></span></div>
<div style="text-align: center;">
<span style="font-family: Verdana, sans-serif; font-size: x-large;">МЫ ПЕРЕЕХАЛИ НА </span></div>
<span style="font-family: Verdana, sans-serif;"><div style="text-align: center;">
<a href="http://golovachcourses.com/"><span style="font-size: x-large;">GolovachCourses.com</span></a></div>
</span></h2>
<span style="font-family: Verdana, sans-serif;"><br /></span>
<span style="font-family: Verdana, sans-serif;"><br /></span>
<span style="font-family: Verdana, sans-serif;"> 1) НАБОР НА КУРСЫ !КАЖДЫЙ! МЕСЯЦ.</span><br />
<span style="font-family: Verdana, sans-serif;"> 2) ВЫ МОЖЕТЕ ПОСМОТРЕТЬ ВИДЕО НАШИХ ЛЕКЦИЙ НА <span style="color: #0000ee;"><u><a href="http://www.youtube.com/user/KharkovITCourses/videos?flow=grid&view=1&sort=dd">http://www.youtube.com/user/KharkovITCourses</a></u></span>.</span><br />
<span style="font-family: Verdana, sans-serif;"><br /></span>
<span style="font-family: Verdana, sans-serif;"> Ближайшие наборы:</span><br />
<span style="font-family: Verdana, sans-serif;">1) Java для начинающих - 1 сентября</span><br />
<span style="font-family: Verdana, sans-serif;">2) Java Core - 1 сентября</span><br />
<span style="font-family: Verdana, sans-serif;">3) Junior Java Developer - 26 августа</span><br />
<span style="font-family: Verdana, sans-serif;"><br /></span>
<span style="font-family: Verdana, sans-serif;"> </span><span style="font-family: Verdana, sans-serif;">Данный сайт создан в поддержку Java курсов, которые проводятся в Харькове (Украина) с параллельной трансляцией в интернет (</span><a href="http://kharkovitcourses.blogspot.com/2012/08/webinar.html" style="font-family: Verdana, sans-serif;">вэбинары</a><span style="font-family: Verdana, sans-serif;">).</span><br />
<span style="font-family: Verdana, sans-serif;"><br /></span>
<br />
<span style="font-family: Verdana, sans-serif;"> По любым вопросам, Вы можете связаться с администратором курсов:</span><br />
<span style="font-family: Verdana, sans-serif;">skype: KharkovITCourses</span><br />
<span style="font-family: Verdana, sans-serif;">email: KharkovITCourses@gmail.com</span><br />
<span style="font-family: Verdana, sans-serif;">phone: 063-048-7663 (Маргарита)</span><br />
<br />
<span style="font-family: Verdana, sans-serif;"> Мы поддерживаем прямые контакты с HR-отделами нескольких крупных IT-компаний Харькова (GridDynamics, NixSolutions, LyckyWare Pro, CreamTeck, Gentleware ...). </span><span style="font-family: Verdana, sans-serif;">По окончанию курсов (Java Core, Junior Java developer) мы организуем Вам 3-4 тестирования в данные компании.</span><br />
<br />
<span style="font-family: Verdana, sans-serif;"> Мы ориентируемся исключительно на обучении Java. В данный момент на курсах представлено ТРИ уровня преподавания:</span><br />
<span style="font-family: Verdana, sans-serif;"><br /></span>
<span style="font-family: Verdana, sans-serif;"><b> 1. Java for Begginers (Java для начинающих)</b>: курс рассчитаны на тех, кто стартует с "нуля". Занятия проводятся в малых группах (6-9) человек</span><span style="font-family: Verdana, sans-serif;">. Занятия проводятся со своими ноутбуками в аудитории. Преподаватель (к.т.н, профессиональный преподаватель Национального Технического Университета "ХПИ") рассказывает материал, показывает слайды на проекторе, показывает примеры кода, а потом начинается персональная работа. Задача преподавателя - что бы каждый понял материал и смог на своем ноутбуке повторить примеры. У нас занимаются как школьники (от 7-го класса), так и люди старшего возраста (40-45 лет).</span><br />
<span style="font-family: Verdana, sans-serif;"><br /></span><span style="font-family: Verdana, sans-serif;"><b> 2. <a href="http://kharkovitcourses.blogspot.com/p/java-core-course.html" target="_blank">Java Core</a></b>: курс рассчитаны на тех, кто имеет начальные знания о программировании (циклы, вызов метода, локальные переменные), но не знаком/поверхностно знаком с ООП, коллекциями, исключениями, потоками, библиотекой ввода/вывода (пакеты java.lang, lava.util, java.io). </span><span style="background-color: white; color: #333333; font-family: Verdana, sans-serif; line-height: 18.18181800842285px;">Вы изучали Java самостоятельно или прослушали курc по одному из языков программирования (Java, Pascal, C, C++, Delphi) в институте/университете. </span><span style="font-family: Verdana, sans-serif;">По окончании курсов Вы можете идти на внутренние курсы интернов в крупные IT-компании (EPAM, GlobalLogic, DataArt, ...) или сразу пробовать себя на Java Junior Developer (начальный уровень). Ожидаемая зарплата после этого курса - <b>200$-400$</b>. </span><br />
<span style="font-family: Verdana, sans-serif;"><br /></span><span style="font-family: Verdana, sans-serif;"><b> 3. <a href="http://kharkovitcourses.blogspot.com/2012/08/java-junior-developer-course.html" target="_blank">Java Junior Developer</a></b>: курсы рассчитаны на тех, кто уже "крепко" усвоил Java Core (Collection API, Java I/O, Threads, Exceptions, ООП) обучаясь в университете или работая в компании, но для дальнейшего продвижения Вам необходимо специальное API (Servlet/JSP, JDBC), знания в области дизайна и архитектуры (шаблоны проектирования, представление о архитектуре проекта), знание популярных инструментов (Maven, Log4j, SVN), умение работать в режиме Test Driven Development (JUnit, Mockito). По окончании курсов Вы можете идти на Java Junior Developer (верхний уровень) или пробовать себя на Middle Java Developer. Ожидаемая зарплата после этого курса - <b>400$ - 700$</b>.</span><br />
<span style="font-family: Verdana, sans-serif;"><br /></span><span style="font-family: Verdana, sans-serif;"> Курсы веду я, Иван Головач, 32 год, 9 лет опыта в разработке ПО. В разных компаниях моя должность/роль/обязанности называется по разному - Java Lead Developer, Java Team Lead, Java Architect.</span><br />
<span style="font-family: Verdana, sans-serif;"><br /></span><span style="font-family: Verdana, sans-serif;"> Я преподавал на курсах по подготовке Java Junior Developer в ряде компаний и сейчас создал свои. Цель курсов - максимально интенсивное обучение и подготовка к прохождению собеседования и занятию должности в IT-компаниях.</span><br />
<span style="font-family: Verdana, sans-serif;"><br /></span><span style="font-family: Verdana, sans-serif;"> При том, что на рынке Украины большой дефицит кадров в сфере IT и огромные компании (EPAM, GlobalLogic, Luxoft, SoftServe, ...) готовы поглощать неограниченное количество кадров (каждая из этих компаний уже имеет по 2000+ сотрудников и заявляет о стремлении к росту) Вам может быть достаточно сложно устроиться. </span><br />
<span style="font-family: Verdana, sans-serif;"><br /></span><span style="font-family: Verdana, sans-serif;"> Причины - либо неготовность переходить с 1000$ вашего текущего языка (PHP, 1C, Delphi) на несоответствующие вашему уровню 300$ (это касается тех, кто хотел бы сразу перейти на Junior/Middle Java Developer), либо неготовность непосредственно к собеседованию, нехватка актуальных знаний. Вы прочитали Эккеля, Хорстманна/Корнелла, но собеседование "не идет". Провалив 1-2-3 собеседования, вы можете потерять уверенность в себе. Приведу примеры вопросов с собеседований:</span><br />
<span style="font-family: Verdana, sans-serif;">- основные принципы ООП - полиморфизм, инкапсуляция, наследование. А теперь объясните, почему полиморфизм и наследование - это не одно и то же.</span><br />
<span style="font-family: Verdana, sans-serif;">- про Java говорят, что у нее есть виртуальная машина, про С++ - что у нее runtime-среда. В чем же отличие?</span><br />
<span style="font-family: Verdana, sans-serif;">- Чем отличается ArrayList и LinkedList? Куда быстрее происходит вставка по индексу? Доступ к последнему элементу?</span><br />
<span style="font-family: Verdana, sans-serif;">- TreeMap наследует SortedMap. Что произойдет, если я добавлю в TreeMap экземпляр своего класса Person</span><br />
<span style="font-family: Verdana, sans-serif;">class Person {</span><br />
<span style="font-family: Verdana, sans-serif;"> public int age;</span><br />
<span style="font-family: Verdana, sans-serif;"> public String name;</span><br />
<span style="font-family: Verdana, sans-serif;">}</span><br />
<span style="font-family: Verdana, sans-serif;">Добавится ли? Будет ли сортироваться? Если сортироваться, то по какому признаку?</span><br />
<span style="font-family: Verdana, sans-serif;">- расскажите про "уборку мусора". Что происходит при вызове System.gc()? Роль метода Object.finalize()?</span><br />
<span style="font-family: Verdana, sans-serif;"><br /></span><span style="font-family: Verdana, sans-serif;"> Все собеседования - это около 10-30 вопросов из 200-300 популярных. Знание нескольких принципов избавляет от запоминания множества фактов. Моя задача - объяснить ключевые принципы и подготовить к ответу на 200-300 популярных вопросов.</span><br />
<span style="font-family: Verdana, sans-serif;"><br /></span><span style="font-family: Verdana, sans-serif;"> Все обучение построено на основе практики. Малые группы (6-10 человек) позволяют непосредственно общаться с преподавателем. Все лекции принципиально ведут профессиональные программисты.</span><br />
<br /></div>
Golovach Ivanhttp://www.blogger.com/profile/17934541017925930523noreply@blogger.comtag:blogger.com,1999:blog-2350100894732972221.post-27912114521095993502012-08-01T17:37:00.000-07:002012-12-10T08:17:03.032-08:00oop: overload<div dir="ltr" style="text-align: left;" trbidi="on">
<span style="font-family: Verdana, sans-serif;"> Надо понимать, что перегрузка метода - это один из трех распространенных примеров реализации полиморфизма (наравне с переопределением метода и генериками).</span><br />
<span style="font-family: Verdana, sans-serif;"><br /></span>
<span style="font-family: Verdana, sans-serif;"> </span><span style="font-family: Verdana, sans-serif;"> </span><span style="font-family: Verdana, sans-serif; font-size: large;"><b>Примеры перегрузки методов (overloading)</b></span><br />
<span style="font-family: Verdana, sans-serif;"><br /></span>
<span style="font-family: Verdana, sans-serif;"> Перегрузка методов - это пример реализации полиморфизма, для работы которого нет надобности в наследовании. </span><br />
<span style="font-family: Verdana, sans-serif;"><br /></span>
<span style="font-family: Verdana, sans-serif;"> Допустим у нас есть два пользовательских класса Circle и Rectangle: </span><br />
<br />
<pre style="background-color: #f8f8f8; border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 1px solid rgb(204, 204, 204); margin-bottom: 15px; margin-top: 15px; overflow: auto; padding: 6px 10px;"><span style="color: #333333; font-family: Verdana, sans-serif;"><span style="line-height: 19px;">public class <b>Circle</b> {
private final double radius;
public Circle(double radius) {
this.radius = radius;
}
public double getRadius() {
return radius;
}
}</span></span></pre>
<div style="background-color: white;">
<pre style="background-color: #f8f8f8; border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 1px solid rgb(204, 204, 204); margin-bottom: 15px; margin-top: 15px; overflow: auto; padding: 6px 10px;"><span style="color: #333333; font-family: Verdana, sans-serif;"><span style="line-height: 19px;">public class <b>Rectangle</b> {
private final double width;
private final double height;
public Rectangle(double width, double height) {
this.width = width;
this.height = height;
}
public double getWidth() {
return width;
}
public double getHeight() {
return height;
}
}</span></span></pre>
<div style="color: #333333; line-height: 20px;">
<span style="font-family: Verdana, sans-serif;"> </span></div>
<div style="color: #333333; line-height: 20px;">
<span style="font-family: Verdana, sans-serif;"> Мы можем создать утилитарный класс FigureUtils0 с двумя версиями метода perimeter:</span></div>
<div>
<pre style="background-color: #f8f8f8; border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 1px solid rgb(204, 204, 204); margin-bottom: 15px; margin-top: 15px; overflow: auto; padding: 6px 10px;"><span style="color: #333333; font-family: Verdana, sans-serif;"><span style="line-height: 19px;">public class FigureUtils0 {
public static double <b>perimeter(Rectangle rect)</b> {
return 2 * (rect.getHeight() + rect.getWidth());
}
public static double <b>perimeter(Circle circle)</b> {
return 2 * Math.PI * circle.getRadius();
}
}</span></span></pre>
<div style="color: #333333; line-height: 20px;">
<br /></div>
</div>
<div style="color: #333333; line-height: 20px;">
<span style="font-family: Verdana, sans-serif;"> Теперь мы можем писать такой код:</span></div>
<div>
<pre style="background-color: #f8f8f8; border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 1px solid rgb(204, 204, 204); margin-bottom: 15px; margin-top: 15px; overflow: auto; padding: 6px 10px;"><span style="color: #333333; font-family: Verdana, sans-serif;"><span style="line-height: 19px;">public class _0_OverloadingTestA {
public static void main(String[] args) {
<b>Circle circle</b> = new Circle(1);
<b>Rectangle rect</b> = new Rectangle(2, 1);
System.out.println("perimeter: " + <b>FigureUtils0.perimeter(circle)</b>);
System.out.println("perimeter: " + <b>FigureUtils0.perimeter(rect)</b>);
}
}</span></span></pre>
<div style="color: #333333; line-height: 20px;">
<span style="font-family: Verdana, sans-serif;"> Или с использованием import static даже такой:</span></div>
</div>
<div>
<pre style="background-color: #f8f8f8; border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 1px solid rgb(204, 204, 204); margin-bottom: 15px; margin-top: 15px; overflow: auto; padding: 6px 10px;"><span style="color: #333333; font-family: Verdana, sans-serif;"><span style="line-height: 20px;">import static FigureUtils0.perimeter;
public class _0_OverloadingTestB {
public static void main(String[] args) {
<b>Circle circle</b> = new Circle(1);
<b>Rectangle rect</b> = new Rectangle(2, 1);
System.out.println("perimeter: " + <b>perimeter(circle)</b>);
System.out.println("perimeter: " + <b>perimeter(rect)</b>);
}
}</span></span></pre>
<div style="color: #333333; line-height: 20px;">
<div style="color: black; line-height: normal;">
<span style="color: #333333; font-family: Verdana, sans-serif;"><span style="line-height: 20px;">>> perimeter: 6.283185307179586</span></span></div>
<div style="color: black; line-height: normal;">
<span style="font-family: Verdana, sans-serif;"><span style="color: #333333; line-height: 20px;">>></span><span style="color: #333333; line-height: 20px;"> </span><span style="color: #333333;"><span style="line-height: 20px;">perimeter: 6.0</span></span></span></div>
</div>
<div style="color: #333333; line-height: 20px;">
<span style="font-family: Verdana, sans-serif;"><br /></span></div>
<div style="color: #333333; line-height: 20px;">
<span style="font-family: Verdana, sans-serif;"> Таким образом создается впечатление, что у нас есть один "универсальный" метод perimeter(...), который возвращает периметр чего-угодно.</span></div>
</div>
<div style="color: #333333; line-height: 20px;">
<span style="font-family: Verdana, sans-serif;"> Аналогичным образом "устроен" System.out.println(...) - есть множество версия для различных типов:</span></div>
<div>
<span style="color: #333333; font-family: Verdana, sans-serif;"><span style="line-height: 20px;"> public void println(boolean x)</span></span></div>
<div>
<span style="color: #333333; font-family: Verdana, sans-serif;"><span style="line-height: 20px;"> public void println(char x)</span></span></div>
<div>
<span style="color: #333333; font-family: Verdana, sans-serif;"><span style="line-height: 20px;"> public void println(double x)</span></span></div>
<div>
<span style="color: #333333; font-family: Verdana, sans-serif;"><span style="line-height: 20px;"> public void println(char x[])</span></span></div>
<div>
<span style="color: #333333; font-family: Verdana, sans-serif;"><span style="line-height: 20px;"> public void println(Object x)</span></span></div>
<div>
<span style="color: #333333; font-family: Verdana, sans-serif;"><span style="line-height: 20px;"> ...</span></span></div>
</div>
<br />
<span style="font-family: Verdana, sans-serif;"><br /></span>
<span style="font-family: Verdana, sans-serif;"><br /></span>
<br />
<div>
<div style="color: #333333; line-height: 20px;">
<span style="font-family: Verdana, sans-serif;"> Представим себе, что мы хотим иметь список экземпляров. Конечно, мы можем создать List<Object>, но лучше создать "пустого предка" Figure и переписать Круг и Прямоугольник:</span></div>
</div>
<div>
<pre style="background-color: #f8f8f8; border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 1px solid rgb(204, 204, 204); margin-bottom: 15px; margin-top: 15px; overflow: auto; padding: 6px 10px;"><span style="color: #333333; font-family: Verdana, sans-serif;"><span style="line-height: 20px;">public <b>interface Figure</b> {
}</span></span></pre>
<div>
<pre style="background-color: #f8f8f8; border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 1px solid rgb(204, 204, 204); margin-bottom: 15px; margin-top: 15px; overflow: auto; padding: 6px 10px;"><span style="color: #333333; font-family: Verdana, sans-serif;"><span style="line-height: 20px;">public class <b>CircleThatFigure implements Figure</b> {
private final double radius;
public CircleThatFigure(double radius) {
this.radius = radius;
}
public double getRadius() {
return radius;
}
}</span></span></pre>
</div>
<div>
<pre style="background-color: #f8f8f8; border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 1px solid rgb(204, 204, 204); margin-bottom: 15px; margin-top: 15px; overflow: auto; padding: 6px 10px;"><span style="color: #333333; font-family: Verdana, sans-serif;"><span style="line-height: 20px;">public class <b>RectangleThatFigure implements Figure</b> {
private final double width;
private final double height;
public RectangleThatFigure(double width, double height) {
this.width = width;
this.height = height;
}
public double getWidth() {
return width;
}
public double getHeight() {
return height;
}
}</span></span></pre>
<div>
<pre style="background-color: #f8f8f8; border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 1px solid rgb(204, 204, 204); margin-bottom: 15px; margin-top: 15px; overflow: auto; padding: 6px 10px;"><span style="color: #333333; font-family: Verdana, sans-serif;"><span style="line-height: 20px;">public class <b>FigureUtils1</b> {
public static double <b>perimeter(RectangleThatFigure rect)</b> {
return 2 * (rect.getHeight() + rect.getWidth());
}
public static double <b>perimeter(CircleThatFigure circle)</b> {
return 2 * Math.PI * circle.getRadius();
}
}</span></span></pre>
</div>
</div>
<div style="color: #333333; line-height: 20px;">
<span style="font-family: Verdana, sans-serif;"><br /></span></div>
<div style="line-height: 20px;">
<span style="font-family: Verdana, sans-serif;"><span style="color: #333333;"> Одна проблема, код </span><span style="color: red;">не компилируется</span></span></div>
<div>
<pre style="background-color: #f8f8f8; border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 1px solid rgb(204, 204, 204); margin-bottom: 15px; margin-top: 15px; overflow: auto; padding: 6px 10px;"><span style="font-family: Verdana, sans-serif;"><span style="line-height: 20px;"><span style="color: #333333;">import java.util.ArrayList;
import java.util.List;
public class _1_OverloadingTest {
public static void main(String[] args) {
<b>List<Figure> figures</b> = new ArrayList<>();
<b>figures.add(new CircleThatFigure(1));</b>
<b>figures.add(new RectangleThatFigure(2, 1));</b>
for (Figure figure : figures) {
</span><span style="color: red;">System.out.println("perimeter: " + FigureUtils1.perimeter(figure));</span><span style="color: #333333;">
}
}
}</span></span></span></pre>
<div style="color: #333333; line-height: 20px;">
<span style="font-family: Verdana, sans-serif;">так как <b>выбор одного метода из множества перегруженных методов происходит в момент компиляции</b>, а компилятор не знает какой из вариантов perimeter() </span><span style="font-family: Verdana, sans-serif;">вызвать.</span></div>
</div>
<div>
<div style="color: black; line-height: normal;">
<div style="color: #333333; line-height: 20px;">
<br /></div>
<div style="color: #333333; line-height: 20px;">
<span style="font-family: Verdana, sans-serif;"> Вот одно из решений проблемы:</span></div>
</div>
<div>
<pre style="background-color: #f8f8f8; border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 1px solid rgb(204, 204, 204); margin-bottom: 15px; margin-top: 15px; overflow: auto; padding: 6px 10px;"><span style="color: #333333; font-family: Verdana, sans-serif;"><span style="line-height: 20px;">public class FigureUtils2 {
public static double perimeter(RectangleThatFigure rect) {
return 2 * (rect.getHeight() + rect.getWidth());
}
public static double perimeter(CircleThatFigure circle) {
return 2 * Math.PI * circle.getRadius();
}
<b>public static double perimeter(Figure figure) {</b>
<b>if (figure instanceof RectangleThatFigure) {</b>
<b>return perimeter((RectangleThatFigure) figure);</b>
<b>} else if (figure instanceof CircleThatFigure) {</b>
<b>return perimeter((CircleThatFigure) figure);</b>
} else {
throw new Error("Bad type. Only CircleThatFigure + RectangleThatFigure allowed.");
}
}
}</span></span></pre>
<div style="color: #333333; line-height: 20px;">
<span style="font-family: Verdana, sans-serif;"> Теперь работает:</span></div>
</div>
</div>
<div>
<pre style="background-color: #f8f8f8; border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 1px solid rgb(204, 204, 204); margin-bottom: 15px; margin-top: 15px; overflow: auto; padding: 6px 10px;"><span style="color: #333333; font-family: Verdana, sans-serif;"><span style="line-height: 20px;">import java.util.ArrayList;
import java.util.List;
public class _2_OverloadingTest {
public static void main(String[] args) {
List<Figure> figures = new ArrayList<>();
figures.add(new CircleThatFigure(1));
figures.add(new RectangleThatFigure(2, 1));
for (Figure figure : figures) {
System.out.println("perimeter: " + <b>FigureUtils2</b>.<b>perimeter(figure)</b>);
}
}
}</span></span></pre>
<div>
<div>
<span style="color: #333333; font-family: Verdana, sans-serif;"><span style="line-height: 20px;">>> perimeter: 6.283185307179586</span></span></div>
<div>
<span style="font-family: Verdana, sans-serif;"><span style="color: #333333; line-height: 20px;">>></span><span style="color: #333333; line-height: 20px;"> </span><span style="color: #333333;"><span style="line-height: 20px;">perimeter: 6.0</span></span></span></div>
</div>
</div>
<div style="color: #333333; line-height: 20px;">
<span style="font-family: Verdana, sans-serif;"><br /></span></div>
<div style="color: #333333; line-height: 20px;">
<span style="font-family: Verdana, sans-serif;"> Однако у нас появилась "проблемная цепочка" if/else-if/else-if/...</span></div>
<div style="color: #333333; line-height: 20px;">
<span style="font-family: Verdana, sans-serif;"> "Проблемность" в том, что в ней явно перечислены потомки Figure. С появлением нового потомка мы либо переписываем этот метод, либо получаем Error в момент обращения. Компилятор не отслеживает соответствие между всеми потомками Figure и цепочкой </span><span style="font-family: Verdana, sans-serif;">if/else-if/else-if/...</span></div>
<div style="color: #333333; line-height: 20px;">
<span style="font-family: Verdana, sans-serif;"><br /></span></div>
<div>
<div style="color: black; line-height: normal;">
<div style="color: #333333; line-height: 20px;">
<span style="font-family: Verdana, sans-serif;"> Можем предложить такой вариант, с регистрацией "обработчиков периметра" в момент выполнения программы:</span></div>
</div>
<div>
<pre style="background-color: #f8f8f8; border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 1px solid rgb(204, 204, 204); margin-bottom: 15px; margin-top: 15px; overflow: auto; padding: 6px 10px;"><span style="color: #333333; font-family: Verdana, sans-serif;"><span style="line-height: 20px;">import java.util.HashMap;
import java.util.Map;
public class FigureUtils3 {
</span><b style="line-height: 20px;">private static final Map<Class, PerimeterCalculator> calculators</b><span style="line-height: 20px;">
= new HashMap<>();
static {
<b>calculators.put(</b>
CircleThatFigure.class,
<b>new PerimeterCalculator() {</b>
@Override
public double calculate(Figure figure) {
double radius = ((CircleThatFigure) figure).getRadius();
return 2 * Math.PI * radius;
}
});
<b>calculators.put(</b>
RectangleThatFigure.class,
<b>new PerimeterCalculator() {</b>
@Override
public double calculate(Figure figure) {
double weight = ((RectangleThatFigure) figure).getWidth();
double height = ((RectangleThatFigure) figure).getHeight();
return 2 * (weight + height);
}
});
}
public static double perimeter(Figure figure) {
</span><b style="line-height: 20px;">PerimeterCalculator calculator = calculators.get(figure.getClass());</b><span style="line-height: 20px;">
</span><b style="line-height: 20px;">if (calculator != null) {</b><span style="line-height: 20px;">
</span><b style="line-height: 20px;">return calculator.calculate(figure);</b><span style="line-height: 20px;">
} else {
throw new Error("Bad type. Only " + calculators.keySet() + " allowed.");
}
}
</span><b style="line-height: 20px;">private static interface PerimeterCalculator {</b><span style="line-height: 20px;">
</span><b style="line-height: 20px;">double calculate(Figure figure);</b><span style="line-height: 20px;">
</span><b style="line-height: 20px;">}</b><span style="line-height: 20px;">
}</span></span></pre>
<div style="color: #333333; line-height: 20px;">
<span style="font-family: Verdana, sans-serif;"> Особенно проблему не решает, но популярно у разработчиков.</span></div>
</div>
</div>
<div style="color: #333333; line-height: 20px;">
<span style="font-family: Verdana, sans-serif;"><br /></span></div>
<div>
<div style="color: black; line-height: normal;">
<div style="color: #333333; line-height: 20px;">
<span style="font-family: Verdana, sans-serif;"> Аналогичный вариант, полностью кастомизируемый в момент выполнения пользователей.</span></div>
</div>
<div>
<pre style="background-color: #f8f8f8; border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 1px solid rgb(204, 204, 204); margin-bottom: 15px; margin-top: 15px; overflow: auto; padding: 6px 10px;"><span style="color: #333333; font-family: Verdana, sans-serif;"><span style="line-height: 20px;">import java.util.HashMap;
import java.util.Map;
public class FigureUtils4 {
private final Map<Class, PerimeterCalculator> calculators
= new HashMap<>();
<b>public void addCalculator(Class clazz, PerimeterCalculator calculator) {</b>
<b>calculators.put(clazz, calculator);</b>
<b>}</b>
public double perimeter(Figure figure) {
PerimeterCalculator calculator
= calculators.get(figure.getClass());
if (calculator != null) {
return calculator.calculate(figure);
} else {
throw new Error(
"Bad type. Only " + calculators.keySet() + " allowed.");
}
}
<b>public</b> static interface PerimeterCalculator {
double calculate(Figure figure);
}
}</span></span></pre>
<div style="color: #333333; line-height: 20px;">
<span style="font-family: Verdana, sans-serif;"> Его не приходится переписывать каждый раз с появлением нового потомка у Figure. Но следить, что бы для каждого потомка Figure был зарегистрирован "калькулятор периметра" должен разработчик.</span></div>
</div>
</div>
<div style="color: #333333; line-height: 20px;">
<span style="font-family: Verdana, sans-serif;"><br /></span></div>
<div style="color: #333333; line-height: 20px;">
<span style="font-family: Verdana, sans-serif;"><br /></span></div>
<div>
<div style="color: black; line-height: normal;">
<div style="color: #333333; line-height: 20px;">
<span style="font-family: Verdana, sans-serif;"> Средствами языка невозможно "финализировать иерархию", т.е. определить что будут эти и только эти потомки, однако </span><span style="font-family: Verdana, sans-serif;">средствами языка </span><span style="font-family: Verdana, sans-serif;">можно заставить всех <b>непосредственных</b> потомков существовать в едином месте:</span></div>
</div>
<div>
<pre style="background-color: #f8f8f8; border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 1px solid rgb(204, 204, 204); margin-bottom: 15px; margin-top: 15px; overflow: auto; padding: 6px 10px;"><span style="color: #333333; font-family: Verdana, sans-serif;"><span style="line-height: 20px;">public <b>abstract class Figure2</b> {
<b>private Figure2() {}</b>
<b>public static class Circle2 extends Figure2</b> {
private final double radius;
public Circle2(double radius) {
this.radius = radius;
}
public double getRadius() {
return radius;
}
}
<b>public static class Rectangle2 extends Figure2</b> {
private final double width;
private final double height;
public Rectangle2(double width, double height) {
this.width = width;
this.height = height;
}
public double getWidth() {
return width;
}
public double getHeight() {
return height;
}
}
}</span></span></pre>
<div style="color: #333333; line-height: 20px;">
<span style="font-family: Verdana, sans-serif;"> Поскольку конструктор Figure2 приватный (private), то наследники (которым он необходим) должны свои конструкторы объявлять внутри Figure2, т.е. и сами наследники должны объявляться внутри Figure2. Сказанное относится только к непосредственным наследникам Figure2. </span></div>
<div style="color: #333333; line-height: 20px;">
<span style="font-family: Verdana, sans-serif;"> </span></div>
<div style="color: #333333; line-height: 20px;">
<span style="font-family: Verdana, sans-serif;"> Вариант использования: </span></div>
</div>
</div>
<div>
<pre style="background-color: #f8f8f8; border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 1px solid rgb(204, 204, 204); margin-bottom: 15px; margin-top: 15px; overflow: auto; padding: 6px 10px;"><span style="color: #333333; font-family: Verdana, sans-serif;"><span style="line-height: 20px;">import java.util.ArrayList;
import java.util.List;
import static <b>Figure2.Circle2</b>;
import static <b>Figure2.Rectangle2</b>;
public class _4_OverloadingTest {
public static void main(String[] args) {
<b>List<Figure2></b> figures = new ArrayList<>();
figures.<b>add(new Circle2(1))</b>;
figures.<b>add(new Rectangle2(2, 1))</b>;
for (Figure2 figure : figures) {
// ...
}
}
}</span></span></pre>
<div style="color: #333333; line-height: 20px;">
<span style="font-family: Verdana, sans-serif;"><br /></span></div>
<div style="color: #333333; line-height: 20px;">
<span style="font-family: Verdana, sans-serif;"> Предыдущий трюк кратко</span></div>
</div>
<div style="line-height: 20px;">
<span style="font-family: Verdana, sans-serif;"><span style="color: #333333;">1) </span><span style="color: red;">не компилируется</span></span></div>
<div>
<pre style="background-color: #f8f8f8; border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 1px solid rgb(204, 204, 204); margin-bottom: 15px; margin-top: 15px; overflow: auto; padding: 6px 10px;"><span style="color: #333333; font-family: Verdana, sans-serif;"><span style="line-height: 20px;">public class A {
<b>private A()</b> {}
}</span></span></pre>
</div>
<div>
<pre style="background-color: #f8f8f8; border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 1px solid rgb(204, 204, 204); margin-bottom: 15px; margin-top: 15px; overflow: auto; padding: 6px 10px;"><span style="font-family: Verdana, sans-serif;"><span style="line-height: 20px;"><span style="color: #333333;">public <b>class B extends A</b> {
</span><span style="color: red;">public B() {}</span><span style="color: #333333;">
}</span></span></span></pre>
<div>
<div style="color: black; line-height: 20px;">
<span style="font-family: Verdana, sans-serif;"><span style="color: #333333;">2) </span><span style="color: red;">не компилируется</span></span></div>
<div style="color: black; line-height: normal;">
<pre style="background-color: #f8f8f8; border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 1px solid rgb(204, 204, 204); margin-bottom: 15px; margin-top: 15px; overflow: auto; padding: 6px 10px;"><span style="color: #333333; font-family: Verdana, sans-serif;"><span style="line-height: 20px;">public class A {
<b>private A()</b> {}
}</span></span></pre>
</div>
<div>
<pre style="background-color: #f8f8f8; border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 1px solid rgb(204, 204, 204); margin-bottom: 15px; margin-top: 15px; overflow: auto; padding: 6px 10px;"><span style="font-family: Verdana, sans-serif;"><span style="line-height: 20px;"><span style="color: #333333;">public class B extends A {
public B() {
</span><span style="color: red;">super();</span><span style="color: #333333;">
}
}</span></span></span></pre>
<div style="line-height: 20px;">
<span style="color: #333333; font-family: Verdana, sans-serif;">3)</span><span style="color: red; font-family: Verdana, sans-serif;"> </span><span style="font-family: Verdana, sans-serif;">компилируется</span></div>
</div>
</div>
</div>
<div>
<pre style="background-color: #f8f8f8; border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 1px solid rgb(204, 204, 204); margin-bottom: 15px; margin-top: 15px; overflow: auto; padding: 6px 10px;"><span style="color: #333333; font-family: Verdana, sans-serif;"><span style="line-height: 20px;">public class A {
<b>private A()</b> {}
<b>public static class B extends A</b> {
public B() {}
}
}</span></span></pre>
<div style="color: #333333; line-height: 20px;">
<span style="font-family: Verdana, sans-serif;"> но теперь можно добавить потомка от класса B </span></div>
</div>
<div>
<div>
<pre style="background-color: #f8f8f8; border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 1px solid rgb(204, 204, 204); margin-bottom: 15px; margin-top: 15px; overflow: auto; padding: 6px 10px;"><span style="color: #333333; font-family: Verdana, sans-serif;"><span style="line-height: 20px;">class <b>C extends A.B</b> {}</span></span></pre>
<div style="color: #333333; line-height: 20px;">
<span style="font-family: Verdana, sans-serif;">x</span></div>
</div>
</div>
<div style="color: #333333; line-height: 20px;">
<div style="color: black; line-height: normal;">
<div style="color: #333333; line-height: 20px;">
<span style="font-family: Verdana, sans-serif;">x</span></div>
</div>
<div>
<pre style="background-color: #f8f8f8; border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 1px solid rgb(204, 204, 204); margin-bottom: 15px; margin-top: 15px; overflow: auto; padding: 6px 10px;"><span style="font-family: Verdana, sans-serif;">
</span></pre>
<div>
<span style="font-family: Verdana, sans-serif;">x</span></div>
</div>
</div>
<div style="color: #333333; line-height: 20px;">
<div style="color: black; line-height: normal;">
<div style="color: #333333; line-height: 20px;">
<span style="font-family: Verdana, sans-serif;">x</span></div>
</div>
<div>
<pre style="background-color: #f8f8f8; border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 1px solid rgb(204, 204, 204); margin-bottom: 15px; margin-top: 15px; overflow: auto; padding: 6px 10px;"><span style="font-family: Verdana, sans-serif;">
</span></pre>
<div>
<span style="font-family: Verdana, sans-serif;">x</span></div>
</div>
</div>
<div style="color: #333333; line-height: 20px;">
<div style="color: black; line-height: normal;">
<div style="color: #333333; line-height: 20px;">
<span style="font-family: Verdana, sans-serif;">x</span></div>
</div>
<div>
<pre style="background-color: #f8f8f8; border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 1px solid rgb(204, 204, 204); margin-bottom: 15px; margin-top: 15px; overflow: auto; padding: 6px 10px;"><span style="font-family: Verdana, sans-serif;">
</span></pre>
<div>
<span style="font-family: Verdana, sans-serif;">x</span></div>
</div>
</div>
<div style="color: #333333; line-height: 20px;">
<span style="font-family: Verdana, sans-serif;"><br /></span></div>
</div>
<br />
<br />
<span style="font-family: Verdana, sans-serif;"> </span><span style="font-family: Verdana, sans-serif;"> </span><span style="font-family: Verdana, sans-serif; font-size: large;"><b>Правила перегрузки методов (overloading)</b></span><br />
<span style="font-family: Verdana, sans-serif; font-size: large;"><b><br /></b></span>
<br />
<span style="font-family: Verdana, sans-serif;">----</span><span style="font-family: Verdana, sans-serif;">----</span><span style="font-family: Verdana, sans-serif;">----</span><span style="font-family: Verdana, sans-serif;">----</span><span style="font-family: Verdana, sans-serif;">----</span><span style="font-family: Verdana, sans-serif;">----</span><span style="font-family: Verdana, sans-serif;">----</span><span style="font-family: Verdana, sans-serif;">----</span><span style="font-family: Verdana, sans-serif;">----</span><span style="font-family: Verdana, sans-serif;">----</span><span style="font-family: Verdana, sans-serif;">----</span><span style="font-family: Verdana, sans-serif;">----</span><span style="font-family: Verdana, sans-serif;">----</span><span style="font-family: Verdana, sans-serif;">----</span><span style="font-family: Verdana, sans-serif;">----</span><span style="font-family: Verdana, sans-serif;">----</span><br />
<span style="font-family: Verdana, sans-serif;"><b>-- Код:</b></span><br />
<span style="font-family: Verdana, sans-serif;">public class Overload {</span><br />
<span style="font-family: Verdana, sans-serif;"> public void method(Object o) {</span><br />
<span style="font-family: Verdana, sans-serif;"> System.out.println("Object");</span><br />
<span style="font-family: Verdana, sans-serif;"> }</span><br />
<span style="font-family: Verdana, sans-serif;"> public void method(java.io.FileNotFoundException f) {</span><br />
<span style="font-family: Verdana, sans-serif;"> System.out.println("FileNotFoundException");</span><br />
<span style="font-family: Verdana, sans-serif;"> }</span><br />
<span style="font-family: Verdana, sans-serif;"> public void method(java.io.IOException i) {</span><br />
<span style="font-family: Verdana, sans-serif;"> System.out.println("IOException");</span><br />
<span style="font-family: Verdana, sans-serif;"> }</span><br />
<span style="font-family: Verdana, sans-serif;"> public static void main(String args[]) {</span><br />
<span style="font-family: Verdana, sans-serif;"> Overload test = new Overload();</span><br />
<span style="font-family: Verdana, sans-serif;"> test.method(null);</span><br />
<span style="font-family: Verdana, sans-serif;"> }</span><br />
<span style="font-family: Verdana, sans-serif;">}</span><br />
<span style="font-family: Verdana, sans-serif;"><b style="background-color: white; color: #333333; line-height: 18.18181800842285px;">-- Вопросы/задания:</b></span><br />
<span style="background-color: white; color: #333333; line-height: 18.18181800842285px;"><span style="font-family: Verdana, sans-serif;">1) Что выведет данный код? Почему?</span></span><br />
<span style="background-color: white; color: #333333; line-height: 18.18181800842285px;"><span style="font-family: Verdana, sans-serif;">2) Что произойдет, если я добавлю метод</span></span><br />
<span style="font-family: Verdana, sans-serif;"><span style="background-color: white; line-height: 18.16666603088379px;"><span style="color: #333333;"></span></span><br /></span>
<span style="color: #333333; font-family: Verdana, sans-serif;"> public void method(NotSerializableException n) {</span><br />
<span style="color: #333333; font-family: Verdana, sans-serif;"> System.out.println("FileNotFoundException");</span><br />
<span style="color: #333333; font-family: Verdana, sans-serif;"> }</span><br />
<span style="color: #333333; font-family: Verdana, sans-serif;">?</span><br />
<div>
<span style="color: #333333; font-family: Verdana, sans-serif;"><br /></span></div>
</div>
Golovach Ivanhttp://www.blogger.com/profile/17934541017925930523noreply@blogger.comtag:blogger.com,1999:blog-2350100894732972221.post-53695743736821629592012-08-01T17:16:00.000-07:002013-03-11T17:24:52.069-07:00simplification: TreeSet<div dir="ltr" style="text-align: left;" trbidi="on">
<span style="background-color: white; color: #333333; font-family: Verdana, sans-serif; font-size: 14.545454025268555px; line-height: 18.18181800842285px;">Здесь приводится упрощенная версия класса <a href="http://docs.oracle.com/javase/7/docs/api/java/util/TreeSet.html">java.util.TreeSet</a>. </span><br />
<span style="background-color: white; color: #333333; font-family: Verdana, sans-serif; font-size: 14.545454025268555px; line-height: 18.18181800842285px;"><br /></span><span style="background-color: white; color: #333333; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 14.545454025268555px; line-height: 18.18181800842285px;"></span><span style="background-color: white; color: #333333; font-family: Verdana, sans-serif; font-size: 14.545454025268555px; line-height: 18.18181800842285px;">// страница будет дописана</span>
</div>
Golovach Ivanhttp://www.blogger.com/profile/17934541017925930523noreply@blogger.comtag:blogger.com,1999:blog-2350100894732972221.post-9669098955330340692012-08-01T17:15:00.000-07:002013-03-11T17:24:37.206-07:00simplification: HashSet<div dir="ltr" style="text-align: left;" trbidi="on">
<span style="background-color: white; color: #333333; font-family: Verdana, sans-serif; font-size: 14.545454025268555px; line-height: 18.18181800842285px;">Здесь приводится упрощенная версия класса <a href="http://docs.oracle.com/javase/7/docs/api/java/util/HashSet.html">java.util.HashSet</a>. </span><br />
<span style="background-color: white; color: #333333; font-family: Verdana, sans-serif; font-size: 14.545454025268555px; line-height: 18.18181800842285px;"><br /></span><span style="background-color: white; color: #333333; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 14.545454025268555px; line-height: 18.18181800842285px;"></span><span style="background-color: white; color: #333333; font-family: Verdana, sans-serif; font-size: 14.545454025268555px; line-height: 18.18181800842285px;">// страница будет дописана</span>
</div>
Golovach Ivanhttp://www.blogger.com/profile/17934541017925930523noreply@blogger.comtag:blogger.com,1999:blog-2350100894732972221.post-83883315672749692522012-08-01T17:12:00.000-07:002013-03-11T17:24:22.459-07:00simplification: TreeMap<div dir="ltr" style="text-align: left;" trbidi="on">
<br />
<div class="post-body entry-content" id="post-body-1566782114111487437" itemprop="articleBody" style="background-color: white; color: #333333; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 14.545454025268555px; line-height: 1.4; position: relative; width: 498.1817932128906px;">
<div dir="ltr" trbidi="on">
<span style="background-color: white; font-family: Verdana, sans-serif; font-size: 14.545454025268555px; line-height: 18.18181800842285px;">Здесь приводится упрощенная версия класса <a href="http://docs.oracle.com/javase/7/docs/api/java/util/TreeMap.html">java.util.TreeMap</a>. </span><br />
<span style="background-color: white; font-family: Verdana, sans-serif; font-size: 14.545454025268555px; line-height: 18.18181800842285px;"><br /></span><span style="font-family: Verdana, sans-serif;">// страница будет дописана</span></div>
</div>
</div>
Golovach Ivanhttp://www.blogger.com/profile/17934541017925930523noreply@blogger.comtag:blogger.com,1999:blog-2350100894732972221.post-87744258205067506072012-08-01T17:09:00.000-07:002013-03-11T17:24:07.212-07:00simplification: HashMap<div dir="ltr" style="text-align: left;" trbidi="on">
<span style="background-color: white; color: #333333; font-family: Verdana, sans-serif; font-size: 14.545454025268555px; line-height: 18.18181800842285px;">Здесь приводится упрощенная версия класса <a href="http://docs.oracle.com/javase/7/docs/api/java/util/HashMap.html">java.util.HashMap</a>. </span><br />
<span style="background-color: white; color: #333333; font-family: Verdana, sans-serif; font-size: 14.545454025268555px; line-height: 18.18181800842285px;"><br /></span><span style="background-color: white; color: #333333; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 14.545454025268555px; line-height: 18.18181800842285px;"></span><span style="background-color: white; color: #333333; font-family: Verdana, sans-serif; font-size: 14.545454025268555px; line-height: 18.18181800842285px;">// страница будет дописана</span>
</div>
Golovach Ivanhttp://www.blogger.com/profile/17934541017925930523noreply@blogger.comtag:blogger.com,1999:blog-2350100894732972221.post-15667821141114874372012-08-01T17:06:00.000-07:002013-03-11T17:23:26.628-07:00simplification: ArrayList<div dir="ltr" style="text-align: left;" trbidi="on">
<span style="background-color: white; color: #333333; font-family: Verdana, sans-serif; font-size: 14.545454025268555px; line-height: 18.18181800842285px;">Здесь приводится упрощенная версия класса <a href="http://docs.oracle.com/javase/7/docs/api/java/util/ArrayList.html" style="color: #771100; text-decoration: none;">java.util.ArrayList</a>. </span><br />
<span style="background-color: white; color: #333333; font-family: Verdana, sans-serif; font-size: 14.545454025268555px; line-height: 18.18181800842285px;"><br /></span><span style="background-color: white; color: #333333; font-family: Verdana, sans-serif; font-size: 14.545454025268555px; line-height: 18.18181800842285px;">----</span><span style="background-color: white; color: #333333; font-family: Verdana, sans-serif; font-size: 14.545454025268555px; line-height: 18.18181800842285px;">------------------------------------------------------------</span><br />
<span style="background-color: white; color: #333333; font-family: Verdana, sans-serif; font-size: 14.545454025268555px; line-height: 18.18181800842285px;"><b>-- Код:</b></span>
<br />
<span style="background-color: white; font-size: 15px; line-height: 18.16666603088379px;"><span style="color: #333333; font-family: Verdana, sans-serif;"></span></span><br />
<span style="color: #333333; font-family: Verdana, sans-serif;">import java.util.Arrays;</span><br />
<span style="color: #333333; font-family: Verdana, sans-serif;">import java.util.Iterator;</span><br />
<span style="color: #333333; font-family: Verdana, sans-serif;"><br /></span>
<span style="color: #333333; font-family: Verdana, sans-serif;">public class XArrayList implements Iterable {</span><br />
<span style="color: #333333; font-family: Verdana, sans-serif;"> private Object[] data;</span><br />
<span style="color: #333333; font-family: Verdana, sans-serif;"> private int size = 0;</span><br />
<span style="color: #333333; font-family: Verdana, sans-serif;"><br /></span>
<span style="color: #333333; font-family: Verdana, sans-serif;"> public XArrayList() {</span><br />
<span style="color: #333333; font-family: Verdana, sans-serif;"> this(10);</span><br />
<span style="color: #333333; font-family: Verdana, sans-serif;"> }</span><br />
<span style="color: #333333; font-family: Verdana, sans-serif;"><br /></span>
<span style="color: #333333; font-family: Verdana, sans-serif;"> public XArrayList(int initialCapacity) {</span><br />
<span style="color: #333333; font-family: Verdana, sans-serif;"> this.data = new Object[initialCapacity];</span><br />
<span style="color: #333333; font-family: Verdana, sans-serif;"> }</span><br />
<span style="color: #333333; font-family: Verdana, sans-serif;"><br /></span>
<span style="color: #333333; font-family: Verdana, sans-serif;"> public void add(Object element) {</span><br />
<span style="color: #333333; font-family: Verdana, sans-serif;"> ensureCapacity(size + 1);</span><br />
<span style="color: #333333; font-family: Verdana, sans-serif;"> data[size++] = element;</span><br />
<span style="color: #333333; font-family: Verdana, sans-serif;"> }</span><br />
<span style="color: #333333; font-family: Verdana, sans-serif;"><br /></span>
<span style="color: #333333; font-family: Verdana, sans-serif;"> public void add(int index, Object element) {</span><br />
<span style="color: #333333; font-family: Verdana, sans-serif;"> ensureCapacity(size + 1);</span><br />
<span style="color: #333333; font-family: Verdana, sans-serif;"> System.arraycopy(data, index, data, index + 1, size - index);</span><br />
<span style="color: #333333; font-family: Verdana, sans-serif;"> data[index] = element;</span><br />
<span style="color: #333333; font-family: Verdana, sans-serif;"> size++;</span><br />
<span style="color: #333333; font-family: Verdana, sans-serif;"> }</span><br />
<span style="color: #333333; font-family: Verdana, sans-serif;"><br /></span>
<span style="color: #333333; font-family: Verdana, sans-serif;"> public Object get(int index) {</span><br />
<span style="color: #333333; font-family: Verdana, sans-serif;"> rangeCheck(index);</span><br />
<span style="color: #333333; font-family: Verdana, sans-serif;"> return data[index];</span><br />
<span style="color: #333333; font-family: Verdana, sans-serif;"> }</span><br />
<span style="color: #333333; font-family: Verdana, sans-serif;"><br /></span>
<span style="color: #333333; font-family: Verdana, sans-serif;"> public Object set(int index, Object element) {</span><br />
<span style="color: #333333; font-family: Verdana, sans-serif;"> rangeCheck(index);</span><br />
<span style="color: #333333; font-family: Verdana, sans-serif;"> Object oldValue = data[index];</span><br />
<span style="color: #333333; font-family: Verdana, sans-serif;"> data[index] = element;</span><br />
<span style="color: #333333; font-family: Verdana, sans-serif;"> return oldValue;</span><br />
<span style="color: #333333; font-family: Verdana, sans-serif;"> }</span><br />
<span style="color: #333333; font-family: Verdana, sans-serif;"><br /></span>
<span style="color: #333333; font-family: Verdana, sans-serif;"> public Object remove(int index) {</span><br />
<span style="color: #333333; font-family: Verdana, sans-serif;"> rangeCheck(index);</span><br />
<span style="color: #333333; font-family: Verdana, sans-serif;"> Object oldValue = data[index];</span><br />
<span style="color: #333333; font-family: Verdana, sans-serif;"> int numMoved = size - index - 1;</span><br />
<span style="color: #333333; font-family: Verdana, sans-serif;"> System.arraycopy(data, index + 1, data, index, numMoved);</span><br />
<span style="color: #333333; font-family: Verdana, sans-serif;"> data[--size] = null;</span><br />
<span style="color: #333333; font-family: Verdana, sans-serif;"> return oldValue;</span><br />
<span style="color: #333333; font-family: Verdana, sans-serif;"> }</span><br />
<span style="color: #333333; font-family: Verdana, sans-serif;"><br /></span>
<span style="color: #333333; font-family: Verdana, sans-serif;"> @Override</span><br />
<span style="color: #333333; font-family: Verdana, sans-serif;"> public Iterator iterator() {</span><br />
<span style="color: #333333; font-family: Verdana, sans-serif;"> return new Iterator() {</span><br />
<span style="color: #333333; font-family: Verdana, sans-serif;"> private int iteratorIndex = 0;</span><br />
<span style="color: #333333; font-family: Verdana, sans-serif;"><br /></span>
<span style="color: #333333; font-family: Verdana, sans-serif;"> @Override</span><br />
<span style="color: #333333; font-family: Verdana, sans-serif;"> public boolean hasNext() {</span><br />
<span style="color: #333333; font-family: Verdana, sans-serif;"> return iteratorIndex < size;</span><br />
<span style="color: #333333; font-family: Verdana, sans-serif;"> }</span><br />
<span style="color: #333333; font-family: Verdana, sans-serif;"><br /></span>
<span style="color: #333333; font-family: Verdana, sans-serif;"> @Override</span><br />
<span style="color: #333333; font-family: Verdana, sans-serif;"> public Object next() {</span><br />
<span style="color: #333333; font-family: Verdana, sans-serif;"> return data[iteratorIndex++];</span><br />
<span style="color: #333333; font-family: Verdana, sans-serif;"> }</span><br />
<span style="color: #333333; font-family: Verdana, sans-serif;"><br /></span>
<span style="color: #333333; font-family: Verdana, sans-serif;"> @Override</span><br />
<span style="color: #333333; font-family: Verdana, sans-serif;"> public void remove() {</span><br />
<span style="color: #333333; font-family: Verdana, sans-serif;"> throw new UnsupportedOperationException();</span><br />
<span style="color: #333333; font-family: Verdana, sans-serif;"> }</span><br />
<span style="color: #333333; font-family: Verdana, sans-serif;"> };</span><br />
<span style="color: #333333; font-family: Verdana, sans-serif;"> }</span><br />
<span style="color: #333333; font-family: Verdana, sans-serif;"><br /></span>
<span style="color: #333333; font-family: Verdana, sans-serif;"> public int size() {</span><br />
<span style="color: #333333; font-family: Verdana, sans-serif;"> return size;</span><br />
<span style="color: #333333; font-family: Verdana, sans-serif;"> }</span><br />
<span style="color: #333333; font-family: Verdana, sans-serif;"><br /></span>
<span style="color: #333333; font-family: Verdana, sans-serif;"> @Override</span><br />
<span style="color: #333333; font-family: Verdana, sans-serif;"> public String toString() {</span><br />
<span style="color: #333333; font-family: Verdana, sans-serif;"> StringBuilder builder = new StringBuilder();</span><br />
<span style="color: #333333; font-family: Verdana, sans-serif;"> builder.append("[");</span><br />
<span style="color: #333333; font-family: Verdana, sans-serif;"> for (int k = 0; k < size; k++) {</span><br />
<span style="color: #333333; font-family: Verdana, sans-serif;"> builder.append(data[k]);</span><br />
<span style="color: #333333; font-family: Verdana, sans-serif;"> if (k < size - 1) {</span><br />
<span style="color: #333333; font-family: Verdana, sans-serif;"> builder.append(", ");</span><br />
<span style="color: #333333; font-family: Verdana, sans-serif;"> }</span><br />
<span style="color: #333333; font-family: Verdana, sans-serif;"> }</span><br />
<span style="color: #333333; font-family: Verdana, sans-serif;"> builder.append("]");</span><br />
<span style="color: #333333; font-family: Verdana, sans-serif;"> return builder.toString();</span><br />
<span style="color: #333333; font-family: Verdana, sans-serif;"> }</span><br />
<span style="color: #333333; font-family: Verdana, sans-serif;"><br /></span>
<span style="color: #333333; font-family: Verdana, sans-serif;"> private void ensureCapacity(int minCapacity) {</span><br />
<span style="color: #333333; font-family: Verdana, sans-serif;"> if (minCapacity > size) {</span><br />
<span style="color: #333333; font-family: Verdana, sans-serif;"> int newCapacity = 1 + (3 * data.length) / 2;</span><br />
<span style="color: #333333; font-family: Verdana, sans-serif;"> Object[] tmpData = new Object[newCapacity];</span><br />
<span style="color: #333333; font-family: Verdana, sans-serif;"> System.arraycopy(data, 0, tmpData, 0, data.length);</span><br />
<span style="color: #333333; font-family: Verdana, sans-serif;"> data = tmpData;</span><br />
<span style="color: #333333; font-family: Verdana, sans-serif;"> }</span><br />
<span style="color: #333333; font-family: Verdana, sans-serif;"> }</span><br />
<span style="color: #333333; font-family: Verdana, sans-serif;"><br /></span>
<span style="color: #333333; font-family: Verdana, sans-serif;"> private void rangeCheck(int index) {</span><br />
<span style="color: #333333; font-family: Verdana, sans-serif;"> if (index >= size || 0 > index) {</span><br />
<span style="color: #333333; font-family: Verdana, sans-serif;"> throw new IndexOutOfBoundsException();</span><br />
<span style="color: #333333; font-family: Verdana, sans-serif;"> }</span><br />
<span style="color: #333333; font-family: Verdana, sans-serif;"> }</span><br />
<span style="color: #333333; font-family: Verdana, sans-serif;">}</span><br />
<span style="color: #333333; font-family: Verdana, sans-serif;"><br /></span>
<span style="color: #333333; font-family: Verdana, sans-serif;">class XArrayListTest {</span><br />
<span style="color: #333333; font-family: Verdana, sans-serif;"> public static void main(String[] args) {</span><br />
<span style="color: #333333; font-family: Verdana, sans-serif;"> XArrayList list = new XArrayList(1);</span><br />
<span style="color: #333333; font-family: Verdana, sans-serif;"> list.add(0); //[0]</span><br />
<span style="color: #333333; font-family: Verdana, sans-serif;"> list.add(1); //[0, 1]</span><br />
<span style="color: #333333; font-family: Verdana, sans-serif;"> list.add(2); //[0, 1, 2]</span><br />
<span style="color: #333333; font-family: Verdana, sans-serif;"> list.add(3); //[0, 1, 2, 3]</span><br />
<span style="color: #333333; font-family: Verdana, sans-serif;"> list.add(4); //[0, 1, 2, 3, 4]</span><br />
<span style="color: #333333; font-family: Verdana, sans-serif;"> list.remove(2); //[0, 1, 3, 4]</span><br />
<span style="color: #333333; font-family: Verdana, sans-serif;"> list.add(0, 10); //[10, 0, 1, 3, 4]</span><br />
<span style="color: #333333; font-family: Verdana, sans-serif;"> list.add(1, 20); //[10, 20, 0, 1, 3, 4]</span><br />
<span style="color: #333333; font-family: Verdana, sans-serif;"> for (Object element : list) {</span><br />
<span style="color: #333333; font-family: Verdana, sans-serif;"> System.out.print(element + " ");</span><br />
<span style="color: #333333; font-family: Verdana, sans-serif;"> }</span><br />
<span style="color: #333333; font-family: Verdana, sans-serif;"> System.out.println();</span><br />
<span style="color: #333333; font-family: Verdana, sans-serif;"> System.out.print(list);</span><br />
<span style="color: #333333; font-family: Verdana, sans-serif;"> }</span><br />
<span style="color: #333333; font-family: Verdana, sans-serif;">}</span><br />
<br />
<span style="background-color: white; color: #333333; font-family: Verdana, sans-serif; font-size: 14.545454025268555px; line-height: 18.18181800842285px;">----</span><span style="background-color: white; color: #333333; font-family: Verdana, sans-serif; font-size: 14.545454025268555px; line-height: 18.18181800842285px;">------------------------------------------------------------</span>
</div>
Golovach Ivanhttp://www.blogger.com/profile/17934541017925930523noreply@blogger.comtag:blogger.com,1999:blog-2350100894732972221.post-86394632165581148572012-08-01T17:00:00.000-07:002013-03-11T17:23:46.184-07:00simplification: LinkedList<div dir="ltr" style="text-align: left;" trbidi="on">
<span style="font-family: Verdana, sans-serif;">Здесь приводится упрощенная версия класса <a href="http://docs.oracle.com/javase/7/docs/api/java/util/LinkedList.html">java.util.LinkedList</a>. Это структура данных называется "двусвязный список".</span><br />
<span style="font-family: Verdana, sans-serif;"><br /><span style="background-color: white; color: #333333; line-height: 18.18181800842285px;">----</span><span style="background-color: white; color: #333333; line-height: 18.18181800842285px;">------------------------------------------------------------</span><br style="background-color: white; color: #333333; line-height: 18.18181800842285px;" /><span style="background-color: white; color: #333333; line-height: 18.18181800842285px;"><b>-- Код:</b></span></span>
<br />
<span style="background-color: white; color: #333333; font-family: Verdana, sans-serif; line-height: 18.18181800842285px;">----</span><span style="background-color: white; color: #333333; font-family: Verdana, sans-serif; line-height: 18.18181800842285px;">------------------------------------------------------------</span>
</div>
Golovach Ivanhttp://www.blogger.com/profile/17934541017925930523noreply@blogger.comtag:blogger.com,1999:blog-2350100894732972221.post-14977522216866028332012-08-01T16:46:00.000-07:002012-12-04T16:51:02.999-08:00db-rdbms<div dir="ltr" style="text-align: left;" trbidi="on">
<span style="font-family: Verdana, sans-serif;"> Обзоры, как устроены движки RDBMS:</span><br />
<span style="font-family: Verdana, sans-serif;"> 1. <a href="http://www.cs.brown.edu/courses/cs295-11/2006/anatomyofadatabase.pdf">"Anatomy of a Database System"</a> Joseph M. Hellerstein and Michael Stonebraker</span><br />
<span style="font-family: Verdana, sans-serif;"> 2. <a href="http://db.cs.berkeley.edu/papers/fntdb07-architecture.pdf">"Architecture of a Database System"</a>, </span><span style="font-family: Verdana, sans-serif;">Joseph M. Hellerstein</span><span style="font-family: Verdana, sans-serif;">, Michael Stonebraker, </span><span style="font-family: Verdana, sans-serif;">James Hamilton</span></div>
Golovach Ivanhttp://www.blogger.com/profile/17934541017925930523noreply@blogger.comtag:blogger.com,1999:blog-2350100894732972221.post-69507608330056052032012-08-01T16:29:00.000-07:002012-12-04T16:39:23.980-08:00db-nosql-critique<div dir="ltr" style="text-align: left;" trbidi="on">
<span style="font-family: Verdana, sans-serif;"> Критика NoSQL систем:</span><br />
<span style="font-family: Verdana, sans-serif;"> 1. <a href="http://www.labouseur.com/courses/db/Stonebraker-SQL-vs-NoSQL-2010.pdf">"SQL Databases v. </a></span><span style="font-family: Verdana, sans-serif;"><a href="http://www.labouseur.com/courses/db/Stonebraker-SQL-vs-NoSQL-2010.pdf">NoSQL Databases"</a> </span><br />
<span style="font-family: Verdana, sans-serif;">Michael Stonebraker considers several performance arguments </span><span style="font-family: Verdana, sans-serif;">in favor of NoSQL databases—and finds them insufficient.</span><br />
<span style="font-family: Verdana, sans-serif;"> 2. <a href="http://www.labouseur.com/courses/db/Stonebraker-on-NoSQL-2011.pdf">"</a></span><a href="http://www.labouseur.com/courses/db/Stonebraker-on-NoSQL-2011.pdf"><span style="font-family: Verdana, sans-serif;">Stonebraker on </span><span style="font-family: Verdana, sans-serif;">NoSQL and Enterprises"</span></a><br />
<span style="font-family: Verdana, sans-serif;">Michael Stonebraker discusses several reasons </span><span style="font-family: Verdana, sans-serif;">why NoSQL has not caught on with enterprise users.</span><br />
<span style="font-family: Verdana, sans-serif;"> 3. </span><span style="font-family: Verdana, sans-serif;"><a href="http://www.ece.cmu.edu/~ece842/S12/readings/stonebraker2010.pdf">"MapReduce and Parallel DBMSs: friends or foes?"</a>, Stonebraket + ...</span></div>
Golovach Ivanhttp://www.blogger.com/profile/17934541017925930523noreply@blogger.comtag:blogger.com,1999:blog-2350100894732972221.post-62185259374564421842012-08-01T16:22:00.000-07:002012-12-04T16:28:43.636-08:00db-nosql<div dir="ltr" style="text-align: left;" trbidi="on">
<span style="font-family: Verdana, sans-serif;"> Хороший обзор NoSQL систем содержится в текcте:</span><br />
<span style="font-family: Verdana, sans-serif;">1. <a href="http://www.christof-strauch.de/nosqldbs.pdf">"NoSQLDatabases", C. Strauch</a></span><br />
<br />
<span style="font-family: Verdana, sans-serif;"><br /></span>
<span style="font-family: Verdana, sans-serif;"><br /></span>
</div>
Golovach Ivanhttp://www.blogger.com/profile/17934541017925930523noreply@blogger.comtag:blogger.com,1999:blog-2350100894732972221.post-77304307881835179742012-08-01T16:15:00.000-07:002012-11-26T16:30:48.221-08:00collections: Iterable-Iterator<div dir="ltr" style="text-align: left;" trbidi="on">
<br />
<div style="background-color: white; color: #333333; line-height: 20px;">
<span style="font-family: Verdana, sans-serif;"> Классический for для перебора элементов List (отлично для ArrayList, плохо для LinkedList)</span></div>
<pre style="background-color: #f8f8f8; border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 1px solid rgb(204, 204, 204); margin-bottom: 15px; margin-top: 15px; overflow: auto; padding: 6px 10px;"><span style="color: #333333; font-family: Verdana, sans-serif;"><span style="line-height: 20px;">import java.util.List;
import static java.util.Arrays.asList;
public class ListExample_0_for {
public static void main(String[] args) {
List<String> list = asList("A", "B", "C");
// for
for (<b>int k = 0; k < list.size(); k++</b>) {
System.out.print(" " + list.<b>get(k)</b>);
}
}
}</span></span></pre>
<div style="background-color: white;">
<span style="color: #333333; font-family: Verdana, sans-serif; line-height: 20px;">>></span><span style="background-color: transparent; line-height: 20px;"><span style="color: #333333; font-family: Verdana, sans-serif;"> A B C</span></span></div>
<div style="background-color: white;">
<div style="color: #333333; font-weight: normal; line-height: 20px;">
<br /></div>
<div style="color: #333333; font-weight: normal; line-height: 20px;">
<span style="font-family: Verdana, sans-serif;"> while для перебора элементов List (хорошо и для ArrayList, и для LinkedList)</span></div>
<pre style="background-color: #f8f8f8; border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 1px solid rgb(204, 204, 204); margin-bottom: 15px; margin-top: 15px; overflow: auto; padding: 6px 10px;"><span style="color: #333333; font-family: Verdana, sans-serif;"><span style="line-height: 20px;">import java.util.Iterator;
import java.util.List;
import static java.util.Arrays.asList;
public class ListExample_1_iter_while {
public static void main(String[] args) {
List<String> list = asList("A", "B", "C");
// while over iterator
Iterator<String> iter = <b>list.iterator()</b>;
while (<b>iter.hasNext()</b>) {
System.out.print(" " + <b>iter.next()</b>);
}
}
}</span></span></pre>
<div style="color: #333333; font-weight: bold; line-height: 20px;">
<div style="color: black; font-weight: normal; line-height: normal;">
<span style="color: #333333; font-family: Verdana, sans-serif; line-height: 20px;">>></span><span style="background-color: transparent; line-height: 20px;"><span style="color: #333333; font-family: Verdana, sans-serif;"> A B C</span></span></div>
<div style="color: black; font-weight: normal; line-height: normal;">
<span style="background-color: transparent; line-height: 20px;"><span style="color: #333333; font-family: Verdana, sans-serif;"><br /></span></span></div>
<div style="color: black; font-weight: normal; line-height: normal;">
<span style="color: #333333; font-family: Verdana, sans-serif; line-height: 20px;"> for по итератору для перебора элементов List (хорошо и для ArrayList, и для LinkedList)</span></div>
<div>
</div>
</div>
<div>
<pre style="background-color: #f8f8f8; border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 1px solid rgb(204, 204, 204); margin-bottom: 15px; margin-top: 15px; overflow: auto; padding: 6px 10px;"><span style="color: #333333; font-family: Verdana, sans-serif;"><span style="line-height: 20px;">import java.util.Iterator;
import java.util.List;
import static java.util.Arrays.asList;
public class ListExample_2_iter_for {
public static void main(String[] args) {
List<String> list = asList("A", "B", "C");
// for over iterator
for (<b>Iterator<String> iter0 = list.iterator(); iter0.hasNext(); </b>) {
System.out.print(" " + iter0.next());
}
}
}</span></span></pre>
<div style="color: #333333; line-height: 20px;">
<div style="color: black; font-weight: normal; line-height: normal;">
<span style="color: #333333; font-family: Verdana, sans-serif; line-height: 20px;">>></span><span style="background-color: transparent; line-height: 20px;"><span style="color: #333333; font-family: Verdana, sans-serif;"> A B C</span></span></div>
<div style="color: black; font-weight: normal; line-height: normal;">
<span style="background-color: transparent; line-height: 20px;"><span style="color: #333333; font-family: Verdana, sans-serif;"><br /></span></span></div>
<div style="color: black; line-height: normal;">
<span style="color: #333333; font-family: Verdana, sans-serif; line-height: 20px;"> <b>foreach</b> для перебора элементов List (хорошо и для ArrayList, и для LinkedList), компилятор разворачивает его в for-по-итератору</span></div>
<div style="font-weight: bold;">
</div>
</div>
</div>
<div>
<pre style="background-color: #f8f8f8; border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 1px solid rgb(204, 204, 204); margin-bottom: 15px; margin-top: 15px; overflow: auto; padding: 6px 10px;"><span style="color: #333333; font-family: Verdana, sans-serif;"><span style="line-height: 20px;">import java.util.List;
import static java.util.Arrays.asList;
public class ListExample_3_foreach {
public static void main(String[] args) {
List<String> list = asList("A", "B", "C");
// foreach
<b>for (String elem : list)</b> {
System.out.print(" " + elem);
}
}
}</span></span></pre>
<div style="color: #333333; font-weight: bold; line-height: 20px;">
<div style="color: black; font-weight: normal; line-height: normal;">
<span style="color: #333333; font-family: Verdana, sans-serif; line-height: 20px;">>></span><span style="background-color: transparent; line-height: 20px;"><span style="color: #333333; font-family: Verdana, sans-serif;"> A B C</span></span></div>
<div>
</div>
</div>
</div>
<div>
<div style="color: #333333; font-weight: normal; line-height: 20px;">
<br /></div>
<div style="color: #333333; font-weight: normal; line-height: 20px;">
<span style="font-family: Verdana, sans-serif;"> Аналогично для Set</span></div>
<pre style="background-color: #f8f8f8; border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 1px solid rgb(204, 204, 204); margin-bottom: 15px; margin-top: 15px; overflow: auto; padding: 6px 10px;"><span style="color: #333333; font-family: Verdana, sans-serif;"><span style="line-height: 20px;">import java.util.Iterator;
import java.util.Set;
import java.util.TreeSet;
import static java.util.Arrays.asList;
public class SetExample_1_iter_while {
public static void main(String[] args) {
Set<String> set = new TreeSet<>(asList("A", "B", "C"));
// while over iterator
<b>Iterator<String> iter = set.iterator()</b>;
<b>while (iter.hasNext())</b> {
System.out.print(" " + <b>iter.next()</b>);
}
}
}</span></span></pre>
<div style="color: #333333; font-weight: bold; line-height: 20px;">
<div style="color: black; font-weight: normal; line-height: normal;">
<span style="color: #333333; font-family: Verdana, sans-serif; line-height: 20px;">>></span><span style="background-color: transparent; line-height: 20px;"><span style="color: #333333; font-family: Verdana, sans-serif;"> A B C</span></span></div>
</div>
</div>
<div>
<pre style="background-color: #f8f8f8; border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 1px solid rgb(204, 204, 204); margin-bottom: 15px; margin-top: 15px; overflow: auto; padding: 6px 10px;"><span style="color: #333333; font-family: Verdana, sans-serif;"><span style="line-height: 20px;">import java.util.TreeSet;
import java.util.Iterator;
import java.util.Set;
import static java.util.Arrays.asList;
public class SetExample_2_iter_for {
public static void main(String[] args) {
Set<String> set = new TreeSet<>(asList("A", "B", "C"));
// for over iterator
<b>for (Iterator<String> iter = set.iterator(); iter.hasNext(); )</b> {
System.out.print(" " + <b>iter.next()</b>);
}
}
}</span></span></pre>
<div style="color: #333333; font-weight: bold; line-height: 20px;">
<div style="color: black; font-weight: normal; line-height: normal;">
<span style="color: #333333; font-family: Verdana, sans-serif; line-height: 20px;">>></span><span style="background-color: transparent; line-height: 20px;"><span style="color: #333333; font-family: Verdana, sans-serif;"> A B C</span></span></div>
</div>
</div>
<div>
<pre style="background-color: #f8f8f8; border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 1px solid rgb(204, 204, 204); margin-bottom: 15px; margin-top: 15px; overflow: auto; padding: 6px 10px;"><span style="color: #333333; font-family: Verdana, sans-serif;"><span style="line-height: 20px;">import java.util.Set;
import java.util.TreeSet;
import static java.util.Arrays.asList;
public class SetExample_3_foreach {
public static void main(String[] args) {
Set<String> set = new TreeSet<>(asList("A", "B", "C"));
// foreach
<b>for (String elem : set)</b> {
System.out.print(" " + elem);
}
}
}</span></span></pre>
<div style="color: #333333; font-weight: bold; line-height: 20px;">
<span style="font-family: Verdana, sans-serif; font-weight: normal;">>></span><span style="background-color: transparent; color: black; font-weight: normal;"><span style="color: #333333; font-family: Verdana, sans-serif;"> A B C</span></span></div>
</div>
<div>
<div style="color: #333333; font-weight: normal; line-height: 20px;">
<br /></div>
<div style="color: #333333; font-weight: normal; line-height: 20px;">
<br /></div>
<div style="color: #333333; font-weight: normal; line-height: 20px;">
<span style="font-family: Verdana, sans-serif;"> А вот как это выглядит для Map</span></div>
<pre style="background-color: #f8f8f8; border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 1px solid rgb(204, 204, 204); margin-bottom: 15px; margin-top: 15px; overflow: auto; padding: 6px 10px;"><span style="color: #333333; font-family: Verdana, sans-serif;"><span style="line-height: 20px;">import java.util.*;
public class MapExample_0_foreach_long {
public static void main(String[] args) {
Map<String, Integer> map = new TreeMap<>();
map.put("A", 10);
map.put("B", 20);
map.put("C", 30);
<b>Set<String> keys = map.keySet();</b>
<b>Collection<Integer> values = map.values();</b>
<b>Set<Map.Entry<String, Integer>> entries = map.entrySet();</b>
for (String key : keys) {
System.out.print(" " + key);
}
System.out.println();
for (Integer value : values) {
System.out.print(" " + value);
}
System.out.println();
for (Map.Entry<String, Integer> entry : entries) {
String key = entry.getKey();
Integer value = entry.getValue();
System.out.print(" " + key + "->" + value);
}
System.out.println();
}
}</span></span></pre>
<div>
<div>
<span style="color: #333333; font-family: Verdana, sans-serif;"><span style="line-height: 20px;">>> A B C</span></span></div>
<div>
<span style="color: #333333; font-family: Verdana, sans-serif; line-height: 20px;">>></span><span style="color: #333333; font-family: Verdana, sans-serif;"><span style="line-height: 20px;"> 10 20 30</span></span></div>
<div>
<span style="color: #333333; font-family: Verdana, sans-serif; line-height: 20px;">>></span><span style="color: #333333; font-family: Verdana, sans-serif;"><span style="line-height: 20px;"> A->10 B->20 C->30</span></span></div>
</div>
</div>
<div>
<span style="color: #333333; font-family: Verdana, sans-serif;"><span style="line-height: 20px;"><br /></span></span></div>
<div>
<span style="color: #333333; font-family: Verdana, sans-serif;"><span style="line-height: 20px;"> Ну или записанное чуть короче</span></span></div>
<div>
<pre style="background-color: #f8f8f8; border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 1px solid rgb(204, 204, 204); margin-bottom: 15px; margin-top: 15px; overflow: auto; padding: 6px 10px;"><span style="color: #333333; font-family: Verdana, sans-serif;"><span style="line-height: 20px;">import java.util.*;
public class MapExample_1_foreach_short {
public static void main(String[] args) {
Map<String, Integer> map = new TreeMap<>();
map.put("A", 10);
map.put("B", 20);
map.put("C", 30);
<b>for (String key : map.keySet())</b> {
System.out.print(" " + key);
}
System.out.println();
<b>for (Integer value : map.values())</b> {
System.out.print(" " + value);
}
System.out.println();
<b>for (Map.Entry<String, Integer> entry : map.entrySet())</b> {
System.out.print(" " + entry.getKey() + "->" + entry.getValue());
}
System.out.println();
}
}</span></span></pre>
<div style="color: #333333; font-weight: bold; line-height: 20px;">
<div style="color: black; font-weight: normal; line-height: normal;">
<span style="color: #333333; font-family: Verdana, sans-serif;"><span style="line-height: 20px;">>> A B C</span></span></div>
<div style="color: black; font-weight: normal; line-height: normal;">
<span style="color: #333333; font-family: Verdana, sans-serif; line-height: 20px;">>></span><span style="color: #333333; font-family: Verdana, sans-serif;"><span style="line-height: 20px;"> 10 20 30</span></span></div>
<div style="color: black; font-weight: normal; line-height: normal;">
<span style="color: #333333; font-family: Verdana, sans-serif; line-height: 20px;">>></span><span style="color: #333333; font-family: Verdana, sans-serif;"><span style="line-height: 20px;"> A->10 B->20 C->30</span></span></div>
</div>
</div>
<div style="color: #333333; font-weight: bold; line-height: 20px;">
<div style="font-weight: normal;">
<br /></div>
</div>
</div>
</div>
Golovach Ivanhttp://www.blogger.com/profile/17934541017925930523noreply@blogger.comtag:blogger.com,1999:blog-2350100894732972221.post-80588923764464467942012-08-01T15:46:00.000-07:002013-03-11T15:50:06.818-07:00Collection API competitors<div dir="ltr" style="text-align: left;" trbidi="on">
<span style="font-family: Verdana, sans-serif;"><a href="https://code.google.com/p/guava-libraries/">Google Collections (Guava)</a> - круто сделана в функциональном стиле, используется в Google</span><br />
<span style="font-family: Verdana, sans-serif;"><a href="http://trove.starlight-systems.com/">Trove</a> - есть контейнеры для примитивов, используется в IDEA</span><br />
<span style="font-family: Verdana, sans-serif;"><a href="http://commons.apache.org/proper/commons-collections/">Apache Collections</a></span><br />
<span style="font-family: Verdana, sans-serif;"><a href="http://javolution.org/">Javolution</a> - обещают real-time отклик</span></div>
Golovach Ivanhttp://www.blogger.com/profile/17934541017925930523noreply@blogger.comtag:blogger.com,1999:blog-2350100894732972221.post-19467882682428185722012-08-01T15:43:00.000-07:002013-03-11T16:26:00.156-07:00big o notation<div dir="ltr" style="text-align: left;" trbidi="on">
<span style="font-family: Verdana, sans-serif;">Анализ алгоритмов. Макконел. </span><br />
<span style="font-family: Verdana, sans-serif;"> - 1.4 Скорости роста (стр 36-40)</span><br />
<span style="font-family: Verdana, sans-serif;"><br /></span>
<span style="font-family: Verdana, sans-serif;">Структуры данных и алгоритмы. Ахо и другие. </span><br />
<span style="font-family: Verdana, sans-serif;"> - 1.4 Время выполнения программ (стр 28-37)</span><br />
<span style="font-family: Verdana, sans-serif;"><br /></span>
<span style="font-family: Verdana, sans-serif;">Алгоритмы. Построение и анализ. Второе издание. Кормен и другие.</span><br />
<span style="font-family: Verdana, sans-serif;"> - 2.2. Анализ алгоритмов (стр 64-71)</span><br />
<span style="font-family: Verdana, sans-serif;"> - 3.1 Асимптотические обозначения (стр 87-97)</span></div>
Golovach Ivanhttp://www.blogger.com/profile/17934541017925930523noreply@blogger.comtag:blogger.com,1999:blog-2350100894732972221.post-20358468575941705462012-08-01T15:40:00.001-07:002013-03-28T16:19:11.884-07:00exception: multi-catch<div dir="ltr" style="text-align: left;" trbidi="on">
<span style="font-family: Verdana, sans-serif; font-size: large;"><b>multi-catch </b></span><br />
<span style="font-family: Verdana, sans-serif;"><br /></span>
<span style="color: #333333; font-family: Verdana, sans-serif;"><span style="font-size: 15px; line-height: 20px;"> В жизни так бывает, что catch-блоки по разным исключительным ситуациям выглядят идентично:</span></span><br />
<pre style="background-color: #f8f8f8; border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 1px solid rgb(204, 204, 204); margin-bottom: 15px; margin-top: 15px; overflow: auto; padding: 6px 10px;"><span style="color: #333333; font-family: Verdana, sans-serif;"><span style="font-size: 15px; line-height: 19px;">import java.io.IOException;
public class ExampleMultiCatch0 {
public static void main(String[] args) {
try {
if (args == null) {
throw new IOException();
} else {
throw new InterruptedException();
}
} catch (IOException e) {
<b>System.out.println("O mama ...");</b>
} catch (InterruptedException e) {
<b>System.out.println("O mama ...");</b>
}
}
}</span></span></pre>
<div style="background-color: white;">
<div style="color: #333333; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 15px; font-weight: bold; line-height: 20px;">
<br /></div>
<div>
<span style="color: #333333; font-family: Verdana, sans-serif; font-size: 15px; line-height: 20px;"> Если содержимое блоков многострочно, то создаем специальный метод и не забываем его вызывать в каждом catch-блоке:</span><br style="font-weight: normal;" /><pre style="background-color: #f8f8f8; border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 1px solid rgb(204, 204, 204); margin-bottom: 15px; margin-top: 15px; overflow: auto; padding: 6px 10px;"><span style="color: #333333; font-family: Verdana, sans-serif;"><span style="font-size: 15px; line-height: 19px;">import java.io.IOException;
public class ExampleMultiCatch00 {
public static void main(String[] args) {
try {
if (args == null) {
throw new IOException();
} else {
throw new InterruptedException();
}
} catch (IOException e) {
<b>repair();</b>
} catch (InterruptedException e) {
<b>repair();</b>
}
}
private static void repair() {
System.out.println("O mama ...");
System.out.println("O daddy ...");
System.out.println("O baby ...");
}
}</span></span></pre>
<div style="color: #333333; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 15px; font-weight: normal; line-height: 20px;">
<div style="font-weight: bold;">
<br /></div>
</div>
</div>
</div>
<br />
<span style="color: #333333; font-family: Verdana, sans-serif;"><span style="font-size: 15px; line-height: 20px;"> Можем, конечно, во избежании дубликации пользоваться полиморфностью перехвата и "ловить предка" (однако в такой catch-блок можем наловить и лишнего - любого наследника предка, в нашем примере, скажем NullPointerException):</span></span><br />
<pre style="background-color: #f8f8f8; border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 1px solid rgb(204, 204, 204); margin-bottom: 15px; margin-top: 15px; overflow: auto; padding: 6px 10px;"><span style="color: #333333; font-family: Verdana, sans-serif;"><span style="font-size: 15px; line-height: 19px;">import java.io.IOException;
public class ExampleMultiCatch000 {
public static void main(String[] args) {
try {
if (args == null) {
throw new IOException();
} else {
throw new InterruptedException();
}
} catch (<b>Exception</b> e) {
System.out.println("O mama ...");
}
}
}</span></span></pre>
<div style="background-color: white;">
<div style="color: #333333; font-size: 15px; line-height: 20px;">
<span style="font-family: Verdana, sans-serif;"> </span></div>
<div>
<span style="color: #333333; font-family: Verdana, sans-serif; font-size: 15px; line-height: 20px;"> Однако, хорошо бы <b>синтаксически подчеркнуть</b> тот факт, что реакция на два разных исключения идентична. Для этого в Java 7 ввели multi-catch блок:</span><br style="font-weight: normal;" /><pre style="background-color: #f8f8f8; border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 1px solid rgb(204, 204, 204); margin-bottom: 15px; margin-top: 15px; overflow: auto; padding: 6px 10px;"><span style="color: #333333; font-family: Verdana, sans-serif;"><span style="font-size: 15px; line-height: 19px;">import java.io.IOException;
public class ExampleMultiCatch1 {
public static void main(String[] args) {
try {
if (args == null) {
throw new IOException();
} else {
throw new InterruptedException();
}
} catch (<b>IOException | InterruptedException</b> e) {
System.out.println("O mama ...");
}
}
}</span></span></pre>
<div>
<div style="color: #333333; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 15px; font-weight: bold; line-height: 20px;">
<br /></div>
<div>
<span style="color: #333333; font-family: Verdana, sans-serif; font-size: 15px; line-height: 20px;"> Используется синтаксис сходный с логическим ИЛИ:</span><br style="font-weight: normal;" /><pre style="background-color: #f8f8f8; border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 1px solid rgb(204, 204, 204); margin-bottom: 15px; margin-top: 15px; overflow: auto; padding: 6px 10px;"><span style="color: #333333; font-family: Verdana, sans-serif;"><span style="font-size: 15px; line-height: 19px;">public class ExampleMultiCatch11 {
public static void main(String[] args) {
if (<b>3 < args.length | args.length < 33</b>) {
System.out.println("!");
}
}
}</span></span></pre>
<div style="color: #333333; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 15px; font-weight: normal; line-height: 20px;">
<div style="font-weight: bold;">
<br /></div>
</div>
</div>
</div>
</div>
</div>
<br />
<span style="font-family: Verdana, sans-serif; font-size: large;"><b>more precise rethrow</b></span><br />
<br />
<span style="color: #333333; font-family: Verdana, sans-serif;"><span style="font-size: 15px; line-height: 20px;"> Однако, вот я хочу сохранить переменную e, какой тип выбрать? Так не выйдет:</span></span><br />
<pre style="background-color: #f8f8f8; border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 1px solid rgb(204, 204, 204); margin-bottom: 15px; margin-top: 15px; overflow: auto; padding: 6px 10px;"><span style="font-family: Verdana, sans-serif;"><span style="font-size: 15px; line-height: 19px;"><span style="color: #333333;">import java.io.IOException;
public class ExampleMultiCatch2 {
public static void main(String[] args) {
try {
if (args == null) {
throw new IOException();
} else {
throw new InterruptedException();
}
} catch (IOException | InterruptedException e) {
</span><b><span style="color: red;">IOException | InterruptedException x = e; // don't compile</span></b><span style="color: #333333;">
}
}
}</span></span></span></pre>
<div style="background-color: white;">
<div style="color: #333333; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 15px; font-weight: bold; line-height: 20px;">
<br /></div>
<div style="color: #333333; font-size: 15px; line-height: 20px;">
<span style="font-family: Verdana, sans-serif;"> Отступление: хотя такое вот пропускает:</span></div>
<div>
<pre style="background-color: #f8f8f8; border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 1px solid rgb(204, 204, 204); color: #333333; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 15px; font-weight: normal; line-height: normal; margin-bottom: 15px; margin-top: 15px; overflow: auto; padding: 6px 10px;"><span style="font-family: Verdana, sans-serif;"><span style="line-height: 19px;">x</span></span></pre>
<div>
<div style="color: #333333; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 15px; font-weight: bold; line-height: 20px;">
<br /></div>
<div>
<span style="color: #333333; font-family: Verdana, sans-serif; font-size: 15px; line-height: 20px;"> Ну хорошо, возьмем общего предка:</span><br style="font-weight: normal;" /><pre style="background-color: #f8f8f8; border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 1px solid rgb(204, 204, 204); margin-bottom: 15px; margin-top: 15px; overflow: auto; padding: 6px 10px;"><span style="color: #333333; font-family: Verdana, sans-serif;"><span style="font-size: 15px; line-height: 19px;">import java.io.IOException;
public class ExampleMultiCatch22 {
public static void main(String[] args) {
try {
if (args == null) {
throw new IOException();
} else {
throw new InterruptedException();
}
} catch (<b>IOException | InterruptedException</b> e) {
<b>Exception</b> x = e;
}
}
}</span></span></pre>
<div>
<div style="color: #333333; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 15px; font-weight: bold; line-height: 20px;">
<br /></div>
<div style="color: #333333; font-size: 15px; line-height: 20px;">
<span style="font-family: Verdana, sans-serif;"> Однако вот такое компилятор не пропускает: </span></div>
<pre style="background-color: #f8f8f8; border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 1px solid rgb(204, 204, 204); margin-bottom: 15px; margin-top: 15px; overflow: auto; padding: 6px 10px;"><span style="font-family: Verdana, sans-serif;"><span style="font-size: 15px; line-height: 19px;"><span style="color: #333333;">import java.io.IOException;
public class ExampleMultiCatch222 {
public static void main(String[] args) </span><b><span style="color: red;">throws IOException, InterruptedException</span></b><span style="color: #333333;"> {
try {
if (args == null) {
throw new IOException();
} else {
throw new InterruptedException();
}
} catch (IOException | InterruptedException e) {
</span><b style="color: #333333;">Exception x = e;</b><span style="color: #333333;">
System.out.println("O mama ...");
</span><b><span style="color: red;">throw x; // don't compile</span></b><span style="color: #333333;">
}
}
}</span></span></span></pre>
<div>
<div style="color: #333333; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 15px; font-weight: bold; line-height: 20px;">
<br /></div>
<div style="color: #333333; font-size: 15px; line-height: 20px;">
<span style="font-family: Verdana, sans-serif;"> А так неохота (мы же точно знаем, что повторно кидаем одно-из-двух, а не более общего предка):</span></div>
<pre style="background-color: #f8f8f8; border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 1px solid rgb(204, 204, 204); margin-bottom: 15px; margin-top: 15px; overflow: auto; padding: 6px 10px;"><span style="color: #333333; font-family: Verdana, sans-serif;"><span style="font-size: 15px; line-height: 19px;">import java.io.IOException;
public class ExampleMultiCatch2222 {
public static void main(String[] args) <b>throws Exception</b> {
try {
if (args == null) {
throw new IOException();
} else {
throw new InterruptedException();
}
} catch (<b>IOException | InterruptedException</b> e) {
<b>Exception x = e;</b>
System.out.println("O mama ...");
<b>throw x;</b>
}
}
}</span></span></pre>
<div>
<div style="color: #333333; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 15px; font-weight: bold; line-height: 20px;">
<span style="font-family: Verdana, sans-serif; font-weight: normal;"><br /></span></div>
<div style="color: #333333; font-size: 15px; line-height: 20px;">
<span style="font-family: Verdana, sans-serif;"> Однако, если не сохранять e в переменную (которой надо объявить тип, то все хорошо):</span></div>
<pre style="background-color: #f8f8f8; border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 1px solid rgb(204, 204, 204); margin-bottom: 15px; margin-top: 15px; overflow: auto; padding: 6px 10px;"><span style="color: #333333; font-family: Verdana, sans-serif;"><span style="font-size: 15px; line-height: 19px;">public class ExampleMultiCatch22222 {
public static void main(String[] args) throws IOException, InterruptedException {
try {
if (args == null) {
throw new IOException();
} else {
throw new InterruptedException();
}
} catch (IOException | InterruptedException e) {
System.out.println("O mama ...");
throw e;
}
</span><span style="line-height: 19px;">}
}</span></span></pre>
<div>
<div style="color: #333333; line-height: 20px;">
<span style="font-family: Verdana, sans-serif;"><br /></span></div>
<div>
<div style="color: #333333; font-size: 15px; line-height: 20px;">
<span style="font-family: Verdana, sans-serif;"> Начиная с Java 7 этот трюк работает также в такой форме:</span></div>
<pre style="background-color: #f8f8f8; border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 1px solid rgb(204, 204, 204); margin-bottom: 15px; margin-top: 15px; overflow: auto; padding: 6px 10px;"><span style="color: #333333; font-family: Verdana, sans-serif;"><span style="font-size: 15px; line-height: 19px;">import java.io.IOException;
public class ExampleMultiCatch3 {
public static void main(String[] args) <b>throws IOException, InterruptedException</b> {
try {
if (args == null) {
<b>throw new IOException();</b>
} else {
<b>throw new InterruptedException();</b>
}
} catch (<b>Exception</b> e) {
System.out.println("O mama ...");
<b>throw e;</b>
}
}
}</span></span></pre>
</div>
<div style="color: #333333; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 15px; font-weight: bold; line-height: 20px;">
<span style="font-family: Verdana, sans-serif; font-weight: normal;"><br /></span></div>
<div style="color: #333333; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 15px; font-weight: bold; line-height: 20px;">
<span style="font-family: Verdana, sans-serif; font-weight: normal;"><br /></span></div>
<div style="color: #333333; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 15px; font-weight: bold; line-height: 20px;">
<div style="font-family: 'Times New Roman'; font-size: medium; font-weight: normal;">
<span style="font-family: Verdana, sans-serif; font-size: large;"><b>Links: </b></span></div>
<div style="font-family: 'Times New Roman'; font-size: medium;">
<br /></div>
<div style="color: black; font-family: 'Times New Roman'; font-size: medium; font-weight: normal; line-height: normal;">
<span style="color: #333333; font-family: Verdana, sans-serif; font-size: 15px; line-height: 20px;"> <a href="http://docs.oracle.com/javase/7/docs/technotes/guides/language/catch-multiple.html">Java 7 guide (docs.oracle.com): </a></span><span style="color: #333333; font-family: Verdana, sans-serif;"><span style="font-size: 15px; line-height: 20px;"><a href="http://docs.oracle.com/javase/7/docs/technotes/guides/language/catch-multiple.html">Catching Multiple Exception Types and Rethrowing Exceptions with Improved Type Checking</a></span></span></div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
Golovach Ivanhttp://www.blogger.com/profile/17934541017925930523noreply@blogger.comtag:blogger.com,1999:blog-2350100894732972221.post-10228393063333216372012-08-01T15:40:00.000-07:002012-12-04T16:14:59.985-08:00db-rdbms-critique<div dir="ltr" style="text-align: left;" trbidi="on">
<span style="font-family: Verdana, sans-serif;"> На данной странице приведена критика реляционной модели данных или ее реализации в виде RDBMS от RDBMS-людей и от NoSQL-людей:</span><br />
<span style="font-family: Verdana, sans-serif;"><br /></span>
<span style="font-family: Verdana, sans-serif;">1. <a href="http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.68.9136&rep=rep1&type=pdf">"One Size Fits All: An Idea Whose Time has Come and Gone"</a></span><span style="font-family: Verdana, sans-serif;">, M. Stonebraker +...</span><br />
<span style="font-family: Verdana, sans-serif;">2. <a href="http://static.cs.brown.edu/courses/csci2270/papers/newsql/hstore-endofera.pdf">"The End of an Architectural Era</a></span><span style="font-family: Verdana, sans-serif;"><a href="http://static.cs.brown.edu/courses/csci2270/papers/newsql/hstore-endofera.pdf"> </a></span><span style="font-family: Verdana, sans-serif;"><a href="http://static.cs.brown.edu/courses/csci2270/papers/newsql/hstore-endofera.pdf">(It’s Time for a Complete Rewrite)"</a>, M. Stonebraker +...</span><br />
<span style="font-family: Verdana, sans-serif;"><br /></span>
<span style="font-family: Verdana, sans-serif;"> Общая идея следующая:</span><br />
<span style="font-family: Verdana, sans-serif;"> "...</span><span style="font-family: Verdana, sans-serif;"> presented reasons and experimental evidence that </span><span style="font-family: Verdana, sans-serif;">showed that the major RDBMS vendors can be outperformed by </span><span style="font-family: Verdana, sans-serif;">1-2 orders of magnitude by specialized engines in the data </span><span style="font-family: Verdana, sans-serif;">warehouse, stream processing, text, and scientific database </span><span style="font-family: Verdana, sans-serif;">markets</span><span style="font-family: Verdana, sans-serif;">"</span><br />
<span style="font-family: Verdana, sans-serif;"> "</span><span style="font-family: Verdana, sans-serif;">The popular relational DBMSs all trace their roots to System R </span><span style="font-family: Verdana, sans-serif;">from the 1970s. For example, <b>DB2</b> is a direct descendent of </span><span style="font-family: Verdana, sans-serif;">System R, having used the RDS portion of System R intact in </span><span style="font-family: Verdana, sans-serif;">their first release. Similarly, <b>SQL Server</b> is a direct descendent of </span><span style="font-family: Verdana, sans-serif;">Sybase System 5, which borrowed heavily from System R. </span><span style="font-family: Verdana, sans-serif;">Lastly, the first release of <b>Oracle</b> implemented the user interface </span><span style="font-family: Verdana, sans-serif;">from System R.</span><span style="font-family: Verdana, sans-serif;">"</span><span style="font-family: Verdana, sans-serif;"> </span><br />
<span style="font-family: Verdana, sans-serif;"> "</span><span style="font-family: Verdana, sans-serif;">In summary, the current RDBMSs were architected for the </span><span style="font-family: Verdana, sans-serif;">business data processing market in a time of different user </span><span style="font-family: Verdana, sans-serif;">interfaces and different hardware characteristics. Hence, they all </span><span style="font-family: Verdana, sans-serif;">include the following System R architectural features:</span><br />
<span style="font-family: Verdana, sans-serif;">- Disk oriented storage and indexing structures</span><br />
<span style="font-family: Verdana, sans-serif;">- Multithreading to hide latency</span><br />
<span style="font-family: Verdana, sans-serif;">- Locking-based concurrency control mechanisms</span><br />
<span style="font-family: Verdana, sans-serif;">- Log-based recovery</span><span style="font-family: Verdana, sans-serif;">"</span><br />
<span style="font-family: Verdana, sans-serif;"> // По мнению авторов, эти 4 компонента делают системы неповоротливыми и несоответствующими текущим реалиям железа.</span><br />
<span style="font-family: Verdana, sans-serif;"><br /></span>
<span style="font-family: Verdana, sans-serif;"> <b><a href="http://en.wikipedia.org/wiki/Michael_Stonebraker">Michael Stonebraker</a></b> - Through a series of academic prototypes and commercial startups, Stonebraker's research and products are central to many relational database systems on the market today. He is also the founder of a number of database companies, including Ingres, Illustra, Cohera, StreamBase Systems, Vertica, VoltDB, and Paradigm4. He was previously the Chief Technical Officer (CTO) of Informix. He is also an editor for the book Readings in Database Systems.</span><br />
<span style="font-family: Verdana, sans-serif;"> Michael Stonebraker was a Professor of Computer Science at University of California, Berkeley, for twenty-nine years, where he developed the <b>Ingres</b> and <b>Postgres</b> relational database systems. He is currently an adjunct professor at MIT, where he has been involved in the development of the Aurora,[5] C-Store, H-Store, Morpheus, and SciDB systems.</span></div>
Golovach Ivanhttp://www.blogger.com/profile/17934541017925930523noreply@blogger.comtag:blogger.com,1999:blog-2350100894732972221.post-79530767043343340512012-08-01T15:39:00.000-07:002013-03-28T15:39:23.750-07:00exception: try-with-resources<div dir="ltr" style="text-align: left;" trbidi="on">
<br /></div>
Golovach Ivanhttp://www.blogger.com/profile/17934541017925930523noreply@blogger.comtag:blogger.com,1999:blog-2350100894732972221.post-28359547065694046412012-08-01T15:29:00.000-07:002012-11-14T03:47:28.187-08:00module: java core labs<div dir="ltr" style="text-align: left;" trbidi="on">
<span style="font-family: Verdana, sans-serif; font-size: large;"><b>Разделы</b></span><br />
<b style="font-family: Verdana, sans-serif;"><span style="font-size: large;"> - <a href="http://kharkovitcourses.blogspot.com/2012/08/core-labs-procedural.html">Процедурная Java</a></span></b><br />
<b style="font-family: Verdana, sans-serif;"><span style="font-size: large;"> - </span></b><b style="font-family: Verdana, sans-serif;"><span style="font-size: large;"><a href="http://kharkovitcourses.blogspot.com/2012/08/core-labs-exceptions.html">Исключения в Java</a></span></b><br />
<b style="font-family: Verdana, sans-serif;"><span style="font-size: large;"> - </span></b><b style="font-family: Verdana, sans-serif;"><span style="font-size: large;"><a href="http://kharkovitcourses.blogspot.com/2012/08/core-labs-threads.html">Многопоточность в Java</a></span></b><br />
<b style="font-family: Verdana, sans-serif;"><span style="font-size: large;"> - </span></b><a href="http://kharkovitcourses.blogspot.com/2012/08/core-labs-io.html"><b style="font-family: Verdana, sans-serif;"><span style="font-size: large;">I/O в </span></b><b style="font-family: Verdana, sans-serif;"><span style="font-size: large;">Java</span></b></a><br />
<b style="font-family: Verdana, sans-serif;"><span style="font-size: large;"> - </span></b><b style="font-family: Verdana, sans-serif;"><span style="font-size: large;"><a href="http://kharkovitcourses.blogspot.com/2012/11/core-labs-collections.html">Коллекции в Java</a></span></b><br />
<b style="font-family: Verdana, sans-serif;"><span style="font-size: large;"> - </span></b><b style="font-family: Verdana, sans-serif;"><span style="font-size: large;"><a href="http://kharkovitcourses.blogspot.com/2012/08/core-labs-oop.html">ООП в Java</a></span></b><br />
<br /></div>
Golovach Ivanhttp://www.blogger.com/profile/17934541017925930523noreply@blogger.comtag:blogger.com,1999:blog-2350100894732972221.post-46021156332301279792012-08-01T15:23:00.000-07:002012-12-23T14:15:02.152-08:00db-relaltional<div dir="ltr" style="text-align: left;" trbidi="on">
<span style="font-family: Verdana, sans-serif;"> <b><span style="font-size: large;">Реляционная модель</span></b></span><br />
<span style="font-family: Verdana, sans-serif;"> </span><br />
<span style="font-family: Verdana, sans-serif;"> <b>Модель данных</b> это комбинация как минимум трех компонент:</span><br />
<span style="font-family: Verdana, sans-serif;"> 1. Коллекция структур данных (строительные блоки).</span><br />
<span style="font-family: Verdana, sans-serif;"> 2. Коллекция операторов, которые могут быть применены к любым валидным экземплярам структур данных из пункта 1.</span><br />
<span style="font-family: Verdana, sans-serif;"> 3. Коллекция ограничений целостности (general integrity rules), которые явно или неявно определяют множество consistent database states или changes of state or both.</span><br />
<span style="font-family: Verdana, sans-serif;"><br /></span>
<span style="font-family: Verdana, sans-serif;"> <b>Реляционная м</b></span><b style="font-family: Verdana, sans-serif;">одель данных</b><span style="font-family: Verdana, sans-serif;"> в этом смысле характеризуется следующими компонентами:</span><br />
<span style="font-family: Verdana, sans-serif;"> 1. Единственная структура данных - <b>реляционное отношение</b>.</span><br />
<span style="font-family: Verdana, sans-serif;"> 2. Операторы реляционной алгебры:</span><br />
<span style="font-family: Verdana, sans-serif;"> 3. Integrity rules: entity integrity, foreign key integrity.</span><br />
<span style="font-family: Verdana, sans-serif;"><br /></span>
<span style="font-family: Verdana, sans-serif;"> <span style="font-size: large;"><b>Реляционная алгебра</b></span></span><br />
<br />
<span style="font-family: Verdana, sans-serif;"> ррр </span><br />
<div>
<span style="font-family: Verdana, sans-serif;"><br /></span></div>
<br />
<span style="font-family: Verdana, sans-serif;"> <b><span style="font-size: large;">Реляционное исчисление</span></b></span><br />
<br />
<span style="font-family: Verdana, sans-serif;"> ррр </span><br />
<div>
<span style="font-family: Verdana, sans-serif;"><br /></span></div>
<div>
<span style="font-family: Verdana, sans-serif;"> </span><b style="font-family: Verdana, sans-serif;"><span style="font-size: large;">Нормальные формы</span></b></div>
<div>
<span style="font-family: Verdana, sans-serif;"><br /></span></div>
<br />
<span style="font-family: Verdana, sans-serif;"><br /></span>
<span style="font-family: Verdana, sans-serif;"> Реляционная модель данных придумана Эдгаром Коддом в 1970 году. Первоисточники:</span><br />
<span style="font-family: Verdana, sans-serif;">1. <a href="http://www.unilivros.com.br/pdf/_codd_acm_1970.pdf">"A relational model of data for large shared data banks</a></span><span style="font-family: Verdana, sans-serif;"><a href="http://www.unilivros.com.br/pdf/_codd_acm_1970.pdf">"</a>, Codd, 1970</span><br />
<span style="font-family: Verdana, sans-serif;">2. <a href="http://lambda.csail.mit.edu/~chet/papers/others/c/codd/codd-1979.pdf">"</a></span><span style="font-family: Verdana, sans-serif;"><a href="http://lambda.csail.mit.edu/~chet/papers/others/c/codd/codd-1979.pdf">Extending the database relational model to capture more meaning</a></span><span style="font-family: Verdana, sans-serif;"><a href="http://lambda.csail.mit.edu/~chet/papers/others/c/codd/codd-1979.pdf">"</a>, Codd, 1979</span><br />
<span style="font-family: Verdana, sans-serif;">3. </span><span style="font-family: Verdana, sans-serif;"><a href="http://delivery.acm.org/10.1145/360000/358400/a1981-codd.pdf">"Relational database: a practical foundation for productivity"</a>, Codd, 1981</span><br />
<span style="font-family: Verdana, sans-serif;"><br /></span>
<span style="font-family: Verdana, sans-serif;"> Надо понимать, что это</span><br />
<span style="font-family: Verdana, sans-serif;">1. Первоисточники, т.е. не уверен, что самая актуальная на сегодня точка зрения, возможно подверглась пересмотру</span><br />
<span style="font-family: Verdana, sans-serif;">2. Это реляционная модель (модель представления данных), не SQL и не реализация модели в виде базы данных.</span><br />
<span style="font-family: Verdana, sans-serif;"><br /></span><span style="font-family: Verdana, sans-serif;"> <a href="http://idke.ruc.edu.cn/seminars/phd/2007/11.07/What%20Goes%20Around%20Comes%20Around.pdf">"What Goes Around Comes Around"</a>, </span><span style="font-family: Verdana, sans-serif;">Michael Stonebraker, </span><span style="font-family: Verdana, sans-serif;">Joey Hellerstein.</span><br />
<span style="font-family: Verdana, sans-serif;"> Это анализ 9 различных групп моделей данных за последние 35 лет. Реляционная лишь одна из них и не последняя.</span><br />
<span style="font-family: Verdana, sans-serif;"><br /></span>
<span style="font-family: Verdana, sans-serif;">----</span><span style="font-family: Verdana, sans-serif;">----</span><span style="font-family: Verdana, sans-serif;">----</span><span style="font-family: Verdana, sans-serif;">----</span><span style="font-family: Verdana, sans-serif;">----</span><span style="font-family: Verdana, sans-serif;">----</span><br />
<span style="font-family: Verdana, sans-serif;"><br /></span>
<span style="font-family: Verdana, sans-serif;"> <b><span style="font-size: large;">Relational Model VS Object-Oriented Model</span></b></span><br />
<br />
<span style="font-family: Verdana, sans-serif;"> <b><a href="http://en.wikipedia.org/wiki/Object-relational_impedance_mismatch">Object-relational impedance mismatch</a></b></span><br />
<span style="font-family: Verdana, sans-serif;"><b> </b></span><br />
<span style="font-family: Verdana, sans-serif;"> <b>The Third Manifesto</b></span><br />
<span style="font-family: Verdana, sans-serif;"><b><br /></b></span>
<span style="font-family: Verdana, sans-serif;"> </span><span style="font-family: Verdana, sans-serif;">TransactionScript / </span><span style="font-family: Verdana, sans-serif;">ActiveRecord / DAO / ?MVVC? / ORM</span><br />
<span style="font-family: Verdana, sans-serif;"><br /></span>
<span style="font-family: Verdana, sans-serif;"> </span><span style="font-family: Verdana, sans-serif;"><b>Relational algebra</b> is an offshoot of first-order logic and of algebra of sets concerned with operations over finitary relations, usually made more convenient to work with by identifying the components of a tuple by a name (called attribute) rather than by a numeric column index, which is what is called a relation in database terminology.</span><br />
<span style="font-family: Verdana, sans-serif;"> The main application of relational algebra is providing a theoretical foundation for relational databases, particularly query languages for such databases, chiefly among which is SQL.</span><br />
<span style="font-family: Verdana, sans-serif;"><br /></span>
<span style="font-family: Verdana, sans-serif;"> <b>F</b></span><span style="font-family: Verdana, sans-serif;"><b>irst-order logic - </b><a href="http://en.wikipedia.org/wiki/Algebra_of_sets">wiki</a></span><br />
<span style="font-family: Verdana, sans-serif;"><b><br /></b></span>
<span style="font-family: Verdana, sans-serif;"> </span><span style="font-family: Verdana, sans-serif;"><b>Algebra of sets - </b><a href="http://en.wikipedia.org/wiki/First-order_logic">wiki</a></span><br />
<span style="font-family: Verdana, sans-serif;"><br /></span>
<br />
<span style="font-family: Verdana, sans-serif;"> <b>Relational calculus</b> - an</span><span style="font-family: Verdana, sans-serif;"> operational methodolgy, founded on <b>predicate calculus</b>, dealing with <b>descripitive expressions</b> that are equivalent to the operations of relational algebra. </span><br />
<span style="font-family: Verdana, sans-serif;"> Two forms of the relational calculus exist: the <b>tuple calculus</b> and the <b>domain calculus</b>. </span><br />
<span style="font-family: Verdana, sans-serif;"><br /></span>
<span style="font-family: Verdana, sans-serif;"><br /></span><span style="font-family: Verdana, sans-serif;"> <a href="http://www.dba-oracle.com/t_sql99_with_clause.htm">SQL: WITH</a></span><br />
<span style="font-family: Verdana, sans-serif;"> <a href="http://www.dcs.warwick.ac.uk/~hugh/TTM/TTM-TheAskewWall-printable.pdf">The Askew Wall - sourse of sql</a></span><br />
<span style="font-family: Verdana, sans-serif;"><br /></span>
<span style="font-family: Verdana, sans-serif;"><br /></span>
<span style="font-family: Verdana, sans-serif;"><br /></span>
</div>
Golovach Ivanhttp://www.blogger.com/profile/17934541017925930523noreply@blogger.comtag:blogger.com,1999:blog-2350100894732972221.post-33137475794409283822012-08-01T15:14:00.001-07:002012-10-20T08:28:39.815-07:00memory: permgen<div dir="ltr" style="text-align: left;" trbidi="on">
<span style="color: #333333; font-family: Verdana, sans-serif; font-size: 15px; line-height: 20px;"> Утилита для загрузки байт-кода:</span><br />
<br />
<pre style="background-color: #f8f8f8; border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 1px solid rgb(204, 204, 204); margin-bottom: 15px; margin-top: 15px; overflow: auto; padding: 6px 10px;"><span style="color: #333333; font-family: Verdana, sans-serif;"><span style="font-size: 15px; line-height: 19px;">import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
public class ClassLoaderUtil {
public static byte[] loadByteCode(Class loader, String className)
throws IOException {
String fileName = "/"
+ className.replaceAll("\\.", "/") + ".class";
InputStream is = loader.getResourceAsStream(fileName);
ByteArrayOutputStream buffer
= new ByteArrayOutputStream(4096);
byte[] buff = new byte[1024];
int i;
while ((i = is.read(buff)) >= 0) {
buffer.write(buff, 0, i);
}
return buffer.toByteArray();
}
}</span></span>
</pre>
<div>
<br /></div>
<div>
<pre style="background-color: #aaffaa; border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 1px solid rgb(136, 136, 136); color: #333333; font-size: 14.545454025268555px; line-height: 20px; margin-bottom: 15px; margin-top: 15px; overflow: auto; padding: 6px 10px;"><span style="color: black; line-height: normal; white-space: normal;"><span style="font-family: Verdana, sans-serif;">АНТИПАТТЕРН: Паблик Морозов</span></span></pre>
</div>
<div style="background-color: white; color: #333333; font-family: Verdana, sans-serif; line-height: 20px;">
<span style="font-size: 15px;"> Наш класс-лоадер:</span></div>
<div style="background-color: white;">
<pre style="background-color: #f8f8f8; border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 1px solid rgb(204, 204, 204); margin-bottom: 15px; margin-top: 15px; overflow: auto; padding: 6px 10px;"><span style="color: #333333; font-family: Verdana, sans-serif;"><span style="font-size: 15px; line-height: 19px;">public class MyClassLoader extends ClassLoader {
public MyClassLoader() {
super();
}
public Class<?> <b>_defineClass</b>(String name,
byte[] byteCodes) {
return <b>super.defineClass</b>(
name, byteCodes, 0, byteCodes.length);
}
}</span></span></pre>
<div style="color: #333333; font-family: Verdana, sans-serif; font-size: large; font-weight: bold; line-height: 20px;">
<span style="font-size: 15px; font-weight: normal;"><br /></span></div>
<div>
<span style="color: #333333; font-family: Verdana, sans-serif;"><span style="font-size: 15px; line-height: 20px;"> Стараемся исчерпать память в PermGen:</span></span><br style="font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 14.545454025268555px; font-weight: normal; line-height: 18.18181800842285px;" /><pre style="background-color: #f8f8f8; border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 1px solid rgb(204, 204, 204); margin-bottom: 15px; margin-top: 15px; overflow: auto; padding: 6px 10px;"><span style="color: #333333; font-family: Verdana, sans-serif;"><span style="font-size: 15px; line-height: 19px;">public class PermGenQuiz0 {
public static void main(String[] args) throws Exception {
Class<?> clazz = PermGenQuiz0.class;
byte[] buffer = ClassLoaderUtil.<b>loadByteCode</b>(clazz, clazz.getName()) ;
<b>MyClassLoader loader = new MyClassLoader();</b>
for (long index = 0; index < Long.MAX_VALUE; index++) {
String newClassName =
"_" + String.format("%0"
+ (clazz.getSimpleName().length() - 1) + "d", index);
byte[] newClassData = new String(buffer, "latin1")
.replaceAll(clazz.getSimpleName(), newClassName)
.getBytes("latin1");
// <b>loader = new MyClassLoader();</b>
<b>loader._defineClass</b>(
clazz.getName()
.replace(clazz.getSimpleName(), newClassName),
newClassData);
}
}
}</span></span></pre>
<div>
<span style="color: #333333; font-family: Verdana, sans-serif; font-size: 15px; font-weight: normal; line-height: 20px;">>> </span><span style="color: #333333; font-family: Verdana, sans-serif;"><span style="font-size: 15px; line-height: 20px;">java.lang.OutOfMemoryError: PermGen space</span></span></div>
</div>
<div>
<span style="color: #333333; font-family: Verdana, sans-serif;"><span style="font-size: 15px; line-height: 20px;">но если раскомментировать строку, то память в PermGen - не исчерпывается и цикл работает столетиями.</span></span></div>
</div>
</div>
Golovach Ivanhttp://www.blogger.com/profile/17934541017925930523noreply@blogger.comtag:blogger.com,1999:blog-2350100894732972221.post-77261195814836328802012-08-01T15:14:00.000-07:002012-10-20T08:34:22.568-07:00memory: heap<div dir="ltr" style="text-align: left;" trbidi="on">
<span style="font-family: Verdana, sans-serif;"><span style="color: #333333;"><span style="line-height: 20px;"> </span></span><span style="background-color: white; color: #333333; line-height: 18.16666603088379px;">Выделяем 16G одной строчкой:</span></span><br />
<pre style="background-color: #f8f8f8; border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 1px solid rgb(204, 204, 204); margin-bottom: 15px; margin-top: 15px; overflow: auto; padding: 6px 10px;"><span style="color: #333333; font-family: Verdana, sans-serif;"><span style="line-height: 18.16666603088379px;">class Test {
public static void main(String[] args) {
long[] s = new long[Integer.MAX_VALUE];
}
}</span></span></pre>
<div style="background-color: white; color: #333333; font-weight: bold; line-height: 20px;">
<span style="font-family: Verdana, sans-serif;"><br /></span></div>
<div style="background-color: white;">
<pre style="background-color: #f8f8f8; border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 1px solid rgb(204, 204, 204); margin-bottom: 15px; margin-top: 15px; overflow: auto; padding: 6px 10px;"><span style="color: #333333; font-family: Verdana, sans-serif;"><span style="line-height: 18.16666603088379px;">class Test {
public static void main(String[] args) {
while (true) {
new Object();
}
}
}</span></span></pre>
<div style="color: #333333; font-weight: bold; line-height: 20px;">
<span style="font-family: Verdana, sans-serif;"><br /></span></div>
<div>
<pre style="background-color: #f8f8f8; border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 1px solid rgb(204, 204, 204); margin-bottom: 15px; margin-top: 15px; overflow: auto; padding: 6px 10px;"><span style="color: #333333; font-family: Verdana, sans-serif;"><span style="line-height: 18.16666603088379px;">class Test {
public static void main(String[] args) {
Object obj;
while (true) {
obj = new Object();
}
}
}</span></span></pre>
<div style="color: #333333; font-weight: bold; line-height: 20px;">
<span style="font-family: Verdana, sans-serif;"><br /></span></div>
</div>
<div>
<pre style="background-color: #f8f8f8; border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 1px solid rgb(204, 204, 204); margin-bottom: 15px; margin-top: 15px; overflow: auto; padding: 6px 10px;"><span style="color: #333333; font-family: Verdana, sans-serif;"><span style="line-height: 18.16666603088379px;">class Test {
public static void main(String[] args) {
List<Object> list = new ArrayList<>();
while (true) {
list.add(new Object());
}
}
}</span></span></pre>
<div style="color: #333333; font-weight: bold; line-height: 20px;">
<span style="font-family: Verdana, sans-serif;"><br /></span></div>
</div>
<div>
<pre style="background-color: #f8f8f8; border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 1px solid rgb(204, 204, 204); margin-bottom: 15px; margin-top: 15px; overflow: auto; padding: 6px 10px;"><span style="color: #333333; font-family: Verdana, sans-serif;"><span style="line-height: 18.16666603088379px;">class Test {
public static void main(String[] args) {
Object[] ref = new Object[1];
while (true) {
Object[] a = new Object[1];
Object[] b = new Object[1];
a[0] = b;
b[0] = a;
ref[0] = a;
}
}
}</span></span></pre>
<div style="color: #333333; font-weight: bold; line-height: 20px;">
<span style="font-family: Verdana, sans-serif;"><br /></span></div>
</div>
<div>
<pre style="background-color: #f8f8f8; border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 1px solid rgb(204, 204, 204); margin-bottom: 15px; margin-top: 15px; overflow: auto; padding: 6px 10px;"><span style="color: #333333; font-family: Verdana, sans-serif;"><span style="line-height: 18.16666603088379px;">class Test {
public static void main(String[] args) {
Object[] ref = new Object[1];
while (true) {
ref = new Object[]{ref};
}
}
}</span></span></pre>
<div style="color: #333333; font-weight: bold; line-height: 20px;">
<span style="font-family: Verdana, sans-serif;"><br /></span></div>
</div>
<div>
<pre style="background-color: #f8f8f8; border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 1px solid rgb(204, 204, 204); margin-bottom: 15px; margin-top: 15px; overflow: auto; padding: 6px 10px;"><span style="color: #333333; font-family: Verdana, sans-serif;"><span style="line-height: 18.16666603088379px;">class Test {
public static void main(String[] args) {
Object[] ref = new Object[1];
while (true) {
ref[0] = new Object[]{ref};
ref = (Object[]) ref[0];
}
}
}</span></span></pre>
<div style="color: #333333; font-family: Verdana, sans-serif; font-size: large; font-weight: bold; line-height: 20px;">
<br /></div>
</div>
</div>
</div>
Golovach Ivanhttp://www.blogger.com/profile/17934541017925930523noreply@blogger.comtag:blogger.com,1999:blog-2350100894732972221.post-66056203349167628792012-08-01T15:13:00.000-07:002012-10-20T07:54:30.010-07:00memory: thread stack<div dir="ltr" style="text-align: left;" trbidi="on">
<div style="text-align: left;">
<span style="font-family: Verdana, sans-serif;">При старте каждого потока (Thread) виртуальная машина выделяет ему область памяти называемую "стек". Отсюда происходят:</span></div>
<div style="text-align: left;">
<span style="font-family: Verdana, sans-serif;">- stack trace</span></div>
<div style="text-align: left;">
<span style="font-family: Verdana, sans-serif;">- StackOverflowException</span></div>
<div style="text-align: left;">
<span style="font-family: Verdana, sans-serif;">- "срыв стека" (ошибка, используемая хакерами для исполнения своего кода на чужой машине)</span></div>
<div style="text-align: left;">
<span style="font-family: Verdana, sans-serif;"><br /></span></div>
<div style="text-align: left;">
<span style="font-family: Verdana, sans-serif;"><span style="color: #333333;"><span style="line-height: 20px;">"Измеряем" размер стека, выделенного на один поток по умолччанию</span></span></span><br />
<pre style="background-color: #f8f8f8; border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 1px solid rgb(204, 204, 204); margin-bottom: 15px; margin-top: 15px; overflow: auto; padding: 6px 10px;"><span style="color: #333333; font-family: Verdana, sans-serif;"><span style="line-height: 19px;">public class StackMeter {
static int <b>counter0 </b>= 0;
static int <b>counter10 </b>= 0;
public static void main(String[] args) {
try {
test0();
} catch (StackOverflowError ignore) {}
System.out.println(<b>counter0</b>);
try {
test10();
} catch (StackOverflowError ignore) {}
System.out.println(<b>counter10</b>);
}
private static void <b>test0</b>() {
<b>counter0</b>++;
<b>test0</b>();
}
private static void <b>test10</b>() {
long L0 = 0; long L1 = 0; long L2 = 0;
long L3 = 0; long L4 = 0; long L5 = 0;
long L6 = 0; long L7 = 0; long L8 = 0;
<b>counter10</b>++;
<b>test10</b>();
}
}</span></span></pre>
<div style="background-color: white;">
<div>
<span style="color: #333333; font-family: Verdana, sans-serif;"><span style="line-height: 20px;">>> 12532</span></span></div>
<div>
<span style="color: #333333; font-family: Verdana, sans-serif;"><span style="line-height: 20px;">>> 4494</span></span></div>
</div>
</div>
<br /></div>
Golovach Ivanhttp://www.blogger.com/profile/17934541017925930523noreply@blogger.comtag:blogger.com,1999:blog-2350100894732972221.post-52070422245486925852012-08-01T14:57:00.000-07:002012-12-24T15:30:22.160-08:00oop: inheritance+delegation<div dir="ltr" style="text-align: left;" trbidi="on">
<span style="font-family: Verdana, sans-serif;"> В объектно-ориентированных языках есть два основных метода образовывать композиции из классов (увязывать их вместе) - наследование и делегирование.</span><br />
<span style="font-family: Verdana, sans-serif;"><br /></span>
<span style="font-family: Verdana, sans-serif;"> <b><span style="font-size: large;">Наследование</span></b></span><br />
<span style="font-family: Verdana, sans-serif;"> Наследование позволяет достигнуть двух целей:</span><br />
<span style="font-family: Verdana, sans-serif;"> </span><span style="font-family: Verdana, sans-serif;"> </span><span style="font-family: Verdana, sans-serif;">- получение интерфейса (от класса/интерфейса)</span><br />
<span style="font-family: Verdana, sans-serif;"> </span><span style="font-family: Verdana, sans-serif;"> </span><span style="font-family: Verdana, sans-serif;">- получение реализации (от класса/(с Java 8 - интерфейса))</span><br />
<span style="font-family: Verdana, sans-serif;"><br /></span>
<span style="font-family: Verdana, sans-serif;"> </span><span style="font-family: Verdana, sans-serif;"> </span><span style="font-family: Verdana, sans-serif;">public class ArrayList implements List extends AbstractList</span><br />
<span style="font-family: Verdana, sans-serif;">Хотим "быть листом"</span><br />
<span style="font-family: Verdana, sans-serif;"> </span><span style="font-family: Verdana, sans-serif;"> </span><span style="font-family: Verdana, sans-serif;">List<String> words = new ArrayList<>(16);</span><br />
<span style="font-family: Verdana, sans-serif;">И при этом реализацию метода size() получить от AbstractList.</span><br />
<span style="font-family: Verdana, sans-serif;"><br /></span>
<span style="font-family: Verdana, sans-serif;"> class Oval implements Figure {...}</span><br />
<span style="font-family: Verdana, sans-serif;">Хотим иметь List<Figure> с Oval, Rect, ... </span><br />
<span style="font-family: Verdana, sans-serif;">Хотим иметь методы работающие с Figure и коллекциями фигур </span><span style="font-family: Verdana, sans-serif;">List<Figure>, хотим насладится полиморфизмом на основе наследования</span><br />
<span style="font-family: Verdana, sans-serif;"><br /></span>
<span style="font-family: Verdana, sans-serif;"> public class BufferedInputStream extends InputStream </span><br />
<span style="font-family: Verdana, sans-serif;">Хотим заменять InputStream</span><br />
<span style="font-family: Verdana, sans-serif;"><br /></span>
<span style="font-family: Verdana, sans-serif;">Правильно наследуются в следующих случаях:</span><br />
<span style="font-family: Verdana, sans-serif;">- реализация размазана по иерархии - AbstractCollection, </span><span style="font-family: Verdana, sans-serif;">AbstractList, ...</span><br />
<span style="font-family: Verdana, sans-serif;">- реализация не доделана и ждет нас - TemplateMethod (InputStream)</span><br />
<span style="font-family: Verdana, sans-serif;">- реализация доделана, но открыта к расширению - LinkedHashMap</span><br />
<span style="font-family: Verdana, sans-serif;">- Hibernate наследует bean</span><br />
<span style="font-family: Verdana, sans-serif;">- Spring влезает к нам под интерфейс для tx, security, logging</span><br />
<span style="font-family: Verdana, sans-serif;">- маркер интерфейс - RandomAccess, Cloneable, Serializable</span><br />
<span style="font-family: Verdana, sans-serif;"><br /></span>
<span style="font-family: Verdana, sans-serif;">Неправильно наследуются в следующих случаях:</span><br />
<span style="font-family: Verdana, sans-serif;">- ситуативно (extends ArrayList для перекрытия add, но забыли про addAll)</span><br />
<span style="font-family: Verdana, sans-serif;">- бытовая интуиция (Square ex Rect, </span><span style="font-family: Verdana, sans-serif;">Rect ex </span><span style="font-family: Verdana, sans-serif;">Square</span><span style="font-family: Verdana, sans-serif;">) + (Rect - Parallelogram)</span><br />
<span style="font-family: Verdana, sans-serif;">- глупое обобщение - Idible {long getId()} - все объекты в системе с Id</span><br />
<span style="font-family: Verdana, sans-serif;"><br /></span>
<br />
<span style="font-family: Verdana, sans-serif;"> <b><span style="font-size: large;">Делегирование</span></b></span><br />
<span style="font-family: Verdana, sans-serif;"> Делегирование решает проблемы:</span><br />
<span style="font-family: Verdana, sans-serif;"> - большое количество комбинаций качеств - комбинация Декораторов</span><br />
<span style="font-family: Verdana, sans-serif;"> - динамическое изменение поведения - State / Strategy</span><br />
<span style="font-family: Verdana, sans-serif;"><br /></span>
<span style="font-family: Verdana, sans-serif;"> Существуют и другие способы образовывать композиции в ООП:</span><br />
<span style="font-family: Verdana, sans-serif;"> - ??? слаботипизированная композиция по аннотациям (JUnit, Servlet API 3, ?)</span><br />
<span style="font-family: Verdana, sans-serif;"> - ??? Mockito - на основе правил</span><br />
<span style="font-family: Verdana, sans-serif;"><br /></span>
<br />
<span style="font-family: Verdana, sans-serif;"> Существуют и другие способы образовывать композиции в не-ООП:</span><br />
<span style="font-family: Verdana, sans-serif;"> - функциональные ???</span><br />
<span style="font-family: Verdana, sans-serif;"><br /></span>
<span style="font-family: Verdana, sans-serif;"><br /></span>
<span style="font-family: Verdana, sans-serif;"><br /></span>
<span style="font-family: Verdana, sans-serif;"><br /></span>
<span style="font-family: Verdana, sans-serif;"><br /></span>
<br />
</div>
Golovach Ivanhttp://www.blogger.com/profile/17934541017925930523noreply@blogger.comtag:blogger.com,1999:blog-2350100894732972221.post-33023673669231160852012-08-01T14:40:00.000-07:002012-09-09T14:49:01.509-07:00questions: gc<div dir="ltr" style="text-align: left;" trbidi="on">
<br />
<span style="font-family: Verdana, sans-serif;">----------------------------------------------------------------</span><br />
<span style="font-family: Verdana, sans-serif;"><b>-- Код:</b></span><br />
<span style="font-family: Verdana, sans-serif;">public class GCTest {</span><br />
<span style="font-family: Verdana, sans-serif;"> public static void main(String[] args) {</span><br />
<span style="font-family: Verdana, sans-serif;"> while (true) {</span><br />
<span style="font-family: Verdana, sans-serif;"> new Object();</span><br />
<span style="font-family: Verdana, sans-serif;"> }</span><br />
<span style="font-family: Verdana, sans-serif;"> }</span><br />
<span style="font-family: Verdana, sans-serif;">}</span><br />
<span style="font-family: Verdana, sans-serif;"><b>-- Вопросы/задания:</b></span><br />
<span style="font-family: Verdana, sans-serif;">1) при запуске такой программы закончится ли память (OutOfMemoryError) или она будет работать вечно?</span><br />
<br />
<span style="font-family: Verdana, sans-serif;">----------------------------------------------------------------</span><br />
<span style="font-family: Verdana, sans-serif;"><b>-- Код:</b></span><br />
<span style="font-family: Verdana, sans-serif;">public class GCTest {</span><br />
<span style="font-family: Verdana, sans-serif;"> public static void main(String[] args) {</span><br />
<span style="font-family: Verdana, sans-serif;"> while (true) {</span><br />
<span style="font-family: Verdana, sans-serif;"> Object obj = new Object();</span><br />
<span style="font-family: Verdana, sans-serif;"> }</span><br />
<span style="font-family: Verdana, sans-serif;"> }</span><br />
<span style="font-family: Verdana, sans-serif;">}</span><br />
<span style="font-family: Verdana, sans-serif;"><b>-- Вопросы/задания:</b></span><br />
<span style="font-family: Verdana, sans-serif;">1) при запуске такой программы закончится ли память (OutOfMemoryError) или она будет работать вечно?</span><br />
<br />
<span style="font-family: Verdana, sans-serif;">----------------------------------------------------------------</span><br />
<span style="font-family: Verdana, sans-serif;"><b>-- Код:</b></span><br />
<span style="font-family: Verdana, sans-serif;">public class GCTest {</span><br />
<span style="font-family: Verdana, sans-serif;"> public static void main(String[] args) {</span><br />
<span style="font-family: Verdana, sans-serif;"> Object obj = null;</span><br />
<span style="font-family: Verdana, sans-serif;"> while (true) {</span><br />
<span style="font-family: Verdana, sans-serif;"> obj = new Object();</span><br />
<span style="font-family: Verdana, sans-serif;"> }</span><br />
<span style="font-family: Verdana, sans-serif;"> }</span><br />
<span style="font-family: Verdana, sans-serif;">}</span><br />
<span style="font-family: Verdana, sans-serif;"><b>-- Вопросы/задания:</b></span><br />
<span style="font-family: Verdana, sans-serif;">1) при запуске такой программы закончится ли память (OutOfMemoryError) или она будет работать вечно?</span><br />
<br />
<span style="font-family: Verdana, sans-serif;">----------------------------------------------------------------</span><br />
<span style="font-family: Verdana, sans-serif;"><b>-- Код:</b></span><br />
<span style="font-family: Verdana, sans-serif;">public class GCTest {</span><br />
<span style="font-family: Verdana, sans-serif;"> public static void main(String[] args) {</span><br />
<span style="font-family: Verdana, sans-serif;"> while (true) {</span><br />
<br />
<span style="font-family: Verdana, sans-serif;"> Object[] a = new Object[1];</span><br />
<span style="font-family: Verdana, sans-serif;"> Object[] b = new Object[1];</span><br />
<span style="font-family: Verdana, sans-serif;"> Object[] c = new Object[1];</span><br />
<span style="font-family: Verdana, sans-serif;"> a[0] = b; </span><span style="font-family: Verdana, sans-serif;">b[0] = c; </span><span style="font-family: Verdana, sans-serif;">c[0] = a;</span><br />
<br />
<span style="font-family: Verdana, sans-serif;"> }</span><br />
<span style="font-family: Verdana, sans-serif;"> }</span><br />
<span style="font-family: Verdana, sans-serif;">}</span><br />
<span style="font-family: Verdana, sans-serif;"><b>-- Вопросы/задания:</b></span><br />
<span style="font-family: Verdana, sans-serif;">1) при запуске такой программы закончится ли память (OutOfMemoryError) или она будет работать вечно?</span><br />
<br />
<span style="font-family: Verdana, sans-serif;">----------------------------------------------------------------</span><br />
<span style="font-family: Verdana, sans-serif;"><b>-- Код:</b></span><br />
<span style="font-family: Verdana, sans-serif;">public class GCTest {</span><br />
<span style="font-family: Verdana, sans-serif;"> public static void main(String[] args) {</span><br />
<br />
<span style="font-family: Verdana, sans-serif;"> Object[][] arr = new Object[3][];</span><br />
<span style="font-family: Verdana, sans-serif;"> while (true) {</span><br />
<span style="font-family: Verdana, sans-serif;"> Object[] a = new Object[0];</span><br />
<span style="font-family: Verdana, sans-serif;"> Object[] b = new Object[0];</span><br />
<span style="font-family: Verdana, sans-serif;"> Object[] c = new Object[0];</span><br />
<span style="font-family: Verdana, sans-serif;"> a[0] = b; b[0] = c; c[0] = a;</span><br />
<span style="font-family: Verdana, sans-serif;"> arr[0] = a; arr[1] = b; arr[2] = c;</span><br />
<br />
<br />
<span style="font-family: Verdana, sans-serif;"> }</span><br />
<span style="font-family: Verdana, sans-serif;"> }</span><br />
<span style="font-family: Verdana, sans-serif;">}</span><br />
<span style="font-family: Verdana, sans-serif;"><b>-- Вопросы/задания:</b></span><br />
<span style="font-family: Verdana, sans-serif;">1) при запуске такой программы закончится ли память (OutOfMemoryError) или она будет работать вечно?</span><br />
<br />
<span style="font-family: Verdana, sans-serif;">----------------------------------------------------------------</span><br />
<span style="font-family: Verdana, sans-serif;"><b>-- Код:</b></span><br />
<span style="font-family: Verdana, sans-serif;">public class GCTest {</span><br />
<span style="font-family: Verdana, sans-serif;"> public static void main(String[] args) {</span><br />
<br />
<br />
<span style="font-family: Verdana, sans-serif;"> Object[] arr = new Object[3];</span><br />
<span style="font-family: Verdana, sans-serif;"> while (true) {</span><br />
<span style="font-family: Verdana, sans-serif;"> Object[] a = new Object[0];</span><br />
<span style="font-family: Verdana, sans-serif;"> Object[] b = new Object[0];</span><br />
<span style="font-family: Verdana, sans-serif;"> Object[] c = new Object[0];</span><br />
<span style="font-family: Verdana, sans-serif;"> a[0] = b; b[0] = c; c[0] = a;</span><br />
<span style="font-family: Verdana, sans-serif;"> arr = new Object[]{a, b, c};</span><br />
<span style="font-family: Verdana, sans-serif;"> }</span><br />
<br />
<span style="font-family: Verdana, sans-serif;"> }</span><br />
<span style="font-family: Verdana, sans-serif;">}</span><br />
<span style="font-family: Verdana, sans-serif;"><b>-- Вопросы/задания:</b></span><br />
<span style="font-family: Verdana, sans-serif;">1) при запуске такой программы закончится ли память (OutOfMemoryError) или она будет работать вечно?</span><br />
<br />
<br />
<br />
<br />
<br />
</div>
Golovach Ivanhttp://www.blogger.com/profile/17934541017925930523noreply@blogger.comtag:blogger.com,1999:blog-2350100894732972221.post-380736417129188342012-08-01T14:19:00.000-07:002013-03-09T11:50:13.239-08:00module: market<div dir="ltr" style="text-align: left;" trbidi="on">
--------------------------------------------------------------------------<br />
<b style="font-family: Verdana, sans-serif;"><span style="font-size: large;">Зарплаты программистов, востребованность</span></b><b style="font-family: Verdana, sans-serif;"><span style="font-size: large;"> </span></b><br />
<span style="font-family: Verdana, sans-serif;"> <span style="color: #0000ee;"><u><a href="http://dou.ua/lenta/articles/salary-report-dec-2012/">Зарплаты разработчиков декабрь 2012</a></u></span></span><br />
<span style="font-family: Verdana, sans-serif;"><span style="color: #0000ee;"> </span><a href="http://dou.ua/lenta/news/headhunter-it-survey-results/">HeadHunter провел опрос востребованности ИТ-специалистов</a></span><br />
<span style="font-family: Verdana, sans-serif;"> <a href="http://dou.ua/lenta/articles/hot-jobs/">jobs.dou.ua: кто ищет работу</a></span><br />
<span style="font-family: Verdana, sans-serif;"> <a href="http://jobs.dou.ua/salaries/">Калькулятор зарплат</a></span><br />
<br />
<b style="font-family: Verdana, sans-serif;"><span style="font-size: large;">Всякое</span></b><br />
<span style="font-family: Verdana, sans-serif;"> <a href="http://dou.ua/forums/topic/5618/">Обсуждение внешнего рейта компаний.</a></span><br />
<div>
<br /></div>
--------------------------------------------------------------------------<br />
<b style="font-family: Verdana, sans-serif;"><span style="font-size: large;">IT компании города/Украины</span></b><br />
<span style="font-family: Verdana, sans-serif;"> </span><span style="font-family: Verdana, sans-serif;"><a href="http://jobs.dou.ua/top25/">ТОП-25 крупнейших ИТ компаний Украины</a>.</span><br />
<br />
<br />
--------------------------------------------------------------------------<br />
<b style="font-family: Verdana, sans-serif;"><span style="font-size: large;">"Большая пятерка"</span></b><br />
<span style="font-family: Verdana, sans-serif;"> В Украине есть "большая пятерка" аутсорсеров (EPAM, GlobalLogic, SoftServe, Luxoft, Ciklum). Каждая из компаний "большой пятерки" имеет 1700-2300 сотрудников в Украине.</span><br />
<span style="font-family: Verdana, sans-serif;"> Треть украинских программистов (всего 30.000) работает в "большой пятерка".</span><br />
<br />
<span style="font-family: Verdana, sans-serif;"> </span><span style="font-family: Verdana, sans-serif;"> </span><b style="font-family: Verdana, sans-serif;"><span style="font-size: large;">"Большая пятерка": </span></b><b style="font-family: Verdana, sans-serif; font-size: x-large;">EPAM</b><br />
<span style="font-family: Verdana, sans-serif;"> Новгородская 11а. </span><span style="font-family: Verdana, sans-serif;">В</span><span style="font-family: Verdana, sans-serif;"> Харькове - 3</span><span style="font-family: Verdana, sans-serif;">00 человек. В Украине - 2600. В мире - 7000 - 8000.</span><br />
<span style="font-family: Verdana, sans-serif; font-size: large;"><b><br /></b></span>
<span style="font-family: Verdana, sans-serif;"> </span><span style="font-family: Verdana, sans-serif;"> </span><b style="font-family: Verdana, sans-serif;"><span style="font-size: large;">"Большая пятерка": </span></b><span style="font-family: Verdana, sans-serif; font-size: large;"><b>GlobalLogic</b></span><br />
<span style="font-family: Verdana, sans-serif;"> Новгородская ???. В</span><span style="font-family: Verdana, sans-serif;"> Харькове - </span><span style="font-family: Verdana, sans-serif;">600 человек. В Украине - 2200. В мире - 5000-6000.</span><br />
<span style="font-family: Verdana, sans-serif;"> <a href="http://dou.ua/lenta/interviews/vladimir-sharov-globallogic/">Владимир Шаров, GlobalLogic Украина</a></span><br />
<span style="font-family: Verdana, sans-serif; font-size: large;"><b><br /></b></span>
<span style="font-family: Verdana, sans-serif;"> </span><span style="font-family: Verdana, sans-serif;"> </span><b style="font-family: Verdana, sans-serif;"><span style="font-size: large;">"Большая пятерка": </span></b><span style="font-family: Verdana, sans-serif; font-size: large;"><b>Ciklum</b></span><br />
<span style="font-family: Verdana, sans-serif;"> Метро Ботанический Сад. </span><span style="font-family: Verdana, sans-serif;">В</span><span style="font-family: Verdana, sans-serif;"> Харькове - 15</span><span style="font-family: Verdana, sans-serif;">0-250 человек. В Украине - ???. В мире - ???.</span><br />
<span style="font-family: Verdana, sans-serif; font-size: large;"><b><br /></b></span>
<span style="font-family: Verdana, sans-serif;"> </span><span style="font-family: Verdana, sans-serif;"> </span><b style="font-family: Verdana, sans-serif;"><span style="font-size: large;">"Большая пятерка": </span></b><span style="font-family: Verdana, sans-serif; font-size: large;"><b>Luxoft</b></span><br />
<span style="font-family: Verdana, sans-serif;"> В Харькове - нет филиала. </span><span style="font-family: Verdana, sans-serif;">В Украине - 2500. В мире - ???.</span><br />
<span style="font-family: Verdana, sans-serif; font-size: large;"><b><br /></b></span>
<br />
<span style="font-family: Verdana, sans-serif;"> </span><span style="font-family: Verdana, sans-serif;"> </span><b style="font-family: Verdana, sans-serif;"><span style="font-size: large;">"Большая пятерка": </span></b><span style="font-family: Verdana, sans-serif;"><b><span style="font-size: large;">SoftServe</span></b></span><br />
<span style="font-family: Verdana, sans-serif;"> В Харькове - нет филиала.</span><br />
<span style="font-family: Verdana, sans-serif;"> <a href="http://forbes.ua/magazine/forbes/1339188-softserve-kak-rabotaet-krupnejshij-ukrainskij-autsorser">Вот рассказ про SoftServe</a>. В Харькове их нет, возможно скоро придут. </span><span style="font-family: Verdana, sans-serif;">В Украине - 2200. В мире - ???.</span><br />
<br />
--------------------------------------------------------------------------<br />
<span style="font-family: Verdana, sans-serif;"> </span><span style="font-family: Verdana, sans-serif;"> <span style="font-size: large;"><b>Стартапы/инвестиции</b></span></span><br />
<span style="font-family: Verdana, sans-serif;"> </span><span style="font-family: Verdana, sans-serif;"> <a href="http://dou.ua/lenta/interviews/profit-show-viktoriya-tigipko/">Интервью с Викторией Тигипко, руководителем венчурного инвестиционного фонда с объемом инвестиций 50M$</a>.</span><span style="font-family: Verdana, sans-serif;"><b> </b></span><br />
<span style="font-family: Verdana, sans-serif;"><b><br /></b></span>
<span style="font-family: Verdana, sans-serif;"> <a href="http://leonwolf.livejournal.com/476031.html">Главная последовательность</a></span><br />
<br />
<a href="http://leonwolf.livejournal.com/347761.html">Сколько у кого и когда просить денег?</a><br />
<span style="font-family: Verdana, sans-serif;"><br /></span>
<span style="font-family: Verdana, sans-serif;"><a href="http://habrahabr.ru/post/151193/">Курс лекций «Стартап». Питер Тиль. Стенфорд 2012. Занятие 1</a></span>
<span style="font-family: Verdana, sans-serif;"><br /></span>
<span style="font-family: Verdana, sans-serif;"><br /></span></div>
Golovach Ivanhttp://www.blogger.com/profile/17934541017925930523noreply@blogger.com