On this page
พื้นฐานที่ต้องแม่น (Technical Fundamentals)
ความรู้เชิงปฏิบัติที่บริษัทไอทีเกือบทุกที่ในไทยคาดหวัง — สำหรับงานส่วนใหญ่ สำคัญกว่าการทำ LeetCode
Tech Interview Handbook และคู่มือสาย FAANG ส่วนใหญ่เน้น algorithm แต่ความจริงคือบริษัทไอทีส่วนใหญ่ในไทย (SI, outsource, agency, enterprise และ startup จำนวนมาก) ไม่ได้ออกโจทย์ LeetCode ยาก ๆ สิ่งที่ถามจริงคือพื้นฐานเชิงปฏิบัติด้านล่างนี้ ซึ่งถ้าแม่นจะได้เปรียบกว่าการท่องโจทย์ algorithm เป็นร้อยข้อ
Git & การทำงานเป็นทีม
แทบทุกบริษัทใช้ Git และทำงานผ่าน pull request ผู้สัมภาษณ์มักถามว่าเคยใช้ workflow แบบไหน และดูจาก commit history ในโจทย์ take-home ด้วย ต้องเข้าใจ branch, commit, merge, การแก้ conflict และมารยาทการรีวิวโค้ด
# workflow พื้นฐานที่ใช้จริงทุกวัน
git checkout -b feature/login # แตก branch ใหม่จาก main
git add . && git commit -m "feat: add login form"
git push -u origin feature/login # push ขึ้น remote
# เปิด Pull Request บน GitHub/GitLab แล้วให้เพื่อนรีวิว
# เมื่อ main มีการเปลี่ยนแปลง ให้ดึงมา sync ก่อน merge
git checkout main && git pull
git checkout feature/login && git rebase main # หรือ git merge main- เขียน commit message ให้สื่อความหมาย (เช่นแบบ Conventional Commits: feat/fix/refactor)
- 1 PR ควรโฟกัสเรื่องเดียว ไม่ใหญ่เกินจนรีวิวยาก
- เวลา conflict ให้อ่านทั้งสองฝั่งให้เข้าใจก่อนเลือกรวม อย่าลบของคนอื่นทิ้งมั่ว
- รีวิว PR คนอื่นด้วยน้ำเสียงสร้างสรรค์ ชมในสิ่งที่ดี เสนอแนะในสิ่งที่ปรับได้
HTTP & REST API
งานสายเว็บ/แอปเกือบทั้งหมดต้องคุยกับ API ต้องเข้าใจว่า HTTP method แต่ละตัวใช้ทำอะไร, status code สื่อความหมายอะไร และ REST ออกแบบ endpoint อย่างไรให้สม่ำเสมอ
| Method | ใช้ทำอะไร | Idempotent? |
|---|---|---|
| GET | อ่านข้อมูล ไม่เปลี่ยนแปลง state | ใช่ |
| POST | สร้างข้อมูลใหม่ | ไม่ |
| PUT | แทนที่ข้อมูลทั้งก้อน | ใช่ |
| PATCH | แก้บางส่วนของข้อมูล | ไม่เสมอไป |
| DELETE | ลบข้อมูล | ใช่ |
| Status Code | ความหมาย |
|---|---|
| 200 OK / 201 Created | สำเร็จ (201 = สร้างใหม่สำเร็จ) |
| 400 Bad Request | client ส่งข้อมูลผิดรูปแบบ |
| 401 / 403 | ยังไม่ login / login แล้วแต่ไม่มีสิทธิ์ |
| 404 Not Found | ไม่พบทรัพยากรที่ขอ |
| 500 Internal Server Error | ฝั่ง server พัง |
หลัก REST: ใช้ noun เป็น resource (เช่น /users/123/orders) ไม่ใช่ verb, ใช้ HTTP method สื่อ action, ส่ง/รับเป็น JSON และคืน status code ให้ตรงความหมาย
ฐานข้อมูล & SQL
SQL คือทักษะที่ถูกถามบ่อยที่สุดอย่างหนึ่งในสัมภาษณ์งานไทย ต้องเขียน query ที่มี JOIN, GROUP BY, และเข้าใจว่า INDEX ช่วยให้ query เร็วขึ้นอย่างไร
-- หาลูกค้าที่มียอดสั่งซื้อรวมเกิน 1000 บาท
SELECT u.name, SUM(o.total) AS total_spent
FROM users u
JOIN orders o ON o.user_id = u.id
WHERE o.status = 'paid'
GROUP BY u.id, u.name
HAVING SUM(o.total) > 1000
ORDER BY total_spent DESC;- JOIN — เชื่อมหลายตาราง (INNER vs LEFT JOIN ต่างกันอย่างไร)
- INDEX — ทำให้ค้นหาเร็วขึ้น แต่ทำให้ write ช้าลงเล็กน้อย ใส่ที่คอลัมน์ที่ค้นบ่อย
- Normalization — แยกข้อมูลไม่ให้ซ้ำซ้อน (รู้จัก 1NF–3NF พอสังเขป)
- Transaction — กลุ่มคำสั่งที่ต้องสำเร็จทั้งหมดหรือไม่สำเร็จเลย (ACID)
ส่วนการเลือก SQL vs NoSQL และการ scale ฐานข้อมูล ดูเพิ่มในหน้า System Design
OOP & หลักการออกแบบ
ภาษาที่ใช้ในองค์กรไทยจำนวนมาก (Java, C#, PHP, TypeScript) เป็น OOP ต้องอธิบาย 4 เสาหลักได้ และรู้จักหลัก SOLID แบบเข้าใจ ไม่ใช่ท่องชื่อ
- Encapsulation — ซ่อนรายละเอียดภายใน เปิดเฉพาะที่จำเป็น
- Inheritance — สืบทอดคุณสมบัติจาก class แม่ (ใช้เท่าที่จำเป็น)
- Polymorphism — object ต่างชนิดตอบสนอง method เดียวกันได้ต่างกัน
- Abstraction — มองภาพรวมโดยไม่ต้องรู้รายละเอียดการทำงานภายใน
- SOLID — โดยเฉพาะ Single Responsibility และ Dependency Inversion ที่ถูกถามบ่อย
การเขียน Test
ในโจทย์ take-home การมี test คือสิ่งที่ทำให้คุณเด่นกว่าคนอื่นทันที เพราะแสดงว่าคิดถึงความถูกต้องและการดูแลโค้ดระยะยาว
- Unit test — ทดสอบฟังก์ชัน/หน่วยเล็ก ๆ แยกกัน (เร็ว เขียนเยอะได้)
- Integration test — ทดสอบหลายส่วนทำงานร่วมกัน เช่น API + database
- เขียน test ที่ครอบ edge case ไม่ใช่แค่ happy path
- เครื่องมือยอดนิยม: Jest/Vitest (JS), pytest (Python), JUnit (Java)
ความปลอดภัยเบื้องต้น (Security)
ไม่ต้องเป็นผู้เชี่ยวชาญ แต่ต้องรู้ช่องโหว่พื้นฐานที่นักพัฒนาทุกคนต้องป้องกัน เพราะถูกถามบ่อยขึ้นเรื่อย ๆ
- SQL Injection — ใช้ parameterized query เสมอ อย่าต่อ string เข้า query ตรง ๆ
- XSS — escape/sanitize ข้อมูลจากผู้ใช้ก่อนแสดงผลบนหน้าเว็บ
- Authentication vs Authorization — ยืนยันว่าเป็นใคร (login) ต่างจากมีสิทธิ์ทำอะไร (role/permission)
- เก็บรหัสผ่านด้วยการ hash (bcrypt/argon2) ไม่เก็บเป็น plain text เด็ดขาด
- ห้าม commit secret/API key ลง git ให้ใช้ environment variable แทน
บริษัทไทยสาย SI, outsource, agency และ enterprise ส่วนใหญ่ออกสัมภาษณ์จากพื้นฐานเหล่านี้ + โจทย์งานจริง มากกว่า algorithm ยาก ๆ ถ้าเป้าหมายไม่ใช่ big-tech ต่างชาติ ให้ลงน้ำหนักที่หน้านี้และหน้า สัมภาษณ์เชิงปฏิบัติ มากกว่าการไล่ทำ LeetCode