Skip to content

Instantly share code, notes, and snippets.

@Sergaav
Created November 13, 2020 09:05
Show Gist options
  • Save Sergaav/3aefa7424b0e3e8606334e3a4a050da6 to your computer and use it in GitHub Desktop.
Save Sergaav/3aefa7424b0e3e8606334e3a4a050da6 to your computer and use it in GitHub Desktop.
3.JavaMultithreading
<?xml version="1.0" encoding="UTF-8"?>
<module type="JAVA_MODULE" version="4">
<component name="NewModuleRootManager" inherit-compiler-output="true">
<exclude-output />
<content url="file://$MODULE_DIR$">
<sourceFolder url="file://$MODULE_DIR$/src" isTestSource="false" />
</content>
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
<orderEntry type="module-library" scope="TEST">
<library name="JUnit5.4">
<CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/org/junit/jupiter/junit-jupiter/5.4.2/junit-jupiter-5.4.2.jar!/" />
<root url="jar://$MAVEN_REPOSITORY$/org/junit/jupiter/junit-jupiter-api/5.4.2/junit-jupiter-api-5.4.2.jar!/" />
<root url="jar://$MAVEN_REPOSITORY$/org/apiguardian/apiguardian-api/1.0.0/apiguardian-api-1.0.0.jar!/" />
<root url="jar://$MAVEN_REPOSITORY$/org/opentest4j/opentest4j/1.1.1/opentest4j-1.1.1.jar!/" />
<root url="jar://$MAVEN_REPOSITORY$/org/junit/platform/junit-platform-commons/1.4.2/junit-platform-commons-1.4.2.jar!/" />
<root url="jar://$MAVEN_REPOSITORY$/org/junit/jupiter/junit-jupiter-params/5.4.2/junit-jupiter-params-5.4.2.jar!/" />
<root url="jar://$MAVEN_REPOSITORY$/org/junit/jupiter/junit-jupiter-engine/5.4.2/junit-jupiter-engine-5.4.2.jar!/" />
<root url="jar://$MAVEN_REPOSITORY$/org/junit/platform/junit-platform-engine/1.4.2/junit-platform-engine-1.4.2.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES />
</library>
</orderEntry>
<orderEntry type="module-library">
<library>
<CLASSES>
<root url="jar://$MAVEN_REPOSITORY$/org/junit/jupiter/junit-jupiter/5.4.2/junit-jupiter-5.4.2.jar!/" />
<root url="jar://$MAVEN_REPOSITORY$/org/junit/jupiter/junit-jupiter-api/5.4.2/junit-jupiter-api-5.4.2.jar!/" />
<root url="jar://$MAVEN_REPOSITORY$/org/apiguardian/apiguardian-api/1.0.0/apiguardian-api-1.0.0.jar!/" />
<root url="jar://$MAVEN_REPOSITORY$/org/opentest4j/opentest4j/1.1.1/opentest4j-1.1.1.jar!/" />
<root url="jar://$MAVEN_REPOSITORY$/org/junit/platform/junit-platform-commons/1.4.2/junit-platform-commons-1.4.2.jar!/" />
<root url="jar://$MAVEN_REPOSITORY$/org/junit/jupiter/junit-jupiter-params/5.4.2/junit-jupiter-params-5.4.2.jar!/" />
<root url="jar://$MAVEN_REPOSITORY$/org/junit/jupiter/junit-jupiter-engine/5.4.2/junit-jupiter-engine-5.4.2.jar!/" />
<root url="jar://$MAVEN_REPOSITORY$/org/junit/platform/junit-platform-engine/1.4.2/junit-platform-engine-1.4.2.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES />
</library>
</orderEntry>
</component>
</module>
package com.javarush.task.task21.task2101;
/*
Определяем адрес сети
*/
public class Solution {
public static void main(String[] args) {
byte[] ip = new byte[]{(byte) 192, (byte) 168, 1, 2};
byte[] mask = new byte[]{(byte) 255, (byte) 255, (byte) 254, 0};
byte[] netAddress = getNetAddress(ip, mask);
print(ip); //11000000 10101000 00000001 00000010
print(mask); //11111111 11111111 11111110 00000000
print(netAddress); //11000000 10101000 00000000 00000000
}
public static byte[] getNetAddress(byte[] ip, byte[] mask) {
byte[] out = new byte[4];
StringBuilder tempOut = new StringBuilder();
for (int i = 0; i < ip.length; i++) {
String tempIp;
String tempMask;
tempIp = String.format("%8s", Integer.toBinaryString(ip[i] & 0xff)).replace(' ', '0');
tempMask = String.format("%8s", Integer.toBinaryString(mask[i] & 0xff)).replace(' ', '0');
for (int k = 0; k < 8; k++) {
tempOut.append((char) (tempIp.charAt(k) & tempMask.charAt(k)));
}
out[i] = (byte)Integer.parseInt(tempOut.toString(),2);
tempOut.delete(0, 8);
}
return out;
}
public static void print(byte[] bytes) {
StringBuilder sb = new StringBuilder();
for (byte b : bytes){
sb.append(String.format("%8s",Integer.toBinaryString(b & 0xff)).replace(' ','0')).append(" ");
}
sb.deleteCharAt(sb.length()-1);
System.out.println(sb.toString());
}
}
taskKey="com.javarush.task.task21.task2101"\n\nОпределяем адрес сети
1) Даны IP-адрес и маска подсети, необходимо вычислить адрес сети - реализуй метод getNetAddress.
Используй операцию поразрядной конъюнкции (логическое И).
Пример:
IP-адрес: 11000000 10101000 00000001 00000010 (192.168.1.2)
Маска подсети: 11111111 11111111 11111110 00000000 (255.255.254.0)
Адрес сети: 11000000 10101000 00000000 00000000 (192.168.0.0)
2) Реализовать метод print, который выведет в консоль данные в двоичном коде. Для IP-адреса(192.168.1.2)
должна быть выведена строка &quot;11000000 10101000 00000001 00000010&quot;
3) Метод main не участвует в тестировании
Требования:
1. Метод getNetAddress должен вычислять и возвращать адрес сети согласно переданным параметрам(IP-адрес и маска подсети).
2. Метод getNetAddress должен быть статическим и публичным.
3. Метод print должен быть статическим и публичным.
4. Метод print должен преобразовывать переданный ему IP адрес в двоичный код и выводить на экран(как в условии).
package com.javarush.task.task21.task2102;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
/*
Сравниваем модификаторы
*/
public class Solution {
public static void main(String[] args) {
int classModifiers = Solution.class.getModifiers();
System.out.println(isModifierSet(classModifiers, Modifier.PUBLIC)); //true
System.out.println(isModifierSet(classModifiers, Modifier.STATIC)); //false
int methodModifiers = getMainMethod().getModifiers();
System.out.println(isModifierSet(methodModifiers, Modifier.STATIC)); //true
}
public static boolean isModifierSet(int allModifiers, int specificModifier) {
return (allModifiers & specificModifier) > 0;
}
private static Method getMainMethod() {
Method[] methods = Solution.class.getDeclaredMethods();
for (Method method : methods) {
if (method.getName().equalsIgnoreCase("main")) return method;
}
return null;
}
}
taskKey="com.javarush.task.task21.task2102"\n\nСравниваем модификаторы
Реализовать логику метода isModifierSet, который проверяет,
содержит ли переданный параметр allModifiers значение конкретного модификатора specificModifier.
P.S. Перед выполнением задания ознакомься с классом Modifier и реализацией методов isPublic, isStatic и т.п.
Требования:
1. Метод isModifierSet должен быть статическим.
2. Метод isModifierSet должен возвращать значение типа boolean.
3. Метод isModifierSet должен принимать два параметра типа int.
4. Метод isModifierSet должен возвращать корректное значение в соответствии с условием задачи(true, если заданный модификатор присутствует в allModifiers, иначе false).
package com.javarush.task.task21.task2103;
/*
Все гениальное - просто!
*/
public class Solution {
public static boolean calculate(boolean a, boolean b, boolean c, boolean d) {
return c;
}
public static void main(String[] args) {
}
}
taskKey="com.javarush.task.task21.task2103"\n\nВсе гениальное - просто!
Упростить. Переменные не переименовывать, комментарии не оставлять.
Требования:
1. Метод calculate должен быть статическим.
2. Метод calculate должен возвращать значение типа boolean.
3. Метод calculate должен принимать четыре параметра типа boolean.
4. Метод calculate должен быть максимально упрощен(поведение должно остаться прежним).
package com.javarush.task.task21.task2104;
import java.util.HashSet;
import java.util.Objects;
import java.util.Set;
/*
Equals and HashCode
*/
public class Solution {
private final String first, last;
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (!(o instanceof Solution)) return false;
Solution solution = (Solution) o;
if (!Objects.equals(first, solution.first)) return false;
return Objects.equals(last, solution.last);
}
@Override
public int hashCode() {
int result = first != null ? first.hashCode() : 0;
result = 31 * result + (last != null ? last.hashCode() : 0);
return result;
}
public Solution(String first, String last) {
this.first = first;
this.last = last;
}
// public boolean equals(Solution n) {
// if (this == n) {
// return true;
// } else if (n == null || first.getClass() n.first.getClass());
// }
//
// public int hashCode() {
// return 31*first.hashCode() + 31*last.hashCode();
// }
public static void main(String[] args) {
Set<Solution> s = new HashSet<>();
s.add(new Solution("Donald", "Duck"));
System.out.println(s.contains(new Solution("Donald", "Duck")));
}
}
taskKey="com.javarush.task.task21.task2104"\n\nEquals and HashCode
В классе Solution исправить пару методов equals/hashCode в соответствии с правилами реализации этих методов(детали уточни у своего любимого поисковика).
Обе строки first и last должны принимать участие в сравнении с помощью метода equals и вычислении hashcode.
Метод main не участвует в тестировании.
Требования:
1. Хешкоды одинаковых объектов должны быть равны.
2. Метод equals должен проверять равен ли переданный объект текущему(сравнение через ==).
3. Метод equals должен проверять является ли переданный объект объектом класса Solution.
4. Метод equals должен возвращать true в случае, если поля first и last равны у переданного объекта и текущего(не забудь что они могут быть равны null).
5. Должно быть обеспечено корректное поведение HashSet с типом элементов Solution.
package com.javarush.task.task21.task2105;
import java.util.HashSet;
import java.util.Objects;
import java.util.Set;
/*
Исправить ошибку. Сравнение объектов
*/
public class Solution {
private final String first, last;
public Solution(String first, String last) {
this.first = first;
this.last = last;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (!(o instanceof Solution))
return false;
Solution n = (Solution) o;
if (!Objects.equals(first, n.first)) return false;
return Objects.equals(last, n.last);
}
@Override
public int hashCode() {
int result = first != null ? first.hashCode() : 0;
result = 31*result + (last != null ? last.hashCode() : 0);
return result;
}
public static void main(String[] args) {
Set<Solution> s = new HashSet<>();
s.add(new Solution("Mickey", "Mouse"));
System.out.println(s.contains(new Solution("Mickey", "Mouse")));
}
}
taskKey="com.javarush.task.task21.task2105"\n\nИсправить ошибку. Сравнение объектов
Сравнение объектов Solution не работает должным образом. Найти ошибку и исправить.
Метод main не участвует в тестировании.
Требования:
1. Хешкоды одинаковых объектов должны быть равны.
2. Метод equals должен проверять равен ли переданный объект равен текущему(сравнение через ==).
3. Метод equals должен проверять является ли переданный объект объектом класса Solution.
4. Метод equals должен возвращать true в случае, если поля first и last равны у переданного объекта и текущего(не забудь что они могут быть равны null).
5. Должно быть обеспечено корректное поведение HashSet с типом элементов Solution.
6. В классе Solution должен быть реализован метод hashCode.
package com.javarush.task.task21.task2106;
import java.util.Date;
/*
Ошибка в equals/hashCode
*/
public class Solution {
private int anInt;
private String string;
private double aDouble;
private Date date;
private Solution solution;
public Solution(int anInt, String string, double aDouble, Date date, Solution solution) {
this.anInt = anInt;
this.string = string;
this.aDouble = aDouble;
this.date = date;
this.solution = solution;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (!(o instanceof Solution)) return false;
Solution solution1 = (Solution) o;
if (Double.compare(solution1.aDouble, aDouble) != 0) return false;
if (anInt != solution1.anInt) return false;
if (date != null ? !date.equals(solution1.date) : !(solution1.date == null)) return false;
if (solution != null ? !solution.equals(solution1.solution) : !(solution1.solution == null)) return false;
if (string != null ? !string.equals(solution1.string) : !(solution1.string == null)) return false;
return true;
}
@Override
public int hashCode() {
int result;
long temp;
result = anInt;
temp = aDouble != +0.0d ? Double.doubleToLongBits(aDouble) : 0L;
result = 31 * result + (int) (temp ^ (temp >>> 32));
result = 31 * result + (solution != null ? solution.hashCode() : 0);
return result;
}
public static void main(String[] args) {
}
}
taskKey="com.javarush.task.task21.task2106"\n\nОшибка в equals/hashCode
Исправьте ошибки реализаций методов equals и hashCode для класса Solution.
Требования:
1. Хешкоды одинаковых объектов должны быть равны.
2. Метод equals должен проверять равен ли переданный объект равен текущему (сравнение через ==).
3. Метод equals должен проверять является ли переданный объект объектом класса Solution.
4. Метод equals должен проверять значения всех полей у переданного объекта и текущего (учти что некоторые из них могут быть равны null).
5. Должно быть обеспечено корректное поведение HashSet с типом элементов Solution.
6. В классе Solution должен быть реализован метод hashCode.
<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<title>JavaRush</title>
<style>
mark {
padding: .1em .3em;
color: #fff;
text-shadow: 1px 1px 0 rgba(0, 0, 0, .2);
font-size: 1em;
font-family: Menlo, Monaco, Consolas, Courier New, Ubuntu Mono, monospace;
border-radius: 3px;
}
.light-content {
font-size: 15px;
line-height: 1.62;
overflow-wrap: break-word;
font-family: Arial, Helvetica, sans-serif;
color: #151f33;
}
.dark-content {
font-size: 15px;
line-height: 1.62;
overflow-wrap: break-word;
font-family: Arial, Helvetica, sans-serif;
color: #fff;
background: #1F2023;
}
.light-content .text-corporate {
color: #f80 !important;
}
.dark-content .text-corporate {
color: #ff7337 !important;
}
.light-content mark.green {
background-color: #41a444;
}
.dark-content mark.green {
background-color: #45aa4c;
}
.light-content mark.orange {
background-color: #faa033;
}
.dark-content mark.orange {
background-color: #ff7337;
}
.light-content mark.blue {
background-color: #3a5fa5;
}
.dark-content mark.blue {
background-color: #4798cf;
}
.light-content .text-red {
color: red !important;
}
.dark-content .text-red {
color: #f14f4c !important;
}
</style>
</head>
<body class="dark-content">
<div style="padding: 10px 30px">
<h3>Многопоточность в Java</h3>
<p><strong>Квест «Java Multithreading»</strong> познакомит студентов секретного центра <strong>Java<span
class="text-corporate">Rush</span></strong> с многопоточностью. В течение <strong>10 уровней</strong> вы
будете изучать устройство объекта Object, String, внутренние классы. Узнаете, как создавать и останавливать
потоки, что такое
<mark class="orange">DeadLock</mark>
,
<mark class="orange">Wait</mark>
,
<mark class="orange">notify</mark>
,
<mark class="orange">notifyAll</mark>
, получите опыт работы с
<mark class="blue">Jsoup</mark>
и
<mark class="blue">Swing</mark>
, а также узнаете об автоупаковке и особенностях её реализации. На этом квесте вы создадите ваши первые
мини-проекты — <strong>большие задачи</strong>. В обучающих целях их решение будет разбито на этапы. Вам нужно
будет написать несколько игр — <strong>тетрис</strong>, <strong>змейку</strong>, <strong>космическую</strong>
<strong>стрелялку</strong>, <strong>арканоид</strong>. Также вы поработаете над серьезными <span
class="text-corporate">многоступенчатыми задачами</span>, наподобие <strong>чата</strong>, эмулятора
<strong>банкомата</strong> и даже <strong>парсера</strong> <strong>сайтов</strong>!
</p>
</div>
</body>
</html>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment