Bất cứ ngành nghề nào nói chung và lập trình PHP nói riêng, khi bạn muốn xin việc thì các “giám khảo” khi phỏng vấn bạn thì đều lấy yếu tố kinh nghiệm và khả năng xử lý tình huống làm tiêu chí dành cho các ứng viên đến ứng tuyển.
Hôm nay mình xin chia sẻ cho các bạn một số câu hỏi khi gặp phải những nhà tuyển dụng khó tính, để các bạn có thể chuẩn bị được tâm lý tốt nhất khi tham gia các buổi phỏng vấn tuyển dụng lập trình PHP.
Câu 1: PHP có mấy cách khai báo? Những cách nào được xem là chính thống và không ảnh hưởng khi các phiên bản update sau này?
PHP có 4 cách khai báo, tuy nhiên chỉ có 2 cách được xem là hợp lệ và thống nhất trên toàn thế giới:
- <?php…?> → Là cách chính thống.
- <script language=”PHP”>…</script> → Cũng được xem là cách chính thống không ảnh hướng tới update của các phiên bản PHP sau này.
- <?…?> → (“Cần phải setting trên hệ thống mới sử dụng được” không nhất thiết phải nói.)
- <%…%> → (“Cần phải setting trên hệ thống mới sử dụng được” không nhất thiết phải nói.)
Câu 2: 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?
Hằng và biến trong PHP là khái niệm khác nhau:
- Đầu tiên khác nhau là cách khai báo:
- Biến thì chỉ cần dùng ký tự $ để gắn hoặc lấy giá trị.
- Hằng dùng hàm define() gắn giá trị và dùng constant() để lấy giá trị.
- Điểm khác biệt lớn nhất là hằng là không thể thay đổi trong suốt quá trình chạy chương trình, biến thì có.
Nêu 1 hằng được định nghĩa 2 lần thì chương trình vẫn chạy được bình thường tuy nhiên hằng chỉ có giá trị của lần định nghĩa đầu tiên.
Câu 3: Phân biệt $_POST và $_GET trong php?
Cả $_GET và $_POST đều được dùng để gửi dữ liệu lên server.
- $_GET: Gửi dữ liệu lên server thông qua URL, nên thông tin dữ liệu hiển thị lên url vì thế bảo mật kém, dữ liệu gửi lên bị giới hạn 1024 ký tự.
- $_POST: Gửi dữ liệu lên server dưới dạng ẩn thông qua HTTP Header vì thế nó có tính bảo mật cao hơn so với GET, dữ liệu gửi lên không bị giới hạn.
- Tuy nhiên tốc độ thực thi xử lý của Post chậm hơn Get.
Câu 4: Mảng là gì? Có mấy loại mảng trong PHP?
Mảng là một biến có thể chứa được nhiều phần tử, từ đó ta có thể dễ dàng lưu trữ, xắp xếp, hay xóa bỏ các phần tử trong mảng một cách dễ dàng.
Mảng bao gồm 2 thành phần là KEY và VALUE, key dùng để truy cập vào phần tử của mảng qua đó ta có thể gán giá trị hoặc lấy giá trị của các phần tử trong mảng.
Mảng(array) có 3 loại chính là:
- Mảng tuần tự: là mảng có key tự động tạo là chữ số tăng dần bắt đầu từ 0.
- Mảng không tuần tự: là mảng có key mà bạn phải tự định nghĩa bằng các ký tự chữ hoặc số, và key không được sắp xếp bất kỳ thứ tự nào.
- Mảng đa chiều: là mảng có chứa ít nhất một mảng khác trong nó.
Câu 5: 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?
Mảng tuần tự là mảng có key là chữ số bắt đầu từ 0 và tăng dần. Nó khác với mảng bất tuần tự là các phần tử trong nó KEY được sắp xếp tăng dần từ 0 còn mảng bất từ tự thì không.
Để duyệt mảng tả có thể dùng bất cứ vùng lập nào? Tuy nhiên chuẩn nhất là dùng vòng lập foreach, vì vòng lập này được nhà phát triển PHP xây dựng riêng cho việc duyệt mảng, nêu nó dễ sử dụng hơn, tốc độ xử lý của nó nhanh hơn.
Câu 6: Để 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ì?
Trong PHP cung cấp hàm implode(separator,array) dùng để chuyển mảng thành một chuỗi và hàm explode(separator,string,[limit]) dùng để chuyển một chuỗi thành mảng. Ngoài ra ta có hàm join($ky_tu,$array) giống hàm implode
Câu 7: Trong PHP để gộp mảng ta dùng hàm gì? Để tách mảng ta dùng hàm gì?
Trong PHP cung cấp hàm array_merge($array1, $array2, $array3,…) dùng để nối các mảng thành một mảng duy nhất và hàm array_slice(array,start,[length],[preserve]) dùng để tách mảng thành một mảng nhỏ hơn.
Câu 8: Cho biết sự khác nhau giữa serialize và json_encode? Lý giải theo cách bạn hiểu?
json_encode: là phương thức dùng để chuyển đổi một mảng(Array) hoặc Object thành string(chuỗi) dữ liệu JSON để sử dụng khi lưu trữ trong database, và để chuyển đổi ngược lại ta dùng json_decode để chuyển đổi một chuỗi dữ liệu JSON sang dạng mảng(Array) hoặc object để sử dụng trong code PHP.
serialize(array): là phương thức dùng để chuyển một mảng(Array) hoặc Object thành string(chuỗi) dữ liệu theo chuẩn của PHP để ta có thể lưu trữ hoặc truyền tải, khi muốn chuyển nó lại thành lại một mảng hoặc phương thức ta dùng phương thức unserialize().
Câu 9: Cookie và session có gì khác nhau? Người ta nói bản thân của session là cookie là đúng hay sai?
COOKIE là một tập tin nhỏ được server nhúng vào máy tính của người dùng. Nếu lần đầu tiên trình duyệt truy cập vào website nó sẽ gửi một COOKIE đến trình duyệt của người dùng, và mỗi khi người dùng tiếp tục yêu cầu một trang web từ website này thì COOKIE với các thông tin thu nhập từ phía người dùng trên website này sẽ được sẽ gửi trả về server của website.
SESSION được hiểu là khoảng thời gian mà người sử dụng giao tiếp với 1 ứng dụng. SESSION được lưu trữ hoàn toàn trên server, do vậy tính bảo mật cao hơn cookie, các website hiện này thường dùng session để lưu thông tin của người dùng khi họ đăng nhập. Chu kỳ sống của SESSION do webserver qui định, ta có thể điều chỉnh chu kỳ này khi cấu hình webserver, tại server sẽ có 1 PHPSESSID tương ứng được tạo ra, các PHPSESSID sẽ được lưu trong một tập tin văn bản ở tại vị trí được qui định trong file php.ini ở dòng session.save_path.
Người ta nói bản thân của session là cookie, về cơ bản SESSION và COOKIE đều là các tập tin lưu trữ lại thông tin của người dùng website, tuy nhiên dựa trên khái miệm, cách sử dụng, ứng dụng của chúng là khác biệt vì thế tôi cho rằng chúng là khác biệt.
Câu 10: Theo bạn, sự khác nhau của toán tử & và && trong PHP là gì?
Toán từ & và && trong PHP đều là phép toán AND, tuy nhiên toán tử một dấu & áp dụng theo kiểu bit, nói dễ hiểu hơn một dấu & là phép AND thao tác trên các bit ví dụ 1 & 0 thì ra 0. Phép toán hai dấu & thì chỉ áp dụng cho kiểu boolean True và False.
Câu 11: Hãy cho biết $a++ và ++$a khác nhau ở đâu?
Cả hai đều được dùng để tăng thêm một đơn vị cho biết số, tuy nhiên điểm khác biệt ở $a++ được thực sau khi nó được gọi, còn ++$a được thực thi ngay khi nó được gọi, lấy ví a bằng 5, khi dung hàm echo để in nó ra với giá trị a++ thì nó sẽ ra là 5, còn khi dùng echo cho ++a thì giá trị của được in ra sẽ là 6.
Câu 12: Tính nhanh kết quả của đoạn code sau
1 2 3 4 |
<?php $a=5; echo $a++ + $a– + –$a + ++$a + $a++ + ++$a – $a– + $a; ?> |
→ Lỗi không in ra được gì.
Câu 13: Mysql_close() cần thiết như thế nào trong thực tế ?. Vì sao ít thấy người dùng áp dụng nó?
Mysql_close() được dùng để đóng kết nối đến cơ sở dữ liệu đã mở trước đó. Điều này rất cần thiết vì nó giúp giảm tải xử lý của database, hiểu đơn giản thế này một người truy cập tới website của bạn và website của bạn có kết nối database và điều đó đồng nghĩa với việc sẽ có ít nhất một kết nối database được tạo, vậy 100 người sẽ có 100 kết nối, và giả sử dụng trong đó có 99 người không sử dụng nữa nhưng kết nối vẫn còn hiệu lực thì điều này có nghĩa là thay vì database phải xử lý chỉ có 1 kết nối mà nó phải xử lý 100 kết nối.
Vì sao ít người dùng đầu tiên vì hiệu quả mang lại của hàm này rất khó thấy trong các trường hợp thông thường, trên thực tế khi người dùng không còn sử dụng nữa thì sau một khoảng thời gian ngắn kết nối này sẽ tự động đóng, thứ hai vì ít người có thể nhìn thấy được vấn đề nếu không có dịp tiếp xúc hoặc làm việc với lượng dữ liệu lớn thì sẽ thấy việc mở hoặc đóng một conneciton kịp thời và chính xác sẽ tiết kiệm được rất nhiều tài nguyên cho hệ thống cũng như tốc độ xử lý của hệ thống, vì thế hàm này rất cần thiết khi bạn quản lý tài nguyên và tốc độ thực thi của hệ thống hay của website.
Câu 14: Muốn chuẩn hóa dữ liệu về utf-8 trong PHP ta phải làm gì?.
Sử dụng encoding utf-8 tại meta charset trong tập tin PHP.
Sử dụng encoding utf-8-unicode-ci trong MySQL.