-module(hello).
-export([start/0]).
start() ->
io:fwrite('Hello, World!').
Ask the right questions to secure the right Erlang R16B02 talent among an increasingly shrinking pool of talent.
Erlang R16B02 is a computer programming language developed by Ericsson, a leading telecommunications company, for the purpose of building robust, fault-tolerant systems. Released in 2013, it is a version of the Erlang language which was originally created in the late 1980s to improve telecommunication systems' development and operation. The language is highly concurrent and offers hot swapping, allowing code to be changed without stopping the system. It has been widely used in industries such as telecoms, banking, e-commerce, computer telephony and instant messaging. Erlang's open-source software is known for its performance and reliability, making it a vital tool in high availability systems development.
The next 20 minutes of the interview should attempt to focus more specifically on the development questions used, and the level of depth and skill the engineer possesses.
Erlang uses a 'let it crash' philosophy for error handling. This means that instead of trying to catch and handle every possible error, we allow the process to fail and rely on a supervisor process to restart it or take some other appropriate action.
In Erlang, lists are used when the number of elements is unknown or can change, whereas tuples are used when the number of elements is known and fixed. Additionally, lists are ordered collections of elements, while tuples are ordered collections of heterogeneous elements.
Erlang's lightweight processes, message-passing concurrency model, and preemptive scheduling make it well-suited for developing concurrent applications. Additionally, its built-in support for fault tolerance and distribution contributes to the reliability and scalability of such applications.
In Erlang, processes communicate using a message-passing mechanism. Messages are sent asynchronously and stored in a mailbox until the receiving process is ready to process them.
Erlang R16B02 has several key features such as concurrency, fault tolerance, distribution, hot swapping, and support for real-time systems.
Communication skills are vital in software development to ensure everyone in the team understands the project goals and tasks.
OTP is a set of Erlang libraries, which a competent Erlang developer should be familiar with.
Software development often involves working in teams, so good teamwork skills are essential for this role.
Erlang is a concurrent programming language, therefore, a strong understanding of this concept is key for a developer in this role.
Problem-solving skills are vital for developers, as they are often faced with complex issues that need innovative solutions.
A good candidate should have a solid understanding of the version of Erlang they will be using, as it is critical for developing efficient and reliable software.
The next 20 minutes of the interview should attempt to focus more specifically on the development questions used, and the level of depth and skill the engineer possesses.
Erlang discourages shared state due to the complexities it introduces in concurrent systems. However, when necessary, shared state can be managed using various mechanisms such as message passing, process dictionaries, ETS tables, or database systems like Mnesia.
ETS (Erlang Term Storage) and DETS (Disk Erlang Term Storage) are two types of storage tables in Erlang. ETS tables are stored in memory and therefore provide fast access times, but are lost if the Erlang node is stopped. DETS tables, on the other hand, are stored on disk and thus persist across node restarts, but have slower access times.
Hot code swapping is a feature in Erlang that allows you to change the code of a running system without stopping or restarting it. This is done using the module system, where a new version of a module can be loaded while the old version is still running.
Erlang provides built-in support for distributed systems. This can be achieved by creating multiple Erlang nodes and using the ! operator to send messages between processes running on different nodes. Additionally, the global module can be used to register processes that are visible across all nodes.
Both spawn and spawn_link are used to create a new process in Erlang. However, spawn_link also establishes a link between the calling process and the new process, which means that if either process terminates, the other process will also be terminated.
At this point, a skilled Erlang R16B02 engineer should demonstrate advanced knowledge of Erlang syntax and OTP principles, experience with concurrent programming, and problem-solving skills. Red flags include struggles with technical questions or lack of real-world experience in managing complex Erlang systems.
-module(hello).
-export([start/0]).
start() ->
io:fwrite('Hello, World!').
-module(test).
-export([start/0]).
start() ->
X = 5,
Y = 10,
Z = X + Y,
io:fwrite('~p~n', [Z]).
-module(listtest).
-export([start/0]).
start() ->
List = [1,2,3,4,5],
NewList = lists:reverse(List),
io:fwrite('~p~n', [NewList]).
-module(concurrency).
-export([start/0]).
start() ->
spawn(fun() -> io:fwrite('Hello from a new process!') end).
-module(recordtest).
-export([start/0]).
-record(person, {name, age}).
start() ->
P = #person{name = 'John', age = 30},
io:fwrite('~p is ~p years old.~n', [P#person.name, P#person.age]).
-module(advanced).
-export([start/0]).
start() ->
Factorial5 = lists:foldl(fun(X, Acc) -> X * Acc end, 1, lists:seq(1, 5)),
io:fwrite('Factorial of 5 is ~p.~n', [Factorial5]).
The final few interview questions for a Erlang R16B02 candidate should typically focus on a combination of technical skills, personal goals, growth potential, team dynamics, and company culture.
In Erlang's OTP framework, gen_server is a generic server behaviour for implementing server processes, gen_fsm is a generic finite state machine behaviour for implementing processes that behave as finite state machines, and gen_event is a generic event handling behaviour for implementing event-driven processes.
Erlang provides several mechanisms to build fault-tolerant applications, such as links and monitors for process supervision, the 'let it crash' philosophy for error handling, and hot code swapping for system upgrades without downtime.
In Erlang, synchronous message passing involves a process sending a message and then waiting for a response before it can continue. Asynchronous message passing, on the other hand, involves a process sending a message and then continuing with its execution without waiting for a response.
Erlang provides several mechanisms to handle large amounts of data, such as using distributed Erlang nodes, ETS or DETS tables for in-memory or disk-based storage, respectively, or the Mnesia database for more complex data storage needs.
In Erlang, a function is named and defined in a module, while a fun is an anonymous function that is defined and used within another function. Funs can capture variables from their surrounding scope, a feature known as closure.
Back-end App Developer
Front-end Web Developer
Full Stack Developer (Java)
Full Stack Developer (.Net)
Full Stack Developer (MEAN)
Full Stack Developer (MERN)
DevOps Engineer
Database Engineer (AzureSQL)
Database Engineer (Oracle)
Database Engineer (General)
Solution Architect (.NET)
Solution Architect (Java)
Solution Architect (Ruby)
Solution Architect (Python)
AI Engineer (Python)
Sr. AI Engineer (Python)
AI Strategist (Python)
Business Intelligence Engineer
Systems Analyst
Mainframe Developer (COBOL)
Mainframe Developer (General)