Серия «Программирование»

Как писать читабельный код на C++(и не только)

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

пример того как не надо

пример того как не надо

  • Используйте понятные имена для переменных, функций и классов. Избегайте сокращений, однобуквенных идентификаторов и неоднозначных терминов. Например, вместо int x; лучше написать int age;.

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

  • Разбивайте код на логические блоки и функции. Избегайте дублирования кода и длинных функций, которые делают слишком много всего. Выносите повторяющиеся или сложные части кода в отдельные функции с говорящими названиями. Это упростит понимание и тестирование кода.

  • Документируйте свой код с помощью комментариев. Комментарии должны объяснять, что делает код, зачем он нужен и как он работает. Комментарии также могут указывать на особенности, ограничения или предположения кода. Не забывайте обновлять комментарии при изменении кода.

  • Читайте и анализируйте чужой код. Это поможет вам узнать новые приемы, подходы и стандарты программирования на C++. Вы можете посмотреть на примеры кода в книгах, статьях, онлайн-курсах или открытых проектах.

Интересные факты и фичи языков программирования у нас в канале, заходи :)

Показать полностью 1

В чем же разница между оперативной памятью и виртуальной памятью1

Оперативная память и виртуальная память - это два разных способа хранения данных в компьютере.

В чем же разница между оперативной памятью и виртуальной памятью

Оперативная память - это физическая память, которая состоит из микросхем, подключенных к материнской плате. Она используется для хранения программ и данных, которые в данный момент выполняются или используются компьютером.

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

Основное отличие между оперативной и виртуальной памятью заключается в скорости и объеме.

Оперативная память обычно имеет меньший объем, но высокую скорость доступа, поскольку она находится близко к процессору.

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

Преимуществом использования виртуальной памяти является то, что она позволяет запускать больше программ и обрабатывать больше данных, чем физически установлено оперативной памяти в компьютере. Таким образом, виртуальная память расширяет возможности компьютера и делает его более производительным. Недостатком использования виртуальной памяти является то, что она замедляет работу компьютера из-за необходимости перемещать данные между оперативной и виртуальной памятью. Таким образом, виртуальная память требует дополнительных ресурсов и управления со стороны операционной системы.

Интересные факты и фичи языков программирования у нас в канале, заходи :)

Показать полностью
15

Интересные факты и возможности SSH

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

Интересные факты и возможности SSH


Вот некоторые из них:

  • Вы можете использовать SSH для создания безопасных туннелей, которые позволяют передавать любой другой сетевой протокол через зашифрованное соединение. Например, вы можете настроить SSH-туннель для доступа к веб-сайту, который заблокирован в вашем регионе, или для подключения к локальной сети вашего офиса из дома.

  • Вы можете использовать SSH для запуска графических приложений на удаленном сервере и отображения их на вашем локальном компьютере. Для этого вам нужно включить опцию -X при подключении к серверу и установить X Window System на обоих компьютерах. Таким образом, вы можете работать с программами, которые требуют большой вычислительной мощности или специального оборудования, не имея их на своем компьютере.

  • Вы можете использовать SSH для создания резервных копий или синхронизации файлов между разными компьютерами. Для этого вам нужно использовать утилиту rsync, которая позволяет быстро и эффективно копировать файлы по SSH-соединению. Вы можете указать различные параметры для выбора файлов, которые нужно копировать, исключать ненужные файлы, сжимать данные и т.д.

  • Вы можете использовать SSH для создания простого чата или голосовой связи между двумя компьютерами. Для этого вам нужно использовать утилиту write, которая позволяет отправлять сообщения другому пользователю по SSH-соединению. Вы также можете использовать утилиту talk, которая позволяет обмениваться сообщениями в режиме реального времени. Для голосовой связи вы можете использовать утилиту speak-freely, которая позволяет передавать звук по SSH-соединению.

Интересные факты и фичи языков программирования у нас в канале, заходи :)

Показать полностью

Про утечку памяти в C++ и как с ней быть

Утечка памяти в C++ - это ситуация, когда выделенная динамически память не освобождается после использования, что приводит к постепенному уменьшению свободной памяти и замедлению работы программы.

Про утечку памяти в C++ и как с ней быть

Утечка памяти может быть вызвана разными причинами, например:

  • Неправильное использование операторов new и delete, когда для каждого выделения памяти не соответствует освобождение.

  • Забывание освободить память, возвращаемую из функций или методов.

  • Потеря указателей на выделенную память, когда они перезаписываются или выходят из области видимости.

  • Некорректная работа сторонних библиотек или компонентов, которые сами выделяют и освобождают память.

Для предотвращения утечек памяти в C++ существуют разные подходы и инструменты, например:

  • Отказ от динамической памяти и использование статических или автоматических переменных, если это возможно.

  • Владеющие указатели (smart pointers), которые автоматически освобождают память при уничтожении объекта или выходе из области видимости.

  • Сборка мусора (garbage collection), которая периодически проверяет, какие области памяти больше не используются, и освобождает их. В C++ сборка мусора может быть реализована с помощью специальных библиотек или фреймворков.

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

Для обнаружения утечек памяти в C++ можно использовать различные средства отладки и анализа кода, такие как:

  • Отладчики (debuggers), которые позволяют просматривать состояние памяти во время выполнения программы и находить места, где происходят утечки.

  • Профилировщики (profilers), которые измеряют, сколько памяти используется разными частями программы и как она изменяется со временем.

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

Интересные факты и фичи языков программирования у нас в канале, заходи :)

Показать полностью
28

Интересное про процессы в Linux

Процессы в Linux - это одна из самых важных и интересных тем для изучения операционной системы. Процессы - это экземпляры выполняющихся программ, которые имеют свои атрибуты, привилегии, состояния и ресурсы.

Интересное про процессы в Linux

Процессы в Linux обладают рядом особенностей, которые отличают их от процессов в других системах. Вот некоторые из них:

  • Процессы в Linux могут быть порождены двумя способами: с помощью системного вызова fork(), который создает точную копию родительского процесса, или с помощью системного вызова clone(), который позволяет настраивать степень совместного использования ресурсов между родительским и дочерним процессом.

  • Процессы в Linux могут иметь разные идентификаторы: PID (process ID), PPID (parent process ID), PGID (process group ID), SID (session ID) и TID (thread ID). Эти идентификаторы используются для различных целей, таких как управление сигналами, терминалами, работами и нитями1.

  • Процессы в Linux могут иметь разные привилегии: UID (user ID), GID (group ID), EUID (effective user ID), EGID (effective group ID), SUID (saved user ID), SGID (saved group ID) и FSUID (filesystem user ID). Эти привилегии определяют права доступа процесса к файлам, устройствам, сети и другим ресурсам. Некоторые программы могут иметь специальный бит SUID или SGID, который позволяет им выполняться от имени другого пользователя или группы.

  • Процессы в Linux могут иметь разные состояния: R (running or runnable), S (sleeping or interruptible), D (sleeping or uninterruptible), T (stopped or traced), Z (zombie or defunct) и X (dead or exited). Эти состояния отражают активность процесса и его реакцию на сигналы. Состояние процесса можно узнать с помощью команды ps или top.

  • Процессы в Linux могут быть связаны с определенными ядрами процессора или группами ядер с помощью механизма аффинности процессов. Это позволяет оптимизировать распределение нагрузки и повысить производительность системы. Аффинность процессов можно установить или изменить с помощью команды taskset или sched_setaffinity().

  • Процессы в Linux могут быть ограничены в потреблении ресурсов с помощью механизма квот или лимитов. Это позволяет предотвратить злоупотребление или истощение ресурсов системы одним или несколькими процессами. Квоты или лимиты можно установить или изменить с помощью команды ulimit или setrlimit().

Интересные факты и фичи языков программирования у нас в канале, заходи :)

Показать полностью

Несколько интересных фактов про Динамическое программирование

Динамика - это искусство Разбивать задачи на части И решать их по порядку Сохраняя результаты.

Динамика - это мудрость Видеть оптимальность структуры И строить из подзадач путь К желанному решению.

Несколько интересных фактов про Динамическое программирование
  • Динамическое программирование было придумано Ричардом Беллманом в 1940-х годах для решения задач теории управления. Он выбрал это название, чтобы скрыть от своих начальников военное значение своих исследований, так как слово «динамическое» звучало впечатляюще.

  • Динамическое программирование широко используется в различных областях, таких как биоинформатика, криптография, компьютерная графика, компиляторы, игровая теория и многие другие3. Например, алгоритм Нидлмана-Вунша для выравнивания последовательностей ДНК и РНК основан на динамическом программировании.

  • Динамическое программирование может быть реализовано на C++ разными способами, в зависимости от типа задачи, структуры данных и требуемой эффективности. Например, можно использовать одномерные или многомерные массивы, векторы, хеш-таблицы, рекурсию с мемоизацией или итерацию с заполнением таблицы. Также можно применять различные техники оптимизации, такие как сжатие состояний, разбиение на подзадачи, отсечение лишних ветвей и т.д

Интересные факты и фичи языков программирования у нас в канале, заходи :)

Показать полностью 1
20

Все есть файл в Linux

В Linux все есть файл, потому что это упрощает работу с различными ресурсами системы, такими как устройства, ядро, сокеты и т.д. Вместо того, чтобы создавать отдельные интерфейсы для каждого типа ресурса, Linux использует общий интерфейс файловой системы, который позволяет открывать, читать, писать и закрывать файлы. Таким образом, любой ресурс можно представить как файл и работать с ним с помощью стандартных программ и API.

Все есть файл в Linux

Файлы в Linux делятся на три основных типа:

  • Обыкновенные

  • Специальные

  • Директории

Обыкновенные файлы содержат данные, такие как текст, изображения, код и т.д.

Специальные файлы представляют собой интерфейсы к устройствам (блочные или символьные), к ядру (procfs или sysfs) или к другим процессам (сокеты или каналы).

Директории служат для группировки файлов по разным критериям и облегчения навигации по файловой системе.

Специальные файлы в Linux - это файлы, которые представляют собой интерфейсы к различным ресурсам системы, таким как устройства, ядро, сокеты и т.д. Они позволяют работать с этими ресурсами так же, как с обычными файлами, используя стандартные операции открытия, чтения, записи и закрытия.

Специальные файлы делятся на два основных типа:

  • Блочные

  • Символьные

Блочные файлы обеспечивают буферизованный доступ к аппаратным компонентам, таким как жесткие диски, съемные носители и т.д.

Символьные файлы обеспечивают небуферизованный доступ к ядру и аппаратным компонентам, таким как клавиатура, монитор, принтеры и т.д.

Некоторые интересные факты про специальные файлы в Linux:

  • Специальные файлы находятся в каталоге /dev (от англ. devices - устройства), который содержит интерфейсы работы с драйверами ядра.

  • Специальные файлы можно определить по первому символу в выводе команды ls -l. Блочные файлы обозначаются буквой b, символьные - буквой c.

  • Специальные файлы имеют два числа: основное (major) и дополнительное (minor), которые определяют тип устройства и его номер. Например, файл /dev/sda имеет основной номер 8 и дополнительный номер 0, что означает, что он представляет первый жесткий диск в системе.

  • Специальные файлы можно создавать с помощью команды mknod (от англ. make node - создать узел), которая принимает четыре аргумента: имя файла, тип файла (b или c), основной номер и дополнительный номер. Например, команда mknod /dev/mydevice c 10 20 создаст символьный файл с именем mydevice, основным номером 10 и дополнительным номером 20.

  • Специальные файлы не хранят данные на диске, а только передают их между процессами и устройствами. Поэтому размер специальных файлов всегда равен нулю.

Интересные факты и фичи языков программирования у нас в канале, заходи :)

Показать полностью 1

История gRPC от Google до open source

gRPC - это система удаленного вызова процедур (RPC) с открытым исходным кодом, которая была разработана в Google в 2015 году. Она использует HTTP/2 в качестве транспортного протокола и Protocol Buffers в качестве языка описания интерфейса и формата данных. gRPC позволяет определить и реализовать четыре типа сервисных методов: унарный, серверный потоковый, клиентский потоковый и двунаправленный потоковый. gRPC также поддерживает различные функции, такие как аутентификация, сжатие, отмена, тайм-ауты и метаданные.

История gRPC от Google до open source

История gRPC началась с разработки внутренней системы RPC в Google под названием Stubby. Stubby был создан для обеспечения высокопроизводительной и надежной связи между микросервисами в распределенных системах. Stubby использовал Protocol Buffers для сериализации данных и HTTP/2 для передачи данных. Stubby также предоставлял различные функции, такие как балансировка нагрузки, отказоустойчивость, трассировка, мониторинг и безопасность.

В 2015 году Google решил выложить Stubby в открытый доступ под новым названием gRPC. Целью этого шага было расширить использование RPC во внешних проектах и сообществах, а также сделать RPC более доступным и универсальным для разных языков программирования и платформ. Google также хотел продвигать стандартизацию и совместимость RPC между разными системами.

С тех пор gRPC получил широкое распространение и признание в индустрии. Он используется многими компаниями и организациями, такими как Netflix, Cisco, Square, IBM, Docker, CoreOS и другими. Он также поддерживает множество языков программирования, таких как C#, C++, Dart, Go, Java, Kotlin, Node.js, Objective-C, PHP, Python, Ruby и Swift. Он также имеет большое и активное сообщество разработчиков и пользователей на GitHub и других платформах.

Интересные факты и фичи языков программирования у нас в канале, заходи :)

Показать полностью
Отличная работа, все прочитано!