Object-oriented programming (OOP) is a programming paradigm based on the concept of "objects", which can contain data and code: data in the form of fields (often known as attributes or properties), and code, in the form of procedures (often known as methods). Also this is the place to talk about Modularization, Packages etc.
Functional programming is a programming paradigm where programs are constructed by applying and composing functions. It is a declarative programming paradigm in which function definitions are trees of expressions that map values to other values, rather than a sequence of imperative statements which update the running state of the program.
Website security is the act/practice of protecting websites from unauthorised access, use, modification, destruction, or disruption (important principles of modern web security, security best practices, Content Security Policy, CORS, OWASP Security Risks). GDPR, hashing, encryption, SSL topics can be covered here as well.
HTML (Hypertext Markup Language) is the code that is used to structure a web page and its content. For example, content could be structured within a set of paragraphs, a list of bulleted points, or using images and data tables.
CSS (Cascading Style Sheets) is the language used to style an HTML document. CSS describes how HTML elements should be displayed.
TypeScript, OOP in JavaScript, one of the main JS Frameworks (React/Angular/Vue)
Talking about Authorization and Autentification means to be knowledgeable about Cookies, Session, JWT, Token, OAuth. In simple terms, authentication is the process of verifying who a user is, while authorization is the process of verifying what they have access to. Being a Java engineer you suppose to know such stuff as Spring Security, JEE Security, etc.
GraphQL is a query language for your API, and a server-side runtime for executing queries using a type system you define for your data. GraphQL isn't tied to any specific database or storage engine and is instead backed by your existing code and data. GraphQL Best Practices (HTTP, JSON, Versioning, Nullability, Pagination, Server-side Batching and Caching)
JSON, YAML, XML (dom/sax/xpath), validation. For advance level is nice to know about schema evolution, about data serilization systems, platforms, frameworks, libraries, binary protocols - (Protobuf/Thrift, Kryo, Avro, Parquet)
Unix Compatible, Linux (Debian/Ubuntu, CentOS/RHEL), MS Windows, Mac OS X
Object-oriented design (OOD) is the process of using an object-oriented methodology to design a computing system or application. OOD Concepts: Coupling, Cohesion, Strong Encapsulation. OOD Principles: DRY, KISS, YAGNI, SOLID are software design principles, they are about clean code.
Software Development Life Cycle (SDLC) is a process used by the software industry to design, develop and test high-quality software. The SDLC aims to produce high-quality software that meets or exceeds customer expectations, reaches completion within times and cost estimates. There are a few of the most popular methodologies such as Scrum, Kanban, Waterfall, XP, but you can find another one or a mix of those.
The Open Systems Interconnection (OSI) model describes seven layers that computer systems use to communicate over a network.
IP address is the host identification number used for proper communication between devices. The IP address is a number assigned to a network interface, a group of interfaces (broadcast, multicast addresses) or to the entire computer network, used to identify network components and being one of the elements enabling them to communicate.
Network protocols are a set of rules, conventions, and data structures that dictate how devices exchange data across networks. In other words, network protocols can be equated to languages that two devices must understand for seamless communication of information, regardless of their infrastructure and design disparities.(DHCP, DNS, SSH, TCP/UDP, NTP, LDAP)
Short for virtual local area network, VLAN allows a network administrator to set up separate networks by configuring a network device, such as a router, without adjusting cabling. A VLAN allows a network to be divided, set up, and changed by a network administrator to organize and filter data accordingly.
Protocol - a set of rules or procedures for transmitting data between two or more entities of a communications system.
A web browser (commonly referred to as a browser) is a software application for retrieving, presenting, and traversing information resources on the World Wide Web. Although browsers are primarily intended to use the World Wide Web, they can also be used to access information provided by web servers in private networks or files in file systems. (Render, parsing, optimization etc.)
A relational database is a type of database. It uses a structure that allows us to identify and access data in relation to another piece of data in the database. Often, data in a relational database is organized into tables. There are most popular of them — SQL Server, PostgreSQL, MariaDB, MySQL, SQLite, Oracle, etc.
A NoSQL (originally referring to "non-SQL" or "non-relational") database provides a mechanism for storage and retrieval of data that is modeled in means other than the tabular relations used in relational databases. Talking about NoSQL DB is nice to know about CAP/PACELC, Key-value, document-oriented, column-oriented, map-reduce, graph-db, real-time, multi-model. The are plenty of NoSQL DBs and management systems: MongoDB, Redis, LiteDB, Apache Cassandra, RavenDB, CouchDB, etc.
ORMs stand for Object-Relational mapping, most popular are — Hibernate, Eclipse Link, Apache OpenJPA, etc. But happens that engineers don't use ORMs but use instead of that query builder. Data Persistence is a means for an application to persist and retrieve information from a non-volatile storage system. There are many ways to make data persist in Java.
A cloud database is a database that typically runs on a cloud computing platform and access to the database is provided as-a-service. Depends of the cloud could be different databases: Azure CosmosDB, Amazon DynamoDB etc.
A powerful search engine behind your database helps the customers in better finding. Here is nice to know ElasticSearch, Solr, Lucene, Indexing/Tokenization, Indexes, Ranking, Heavy Load, etc.
Set of properties that a database transaction in a relational database is supposed to have (Atomicity, Consistency, Isolation, Durability)
A transaction can be defined as a group of tasks. A single task is the minimum processing unit which cannot be divided further.
The N+1 query problem happens when your code executes N additional query statements to fetch the same data that could have been retrieved when executing the primary query.
Database normalization is the process of structuring a database, usually a relational database, in accordance with a series of so-called normal forms in order to reduce data redundancy and improve data integrity. It was first proposed by Edgar F. Codd as part of his relational model.
A database index is a data structure that improves the speed of data retrieval operations on a database table at the cost of additional writes and storage space to maintain the index data structure.
This skill is nice to have while working with high-loaded RDBMS. DB design means you know how to read, write optimizations, aware of Scalability, partitioning replication, indexing, and other stuff.
When we consider a Java program, it can be defined as a collection of objects that communicate via invoking each other's methods. You need to know what do class, object, methods, instance variables mean, and many other basic things.
The Collection in Java is a framework that provides an architecture to store and manipulate a group of objects. Java Collections can achieve all the operations that you perform on data such as searching, sorting, insertion, manipulation, and deletion. Java Collection means a single unit of objects. Java Collection framework provides many interfaces (Set, List, Queue, Deque) and classes (ArrayList, Vector, LinkedList, PriorityQueue, HashSet, LinkedHashSet, TreeSet).
An exception is an unwanted or unexpected event, which occurs during the execution of a program i.e at run time, that disrupts the normal flow of the program’s instructions. You need a Robust Programming, which takes care of exceptional situations. Such code is known as Exception Handler.
Java I/O (Input and Output) is used to process the input and produce the output. Java uses the concept of a stream to make I/O operation fast. The java.io package contains nearly every class you might ever need to perform input and output (I/O) in Java. All these streams represent an input source and an output destination. The stream in the java.io package supports many data such as primitives, object, localized characters, etc.
Java is extremely backwards compatible. This means that your Java 5 or 8 program is guaranteed to run with a Java 8-13 Virtual Machine — with a few exceptions you don’t need to worry about for now. It obviously does not work the other way around, say your program relies on Java 13 features that are simply not available under a Java 8 JVM.
Java Concurrency is a term that covers multithreading, concurrency and parallelism on the Java platform. That includes the Java concurrency tools, problems and solutions. This Java concurrency tutorial covers the core concepts of multithreading, concurrency constructs, concurrency problems, costs, benefits related to multithreading in Java.
A cache is a memory buffer used to temporarily store frequently accessed data. It improves performance since data does not have to be retrieved again from the original source. Caching is actually a concept that has been applied in various areas of the computer/networking industry for quite some time, so there are different ways of implementing cache depending upon the use case.
JVM (Java Virtual Machine) is an abstract machine. It is a specification that provides runtime environment in which java bytecode can be executed. JVMs are available for many hardware and software platforms (i.e. JVM is platform dependent).
Spring Core
The Spring framework comprises many modules such as core, beans, context, expression language, AOP, Aspects, Instrumentation, JDBC, ORM, OXM, JMS, Transaction, Web, Servlet, Struts, etc. These modules are grouped into Test, Core Container, AOP, Aspects, Instrumentation, Data Access / Integration, Web (MVC / Remoting) as displayed in the following diagram.
Spring Boot
Spring Boot is an open-source Java-based framework used to create a micro Service. It is developed by the Pivotal Team and is used to build stand-alone and production-ready spring applications.
JavaFX is a Java library that is used to develop Desktop applications as well as Rich Internet Applications (RIA). The applications built in JavaFX can run on multiple platforms including Web, Mobile, and Desktops.
Swing in java is part of the Java foundation class which is lightweight and platform-independent. It is used for creating window-based applications. It includes components like button, scroll bar, text field, etc. Putting together all these components makes a graphical user interface.
Java AWT (Abstract Window Toolkit) is an API to develop Graphical User Interface (GUI) or windows-based applications in Java. Java AWT components are platform-dependent i.e. components are displayed according to the view of the operating system. AWT is heavyweight i.e. its components are using the resources of the underlying operating system (OS).
SWT is the software component that delivers native widget functionality for the Eclipse platform in an operating system-independent manner. It is analogous to AWT/Swing in Java with a difference - SWT uses a rich set of native widgets.
Play is a high-productivity web application framework for programming languages whose code is compiled and run on the JVM, mainly Java and Scala. It integrates the components and APIs we need for modern web application development.
The Java EE stands for Java Enterprise Edition, which was earlier known as J2EE and is currently known as Jakarta EE. It is a set of specifications wrapping around Java SE (Standard Edition). The Java EE provides a platform for developers with enterprise features such as distributed computing and web services. Java EE applications are usually run on reference run times such as microservers or application servers. Examples of some contexts where Java EE is used are e-commerce, accounting, banking information systems.
The Java ME stands for Java Micro Edition. It is a development and deployment platform of portable code for embedded and mobile devices (sensors, gateways, mobile phones, printers, TV set-top boxes). It is based on object-oriented Java. The Java ME has a robust user interface, great security, built-in network protocols, and support for applications that can be downloaded dynamically. Applications which are developed on Java ME are portable and can run across various devices and can also leverage the native capabilities of the device.
Integration testing is used to test a group of individual modules, components, or pieces of units. The main purpose of Integration testing is to find bugs when two or more modules are integrated. To check how two or more modules, components, or a different piece of code are will work together.
Unlike unit testing, which focuses on individual modules and classes, end-to-end (e2e) testing covers the interaction of classes and modules at a more aggregate level - closer to the kind of interaction that end-users will have with the production system.
The main objective of unit testing is to isolate written code to test and determine if it works as intended. A unit test typically comprises three stages: plan, cases, and scripting, and the unit test itself.
Measuring performance provides an important metric to help you assess the success of your app, site, or web service. For example, you can use performance metrics to determine how your app performs in comparison to a competitor or you can compare your app's performance across releases. The metrics you choose to measure should be relevant to your users, site, and business goals. They should be collected and measured in a consistent manner and analyzed in a format that can be consumed and understood by non-technical stakeholders.
Load testing is a great way to grab insights about how your application runs under heavy load, how all services interact, and to plan production capacity accordingly.
Test automation is the practice of running tests automatically, managing test data, and utilizing results to improve software quality. Automated testing is well-suited for large projects, projects that require testing the same areas over and over, and projects that have already been through an initial manual testing process.
“Test-driven development” refers to a style of programming in which three activities are tightly interwoven: coding, testing (in the form of writing unit tests) and design (in the form of refactoring).
In software engineering, behavior-driven development (BDD) is an agile software development process that encourages collaboration among developers, quality assurance testers, and customer representatives in a software project. BDD is an extension to the TDD concept, but instead of testing your code you are testing your product, and specifically that your product behaves as you desire it to.
Build tool is a program that automates the process of compiling, testing, packaging, and deploying source code in the most efficient manner. The most popular are Maven, Gradle, Ant.
Java Development Kit (JDK) is a software development environment used for developing Java applications and applets. It includes the Java Runtime Environment (JRE), an interpreter/loader (Java), a compiler (javac), an archiver (jar), a documentation generator (Javadoc), and other tools needed in Java development.
Java IDE (Integrated Development Environment) is a software application that enables users to write and debug Java programs more easily. Most IDEs have features such as syntax highlighting and code completion that helps users to code more easily. Usually, Java IDEs include a code editor, a compiler, a debugger, and an interpreter that the developer may access via a single graphical user interface. Java IDEs also provide language-specific elements such as Maven, Ant building tools, Junit, and TestNG for testing.
Version control, also known as source control, is the practice of tracking and managing changes to software code. Version control systems are software tools that help software teams manage changes to source code over time. Few of the most popular — Git, Mercurial, SVN, etc.
There are useful libraries for day-to-day projects, for example logging libraries like Log4j, JSON parsing libraries like Jackson,etc.
Containers are a form of operating system virtualization. A single container might be used to run anything from a small microservice or software process to a larger application. Inside a container are all the necessary executables, binary code, libraries, and configuration files. Compared to server or machine virtualization approaches, however, containers do not contain operating system images. This makes them more lightweight and portable, with significantly less overhead. In larger application deployments, multiple containers may be deployed as one or more container clusters. Such clusters might be managed by a container orchestrator such as Kubernetes.
CI (Continuous Integration) and CD (Continuous Delivery) are part of the DevOps culture in which you combine development and operational processes into a single and collaborative workflow to make sure the two teams are on the same page.There are many tools and prnciples within this scope of activity: Jenkins, CodeShip, TeamCity, CircleCI, GitLab, Travis, VSTS, etc.; Deployment strategies: Rolling, Blue-Green, Canarry deployments etc.
Monitoring a Java-based application’s performance is very significant. Performance problems in Java-based applications can have an impact on a business a lot. Troubleshooting inefficiencies requires implementing several monitoring techniques to track Java logs, metrics, infrastructure data, etc. For these needs the are many tools available on the market, just a list of a few of them: Zabbix, Nagios, Prometheus Monitoring, DataDog, NewRelic, Graphite/Graphana, SolarWinds AppOptics, LightStep, EJ Technologies, JProfiler, Pingdom Server Monitor. AWS CloudWatch, ELK; Google tracer, Istio; Request tracing (Sleuth, Zipkin, Euger), HaProxy, Nginx, ELB (CLB vs ALB, layer 4 vs 7), GLB, Eureka, Consul, Kubernetes Service Discovery.
AWS Lambda is an event-driven, serverless computing platform provided by Amazon as a part of Amazon Web Services. It is a computing service that runs code in response to events and automatically manages the computing resources required by that code. It was introduced in November 2014.
Azure Functions is an event driven, compute-on-demand experience that extends the existing Azure application platform with capabilities to implement code triggered by events occurring in Azure or third party service as well as on-premises systems.
Google Cloud Functions is a serverless execution environment for building and connecting cloud services. With Cloud Functions you write simple, single-purpose functions that are attached to events emitted from your cloud infrastructure and services.
IBM cloud computing is a set of cloud computing services for business offered by the information technology company IBM. IBM Cloud includes infrastructure as a service (IaaS), software as a service (SaaS) and platform as a service (PaaS) offered through public, private, and hybrid cloud delivery models, in addition to the components that make up those clouds.
SAP Cloud Platform is a platform as a service developed by SAP SE for creating new applications or extending existing applications in a secure cloud computing environment managed by SAP. The SAP Cloud Platform integrates data and business processes.
Heroku is a cloud platform as a service (PaaS) supporting several programming languages. One of the first cloud platforms, Heroku has been in development since June 2007, when it supported only the Ruby programming language, but now supports Java, Node.js, Scala, Clojure, Python, PHP, and Go.
OpenStack is a free, open standard cloud computing platform. It is mostly deployed as infrastructure-as-a-service (IaaS) in both public and private clouds where virtual servers and other resources are made available to users.
The CloudStack™ platform is a complete software suite used to create Infrastructure as a Service (IaaS) clouds. Target customers include service providers and enterprises.
DigitalOcean is a cloud infrastructure provider that provides cloud computing services to business entities. It is used to scale by deploying DigitalOcean applications that run parallel across multiple cloud servers without compromising performance.
Algorithm is a step-by-step procedure, which defines a set of instructions to be executed in a certain order to get the desired output. From the data structure point of view, following are some important categories of algorithms: Search; Sort; Insert; Update; Delete.
Serverless is a cloud-native development model that allows developers to build and run applications without having to manage servers.
High availability architecture is an approach to defining the components, modules, or implementation of services of a system that ensures optimal operational performance, even at times of high loads. Although there are no fixed rules for implementing High Availability systems, there are generally a few good practices that one must follow so that you gain the most out of the least resources.
Design patterns represent the best practices used by experienced object-oriented software developers. Design patterns are solutions to general problems that software developers faced during software development. These solutions were obtained by trial and error by numerous software developers over quite a substantial period of time. Few of them for example - Factory, Strategy, Observer, Middlewares, Singeltone, State.
Architecture AntiPatterns focus on the system-level and enterprise-level structure of applications and components. If design patterns are the good guys, then the anti-patterns are the bad guys. And sometimes a good guy can turn into a bad guy. This happens in Hollywood movies, but it also happens in software engineering.
REST and SOAP are 2 different approaches to online data transmission. Specifically, both define how to build application programming interfaces (APIs), which allow data to be communicated between web applications.
The microservice architecture enables the rapid, frequent and reliable delivery of large, complex applications. It also enables an organization to evolve its technology stack.
Choosing the mode of communication is a fundamental decision that needs to be taken with great care. Services must handle requests from the application’s clients. Furthermore, services often collaborate to handle those requests. Consequently, they must use an inter-process communication protocol. This skill is about (Message-Broker (RabbitMQ, Apache Kafka, ActiveMQ, Azure Service Bus); Message-Bus (Distribus, BusMQ), etc.)
An Event-Driven Architecture for data and applications is a modern design approach centered around data that describes “events” (i.e., something that just happened). Examples of events include the taking of measurement, the pressing of a button, or the swiping of a credit card. In an event-driven architecture, decoupled applications can asynchronously publish and subscribe to events via an event broker (modern messaging-oriented-middleware).
Service-Oriented Architecture (SOA) is a stage in the evolution of application development and/or integration. It defines a way to make software components reusable using the interfaces.
Data-driven development in software engineering accepts the central role that data in its primary form takes in the applications that software developers create.