Last active
July 26, 2022 21:15
-
-
Save kolebakin/c142b74b58387c1ad0267bedc4227587 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| 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