คำถามประเภท FizzBuzz สำหรับนักพัฒนาเว็บหรือ SQL คืออะไร [ปิด]


10

หลังจากนั้นไม่นานเราก็จ้างงานอีกครั้งและฉันกำลังตรวจสอบการทดสอบสำหรับโปรแกรมเมอร์ บางคนล้าสมัยไปแล้ว อะไรคือบางส่วนของคำถาม FizzBuzz ชนิดสำหรับนักพัฒนาเว็บและ SQL? นั่นคือไม่สำคัญเกินไป แต่ก็ยังสามารถแก้ไขได้ในห้าถึงสิบนาทีด้วยปากกาและกระดาษและไม่มี Google?

โดยทั่วไปแล้วฉันจะกำจัดผู้สมัครประมาณสองในสามหรือมากกว่านั้นขึ้นอยู่กับประวัติย่อและจากนั้นก็มีผู้สมัครที่ดีเพียงไม่กี่คนในการสัมภาษณ์หนึ่งชั่วโมง (ซึ่งอาจเป็นทางโทรศัพท์) ณ จุดนี้ผู้สมัครกำลังเขียนแบบทดสอบบุคลิกภาพและมีโอกาสเขียนรหัสคล้าย FizzBuzz ดังนั้นฉันไม่ได้พยายามที่จะกำจัดผู้สมัครจำนวนมาก แต่ฉันพยายามตรวจสอบการประเมินเบื้องต้นของฉันว่าผู้สมัครสามารถจ้างงานและสามารถเขียนรหัสได้


2
สิ่งใดที่คุณมองหาในการพัฒนาเว็บ?
Oded

ฉันเดาว่าฉันกำลังมองหาความเข้าใจของ HTML / CSS / JSON / HTTP; ตามที่ Rachel ได้กล่าวไว้ FizzBuzz นั้นใช้ได้สำหรับการทดสอบ Javascript / PHP / etc
Domchi

คำตอบ:


12

ฉันเห็น FizzBuzz เป็นแบบทดสอบเพื่อดูว่าผู้คนรู้จักสิ่งที่พวกเขาอ้างว่ารู้เกี่ยวกับประวัติย่อของพวกเขาหรือไม่ ฉันจะไม่ใช้มันเป็นอย่างอื่นนอกจากคำถามที่จะกำจัดผู้สมัครที่ไม่รู้ว่าพวกเขากำลังพูดถึงอะไร

การแทนที่ SQL ที่เหมาะสมคือการขอให้ผู้สมัครเขียนคำสั่ง SQL เช่นการเลือกฟิลด์ชื่อของสองตารางที่ขึ้นต้นด้วย A. มันง่ายและแสดงให้เห็นว่าผู้สมัครจริงมีความรู้เกี่ยวกับ SQL

SELECT Table1.Name, Table2.Name
FROM Table1 
INNER JOIN Table2 ON Table1.Id = Table2.Id
WHERE Table1.Name LIKE 'A%' OR Table2.Name LIKE 'A%'

สำหรับนักพัฒนาเว็บฉันแค่ขอให้พวกเขา FizzBuzz เพียงเพราะคุณกำลังเขียนโปรแกรมสำหรับเว็บไม่ได้หมายความว่าคุณควรขาดความสามารถในการเขียนโปรแกรมตรรกะขั้นพื้นฐาน

หากคุณกำลังมองหาคำถามสัมภาษณ์จริงมีคำถามดีๆมากมายทางออนไลน์ที่คุณสามารถค้นหาได้ด้วยการค้นหาด่วน ฉันพบมากกว่าที่ฉันสนใจในรายการโดยใช้เวลา 10 วินาทีกับ Google


2
การเข้าร่วมเป็นวิธีที่ดีในการแยกล่วงหน้าจากโปรแกรมเมอร์ SQL ขั้นสูงเนื่องจากในการเขียนโปรแกรม SQL มักจะต้องใช้กระบวนทัศน์ที่แตกต่างกันในการคิดมากกว่าการเขียนโปรแกรมฝั่งเซิร์ฟเวอร์ซึ่งโดยปกติแล้วจำเป็น เข้าร่วมและแบบสอบถามย่อยที่ใช้ในการทำให้ตอฉันจนฉันเริ่มคิดคำสั่ง SQL ในแง่ของชุด
Chris C

@CCRicers ฉันเห็นด้วย และถ้าคุณกำลังสัมภาษณ์สำหรับนักพัฒนา SQL ขั้นสูงผมจริงยังเพิ่มความต้องการของกลุ่มเพื่อว่าตั้งแต่ผมทำงานกับ SQL ไม่น้อยก่อนที่ผมอย่างเต็มที่เข้าใจสิ่งที่กลุ่มความหมายและวิธีการทำงาน
ราเชล

พิจารณากำหนดให้เข้าร่วมด้วยตนเอง: "สร้างตารางพนักงาน (หมายเลข ID, ชื่อข้อความ, หมายเลข MANAGER_ID)" จากนั้น "ฉันจะแสดงรายการพนักงานและผู้จัดการของพวกเขาได้อย่างไร"
วินไคลน์

ทั้งนี้ขึ้นอยู่กับชนิดของฐานข้อมูลตำแหน่ง / SQL คุณจ้าง (และนักพัฒนาพื้นหลัง / สภาพแวดล้อมของคุณ) คุณสามารถขอจริงคำตอบ 'FizzBuzz'
Clockwork-Muse

และมีข้อได้เปรียบเพิ่มเติมว่าเป็นสเป็คที่ไม่ดีดังนั้นจึงทดสอบว่าผู้สมัครชี้แจงข้อกำหนดก่อนการเขียนรหัสหรือไม่
Peter Taylor

4

นี่คือคำตอบที่ฉันให้กับคำถาม (อาจซ้ำกัน) ที่คล้ายกันมากซึ่งถูกปิดในไซต์นี้

ระดับง่ายมาก: กำหนดตารางพนักงานด้วยคอลัมน์ EmpID, FirstName, นามสกุล, HireDate และ TerminationDate: เขียนแบบสอบถามเพื่อส่งคืนพนักงานทุกคนที่ยังคงทำงานให้กับ บริษัท ที่มีนามสกุลเริ่มต้นด้วย "Smith" เรียงตามนามสกุลแล้วชื่อจริง

ระดับง่าย กำหนดตารางพนักงานด้านบนเพิ่มตารางใหม่ "AnnualReviews" พร้อมคอลัมน์ EmpID และ ReviewDate: เขียนแบบสอบถามเพื่อส่งคืนพนักงานทุกคนที่ไม่เคยมีความคิดเห็นเรียงโดย HireDate

ระดับกลาง
จากตารางพนักงานด้านบนเขียนแบบสอบถามเพื่อคำนวณความแตกต่าง (เป็นวัน) ระหว่างพนักงานที่ดำรงตำแหน่งสูงสุดและน้อยที่สุดที่ยังทำงานให้กับ บริษัท อยู่

ระดับความยาก กำหนดตารางพนักงานด้านบนเขียนแบบสอบถามเพื่อคำนวณระยะเวลายาวนานที่สุด (เป็นวัน) ที่ บริษัท ไปโดยไม่ต้องจ้างหรือยิงใคร

ระดับที่ยากขึ้น
อีกครั้งโดยใช้ตารางเดียวกันเขียนแบบสอบถามที่ส่งคืนพนักงานแต่ละคนและสำหรับแต่ละแถว / พนักงานรวมถึงจำนวนพนักงานที่มากที่สุดที่ทำงานให้กับ บริษัท ได้ตลอดเวลาในระหว่างการดำรงตำแหน่งและวันแรกที่ถึงขีด จำกัด สูงสุด คะแนนพิเศษสำหรับการไม่ใช้เคอร์เซอร์


1
คำถามที่น่าสนใจ อย่างไรก็ตาม "ยาก" / "หนัก" ระดับดูเหมือนว่ามันยากที่จะฉัน แม้จะมีประสบการณ์ SQL ที่เหมาะสม แต่ฉันเชื่อว่ามันอาจยากเกินไปที่จะแก้ไขในสถานการณ์สัมภาษณ์ บางทีถ้าคุณปล่อยให้ผู้สมัครอยู่คนเดียวประมาณครึ่งชั่วโมงหรือมากกว่านั้น
sleske

ฉันสามารถบอกคำถาม "ยากขึ้น" ได้ยากเมื่อฉันรู้ว่าฉันไม่รู้ด้วยซ้ำว่าเคอร์เซอร์คืออะไร ... และฉันใช้ MySQL ทุกวัน! : - /
thesunneversets

@Johnfx โปรดดูคำตอบเหล่านี้สำหรับปัญหาของคุณที่ฉันสัมภาษณ์ทุกวันพรุ่งนี้docs.google.com/document/d/?hl=th
mr_eclair

ทำไมคุณต้องให้ฉันดู คุณสามารถทดสอบด้วยตัวเองและดูว่าคุณได้รับคำตอบที่ถูกต้องหรือไม่
JohnFx

3

แล้ว fizzbuzz ล่ะ นี่เป็นเวอร์ชั่นของ Oracle:

select case when mod(level,35) = 0 then 'fizzbuzz'
            when mod(level,7) = 0 then 'buzz'
            when mod(level,5) = 0 then 'fizz'
            else to_char(level) end fizzbuzz
from dual connect by level <= 100

1
+1 สำหรับสุดยอด แต่ฉันคิดว่าตารางตัวเลขเสมือนไม่ได้มาบ่อยพอที่จะอยู่ในกล่องเครื่องมือ SQL ของทุกคน คุณต้องมองเห็นพวกมันว่า
Conrad Frix

0

ฉันพบว่าคนมักจะมีปัญหาในการทำงานกับเวลาด้วยเหตุผลบางอย่างเพื่อให้เป็นสถานที่ที่ดีสำหรับการทดสอบเล็ก ๆ

บางสิ่งเช่นนี้

ส่วนที่ 1: สร้างฟังก์ชันที่จะคำนวณวันที่ N หรือวันทำงานสุดท้ายในเดือนที่กำหนด - เช่น; วันอังคารที่สามและครั้งสุดท้ายในเดือนถัดไป

ส่วนที่ 2 (ถ้าต้องการ): ออกแบบตารางเพื่อเก็บนิพจน์ตามเวลาที่กำหนด กำหนดการอาจเป็น "วันทำงานวันที่ N ของหนึ่งเดือนขึ้นไป" หรือ "วันที่ N เดือนหนึ่งเดือนขึ้นไป" หรือ "ทุกวัน N จากวันที่"

ตัวอย่างวันที่ 15 ของทุกเดือนวันพุธสุดท้ายของทุกเดือนมีนาคมวันสุดท้ายของทุกเดือนทุก ๆ 17 วันตั้งแต่วันที่ 2 ธันวาคม 2551 เป็นต้นไป


2
-1: การทำงานกับเวลาและทำให้ถูกต้องเป็นเรื่องยากแน่นอน เดาว่าทำไมห้องสมุดอย่าง JodaTime จึงมีอยู่จริงและไม่ใช่แค่ซอฟต์แวร์ชิ้นเล็ก ๆ
sebastiangeiger

@sebastiangeiger ฉันเห็นด้วย ฉันทำงานกับ SQL เกือบทุกวันและถึงแม้ว่าฉันสามารถใช้ฟังก์ชันวันที่ของ SQL ได้อย่างมีประสิทธิภาพ แต่ฉันก็ไม่สามารถทำสิ่งนี้ได้อย่างรวดเร็วหรือง่ายดายโดยไม่ได้รับความช่วยเหลือจาก Google ที่จริงแล้วฉันต้องการทำสิ่งนี้เมื่อไม่กี่เดือนที่ผ่านมาและหลังจากนั้นไม่กี่นาทีของการพยายามคิดออกใน SQL ฉันเพิ่ง Googled มันและมีสคริปต์ที่ฉันใช้กับการปรับเปลี่ยนบางอย่างเพื่อให้เหมาะกับความต้องการของฉัน
Rachel

ฉันไม่ได้มองหาพื้นที่ที่มีปัญหา ฉันกำลังมองหาบางสิ่งที่นักพัฒนาทั่วไปทำงานกับทุกวันและสามารถเรียกคืนได้โดยไม่มีปัญหาใด ๆ และในสภาพแวดล้อมที่ไม่คุ้นเคย (ไม่มีคอมพิวเตอร์) ในขณะที่ตัวอย่างของคุณไม่ยากขนาดนั้นมันเป็นปัญหามากกว่าที่ฉันจะให้ใครบางคนเขียนโค้ดต่อหน้าฉันเพื่อดูว่าเขาคิดอย่างไร
Domchi

1
@Eli ฉันคิดว่า FizzBuzz คาดว่าจะได้รับการแก้ไข / เข้ารหัสตาม
Aaron McIver

1
ฉันไม่คิดว่าตอนที่ 2 เป็นคำถามที่ดี ในความเป็นจริงหัวข้อนี้มีทางออกแปลก ๆ ที่ไม่ได้เกิดขึ้นเกือบทุกปัญหาการออกแบบฐานข้อมูลอื่น ๆ ในธุรกิจ การไม่ทราบคำตอบไม่ใช่ข้อบ่งชี้ของความรู้ SQL ที่ไม่ดี
NoChance
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.