Пишу на флатере 5 лет. Вопросы ради вопросов. в 99% это вообще не используется, как работаю эти деревья, как оно работает под капотом. Вопросы высосанные из пальца. Пример сдаёшь на права - ты не обязан знать как работает двигатель в машине, ты должен уметь им управлять. Сеньоры-помидоры берут техническую документацию фраемворка и задают по ней вопросы, хотя настоящие вопросы из жизни придумывать вообще не хотят
формат интересный и актуальный. Но все-таки хотелось бы какую то обратную связь: правильно или неправильно отвечает кандидат, свои дополнения какие то к ответам , и, конечно, какое то резюме по итогу )
Начали прямо на серьёзных щщах тереть за паттерны проектирования - думаю ну ни хера себе уровень - а потом кандидат взял да присел на несложной задачке, заблудившись в трёх соснах, и потом давай плавать в простых вопросах по Dart
Уже на 20-й минуте создалось стойкое впечатление, что кандидат лучше шарит, чем интервьюер. Более того, сам инетрвьер не всегда понимает, что ему вообще отвечают. А на 59-й минуте уже начал "а под скринридером ты что имеешь ввиду?" - ну мог бы тогда уж сразу топить салагу - "а под деревом, ты что?... а под виджетом, ты что?.." Ну такое...
На сколько я понял что интерфейс не может отобразить состояние класса а только описывает его поведение, а абстрация может нести в себе конкретное состояние конкретного класса.
Примерно такая идея реализации задачи void main() { final List list = [1,1,3,7,7,3,2,9,2,5,5]; int i = 0; int result = 0; while (list.length > i) { int j = 0; int b = 0; while (list.length > j) { if (list[i] == list[j]) { b = b + 1; } j++; } if (b < 2) { result = list[i]; } i++; } print(result); }
Можно сетом воспользоваться. Там метод .add возвращает булевое значение, если элемент в сете уже есть. Так что удаляй если он уже есть и у тебя в итоге будет сет, с единственным значением которое ты выведешь как ответ. Все за 1 проход и ниче не надо городить
@@karaoket8911 менять размерность коллекции в цикле - красный флаг. Когда немного элементов ещё не так страшно, но когда много.. перестроения в памяти хорошую такую просидку дают. Хоть и номинально у вас О(n).
Пишу на флатере 5 лет. Вопросы ради вопросов. в 99% это вообще не используется, как работаю эти деревья, как оно работает под капотом. Вопросы высосанные из пальца. Пример сдаёшь на права - ты не обязан знать как работает двигатель в машине, ты должен уметь им управлять. Сеньоры-помидоры берут техническую документацию фраемворка и задают по ней вопросы, хотя настоящие вопросы из жизни придумывать вообще не хотят
формат интересный и актуальный.
Но все-таки хотелось бы какую то обратную связь: правильно или неправильно отвечает кандидат, свои дополнения какие то к ответам , и, конечно, какое то резюме по итогу )
действительно, теряется смысл формата собеседования, если нет реакции верно-невенро-дополнить. на худой конец, сказать это все по итогу собеседования.
Начали прямо на серьёзных щщах тереть за паттерны проектирования - думаю ну ни хера себе уровень - а потом кандидат взял да присел на несложной задачке, заблудившись в трёх соснах, и потом давай плавать в простых вопросах по Dart
Пожалуйста, больше таких видео :)
Уже на 20-й минуте создалось стойкое впечатление, что кандидат лучше шарит, чем интервьюер. Более того, сам инетрвьер не всегда понимает, что ему вообще отвечают. А на 59-й минуте уже начал "а под скринридером ты что имеешь ввиду?" - ну мог бы тогда уж сразу топить салагу - "а под деревом, ты что?... а под виджетом, ты что?.." Ну такое...
На сколько я понял что интерфейс не может отобразить состояние класса а только описывает его поведение, а абстрация может нести в себе конкретное состояние конкретного класса.
Это абстрактный класс, а не абстракция. Абстракция это выделение важных деталей системы.
Ну это реально очень странно без фидбека. Смысл смотреть тогда?
Добрый день. Собеседование обычно проводят по уровням. Как узнать на какой уровень? Иначе пропадает ясность.
на мидла
Middle, ближе к 14-й минуте об этом сказано
Примерно такая идея реализации задачи
void main() {
final List list = [1,1,3,7,7,3,2,9,2,5,5];
int i = 0;
int result = 0;
while (list.length > i) {
int j = 0;
int b = 0;
while (list.length > j) {
if (list[i] == list[j]) {
b = b + 1;
}
j++;
}
if (b < 2) {
result = list[i];
}
i++;
}
print(result);
}
O(n^2) 💀
очень волнуется...
Абстракция позволяет нам думать широко и элегантно 😂😂😂 чувак не подготовлен - мы таких «ага-угу», «вот» и «да, конечно» на ставку е берём
это какая-то полная дичь.
Спасибо за видео.
По решению задачи на ум пришло два решения:
Рекурсия:
List findSingleValue(List list) {
final firstElement = list.first;
list.removeAt(0);
if (list.contains(firstElement)) {
list.removeWhere((currentElement) => currentElement == firstElement);
return findSingleValue(list);
} else {
return [firstElement];
}
}
void main() {
final list = [1, 1, 2, 2, 3, 3, 5, 5, 7, 9, 9];
final singleValue = findSingleValue(list);
print(singleValue.first); // 7
}
Set:
void main() {
final list = [1, 1, 2, 2, 3, 3, 5, 5, 7, 9, 9];
final uniqueValue = {};
list.forEach((element) {
uniqueValue.contains(element) ? uniqueValue.remove(element) : uniqueValue.add(element);
});
print(uniqueValue.first); // 7
}
У кого-нибудь есть более элегантные решения?
.toSet();
void main() {
print(findOneEntry([1, 2, 1, 2, 6, 3, 4, 3, 4]));
}
int findOneEntry(List nums) {
int unique = 0;
for (var i in nums) {
unique = unique ^ i;
}
return unique;
}
xor делает свое красиво)
Можно сетом воспользоваться. Там метод .add возвращает булевое значение, если элемент в сете уже есть. Так что удаляй если он уже есть и у тебя в итоге будет сет, с единственным значением которое ты выведешь как ответ. Все за 1 проход и ниче не надо городить
@@karaoket8911 менять размерность коллекции в цикле - красный флаг. Когда немного элементов ещё не так страшно, но когда много.. перестроения в памяти хорошую такую просидку дают. Хоть и номинально у вас О(n).
final list = [1, 1, 2, 2, 4, 3, 3, 4];
final resultMap = list.fold({}, (result, item) {
result.containsKey(item) ? result[item]++ : result[item] = 1;
return result;
});
print(resultMap.entries.singleWhereOrNull((e) => e.value == 1)?.key);