Skip to content

Instantly share code, notes, and snippets.

@kolebakin
Last active July 26, 2022 21:15
Show Gist options
  • Select an option

  • Save kolebakin/c142b74b58387c1ad0267bedc4227587 to your computer and use it in GitHub Desktop.

Select an option

Save kolebakin/c142b74b58387c1ad0267bedc4227587 to your computer and use it in GitHub Desktop.
1. Представим, что твой коллега написал этот код и принес тебе на код-ревью. Я бы хотел, чтобы ты высказал свои замечания по коду.
Хочу услышать два класса замечаний - по самим методам, их имплементации, что с ними не так, что не будет работать нормально
и второе - по самой архитектуре класса, может какие-то методы убрал, добавил.
/**
* This class is thread safe.
*/
public class Parser {
private File file;
public synchronized void setFile(File f) {
file = f;
}
public synchronized File getFile() {
return file;
}
public String getContent() throws IOException {
InputStream i = new FileInputStream(file);
String output = "";
int data;
while ((data = i.read()) > 0) {
output += (char) data;
}
return output;
}
public void saveContent(String content) throws IOException {
OutputStream o = new FileOutputStream(file);
for (int i = 0; i < content.length(); i += 1) {
o.write(content.charAt(i));
}
}
}
------------------------
2. Задача следующая - мы хотим сделать этот класс иммутабельным. Как нам это сделать?
@Data
@AllArgsConstructor
public class Person {
private Integer age;
private String name;
private List<Person> children;
public Person(Integer age, String name) {
this.age = age;
this.name = name;
this.children = Collections.emptyList();
}
}
------------------------
3. Если выполнить этот код, что на консоль выведется?
List.of(1, 2, 3).stream().map(i -> {
System.out.println("doubling " + i);
return i * 2;
});
------------------------
4. Представим, что это скрипт создания таблицы. Тебе нужно сделать код-ревью. Что бы ты посоветовал добавить/поменять?
create table cladr_houses
(
id number, -- id записи
name varchar2(50), -- наименование населенного пункта
cladr_street number, -- ссылка на справочник улиц
code varchar2(50), -- код вида 'ссррргггпппаа'
post_index varchar2(50), -- индекс
isActive varchar2(50) -- признак активности 'Y'/'N'
)
------------------------
5. Вот такой пример, связанный с аннотацией Transactional, со Спрингом.
Надо сделать код-ревью этого кода. Расскажи, что делает этот код. Выскажи какие-то замечания по этому коду,
что может не сработать или сработать не так.
@Service
@AllArgConstructor
public class PaymentService {
private final AccountDao accountDao;
public void processPayment(String fromAccountCode, String toAccountCode, int amount) throws NotEnoughMoneyException {
var from = accountDao.findByCode(fromAccountCode);
var to = accountDao.findByCode(toAccountCode);
makeTransfer(from, to, amount);
}
@Transactional
private void makeTransfer(Account from, Account to, int amount) throws NotEnoughMoneyException {
to.credit(amount);
accountDao.save(to);
from.debit(amount);
accountDao.save(from);
}
}
------------------------
6. Сколько в памяти займет HashMap<Integer, Integer> на 1 000 000 элементов?
Понятно, что точный ответ дать крайне сложно. Но надо порассуждать, как это вообще можно посчитатать.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment