Design by Contract (DbC) is a concept in software development introduced by Bertrand Meyer. It describes a method to ensure the correctness and reliability of software by defining clear "contracts" between different components (e.g., methods, classes).
In DbC, every software component is treated as a contract party with certain obligations and guarantees:
Preconditions
Conditions that must be true before a method or function can execute correctly.
→ Responsibility of the caller.
Postconditions
Conditions that must be true after the execution of a method or function.
→ Responsibility of the method/function.
Invariant (Class Invariant)
Conditions that must always remain true throughout the lifetime of an object.
→ Responsibility of both the method and the caller.
Clear specification of responsibilities.
More robust and testable software.
Errors are detected early (e.g., through contract violations).
class BankAccount {
private double balance;
// Invariant: balance >= 0
void withdraw(double amount) {
// Precondition: amount > 0 && amount <= balance
if (amount <= 0 || amount > balance) throw new IllegalArgumentException();
balance -= amount;
// Postcondition: balance has been reduced by amount
}
}
Clear contracts reduce misunderstandings.
Easier debugging, as violations are detected immediately.
Supports defensive programming.
Requires extra effort to define contracts.
Not directly supported by all programming languages (e.g., Java and C++ via assertions, Python with decorators; Eiffel supports DbC natively).
A daemon (pronounced like "day-mon", not like the English word "demon") is a background process that runs on a computer system—typically without direct user interaction.
Starts automatically during system boot.
Runs continuously in the background.
Performs tasks without user input.
Listens for requests from other programs or network connections.
cron
daemon: Executes scheduled tasks (e.g., daily backups).
sshd
: Handles incoming SSH connections.
httpd
or nginx
: Web server daemons.
cupsd
: Manages print jobs.
On Unix/Linux systems, daemon process names often end in "d" (e.g., httpd
, systemd
).
Daemons are typically launched at system startup by init systems like systemd
or init
.
The word comes from Greek mythology, where a “daimon” was a guiding spirit or invisible force—aptly describing software that works quietly behind the scenes.
Perl Compatible Regular Expressions (PCRE) are a type of regular expression syntax and engine that follows the powerful and flexible style of the Perl programming language. They offer advanced features that go beyond the basic regular expressions found in many older systems.
Perl was one of the first languages to introduce highly expressive regular expressions. The PCRE library was created to bring those capabilities to other programming languages and tools, including:
Python (similar via the re
module)
JavaScript (with slight differences)
pcregrep
(a grep version supporting PCRE)
Editors like VS Code, Sublime Text, etc.
✅ Lookahead & Lookbehind:
(?=...)
– positive lookahead
(?!...)
– negative lookahead
(?<=...)
– positive lookbehind
(?<!...)
– negative lookbehind
✅ Non-greedy quantifiers:
*?
, +?
, ??
, {m,n}?
✅ Named capturing groups:
(?P<name>...)
or (?<name>...)
✅ Unicode support:
\p{L}
matches any kind of letter in any language
✅ Assertions and anchors:
\b
, \B
, \A
, \Z
, \z
✅ Inline modifiers:
(?i)
for case-insensitive
(?m)
for multiline matching, etc.
(?<=\buser\s)\w+
This expression matches any word that follows "user " using a lookbehind assertion.
PCRE are like the "advanced edition" of regular expressions — highly powerful, widely used, and very flexible. If you're working in an environment that supports PCRE, you can take advantage of rich pattern matching features inspired by Perl.
“Link Juice” is a term from Search Engine Optimization (SEO) that refers to the value or authority passed from one webpage to another through hyperlinks. This "juice" helps influence how well a page ranks in search engine results (especially Google).
When website A links to website B, it passes on some of its credibility or authority — that’s the "link juice." The more trusted and relevant site A is, the more juice it passes.
Authority of the linking site (e.g., a major news site vs. a small blog)
Number of outgoing links: The more links on a page, the less juice each one gets.
Follow vs. Nofollow: Only dofollow links typically pass link juice. Nofollow links (with rel="nofollow"
) usually don’t.
Link placement: A link within the main content has more value than one in the footer or sidebar.
Relevance: A link from a site with related content carries more weight.
A backlink from Wikipedia to your site gives you a ton of link juice — Google sees it as a sign of trust. A link from an unknown or spammy site, on the other hand, might do little or even harm your rankings.
The Levenshtein distance is a measure of the difference between two strings. It indicates how many single-character operations are needed to transform one string into the other. The allowed operations are:
Insertion of a character
Deletion of a character
Substitution of one character with another
The Levenshtein distance between "house"
and "mouse"
is 1, since only one letter (h → m) needs to be changed.
Levenshtein distance is used in many areas, such as:
Spell checking (suggesting similar words)
DNA sequence comparison
Plagiarism detection
Fuzzy searching in databases or search engines
For two strings a
and b
of lengths i
and j
:
lev(a, b) = min(
lev(a-1, b) + 1, // deletion
lev(a, b-1) + 1, // insertion
lev(a-1, b-1) + cost // substitution (cost = 0 if characters are equal; else 1)
)
There are also more efficient dynamic programming algorithms to compute it.
The "Happy Path" (also known as the "Happy Flow") refers to the ideal scenario in software development or testing where everything works as expected, no errors occur, and all inputs are valid.
Let’s say you’re developing a user registration form. The Happy Path would look like this:
The user enters all required information correctly (e.g., a valid email and secure password).
They click “Register.”
The system successfully creates an account.
The user is redirected to a welcome page.
➡️ No validation errors, no server issues, and no unexpected behavior.
Initial testing focus: Developers and testers often check the Happy Path first to make sure the core functionality works.
Basis for use cases: In documentation or requirements, the Happy Path is typically the main scenario before covering edge cases.
Contrasts with edge cases / error paths: Anything that deviates from the Happy Path (e.g., missing password, server error) is considered an "unhappy path" or "alternate flow."
In software development, a guard (also known as a guard clause or guard statement) is a protective condition used at the beginning of a function or method to ensure that certain criteria are met before continuing execution.
A guard is like a bouncer at a club—it only lets valid input or states through and exits early if something is off.
def divide(a, b):
if b == 0:
return "Division by zero is not allowed" # Guard clause
return a / b
This guard prevents the function from attempting to divide by zero.
Early exit on invalid conditions
Improved readability by avoiding deeply nested if-else structures
Cleaner code flow, as the "happy path" (normal execution) isn’t cluttered by edge cases
function login(user) {
if (!user) return; // Guard clause
// Continue with login logic
}
Swift (even has a dedicated guard
keyword):
func greet(person: String?) {
guard let name = person else {
print("No name provided")
return
}
print("Hello, \(name)!")
}
The Fully Qualified Domain Name (FQDN) is the complete and unique name of a computer or host on the internet or a local network. It consists of multiple parts that reflect a hierarchical structure.
An FQDN is made up of three main components:
Hostname – The specific name of a computer or service (e.g., www
).
Domain Name – The name of the higher-level domain (e.g., example
).
Top-Level Domain (TLD) – The highest level of the domain structure (e.g., .com
).
Example of an FQDN:
👉 www.example.com.
www
→ Hostname
example
→ Domain name
.com
→ Top-Level Domain
The trailing dot (.
) is optional and represents the root domain of the DNS system.
✅ Uniqueness: Each FQDN is globally unique and refers to a specific resource on the internet.
✅ DNS Resolution: It is used by DNS servers to find the IP address of websites and servers.
✅ SSL Certificates: An FQDN is often required for SSL/TLS certificates to ensure secure connections.
✅ Email Delivery: Mail servers use FQDNs to send emails to the correct hosts.
FQDN: mail.google.com
(fully specified)
Simple Domain: google.com
(can contain multiple hosts, e.g., www
, mail
, ftp
)
In summary, the FQDN is the complete address of a device or service on the internet, while a simple domain is a more general address.
An Early Exit is a programming technique where a function or algorithm terminates early when a specific condition is met. The goal is usually to make the code more efficient and easier to read.
function getDiscount($age) {
if ($age < 18) {
return 10; // 10% discount for minors
}
if ($age > 65) {
return 15; // 15% discount for seniors
}
return 0; // No discount for other age groups
}
Here, the Early Exit ensures that the function immediately returns a value as soon as a condition is met. This avoids unnecessary else
blocks and makes the code more readable.
function getDiscount($age) {
$discount = 0;
if ($age < 18) {
$discount = 10;
} else {
if ($age > 65) {
$discount = 15;
}
}
return $discount;
}
This version introduces unnecessary nesting, reducing readability.
Input validation at the start of a function (return
or throw
for invalid input)
Breaking out of loops early when the desired result is found (break
or return
)
An Early Exit improves readability, maintainability, and performance in code.
Vite is a modern build tool and development server for web applications, created by Evan You, the creator of Vue.js. It is designed to make the development and build processes faster and more efficient. The name "Vite" comes from the French word for "fast," reflecting the primary goal of the tool: a lightning-fast development environment.
The main features of Vite are:
Fast Development Server: Vite uses modern ES modules (ESM), providing an ultra-fast development server. It only loads the latest module, making the initial startup much faster than traditional bundlers.
Hot Module Replacement (HMR): HMR works extremely fast by updating only the changed modules, without needing to reload the entire application.
Modern Build System: Vite uses Rollup under the hood to bundle the final production build, enabling optimized and efficient builds.
Zero Configuration: Vite is very user-friendly and doesn’t require extensive configuration. It works immediately with the default settings, supporting many common web technologies out-of-the-box (e.g., Vue.js, React, TypeScript, CSS preprocessors, etc.).
Optimized Production: For production builds, Rollup is used, which is known for creating efficient and optimized bundles.
Vite is mainly aimed at modern web applications and is particularly popular with developers working with frameworks like Vue, React, or Svelte.