Tổng hợp tất cả câu hỏi và bài tập khi phỏng vấn PHP

Tổng hợp tất tần tật mọi câu hỏi khi phỏng vấn PHP developer. Một số công ty thường có bài test trên giấy gồm GMAT, IQ và viết code. Khi phỏng vấn bạn nên trả lời trung thực biết gì trả lời đó nếu không khi xoáy sâu sẽ không trả lời được. Ngoài ra nên tương tác tốt với người phỏng vấn, khi người phỏng vấn hỏi về vấn đề gì nên chủ động trả lời chi tiết về vấn đề đó luôn, nếu người phỏng vấn giải thích những gì bạn chưa hiểu thì nên khen họ 1 câu 😀

1. Bài tập

  • Viết chương trình có input: aaabbacccdeeeaaaa => output: a3b2a1c3d1e3a4
  • Viết chương trình có tìm 5 số nguyên tố lớn nhất nhỏ hơn 10000
  • Viết chương trình tìm số lớn thứ 2 trong 1 dãy số. Ví dụ input [8,7,12,15,19] => 15
  • Viết chương trình tìm thời gian để chuyển chuỗi sang số theo qui luật sau:
    • Trong chuỗi mỗi 1 phụ âm liền nhau số tăng thêm 1
    • Trong chuỗi mỗi 2 phụ âm liền nhau số tăng thêm 2
    • Trong chuỗi mỗi 3 phụ âm liền nhau số tăng thêm 4
    • Trong chuỗi mỗi 4 phụ âm liền nhau số tăng thêm 8
    • Trong chuỗi mỗi 5 phụ âm liền nhau số tăng thêm 16
    • Mỗi nguyên âm cộng thêm 1
    • Biết nguyên âm trong tiếng Anh là [‘a’,’e’,’i’,’o’,’u’]
    • Ví dụ:
      • monaliza => 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 = 8
      • differents => 1 + 1 + 2 + 1 + 1 + 1 + 4 = 11
      • Chrstmabel => 32 + 1 + 1 + 1 + 1 = 36
  • Viết chương trình từ số đánh vần sang chữ trong tiếng Việt
    • 100.000 => một trăm nghìn
    • 1 233 305 => mot trieu hai tram ba ba nghin ba tram linh nam

Đối với phần bài tập cần đặt tên biến, tên hàm thật chính xác, có ý nghĩa và chuẩn coding convention. Nhà tuyển dụng không chỉ nhìn vào kết quả của chương trình mà còn nhìn vào cách bạn code.

2. Câu hỏi PHP

Basic

  • Hằng trong PHP khác gì so với biến? Nếu 1 hằng được định nghĩa 2 lần, thì liệu có bị lỗi không?
  • Phân biệt $_POST và $_GET trong php?
  • Phân biệt require và include?
  • Mảng tuần tự là gì? Khác gì với bất tuần tự? Để duyệt mảng ta dùng vòng lặp nào?
  • PHP có mấy kiểu dữ liệu
  • Để chuyển mảng thành chuỗi ta dùng hàm gì? Để tách chuỗi thành mảng ta dùng hàm gì?
  • Lấy ngẫu nhiên 30 số trong dãy 100 số
  • Trail là gì, khai báo trail như thế nào
  • Theo bạn, sự khác nhau của toán tử & và && trong PHP là gì?
  • Hãy cho biết $a++ và ++$a khác nhau ở đâu?
  • Cookie và session có gì khác nhau? Khi tắt cookie trên trình duyệt thì có ảnh hưởng tới session không
  • Cho biết sự khác nhau giữa serialize và json_encode?
  • Mô tả một luồng xử lí của Laravel.
  • Laravel authentication bằng cách nào?
  • Cron job là gì? Cron job dùng vào việc gì?
  • Có biết sử dụng framework nào ko? Nếu biết sẽ hỏi một số thứ liên quan đến framework đó.

Advance

  • output của
$a = 1;
$b = &$a;
$b++;
echo $b + $a;
  • output của
    null == '' && 0 == ''
  • Muốn chuẩn hóa dữ liệu về utf-8 trong PHP ta phải làm gì?
  • $$ có nghĩa là gì
  • nêu tất cả function để đếm số element trong 1 array
  • hàm anonymous là gì?
  • count([null,1,2,3,0,”]) = ?
  • Replace tất cả số trong một chuỗi bằng regex.
  • Static variable có sử dụng được trong instance class không?
  • Eloquen trong laravel là gì?
  • Laravel xử lí dependency injection như thế nào
  • Làm thế nào để gửi 1000 email một lúc mà ko cần chờ lâu.
  • Làm thế nào để export ra 1 file csv có 1 triệu bản ghi
  • Liệt kê những lỗi bảo mật thường gặp trong PHP.
  • Webserver hoạt động với PHP như thế nào?
  • Các extension giúp cải thiện hiệu năng của PHP.

3. Câu hỏi về kiến thức lập trình chung

Phần kiến thức này áp dụng cho mọi ngôn ngữ lập trình không chỉ riêng PHP và nó cũng là sự phân biệt giữa junior và senior. Nó giúp bạn áp dụng trong code để code của bạn dễ đọc, dễ bảo trì hơn. Ngoài ra, ngày nay 1 lập trình viên thường phải biết nhiều ngôn ngữ không chỉ riêng PHP nên nhà tuyển dụng thường hỏi thêm về kiến thức lập trình cơ bản để biết khả năng học ngôn ngữ mới của bạn đến đâu nữa.

  • Nêu 4 đặc điểm của OOP. Cho ví dụ về tính đa hình.
  • Mô hình MVC là gì?
  • ORM là gì?
  • Cache là gì? Có mấy loại cache?
  • Abtract và interface giống và khác nhau thế nào? Khi nào sử dụng interface?
  • Phân biệt authorize và authentication.
  • Trình bày authorize bằng jwt
  • Middleware là gì? Cho ví dụ middleware trong laravel?
  • Nguyên lí solid là gì? Mô tả từng nguyên lí trong SOLID!
  • Coding convention là gì? Kể chi tiết ra.
  • Unit test dùng để làm gì?
  • Design pattern là gì? Có mấy loại?
  • Những design pattern bạn từng sử dụng!
  • Dependency injection là gì? Có bao nhiêu cách sử dụng dependency injection?
  • Trong API thì stateful và stateless khác nhau ở điểm gì.
  • Đặc điểm restful api. Cách bạn thường format output trong API.
  • HTTP 2 khác HTTP 1 ở điểm gì?
  • Nêu 1 dự án mà bạn cảm thấy tâm đắc.
  • Khi website chậm phải làm gì?

Một số câu hỏi về github.

  • Sự khác nhau giữa pull và fetch
  • Sử dụng Branch như thế nào, bạn hay dùng mấy branch
  • Lệnh reset dùng để làm gì? Có mấy loại reset?
  • Rebase là gì?

4. Câu hỏi về database

  • Thiết kế một database cho ứng dụng chat có group chat. (cần lưu ý cách đặt tên column, tên bảng, chuẩn dữ liệu cho từng column)
  • Nêu 2 cách lấy kết quả thứ 2 của hàm select
  • sql injection là gì, làm cách nào để tránh sql injection
  • transaction là gì
  • Index database là gì
  • Nhược điểm index
  • Khi nào thì sử dụng index
  • Cách đánh index
  • Nêu các loại index. Cách index trong Mysql hoạt động? Có sử dụng toán tử > hoặc < cho index được ko?
  • Bảng học sinh có 1 index gồm Tên + Số điện thoại => Vậy search theo “%số điện thoại” có nhanh hơn ko? Search theo “Tên%” có nhanh hơn ko? Tại sao?
  • Sự khác nhau giữa InoDB và MyISAM
  • Bạn thường làm gì để optimize câu query
  • NoSQL khác RDBMS ở điểm gì? Khi nào sử dụng NoSQL?
  • Redis là gì?
  • Có biết linux không? Có biết AWS không?

5. Câu hỏi về javascript

  • Callback hell là gì?
  • Promise là gì?
  • ES6 là gì?
  • Dom là gì?
  • javascript thuần khác reactjs ở điểm gì

6. Một số câu hỏi về thuật toán

Phần này thường ít khi bị hỏi và nó khá nâng cao dành cho senior

 

 

 

 

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *