Compare commits

...

16 Commits

Author SHA1 Message Date
Arik Chakma
75945c7c65 fix: sql course meta 2025-03-11 18:41:09 +06:00
Alexandre D. Roberge
8b61bbfcbb fix: typo in filename 2025-03-10 18:44:18 +06:00
github-actions[bot]
2c39611b47 chore: update roadmap content json (#8312)
Co-authored-by: kamranahmedse <4921183+kamranahmedse@users.noreply.github.com>
2025-03-10 18:43:41 +06:00
Naser Mohamed
475cb85600 fix: remove member only content (#8307)
The mentioned resource was not free (required a member subscription)
2025-03-09 22:40:50 +06:00
github-actions[bot]
37de8700d5 chore: update roadmap content json (#8304)
Co-authored-by: kamranahmedse <4921183+kamranahmedse@users.noreply.github.com>
2025-03-08 08:04:12 +06:00
Kamran Ahmed
9db05bddbd Fix broken link 2025-03-06 11:46:06 +00:00
Matthew Bill
4bda81bf52 Add resource for trust building (#8300)
Added details about the trust equation to trust/influence in theengineering-manager roadmap
2025-03-06 11:45:07 +00:00
github-actions[bot]
00c5254ea9 chore: update roadmap content json (#8301)
Co-authored-by: kamranahmedse <4921183+kamranahmedse@users.noreply.github.com>
2025-03-06 11:31:27 +00:00
Kamran Ahmed
bc97fc4c03 Add java roadmap content 2025-03-05 14:06:58 +00:00
Kamran Ahmed
f953b96d52 Add updated java assets 2025-03-05 12:14:26 +00:00
Kamran Ahmed
40793efe4e Migrate Java roadmap 2025-03-05 11:49:22 +00:00
github-actions[bot]
22a29605d8 chore: update roadmap content json (#8288)
Co-authored-by: kamranahmedse <4921183+kamranahmedse@users.noreply.github.com>
2025-03-04 21:15:08 +06:00
Devin DeShun
cbfd4f7fcb Replace a link for sheet (#8287)
Replace Microsoft Access "replace function" link with Microsoft Excel "replace function" link.
2025-02-28 23:51:45 +00:00
Igor Kustov
992cf82e5c feat: add resources to rate-limiting topic (#8282)
* Added few resources to rate-limiting topic

* Added 'What is rate limiting? | Rate limiting and bots' article
2025-02-28 19:26:31 +06:00
Michelle
ea89ac864c fix: bookmarks typo (#8259) 2025-02-27 02:55:48 +06:00
github-actions[bot]
35a4a93ca7 chore: update roadmap content json (#8277)
Co-authored-by: kamranahmedse <4921183+kamranahmedse@users.noreply.github.com>
2025-02-27 02:55:08 +06:00
125 changed files with 2439 additions and 4607 deletions

View File

@@ -81,6 +81,7 @@
"zustand": "^4.5.5"
},
"devDependencies": {
"@ai-sdk/google": "^1.1.19",
"@playwright/test": "^1.48.0",
"@tailwindcss/typography": "^0.5.15",
"@types/dom-to-image": "^2.6.7",
@@ -91,6 +92,7 @@
"@types/react-slick": "^0.23.13",
"@types/sanitize-html": "^2.13.0",
"@types/turndown": "^5.0.5",
"ai": "^4.1.51",
"csv-parser": "^3.0.0",
"gh-pages": "^6.2.0",
"js-yaml": "^4.1.0",

167
pnpm-lock.yaml generated
View File

@@ -159,6 +159,9 @@ importers:
specifier: ^4.5.5
version: 4.5.6(@types/react@18.3.18)(react@18.3.1)
devDependencies:
'@ai-sdk/google':
specifier: ^1.1.19
version: 1.1.19(zod@3.24.1)
'@playwright/test':
specifier: ^1.48.0
version: 1.50.0
@@ -189,6 +192,9 @@ importers:
'@types/turndown':
specifier: ^5.0.5
version: 5.0.5
ai:
specifier: ^4.1.51
version: 4.1.51(react@18.3.1)(zod@3.24.1)
csv-parser:
specifier: ^3.0.0
version: 3.1.0
@@ -219,6 +225,46 @@ importers:
packages:
'@ai-sdk/google@1.1.19':
resolution: {integrity: sha512-Q4l2iWAADUf1pGbXX60A2nnUqEtPLtLpXsbjr3hVcgI9M3q9BqUmSoGsoJ/AAwvZU3uarEb0IJuv+7zlitvCBw==}
engines: {node: '>=18'}
peerDependencies:
zod: ^3.0.0
'@ai-sdk/provider-utils@2.1.10':
resolution: {integrity: sha512-4GZ8GHjOFxePFzkl3q42AU0DQOtTQ5w09vmaWUf/pKFXJPizlnzKSUkF0f+VkapIUfDugyMqPMT1ge8XQzVI7Q==}
engines: {node: '>=18'}
peerDependencies:
zod: ^3.0.0
peerDependenciesMeta:
zod:
optional: true
'@ai-sdk/provider@1.0.9':
resolution: {integrity: sha512-jie6ZJT2ZR0uVOVCDc9R2xCX5I/Dum/wEK28lx21PJx6ZnFAN9EzD2WsPhcDWfCgGx3OAZZ0GyM3CEobXpa9LA==}
engines: {node: '>=18'}
'@ai-sdk/react@1.1.20':
resolution: {integrity: sha512-4QOM9fR9SryaRraybckDjrhl1O6XejqELdKmrM5g9y9eLnWAfjwF+W1aN0knkSHzbbjMqN77sy9B9yL8EuJbDw==}
engines: {node: '>=18'}
peerDependencies:
react: ^18 || ^19 || ^19.0.0-rc
zod: ^3.0.0
peerDependenciesMeta:
react:
optional: true
zod:
optional: true
'@ai-sdk/ui-utils@1.1.16':
resolution: {integrity: sha512-jfblR2yZVISmNK2zyNzJZFtkgX57WDAUQXcmn3XUBJyo8LFsADu+/vYMn5AOyBi9qJT0RBk11PEtIxIqvByw3Q==}
engines: {node: '>=18'}
peerDependencies:
zod: ^3.0.0
peerDependenciesMeta:
zod:
optional: true
'@alloc/quick-lru@5.2.0':
resolution: {integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==}
engines: {node: '>=10'}
@@ -895,6 +941,10 @@ packages:
resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==}
engines: {node: '>= 8'}
'@opentelemetry/api@1.9.0':
resolution: {integrity: sha512-3giAOQvZiH5F9bMlMiv8+GSPMeqg0dbaeo58/0SlA9sxSqZhnUtxzX9/2FzyhS9sWQf5S0GJE0AKBrFqjpeYcg==}
engines: {node: '>=8.0.0'}
'@oslojs/encoding@1.1.0':
resolution: {integrity: sha512-70wQhgYmndg4GCPxPPxPGevRKqTIJ2Nh4OkiMWmDAVYsTQ+Ta7Sq+rPevXyXGdzr30/qZBnyOalCszoMxlyldQ==}
@@ -1287,6 +1337,9 @@ packages:
'@types/debug@4.1.12':
resolution: {integrity: sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==}
'@types/diff-match-patch@1.0.36':
resolution: {integrity: sha512-xFdR6tkm0MWvBfO8xXCSsinYxHcqkQUlcHeSpMC2ukzOb6lwQAfDmW+Qt0AvlGd8HpsS28qKsB+oPeJn9I39jg==}
'@types/dom-to-image@2.6.7':
resolution: {integrity: sha512-me5VbCv+fcXozblWwG13krNBvuEOm6kA5xoa4RrjDJCNFOZSWR3/QLtOXimBHk1Fisq69Gx3JtOoXtg1N1tijg==}
@@ -1395,6 +1448,18 @@ packages:
resolution: {integrity: sha512-kja8j7PjmncONqaTsB8fQ+wE2mSU2DJ9D4XKoJ5PFWIdRMa6SLSN1ff4mOr4jCbfRSsxR4keIiySJU0N9T5hIQ==}
engines: {node: '>= 8.0.0'}
ai@4.1.51:
resolution: {integrity: sha512-CuJgbi2Ktfv/7jjxvUhFOGZ8OFxWQ8a7ZF19lwJuVLauL4uWHLetm6R3iaafahJ8ZkueSbhR/Bnroy5apd1nCw==}
engines: {node: '>=18'}
peerDependencies:
react: ^18 || ^19 || ^19.0.0-rc
zod: ^3.0.0
peerDependenciesMeta:
react:
optional: true
zod:
optional: true
ansi-align@3.0.1:
resolution: {integrity: sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==}
@@ -1743,6 +1808,9 @@ packages:
didyoumean@1.2.2:
resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==}
diff-match-patch@1.0.5:
resolution: {integrity: sha512-IayShXAgj/QMXgB0IWmKx+rOPuGMhqm5w6jvFxmVenXKIzRqTAAsbBPT3kWQeGANj3jGgvcvv4yK6SxqYmikgw==}
diff@5.2.0:
resolution: {integrity: sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==}
engines: {node: '>=0.3.1'}
@@ -1863,6 +1931,10 @@ packages:
eventemitter3@5.0.1:
resolution: {integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==}
eventsource-parser@3.0.0:
resolution: {integrity: sha512-T1C0XCUimhxVQzW4zFipdx0SficT651NnkR0ZSH3yQwh+mFMdLfgjABVi4YtMTtaL4s168593DaoaRLMqryavA==}
engines: {node: '>=18.0.0'}
extend-shallow@2.0.1:
resolution: {integrity: sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==}
engines: {node: '>=0.10.0'}
@@ -2177,11 +2249,19 @@ packages:
engines: {node: '>=6'}
hasBin: true
json-schema@0.4.0:
resolution: {integrity: sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==}
json5@2.2.3:
resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==}
engines: {node: '>=6'}
hasBin: true
jsondiffpatch@0.6.0:
resolution: {integrity: sha512-3QItJOXp2AP1uv7waBkao5nCvhEv+QmJAd38Ybq7wNI74Q+BBmnLn4EDKz6yI9xGAIQoUF87qHt+kc1IVxB4zQ==}
engines: {node: ^18.0.0 || >=20.0.0}
hasBin: true
jsonfile@6.1.0:
resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==}
@@ -2993,6 +3073,9 @@ packages:
resolution: {integrity: sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA==}
engines: {node: '>=4'}
secure-json-parse@2.7.0:
resolution: {integrity: sha512-6aU+Rwsezw7VR8/nyvKTx8QpWH9FrcYiXXlqC4z5d5XQBDRqtbfsRjnwGyqbi3gddNtWHuEk9OANUotL26qKUw==}
semver@6.3.1:
resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==}
hasBin: true
@@ -3121,6 +3204,11 @@ packages:
resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==}
engines: {node: '>= 0.4'}
swr@2.3.2:
resolution: {integrity: sha512-RosxFpiabojs75IwQ316DGoDRmOqtiAj0tg8wCcbEu4CiLZBs/a9QNtHV7TUfDXmmlgqij/NqzKq/eLelyv9xA==}
peerDependencies:
react: ^16.11.0 || ^17.0.0 || ^18.0.0 || ^19.0.0
tailwind-merge@2.6.0:
resolution: {integrity: sha512-P+Vu1qXfzediirmHOC3xKGAYeZtPcV9g76X+xg2FD4tYgR71ewMA35Y3sCz3zhiN/dwefRpJX0yBcgwi1fXNQA==}
@@ -3136,6 +3224,10 @@ packages:
thenify@3.3.1:
resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==}
throttleit@2.1.0:
resolution: {integrity: sha512-nt6AMGKW1p/70DF/hGBdJB57B8Tspmbp5gfJ8ilhLnt7kkr2ye7hzD6NVG8GGErk2HWF34igrL2CXmNIkzKqKw==}
engines: {node: '>=18'}
tiny-inflate@1.0.3:
resolution: {integrity: sha512-pkY1fj1cKHb2seWDy0B16HeWyczlJA9/WW3u3c4z/NiWDsO3DOU5D7nhTLE9CF0yXv/QZFY7sEJmj24dK+Rrqw==}
@@ -3413,6 +3505,43 @@ packages:
snapshots:
'@ai-sdk/google@1.1.19(zod@3.24.1)':
dependencies:
'@ai-sdk/provider': 1.0.9
'@ai-sdk/provider-utils': 2.1.10(zod@3.24.1)
zod: 3.24.1
'@ai-sdk/provider-utils@2.1.10(zod@3.24.1)':
dependencies:
'@ai-sdk/provider': 1.0.9
eventsource-parser: 3.0.0
nanoid: 3.3.8
secure-json-parse: 2.7.0
optionalDependencies:
zod: 3.24.1
'@ai-sdk/provider@1.0.9':
dependencies:
json-schema: 0.4.0
'@ai-sdk/react@1.1.20(react@18.3.1)(zod@3.24.1)':
dependencies:
'@ai-sdk/provider-utils': 2.1.10(zod@3.24.1)
'@ai-sdk/ui-utils': 1.1.16(zod@3.24.1)
swr: 2.3.2(react@18.3.1)
throttleit: 2.1.0
optionalDependencies:
react: 18.3.1
zod: 3.24.1
'@ai-sdk/ui-utils@1.1.16(zod@3.24.1)':
dependencies:
'@ai-sdk/provider': 1.0.9
'@ai-sdk/provider-utils': 2.1.10(zod@3.24.1)
zod-to-json-schema: 3.24.1(zod@3.24.1)
optionalDependencies:
zod: 3.24.1
'@alloc/quick-lru@5.2.0': {}
'@ampproject/remapping@2.3.0':
@@ -3991,6 +4120,8 @@ snapshots:
'@nodelib/fs.scandir': 2.1.5
fastq: 1.18.0
'@opentelemetry/api@1.9.0': {}
'@oslojs/encoding@1.1.0': {}
'@pkgjs/parseargs@0.11.0':
@@ -4425,6 +4556,8 @@ snapshots:
dependencies:
'@types/ms': 2.1.0
'@types/diff-match-patch@1.0.36': {}
'@types/dom-to-image@2.6.7': {}
'@types/estree@1.0.6': {}
@@ -4534,6 +4667,18 @@ snapshots:
dependencies:
humanize-ms: 1.2.1
ai@4.1.51(react@18.3.1)(zod@3.24.1):
dependencies:
'@ai-sdk/provider': 1.0.9
'@ai-sdk/provider-utils': 2.1.10(zod@3.24.1)
'@ai-sdk/react': 1.1.20(react@18.3.1)(zod@3.24.1)
'@ai-sdk/ui-utils': 1.1.16(zod@3.24.1)
'@opentelemetry/api': 1.9.0
jsondiffpatch: 0.6.0
optionalDependencies:
react: 18.3.1
zod: 3.24.1
ansi-align@3.0.1:
dependencies:
string-width: 4.2.3
@@ -4894,6 +5039,8 @@ snapshots:
didyoumean@1.2.2: {}
diff-match-patch@1.0.5: {}
diff@5.2.0: {}
dir-glob@3.0.1:
@@ -5025,6 +5172,8 @@ snapshots:
eventemitter3@5.0.1: {}
eventsource-parser@3.0.0: {}
extend-shallow@2.0.1:
dependencies:
is-extendable: 0.1.1
@@ -5373,8 +5522,16 @@ snapshots:
jsesc@3.1.0: {}
json-schema@0.4.0: {}
json5@2.2.3: {}
jsondiffpatch@0.6.0:
dependencies:
'@types/diff-match-patch': 1.0.36
chalk: 5.4.1
diff-match-patch: 1.0.5
jsonfile@6.1.0:
dependencies:
universalify: 2.0.1
@@ -6427,6 +6584,8 @@ snapshots:
extend-shallow: 2.0.1
kind-of: 6.0.3
secure-json-parse@2.7.0: {}
semver@6.3.1: {}
semver@7.6.3: {}
@@ -6584,6 +6743,12 @@ snapshots:
supports-preserve-symlinks-flag@1.0.0: {}
swr@2.3.2(react@18.3.1):
dependencies:
dequal: 2.0.3
react: 18.3.1
use-sync-external-store: 1.4.0(react@18.3.1)
tailwind-merge@2.6.0: {}
tailwindcss@3.4.17:
@@ -6621,6 +6786,8 @@ snapshots:
dependencies:
any-promise: 1.3.0
throttleit@2.1.0: {}
tiny-inflate@1.0.3: {}
tinyexec@0.3.2: {}

Binary file not shown.

View File

@@ -458,8 +458,29 @@
},
"O7wjldZ3yTA2s_F-UnJw_": {
"title": "Rate Limiting",
"description": "Rate Limiting is a critical aspect of API Design that dictates the number of API calls a client can make within a specified timeframe. This helps in managing resource allocation, preventing abuse of the API, and maintaining the overall health of the API system. Proper rate limiting measures should be in place to ensure the API's stability, thereby delivering a consistent and reliable service to all consumers. It works primarily by setting a limit on the frequency of client requests, thereby preventing individual users from overloading the system. It is crucial to design and implement rate limiting carefully for maintaining API availability and performance.",
"links": []
"description": "Rate Limiting is a critical aspect of API Design that dictates the number of API calls a client can make within a specified timeframe. This helps in managing resource allocation, preventing abuse of the API, and maintaining the overall health of the API system. Proper rate limiting measures should be in place to ensure the API's stability, thereby delivering a consistent and reliable service to all consumers. It works primarily by setting a limit on the frequency of client requests, thereby preventing individual users from overloading the system. It is crucial to design and implement rate limiting carefully for maintaining API availability and performance.\n\nLearn more from the following resources:",
"links": [
{
"title": "Rate limit",
"url": "https://developer.mozilla.org/en-US/docs/Glossary/Rate_limit",
"type": "article"
},
{
"title": "Throttle",
"url": "https://developer.mozilla.org/en-US/docs/Glossary/Throttle",
"type": "article"
},
{
"title": "Debounce",
"url": "https://developer.mozilla.org/en-US/docs/Glossary/Debounce",
"type": "article"
},
{
"title": "What is rate limiting? | Rate limiting and bots",
"url": "https://www.cloudflare.com/en-gb/learning/bots/what-is-rate-limiting/",
"type": "article"
}
]
},
"20KEgZH6cu_UokqWpV-9I": {
"title": "Idempotency",
@@ -569,6 +590,11 @@
"title": "Caching REST API Response",
"url": "https://restfulapi.net/caching/",
"type": "article"
},
{
"title": "HTTP caching",
"url": "https://developer.mozilla.org/en-US/docs/Web/HTTP/Caching",
"type": "article"
}
]
},

View File

@@ -265,7 +265,7 @@
"links": [
{
"title": "Replace Function",
"url": "https://support.microsoft.com/en-us/office/replace-function-6acf209b-01b7-4078-b4b8-e0a4ef67d181",
"url": "https://support.microsoft.com/en-us/office/replace-function-8d799074-2425-4a8a-84bc-82472868878a",
"type": "article"
},
{

View File

@@ -162,8 +162,14 @@
},
"7PBmYoSmIgZT21a2Ip3_S": {
"title": "Trust / Influence Building",
"description": "Building trust and influence is crucial for any Engineering Manager. This involves establishing a solid reputation, delivering on promises and being an active listener to your team's ideas and issues. It's a manager's job to ensure there's an open, honest environment that promotes trust. Balancing delegation and taking charge, especially in difficult situations, is key to building influence.\n\nOne challenge in this area is building trust between team members of varying experiences and skills. Managers must not only show the team they're competent, but also that they value everyone's inputs. They can achieve this by promoting inclusivity and praising team contributions regularly.\n\nBeing patient, communicate clearly, and showing empathy are critical skills that can help an Engineering Manager in trust and influence building. By embodying these traits, managers can build a stronger, united, and more effective engineering team.",
"links": []
"description": "Building trust and influence is crucial for any Engineering Manager. This involves establishing a solid reputation, delivering on promises and being an active listener to your team's ideas and issues. It's a manager's job to ensure there's an open, honest environment that promotes trust. Balancing delegation and taking charge, especially in difficult situations, is key to building influence.\n\nOne challenge in this area is building trust between team members of varying experiences and skills. Managers must not only show the team they're competent, but also that they value everyone's inputs. They can achieve this by promoting inclusivity and praising team contributions regularly.\n\nBeing patient, communicate clearly, and showing empathy are critical skills that can help an Engineering Manager in trust and influence building. By embodying these traits, managers can build a stronger, united, and more effective engineering team.\n\nVisit the following resources to learn more:",
"links": [
{
"title": "Understanding The Trust Equation",
"url": "https://trustedadvisor.com/why-trust-matters/understanding-trust/understanding-the-trust-equation",
"type": "article"
}
]
},
"b3qoH_LuW-Gz4N8WdGnZs": {
"title": "One-on-One Meetings",

File diff suppressed because it is too large Load Diff

View File

@@ -800,11 +800,6 @@
"title": "TypeScript Utility Types Guide",
"url": "https://camchenry.com/blog/typescript-utility-types",
"type": "article"
},
{
"title": "TypeScript Utility Types: Key Concepts And Best Practices",
"url": "https://marketsplash.com/tutorials/typescript/typescript-utility-types/",
"type": "article"
}
]
},

Binary file not shown.

Before

Width:  |  Height:  |  Size: 225 KiB

After

Width:  |  Height:  |  Size: 512 KiB

View File

@@ -0,0 +1,181 @@
import fs from 'node:fs/promises';
import path from 'node:path';
import { fileURLToPath } from 'node:url';
import type { Edge, Node } from 'reactflow';
import matter from 'gray-matter';
import type { RoadmapFrontmatter } from '../src/lib/roadmap';
import { slugify } from '../src/lib/slugger';
import { runPromisesInBatchSequentially } from '../src/lib/promise';
import { createGoogleGenerativeAI } from '@ai-sdk/google';
import { generateText } from 'ai';
// ERROR: `__dirname` is not defined in ES module scope
// https://iamwebwiz.medium.com/how-to-fix-dirname-is-not-defined-in-es-module-scope-34d94a86694d
const __filename = fileURLToPath(import.meta.url);
const __dirname = path.dirname(__filename);
// Usage: tsx ./scripts/editor-roadmap-content.ts <roadmapId>
const GEMINI_API_KEY = process.env.GEMINI_API_KEY;
console.log('GEMINI_API_KEY:', GEMINI_API_KEY);
const ROADMAP_CONTENT_DIR = path.join(__dirname, '../src/data/roadmaps');
const roadmapId = process.argv[2];
const google = createGoogleGenerativeAI({
apiKey: process.env.GEMINI_API_KEY,
});
const allowedRoadmapIds = await fs.readdir(ROADMAP_CONTENT_DIR);
if (!roadmapId) {
console.error('Roadmap Id is required');
process.exit(1);
}
if (!allowedRoadmapIds.includes(roadmapId)) {
console.error(`Invalid roadmap key ${roadmapId}`);
console.error(`Allowed keys are ${allowedRoadmapIds.join(', ')}`);
process.exit(1);
}
const roadmapFrontmatterDir = path.join(
ROADMAP_CONTENT_DIR,
roadmapId,
`${roadmapId}.md`,
);
const roadmapFrontmatterRaw = await fs.readFile(roadmapFrontmatterDir, 'utf-8');
const { data } = matter(roadmapFrontmatterRaw);
const roadmapFrontmatter = data as RoadmapFrontmatter;
if (!roadmapFrontmatter) {
console.error('Invalid roadmap frontmatter');
process.exit(1);
}
if (roadmapFrontmatter.renderer !== 'editor') {
console.error('Only Editor Rendered Roadmaps are allowed');
process.exit(1);
}
const roadmapDir = path.join(
ROADMAP_CONTENT_DIR,
roadmapId,
`${roadmapId}.json`,
);
const roadmapContent = await fs.readFile(roadmapDir, 'utf-8');
let { nodes, edges } = JSON.parse(roadmapContent) as {
nodes: Node[];
edges: Edge[];
};
const enrichedNodes = nodes
.filter(
(node) =>
node?.type &&
['topic', 'subtopic'].includes(node.type) &&
node.data?.label,
)
.map((node) => {
// Because we only need the parent id and title for subtopics
if (node.type !== 'subtopic') {
return node;
}
const parentNodeId =
edges.find((edge) => edge.target === node.id)?.source || '';
const parentNode = nodes.find((n) => n.id === parentNodeId);
return {
...node,
parentId: parentNodeId,
parentTitle: parentNode?.data?.label || '',
};
}) as (Node & { parentId?: string; parentTitle?: string })[];
const roadmapContentDir = path.join(ROADMAP_CONTENT_DIR, roadmapId, 'content');
const stats = await fs.stat(roadmapContentDir).catch(() => null);
if (!stats || !stats.isDirectory()) {
await fs.mkdir(roadmapContentDir, { recursive: true });
}
function writeTopicContent(
roadmapTitle: string,
childTopic: string,
parentTopic?: string,
) {
const updatedTitle = roadmapTitle.replace('Roadmap', '').trim().replace('Developer', '');
let prompt = `I will give you a topic and you need to write a brief introduction for that in "${roadmapTitle}". Your format should be as follows and be in strictly markdown format:
# (Put a heading for the topic without adding parent "Subtopic in Topic" or "Topic in Roadmap" or "Subtopic under XYZ" etc.)
(Briefly explain the topic in one paragraph using simple english. Don't start with explaining how important the topic is with regard to "${roadmapTitle}". Don't say something along the lines of "XYZ plays a crucial role in ${roadmapTitle}". Don't include anything saying "In the context of ${roadmapTitle}". Instead, start with a simple explanation of the topic itself. For example, if the topic is "React", you can start with "React is a JavaScript library for building user interfaces."".)
`;
if (!parentTopic) {
prompt += `First topic is: ${childTopic}`;
} else {
prompt += `First topic is: "${parentTopic} > ${childTopic}"`;
}
return new Promise((resolve, reject) => {
generateText({
model: google('gemini-2.0-flash'),
prompt: prompt,
providerOptions: {
}
})
.then((response) => {
const article = response.text;
resolve(article);
})
.catch((err) => {
reject(err);
});
});
}
async function writeNodeContent(node: Node & { parentTitle?: string }) {
const nodeDirPattern = `${slugify(node.data.label)}@${node.id}.md`;
if (!roadmapContentFiles.includes(nodeDirPattern)) {
console.log(`Missing file for: ${nodeDirPattern}`);
return;
}
const nodeDir = path.join(roadmapContentDir, nodeDirPattern);
const nodeContent = await fs.readFile(nodeDir, 'utf-8');
const isFileEmpty = !nodeContent.replace(`# ${node.data.label}`, '').trim();
if (!isFileEmpty) {
console.log(`❌ Ignoring ${nodeDirPattern}. Not empty.`);
return;
}
const topic = node.data.label;
const parentTopic = node.parentTitle;
console.log(`⏳ Generating content for ${topic}...`);
let newContentFile = '';
if (GEMINI_API_KEY) {
newContentFile = (await writeTopicContent(
roadmapFrontmatter.title,
topic,
parentTopic,
)) as string;
} else {
newContentFile = `# ${topic}`;
}
await fs.writeFile(nodeDir, newContentFile, 'utf-8');
console.log(`✅ Content generated for ${topic}`);
}
let roadmapContentFiles = await fs.readdir(roadmapContentDir, {
recursive: true,
});
if (!GEMINI_API_KEY) {
console.log('----------------------------------------');
console.log('GEMINI_API_KEY not found. Skipping gemini api calls...');
console.log('----------------------------------------');
}
const promises = enrichedNodes.map((node) => () => writeNodeContent(node));
await runPromisesInBatchSequentially(promises, 20);
console.log('✅ All content generated');

View File

@@ -68,7 +68,7 @@ export function FavoriteRoadmaps(props: FavoriteRoadmapsProps) {
isEmpty={!isLoading && progress.length === 0}
emptyTitle={
<>
No bookmars found
No bookmarks found
<a
href="#role-based-roadmaps"
className="ml-1.5 inline-flex items-center gap-1 font-medium text-blue-500 underline-offset-2 hover:underline"

View File

@@ -311,7 +311,7 @@ export function SQLCoursePage() {
<SectionHeader
title="Not your average SQL course"
description="Built around a text-based interactive approach and packed with practical challenges, this course stands out with features that make it truly unique."
description="This SQL programming class is designed to help you go from beginner to expert through hands-on practice with real-world scenarios, mastering everything from basic to complex queries."
className="mt-16 md:mt-20"
/>

View File

@@ -1,3 +1,10 @@
# Rate Limiting in API Design
Rate Limiting is a critical aspect of API Design that dictates the number of API calls a client can make within a specified timeframe. This helps in managing resource allocation, preventing abuse of the API, and maintaining the overall health of the API system. Proper rate limiting measures should be in place to ensure the API's stability, thereby delivering a consistent and reliable service to all consumers. It works primarily by setting a limit on the frequency of client requests, thereby preventing individual users from overloading the system. It is crucial to design and implement rate limiting carefully for maintaining API availability and performance.
Rate Limiting is a critical aspect of API Design that dictates the number of API calls a client can make within a specified timeframe. This helps in managing resource allocation, preventing abuse of the API, and maintaining the overall health of the API system. Proper rate limiting measures should be in place to ensure the API's stability, thereby delivering a consistent and reliable service to all consumers. It works primarily by setting a limit on the frequency of client requests, thereby preventing individual users from overloading the system. It is crucial to design and implement rate limiting carefully for maintaining API availability and performance.
Learn more from the following resources:
- [@article@Rate limit](https://developer.mozilla.org/en-US/docs/Glossary/Rate_limit)
- [@article@Throttle](https://developer.mozilla.org/en-US/docs/Glossary/Throttle)
- [@article@Debounce](https://developer.mozilla.org/en-US/docs/Glossary/Debounce)
- [@article@What is rate limiting? | Rate limiting and bots](https://www.cloudflare.com/en-gb/learning/bots/what-is-rate-limiting/)

View File

@@ -8,5 +8,5 @@ The REPLACE function is used to replace part of a text string with another text
Learn more from the following resources:
- [@article@Replace Function](https://support.microsoft.com/en-us/office/replace-function-6acf209b-01b7-4078-b4b8-e0a4ef67d181)
- [@article@Replace Function](https://support.microsoft.com/en-us/office/replace-function-8d799074-2425-4a8a-84bc-82472868878a)
- [@article@Substitute Function](https://support.microsoft.com/en-us/office/substitute-function-6434944e-a904-4336-a9b0-1e58df3bc332)

View File

@@ -4,4 +4,8 @@ Building trust and influence is crucial for any Engineering Manager. This involv
One challenge in this area is building trust between team members of varying experiences and skills. Managers must not only show the team they're competent, but also that they value everyone's inputs. They can achieve this by promoting inclusivity and praising team contributions regularly.
Being patient, communicate clearly, and showing empathy are critical skills that can help an Engineering Manager in trust and influence building. By embodying these traits, managers can build a stronger, united, and more effective engineering team.
Being patient, communicate clearly, and showing empathy are critical skills that can help an Engineering Manager in trust and influence building. By embodying these traits, managers can build a stronger, united, and more effective engineering team.
Visit the following resources to learn more:
- [@article@Understanding The Trust Equation](https://trustedadvisor.com/why-trust-matters/understanding-trust/understanding-the-trust-equation)

View File

@@ -1,22 +0,0 @@
# Functions
A method/function is a way to perform some task. Similarly, in programming like Java, a function method is a block of code written to perform a specific task repeatedly. It provides reusability of code. We write the function once and use it many times. It works on the 'DRY' principle i.e., "Do not repeat yourself".
Steps -
1. Define function - `datatype function_name(parameters){body}`
2. Call function - `function_name(values)`
3. Lambda functions - `x -> x + 1`
4. Pass a function as a variable -
```
final Consumer<Integer> simpleReference1 = App::someMethod1;
simpleReference1.accept(1);
```
Visit the following resources to learn more:
- [@article@Methods/Functions in Java.](https://www.javatpoint.com/method-in-java)
- [@article@Learn Functions/Methods in Java](https://www.w3schools.com/java/java_methods.asp)
- [@video@Functions / Methods in Java](https://www.youtube.com/watch?v=vvanI8NRlSI)
- [@article@Lambda functions](https://www.w3schools.com/java/java_lambda.asp)
- [@article@Passing functions as a variable](https://northcoder.com/post/passing-java-functions-in-variables/)

View File

@@ -1,14 +0,0 @@
# Datastructures
As the name indicates itself, a **Data Structure** is a way of organizing the data in the **memory** so that it can be used efficiently. Some common data structures are array, linked list, stack, hashtable, queue, tree, heap, and graph.
- Array allocates continuous memory for homogeneous data
- Linked List stores data in nodes with references
- Stack follows Last In First Out principle
- Queue follows First In First Out principle
Visit the following resources to learn more:
- [@article@Data Structures and Algorithms](https://www.javatpoint.com/data-structure-tutorial)
- [@video@Java + DSA + Interview Preparation Course](https://youtube.com/playlist?list=PL9gnSGHSqcnr_DxHsP7AW9ftq0AtAyYqJ)
- [@video@Data Structures Illustrated](https://www.youtube.com/watch?v=9rhT3P1MDHk&list=PLkZYeFmDuaN2-KUIv-mvbjfKszIGJ4FaY)

View File

@@ -1,20 +0,0 @@
# OOP
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). In OOP, computer programs are designed by making them out of objects that interact with one another.
Abstraction, encapsulation, polymorphism, and inheritance are the four main theoretical principles of object-oriented programming. But Java also works with three further OOP concepts: association, aggregation, and composition.
Visit the following resources to learn more:
- [@article@Class](https://www.javatpoint.com/object-and-class-in-java)
- [@article@Inheritance](https://www.javatpoint.com/inheritance-in-java)
- [@article@Polymorphism](https://www.javatpoint.com/runtime-polymorphism-in-java)
- [@article@Abstraction](https://www.softwaretestinghelp.com/what-is-abstraction-in-java/)
- [@article@Encapsulation](https://www.programiz.com/java-programming/encapsulation)
- [@article@Association](https://www.javatpoint.com/association-in-java)
- [@article@Aggregation](https://www.javatpoint.com/aggregation-in-java)
- [@article@Composition](https://www.geeksforgeeks.org/composition-in-java/)
- [@article@Java OOPs Concepts](https://www.javatpoint.com/java-oops-concepts)
- [@article@Using OOP concepts to write high-performance Java code](https://raygun.com/blog/oop-concepts-java)
- [@video@Java complete OOPs playlist](https://youtube.com/playlist?list=PL9gnSGHSqcno1G3XjUbwzXHL8_EttOuKk)
- [@video@Java OOPs Concepts](https://www.youtube.com/watch?v=6T_HgnjoYwM)

View File

@@ -1,9 +0,0 @@
# Memory Management
In Java, memory management is the process of allocation and de-allocation of objects.
Visit the following resources to learn more:
- [@article@Memory Management in Java](https://www.javatpoint.com/memory-management-in-java)
- [@video@Memory Management Tutorial in Java](https://www.youtube.com/watch?v=fM8yj93X80s)
- [@video@Memory Managament And Garbage Collection in Java](https://youtu.be/vz6vSZRuS2M?si=4-JyoDkgcxrLmxSt)

View File

@@ -1,8 +0,0 @@
# Collection Framework
The Collection in Java is a framework that provides an architecture to store and manipulate the group of objects. Java Collections can achieve all the operations that you perform on a data such as searching, sorting, insertion, manipulation, and deletion.
Visit the following resources to learn more:
- [@article@Collections in Java](https://www.javatpoint.com/collections-in-java)
- [@article@Java - Collections Framework](https://www.tutorialspoint.com/java/java_collections.htm)

View File

@@ -1,8 +0,0 @@
# Serialization
Serialization is the conversion of the state of an object into a byte stream; deserialization does the opposite. Stated differently, serialization is the conversion of a Java object into a static stream (sequence) of bytes, which we can then save to a database or transfer over a network.
Visit the following resources to learn more:
- [@article@Serialization and Deserialization in Java](https://www.javatpoint.com/serialization-in-java)
- [@article@Introduction to Java Serialization](https://www.baeldung.com/java-serialization)

View File

@@ -1,12 +0,0 @@
# How JVM Works
The Java Virtual Machine (JVM) is a platform-dependent program that executes platform-independent Java bytecode, embodying the "Write once, run everywhere" principle. As a crucial component of the Java Runtime Environment (JRE), the JVM is responsible for initiating Java programs by calling their main method. While designed primarily for Java, the JVM's ability to run any language compiled to Java bytecode has led to its adoption by other languages like Kotlin, Scala, and Groovy. Multiple JVM implementations exist, with Oracle's HotSpot being the standard and GraalVM emerging as a high-performance alternative, each offering unique features and optimizations
Visit the following resources to learn more:
- [@article@Introducing the Java Virtual Machine](https://www.infoworld.com/article/3272244/what-is-the-jvm-introducing-the-java-virtual-machine.html)
- [@video@How JVM works?](https://youtu.be/G1ubVOl9IBw)
- [@article@JVM languages](https://www.whizlabs.com/blog/jvm-languages/)
- [@article@GraalVM](https://www.graalvm.org/)
- [@feed@Explore top posts about JVM](https://app.daily.dev/tags/jvm?ref=roadmapsh)
- [@video@JVM Architecture in 8min](https://www.youtube.com/watch?v=QHIWkwxs0AI)

View File

@@ -1,9 +0,0 @@
# Garbage Collection
Java garbage collection is the process by which Java programs perform automatic memory management. Java programs compile to bytecode that can be run on a Java Virtual Machine, or JVM for short. When Java programs run on the JVM, objects are created on the heap, which is a portion of memory dedicated to the program
Visit the following resources to learn more:
- [@article@Java Garbage Collection](https://stackify.com/what-is-java-garbage-collection/)
- [@article@Java Garbage Collection](https://www.javatpoint.com/Garbage-Collection)
- [@video@Garbage Collection in Java - Geekific](https://www.youtube.com/watch?v=XXOaCV5xm9s)

View File

@@ -1,10 +0,0 @@
# Java Advanced Topics
Java Advanced Topics delves into crucial concepts that every Java developer should master to build efficient and scalable applications. It covers memory management techniques, deep dives into the collection framework, and explores serialization for data persistence. Networking and sockets are discussed to help you build robust communication systems, while an understanding of how the JVM works and garbage collection mechanisms ensures optimal application performance. Additionally, the basics of threading introduce parallelism, crucial for modern multi-threaded programming.
Visit the following resources to learn more:
- [@article@What is Advanced Java? - GeeksForGeeks](https://www.geeksforgeeks.org/what-is-advanced-java/)
- [@article@What is Advance Java? - JavatPoint](https://www.javatpoint.com/what-is-advance-java)
- [@video@Advance Java Full Course 2023 - SimpliLearn](https://youtu.be/Ae-r8hsbPUo?si=faFsqJYfCc5jIO6p)

View File

@@ -1,10 +0,0 @@
# Ant
Apache Ant is a Java library and command-line tool whose mission is to drive processes described in build files as targets and extension points dependent upon each other. The main known usage of Ant is the build of Java applications. Ant supplies a number of built-in tasks allowing to compile, assemble, test and run Java applications. Ant can also be used effectively to build non Java applications, for instance C or C++ applications. More generally, Ant can be used to pilot any type of process which can be described in terms of targets and tasks.
Visit the following resources to learn more:
- [@article@Apache Ant](https://ant.apache.org/)
- [@article@Apache Ant Tutorial](https://www.javatpoint.com/apache-ant-tutorial)
- [@article@Apache Ant](https://en.wikipedia.org/wiki/Apache_Ant)
- [@video@What is Apache Ant?](https://youtu.be/3rizinq7bng)

View File

@@ -1,14 +0,0 @@
# Spring
Spring is a powerful open-source Java platform (framework), that is used to create and maintain web applications. It starts as the Spring Framework providing a Dependency Injection Container.
Spring Boot is an autoconfigurable packaging of multiple Spring projects (like Data, MVC, REST etc) initially created for creating microservices or quick PoC (Proof of concepts)
Visit the following resources to learn more:
- [@official@Official Site](https://spring.io/)
- [@official@Quickstart guide](https://spring.io/quickstart)
- [@official@Official guides](https://spring.io/guides)
- [@article@Spring Framework Documentation](https://docs.spring.io/spring-framework/docs/current/reference/html/)
- [@article@Spring Boot tutorials](https://www.baeldung.com/spring-boot)
- [@article@What is Spring Framework? An Unorthodox Guide](https://www.marcobehler.com/guides/spring-framework)
- [@feed@Explore top posts about Spring Framework](https://app.daily.dev/tags/spring?ref=roadmapsh)

View File

@@ -1,10 +0,0 @@
# Spark
Spark is a micro framework for creating web applications in Kotlin and Java 8. Sinatra, a popular Ruby micro framework, was the inspiration for it.
Visit the following resources to learn more:
- [@article@Spark Java](https://sparkjava.com/)
- [@article@Intro to Spark Java Framework](https://www.baeldung.com/spark-framework-rest-api)
- [@article@What is Spark java?](https://www.javatpoint.com/spark-java)
- [@feed@Explore top posts about Apache Spark](https://app.daily.dev/tags/spark?ref=roadmapsh)

View File

@@ -1,20 +0,0 @@
# JPA
The Jakarta Persistence API provides Java developers with an object/relational mapping facility for managing relational data in Java applications. JPA is not a tool nor a framework, but a set of interfaces for accessing, persisting, and managing data between Java objects and (a) relational database. Because it is a set of interfaces, it will require an implementation to work with and persist Java objects. This will be ORM. Here are the main features of JPA:
- Cleaner, easier, standardized ORM.
- Supports inheritance, polymorphism, and polymorphic queries.
- Supports metadata annotations/XML descriptors to define the mapping (between objects and relational database).
- Supports a rich, SQL-like query language for static and dynamic queries.
- Pluggable persistence providers like Hibernate, MyBatis, etc.
- Caching: JPA supports 2 kinds of cache - first and second levels - to support performance tuning.
> Note: In 2019, JPA was renamed from Java Persistence API to Jakarta Persistence.
Visit the following resources to learn more:
- [@article@TutorialsPoint JPA](https://www.tutorialspoint.com/jpa/jpa_architecture.htm)
- [@article@Official Java doc - Package javax.persistence](https://docs.oracle.com/javaee/7/api/javax/persistence/package-summary.html)
- [@article@Pro Jakarta Persistence in Jakarta EE 10](https://www.amazon.com/Pro-Jakarta-Persistence-Depth-Development/dp/1484274423)
- [@article@Java Persistence with Spring Data and Hibernate by Catalin Tudose](https://www.simonandschuster.com/books/Java-Persistence-with-Spring-Data-and-Hibernate/Catalin-Tudose/9781617299186)
- [@feed@Explore top posts about Java](https://app.daily.dev/tags/java?ref=roadmapsh)

View File

@@ -1,8 +0,0 @@
# Jdbi3
Jdbi is an open source Java library (Apache license) that uses lambda expressions and reflection to provide a friendlier, higher level interface than JDBC to access the database.
Visit the following resources to learn more:
- [@official@Jdbi](https://jdbi.org/)
- [@article@Jdbi Tutorial](https://www.baeldung.com/jdbi)

View File

@@ -1,8 +0,0 @@
# JDBC Template
JDBCTemplate is a central class in Spring's JDBC core package that simplifies the use of JDBC and helps to avoid common errors. It internally uses JDBC API and eliminates many problems with JDBC API. It executes SQL queries or updates, initiating iteration over ResultSets, catching JDBC exceptions, and translating them to the generic. It executes core JDBC workflow, leaving application code to provide SQL and extract results. It handles the exception and provides informative exception messages with the help of exception classes defined in the `org.springframework.dao` package.
Visit the following resources to learn more:
- [@article@JDBC Template tutorial](https://www.baeldung.com/spring-jdbc-jdbctemplate)
- [@feed@Explore top posts about Java](https://app.daily.dev/tags/java?ref=roadmapsh)

View File

@@ -1,8 +0,0 @@
# Cukes
cukes-rest takes simplicity of Cucumber and provides bindings for HTTP specification. As a sugar on top, cukes-rest adds steps for storing and using request/response content from a file system, variable support in .features, context inflation in all steps and a custom plug-in system to allow users to add additional project specific content.
Visit the following resources to learn more:
- [@opensource@Cukes Github](https://github.com/ctco/cukes)
- [@article@Getting Started with Cukes-REST](https://speakerdeck.com/larchaon/getting-started-with-cukes-rest?slide=23)

View File

@@ -1,8 +0,0 @@
# Jbehave
JBehave is a framework for Behaviour-Driven Development (BDD). BDD is an evolution of test-driven development (TDD) and acceptance-test driven design, and is intended to make these practices more accessible and intuitive to newcomers and experts alike. It shifts the vocabulary from being test-based to behaviour-based, and positions itself as a design philosophy.
Visit the following resources to learn more:
- [@official@Jbehave](https://jbehave.org/)
- [@official@Jbehave Tutorial](https://jbehave.org/tutorials.html)

View File

@@ -0,0 +1,8 @@
# Abstraction
The abstract keyword in Java is used to declare a class or a method that cannot be instantiated directly or must be implemented by subclasses, respectively. It is a key part of Java's abstraction mechanism, allowing developers to define abstract classes and methods that provide a blueprint for other classes.
Visit the following resources to learn more:
- [@article@Java Abstract Classes](https://jenkov.com/tutorials/java/abstract-classes.html)
- [@article@Java Interfaces vs. Abstract Classes](https://jenkov.com/tutorials/java/interfaces-vs-abstract-classes.html)

View File

@@ -0,0 +1,7 @@
# Access Specifiers
Access specifiers (or access modifiers) in Java are keywords that control the visibility or accessibility of classes, methods, constructors, and other members. They determine from where these members can be accessed. Java provides four access specifiers: `private`, `default` (no keyword), `protected`, and `public`, each offering a different level of access control.
Visit the following resources to learn more:
- [@article@Java Access Modifiers](https://jenkov.com/tutorials/java/access-modifiers.html)

View File

@@ -0,0 +1,7 @@
# Annotations
Annotations are a form of metadata that provide data about a program. They are used to provide supplemental information about the code, but they are not a part of the program itself. Annotations can be used by the compiler to detect errors or suppress warnings, and they can also be used at runtime to modify the behavior of the program.
Visit the following resources to learn more:
- [@article@Java Annotations Tutorial](https://jenkov.com/tutorials/java/annotations.html)

View File

@@ -0,0 +1,8 @@
# Array vs ArrayList
Arrays and ArrayLists are both ways to store collections of elements in Java. An array is a fixed-size, ordered sequence of elements of the same data type. Once you declare its size, you cannot change it. An ArrayList, on the other hand, is a dynamic, resizable array implementation. It can grow or shrink as needed, allowing you to add or remove elements without worrying about the initial size.
Visit the following resources to learn more:
- [@article@Java Arrays](https://jenkov.com/tutorials/java/arrays.html)
- [@article@Java ArrayLists](https://jenkov.com/tutorials/java-collections/list.html)

View File

@@ -0,0 +1,8 @@
# Arrays
Arrays are fundamental data structures used to store a collection of elements of the same data type in contiguous memory locations. They provide a way to organize and access multiple values using a single variable name and an index. Each element in an array can be accessed directly using its index, starting from 0.
Visit the following resources to learn more:
- [@article@Java Arrays](https://jenkov.com/tutorials/java/arrays.html)
- [@video@Java Arrays Tutorial](https://www.youtube.com/watch?v=ei_4Nt7XWOw)

View File

@@ -0,0 +1,9 @@
# Attributes and Methods
Attributes are variables that hold data about an object, defining its state or characteristics. Methods are functions that define the behavior of an object, allowing it to perform actions or operations. Together, attributes and methods encapsulate the data and behavior of an object within a class.
Visit the following resources to learn more:
- [@article@Java Classes](https://jenkov.com/tutorials/java/classes.html)
- [@article@Java Methods](https://jenkov.com/tutorials/java/methods.html)
- [@article@Java Properties](https://jenkov.com/tutorials/java-collections/properties.html)

View File

@@ -0,0 +1,7 @@
# Basics of OOP
Object-Oriented Programming (OOP) is a programming paradigm centered around "objects," which contain data in the form of fields (attributes) and code in the form of procedures (methods). OOP focuses on creating reusable code by grouping related data and behavior into objects, allowing for modularity, abstraction, inheritance, and polymorphism. These concepts help in organizing and structuring code in a way that mirrors real-world entities and their interactions.
Visit the following resources to learn more:
- [@article@Java Classes and Objects](https://jenkov.com/tutorials/java/classes.html)

View File

@@ -0,0 +1,9 @@
# Bazel
Bazel is an open-source build and test tool similar to Make, Maven, and Gradle. It uses a human-readable, high-level build language. Bazel supports projects in multiple languages and builds outputs for multiple platforms. It's designed for fast, reliable, and reproducible builds, making it suitable for large codebases and complex projects.
Visit the following resources to learn more:
- [@article@Getting started with Bazel](https://bazel.build/start)
- [@article@Build Java Projects with Bazel](https://earthly.dev/blog/build-java-projects-with-bazel/)
- [@article@Introduction to the Bazel Build Tool](https://www.baeldung.com/bazel-build-tool)

View File

@@ -0,0 +1,8 @@
# Classes and Objects
Classes are blueprints for creating objects, which are instances of those classes. A class defines the characteristics (attributes) and behaviors (methods) that objects of that class will possess. Think of a class as a template and an object as a specific instance created from that template.
Visit the following resources to learn more:
- [@article@Java Class and Objects](https://www.programiz.com/java-programming/class-objects)
- [@article@Java Classes and Objects](https://www.youtube.com/watch?v=IUqKuGNasdM)

View File

@@ -0,0 +1,8 @@
# Concurrency
Concurrency is the ability of a program to execute multiple tasks seemingly simultaneously. This doesn't necessarily mean they are running at the exact same instant, but rather that their execution overlaps in time. This can be achieved through techniques like multithreading, where a single program is divided into multiple threads that can run concurrently, or through asynchronous programming, where tasks can be started and then the program can continue executing other tasks without waiting for the first task to complete.
Visit the following resources to learn more:
- [@article@Java Concurrency and Multithreading Tutorial](https://jenkov.com/tutorials/java-concurrency/index.html)
- [@article@Java Concurrency in Practice](https://www.baeldung.com/java-concurrency)

View File

@@ -0,0 +1,8 @@
# Cryptography
Cryptography is the practice and study of techniques for secure communication in the presence of adversaries. It involves converting readable data (plaintext) into an unreadable format (ciphertext) through encryption, and then converting the ciphertext back into plaintext through decryption. Cryptography uses algorithms and keys to ensure confidentiality, integrity, authentication, and non-repudiation of information.
Visit the following resources to learn more:
- [@article@Java Cryptography Tutorial](https://jenkov.com/tutorials/java-cryptography/index.html)

View File

@@ -9,8 +9,6 @@ Data Types are divided into two group -
Visit the following resources to learn more:
- [@article@What are Data Types & Variables?](https://www.guru99.com/java-variables.html)
- [@article@Java Data Types](https://jenkov.com/tutorials/java/variables.html)
- [@article@What are Data Types & Variables?](https://jenkov.com/tutorials/java/data-types.html)
- [@article@Java Variables](https://www.javatpoint.com/java-variables)
- [@article@Learn more about Data types and Variables](https://www.javatpoint.com/java-data-types)
- [@article@Java enums](https://docs.oracle.com/javase/tutorial/java/javaOO/enum.html)
- [@article@Java Records](https://www.baeldung.com/java-record-keyword)

View File

@@ -0,0 +1,9 @@
# Dependency Injection
Dependency Injection (DI) is a design pattern where objects receive their dependencies from external sources rather than creating them themselves. This means a class doesn't have to worry about how to obtain the objects it needs to function; instead, those objects are "injected" into the class, usually through its constructor, setter methods, or interface. This promotes loose coupling and makes code more testable and maintainable.
Visit the following resources to learn more:
- [@article@Dependency Injection Tutorial](https://jenkov.com/tutorials/dependency-injection/index.html)
- [@article@Java Dependency Injection Design Pattern Example Tutorial](https://www.digitalocean.com/community/tutorials/java-dependency-injection-design-pattern-example-tutorial)

View File

@@ -0,0 +1,8 @@
# Dequeue
A Dequeue (pronounced "dee-queue") is a double-ended queue, a data structure that allows you to add and remove elements from both the front (head) and the back (tail) of the queue. Unlike a regular queue (FIFO - First-In, First-Out), a dequeue provides flexibility for both FIFO and LIFO (Last-In, First-Out) operations. This makes it useful for implementing various algorithms and data management tasks where elements need to be accessed or modified from either end.
Visit the following resources to learn more:
- [@article@Java Deque Tutorial](https://jenkov.com/tutorials/java-collections/deque.html)
- [@article@Java Deque](https://www.programiz.com/java-programming/deque)

View File

@@ -0,0 +1,8 @@
# Encapsulation
Encapsulation is a fundamental concept in object-oriented programming where data and the methods that operate on that data are bundled together as a single unit. This unit, often a class, hides the internal state of the object from the outside world and only exposes a controlled interface for interacting with it. This protects the data from accidental modification and allows for easier maintenance and modification of the code.
Visit the following resources to learn more:
- [@article@Java - Encapsulation](https://www.tutorialspoint.com/java/java_encapsulation.htm)

View File

@@ -0,0 +1,8 @@
# Enums
Enums, short for enumerations, are a special data type in Java that represent a group of named constants. They allow you to define a type that can only take on a specific set of predefined values. This makes your code more readable and less prone to errors by restricting the possible values a variable can hold.
Visit the following resources to learn more:
- [@article@Java Enums](https://jenkov.com/tutorials/java/enums.html)
- [@article@Java Enums](https://www.programiz.com/java-programming/enums)

View File

@@ -11,5 +11,4 @@ There are three types of exceptions -
Visit the following resources to learn more:
- [@video@Understanding Java Exceptions](https://www.youtube.com/watch?v=W-N2ltgU-X4)
- [@article@Mastering Java Exception Handling: A Comprehensive Guide](https://naveen-metta.medium.com/mastering-java-exception-handling-a-comprehensive-guide-a897b8020582)
- [@article@Exception Handling in Java](https://www.javatpoint.com/exception-handling-in-java)

View File

@@ -0,0 +1,9 @@
# Final Keyword
The `final` keyword in Java is a non-access modifier used to apply restrictions on a variable, method, or class. When applied to a variable, it makes the variable's value constant after initialization. When applied to a method, it prevents the method from being overridden in a subclass. When applied to a class, it prevents the class from being subclassed (inherited).
Visit the following resources to learn more:
- [@article@Java Final Keyword](https://www.baeldung.com/java-final)
- [@article@How does the final keyword in Java work? I can still modify an object](https://stackoverflow.com/questions/15655012/how-does-the-final-keyword-in-java-work-i-can-still-modify-an-object)

View File

@@ -0,0 +1,8 @@
# Functional Composition
Functional composition is the process of combining two or more functions to produce a new function. The resulting function applies each function in order, passing the output of one function as the input to the next. This allows you to build complex operations by chaining together simpler, reusable functions.
Visit the following resources to learn more:
- [@article@Functional Composition in Java](https://jenkov.com/tutorials/java-functional-programming/functional-composition.html)
- [@article@Java Functional Programming](https://www.baeldung.com/java-functional-programming)

View File

@@ -0,0 +1,9 @@
# Functional Interfaces
Functional interfaces are interfaces that contain only one abstract method. They can have multiple default or static methods, but only one method that needs to be implemented. These interfaces can be used with lambda expressions and method references, allowing for concise and readable code when dealing with single-method operations.
Visit the following resources to learn more:
- [@article@Java Functional Interfaces](https://jenkov.com/tutorials/java-functional-programming/functional-interfaces.html)
- [@article@Java Functional Interfaces](https://www.baeldung.com/java-8-functional-interfaces)

View File

@@ -0,0 +1,7 @@
# High Order Functions
High Order Functions are functions that can either accept other functions as arguments or return functions as their results. This capability allows for more flexible and reusable code by enabling you to abstract over operations. Essentially, you can pass behavior as data, making your code more dynamic and adaptable to different situations.
Visit the following resources to learn more:
- [@article@Java High Order Functions](https://jenkov.com/tutorials/java-functional-programming/higher-order-functions.html)

View File

@@ -0,0 +1,8 @@
# Inheritance
Inheritance is a fundamental concept in object-oriented programming where a new class (called a subclass or derived class) acquires properties and behaviors from an existing class (called a superclass or base class). This allows for code reuse and the creation of hierarchical relationships between classes, promoting a more organized and maintainable codebase. The subclass can extend the superclass by adding new attributes and methods or overriding existing ones.
Visit the following resources to learn more:
- [@article@Java Inheritance](https://jenkov.com/tutorials/java/inheritance.html)
- [@article@Inheritance in Java with Example](https://www.digitalocean.com/community/tutorials/inheritance-java-example)

View File

@@ -0,0 +1,9 @@
# Initializer Block
An initializer block in Java is a block of code, enclosed in curly braces `{}` , that is executed when an instance of a class is created. It's used to initialize instance variables or perform setup tasks before the constructor is called. There are two types: instance initializer blocks, which run every time a new object is created, and static initializer blocks, which run only once when the class is first loaded.
Visit the following resources to learn more:
- [@article@Static and Instance Initializer Blocks in Java](https://www.baeldung.com/java-static-instance-initializer-blocks)
- [@article@All About Java Instance Initializer Blocks](https://blogs.oracle.com/javamagazine/post/java-instance-initializer-block)
- [@article@What is an initialization block?](https://stackoverflow.com/questions/3987428/what-is-an-initialization-block)

View File

@@ -0,0 +1,8 @@
# Interfaces
An interface in Java is a blueprint of a class. It specifies a set of methods that a class must implement if it claims to implement the interface. Think of it as a contract: any class that "signs" the contract (implements the interface) agrees to provide specific behaviors (methods). Interfaces can also contain constants (static final variables). They help achieve abstraction and multiple inheritance in Java.
Visit the following resources to learn more:
- [@article@Interfaces in Java](https://jenkov.com/tutorials/java/interfaces.html)
- [@article@A Guide to Java Interfaces](https://www.baeldung.com/java-interfaces)

View File

@@ -0,0 +1,7 @@
# I/O Operations
I/O Operations, short for Input/Output Operations, deal with how a program interacts with the outside world. This involves reading data from sources like files, network connections, or the keyboard, and writing data to destinations such as files, the console, or network sockets. Essentially, it's the mechanism by which a program receives information and sends results.
Visit the following resources to learn more:
- [@article@Java IO Tutorial](https://jenkov.com/tutorials/java-io/index.html)

View File

@@ -0,0 +1,8 @@
# Iterator
An Iterator is an object that enables you to traverse through a collection (like a List or Set) one element at a time. It provides a standard way to access elements sequentially without needing to know the underlying structure of the collection. You can use methods like `hasNext()` to check if there's a next element and `next()` to retrieve it.
Visit the following resources to learn more:
- [@article@Java Iterator Tutorial](https://jenkov.com/tutorials/java-collections/iterator.html)
- [@article@Java Iterable Tutorial](https://jenkov.com/tutorials/java-collections/iterable.html)

View File

@@ -0,0 +1,7 @@
# Java Memory Model
The Java Memory Model (JMM) defines how threads in Java interact with memory. It specifies how and when different threads can see writes to shared variables, addressing issues like data visibility and race conditions in concurrent programs. The JMM ensures that multithreaded Java programs behave predictably across different hardware architectures by establishing rules for memory synchronization and ordering.
Visit the following resources to learn more:
- [@article@Java Memory Model](https://jenkov.com/tutorials/java-concurrency/java-memory-model.html)

View File

@@ -0,0 +1,9 @@
# Javalin
Javalin is a lightweight web framework for Java and Kotlin that's designed to be simple, intuitive, and fun to use. It allows developers to quickly build web applications and APIs with minimal boilerplate code. Javalin focuses on providing a straightforward approach to routing, request handling, and response generation, making it a good choice for projects where speed of development and ease of understanding are important.
Visit the following resources to learn more:
- [@official@Javalin Website](https://javalin.io/)
- [@article@Creating a REST API with Javalin](https://www.baeldung.com/javalin-rest-microservices)

View File

@@ -0,0 +1,7 @@
# Lambda Expressions
Lambda expressions are essentially short blocks of code that you can pass around to be executed. They allow you to treat functionality as a method argument, or code as data. Think of them as anonymous methods methods without a name that can be written directly in the place where they are needed, making your code more concise and readable, especially when dealing with functional interfaces.
Visit the following resources to learn more:
- [@article@Java Lambda Expressions](https://jenkov.com/tutorials/java/lambda-expressions.html)

View File

@@ -0,0 +1,8 @@
# Lifecycle of a Program
In Java, the program lifecycle consists of several distinct phases that work together to execute code. The process begins with developers writing Java source code in `.java` files using an IDE or text editor. This code is then compiled by the Java compiler (javac) into bytecode stored in `.class` files, with syntax and type checking performed during compilation. When the program runs, the Java Virtual Machine (JVM) loads these compiled class files into memory through a process involving loading of binary data, linking for verification and preparation, and initialization of class elements. The JVM then verifies the bytecode's security compliance, performs Just-In-Time (JIT) compilation to translate bytecode into native machine code for better performance, and executes the program instructions while managing system resources. Throughout execution, the JVM handles garbage collection by reclaiming memory from unused objects, and finally releases all resources upon program termination. This architecture enables Java's "write once, run anywhere" capability since the bytecode can execute on any device with a compatible JVM.
Visit the following resources to learn more:
- [@article@Life Cycle of a Java Program](https://www.startertutorials.com/corejava/life-cycle-java-program.html)
- [@article@How the JVM Executes Java Code](https://www.cesarsotovalero.net/blog/how-the-jvm-executes-java-code.html)

View File

@@ -0,0 +1,10 @@
# Map
A Map is a data structure that stores data in key-value pairs. Each key is unique, and it maps to a specific value. Think of it like a dictionary where you use a word (the key) to look up its definition (the value). Maps allow you to efficiently retrieve, add, or remove values based on their associated keys.
Visit the following resources to learn more:
- [@article@Generic Map in Java](https://jenkov.com/tutorials/java-generics/generic-map.html)
- [@article@Java Map](https://jenkov.com/tutorials/java-collections/map.html)
- [@article@Java ConcurrentMap](https://jenkov.com/tutorials/java-util-concurrent/concurrentmap.html)
- [@article@Java SortedMap](https://jenkov.com/tutorials/java-collections/sortedmap.html)

View File

@@ -0,0 +1,7 @@
# Math Operations
Math operations involve performing calculations using numbers. These operations include addition, subtraction, multiplication, division, and modulus (finding the remainder). They are fundamental building blocks for solving numerical problems and manipulating data in programming.
Visit the following resources to learn more:
- [@article@Java Math](https://jenkov.com/tutorials/java/math-operators-and-math-class.html)

View File

@@ -0,0 +1,8 @@
# Method Chaining
Method chaining is a programming technique where multiple method calls are made sequentially on the same object, one after another, in a single statement. Each method in the chain returns an object, allowing the next method to be called on that returned object. This approach enhances code readability and conciseness by reducing the need for temporary variables and intermediate steps.
Visit the following resources to learn more:
- [@article@Java Method Chaining - Java Explained](https://bito.ai/resources/java-method-chaining-java-explained)
- [@stackoverflow@How to achieve method chaining in Java](https://stackoverflow.com/questions/21180269/how-to-achieve-method-chaining-in-java)

View File

@@ -0,0 +1,8 @@
# Method Overloading and Overriding
Method overloading allows you to define multiple methods in the same class with the same name but different parameters (different number, types, or order of parameters). Method overriding, on the other hand, occurs when a subclass provides a specific implementation for a method that is already defined in its superclass. The method signature (name and parameters) must be the same in both the superclass and the subclass for overriding to occur.
Visit the following resources to learn more:
- [@article@Overriding vs Overloading in Java](https://www.digitalocean.com/community/tutorials/overriding-vs-overloading-in-java)
- [@article@Java Inheritance Tutorial](https://jenkov.com/tutorials/java/inheritance.html)

View File

@@ -0,0 +1,8 @@
# Modules
Modules in Java are a way to organize code into reusable and independent units. They provide a higher level of abstraction than packages, allowing you to control which parts of your code are exposed to other modules and which are kept private. This enhances encapsulation, improves security, and simplifies dependency management by explicitly declaring dependencies between modules.
Visit the following resources to learn more:
- [@article@Java Modules](https://jenkov.com/tutorials/java/modules.html)
- [@article@A Guide to Java 9 Modularity](https://www.baeldung.com/java-modularity)

View File

@@ -0,0 +1,8 @@
# Nested Classes
Nested classes are classes defined inside another class. The class that contains the inner class is known as the outer class. Nested classes can access members of the outer class, even if they are declared private. They are a way to logically group classes that are only used in one place, increasing encapsulation and maintainability.
Visit the following resources to learn more:
- [@article@Java Nested Classes](https://jenkov.com/tutorials/java/nested-classes.html)
- [@article@Guide to Nested Classes in Java](https://www.baeldung.com/java-nested-classes)

View File

@@ -0,0 +1,7 @@
# Object Lifecycle
The object lifecycle refers to the series of stages an object goes through from its creation (allocation of memory) to its destruction (reclaiming of memory). These stages typically include object creation, initialization, usage, and eventual garbage collection when the object is no longer needed. Understanding this lifecycle is crucial for efficient memory management and preventing resource leaks.
Visit the following resources to learn more:
- [@article@Object Life Cycle in Java](https://www.tpointtech.com/object-life-cycle-in-java)

View File

@@ -0,0 +1,8 @@
# Optionals
Optionals are a container object that may or may not contain a non-null value. They are primarily used to represent the absence of a value, avoiding the need to return null, which can lead to NullPointerExceptions. Optionals provide methods to explicitly check if a value is present and to handle cases where a value is absent in a more controlled and readable manner.
Visit the following resources to learn more:
- [@article@Guide To Optionals](https://www.baeldung.com/java-optional)
- [@article@Java Optional](https://dzone.com/articles/optional-in-java)

View File

@@ -0,0 +1,8 @@
# Pass by Value / Pass by Reference
Pass by value and pass by reference are two different ways of passing arguments to a function or method. In pass by value, a copy of the variable's value is passed to the function, so any changes made to the parameter inside the function do not affect the original variable. In pass by reference, a direct reference to the variable is passed, meaning that changes made to the parameter inside the function will directly affect the original variable.
Visit the following resources to learn more:
- [@article@Java is Pass-by-Value, Not Pass-by-Reference](https://www.baeldung.com/java-pass-by-value-or-pass-by-reference)
- [@article@Is Java "pass-by-reference" or "pass-by-value"?](https://stackoverflow.com/questions/40480/is-java-pass-by-reference-or-pass-by-value)

View File

@@ -0,0 +1,7 @@
# Queue
A queue is a fundamental data structure that follows the First-In, First-Out (FIFO) principle. Think of it like a line at a store: the first person to join the line is the first person to be served. Elements are added to the rear (enqueue) and removed from the front (dequeue) of the queue.
Visit the following resources to learn more:
- [@article@Java Queue](https://jenkov.com/tutorials/java-collections/queue.html)

View File

@@ -0,0 +1,8 @@
# Record
A record is a special type of class in Java that is designed to hold immutable data. It automatically generates methods like `equals()`, `hashCode()`, and `toString()` based on the components declared in its header, reducing boilerplate code. Records are useful for creating data transfer objects (DTOs) or simple data aggregates where the primary purpose is to store and access data.
Visit the following resources to learn more:
- [@article@Java Records](https://jenkov.com/tutorials/java/record.html)
- [@video@Java Records](https://www.youtube.com/watch?v=xs7DiEIHW0U)

View File

@@ -0,0 +1,7 @@
# Regular Expressions
Regular expressions, often shortened to "regex," are sequences of characters that define a search pattern. These patterns are used to match character combinations in strings. They can be used to search, edit, or manipulate text and data. Regular expressions provide a powerful and flexible way to work with text-based data.
Visit the following resources to learn more:
- [@article@Java Regular Expressions Tutorial](https://jenkov.com/tutorials/java-regex/index.html)

Some files were not shown because too many files have changed in this diff Show More