Средства экономии времени Java [закрываются]

Если вы разработчик, вы должны быть в состоянии написать код

Я провел немало интервью в прошлом году, и для моей части интервью я должен был проверить, как люди думают, и как они реализуют простые и умеренные алгоритмы на белой доске. Сначала я начал с вопросов, таких как:

Учитывая, что Pi можно оценить, используя функцию 4 * (1 - 1/3 + 1/5 - 1/7 + ...) с больше терминов, дающих большую точность, напишите функцию, которая вычисляет число Пи с точностью до 5 десятичных знаков.

Это проблема, которая должна заставить вас задуматься, но не должна быть недоступна опытному разработчику (на нее можно ответить примерно в 10 строках C #). Однако многие из наших (предположительно предварительно отобранных агентством) кандидатов даже не смогли начать отвечать на них или даже объяснить, как они могли бы ответить на него. Поэтому через некоторое время я начал задавать более простые вопросы, например:

Учитывая, что площадь круга определяется как число умноженных на квадрат радиуса, напишите функцию для расчета площади круга.

Удивительно, что более половины кандидатов не смогли написать эту функцию на любом языке (я могу читать большинство популярных языков, поэтому я позволяю им использовать любой язык по своему выбору, включая псевдокод ). У нас были «разработчики на C #», которые не могли написать эту функцию на C #.

1112 Я был удивлен этим. Я всегда думал, что разработчики должны иметь возможность писать код. Похоже, что в настоящее время это противоречивое мнение. Конечно, это среди кандидатов на собеседование!


Редактировать:

В комментариях много дискуссий о том, является ли первый вопрос хорошим или плохим, и стоит ли вам задавать такие сложные вопросы, как это, в интервью. Я не собираюсь углубляться в это здесь (это совершенно новый вопрос), за исключением того, чтобы сказать , что вы в значительной степени упускаете смысл поста .

Да, я сказал, что люди не могут добиться успеха с этим, но второй вопрос тривиален , и многие люди также не могут добиться успеха с этим! Любой , кто называет себя разработчиком, должен иметь возможность написать ответ на второй вопрос за несколько секунд, даже не задумываясь. И многие не могут.

12
задан 5 revs, 2 users 60% 7 November 2015 в 17:11
поделиться

12 ответов

There's getting the "project" completed efficiently and there are "short cuts". I suspect the following may fall into the "avoiding wasted effort" category rather be truly short cuts but if any of them get you to then end more quickly then I perhaps they help.

1). Decomposition and separation of concerns. You've already identified high-level chunks (UI, persistence layer, parser etc.). Define the interfaces for the provider classes as soon as possible and have all dependent classes work against those interfaces. Pay a lot of attention to the usability of those interfaces, make them easy to understand - names matter. Even something as simple as the difference between setShutdownFlag(true) and requestShutdown(), the second has explicit meaning and hence I prefer it.

Benefits: Easier maintenance. Even during initial development "maintenance" happens. You will want to change code you've already written. Make it easy to get that right by strong encapsulation.

2). Expect iterative development, to be refining and redesigning. Don't expect to "finish" any one component in isolation before you use it. In other words don't take a purely bottom up approach to developing your componenets. As you use them you find out more information, as you implement them you find out more about what's possible.

So enable development of higher level components especially the UI by mocking and stubbing low level components. Something such as JMock is a short-cut.

3). Test early, test often. Use JUnit (or equivalent). You've got mocks for your low level components so you can test them.

Subjectively, I feel that I write better code when I've got a "test hat" on.

4). Define your error handling strategy up front. Produce good diagnostics when errors are detected.

Benefits: Much easier to get the bugs out.

5). Following on from error handling - use diagostic debugging statements. Sprinkle them liberally throughout your code. Don't use System.out.println(), instead use the debugging facilities of your logging library - use java.util.logging. Interactive debuggers are useful but not the only way of analysing problems.

4
ответ дан 2 December 2019 в 03:32
поделиться

Изучите / используйте Spring и создайте свой проект, чтобы он запускался без конфигурации Spring (эти вещи обычно выйти из-под контроля), сохраняя при этом возможность настроить параметры вашей среды на более позднем этапе. Вы также получаете единообразный способ интеграции других фреймворков, таких как Hibernate, Quartz, ...

И, по моему опыту, держитесь подальше от разработчиков GUI. Это может показаться хорошей сделкой,

8
ответ дан 2 December 2019 в 03:32
поделиться
7
ответ дан 2 December 2019 в 03:32
поделиться

Разумная платформа сборки и конфигурации поможет вам на этом пути, Ant:

http://ant.apache.org/

или Maven (желательно):

http://maven.apache.org/

Тем более, что размер проекта и количество модулей в увеличении проекта.

5
ответ дан 2 December 2019 в 03:32
поделиться
  • Joda Time для всех манипуляций с датой и временем.

  • Один из Hibernate или iBATIS для управления данными в базе данных

  • ] Не забывайте IDE: Eclipse, Netbeans или IDEA, если у вас есть немного денег и они вам нравятся

6
ответ дан 2 December 2019 в 03:32
поделиться

В Apache Commons есть много кода для экономии времени, который вам, скорее всего, понадобится и можно использовать повторно.

http://commons.apache.org/

6
ответ дан 2 December 2019 в 03:32
поделиться

Не сбрасывайте со счетов Swing для графического интерфейса. В зависимости от ваших потребностей доступно множество хороших сторонних библиотек Swing (с открытым исходным кодом и коммерческих), например

3
ответ дан 2 December 2019 в 03:32
поделиться

Используйте среду ведения журнала (например, Log4J) и спланируйте ее. Надежная система ведения журнала экономит много времени при исправлении ошибок.

1
ответ дан 2 December 2019 в 03:32
поделиться

Для меня большая экономия времени:

  • использовать контроль версий (Subversion / Git)
  • использовать автоматические сборки (Ant / Make / Maven)
  • использовать непрерывную интеграцию (Hudson / CruiseControl)
  • библиотеки apache-commons очень полезны
1
ответ дан 2 December 2019 в 03:32
поделиться

Разработка через тестирование

Выясните, какие функции вам нужны, и напишите тесты, чтобы продемонстрировать их. Затем напишите кода ровно столько, чтобы пройти тесты. Это будет иметь несколько серьезных побочных эффектов:

  1. Написав ровно столько кода, чтобы удовлетворить ваши требования, у вас не возникнет соблазна перекомпилировать, что должно снизить сложность и сделать ваш код чище.
  2. Наличие тестов будет позволит вам «с уверенностью провести рефакторинг» и внести изменения в код, зная, что вы не нарушаете другую часть системы.
  3. Вы повышаете качество. Вы не только будете уверены, что ваш код »работает, но и если вы действительно хотите использовать этот код как своего рода «резюме» для потенциальных работодателей, это покажет им, что вы придаете большое значение качеству кода.
1
ответ дан 2 December 2019 в 03:32
поделиться

Если вы не уверены, что должны использовать SQL, для обеспечения устойчивости данных вам следует взглянуть на альтернативные библиотеки хранения данных:

  • Prevayler : база данных в памяти системы, использующие такие развивающиеся идеи, как «только аварийные компоненты», которые делают ее простой в использовании и очень производительной. Может использоваться даже для простых приложений, где вам просто нужно сохранить какое-то состояние. У него есть лицензия BSD.
  • BerkleyDB Java Edition : система хранения с разными уровнями абстракции, поэтому ее можно использовать как базовое хранилище значений ключей (почти хеш-таблицу на диске) для полностью транзакционных ACID. система. Взгляните на информацию о лицензировании , потому что даже некоторые коммерческие программы могут использовать ее бесплатно.

Имейте в виду, что у них есть компромиссы по сравнению друг с другом или со стандартной базой данных SQL! И, конечно, могут быть и другие подобные варианты, но это те, которые я знаю и люблю. :)

PS: Мне не разрешили размещать соответствующие ссылки, потому что я новый пользователь. Просто погуглите для них; первые попадания - правильные.

0
ответ дан 2 December 2019 в 03:32
поделиться

Вы можете сэкономить время между перезапусками, используя JavaRebel (коммерческий) . Вкратце, этот инструмент позволяет писать код в Eclipse и мгновенно получать изменения кода.

0
ответ дан 2 December 2019 в 03:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: