“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.
A Partial Mock is a testing technique where only certain methods of an object are mocked, while the rest of the object retains its real implementation. This is useful when you want to stub or mock specific methods but keep others functioning normally.
When you want to test a class but isolate certain methods.
When some methods are difficult to test (e.g., they have external dependencies), but others should retain their real logic.
When you only need to stub specific methods to control test behavior.
Suppose you have a Calculator
class but want to mock only the multiply()
method while keeping add()
as is.
class Calculator {
public function add($a, $b) {
return $a + $b;
}
public function multiply($a, $b) {
return $a * $b;
}
}
// PHPUnit Test with Partial Mock
class CalculatorTest extends \PHPUnit\Framework\TestCase {
public function testPartialMock() {
// Create a Partial Mock for Calculator
$calculator = $this->getMockBuilder(Calculator::class)
->onlyMethods(['multiply']) // Only mock this method
->getMock();
// Define behavior for multiply()
$calculator->method('multiply')->willReturn(10);
// Test real add() method
$this->assertEquals(5, $calculator->add(2, 3));
// Test mocked multiply() method
$this->assertEquals(10, $calculator->multiply(2, 3));
}
}
Here, add()
remains unchanged and executes the real implementation, while multiply()
always returns 10
.
Partial Mocks are useful when you need to isolate specific parts of a class without fully replacing it. They help make tests more stable and efficient by mocking only selected methods.
A rate limit is a restriction on the number of requests a user or system can send to a server or API within a given time frame. It helps prevent overload, ensures fair resource distribution, and mitigates abuse (e.g., DDoS attacks or spam).
Fixed Window – A set number of requests within a fixed time window (e.g., max 100 requests per minute).
Sliding Window – A dynamic limit based on recent requests.
Token Bucket – Users get a certain number of "tokens" for requests, which regenerate over time.
Leaky Bucket – Requests are placed in a queue and processed at a controlled rate.
An API allows a maximum of 60 requests per minute per user.
A website blocks an IP after 10 failed logins within 5 minutes.
If you need to implement rate limits in web development, various techniques and tools are available, such as Redis, NGINX rate limiting, or middleware in frameworks like Laravel or Express.js.
Memcached is a distributed in-memory caching system commonly used to speed up web applications. It temporarily stores frequently requested data in RAM to avoid expensive database queries or API calls.
Key-Value Store: Data is stored as key-value pairs.
In-Memory: Runs entirely in RAM, making it extremely fast.
Distributed: Supports multiple servers (clusters) to distribute load.
Simple API: Provides basic operations like set
, get
, and delete
.
Eviction Policy: Uses LRU (Least Recently Used) to remove old data when memory is full.
Caching Database Queries: Reduces load on databases like MySQL or PostgreSQL.
Session Management: Stores user sessions in scalable web applications.
Temporary Data Storage: Useful for API rate limiting or short-lived data caching.
Memcached: Faster for simple key-value caching, scales well horizontally.
Redis: Offers more features like persistence, lists, hashes, sets, and pub/sub messaging.
sudo apt update && sudo apt install memcached
sudo systemctl start memcached
It can be used with PHP or Python via appropriate libraries.