Câu hỏi phỏng vấn javascript

Em chào anh/chị,
Em đã học javascript được 2 tháng, anh chị có thể đóng vai HR phỏng vấn em một vài câu hỏi liên quan đến javascript để em review lại kiến thức được không? Cũng như để em kiểm tra lại xem có mất gốc và vững căn bản chưa. Em xin được trả lời mọi câu hỏi liên quan đến javascript mà không tra google ạ.
Em nghĩ chắc cũng có nhiều người cùng câu hỏi, mong là topic này được SEO trang 1 công cụ tìm kiếm.
Em cam ơn!

2 Likes

/me chưa code js bao giờ nên xin góp vui thử…

  1. Bạn phân biệt thử JavaScript với Java giống và khác nhau ở điểm nào?
  2. JS và NodeJS có gì giống/khác nhau?
  3. JS, HTML, CSS có liên quan gì nhau?
5 Likes

Em xin trả lời các câu hỏi như sau:

Giống:

  • JS và java đề có thể lập trình OOP, JS trước phiên bản ES6 lập trình OOP theo prototype tức mọi object sẽ được kế thừa các thuộc tính từ prototype cha. Từ ES6 trở về sau JS có thêm class, extend.
  • Vào thập niên 90 cả js và java đều cùng 1 cty netscape phát triển, tên gọi là Javascript để marketing chứ không liên quan gì nhau.

Khác:

  • Js là dynamic type: khai báo biến không cần chỉ định kiểu dữ liệu, java là static type.
  • JS chạy nhanh hơn vì có trình biên dịch JIT, java phải biên dịch ra byte code.

Giống:

Nodejs được viết dựa trên C++ và javascript, các framework chạy trên nodejs cũng được viết bằng javascript.

Khác

  • Nơi code được thực thi:
    – nodeJS chạy ở server.
    – javascript chạy ở trình duyệt các framework javascript chạy được trên server, thiết bị nhúng, di động, app desktop, …
  • JS là ngôn ngữ lập trình còn nodejs là runtime environment để thực thi javascript.
  • Nodejs chỉ chạy được trên V8 engine còn javascript chạy trên được nhiều trình duyệt khác nhau, mỗi trình duyệt lại có 1 engine khác nhau.

Đây là 3 thành phần thiết yếu tạo nên trang web.

  • HTML để cho trang web có cấu trúc, làm bộ khung cho web.
  • CSS để căn lề, làm layout, màu sắc, hiệu ứng, … cho các element HTML và để làm đẹp cho web.
  • JS để làm cho web trở nên động bằng cách tương tác với các thành phần khác:
    – JS tương tác với DOM: thêm sửa xoá get value element HTML, …
    – JS tương tác với browser, xử file user, …
    – JS gửi và nhận dữ liệu giữa client và server, fetch data từ server để cập nhật lại web.
1 Like

Uầy, nếu chủ topic chuyên về JS thì cứ focus vào JS, đừng lấn qua Java nhiều quá thành ra “chém gió”.

4 Likes

theo mong đợi của cá nhân mình, nếu là pv fresher, thì không biết cứ nói không biết, không cần phải cố nghĩ ra điều gì đó để “trả lời được”

  1. java và javascript chỉ giống nhau cái tên có chữ java chứ không liên quan nhau, còn lịch sử cty nào, bla bla thì cứ kệ

  2. js không sinh ra để phục vụ oop, code oop bằng js đến hiện tại cũng chỉ để các ông loè nhau mà thôi, không cần phải đưa vào câu trả lời làm gì, chỉ gây loãng, làm người hỏi có cảm giác bạn đang chém gió

bạn có thể cho mình biết là kiến thức này đến từ đâu không?

sẽ hay hơn nếu có những thông tin này

  • interpreter language vs compiler language
  • single thread vs multithread (ở đây ý muốn nói java có thể code được multithread)
  • npm/yarn vs maven/gradle

Câu này cũng không đúng luôn, javascript là ngôn ngữ, nodejs là một platform (giống giống c# với .net)
cụ thể hơn thì bạn có thể tự coi trên trang chủ https://nodejs.org/en/docs/meta/topics/dependencies/

vì bạn đã nghĩ sai về nodejs (nodejs là platform, không phải ngôn ngữ), nên những câu liên quan đến việc nơi code thực thi đều vô nghĩa
js trên js engine, ở đâu có js engine là ở đó chạy được code js (không nhất thiết phải là engine v8, ví dụ như
trình duyệt safari xài engine khác)

câu này không đúnng, runtime environment là v8, chỉ là một phần của nodejs

tương tự, câu này và nhiều câu khác bạn đều nhầm lần nodejs là ngôn ngữ lập trình

đoạn cuối khi nói về 3 thành phần, nghe hơi lý thuyết quá, mình mong đợi một câu trả lời đơn giản hơn

  • html: web elements
  • css: styling for web element
  • js: reactive for web element
6 Likes

Ok mình tiếp nhé. Học JavaScript thì phải biết về bất đồng bộ rồi.

  1. Callback giúp ích gì khi viết code bất đồng bộ?
  2. Cho đoạn code sau, kết quả cho ra là gì? Giải thích.
function longTask() {
    for (let i = 0; i < 1000000; i++)
        console.log(i);
}

function runAsync(callback) {
    console.log('Start');
    callback();
    console.log('Done');
}

runAsync(longTask);
4 Likes

Em xin trả lời các câu hỏi như sau:

Callback là truyền hàm A vào hàm B (A là tham số của B), tại một vị trí được chỉ định nào đó trong thân hàm B thì A sẽ được thực thi. Dùng callback để xử lý bất đồng bộ có nghĩa là javascript ưu tiên chạy các tác vụ đồng bộ thực thi trước nên các tác vụ bất đồng được xếp vào hàng đợi chạy sau, tại thời điểm hàm bất đồng bộ đó trả về kết quả thì cần phải có một cái gì đó để xử lý kết quả này nên cần tới callback. Dùng callback trong async còn có mục đích bắt các task async chạy theo đúng thứ tự mình muốn. A là callback của B, B(A) B chạy xong ra kết quả thì A mới được chạy.

Kết quả là :

Start
0
1
....
1000000
Done!

Giải thích:
runAsync(longTask); này là lời gọi hàm để thực thi hàm runAsync và truyền longTask vào làm đối số (chỉ tham chiếu tới longTask ở phần khai báo bên trên chứ không chạy ngay). Trong lúc chạy runAsync, log Start trước, đến longTask() chạy in 0 => 1000000 rồi đến log Done.

Dạ em đọc trên mạng thấy bảo JIT là sự kết hợp của biên dịch và thông dịch nên chạy nhanh hơn các ngôn ngữ khác. Vậy sai là do javascript nhanh vì có JIT hay sai là javascript không dùng JIT anh?

Đoạn này chưa clear lắm. Ở đây bạn có nhắc tác vụ (task) đồng bộ và task bất đồng bộ, thì bạn hiểu sự khác nhau giữa 2 loại tác vụ này như nào? Lấy ví dụ. Và trong đoạn code của mình thì hàm nào là đồng bộ, hàm nào là bất đồng bộ.

Chuẩn rồi.

Việc A có chạy hay không là tùy vào B gọi callback lúc nào thôi. Không có chuyện B xong thì A mới được chạy. Giả sử có callback A đấy nhưng B nó không thích gọi thì sao.

Cuối cùng là tại sao đoạn code của mình không in ra như sau?

Start
Done
1
...
1000000
3 Likes

Thật ra em vẫn chưa rõ về bất đồng bộ lắm mặc dù em thấy nó xuất hiện ở nhiều ngôn ngữ chứ không phải mỗi JS, kiểu như các task diễn ra đồng thời song song cùng lúc. Theo em hiểu thì bất đồng bộ có nghĩa là tại 1 thời điểm trong khi task A đang chạy thì thực thi task B luôn không cần chờ task A xong.

Ví dụ soạn bài viết trên editor của web daynhauhoc, task upload hình ảnh sẽ phải tốn thời gian khá lâu vì file nặng, mạng yếu, chờ server trả link, … Nếu lập trình đồng bộ như bình thường thì user vừa submit ảnh thì web sẽ bị đứng không click, không sroll được, xong task xử lý ảnh thì mới được thao tác tiếp. Còn bất đồng bộ là trong khi task upload ảnh đang chạy thì user vẫn có thể gõ chữ tiếp, task upload chỉ hiện icon spinner xoay xoay khi nào xong thì update lại thành dấu tích. Trong lúc call API POST ảnh lên server thì những task khác hoạt động bình thường không bị block.

Em thấy đoạn code trên anh đặt tên hàm là runAsync nhưng em không nhìn ra bất đồng bộ chỗ nào hết, em chỉ thấy đây là hàm có sử dụng callback bình thường thôi. Trong even loop thì cả 2 hàm runAsync và longTask chỉ chạy trong ngăn xếp stack chạy theo thứ tự bình thường của hàm đồng bộ.

Thì như anh vừa nói callback phụ thuộc vào vị trí thực thi trong thân hàm cha

nên anh gọi callback() ở giữa console.log('Start')console.log('Done') thì nó ra như này

2 Likes

Phần lấy ví dụ mình trông đợi một câu trả lời mang tính “diễn dịch”, từ tổng quát trước rồi lấy ví dụ cụ thể. Ở đây bạn có thể nói trong JS thì chỉ có các tác vụ IO mới là bất đồng bộ, ví dụ như gọi API, đọc file, database, API của browser,… Còn chạy code JS kiểu nào đi nữa cũng không bất đồng bộ được (mặc dù JS có những cơ chế hỗ trợ async).

Đúng rồi, tên hàm lừa mị đấy :smile:

4 Likes

4 tính chất cơ bản của lập trình hướng đối tượng nhé.

Cái này mình thấy nhà tuyển dụng hỏi nhiều nhất nhé.

Và sau đây là danh sách video điểm qua về các tính chất của OOP Typescript nhé, bạn tham khảo thêm:

Mong bạn sớm tìm được công việc ưng ý. :wink:

3 Likes

A post was split to a new topic: Typescript có phổ biến chưa? Phỏng vấn fresher có hỏi về Typescript không?

js: ngôn ngữ lập trình, kiểu dữ liệu động, thông dịch, đơn luồng, gốc của nó là ngôn ngữ hướng cấu trúc, được tạo ra ban đầu là phục vụ cho các browser xử lý các chức năng như xử lý xự kiện, render dom, xử lý giao diện trên browser, vì html đơn thuần là ngôn ngữ đánh dấu chỉ có các tag, nên cần 1 ngôn ngữ kịch bản để xử lý sự kiện

java: ngôn ngữ lập trình, kiểu dữ liệu chặt chẽ (tĩnh), hỗ trợ đa luồng, là ngôn ngữ hướng đối tượng, vừa biên dịch vừa thông dịch, tạo ra để viết mọi thứ , từ ứng dụng, game, nhúng vào thiết bị điện tử, nó là 1 trong những ngôn ngữ đi đầu cho khái niệm viết 1 lần chạy mọi nơi chỉ cần có cài máy ảo, cần biên dịch về mã bytecode rồi mới chạy

còn việc chạy hơn hay chậm hơn phụ thuộc vào sự tối ưu code khi biên dịch, nên java khi biên dich thì đã đc tối ưu hóa để chạy nhanh hơn là đọc trực tiếp từng dòng từ file như js

js:là ngôn ngữ lập trình
nodejs:là framework đc xậy dựng lên để hổ trợ phát triển ứng dụng web viết bằng js
1 bên là ngôn ngữ, 1 bên là framework , nên mình thấy ngay từ khái niệm đã khác nhau rồi nên chúng ko giống nhau

html,js,css là 1 trong những thành phần tạo nên 1 trang web
html: như cái tên của nó ngôn ngữ đánh dấu siêu văn bản, đơn thuần là 1 văn bản có cấu trúc chỉ gồm các tag
css: định nghĩa các style cho các tag
js: đóng vai trò là 1 ngôn ngữ kịch bản để xử lý xự kiện cho trang web

2 Likes

Sai rồi, nodejs là platform, gọi là runtime environment còn tạm chấp nhận được chứ nói nodejs là framework là sai hoàn toàn nha bác.

1 Like

ok, tôi hơi nhầm lẫn , vì nodejs nó chứa tất cả mọi thứ luôn bao gồm cả nền tảng hoạt động như trình thông dịch, không như các ngôn ngữ tĩnh như java,c# nó tách riêng phần nền tảng hoạt động ra khỏi cái khung

2 Likes

Không biết khi phỏng vấn người ta có hỏi về closure, hoisting, IFE, scope, … không ạ?

Tùy cty, cứ học thêm cho chắc

2 Likes

bạn phỏng vấn vị trí gì. backend hay frontend. framework bạn xài là gì?

3 Likes

Người phỏng vấn: người duyệt web hay than phiền JavaScript chạy một hồi làm nặng máy, trình duyệt ngốn RAM. Là lập trình viên JavaScript bạn có thể dùng kỹ thuật nào đó tương tự như Garbage Collection để giải phóng bớt RAM? :smiley:

4 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?