ปัญหาการสัมภาษณ์ไวท์บอร์ดที่คุณชื่นชอบคืออะไร? [ปิด]


52

ปัญหาการสัมภาษณ์ไวท์บอร์ดที่คุณชื่นชอบคืออะไรและทำไมมันถึงมีประสิทธิภาพสำหรับคุณ

จูเนียร์, อาวุโส, Java, C, Javascript, PHP, SQL, รหัสหลอก ฯลฯ


4
ปัญหาที่ฉันเกลียดคือ Puzzle ของ Einstein stanford.edu/~laurik/fsmbook/examples/Einstein'sPuzzle.htmlฉันไม่สามารถทำได้ภายใน 30 นาที แต่จากนั้นฉันก็โกรธและพบสิ่งนี้: games.flowix.com/th/index.htmlดังนั้นฉันจึงฝึกให้ทำปัญหาหนักขึ้นโดยเฉลี่ย 6 x 6 x 6 ใน 20 นาที ฉันคิดว่าฉันสามารถจัดการ 5 x 5 x 5 ใน 30 นาทีตอนนี้ ไม่ว่าจะเป็นปริศนาอะไรโง่ ๆ นายจ้างจะขว้างใส่ฉัน - ฉันจะจดจำพวกเขาและจะทำให้พวกเขาเก่งขึ้นในครั้งต่อไป มีปริศนาที่ดีมากมาย
งาน

20
@ งาน: ไม่มีสิ่งใดที่จะบอกอะไรคุณเกี่ยวกับวิธีที่พนักงานจะทำงานได้อย่างไร แน่นอนว่าถ้าคุณใช้เวลาทั้งหมดในการแก้ปริศนาประเภทนี้แทนที่จะทำงานให้เสร็จ
Robert Harvey

1
@ Robert Harvey คุณหมายความว่าคุณอยู่ในธุรกิจที่ทำเงินด้วยวิธีอื่นมากกว่าการไขปริศนา? ฉันไม่รู้เลยว่า ... ;) ปริศนานั้นสนุกดี ในฐานะที่เป็นบันทึกย่อของ บริษัท ที่ฉันเคยทำงานเพื่อใช้การทดสอบไอคิวที่แท้จริงเป็นขั้นตอนแรกในการคัดกรองของพวกเขา ฉันต้องการค้นหาคำถามไวท์บอร์ดที่ดีเพื่อแยกผู้สมัครที่ดีที่สุดไม่ใช่เพื่อคัดกรองพวกเขา
นิโคล

4
@Renesis: ในฐานะนักพัฒนาซอฟต์แวร์ฉันสามารถดูว่าการแก้ปริศนาระบุถึงทักษะการแก้ปัญหาและการวิเคราะห์อย่างไร แต่นักพัฒนายังต้องรู้วิธีการแปลโซลูชันเป็นรหัส การไขปริศนาแสดงเพียงครึ่งหนึ่งของการประหารชีวิต มันคือความแตกต่างระหว่างการแก้ลูกบาศก์ Rubix และการเขียนอัลกอริทึมเพื่อแก้ลูกบาศก์ Rubix
Robert Harvey

@ Robert Harvey ฉันเห็นด้วยฉันกำลังมองหาปัญหาการเข้ารหัสโดยเฉพาะไม่ใช่แค่คิดปัญหา
นิโคล

คำตอบ:


22

ฉันขอให้ผู้สมัครออกแบบวิธีการแก้ปัญหาที่ฉันพบในการทำงานประจำวัน การทำเช่นนั้นฉันพยายามสร้างการสนทนาระหว่างฉันและผู้สมัคร ฉันพยายามพูดคุยเกี่ยวกับการออกแบบที่เขากำลังสร้างราวกับว่าฉันไม่เคยคิดเกี่ยวกับปัญหามาก่อน

สิ่งที่ฉันพยายามประเมินคือเราสามารถเข้าใจซึ่งกันและกันได้หรือไม่และเราสามารถพูดคุยเกี่ยวกับปัญหาทางเทคนิคได้โดยไม่สับสน

ตัวอย่างคอนกรีต

(สำหรับ developper บนเดสก์ท็อป java)

ออกแบบ API เพื่อจัดการประวัติการนำทางของเว็บเบราว์เซอร์ (หน้าก่อนหน้าหน้าถัดไปแสดงรายการ 10 หน้าก่อนหน้า) และสามารถนำมาใช้ซ้ำได้ในหลายส่วนของแอปพลิเคชัน (ที่นี่ฉันให้ตัวอย่างที่ชัดเจนในแอปของเรา) จากนั้นร่างการดำเนินการ

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


40

ฉันพบสิ่งนี้ที่ให้ความกระจ่างอย่างมากเมื่อสัมภาษณ์ผู้สมัครและกรองผู้ที่ไม่มีธุรกิจอยู่ มันมีความซับซ้อนคล้ายกับ Fizz Buzz แต่มุ่งเน้นไปที่ทักษะฐานข้อมูล

Assuming the following basic  table structure
Documents (DocID, DocDate)
Keywords (KeyWordID, KeyWord)
DocumentKeywords (DocID,KeywordID)

Write a query to return the following:
Part 1: Documents with a DocDate after 4/1/1995  
Part 2: Documents that contain the keyword "Blue"  
Part 3: Documents that contain the either the keyword "Blue" or "Yellow"
Part 4: Documents that contain the both the keywords "Blue" and "Yellow"

ฉันปล่อยให้พวกเขาเขียนมันในตัวแปร SQL ใด ๆ ที่พวกเขาต้องการและฉันก็ไม่จู้จี้จุกจิกกับปัญหาไวยากรณ์เล็กน้อย ฉันต้องการรู้ว่าพวกเขาเข้าใจแนวคิดฐานข้อมูลเชิงสัมพันธ์ขั้นพื้นฐานเป็นหลัก

ผู้สมัครส่วนใหญ่สามารถผ่านส่วนที่ 3 ได้โดยไม่มีปัญหา คุณจะประหลาดใจที่คิดว่าคำตอบของส่วนที่ 4 เป็นเพียงการเปลี่ยนโอเปอเรเตอร์จาก OR เป็น AND ในประโยคที่


2
อ่าฉันเห็นปัญหาด้วย / 4 เอกสารของคุณมีคำหลักหนึ่งคำต่อหนึ่งแถวเท่านั้นดังนั้นคุณจึงไม่มีเซลล์เท่ากับทั้งก๊อก
glasnt

8
อ๊ะ! ฉันเห็นตัวเองตกหลุม (4) ในการสัมภาษณ์ @ โจบ: ในฐานะผู้สัมภาษณ์ฉันขอให้ผู้สมัครอธิบายคำถามโดยหวังว่าเขาจะสะดุดปัญหาของเขาเพื่อดูว่าเขาจัดการกับมันอย่างไร (ที่มักจะบอกคุณได้มากกว่าผู้สมัคร acing คำถามแรกลอง.)
peterchen

3
@Renesis ฉันไม่แน่ใจว่านี่เป็นการขุดที่ลึกจริงๆ ดูเหมือนว่าจะดีสำหรับการค้นหาว่ามีคนมีทักษะการสืบค้น SQL พื้นฐานหรือไม่ ฉันตกใจจริงๆที่มีนักพัฒนาเพียงไม่กี่คนที่มีทักษะพื้นฐานเหล่านี้ในวันนี้
Mark Freedman

2
@ jk01 ฉันอาจมีทัศนคติเกี่ยวกับเรื่องนี้ในโรงเรียนเก่า แต่ IMO ผู้พัฒนาที่รอบรู้ควรมีความรู้เกี่ยวกับฐานข้อมูลถ้าไม่สามารถเข้าถึงผ่านรหัสได้ แต่อย่างน้อยก็เข้าใจโดเมนโดยการทดลองกับแบบสอบถาม หากไม่มีสิ่งนี้ผู้พัฒนาจะมีจุดบอดสำคัญ นอกจากนี้ยังมีประโยชน์อย่างมากสำหรับการสนับสนุนระบบและการแก้ไขปัญหา สิ่งที่เป็นนามธรรมนั้นดีที่จะช่วยให้การพัฒนาง่ายขึ้นและเพิ่มประสิทธิภาพการผลิต แต่ฉันได้เห็นสมมติฐานหลายวิธีที่มากเกินไปเพราะสิ่งนี้มักถูกแยกออกไป ฉันสามารถไป แต่อาจเป็นข้อโต้แย้งอื่น ๆ ทั้งหมดที่ฉันแน่ใจว่าจะเกิดขึ้นที่อื่น;)
Mark Freedman

4
@ back2dos - ดูสิอย่าได้โกรธเคืองเพราะคุณไม่สามารถตอบได้ อาจมีเทคโนโลยีอื่น ๆ อีกมากมายที่ทำให้เรื่องนี้ง่ายขึ้น แต่เราใช้ฐานข้อมูล SQL จำนวนมากและฉันรับสมัครคนที่รู้วิธีใช้เทคโนโลยีที่เราใช้ไม่ใช่แก้ตัวว่าทำไมพวกเขาไม่ควรตอบคำถามสัมภาษณ์ของฉัน .
JohnFx

20

"วาดให้ฉันบนกระดานไวท์บอร์ดเกี่ยวกับการออกแบบโครงการล่าสุดที่คุณทำงานโดยไม่เปิดเผยรายละเอียดที่ละเอียดอ่อนใด ๆ ให้ฉัน"


คุณจะกำหนดการออกแบบอย่างไร? คุณกำลังมองหาแผนภาพคลาสหรือไม่? แผนภาพ UML อื่นหรือไม่ ร่างพื้นฐานของเทียร์?
justkt

1
ฉันเรียกพวกเขาว่า ;) เพียงแค่วาด cicles ใส่ชื่อและเชื่อมต่อพวกเขาด้วยลูกศรที่มีชื่อ ฉันไม่สนใจใบสมัครของเขา แต่เกี่ยวกับความจริงที่เขาเข้าใจ
Uberto

5
+1 สำหรับคนที่เคยทำงานมาก่อนนี่เป็นหนึ่งในสิ่งที่ดีที่สุดที่คุณสามารถทำได้ หากพวกเขาสามารถอธิบายได้ว่าโครงการมีโครงสร้างอย่างไรมันคุ้มค่ามากแล้ว หากพวกเขามีความคิดว่าทำไมมันถูกจัดโครงสร้างในวิธีนั้นหรือว่าบางสิ่งสามารถทำได้ดีกว่านี้จริง ๆ แล้วเป็นข้อดีอย่างมาก
back2dos

3
@ เพียงแค่: สิ่งสำคัญคือผู้ให้สัมภาษณ์จะได้รับข้อมูล มันมีความสำคัญอย่างไร ฉันได้พบกับผู้คนที่รู้จัก UML จริง ๆ ซึ่งไม่สามารถอธิบายอะไรกับมันได้บ้างและผู้คนที่สามารถอธิบายระบบที่ซับซ้อนด้วยเส้นเล็ก ๆ น้อย ๆ
back2dos

2
มีใครบนโลกนี้บ้างที่ควรวาดการออกแบบของโครงการโดยไม่เปิดเผยรายละเอียดที่ละเอียดอ่อนใด ๆ
Nemanja Trifunovic

14

Implement strcpy, strcmpและเพื่อน ๆ


4
atoi()ผมขอให้ผู้สมัครที่จะดำเนินการ
chrisaycock

2
คุณจะประหลาดใจกับจำนวนคนที่ไม่สามารถใช้งานstrdup()ได้
Tim Post

10
นั่นเป็นธรรมหากเปิดงานสำหรับโปรแกรมเมอร์ซี

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

@crisaycock atoi () เป็นเรื่องง่าย itoa () คดเคี้ยว
Michael Brown

14

สิ่งที่ฉันชอบซึ่งรวมไปถึงบางสาขาวิชาคือการนับจำนวนโหนดในต้นไม้ไบนารีที่ได้รับอินเทอร์เฟซ (ใน C #):

public interface IBinaryTree<T>
{
    IBinaryTree<T> Left
    {
        get;
    }

    IBinaryTree<T> Right
    {
        get;
    }

    T Data
    {
        get;
    }

    // Other properties and methods not germane to this problem.
}

และเพื่อความสนุกนี่คือการดำเนินการแม้ว่าผู้ให้สัมภาษณ์ไม่จำเป็นต้องเห็นสิ่งนี้

public sealed class BinaryTree<T> : IBinaryTree<T>
{
    private readonly IBinaryTree<T> left;

    private readonly IBinaryTree<T> right;

    private readonly T data;

    public BinaryTree(
        IBinaryTree<T> left,
        IBinaryTree<T> right,
        T data)
    {
        this.left = left;
        this.right = right;
        this.data = data;
    }

    public IBinaryTree<T> Left
    {
        get
        {
            return this.left;
        }
    }

    public IBinaryTree<T> Right
    {
        get
        {
            return this.right;
        }
    }

    public T Data
    {
        get
        {
            return this.data;
        }
    }

    // Other properties and methods not germane to this problem.
}

และชั้นผู้ช่วย:

public static class BinaryTreeNodeCounter
{
    public static int CountNodes<T>(this IBinaryTree<T> tree)
    {
        // TODO: What goes here?
    }
}

วิธีที่ฉันชอบที่จะเห็นคือ:

public static class BinaryTreeNodeCounter
{
    public static int CountNodes<T>(this IBinaryTree<T> tree)
    {
        return tree == null
            ? 0
            : 1 + tree.Left.CountNodes() + tree.Right.CountNodes();
    }
}

ตามที่แสดงให้เห็นถึงความรู้เกี่ยวกับ:

  • การทำงานของต้นไม้ (โดยเฉพาะต้นไม้ไบนารี)
  • นิยามซ้ำของต้นไม้ไบนารี
  • วิธีการเรียกซ้ำและวิธีกรณีฐานหยุดการสอบถามซ้ำ
  • การนับโหนดเดียวหมายความว่าอะไร
  • อินเตอร์เฟสเป็นสัญญา
  • (ความสำคัญน้อยกว่า) ความรู้เกี่ยวกับไวยากรณ์ C #:
    • ข้อมูลทั่วไป
    • วิธีการขยาย
    • ผู้ประกอบการที่ประกอบไปด้วย

มันอาจเป็นวิธีการขยายหรือไม่
Gulshan

ในวันนี้และอายุใช่ เรากำลังเขียนโปรแกรมใน VS 2005 ในเวลาดังนั้นไวยากรณ์กระจัดกระจาย
Jesse C. Slicer

เหตุใดจึงต้องใช้วิธีการขยายเมื่อคุณมีซอร์สโค้ดสำหรับคลาสต้นฉบับ นั่นไม่ใช่วิธีการขยายที่ใช้สำหรับ
Batibix

'ทำให้ฉันรู้สึกแย่ขึ้นและแสดงอินเทอร์เฟซสำหรับผู้สมัครที่คลาสนี้ใช้ สรุปสาระสำคัญคือคลาสเดิมไม่จำเป็นต้องได้รับการแก้ไขนักพัฒนาระดับเริ่มต้นบางคนชอบที่จะเพิ่มสิ่งต่าง ๆ ในชั้นเรียนเพื่อให้คำขอ "ง่ายขึ้น"
Jesse C. Slicer

อึศักดิ์สิทธิ์ที่ดูเหมือน java มาก!
ทดสอบ

12

คำถามสองข้อที่นำเสนอการอภิปรายไวท์บอร์ดที่น่าสนใจสำหรับฉัน

  1. "คุณช่วยอธิบายรายละเอียดได้มากเท่าที่คุณต้องการว่าเว็บเบราว์เซอร์ได้รับหน้าที่สร้างขึ้น"
  2. "โปรดอธิบายว่า Java Hibernate ทำงานอย่างไร"

พวกเขาเริ่มต้นจากง่าย ๆ และจากนั้นก็ซับซ้อนขึ้นเรื่อย ๆ


31
ehi, ฉันไม่มีคุณสมบัติที่จะตัดสินคำตอบ ... ฉันคิดว่าสำหรับอันที่สองคุณต้องมี
เทียนดำ

4
ข้อที่สองนั้นเป็นเรื่องง่ายระบบปฏิบัติการของคุณจะบันทึกแคชตัวประมวลผลและสแต็กและเนื้อหาของ RAM ของคุณไปยังฮาร์ดไดรฟ์แล้วคืนค่าเมื่อเปิดเครื่องคอมพิวเตอร์
Malfist

อย่างไรก็ตามคำถามแรกอาจใช้เวลาหลายวันกว่าจะอธิบาย
Malfist

@ มัลลิสต์ฉันหมายถึงกรอบการคงอยู่ของ Java Hibernate
Gary Rowe

2
@ Paul สตีเฟนสันใช่ แต่เพียงเพื่อให้แน่ใจ ...
แกรี่ Rowe

8

ฉันไม่ชอบใช้ปริศนาหรือคำถามออกแบบเป็นคำถามไวท์บอร์ด ฉันชอบคำถามที่ตรงไปตรงมาง่าย ๆ ที่ทดสอบความสามารถของผู้สมัครในการเขียนโค้ด รายการโปรดของฉันคือ:

1) เขียนฟังก์ชั่นเพื่อย้อนกลับรายการที่เชื่อมโยงโดยลำพัง (ใช้เวลาสักครู่ก่อนที่พวกเขาจะรู้ว่าพวกเขาต้องการตัวชี้ 3 ตัว)

2) ได้รับต้นไม้ไบนารีค้นหาความลึกของต้นไม้ไบนารี (คำถามนี้ทดสอบความสามารถในการเขียนรหัสซ้ำให้ฉันตรวจสอบว่าพวกเขามีกรณีพื้นฐานของพวกเขาเหมือนเดิม)

3) เขียนโพรซีเดอร์สำหรับไบนารีเพื่อค้นหาอาร์เรย์ของจำนวนเต็ม (เช่น Jon Bentley พูดว่า (ใน Programming Pearls) หลายคนมักจะทำผิดพลาดในการเขียนการค้นหาแบบไบนารีจากนั้นเราสามารถติดตามการค้นหาข้อบกพร่องการเขียนกรณีทดสอบการเรียกใช้รหัส ฯลฯ )


+1, ฉันชอบวิธีการของคุณไม่มีเหตุผลที่จะถามใครบางคนไดนามิก programmins หรือแนวคิดดังกล่าวเมื่อพวกเขาถูกนำมาใช้อย่างหนักในการเขียนโปรแกรมธุรกิจ + เน้นควรมีคุณภาพรหัสเช่นกันและไม่ได้แก้ปัญหาเพียงอย่างเดียว
Geek

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

น่าจะทำให้คนรู้ว่าคุณหมายถึง "อาร์เรย์ที่เรียงลำดับ" ใน (3) ใช่มั้ย
HaveAGuess

7

เราใช้สิ่งนี้กับ บริษัท แห่งหนึ่งที่ฉันทำงานให้

เราส่งกระดาษที่ใช้สำหรับการติดตามผู้สมัคร มันเป็นแผ่นเวลาจริงที่ใช้โดยหนึ่งหรือหน่วยงานของเรา เราขอให้ผู้สมัครแนะนำเราผ่านขั้นตอนการออกแบบเพื่อสร้างเครื่องมือติดตามเวลาที่ดีกว่า ไม่มีขอบเขตไม่พูดภาษาอื่น ฯลฯ เพียงแค่ต้องการดูว่าผู้สมัครดีแค่ไหนใน "วงจรชีวิตเต็ม" มันทำให้เราเข้าใจอย่างถ่องแท้ว่าพวกเขารวบรวมความต้องการอย่างไร วิธีที่พวกเขาจัดทำตารางฐานข้อมูล UI ชนิดใดที่พวกเขาอาจทำ ทักษะการสื่อสารมีความจำเป็นอย่างชัดเจนสำหรับงานนี้ มันมักจะทำในห้องที่มีกระดานสีขาวขนาดใหญ่หลายและกินเวลานานถึง 2 ชั่วโมง

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


6

ฉันใช้ปัญหาที่เกี่ยวข้องกับโดเมนการเขียนโปรแกรมของฉัน

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

ฉันไม่มีของโปรด ปัญหาที่ฉันเลือกจะแตกต่างกันมากขึ้นอยู่กับงาน

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


2
+1 สำหรับย่อหน้าสุดท้ายซึ่งมีความสำคัญ โดยปกติแล้วมันไม่ใช่คำตอบที่สำคัญในสิ่งต่าง ๆ แต่เป็นเส้นทางที่นำไปสู่การเดินทาง ตามที่ครูคณิตศาสตร์ของฉันเคยพูดว่า"แสดงให้คุณเห็น!
Orbling

4

สิ่งที่ฉันชอบคือหนึ่งในเพื่อนของฉันที่ใช้

เขียนฟังก์ชั่นเพื่อสร้าง / พิมพ์ / จัดเก็บหมายเลขเฉพาะ "n" หมายเลขแรกแล้วอธิบายว่ามันทำงานอย่างไรและมีประสิทธิภาพเพียงใด

มันทำงานได้ดีเพราะ:

  1. มันเป็นคำถามแบบอัลกอริทึมดังนั้นจึงต้องการให้ผู้ให้สัมภาษณ์สามารถคิดแล้วอธิบายการคิดของพวกเขา - เพื่อให้คุณสามารถดูว่าสมองของพวกเขาทำงานอย่างไร

  2. มันเป็นภาษาอิสระ

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

  4. ส่วนใหญ่ทำหน้าที่เป็นตะแกรงที่เรียบง่าย แต่ช้ามาก (เช่น 80% ของผู้คนจะตรวจสอบของ n เป็นนายกโดยการหาร n ด้วยจำนวนเต็มทั้งหมดที่น้อยกว่า n) ซึ่งให้ขอบเขตมากมายสำหรับการสนทนาเกี่ยวกับวิธีที่พวกเขาสามารถปรับปรุงอัลกอริทึม ในการแลกเปลี่ยนพื้นที่ / เวลาเช่น "ทำไมคุณถึงหารด้วย 4 ถ้าคุณรู้อยู่แล้วว่ามันไม่หารด้วย 2?" หรือ "คุณคิดว่าคุณต้องหารด้วยจำนวนเฉพาะทั้งหมดที่น้อยกว่า sqrt (n) แต่คุณต้องเก็บตัวเลขเหล่านั้นไว้ที่อื่นดังนั้นความหมายของมันคืออะไร")

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


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

1
1 ไม่สำคัญ ..

2
@ Thorbjørn - เห็นได้ชัด แต่เปอร์เซ็นต์ที่ดีของกิจวัตรที่ฉันได้เห็นเขียนเพื่อแก้ปัญหานี้ได้บอกฉันว่ามันเป็น
Rhys Gibson

แล้วพวกเขาก็มีข้อผิดพลาด :)

3

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

อย่างไรก็ตาม ... ฉันลืมสูตรที่แน่นอน แต่มันเป็นอะไรแบบนี้ ...

Write a function taking a single char parameter named c and returning nothing (void).
You function must satisfy the following requirements:

 - if c is bigger or equal to 0, then print 'z' to standard output
 - if c is stricly smaller than 0 , then print 'z' to standard output
 - in any other case, print the letter 'z' to standard output

สิ่งที่น่าเศร้าก็คือไม่เพียง แต่นักเรียนบางคนเท่านั้นที่จะหาวิธีแก้ปัญหาที่ซับซ้อนอย่างยิ่งเมื่อคำตอบนั้นชัดเจน แต่บางคนก็อาจล้มเหลว

และเชื่อหรือไม่ว่ามันเกิดขึ้นระหว่างการสัมภาษณ์เช่นกัน

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

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


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

@Renesis: ฉันมีไม่กี่มองที่ฉันด้วยการยิ้มก่อน บางส่วนไม่ผ่านการทดสอบ โดยทั่วไปแล้วผู้สมัครที่ดีหัวเราะถ้าออก สำหรับผู้เขียนโปรแกรม JS ฉันมีผู้สมัครจำนวนมากที่ไม่ตอบคำถามสัมภาษณ์ด้วย "duh variablename = variablevalue;" ในขณะที่คนดี ๆ ก็แค่หัวเราะทางโทรศัพท์หรือด้วยตนเองแล้วบอกฉันโดยตรงว่าอะไรจะต่างกับvar)
haylem

1
@Renesis: บวกฉันไม่สามารถดูแลน้อยลงถ้ามีบางคนที่ไม่พอใจ มันไม่ได้เป็นการเลือกปฏิบัติ แต่อย่างใด หากพวกเขาถูกทำให้ขุ่นเคืองฉันจะถือว่าพวกเขาเป็นคนที่ไม่ชอบถูกทดสอบหรือถูกสอบสวน ฉันไม่เคยมีผู้สมัครจริงๆรู้สึกว่าฉันสนุกที่ค่าใช้จ่ายของพวกเขา ฉันมักจะขอโทษก่อนที่จะถามคำถามง่าย ๆ เพราะอาจรู้สึกเสียเวลากับคนดี แต่สิ่งนี้คือไม่ใช่เรื่องเสียเวลาสำหรับฉัน ไม่ขอให้พวกเขาจะต้องในระยะยาว
เฮย์เล็ม

@Renesis: และบ่อยกว่านั้นไม่ใช่สิ่งที่ฉันได้รับหลังจากการดูแสบยิ้ม / หัวเราะ / ดูหมิ่นคือการแสดงออกที่ละอายใจและคำขอโทษจากผู้ที่ล้มเหลวหรือเริ่มเขียนการแยกสำหรับการทดสอบทั้งหมดเมื่อพวกเขาตระหนักว่ามันไร้ประโยชน์ ใช่ฉันมีความสนุกสนานในการทำแบบทดสอบนี้ แต่ฉันจะไม่ให้มันถ้าไม่ใช่เหตุผลที่ดี
เฮย์เล็ม

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

3

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

สำหรับผู้สมัครขั้นสูงฉันมักจะให้คำถามต่อไปนี้:

ภาพนี้แสดงพระจันทร์เสี้ยว ความกว้างของเสี้ยวจาก B ถึง D คือ 9 ซม. และระหว่าง E และ F, 5 ซม. C เป็นศูนย์กลางของวงกลมขนาดใหญ่

a) กรุณาคำนวณพื้นที่ของเสี้ยว คำถามคณิตศาสตร์ Crescent Moon

b) อธิบายการคำนวณที่จำเป็นเพื่อปรับขนาดภาพให้พอดีกับวงกลมด้านในจากขนาดที่กำหนดและจัดวางภายในวงกลมถ้าทราบจุดกึ่งกลาง

สำหรับคำถามที่ง่ายกว่าฉันมักจะให้คำถามแบบเดียวกัน แต่ใช้ตัวอย่าง "สี่เหลี่ยมภายในวงกลมภายในสี่เหลี่ยม" แม้ว่านี่จะง่ายมากดังนั้นฉันคาดหวังว่าพีชคณิตที่สมบูรณ์แบบกับมัน

สแควร์ภายในวงกลมภายในสแควร์

ยิ่งกว่านั้นฉันมักจะขอให้พวกเขาล้มอัลกอริธึมสำหรับการสร้างชุดข้อมูลความยาวผันแปรทั้งหมด


1
คำตอบสำหรับ a) คือ 128.75? (ไม่รู้ว่าทำผิดหรือเปล่า) ฉันชอบมัน แต่มันเกี่ยวกับรูปทรงเรขาคณิตมากกว่า
Hoàng Long

2
นอกจากนี้ขออภัยในความล่าช้าในการแสดงความคิดเห็น ฉันไม่ชอบลงคะแนนเป็นกฎและเพิ่มเป็นทวีคูณโดยไม่แสดงความคิดเห็นว่าทำไม downvote ของฉันไม่เกี่ยวกับคำถามนั้นแน่นอนมันมีจุดประสงค์สำหรับคุณฉันไม่คิดว่ามันมีบริบทที่เหมาะสมในการสัมภาษณ์การเขียนโปรแกรม
Philip Regan

7
-1 เนื่องจากรูปทรงเรขาคณิตเป็นตัวเลือกที่ดีสำหรับการเรียนรู้แบบทันเวลาและไม่สะท้อนความสามารถของฉันในการสร้างซอฟต์แวร์ที่มีคุณภาพ
Malfist

2
ฉันสนุกกับปัญหานี้ ฉันหวังว่าคุณไม่รังเกียจที่จะแบ่งปันวิธีการแก้ปัญหาของฉันให้เป็นส่วนหนึ่ง (ก) เส้นผ่านศูนย์กลางแตกต่างกัน 9 ซม. ดังนั้นหากวงกลมด้านในมีรัศมี r วงกลมด้านนอกจะมีรัศมี r + 4.5 พื้นที่ของเสี้ยวคือความแตกต่างในพื้นที่ของวงกลม: pi (r + 4.5) ^ 2 - pi * r ^ 2 สิ่งที่เหลือคือการหา r กำหนด C เป็นจุด (0,0) จากนั้นจุด E อยู่ที่ (0, r - 0.5) (เนื่องจาก CE มีค่าน้อยกว่ารัศมี 5 ซม.) วงกลมด้านในเลื่อนไปทางขวา 4.5 ซม. ดังนั้นสมการของมันคือ (x - 4.5) ^ 2 + y ^ 2 = r ^ 2 เสียบ (x, y) = (0, r - 0.5) แล้วแก้หา r
ทิมกู๊ดแมน

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

3

คำตอบที่ดีที่สุดที่ฉันเคยเห็นคือFizzBuzz :

SQL Server 2008

;WITH mil AS (
 SELECT TOP 100 ROW_NUMBER() OVER ( ORDER BY c.column_id ) [n]
 FROM master.sys.all_columns as c
 CROSS JOIN master.sys.all_columns as c2
)                
 SELECT CASE WHEN n  % 3 = 0 THEN
             CASE WHEN n  % 5 = 0 THEN 'FizzBuzz' ELSE 'Fizz' END
        WHEN n % 5 = 0 THEN 'Buzz'
        ELSE CAST(n AS char(6))
     END + CHAR(13)
 FROM mil

C # (ง่าย)

foreach (int number in Enumerable.Range(1, 100))
{
    bool isDivisibleBy3 = (number % 3) == 0;
    bool isDivisibleBy5 = (number % 5) == 0;

    if (isDivisibleBy3)
         Console.Write("Fizz");

    if (isDivisibleBy5)
         Console.Write("Buzz");

    if (!isDivisibleBy3 && !isDivisibleBy5)
         Console.Write(number);

    Console.WriteLine();
}

C # (ฉลาด)

 Enumerable
  .Range(1, 100)
  .Select(i =>
    i % 15 == 0 ? "FizzBuzz" :
    i % 5 == 0 ? "Buzz" :
    i % 3 == 0 ? "Fizz" :
    i.ToString())
  .ToList()
  .ForEach(s => Console.WriteLine(s));

1
คุณอาจต้องการเพิ่มภาษาถิ่น SQL เฉพาะที่เขียนไว้

ดูดีด้วยสไตล์การใช้งาน
Orbling

2

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

  • การตระหนักถึงการออกแบบ

    "แสดงโครงสร้างตารางของโปรแกรมสมุดรายชื่อที่มีรายชื่อติดต่อและนามสกุลที่สามารถมีหมายเลขโทรศัพท์หลายหมายเลขพร้อมคำอธิบายของหมายเลข (เซลล์ / บ้าน / ที่ทำงาน / ฯลฯ )"

    ฉันไม่ได้กำลังมองหาไดอะแกรมสเปค UML 2.0 ที่นี่แผนภาพฟองอย่างง่ายที่นี่ใช้ได้ ตราบใดที่มันสมเหตุสมผล

  • ความรู้เกี่ยวกับการทำงานกับฐานข้อมูล (เช่น SQL)

    1. เขียนข้อความค้นหาเพื่อรับหมายเลขโทรศัพท์ทั้งหมดสำหรับคนที่มีนามสกุล "smith"
    2. เขียนแบบสอบถามเพื่อรับลูกค้าทั้งหมดในฐานข้อมูลและหมายเลขโทรศัพท์สำหรับลูกค้าที่มีนามสกุล "smith"
  • ความรู้เกี่ยวกับการทดสอบ

    สมมติว่ามีเมธอดที่มีลายเซ็นต์public IEnumerable<PhoneNumber> GetPhoneNumbers(string lastName)ซึ่งส่งคืนผลลัพธ์ของแบบสอบถามของคุณจากก่อนหน้านี้ สมมติว่าถ้าคุณส่งค่า null ลงในเมธอดมันจะส่ง NullReferenceException เขียนการทดสอบเพื่อสาธิตการทำงานนี้

    เขียนการทดสอบที่แสดงให้เห็นว่า GetPhoneNumbers จะส่งกลับหมายเลขโทรศัพท์ที่บ้านของ (123)456-7890 สำหรับคนที่มีนามสกุล "smith"

  • ความรู้เกี่ยวกับวิธีการเขียนโค้ด

    ใช้วิธีการที่จะตอบสนองความต้องการของการทดสอบที่คุณเขียน


เมื่อพิจารณาจากจำนวนและคุณภาพของผู้สมัครที่เราได้รับฉันได้สัมภาษณ์ทุกคนที่เคยสมัครอย่างจริงจัง ฉันไม่ได้จ้างใครเลย


ใน SQL # 2 คุณกำลังพูดถึงการทำสิ่งนี้ทั้งหมดในแบบสอบถามเดียว? มีวัตถุประสงค์เพียงเพื่อวัดความเข้าใจของการรวมซ้าย / ขวาหรือภายใน?
นิโคล

@Renesis: ใช่มันเป็น
Steven Evers

2

ฉันมักจะให้พวกเขาร่างไดอะแกรมบล็อกของระบบล่าสุดที่พวกเขาได้ทำงานถามเกี่ยวกับความสัมพันธ์ระหว่างบล็อกและปล่อยให้พวกเขาทำอย่างละเอียดในบล็อกที่พวกเขากำลังทำงาน / อยู่ในความดูแล คุณสามารถเรียนรู้มากมายจากแบบฝึกหัดนี้เช่นเดียวกับที่เขาดูเกินขอบเขตโดเมนเล็ก ๆ ของเขามันสำคัญแค่ไหนที่เขาจะรู้ว่า 'ที่' เขากำลังทำอะไรอยู่นอกจากนี้คุณสามารถเรียนรู้เกี่ยวกับบทบาทที่เขาเล่น บทบาท.


2

เขียนอัลกอริธึมสำหรับปัญหาต่อไปนี้: เมื่อได้รับหมายเลขnให้ส่งออกจำนวนรวมของต้นไม้ไบนารี (ไม่ซ้ำกัน) ที่มีโหนดn

ดังนั้นสำหรับn = 0 และn = 1 คำตอบคือ 1 สำหรับn = 2 คุณมี 2: รูตโหนดและจากนั้นโหนดที่สองจะอยู่ทางซ้ายหรือขวา

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

[ดูเพิ่มเติมที่การอภิปราย StackOverflow สำหรับกรณีที่เกี่ยวข้อง แต่แตกต่างกันของแผนผังการค้นหาแบบทวิภาค]


ดังนั้นโปรแกรมเมอร์ UI ที่ไม่ทราบว่าการเขียนโปรแกรมแบบไดนามิกเป็นโปรแกรมเมอร์ที่ไม่ดี? สำหรับความสำเร็จของมันโปรแกรมเมอร์ธุรกิจที่ไม่สามารถจำการเขียนโปรแกรมแบบไดนามิกไม่ดี? วัยรุ่นจำนวนมากที่ topcoder จะผ่านปัญหาการเขียนโปรแกรมแบบไดนามิก แต่โปรดดูที่รหัสที่พวกเขาเขียน
Geek

@Geek: โปรดจำไว้ว่าปัญหา "ไวท์บอร์ด" เป็นวิธีการดูกระบวนการคิดของใครบางคน ปัญหาการเขียนโปรแกรมแบบไดนามิกควรอยู่ในการสนทนานี้เนื่องจากพวกเขาเป็นที่นิยมใน Google และอื่น ๆ
Macneil

ฉันไม่เห็นด้วย แต่ฉันมีคำถามสองข้อ 1. การแก้ปัญหาที่ไม่รู้จัก? ปัญหา DP กลายเป็นการเดินเล่นในสวนสาธารณะหากคุณแก้ไขปัญหาบางอย่างในอดีตที่ผ่านมาหรือคุณยังจำแนวคิดที่ไม่ได้เข้าเรียนได้ คนที่ลืมไปแล้วมันจะไม่ดีบนกระดานไวท์บอร์ดแน่นอน 2. หากมีคนกำลังดิ้นรนเพื่อแก้ไขปัญหาไม่มีวิธีที่คุณสามารถวัดคุณภาพรหัสของเขาได้ สิ่งที่เกี่ยวกับการให้ปัญหากับบางสิ่งบางอย่างเช่น LinkList หรือ Strings หรือ Arrays ทำให้บุคคลนั้นสามารถแก้ปัญหาและเขียนโค้ดได้
Geek

ฉันไม่จำเป็นต้องคาดหวังว่าผู้ให้สัมภาษณ์จะทำให้ถูกต้องเช่นกันอย่างไรก็ตามบาง บริษัท จะทำเช่นนั้น
Macneil

@Geek:“แล้ว ... โปรแกรมเมอร์ที่ไม่ทราบเขียนโปรแกรมแบบไดนามิกเป็นโปรแกรมเมอร์ที่ไม่ดี?” - ใช่ ที่กล่าวว่าฉันยอมรับว่าความคิดในการเขียนโปรแกรมแบบไดนามิกไม่สำคัญเมื่อคุณไม่คุ้นเคยกับมัน แต่การรู้ว่ามันเป็นสิ่งที่ขาดไม่ได้
Konrad Rudolph

2

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

ฉันคิดว่ามันเป็นปัญหาเล็ก ๆ แต่มีความท้าทายเปิดเผยความรู้และความสามารถของผู้สมัครในหลาย ๆ ด้าน


2

Implement function/method(on c/c++/c# whatever), which calculates n-th item of Fibonacci sequence

ผู้ชายหลายคนอาจติดอยู่กับเรื่องนี้ หากมีวิธีการแก้ปัญหาบางอย่าง - โดยปกติจะใช้การสอบถามซ้ำ หลังจากนั้น:

Implement the same via 'for'-loop

ไม่สามารถบอกคุณได้ว่ามีเพื่อนกี่คนที่ไม่สามารถทำงานให้สำเร็จทั้งสอง - 50% ของผู้สมัคร
นั่นเป็นเหตุผลที่ฉันชอบ :)


จะเกิดอะไรขึ้นถ้ามีการใช้งานครั้งแรกผ่านทาง for for loop
Darknight

2
มีการเสนอเวอร์ชันแบบเรียกซ้ำเพื่อใช้งาน โดยปกติหลังจาก for-loop guys ใช้เวอร์ชันเรียกซ้ำได้สำเร็จ
alexb

หรือคุณสามารถใช้สิ่งนี้เป็นคำสั่งเดียว: fib(n)=round(power(PHI,n)/SQRT5). PHI และ SQRT5 เป็นค่าคงที่ที่แสดงอัตราส่วนทองคำ (1.618 ... ) และรากที่สองของ 5 ตามลำดับ
oosterwal

2

สำหรับฐานข้อมูลฉันไปกับ:

ตาราง: สิ่งต่าง ๆ

ชื่อ ID
1 Bodkin Van Horn
2 Hoos-Foos
3 Hoos-Foos
4 ฮ็อตช็อต
5 Marvin O'Gravel Balloon Face
6 Snimm
7 Marvin O'Gravel Balloon Face
8 Marvin O'Gravel Balloon Face
9 เดฟ

เขียน SQL บางตัวที่จะทำซ้ำตารางเช่นนี้ตามชื่อ (และฉันไม่สนใจ ID ที่ฉันได้รับกลับมา แต่อย่างใดที่ส่งคืนจะต้องถูกต้องสำหรับชื่อนั้น) ดังนั้นตารางเมื่อ SQL ที่ถูกต้องถูกนำไปใช้จะมีลักษณะดังนี้:

ตาราง: สิ่งต่าง ๆ

ชื่อ ID
1 Bodkin Van Horn
2 Hoos-Foos
4 ฮ็อตช็อต
5 Marvin O'Gravel Balloon Face
6 Snimm
9 เดฟ

ฉันชอบมันเพราะ:

  • การทำสำเนาเป็นปัญหาในโลกแห่งความจริง
  • มีหลายวิธีที่จะทำ
  • ฉันคิดว่าวิธีการทั้งหมดนั้นต้องการให้คุณเข้าใจ SQL ที่ซับซ้อนกว่าเล็กน้อย (โดยพื้นฐาน GROUP BY และ HAVING) หรือความสามารถในการให้เหตุผลผ่านการโยงหลาย ๆ ข้อความที่ง่ายกว่า
  • ด้วยเหตุนี้บิตสุดท้ายแม้ว่าพวกเขาจะดิ้นรนกับไวยากรณ์หรืออะไรก็ตามคุณสามารถถามพวกเขาว่าพวกเขากำลังคิดและพูดคุยกันในแบบนั้น
  • มันอ้างอิงดร. Seuss

(นี่คือที่ที่ฉันพบว่ามีวิธีการทำสิ่งเล็ก ๆ น้อย ๆ ทั้งหมดและฉันได้รับมันซับซ้อนกว่าปีที่ผ่านมา)


1
ฉันเดาว่าฉันไม่รู้ว่านับว่าเป็น "เรื่องไร้สาระอย่างสิ้นเชิง" ... บางสิ่งบางอย่างSELECT min(ID), Name FROM Things GROUP BY Nameจะได้ผลใช่มั้ย
ทิมกู๊ดแมน

@Tim - นั่นทำให้คุณนับทุกสิ่ง ฉันแค่ต้องการคนที่มีซ้ำ การแก้ไขด้วยตนเองจะไม่นับรวมถือว่าเป็นการปรับสัดส่วนเป็นล้านแถว มันเป็นปัญหาง่าย ๆ แต่จากประสบการณ์ของฉัน 80% ของคนที่อ้างว่ารู้ SQL ไม่สามารถแม้แต่จะแทงได้ครั้งแรกของคุณ
Jon Hopkins

@ จอน: ไม่แน่ใจว่าสิ่งที่คุณหมายถึงโดย "ที่ให้นับสำหรับทุกอย่าง" จากโซลูชันตัวอย่างของคุณดูเหมือนสิ่งที่คุณต้องการคือหนึ่งแถวสำหรับแต่ละชื่อที่แตกต่างกัน จากความคิดเห็นของคุณดูเหมือนว่าคุณอาจหมายถึงบางสิ่งบางอย่างHAVING count(Name) > 1แต่จากนั้นฉันเดาว่าคำตอบตัวอย่างของคุณควรละเว้น Bodkin Van Horn, Hot Shot, Snimm และ Dave
ทิมกู๊ดแมน

@Tim - ถูกต้องมันไม่ชัดเจนจริงๆ ฉันจะแก้ไขเมื่อไม่กี่นาที
Jon Hopkins

1
DELETE FROM Things WHERE ID NOT IN (SELECT MIN(ID) FROM Things GROUP BY Name)ผมคิดว่าผมจะทำเช่นนี้: คุณมีทางออกที่ต้องการหรือไม่?
ทิมกู๊ดแมน

2

ปัญหาไวท์บอร์ด C ++ ที่ฉันโปรดปรานคือการให้ผู้สมัครลงมือปฏิบัติ

Vector3 a(1, 0, 0), b(0, 1, 0); // Mathematical 3D vectors
double c = 7.0;
double d = a * c;
Vector3 e = a * b;

จากนี้ฉันสามารถเรียนรู้

  • หากผู้สมัครรับรู้ว่าคุณไม่สามารถเกินประเภทผลตอบแทน (บ่งชี้ของจูเนียร์ระดับ C ++)
  • ถ้าผู้สมัครรู้วิธีคืนค่าชั่วคราวและใช้ตัวดำเนินการแคสต์ (การบ่งชี้ระดับ C ++ ระดับกลาง)
  • ถ้าผู้สมัครสามารถทำคณิตศาสตร์เวกเตอร์พื้นฐาน (สำคัญสำหรับโดเมนแอปพลิเคชันของเรา)

2

คุณจะเป็นตัวแทนของสำรับไพ่มาตรฐาน 52 ใบได้อย่างไร ภาษาการเขียนโปรแกรมใดก็ได้ คุณจะสับไพ่ได้อย่างไร?


vector <Card> พร้อมฟังก์ชั่นการสลับแบบ C ++ :)
ขวา

1

สิ่งที่ฉันชอบคือการเริ่มต้นด้วยการถามต้นแบบของ printf จากนั้นให้ API ระดับต่ำ printc (ถ่าน c) ซึ่งจะพิมพ์อักขระหนึ่งตัวใช้งาน printf ให้การตอบสนองที่น่าสนใจทุกประเภทเช่นสแต็คเป็นส่วนหนึ่งของ CPU อย่างที่คุณอาจเดาได้ว่าฉันมาจาก C และพื้นหลังแบบฝัง


ฉันไม่ได้รับสิ่งที่ "stack เป็นส่วนหนึ่งของ CPU"
barjak

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

@aufather: ถ้าฉันจำได้ถูกต้องคุณต้องโทรvarargs()หรือฟังก์ชั่นบางอย่างเช่นนั้น ฉันถูกไหม? ฉันเพิ่งทำมันเพียงครั้งเดียวเพื่อบอกว่าฉันทำไปสักพักแล้ว
Michael K

@barjak - เมื่อคุณเริ่มใช้งาน printf คุณจะต้องเข้าถึง stack ของคุณและฉันได้รับคำตอบว่า stack อยู่ใน CPU
aufather

@Michael - ในโลกที่ฝังตัวคุณจำเป็นต้องรู้สถาปัตยกรรมแพลตฟอร์มของคุณอย่างดี ดังนั้นคำถามนี้กำจัดวัชพืชที่ไม่รู้อย่างรวดเร็วในช่วงต้น
aufather

1

คุณมีชามที่มีปลา 200 ตัวอยู่ในนั้น ของปลาเหล่านี้ 99% ไม่ใช่ guppies คุณควรกำจัดปลากี่ตัวเพื่อให้เหลือเพียง 2% ของปลา guppies แสดงงานของคุณ

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

คุณจะแปลกใจว่ามีกี่คนที่เข้าใจผิด


4
เพิ่ม 12 นิ้วสอง Oscars ในชามพวกเขาจะลบ 98% ของ guppies เร็ว ๆ นี้
Geek

จะเกิดอะไรขึ้นถ้าคุณลบปลาหางนกยูง?

1
1% guppies, = 200 x 1% = 2 (200-2 = 198 ปลาอื่น) ที่ 2 = 2% ปลาที่เหลือ = 98% = 98 (1: 1) 98 = 198-100 answer = 100=> [สมมติว่าคุณสามารถเลือกปลาอื่นได้ หากลบ guppies มีคำตอบอื่น ๆ ] คำถามที่ดีคุณจะแปลกใจว่ามีคนไม่กี่คนที่จัดการได้ดีแม้ว่ามันจะเป็นการเล่นของเด็กสำหรับโปรแกรมเมอร์
Orbling

1

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

1) การใช้ตัวชี้ที่ใช้ร่วมกันขั้นพื้นฐานคำอธิบายที่มีข้อบกพร่องเมื่อเทียบกับ tr1 หรือตัวชี้ที่ใช้ร่วมกันของการเพิ่มในการดำเนินงานของพวกเขาวิธีการใช้งาน ฯลฯ

2) การตรวจสอบรหัส สำหรับการจ้างงานที่มีประสบการณ์เราคาดว่าพวกเขาจะสามารถตรวจสอบรหัสที่ให้ไว้อย่างมั่นใจสำหรับปัญหาการออกแบบข้อผิดพลาดความน่ากลัวของการเข้ารหัสและปัญหาการบำรุงรักษาที่อาจเกิดขึ้น และแน่นอนว่าพวกเขาจะแก้ไขอย่างไร และบางครั้งวิธีที่พวกเขาส่งข้อความนั้นถึงผู้พัฒนารุ่นน้องพวกเขากำลังยิงลง


1

คำถามหนึ่งที่ฉันใช้มานับตั้งแต่ที่ใช้กับฉันคือคำถามต่อไปนี้:

เขียนฟังก์ชั่นเพื่อพิมพ์ตัวเลขทั้งหมดระหว่าง 1 ถึง 100

ส่วนใหญ่ของเหตุผลที่ฉันใช้มันเป็นเพราะความจริงที่ว่าคุณสามารถใช้ทางออกและไปในทิศทางต่าง ๆ :

คุณจะปรับเปลี่ยนฟังก์ชันเพื่อพิมพ์ตัวเลขทั้งหมดระหว่าง 1 ถึง 1,000, 10000 หรือnอย่างไร

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

ย้ายไปในทิศทางที่แตกต่าง:

คุณจะเปลี่ยนแปลงสิ่งต่าง ๆ อย่างไรถ้าคุณรู้ว่าฟังก์ชั่นนี้จะถูกเรียกหลายครั้งต่อนาทีและประสิทธิภาพเป็นเรื่องกังวล?

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


1

นี่คือหนึ่งในการกระตุ้นความคิดบางอย่าง - มันตรงไปตรงมาเกี่ยวข้องกับคณิตศาสตร์และตรวจสอบความรู้ของผู้สมัครเกี่ยวกับการออกแบบคอมพิวเตอร์ขั้นพื้นฐาน (ล้นการแสดงตัวเลข ฯลฯ ):

เขียนโปรแกรม (หรือขั้นตอน) ที่ใช้คู่ของจำนวนเต็ม X, Y เป็นอินพุตและพิจารณาว่า X * Y สามารถหารได้อย่างเท่าเทียมกันด้วย 10 หรือไม่หมายเหตุสำคัญ: X และ Y อาจมีขนาดใหญ่พอที่ X * Y จะล้นประเภทที่มีจำนวนเต็มที่มากที่สุด บนเครื่องของคุณ


ตัวอย่างโซลูชั่น:


T_BOOL MultipleOfTen(int x, int y)
{
    return((x%2==0 || y%2==0) && (x%5==0 || y%5==0));
}

0

เติมวิธีต่อไปนี้: PSโหมดของตัวเลขคือตัวเลข (ในรายการ) ซึ่งมีการเกิดขึ้นมากที่สุด

public int getMode(List<Integer> numberList) {


}

นี่คือการดูที่มีประสิทธิภาพเป็นรหัสของคุณ


-2

คุณจะเป็นตัวแทนเมทริกซ์สำรองที่ค่อนข้างใหญ่ได้อย่างไรพูด 1,000x1000 แต่มีรายการที่ไม่ใช่ศูนย์มากที่สุด 100 รายการ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.