Press "Enter" to skip to content

JAVA Base

Tracing (трассировка)

Java Fundamentals: Part 1

Java is a powerful, general-purpose programming environment and one of the most widely used programming languages in the world. From it’s inception, designers of Java focused on creating a language paradigm that is simple, object-oriented, and platform independent. These are just some aspects of the language which often make it a preferred choice for developing cutting-edge, enterprise-level applications.

Java is considered a higher-level programming language that enables application developers to “write once, run anywhere” meaning that code written and compiled in a certain environment can run on all platforms regardless of computer architecture. Over the past twenty years, Java has remained a go-to language for use in projects of all sizes… now running on over three billion devices!

This post provides a brief look at the history of the programming language, and its’ key benefits to application developers. Core concepts around this topic are important to understand for any software engineer looking to learn and work with Java. Towards the end of this post, I’ve included a few of the most popular questions asked about this topic to aid in preparation for software engineering interviews.

What is Java?

The Java programming language was originally developed by Sun Microsystems, first released in 1995 as a core component of the company’s Java platform (Java 1.0 [J2SE]). James Gosling from Sun Microsystems, best known as the founder of Java, along with his team, began designing the first version primarily aimed at programming home appliances which are controlled by a wide variety of computer processors. Since its release, it has seen tremendous advancements in capabilities and as a result (to-date) — all Android apps are based on Java and 90 percent of Fortune 500 companies use Java as a server-side language for backend development. The language supports many configurations and is suitable for a variety of platforms including J2EE for Enterprise Applications, and J2ME for Mobile Applications.

Language Version Timeline

Key features that make Java great —

  • Object-Oriented − In Java, everything is an Object. Java is robust and can be easily extended since it is based on the Object model.
  • Platform Independent − Unlike many other programming languages including C and C++, when Java is compiled, it is not compiled into platform specific machine code, rather into platform independent bytecode. This bytecode can be distributed over the web and interpreted by the Virtual Machine (JVM) on whichever platform it is being run on.
  • Multi-threaded − This key feature allows developers to write programs that can perform many tasks simultaneously. This design feature allows for the construction of interactive applications that can run concurrently while maximizing the utilization of computing resources.
  • Interpreted − Java bytecode is translated on the fly to native machine instructions and is not stored anywhere. The development and deployment process can be more efficient and calculated since the linking is an incremental and light-weight process.
  • High Performance − With the use of Just-In-Time compilers, Java enables high performance. The JIT compiler is the component that converts Java’s intermediate language into native machine code as needed.
  • Memory Management — Java comes with a built-in garbage collector that automatically manages the memory used by programs.

Java Platform

The platform required to develop and execute Java programs consists of three key components that are important to understand — the Java Development Kit (JDK), the Java Runtime Environment (JRE), and the Java Virtual Machine (JVM). The JDK consists of the JRE (and other development tools) which includes the JVM — the graphic below depicts the relationship between the three components.

Breaking down components that make-up the platform —

Java Development Kit (JDK) — Composed of the tools required to compile, document, and package Java programs. This includes the JRE, an interpreter/class loader, a compiler, an archiver, and a documentation generator. Put simply, the JDK provides a complete toolkit for standard Java development and program execution.

Java Runtime Environment (JRE) — Although it is included in the JDK, it is also available for use as a standalone component. The JRE provides the minimum requirements for executing a Java application but doesn’t include all features required for development; it consists of the JVM and the some core libraries which enable end-users to run Java applications.

Java Virtual Machine (JVM) — The component responsible for executing the Java program line by line hence it is also known as a run-time interpreter. It interprets compiled Java bytecode for a computer’s hardware platform so that it can perform a Java program’s instructions.

Java Program Workflow

The graphic above depicts the high-level workflow for developers’ looking to create and execute Java programs. GeeksforGeeks is a great resource which provides additional details on the platform and how it works.

Understanding Java Garbage Collection

Java is object-oriented! It has a concept of object instances not raw bytes (in contrast to C), initializes object memory, has no pointer arithmetic and uses automatic memory management, called “garbage collection”. To optimize application execution, the JVM divides memory into stack and heap memory, put simply this is a built-in mechanism for both static and dynamic memory allocation. When Java programs run on the JVM, objects are created on the heap, and it’s the garbage collectors job to free up memory when these objects become unused.

Defining the Java Memory Models —

Stack Memory — Stores primitive values that are specific to a method and references to objects that are in a heap, referred from the method. When the method is finished execution, its’ corresponding stack frame is retired.

Heap Memory — New objects are created in heap space and the references to these objects are stored in stack memory. Objects have global access and can be accessed from anywhere in the application.

The table above lists a summary of built-in capabilities, specific to each memory model. How does the garbage collector determine when and how to free up memory? Read all about it and more!

Interview Questions and Answers

The remainder of the post includes a collection of interview questions which aim to highlight the basic ideas that are most important to understand. Obviously, there is far more to the language than what is covered in this post but I’ve found the best approach (at least when starting out programming) is to build a breadth of understanding in a few key concepts and go from there.

How is Java platform independent?

  • When you write Java code and compile it, a separate file is created for the converted source code, this file(with a .class extension) is known as “bytecode”. The main purpose of generating bytecode for a program is to achieve platform independence which allows code generated on one platform to be executed on another regardless of computer architecture.

Check out this resource for more information on how this differs from C, and C++!

What is an Object?

  • An instance of a class is called an object. The object has state and behavior. Whenever the JVM reads the “new” keyword, it will create an instance of that class.

What is a Constructor?

  • When a new object is created in the program, a constructor (can have more than one) gets invoked corresponding to the class.
  • The constructor is a method which has the same name as the class name and defines the state of the object being created.

What are the primary Object Oriented Programming concepts?

  • Inheritance
  • Encapsulation
  • Polymorphism
  • Abstraction

Read more about OOP!

What is the significance of the following Java code: public static void main (String[] args)?

This is the line at which a program will start executing. All Java applications begin execution by calling the main method.

  • The keyword public is an access specifier, which allows the programmer to control the visibility of class members.
  • The keyword static allows main to be called without having to instantiate a particular instance of the class.
  • The keyword void tells the compiler that the main method does not return a value.

At a high-level, describe how Java’s garbage collector works?

The garbage collector’s job is to automate memory management as objects are created, referenced, and deemed no longer needed by a program.

The main component of the garbage collection process is a “mark and sweep algorithm”. So how does it work at a high-level?

  • The garbage collector scans Java’s dynamic memory areas for objects that are referenced.
  • Unreferenced objects are identified and marked as ready for garbage collection. Two common ways objects can become unreferenced is by nulling the reference to an instance, or by assigning a reference to another object.
  • Marked objects are deleted, and memory is compacted by moving referenced objects with allocated memory together forming a contiguous block on the heap. This makes it easier to allocate memory to new objects as program execution continues.

Garbage Collection Algorithm

Congrats on making it this far! In summary, the focus of this post was to cover a few very important concepts and equip developers’ (current and future) with a baseline of understanding to aid in continued learning!

In this post we —

  • Briefly looked at the history of the Java programming language
  • Highlighted the components that make-up the Java platform
  • Identified features which aid in making Java the most popular programming language around
  • Explained “garbage collection” – an extremely unique & powerful memory management mechanism built-in to Java

Check out Java Fundamentals (Part 2) for a continued dive into the Java programming language. The post looks at common data structures provided by the core Java libraries, as well as important keywords and concepts in object-oriented programming overall.

Note: The word platform was mentioned several times in this post when discussing the benefits of Java. A platform is essentially just a machine running an operating system — Check out the link below to learn more about it!

And if you’d like, follow me here! I’ll be continuing to add content related to software engineering concepts. Soon-to-come is a practical look at multithreading, an overview of the software development lifecycle (SDLC), and a brief glimpse into Agile methodologies as they are applied in the real world.

Какая основная идея языка?

Кроссплатформенность – «написано/скомпилировано однажды, запускается везде» (compile once, run anywhere).

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

Байт-код Java – набор инструкций, исполняемых виртуальной машиной Java.

Каждый код операции байт-кода – один байт. Используются не все 256 возможных значений кодов операций.

51 из них зарезервированы для использования в будущем.

За счет чего обеспечивается кросс-платформенность?

Java Virtual Machine (JVM) – виртуальная машина Java – основная часть исполняющей системы Java, так называемой Java Runtime Environment (JRE).

Виртуальная машина Java исполняет байт-код Java, предварительно созданный из исходного текста Java-программы компилятором Java (javac). JVM может также использоваться для выполнения программ, написанных на других языках программирования.

Например, исходный код на языке Ada может быть скомпилирован в байт-код Java, который затем может выполниться с помощью JVM.

Какие преимущества у JAVA?

  • Объектно-ориентированный: все является объектом. Дополнение может быть легко расширено.
  • Платформонезависимый
  • Простой для понимания: основные концепции ООП.
  • Безопасный: методы проверки подлинности основаны на шифровании с открытым ключом.
  • Архитектурно-нейтральным: компилятор генерирует архитектурно-нейтральные объекты формата файла, что делает скомпилированный код исполняемым на многих процессорах, с наличием системе Java Runtime.
  • Портативный: архитектурно-нейтральный и не имеющий зависимости от реализации аспектов спецификаций – все это делает Java портативным. Компилятор в Java написан на ANSI C с чистой переносимостью, который является подмножеством POSIX.
  • Прочный: прилагает усилия, чтобы устранить ошибки в различных ситуациях, делая упор в основном на время компиляции, проверку ошибок и проверку во время выполнения.
  • Язык для распределенного программирования и комфортной удаленной совместной работы. Специфическая для Java методология распределенных вычислений называется Remote Method Invocation (RMI). RMI позволяет использовать все преимущества Java: безопасность, независимость от платформы и объектно-ориентированное программирование для распределенных вычислений.
  • Автоматическое управление памятью
  • Многопоточность
  • Стабильность и сообщество

Какие недостатки у JAVA?

  • Платное коммерческое использование. Oracle с 2019 взимает плату за использование Java Standard Edition 8 в «коммерческих целях».
  • Низкая производительность (из-за компиляции и абстракции с помощью виртуальной машины, очистки памяти, взаимная блокировка потоков).
  • Отсутствие нативного дизайна для создания графического интерфейса пользователя (GUI). Есть Swing, SWT, JavaFX, JSF …но не катят.
  • Многословный и сложный код. длинные, чрезмерно сложные предложения затрудняют чтение и просмотр кода. Как и естественные языки, многие языки программирования высокого уровня содержат лишнюю информацию.

Что такое JDK? Что в него входит?

Java Development Kit (JDK) – комплект разработчика приложений на языке Java:

  • исполнительная система Java (JRE: Java Virtual Machine (JVM) + библиотеки Java-классов).
  • компилятор Java (javac)
  • стандартные библиотеки классов Java, примеры, документацию, утилиты (вспомогательная компьютерная программа в составе общего программного обеспечения для выполнения специализированных типовых задач, связанных с работой оборудования и операционной системы)

JDK позволяет разработчикам создавать программы, которые могут выполняться и запускаться посредством JVM и JRE;

Что такое JRE? Что в него входит?

Java Runtime Environment (JRE среда выполнения для Java) – минимальная реализация виртуальной машины, необходимая для исполнения Java-приложений, без компилятора и других средств разработки: Java Virtual Machine + и библиотеки Java-классов.

Как JRE работает с JVM

Виртуальная машина Java — программное обеспечение, отвечающее за выполнение Java-программ. JRE — это программа, которая берет ваш Java-код, объединяет его с необходимыми библиотеками и запускает JVM для его выполнения. JRE содержит программное обеспечение и библиотеки, которые требуются для работы вашей программы. Например, загрузчик классов Java является частью JRE. Эта важная часть программного обеспечения загружает скомпилированный Java-код в память и соединяет с соответствующими библиотеками. В этом многоуровневом представлении JVM создается средой выполнения Java. С точки зрения пакета, JRE содержит JVM, как показано на рисунке:

Что такое JVM?

Java Virtual Machine (JVM) – это программа, предназначенная для выполнения других программ.

Это основная часть JRE. Исполняет байт-код Java, предварительно созданный из исходного текста Java-программы компилятором Java (javac). JVM может также использоваться для выполнения программ, написанных на других языках программирования.

Например, исходный код на языке Ada может быть скомпилирован в байт-код Java, который затем может выполниться с помощью JVM

JVM имеет две основные функции:

  1. Позволяет запускать Java-приложения на любых устройствах или операционных системах.
  2. Управляет и оптимизирует память, используемую приложением.

Что такое byte code?

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

Что такое загрузчик классов (classloader)?

Загрузчик классов является частью JRE, которая динамически загружает Java классы в JVM.

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

Загрузчик классов отвечает за поиск библиотек, чтение их содержимого и загрузку классов, содержащихся в библиотеках. Эта загрузка обычно выполняется «по требованию», поскольку она не происходит до тех пор, пока программа не вызовет класс. Класс с именем может быть загружен только один раз данным загрузчиком классов.

При запуске JVM, используются три загрузчика классов:

  • Bootstrap class loader (Загрузчик класса Bootstrap)
  • Extensions class loader (Загрузчик класса расширений)
  • System class loader (Системный загрузчик классов)

Загрузчик класса Bootstrap – загружает основные библиотеки Java, расположенные в папке /jre/lib. Этот загрузчик является частью ядра JVM, написан на нативном коде.

Загрузчик класса расширений – загружает код в каталоги расширений. /jre/lib/ext, или любой другой каталог, указанный системным свойством java.ext.dirs.

Системный загрузчик – загружает код, найденный в java.class.path, который сопоставляется с переменной среды CLASSPATH. Это реализуется классом sun.misc.Launcher$AppClassLoader.

Загрузчик классов выполняет три основных действия в строгом порядке:

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

    Пользовательский загрузчик классов

    Загрузчик классов написан на Java. Поэтому возможно создать свой собственный загрузчик классов, не понимая тонких деталей JVM. У каждого загрузчика классов Java есть родительский загрузчик классов, определенный при создании экземпляра нового загрузчика классов или в качестве системного загрузчика классов по умолчанию для виртуальной машины.

    Что делает возможным следующее:

    • загружать или выгружать классы во время выполнения (например, динамически загружать библиотеки во время выполнения, даже из ресурса HTTP). Это важная особенность для:
      • реализация скриптовых языков;
      • использование bean builders;
      • добавить пользовательскую расширение;
      • позволяя нескольким пространствам имен общаться. Например, это одна из основ протоколов CORBA / RMI;

      Что такое JIT?

      JIT-компиляция (англ. Just-in-time compilation, компиляция «на лету»), динамическая компиляция (англ. dynamic translation) – технология увеличения производительности программных систем, использующих байт-код, путём компиляции байт-кода в машинный код или в другой формат непосредственно во время работы программы.

      Что такое сборщик мусора?

      Способ автоматического управления памятью.

      Сборщик мусора (Garbage Collector) должен делать всего две вещи:

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

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

      Обнаружение мусора

      Существует два подхода к обнаружению мусора:

      • Reference counting;
      • Tracing;

      Reference counting (подсчёт ссылок).

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

      Главным минусом такого подхода является сложность обеспечения точности счетчика. Также при таком подходе сложно выявлять циклические зависимости (когда два объекта указывают друг на друга, но ни один живой объект на них не ссылается), что приводит к утечкам памяти.

      Tracing (трассировка)

      – живыми могут считаться только те объекты, до которых мы можем добраться из корневых точек (GC Root) и те объекты, которые доступны с живого объекта. Всё остальное – мусор.

      Существует 4 типа корневых точки:

      • Локальные переменные и параметры методов;
      • Потоки;
      • Статические переменные;
      • Ссылки из JNI.

      Самое простое java приложение будет иметь корневые точки:

      • Локальные переменные внутри main() метода и параметры main() метода;
      • Поток который выполняет main();
      • Статические переменные класса, внутри которого находится main() метод.

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

      Очистка от мусора

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

      • Copying collectors
      • Mark-and-sweep

      При Copying collectors подходе память делится на две части «from-space» и «to-space», при этом сам принцип работы такой:

      • Объекты создаются в «from-space»;
      • Когда «from-space» заполняется, приложение приостанавливается;
      • Запускается сборщик мусора. Находятся живые объекты в «from-space» и копируются в «to-space»;
      • Когда все объекты скопированы «from-space» полностью очищается;
      • «to-space» и «from-space» меняются местами.

      Главный плюс такого подхода в том, что объекты плотно забивают память.

      Минусы подхода:

      1. Приложение должно быть остановлено на время, необходимое для полного прохождения цикла сборки мусора;
      2. В худшем случае (когда все объекты живые) «form-space» и «to-space» будут обязаны быть одинакового размера.

      Алгоритм работы mark-and-sweep можно описать так:

      • Объекты создаются в памяти;
      • В момент, когда нужно запустить сборщик мусора приложение приостанавливается;
      • Сборщик проходится по дереву объектов, помечая живые объекты;
      • Сборщик проходится по всей памяти, находя все не отмеченные куски памяти и сохраняя их в «free list»;
      • Когда новые объекты начинают создаваться они создаются в памяти доступной во «free list».

      Минусы этого способа:

      1. Приложение не работает пока происходит сборка мусора;
      2. Время остановки напрямую зависит от размеров памяти и количества объектов;
      3. Если не использовать «compacting» память будет использоваться не эффективно.

      Сборщики мусора HotSpot VM

      Они используют комбинированный подход Generational Garbage Collection , который позволяет использовать разные алгоритмы для разных этапов сборки мусора.

      Этот подход опирается на том, что:

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

      Как работает сборщик мусора?

      Механизм сборки мусора – это процесс освобождения места в куче, для возможности добавления новых объектов.

      Объекты создаются посредством оператора new , тем самым присваивая объекту ссылку.

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

      Объекты, на которые отсутствуют ссылки, принято называть мусором (garbage), который будет удален.

      Виртуальная машина Java, применяя механизм сборки мусора, гарантирует, что любой объект, обладающий ссылками, остается в памяти — все объекты, которые недостижимы из исполняемого кода, ввиду отсутствия ссылок на них, удаляются с высвобождением отведенной для них памяти. Точнее говоря, объект не попадает в сферу действия процесса сборки мусора, если он достижим посредством цепочки ссылок, начиная с корневой (GC Root) ссылки, т.е. ссылки, непосредственно существующей в выполняемом коде.

      Память освобождается сборщиком мусора по его собственному «усмотрению». Программа может успешно завершить работу, не исчерпав ресурсов свободной памяти или даже не приблизившись к этой черте и поэтому ей так и не потребуются «услуги» сборщика мусора.

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

      Какие разновидности сборщиков мусора реализованы в виртуальной машине HotSpot?

      Java HotSpot VM предоставляет разработчикам на выбор четыре различных сборщика мусора:

        Serial (последовательный) — самый простой вариант для приложений с небольшим объемом данных и не требовательных к задержкам. На данный момент используется сравнительно редко, но на слабых компьютерах может быть выбран виртуальной машиной в качестве сборщика по умолчанию. Использование Serial GC включается опцией:

      -XX:+UseSerialGC
      -XX:+UseParallelGC
      -XX:+UseConcMarkSweepGC

      Что такое Heap и Stack память в Java?

      Heap (куча) используется Java Runtime для выделения памяти под объекты и классы.

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

      Stack (стек) это область хранения данных также находящееся в общей оперативной памяти (RAM) только для одного потока.

      Всякий раз, когда вызывается метод, в памяти стека создается новый блок, который содержит примитивы и ссылки на другие объекты в методе. Как только метод заканчивает работу, блок также перестает использоваться, тем самым предоставляя доступ для следующего метода. Размер стековой памяти намного меньше объема памяти в куче. Стек в Java работает по схеме LIFO (Последний-зашел-Первый-вышел)

      Различия между Heap и Stack

      • Куча используется всеми частями приложения в то время как стек используется только одним потоком исполнения программы.
      • Всякий раз, когда создается объект, он всегда хранится в куче, а в памяти стека содержится лишь ссылка на него. Память стека содержит только локальные переменные примитивных типов и ссылки на объекты в куче.
      • Объекты в куче доступны с любой точке программы, в то время как стековая память не может быть доступна для других потоков, только для одного потока.
      • Стековая память существует лишь какое-то время работы программы, а память в куче живет с самого начала до конца работы программы.
      • Если память стека полностью занята, то Java Runtime бросает исключение: java.lang.StackOverflowError Если заполнена память кучи, то бросается исключение: java.lang.OutOfMemoryError: Java Heap Space
      • Размер памяти стека намного меньше памяти в куче.
      • Из-за простоты распределения памяти, стековая память работает намного быстрее кучи.

      Верно ли утверждение, что примитивные типы данных всегда хранятся в стеке, а экземпляры ссылочных типов данных в куче?

      Не совсем. Примитивное поле экземпляра класса хранится не в стеке, а в куче. Любой объект (всё, что явно или неявно создаётся при помощи оператора new) хранится в куче.

      Каким образом передаются переменные в методы, по значению или по ссылке?

      В Java параметры всегда передаются только по значению, что определяется как «скопировать значение и передать копию». С примитивами это будет копия содержимого. Со ссылками – тоже копия содержимого, т.е. копия ссылки. При этом внутренние члены ссылочных типов через такую копию изменить возможно, а вот саму ссылку, указывающую на экземпляр – нет.

      Java haqqında

      Əgər siz mobil qadjet, smartfon işlətmirsinizsə, Amazon, Ebay, Linkedin şirkətləri barədə məlumatınız yoxdursa, komputerinizə Microsoft Office proqramlarından başqa heçnə yazılmayıbsa onda məqaləni bağlayın – Siz Javadan çox uzaqsınız (açığı onda məqalə necə əlinizə düşüb, bilmirəm). Yox, əgər oxumağa davam eləmək istəyirsinizsə, hazır olun. Sizə ən maraqlı proqramlaşdırma dillərindən biri olan Java haqqında danışacağam. Java dünyaya 23 May 1995-ci ildə “Sun Microsystems” şirkətində gəldi. Yeri gəlmişkən, bir müddət sonra bu şirkəti onun Java adlı məhsulu ilə birgə Oracle alır. Yarandıqda bu balaca proqramlaşdırma dilinin adı Oak (Palıd) idi. Jeyms Qoslinq onu əslində kiçik elektron məişət cihazları üçün yaratmışdı. Az müddət keçdikdən sonra o böyüdü və adını indi bildiyimiz Javaya dəyişdi. Deyilənə görə Qoslinq bu adı sevdiyi Java kofesinin şərəfinə dəyişdi. Bəzi mənbələrdə isə ümumiyyətlə Javanın ilkin olaraq bir kiçik kofe aparatı üçün yazıldığı qeyd olunur. Böyüdükdə təbii ki, gördüyü işin də həcmi genişləndi. Hal hazırda Javada klient proqramlarından tutmuş server təminatına qədər, köhnə mobil oyunlarından tutmuş müasir Android tətbiqlərinə qədər milyonlarla proqram təminatı yazılır. Bunlar barədə birazdan daha ətraflı danışacağıq. İndi isə istərdim ki, siz Javaya həsr olunmuş kiçik komedik bir kinoya baxasınız. (çox maraqlıdır)

      Bənzər xəbər

      Bir ‘Java’ proqramçısı illik nə qədər qazanır? Necə ‘Java’ proqramçısı ola bilərəm?

      Kinoya baxdız? Maraqlıdır? Yəqinki başa düşdüz niyə Java belə geniş yayılıb. Sərhədsizlik, asanlıq, azadlıq, geniş imkanlar. Dil özündə bir növ gənclik üsyanı daşıyırdı və bu da onun qısa bir zamanda sürətlə yayılmasına səbəb oldu. Düzdür indi Node.js, C#, Dart, Go kimi yeni dillər yaranıb, Javanın artıq 22 yaşı var. Bəli, bu rəqəm artıq bir proqramlaşdırma dili üçün qoca sayılır. Amma necə deyərlər “old but gold”. Dil hələ də o aktivliyini itirməyib. Əmin olmaq üçün dice.com saytında “Java” dilini axtarışa daxil edin və qlobal bazarda nə qədər vakansiya mövcud olduğunu özünüz görəcəksiz. Yox, əgər siz ölkədaxilində iş düşünürsünzsə o işi özünüz də qura bilərsiniz. Javanı bildikdə siz Android sistemi üçün mükəmməl tətbiqlər yaza biləcəksiniz. Bilmək olmaz, bəlkə siz Angrybirds kimi bir oyun yazacaqsınız? Bəlkə siz yeni bir fotoredaktor, və ya videoredaktor yazacaqsız? Ola bilər ki, tam ciddi bir hesablama sistemi yaratdınız. Sərhəd yoxdur. Nə istəsəz yaradın. (bircə subway surfers-dən başqa,xahiş edirəm. O oyunu hələdə metroda oynayan görürəm).

      Java öyrənmək üçün kurs? Həm də Bakıda. Buradan tanış ola bilərsiniz.

      Mobildən o qədər danışdım ki, desktop yaddan çıxdı. Siz Gmail işlədirsiz? Bilirsiz ki o da Javada kodlanıb? İçərisində mürəkəb hesablama mexanizmi olan bir çox saytların “backend” hissəsində məhz Java durur. Masaüstü oyunların sayı o qədərdə çox deyil. Amma Javada yazılmış bir oyun sizə deyə bilərəm hansını ki mütləq ki, görmüsüz bəlkə oynamısız da. Minecraft! Bəli bəli. Bu yekəpikselləri olan maraqlı sərhədsiz online oyun məhz Javada yazılmışdır.

      Oracle şirkətinin verdiyi rəsmi məlumata görə, hal hazırda 3 milyardan çox cihaz Java ilə işləyir. Bu o deməkdir ki siz Javadan istifadə edərək “hardware” ixtiralar da edə bikərsiniz.

      Goldman Sachs, Citigroup, Barclays, Standard Charted şirkətlərini tanıyırsız? (Wolf of Wall Street kinosundaki investisiya şirkətlərinin bənzərləri). Yəgin onların hər saniyə milyonlarla məlumatı hesabladığını başa düşürsünüz. Baxın bu şirkətlərin proqram təminatları da Javada yazılır. Gəldik çatdıq məqalənin sonuna. Düzdür mən sizə böyük hesabatlar alqoritmlar vermədim. Məqsədim sizi maraqlandırmaq və sizə bu dili öyrənməyə motivasiya vermək idi. Və məncə mən buna nail oldum. Ümüdvaram ki, bu məqaləni oxuyandan sonra bir neçə insan bu dili öyrənəcək və yaxın zamanlarda maraqlı proqramlarla bizim marağımızı cəlb edəcəklər. 1 dəqiqə, hələ bitmədi. “Bu dili necə və hansı vasitələrlə öyrənə bilərik?” – desəz, sizə bir şad xəbər verə bilərik. 1 il müddətində sizi mütəxəssis səviyyəsində yetişdirə biləcək və qlobal sertifaktla təmin edəcək IT Kurs – Step IT Akademiya Java üzrə proqram təminatının yaradılması kurslarına start verib. Nə üçün Java öyrənməliyik sualına isə ən yaxşı cavabı elə Akademiyanın özü verir.

Comments are closed, but trackbacks and pingbacks are open.