Chúng tôi thích thuê những người thông minh, chứ không thích người biết rõ về một kỹ thuật nào đó, nhưng lại thiếu sáng tạo, thiếu logic và thiếu biện chứng.
Dù là quan điểm nào đi nữa, nhưng phỏng vấn thì coding challenge vẫn là một phần quan trọng trong phỏng vấn.
Tuyển dụng Javascript lương cao cho bạn
Xác định chuỗi đối xứng (palindrome)
Câu hỏi Javascript 1:
Chuỗi đối xứng là chuỗi khi đảo ký tự từ trái qua phải và từ phải qua trái không thay đổi, như chữ “racecar”, “anna”, “tenet”. (Film tenet không biết khi nào mới chiếu, nghe đâu hoãn dài hơi vì covid)
Yêu cầu, cho bạn một chuỗi, xác định nó phải là đối xứng không
isPalindrome('racecar') === true isPalindrome('table') === false
Đáp án
const palindrome = str => { // chuyển qua lowercase trước str = str.toLowerCase() // chuyển thành array, reverse rồi so sánh return str === str.split('').reverse().join('') }
FizzBuzz
Câu hỏi Javascript 2:
Yêu cầu: viết một function đáp ứng những chuyện sau
- log ra các số từ 1 đến n, n là một parameter truyền vào
- log ra chữ
fizz
nếu là bội số của 3 - log ra buzz nếu là bội số của 5
- log ra fizzbuzz nếu là bội số của cả 3 và 5
fizzBuzz(5) // 1 // 2 // fizz // 4 // buzz
Để giải quyết bài toán này, chúng ta cần nhớ đến cách dùng %
để biết được số dư của phép chia, trả về 0 là chia hết, ngược lại thì không chia hết
12 % 5 // 2 -> 12 không phải bội số của 5 12 % 3 // 0 -> 12 là bộ số của 3
Đáp án
const fizzBuzz = num => { for(let i = 1; i <= num; i++) { // kiểm tra xem có là bội số của cả 3 và 5 if(i % 3 === 0 && i % 5 === 0) { console.log('fizzbuzz') } // có phải là bội số của 3 else if(i % 3 === 0) { console.log('fizz') } // có phải là bội số của 5 else if(i % 5 === 0) { console.log('buzz') } else { console.log(i) } } }
Đảo chữ
Yêu cầu: viết một function, params truyền vào 2 chuỗi, trả về true
nếu 2 chuỗi này là dạng đảo của nhau và false
cho trường hợp ngược lại.
2 chuỗi gọi là đảo nhau nếu số ký tự hoàn toàn giống nhau (không kể hoa thường), chỉ khác thứ tự.
anagram('finder', 'Friend') --> true anagram('hello', 'bye') --> false
Đây là một cách làm
// hàm helper để build một object làm nơi lưu trữ const buildCharObject = str => { const charObj = {} for(let char of str.replace(/[^w]/g).toLowerCase()) { // nếu object đã chứa giá trị đang loop qua // tăng giá trị nó lên 1, // ngược lại, thêm mới ký tự này vào object với giá trị = 1 charObj[char] = charObj[char] + 1 || 1 } return charObj } // hàm chính const anagram = (strA, strB) => { // lưu giá trị của strA vào object const aCharObject = buildCharObject(strA) // lưu giá trị strB vào object const bCharObject = buildCharObject(strB) // so sánh độ dài giữa 2 object if(Object.keys(aCharObject).length !== Object.keys(bCharObject).length) { return false } // đã chắc chắn về length giống nhau // kiểm tra tiếp số lượng các ký tự có giống nhau for(let char in aCharObject) { if(aCharObject[char] !== bCharObject[char]) { return false } } return true }
Đếm số nguyên âm
Câu hỏi Javascript 3:
Nguyên âm: anh-ôm-em-ú-ì, a
, o
, e
, u
, i
.
Viết một function nhận vào string, trả về số lượng nguyên âm có trong string
findVowels('hello') // --> 2 findVowels('why') // --> 0
Đáp án
const findVowels = str => { let count = 0 const vowels = ['a', 'o', 'e', 'u', 'i'] for (var char = str.length - 1; i >= 0; i--) { if (vowels.includes(char.toLowerCase())) { count++ } } return count }
Có thể dùng regular expression
const findVowels = str => { const matched = str.match(/[aeiou]/gi) return matched ? matches.length : 0 }
Fibonacci
Câu hỏi Javascript 4:
Cái này kinh điển. Mọi dân lập trình đều đụng tới dãy số fibonacci, thật thiếu sót nếu không đề cập ở đây.
Fibonacci là dãy số, mà số bên phải = tổng 2 số đứng bên trái. Như thế này: 0, 1, 1, 2, 3, 5, 8, 13, 21, 34
Yêu cầu: một function nhận params là n, trả về giá trị n
trong dãy fibonacci
fibonacci(3) // --> 2
Đáp án
const fibonacci = num => { const result = [0, 1] for (let i = 2; i <= num; i++) { const prevNum1 = result[i - 1] const prevNum2 = result[i - 2] result.push(prevNum1 + prevNum2) } return result[num] }
hoặc dùng đệ quy
const fibonacci = num => { // nếu là 1 hoặc 0 if (num < 2) { return num } // từ 2 trở lên return fibonacci(num-1) + fibonacci(num-2) }
Chúc các bạn phỏng vấn vui vẻ!
Bài viết gốc được đăng tải tại VuiLapTrinh
Có thể bạn quan tâm:
- 6 Javascript destructuring tricks
- 1001 cách tạo Array trong Javascript (Phần 1)
- Sử dụng StandardJS để code Javascript chuẩn không cần chỉnh
Xem thêm các việc làm JavaScript job hấp dẫn tại TopDev