|
1 / 1 / 0
Регистрация: 16.10.2015
Сообщений: 27
|
|
Проверить и прокомментировать вариант решения тестового задания при приёме на работу16.10.2015, 21:07. Показов 7427. Ответов 87
Метки нет (Все метки)
Приветствую!
Сделал тестовое задание, которое попросил сделать один работодатель, на что получил отказ и комментарий о том, что "оно сделано неидеально". Как вы думаете, что могло там не понравиться, чтобы знать на будущее? Это работодатель такой капризный или я такой кривой программер, что там действительно сделано так нехорошо? Несколько шероховатостей я вижу, но могли ли они быть основанием для отказа? Ниже привожу свои варианты решения задач.
0
|
|
| 16.10.2015, 21:07 | |
|
Ответы с готовыми решениями:
87
Проверить и прокомментировать вариант решения тестового экзаменационного задания по теории C++ и Си Тесты, вопросы и задания при приеме на работу Какого уровня тестовые задания при приеме на работу ребят без опыта |
|
1 / 1 / 0
Регистрация: 16.10.2015
Сообщений: 27
|
||
| 17.10.2015, 19:23 [ТС] | ||
|
0
|
||
|
2083 / 1575 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
|
|
| 17.10.2015, 19:34 | |
|
0
|
|
|
2784 / 1937 / 570
Регистрация: 05.06.2014
Сообщений: 5,602
|
|||
| 17.10.2015, 19:40 | |||
|
Но если очень надо самому сделать, но std::set наверняка работает на сбалансированных деревьях.
0
|
|||
|
2083 / 1575 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
|
|||||||
| 17.10.2015, 20:14 | |||||||
|
Речь идет о примерно такой реализации автомате (Даже не набросок а заготовка наброска)
0
|
|||||||
|
2784 / 1937 / 570
Регистрация: 05.06.2014
Сообщений: 5,602
|
||
| 17.10.2015, 20:17 | ||
|
0
|
||
|
2083 / 1575 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
|
||
| 17.10.2015, 20:25 | ||
|
0
|
||
|
2784 / 1937 / 570
Регистрация: 05.06.2014
Сообщений: 5,602
|
||
| 17.10.2015, 20:28 | ||
|
0
|
||
|
2083 / 1575 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
|
||||
| 17.10.2015, 20:47 | ||||
|
Добавлено через 3 минуты Добавлено через 1 минуту
0
|
||||
|
0 / 0 / 0
Регистрация: 16.10.2015
Сообщений: 157
|
|
| 17.10.2015, 20:59 | |
|
почитал. Рэнжи прав.
0
|
|
|
2083 / 1575 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
|
||
| 17.10.2015, 21:23 | ||
|
0
|
||
|
1 / 1 / 0
Регистрация: 16.10.2015
Сообщений: 27
|
|
| 23.10.2015, 09:28 [ТС] | |
|
По первым двум заданиям пришли отказы. Попытка номер 3.
Задание. Необходимо реализовать класс(ы) для генерирования идентификаторов. Идентификаторы должны быть последовательными целыми числами (например, 3, 4, 5 и т.п.). Другие свойства генератора вам нужно придумать самому на основе того, что по вашему мнению может понадобится пользователям вашего генератора. Код должен быть написан на C++ используя любой официальный стандарт. Из библиотек можно использовать libc, stl и boost. Решение приложено (и уже отправлено работодателю - я же честный мальчик). Что скажете?
0
|
|
|
27 / 26 / 6
Регистрация: 02.02.2014
Сообщений: 96
|
|
| 23.10.2015, 10:52 | |
|
Из N+1 генераторов при их сохранении/загрузке N превратятся в тыкву. Лежащий рядом скрипт idGenerator при сохранении превратится в тыкву. Опять шаблоны на ровном месте, но по сравнению с первыми двумя проблемными моментами это уже не важно.
0
|
|
|
1 / 1 / 0
Регистрация: 16.10.2015
Сообщений: 27
|
||
| 23.10.2015, 12:11 [ТС] | ||
|
Насчет сохранения загрузки - еще утром у меня был другой вариант вообще без классов (нафиг они тут нужны?) а просто со статическим классом-инициализатором генератора + самой функцией-генератором. Он работал нормально. Но перед отправкой я еще разок перечитал задание, а там написано, что надо сделать класс(ы). Тут я подумал, что лажанулся и все переписал с помощью класса и уже не обратил внимание на эту проблему. Потом решил опять для крутости добавить темплейт... вот дебил я...
0
|
||
|
27 / 26 / 6
Регистрация: 02.02.2014
Сообщений: 96
|
|
| 23.10.2015, 12:50 | |
|
Тут можно было вообще отписаться, что есть на свете std::atomic... - готовые классы, которых вполне достаточно для указанной задачи и выставить основным решением что-то вроде "using Generator = std::atomic<int>".
0
|
|
|
1 / 1 / 0
Регистрация: 16.10.2015
Сообщений: 27
|
|
| 12.11.2015, 15:50 [ТС] | |
|
Попытка номер 5.
Задание. 1. Написать класс, реализующий примитив синхронизации «много читателей/один писатель», для доступа к разделяемым данным. 2. Написать программу, демонстрирующую возможности данного класса. Условия работы: - Писатель может захватить примитив, если он не захвачен ни писателем, ни читателем. Если захват невозможен, писатель должен ждать; - Читатель может захватить примитив, если он не захвачен писателем. Если захват невозможен, читатель должен ждать; - Приоритет при захвате примитива всегда отдаётся писателю, т.е. если читатель и писатель должны ждать одновременно, то первым доступ получает писатель. Все под Windows. Решение приложено.
0
|
|
|
3258 / 2060 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
|
||
| 12.11.2015, 17:30 | ||
|
— throw new — Не-explict конструкторы с одним параметром. — Непонятно зачем используемые битовые поля. — Операторы приведения сомнительной полезности с конструкциями вида return *(LONG*)this; 2. Если посмотреть на реализацию, то она тоже какая-то странная. Состояния не прикрыты мьютексами. Создается их копия и дальше закрываем глаза на то, что состояние может измениться в другом потоке. Какие-то непонятные вложенные бесконечные циклы, внезапные Sleep(0)… Изменение состояния выполняется по принципу «пробуем записать пока не успеем». Посмотрите в сети варианты решения этой задачи — там все сильно проще. Либо я чего-то не понимаю.
2
|
||
|
27 / 26 / 6
Регистрация: 02.02.2014
Сообщений: 96
|
|
| 12.11.2015, 17:59 | |
|
В условиях нет ни слова про запрет пользоваться C++11, а ведь с 11 стандартом код вышел бы намного проще - весь класс свелся бы к обертке над mutex-ом и conditional_variable, которая (обертка) бы уже меняла как надо остальное состояние. Опять же код заметно сложнее, чем необходимо для решения задачи.
P.S. у SemaphoreWrapper никуда не делись оба оператора присваивания = утечка хендлов если что. P.P.S. да и ядреные семафоры тащить туда, где хватило бы critical section - явный перебор.
1
|
|
|
1 / 1 / 0
Регистрация: 16.10.2015
Сообщений: 27
|
||
| 12.11.2015, 21:56 [ТС] | ||
|
В варианте с critical section performance хуже.
SemaphoreWrapper - да, утечка хэндлов, спасибо! shared_mutex есть в С++14 - он бы помог, наверное, но у меня нет даже такого компайлера проверить. Добавлено через 4 минуты не-explicit - конструкторы тоже согласен Битовые поля совершенно понятно зачем - performance, иначе бы пришлось ставить залочки какие-то на развесистые структуры. А так - InterlockedCompareExhange, и все. Состояния не прикрыты мьютексами - это намеренно, для увеличения производительности. Все абсолютно корректно, там даже подробные комменты есть, что зачем и почему.
0
|
||
|
3258 / 2060 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
|
||
| 13.11.2015, 06:40 | ||
|
Делается две копии состояния. Одна для изменений, вторая для сравнения с оригиналом. И вот я ожидал бы, что вторая будет явно объявлена константой.
1
|
||
|
1 / 1 / 0
Регистрация: 16.10.2015
Сообщений: 27
|
|
| 13.11.2015, 09:31 [ТС] | |
|
0
|
|
| 13.11.2015, 09:31 | |
|
Помогаю со студенческими работами здесь
60
Не взяли на работу из-за неправильно выполненного тестового задания, посмотрите? Задание при приёме на работу
Задача при приеме на работу Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
[golang] Двоичная куча, min-heap
alhaos 20.05.2026
Двоичная куча
Двоичная куча — структура данных, которая всегда держит самый важный элемент наготове.
Представьте очередь к хилеру в игре, и очередь из игроков в приоритете те у кого меньше. . .
|
[golang] Breadth-First Search
alhaos 19.05.2026
BFS (Breadth-First Search) — это базовый алгоритм обхода графа в ширину, который поуровнево исследует все связанные вершины. Он начинает с выбранной точки и проверяет всех соседей, прежде чем. . .
|
[golang] Алгоритм «Хак Госпера»
alhaos 17.05.2026
Алгоритм «Хак Госпера»
Хак Госпера (Gosper's Hack) — алгоритм нахождения следующего по величине числа с тем же количеством установленных бит.
Придуман Биллом Госпером в 1970-х, опубликован в. . .
|
Рисование бинарного древа до 6-го колена на js, svg.
russiannick 17.05.2026
<svg width="335" height="240" viewBox="0 0 335 240" fill="#e5e1bb">
<style>
<!]>
</ style>
<g id="bush">
</ g>
</ svg>
function fn(){
let rost;/ / высота древа
let xx=165,yy=210,w=256;
|
|
FSharp: interface of module
DevAlt 16.05.2026
Интерфейс модуля F# позволяет управлять доступностью членов,
содержащихся в реализации модуля. По-умолчанию все члены модуля доступны:
module Foo
let x = 10
let boo () = printfn "boo"
. . .
|
Хитросплетение родственных связей пантеона греческих богов.
russiannick 14.05.2026
Однооконник, позволяющий узреть и изучить отдельных героев древней Греции.
<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible". . .
|
[golang] Угол между стрелками часов
alhaos 12.05.2026
По заданным значениям часа и минуты необходимо определить значение меньшего угла между стрелками аналогового циферблата часов.
import "math"
func angleClock(hour int, minutes int) float64 {
. . .
|
Debian 13: Установка Lazarus QT5
ВитГо 09.05.2026
Эта инструкция моя компиляция инструкций volvo
https:/ / www. cyberforum. ru/ blogs/ 203668/ 10753. html
и его же старой инструкции по установке Lazarus с gtk2. . .
|