From f619093d7624c28f21cb3bf0d88d0846e689c4fe Mon Sep 17 00:00:00 2001 From: Dave Dietrick Date: Mon, 17 Feb 2025 22:29:48 -0500 Subject: [PATCH] Added language specific interview prep sections --- docs/.vitepress/cache/deps/@theme_index.js | 46 ++--- docs/.vitepress/cache/deps/_metadata.json | 16 +- docs/interview/ds/heap.md | 18 ++ docs/interview/languages/javascript.md | 181 ++++++++++++++++++ docs/interview/languages/python.md | 209 +++++++++++++++++++++ docs/interview/sidebar.json | 8 + 6 files changed, 447 insertions(+), 31 deletions(-) create mode 100644 docs/interview/ds/heap.md create mode 100644 docs/interview/languages/javascript.md create mode 100644 docs/interview/languages/python.md diff --git a/docs/.vitepress/cache/deps/@theme_index.js b/docs/.vitepress/cache/deps/@theme_index.js index a44d743..810a187 100644 --- a/docs/.vitepress/cache/deps/@theme_index.js +++ b/docs/.vitepress/cache/deps/@theme_index.js @@ -9,31 +9,31 @@ import { } from "./chunk-3YS4HNIT.js"; // node_modules/vitepress/dist/client/theme-default/index.js -import "C:/git/docs/node_modules/vitepress/dist/client/theme-default/styles/fonts.css"; +import "/Users/djdietrick/Git/docs/node_modules/vitepress/dist/client/theme-default/styles/fonts.css"; // node_modules/vitepress/dist/client/theme-default/without-fonts.js -import "C:/git/docs/node_modules/vitepress/dist/client/theme-default/styles/vars.css"; -import "C:/git/docs/node_modules/vitepress/dist/client/theme-default/styles/base.css"; -import "C:/git/docs/node_modules/vitepress/dist/client/theme-default/styles/utils.css"; -import "C:/git/docs/node_modules/vitepress/dist/client/theme-default/styles/components/custom-block.css"; -import "C:/git/docs/node_modules/vitepress/dist/client/theme-default/styles/components/vp-code.css"; -import "C:/git/docs/node_modules/vitepress/dist/client/theme-default/styles/components/vp-code-group.css"; -import "C:/git/docs/node_modules/vitepress/dist/client/theme-default/styles/components/vp-doc.css"; -import "C:/git/docs/node_modules/vitepress/dist/client/theme-default/styles/components/vp-sponsor.css"; -import VPBadge from "C:/git/docs/node_modules/vitepress/dist/client/theme-default/components/VPBadge.vue"; -import Layout from "C:/git/docs/node_modules/vitepress/dist/client/theme-default/Layout.vue"; -import { default as default2 } from "C:/git/docs/node_modules/vitepress/dist/client/theme-default/components/VPBadge.vue"; -import { default as default3 } from "C:/git/docs/node_modules/vitepress/dist/client/theme-default/components/VPImage.vue"; -import { default as default4 } from "C:/git/docs/node_modules/vitepress/dist/client/theme-default/components/VPButton.vue"; -import { default as default5 } from "C:/git/docs/node_modules/vitepress/dist/client/theme-default/components/VPHomeHero.vue"; -import { default as default6 } from "C:/git/docs/node_modules/vitepress/dist/client/theme-default/components/VPHomeFeatures.vue"; -import { default as default7 } from "C:/git/docs/node_modules/vitepress/dist/client/theme-default/components/VPHomeSponsors.vue"; -import { default as default8 } from "C:/git/docs/node_modules/vitepress/dist/client/theme-default/components/VPDocAsideSponsors.vue"; -import { default as default9 } from "C:/git/docs/node_modules/vitepress/dist/client/theme-default/components/VPSponsors.vue"; -import { default as default10 } from "C:/git/docs/node_modules/vitepress/dist/client/theme-default/components/VPTeamPage.vue"; -import { default as default11 } from "C:/git/docs/node_modules/vitepress/dist/client/theme-default/components/VPTeamPageTitle.vue"; -import { default as default12 } from "C:/git/docs/node_modules/vitepress/dist/client/theme-default/components/VPTeamPageSection.vue"; -import { default as default13 } from "C:/git/docs/node_modules/vitepress/dist/client/theme-default/components/VPTeamMembers.vue"; +import "/Users/djdietrick/Git/docs/node_modules/vitepress/dist/client/theme-default/styles/vars.css"; +import "/Users/djdietrick/Git/docs/node_modules/vitepress/dist/client/theme-default/styles/base.css"; +import "/Users/djdietrick/Git/docs/node_modules/vitepress/dist/client/theme-default/styles/utils.css"; +import "/Users/djdietrick/Git/docs/node_modules/vitepress/dist/client/theme-default/styles/components/custom-block.css"; +import "/Users/djdietrick/Git/docs/node_modules/vitepress/dist/client/theme-default/styles/components/vp-code.css"; +import "/Users/djdietrick/Git/docs/node_modules/vitepress/dist/client/theme-default/styles/components/vp-code-group.css"; +import "/Users/djdietrick/Git/docs/node_modules/vitepress/dist/client/theme-default/styles/components/vp-doc.css"; +import "/Users/djdietrick/Git/docs/node_modules/vitepress/dist/client/theme-default/styles/components/vp-sponsor.css"; +import VPBadge from "/Users/djdietrick/Git/docs/node_modules/vitepress/dist/client/theme-default/components/VPBadge.vue"; +import Layout from "/Users/djdietrick/Git/docs/node_modules/vitepress/dist/client/theme-default/Layout.vue"; +import { default as default2 } from "/Users/djdietrick/Git/docs/node_modules/vitepress/dist/client/theme-default/components/VPBadge.vue"; +import { default as default3 } from "/Users/djdietrick/Git/docs/node_modules/vitepress/dist/client/theme-default/components/VPImage.vue"; +import { default as default4 } from "/Users/djdietrick/Git/docs/node_modules/vitepress/dist/client/theme-default/components/VPButton.vue"; +import { default as default5 } from "/Users/djdietrick/Git/docs/node_modules/vitepress/dist/client/theme-default/components/VPHomeHero.vue"; +import { default as default6 } from "/Users/djdietrick/Git/docs/node_modules/vitepress/dist/client/theme-default/components/VPHomeFeatures.vue"; +import { default as default7 } from "/Users/djdietrick/Git/docs/node_modules/vitepress/dist/client/theme-default/components/VPHomeSponsors.vue"; +import { default as default8 } from "/Users/djdietrick/Git/docs/node_modules/vitepress/dist/client/theme-default/components/VPDocAsideSponsors.vue"; +import { default as default9 } from "/Users/djdietrick/Git/docs/node_modules/vitepress/dist/client/theme-default/components/VPSponsors.vue"; +import { default as default10 } from "/Users/djdietrick/Git/docs/node_modules/vitepress/dist/client/theme-default/components/VPTeamPage.vue"; +import { default as default11 } from "/Users/djdietrick/Git/docs/node_modules/vitepress/dist/client/theme-default/components/VPTeamPageTitle.vue"; +import { default as default12 } from "/Users/djdietrick/Git/docs/node_modules/vitepress/dist/client/theme-default/components/VPTeamPageSection.vue"; +import { default as default13 } from "/Users/djdietrick/Git/docs/node_modules/vitepress/dist/client/theme-default/components/VPTeamMembers.vue"; // node_modules/vitepress/dist/client/shared.js var inBrowser = typeof document !== "undefined"; diff --git a/docs/.vitepress/cache/deps/_metadata.json b/docs/.vitepress/cache/deps/_metadata.json index 5961167..c076c0a 100644 --- a/docs/.vitepress/cache/deps/_metadata.json +++ b/docs/.vitepress/cache/deps/_metadata.json @@ -1,31 +1,31 @@ { - "hash": "3c715ca3", - "configHash": "9ebaad5b", - "lockfileHash": "ebeae15b", - "browserHash": "0b0ad317", + "hash": "b31dd5f2", + "configHash": "9af315cb", + "lockfileHash": "951d497c", + "browserHash": "14d9b0dd", "optimized": { "vue": { "src": "../../../../node_modules/vue/dist/vue.runtime.esm-bundler.js", "file": "vue.js", - "fileHash": "7cf78117", + "fileHash": "6eb7142a", "needsInterop": false }, "vitepress > @vue/devtools-api": { "src": "../../../../node_modules/@vue/devtools-api/dist/index.js", "file": "vitepress___@vue_devtools-api.js", - "fileHash": "98f5c738", + "fileHash": "f77c0dac", "needsInterop": false }, "vitepress > @vueuse/core": { "src": "../../../../node_modules/@vueuse/core/index.mjs", "file": "vitepress___@vueuse_core.js", - "fileHash": "2d266902", + "fileHash": "4488c276", "needsInterop": false }, "@theme/index": { "src": "../../../../node_modules/vitepress/dist/client/theme-default/index.js", "file": "@theme_index.js", - "fileHash": "2eb1f2ce", + "fileHash": "f16ffef2", "needsInterop": false } }, diff --git a/docs/interview/ds/heap.md b/docs/interview/ds/heap.md new file mode 100644 index 0000000..3e85c0f --- /dev/null +++ b/docs/interview/ds/heap.md @@ -0,0 +1,18 @@ +# Heap + +A heap is a specialized tree-based data structure that satisfies the heap property: in a max-heap, for any given node I, the value of I is greater than or equal to the values of its children, while a min-heap has the value of I less than or equal to its children. Heaps are commonly implemented as arrays. + +Common applications include: +- Priority queues +- Heap sort algorithm +- Finding kth largest/smallest elements +- Implementing efficient graph algorithms (Dijkstra's) + +## Time Complexities + +- Insert element: O(log n) +- Delete element: O(log n) +- Get min/max element: O(1) +- Build heap from array: O(n) +- Heapify (fix heap property): O(log n) +- Search for element: O(n) \ No newline at end of file diff --git a/docs/interview/languages/javascript.md b/docs/interview/languages/javascript.md new file mode 100644 index 0000000..c55ac06 --- /dev/null +++ b/docs/interview/languages/javascript.md @@ -0,0 +1,181 @@ +# JavaScript + +## Arrays + +### Creating + +```javascript +let a = []; +let a = [1, 2, 3]; +let a = Array(3).fill(0); // [0,0,0] +let a = Array.from({ length: 5 }, (_, i) => i + 1); // [1,2,3,4,5] +let a = [...Array(5).keys()]; // [0,1,2,3,4] +``` + +### Accessing + +```javascript +const a = [1, 2, 3]; +console.log(a[0]); // 1 +console.log(a.at(-1)); // 3 (last element) +``` + +### Manipulating + +#### Adding +```javascript +const a = []; +a.push(1); // Add to end +a.unshift(2); // Add to beginning +a.splice(1, 0, 3); // Insert 3 at index 1 +[...a, 4]; // Create new array with 4 added +``` + +#### Removing +```javascript +const arr = ['bread', 'butter', 'eggs', 'milk']; +arr.pop(); // returns and removes 'milk' +arr.shift(); // returns and removes 'bread' +arr.splice(1, 1); // removes 'butter' +``` + +#### Slicing +```javascript +const a = ['spam', 'egg', 'bacon', 'tomato', 'ham', 'lobster']; +a.slice(2, 5); // ['bacon', 'tomato', 'ham'] +a.slice(-3); // ['tomato', 'ham', 'lobster'] +a.slice(2); // ['bacon', 'tomato', 'ham', 'lobster'] +[...a]; // Create a copy of an array +``` + +#### Sorting +```javascript +const nums = [3, 1, 3, 2, 5]; +nums.sort(); // [1, 2, 3, 3, 5] +nums.reverse(); // [5, 3, 3, 2, 1] +[...nums].sort((a, b) => b - a); // Sort descending, creates new array + +const items = [ + { name: 'john', grade: 'A', age: 15 }, + { name: 'jane', grade: 'B', age: 12 }, + { name: 'dave', grade: 'B', age: 10 } +]; +items.sort((a, b) => a.age - b.age); +``` + +#### Filtering +```javascript +const odds = [1, 2, 3, 4, 5].filter(x => x % 2 === 1); +const evens = Array.from({ length: 20 }, (_, i) => i + 1).filter(x => x % 2 === 0); +``` + +## Strings + +Strings in JavaScript are immutable but have many built-in methods. + +### Helper Functions + +```javascript +const str = 'spam'; +'I saw spamalot!'.includes(str); // true +'I saw The Holy Grail!'.includes(str); // false + +'12345'.repeat(5); // '1234512345123451234512345' + +['John', 'Peter', 'Vicky'].join('#'); // 'John#Peter#Vicky' +'Hello, world!'.endsWith('!'); // true +'Hello, world!'.startsWith('H'); // true +'Hello, world!'.substring(0, 5); // 'Hello' +'Hello, world!'.slice(-6); // 'world!' +``` + +## Objects + +### Creating + +```javascript +const obj = {}; +const obj = { color: 'green', points: 5 }; +const obj = Object.create(null); +const obj = new Object(); +``` + +### Accessing + +```javascript +obj.color; +obj['color']; +obj?.points; // Optional chaining +const { color, points } = obj; // Destructuring + +obj.age = 30; +Object.assign(obj, { height: 180 }); // Merge properties +``` + +### Removing + +```javascript +delete obj.age; +``` + +### Iterating + +```javascript +Object.keys(obj).forEach(key => { + // do something +}); + +Object.values(obj).forEach(value => { + // do something +}); + +Object.entries(obj).forEach(([key, value]) => { + // do something +}); +``` + +### Object Methods + +```javascript +const keys = Object.keys(obj); +const values = Object.values(obj); +const entries = Object.entries(obj); +const merged = Object.assign({}, obj1, obj2); +const clone = { ...obj }; + +// Prevent modifications +Object.freeze(obj); +Object.seal(obj); +``` + +## Sets and Maps + +### Set + +```javascript +const set = new Set(); +set.add(1); +set.has(1); // true +set.delete(1); +set.clear(); + +const unique = [...new Set([1, 2, 2, 3, 3])]; // [1, 2, 3] +``` + +### Map + +```javascript +const map = new Map(); +map.set('key', 'value'); +map.get('key'); +map.has('key'); +map.delete('key'); +map.clear(); + +// Object to Map +const map = new Map(Object.entries(obj)); + +// Map to Object +const obj = Object.fromEntries(map); +``` + diff --git a/docs/interview/languages/python.md b/docs/interview/languages/python.md new file mode 100644 index 0000000..f47bd92 --- /dev/null +++ b/docs/interview/languages/python.md @@ -0,0 +1,209 @@ +# Python + +## Arrays + +### Creating + +```python +a = [] +a = [1,2,3] +a = list(range(1,11)) # 1 ... 10 +a = [x for x in [3, 4, 5, 6, 7] if x > 5] +a = [0] * 3 # [0,0,0] +``` + +### Accessing + +```python +a = [1,2,3] +print(a[0]) # 1 +print(a[-1]) # 3 +``` + +### Manipulating + +#### Adding +```python +a = [] +a.append(1) +a.extend([9, 11, 13]) +a += [6,7,8] +a.insert(0, 2) # Insert 2 at index 0 +``` + +#### Removing +```python +li = ['bread', 'butter', 'eggs', 'milk'] +li.pop() # returns and removes 'milk' +li.pop(2) # returns and removes 'eggs' +del li[0] # removes 'bread' +li.remove('butter') +``` + +#### Slicing +```python +# a_list[start:end] +# a_list[start:end:step] +a = ['spam', 'egg', 'bacon', 'tomato', 'ham', 'lobster'] +a[2:5] # ['bacon', 'tomato', 'ham'] +a[-3:] # ['tomato', 'ham', 'lobster'] +a[-5:-2] # ['egg', 'bacon', 'tomato'] +a[:4] # ['spam', 'egg', 'bacon', 'tomato'] +a[2:] # ['bacon', 'tomato', 'ham', 'lobster'] +a[0:6:2] # ['spam', 'bacon', 'ham'] +a[6:0:-2] # ['lobster', 'tomato', 'egg'] +a[::-1] # ['lobster', 'ham', 'tomato', 'bacon', 'egg', 'spam'] +a[:] # Create a copy of an array +``` + +#### Sorting +```python +li = [3, 1, 3, 2, 5] +li.sort() # [1, 2, 3, 3, 5] +li.reverse() # [5, 3, 3, 2, 1] +sorted(li) # returns a sorted copy of li + +li = [ + ('john', 'A', 15), + ('jane', 'B', 12), + ('dave', 'B', 10) +] +sorted(li, key=lambda x: x[2]) +sorted(li, cmp=lambda x,y: 1 if x