• Как указать местоположение main.go файла в Docker?

    2ord
    @2ord
    Наверное надо указывать относительный путь в файлу main.go, т.е. go-web/cmd/goweb/main.go
    go build -a -installsuffix cgo -o main go-web/cmd/goweb/main.go

    Для отладки после команды COPY . .полезно временно вставить команду RUN ls -la. Соответственно, надо убедиться, что исполняя команды в рабочей директории, все файлы проекта находятся на своих местах.
    Ответ написан
    2 комментария
  • В чем разница между List и LinkedList при объявлении списка?

    Jacen11
    @Jacen11
    В чем разница между List и LinkedList при объявлении списка?
    ну очевидно в том что один интерфейс, а другой одна из его реализаций

    Как например говорят ArrayList для хранения, но не изменения, ибо при изменении сдвигаются все обьекты в памяти, поэтому это медленно, а LinkedList использовать, если в будущем будете менять список
    так а в чем вопрос то?
    Ответ написан
    4 комментария
  • В чем разница между List и LinkedList при объявлении списка?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега Java
    Седой и строгий
    Разница в соблюдении LSP и ISP.
    Ответ написан
    3 комментария
  • Можно ли везде использовать arraylist вместо array?

    Vest
    @Vest
    Array - это базовый тип, в котором элементы расположены строго друг за другом. Когда вы создаёте массив, то вы просите у ОС память такую, чтобы уместить все элементы "без разрывов". Поэтому такого рода вещи сложно динамически менять. Интересная особенность, длина массива не является частью типа.

    Поэтому чтобы такого не было, то есть другой тип данных (некоторая коллекция, которая ведёт себя как массив-список), там элементы можно вставлять хоть посередине, и вам как бы без разницы как это внутри создано. Но, этот объект гораздо сложнее обычного Array, поэтому в каких-то искусственных тестах он может быть медленнее.

    У ArrayList есть много "вкусных" методов, поэтому в основном люди пользуются именно им. Поэтому я согласен с предыдущим оратором - "да, можно использовать ArrayList везде". Я тоже не против :)
    Ответ написан
    3 комментария
  • Можно ли везде использовать arraylist вместо array?

    xez
    @xez Куратор тега Java
    TL Junior Roo
    Можно. Разрешаю.
    Ответ написан
    Комментировать
  • Как ограничить доступ пользователю к чужим постам на сайте?

    azerphoenix
    @azerphoenix Куратор тега Spring
    Java Software Engineer
    Добрый день.
    Как отметил коллега, в первую очередь вам нужно связать пользователя и его посты.
    Рекомендую ознакомиться со связями между сущностями. (OneToOne, OneToMany & ManyToOne, ManyToMany). Затем связать пользователя и его посты при помощи OneToMany & ManyToOne. Таким образом на стороне поста у вас будет ID пользователя, который его добавил.
    Далее в контроллерах, вам необходимо получить текущего авторизованного пользователя и проверить принадллежит ли пост этому пользователю или нет. Если нет, то показываем 403. Тут уже зависит от вашей задумки. Можно по-разному проверить и по-разному реализовать
    Ответ написан
    1 комментарий
  • Как ограничить доступ пользователю к чужим постам на сайте?

    @Akela_wolf
    Extreme Programmer
    Самый простой путь: в том месте где вы загружаете сущность поста из БД добавить проверку, что текущий авторизованный пользователь является автором поста.

    Авторизацию пользователя можно сделать разными способами, тут гуглить Spring Security - это все целиком про авторизацию и проверку прав доступа.

    Например, вот статья о сессиях в спринге, думаю в качестве отправной точки сгодится.
    Ответ написан
    Комментировать
  • Могу ли я подключить docker к проекту spring (и вообще к любым проектам) после окончания его разработки?

    @Akela_wolf
    Extreme Programmer
    Неважно. В любой момент вы можете собрать ваш проект в docker image и далее использовать его любым угодным вам образом.

    В случае spring (и вообще java/kotlin), см. jib-gradle-plugin или jib-maven-plugin в зависимости от используемой системы сборки.
    Ответ написан
    Комментировать
  • Как записываются транзакции в блоки?

    @rPman
    каждый раз как в мемпуле появляется транзакция (ежесекундно), блок тут же перестраивается! это кстати немалая нагрузка на сервер пула (так как надо эффективно выбирать транзакции) и там есть свои способы оптимизации

    и да, был майнер, который давал полностью пустые блоки, и это давало этому майнеру во первых бонус в скорости (где то процент или доля от него выше вероятность найти блок быстрее, так как время пока пул сортирует эти транзакции, майнить почти бессмысленно, кстати пустой блок принимают и другие пулы быстрее, тоже бонус к вероятности и скорости) а во вторых повышает комиссионные сборы в среднем так как уменьшая скорость очистки мемпула замедлается скорость обработки транзакций а значит население увеличивает величину комиссий в них, т.е. этот майнер скорее всего был частью или аффилированный к другому крупному, получающему напрямую выгоду с этого действия
    Ответ написан
    Комментировать
  • Как записываются транзакции в блоки?

    @KingstonKMS
    В блок попадают транзакции из мемпула. Если их нет, блок создаётся все равно, но на его создание майнеры тратят меньше энергии. Транзакции из мемпула берутся по приоритету, если не попали в один блок, попадут в другой, либо станут просроченными (expired)
    Ответ написан
    Комментировать
  • Возможно ли на практике изменить данные в блокчейне?

    @rPman
    Проблема терминологии, термин 'участник' неправильно изначально определен и создает кучу неоднозначностей.

    Для PoW консенсуса - 'участник' это майнер, все остальные - пользователи, никак не влияющие на работу (точнее влияют на доствку неподтвержденных транзакций до майнеров, не больше)

    Для PoS консенсуса - 'участник' это витнес/зверитель или стейкер (по факту тот же майнер но сдругими правилами), в зависимости от реализации консенсуса, с теми же вытекающими последствиями.

    Так вот, только майнеры могут что либо менять в блокчейне, и в зависимости от консенсуса, требования к этому соответствующие (у PoW это обладание >50% мощностей, но можно и меньше, если количество попыток достаточно велико, можно 'отменять' изменения в последних блоках и при меньших мощностях, и да, незамеченным это не останется, это мониторят все крупные участники)

    p.s. есть еще разработчики, чей код (если) майнеры принимают безоговорочно, в этом случае разработчики самые главные и могут все что угодно (повторяю - согласие майнеров в данном случае требуется все равно).
    Например чтобы нарушить провозглашенное правило первого 'цецентрализованного контракта на блокчейне' DAO в сети ethereum - 'код это закон', разработчики ethereum внесли соответствующий фикс а майнеры молча поддержали, заблокировав адреса одного из пользователей (который обнаружил уязвимость в коде и собирался присвоить монеты себе), так появился ethereum classic (в котором блокировки нет), точнее если праивльно формулировать, идеологически верный эфир переименовали в ethereum classic а новый измененный блокчейн стали называть ethereum.
    Ответ написан
    2 комментария
  • Как сделать вывод данных после ввода с использованием рекурсии(без циклов и goto)?

    uvelichitel
    @uvelichitel Куратор тега Go
    habrahabr.ru/users/uvelichitel
    Можно без циклов и без аллокации слайса. Только печатать будет задом наперёд))
    func process_test_case(test_cases int, reader *bufio.Reader) {
    	fmt.Println("int number")
    	_, _ = reader.ReadString('\n')
    	fmt.Println("integers")
    	input, _ := reader.ReadString('\n')
    	input = strings.TrimRight(input, "\r\n")
    	arr := strings.Split(input, " ")
    	test_cases -= 1
    
    	if test_cases != 0 {
    		process_test_case(test_cases, reader)
    	}
    	fmt.Println("answer =", process_array(arr, 0))
    }
    Ответ написан
    Комментировать
  • Когда использовать Collection, а когда Iterator?

    xez
    @xez Куратор тега Java
    TL Junior Roo
    Старайтесь никогда не использовать циклы for и while.
    Вместо них используйте Stream API.
    Ответ написан
    2 комментария
  • Как часто измеряют скорость работы программы и как это делают в Java?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега Java
    Седой и строгий
    Во-первых, в контексте приведённой вами цитаты никаких измерений не требуется, ведь программист понимает принцип работы структур данных и способен оценить асимптотику, не запуская код. Во-вторых, как уже заметили в других ответах, обычно измерять начинают тогда, когда выявляется проблема производительности. Для измерений используют профилирование. В некоторых проектах проблемы производительности выявляют в результате нагрузочного тестирования, являющегося частью релизного цикла.
    Ответ написан
    Комментировать
  • Почему сравнение двух строк не работает в цикле for?

    xez
    @xez Куратор тега Java
    TL Junior Roo
    Строки в java сравниваются методом .equals()
    Ответ написан
    Комментировать
  • Как часто измеряют скорость работы программы и как это делают в Java?

    leahch
    @leahch
    3D специалист. Dолго, Dорого, Dерьмово.
    Измеряют, когда явно тормозить начинает. Для этого существует куча библиотек и тулзов - https://dzone.com/articles/java-performance-troubl...
    Ну а самый простой
    long startTime = System.nanoTime();
    methodToTime();
    long endTime = System.nanoTime();
    
    long duration = (endTime - startTime);

    или для java8+
    Instant start = Instant.now();
    Thread.sleep(63553);
    Instant end = Instant.now();
    System.out.println(Duration.between(start, end)); // prints PT1M3.553S
    Ответ написан
    3 комментария
  • Как часто измеряют скорость работы программы и как это делают в Java?

    BorLaze
    @BorLaze
    Java developer
    Пока скорость работы устраивает, ничего измерять не надо.

    Тогда возникает вопрос "а нельзя ли быстрее" - тогда профайлер (например, этот) в руки и "алга".
    Ответ написан
    Комментировать
  • Как делать фронтенд с минимумом усилий если я хочу углубиться в бэкенд?

    azerphoenix
    @azerphoenix Куратор тега Spring
    Java Software Engineer
    Изучаю Spring, дошел до момента когда можно начинать добавлять фронтенд, но я не хочу писать html и css, какое сейчас современное решение есть для этого?

    Ну если вы работаете в команде, то не факт, что вам нужно напсать фронтэнд. Для этого есть фронтэндеры.
    Если вы пишете свой проект, то тут вам в любом случае нужно знать основы веба - html, css, js.
    Можно конечно же реализовать фронт при помощи шаблонизатора thymeleaf (или других - mustache, freemarker). Ну а если захотите избавиться от js, то можете изучить фреймворк Vaadin.
    Или же можно поднять отдельное приложение на js или ts. На мой взгляд самый простой фреймворк - VueJS. React, Angular относительно сложные. А в Spring соответственно разработать REST приложение.
    Разработка фронта не зная основ веба невозможна.
    Ответ написан
    Комментировать
  • Выбор ОС для разработки под Docker: Windows или Linux?

    saboteur_kiev
    @saboteur_kiev Куратор тега Linux
    software engineer
    Разработку ведут не столько в операционке, сколько в твоем любимом IDE/редакторе.
    А вот запускать сайт (бэкенд), в принципе лучше в таком же окружении, в каком он будет крутиться в продакшене.

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

    Люди, которые хаят виндовс - просто не умеют им пользоваться. Все основные популярные ОС не просто так популярные, и полны своих достоинств.
    Сколько я не общался с хейтерами - практически все аргументы больше касаются того, как люди привыкли работать с компьютером в определенной ОС, и то, что фичи в другой ОС работают иначе не только технически, но и идеологически, они не хотят принимать.
    Ответ написан
  • Почему в этом коде используется Override(из туториала Spring)?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега Spring
    Седой и строгий
    Обожемой, это же основы Java, рано вам ещё в Spring лезть.

    Почему пишется аннотация к ним, если класс только один, у него нет родительского класса и похожих методов?

    Все классы неявно наследуют Object, в котором и определены интересующие вас методы.

    И почему пишется "Employee() {}" до создания метода c этим именем?

    Во-первых, это не метод, а конструктор. Во-вторых, у сущностей должен быть конструктор без параметров, иначе ORM не сможет их создавать.
    Ответ написан
    Комментировать