ปัญหาการสัมภาษณ์ไวท์บอร์ดที่คุณชื่นชอบคืออะไรและทำไมมันถึงมีประสิทธิภาพสำหรับคุณ
จูเนียร์, อาวุโส, Java, C, Javascript, PHP, SQL, รหัสหลอก ฯลฯ
ปัญหาการสัมภาษณ์ไวท์บอร์ดที่คุณชื่นชอบคืออะไรและทำไมมันถึงมีประสิทธิภาพสำหรับคุณ
จูเนียร์, อาวุโส, Java, C, Javascript, PHP, SQL, รหัสหลอก ฯลฯ
คำตอบ:
ฉันขอให้ผู้สมัครออกแบบวิธีการแก้ปัญหาที่ฉันพบในการทำงานประจำวัน การทำเช่นนั้นฉันพยายามสร้างการสนทนาระหว่างฉันและผู้สมัคร ฉันพยายามพูดคุยเกี่ยวกับการออกแบบที่เขากำลังสร้างราวกับว่าฉันไม่เคยคิดเกี่ยวกับปัญหามาก่อน
สิ่งที่ฉันพยายามประเมินคือเราสามารถเข้าใจซึ่งกันและกันได้หรือไม่และเราสามารถพูดคุยเกี่ยวกับปัญหาทางเทคนิคได้โดยไม่สับสน
(สำหรับ developper บนเดสก์ท็อป java)
ออกแบบ API เพื่อจัดการประวัติการนำทางของเว็บเบราว์เซอร์ (หน้าก่อนหน้าหน้าถัดไปแสดงรายการ 10 หน้าก่อนหน้า) และสามารถนำมาใช้ซ้ำได้ในหลายส่วนของแอปพลิเคชัน (ที่นี่ฉันให้ตัวอย่างที่ชัดเจนในแอปของเรา) จากนั้นร่างการดำเนินการ
ฉันชอบอันนี้เพราะมันง่ายพอมันแสดงให้เห็นได้ง่ายมันสามารถแก้ไขได้ทีละขั้นตอน (เพิ่มพฤติกรรมเพิ่มเติมโดยไม่ทำลายทุกอย่าง) ช่วยให้สามารถพูดคุยเกี่ยวกับเคสและการจัดการข้อผิดพลาดและยังช่วยให้สามารถพูดคุยเกี่ยวกับข้อมูล โครงสร้าง
ฉันพบสิ่งนี้ที่ให้ความกระจ่างอย่างมากเมื่อสัมภาษณ์ผู้สมัครและกรองผู้ที่ไม่มีธุรกิจอยู่ มันมีความซับซ้อนคล้ายกับ 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 ในประโยคที่
"วาดให้ฉันบนกระดานไวท์บอร์ดเกี่ยวกับการออกแบบโครงการล่าสุดที่คุณทำงานโดยไม่เปิดเผยรายละเอียดที่ละเอียดอ่อนใด ๆ ให้ฉัน"
Implement strcpy
, strcmp
และเพื่อน ๆ
atoi()
ผมขอให้ผู้สมัครที่จะดำเนินการ
strdup()
ได้
strrev()
หรือฟังก์ชั่นการย้อนกลับสตริง โซลูชันกระดานไวท์บอร์ดของฉันทำให้พวกเขาประทับใจและตอนนี้ฉันทำงานอยู่
สิ่งที่ฉันชอบซึ่งรวมไปถึงบางสาขาวิชาคือการนับจำนวนโหนดในต้นไม้ไบนารีที่ได้รับอินเทอร์เฟซ (ใน 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();
}
}
ตามที่แสดงให้เห็นถึงความรู้เกี่ยวกับ:
คำถามสองข้อที่นำเสนอการอภิปรายไวท์บอร์ดที่น่าสนใจสำหรับฉัน
พวกเขาเริ่มต้นจากง่าย ๆ และจากนั้นก็ซับซ้อนขึ้นเรื่อย ๆ
ฉันไม่ชอบใช้ปริศนาหรือคำถามออกแบบเป็นคำถามไวท์บอร์ด ฉันชอบคำถามที่ตรงไปตรงมาง่าย ๆ ที่ทดสอบความสามารถของผู้สมัครในการเขียนโค้ด รายการโปรดของฉันคือ:
1) เขียนฟังก์ชั่นเพื่อย้อนกลับรายการที่เชื่อมโยงโดยลำพัง (ใช้เวลาสักครู่ก่อนที่พวกเขาจะรู้ว่าพวกเขาต้องการตัวชี้ 3 ตัว)
2) ได้รับต้นไม้ไบนารีค้นหาความลึกของต้นไม้ไบนารี (คำถามนี้ทดสอบความสามารถในการเขียนรหัสซ้ำให้ฉันตรวจสอบว่าพวกเขามีกรณีพื้นฐานของพวกเขาเหมือนเดิม)
3) เขียนโพรซีเดอร์สำหรับไบนารีเพื่อค้นหาอาร์เรย์ของจำนวนเต็ม (เช่น Jon Bentley พูดว่า (ใน Programming Pearls) หลายคนมักจะทำผิดพลาดในการเขียนการค้นหาแบบไบนารีจากนั้นเราสามารถติดตามการค้นหาข้อบกพร่องการเขียนกรณีทดสอบการเรียกใช้รหัส ฯลฯ )
เราใช้สิ่งนี้กับ บริษัท แห่งหนึ่งที่ฉันทำงานให้
เราส่งกระดาษที่ใช้สำหรับการติดตามผู้สมัคร มันเป็นแผ่นเวลาจริงที่ใช้โดยหนึ่งหรือหน่วยงานของเรา เราขอให้ผู้สมัครแนะนำเราผ่านขั้นตอนการออกแบบเพื่อสร้างเครื่องมือติดตามเวลาที่ดีกว่า ไม่มีขอบเขตไม่พูดภาษาอื่น ฯลฯ เพียงแค่ต้องการดูว่าผู้สมัครดีแค่ไหนใน "วงจรชีวิตเต็ม" มันทำให้เราเข้าใจอย่างถ่องแท้ว่าพวกเขารวบรวมความต้องการอย่างไร วิธีที่พวกเขาจัดทำตารางฐานข้อมูล UI ชนิดใดที่พวกเขาอาจทำ ทักษะการสื่อสารมีความจำเป็นอย่างชัดเจนสำหรับงานนี้ มันมักจะทำในห้องที่มีกระดานสีขาวขนาดใหญ่หลายและกินเวลานานถึง 2 ชั่วโมง
เราจ้างคนหลายคนโดยใช้กระบวนการนี้และถ้าพวกเขาทำได้ดีมากในงานพวกเขาทำได้ดีมากสำหรับเรา หากพวกเขามีส่วนต่างและเราตัดสินใจที่จะจ้างพวกเขาต่อไป (แยกหัวข้อ) พวกเขาเป็นโปรแกรมเมอร์ส่วนเพิ่ม
ฉันใช้ปัญหาที่เกี่ยวข้องกับโดเมนการเขียนโปรแกรมของฉัน
หากฉันพัฒนาเว็บแอปพลิเคชันฉันต้องการดูว่าพวกเขาจะสร้างแบบฟอร์มเว็บที่ลบบันทึกได้อย่างไรและพวกเขาอาจใช้วิธีการใดในการลบบันทึกออกจากฐานข้อมูลตัวอย่างเช่น สิ่งนี้บอกฉันว่าพวกเขารู้หลักการของฐานข้อมูลพื้นฐานอย่างไรพวกเขาโต้ตอบกับผู้ใช้เพื่อยืนยันการลบและถ้าพวกเขารู้ว่าการลบแบบ soft คืออะไร
ฉันไม่มีของโปรด ปัญหาที่ฉันเลือกจะแตกต่างกันมากขึ้นอยู่กับงาน
ฉันไม่สนใจว่าพวกเขาจะสามารถแก้ปัญหาได้อย่างสมบูรณ์หรือไม่ในการสัมภาษณ์เทคโนโลยีและภาษาที่พวกเขาใช้หรือไม่เสแสร้งรหัสของพวกเขาดูบนกระดานไวท์บอร์ด ฉันกำลังมองหารูปแบบความคิด ฉันต้องการดูว่าพวกเขารู้วิธีคิดและแก้ไขปัญหาหรือไม่
สิ่งที่ฉันชอบคือหนึ่งในเพื่อนของฉันที่ใช้
เขียนฟังก์ชั่นเพื่อสร้าง / พิมพ์ / จัดเก็บหมายเลขเฉพาะ "n" หมายเลขแรกแล้วอธิบายว่ามันทำงานอย่างไรและมีประสิทธิภาพเพียงใด
มันทำงานได้ดีเพราะ:
มันเป็นคำถามแบบอัลกอริทึมดังนั้นจึงต้องการให้ผู้ให้สัมภาษณ์สามารถคิดแล้วอธิบายการคิดของพวกเขา - เพื่อให้คุณสามารถดูว่าสมองของพวกเขาทำงานอย่างไร
มันเป็นภาษาอิสระ
แทบทุกคนทำให้ถูกต้องสมบูรณ์ (โดยปกติจะมีกรณีที่พวกเขาพลาด (ปกติหรือ 1 หรือ 2) หรือพวกเขาไม่จัดการกับจำนวนลบดังนั้นคุณจะได้เห็นว่าพวกเขาจัดการกับข้อบกพร่องและบอกว่าพวกเขาผิด
ส่วนใหญ่ทำหน้าที่เป็นตะแกรงที่เรียบง่าย แต่ช้ามาก (เช่น 80% ของผู้คนจะตรวจสอบของ n เป็นนายกโดยการหาร n ด้วยจำนวนเต็มทั้งหมดที่น้อยกว่า n) ซึ่งให้ขอบเขตมากมายสำหรับการสนทนาเกี่ยวกับวิธีที่พวกเขาสามารถปรับปรุงอัลกอริทึม ในการแลกเปลี่ยนพื้นที่ / เวลาเช่น "ทำไมคุณถึงหารด้วย 4 ถ้าคุณรู้อยู่แล้วว่ามันไม่หารด้วย 2?" หรือ "คุณคิดว่าคุณต้องหารด้วยจำนวนเฉพาะทั้งหมดที่น้อยกว่า sqrt (n) แต่คุณต้องเก็บตัวเลขเหล่านั้นไว้ที่อื่นดังนั้นความหมายของมันคืออะไร")
พวกเขาไม่จำเป็นต้องได้รับคำตอบที่ถูกต้อง หากใครบางคนสามารถคิดและอธิบายความคิดของพวกเขาได้พวกเขาก็อยู่ไกลจากการเป็นผู้สมัครที่ดี
บางสิ่งที่เรียกว่า 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 สร้างความแตกต่างหรือไม่ค่อนข้างบ่อยครั้งเป็นช่วงเวลาเศร้า ตรงไปตรงมา.)
variablename = variablevalue;
" ในขณะที่คนดี ๆ ก็แค่หัวเราะทางโทรศัพท์หรือด้วยตนเองแล้วบอกฉันโดยตรงว่าอะไรจะต่างกับvar
)
มันขึ้นอยู่กับสิ่งที่คุณกำลังมองหาในฐานะองค์กรที่ทำงานเกี่ยวกับเว็บแบบไดนามิกมากมายที่เกี่ยวข้องกับรูปภาพฉันมักจะถามคำถามทางเรขาคณิตที่เกี่ยวข้องกับงาน ไม่ว่าในกรณีใดฉันมักจะถามคำถามรูปทรงเรขาคณิตเพราะฉันพบว่ามันเป็นแบบทดสอบคณิตศาสตร์ที่ดีและเป็นภาพและสามารถแสดงความสามารถของผู้สมัครเพื่อแสดงการทำงานของพวกเขา
สำหรับผู้สมัครขั้นสูงฉันมักจะให้คำถามต่อไปนี้:
ภาพนี้แสดงพระจันทร์เสี้ยว ความกว้างของเสี้ยวจาก B ถึง D คือ 9 ซม. และระหว่าง E และ F, 5 ซม. C เป็นศูนย์กลางของวงกลมขนาดใหญ่
a) กรุณาคำนวณพื้นที่ของเสี้ยว
b) อธิบายการคำนวณที่จำเป็นเพื่อปรับขนาดภาพให้พอดีกับวงกลมด้านในจากขนาดที่กำหนดและจัดวางภายในวงกลมถ้าทราบจุดกึ่งกลาง
สำหรับคำถามที่ง่ายกว่าฉันมักจะให้คำถามแบบเดียวกัน แต่ใช้ตัวอย่าง "สี่เหลี่ยมภายในวงกลมภายในสี่เหลี่ยม" แม้ว่านี่จะง่ายมากดังนั้นฉันคาดหวังว่าพีชคณิตที่สมบูรณ์แบบกับมัน
ยิ่งกว่านั้นฉันมักจะขอให้พวกเขาล้มอัลกอริธึมสำหรับการสร้างชุดข้อมูลความยาวผันแปรทั้งหมด
คำตอบที่ดีที่สุดที่ฉันเคยเห็นคือ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));
ฉันค้นหาสองสิ่งในผู้สมัครที่ฉันได้สัมภาษณ์ ด้วยเหตุผลที่ฉันไม่สามารถอธิบายทางออนไลน์ได้เรามีผู้สมัครที่น่าสงสารและฉันก็คาดหวังได้ดังนั้นฉันจึงค่อนข้างง่ายสำหรับพวกเขา แม้กระนั้นฉันก็ยังมองหา:
การตระหนักถึงการออกแบบ
"แสดงโครงสร้างตารางของโปรแกรมสมุดรายชื่อที่มีรายชื่อติดต่อและนามสกุลที่สามารถมีหมายเลขโทรศัพท์หลายหมายเลขพร้อมคำอธิบายของหมายเลข (เซลล์ / บ้าน / ที่ทำงาน / ฯลฯ )"
ฉันไม่ได้กำลังมองหาไดอะแกรมสเปค UML 2.0 ที่นี่แผนภาพฟองอย่างง่ายที่นี่ใช้ได้ ตราบใดที่มันสมเหตุสมผล
ความรู้เกี่ยวกับการทำงานกับฐานข้อมูล (เช่น SQL)
ความรู้เกี่ยวกับการทดสอบ
สมมติว่ามีเมธอดที่มีลายเซ็นต์public IEnumerable<PhoneNumber> GetPhoneNumbers(string lastName)
ซึ่งส่งคืนผลลัพธ์ของแบบสอบถามของคุณจากก่อนหน้านี้ สมมติว่าถ้าคุณส่งค่า null ลงในเมธอดมันจะส่ง NullReferenceException เขียนการทดสอบเพื่อสาธิตการทำงานนี้
เขียนการทดสอบที่แสดงให้เห็นว่า GetPhoneNumbers จะส่งกลับหมายเลขโทรศัพท์ที่บ้านของ (123)456-7890 สำหรับคนที่มีนามสกุล "smith"
ความรู้เกี่ยวกับวิธีการเขียนโค้ด
ใช้วิธีการที่จะตอบสนองความต้องการของการทดสอบที่คุณเขียน
เมื่อพิจารณาจากจำนวนและคุณภาพของผู้สมัครที่เราได้รับฉันได้สัมภาษณ์ทุกคนที่เคยสมัครอย่างจริงจัง ฉันไม่ได้จ้างใครเลย
ฉันมักจะให้พวกเขาร่างไดอะแกรมบล็อกของระบบล่าสุดที่พวกเขาได้ทำงานถามเกี่ยวกับความสัมพันธ์ระหว่างบล็อกและปล่อยให้พวกเขาทำอย่างละเอียดในบล็อกที่พวกเขากำลังทำงาน / อยู่ในความดูแล คุณสามารถเรียนรู้มากมายจากแบบฝึกหัดนี้เช่นเดียวกับที่เขาดูเกินขอบเขตโดเมนเล็ก ๆ ของเขามันสำคัญแค่ไหนที่เขาจะรู้ว่า 'ที่' เขากำลังทำอะไรอยู่นอกจากนี้คุณสามารถเรียนรู้เกี่ยวกับบทบาทที่เขาเล่น บทบาท.
เขียนอัลกอริธึมสำหรับปัญหาต่อไปนี้: เมื่อได้รับหมายเลขnให้ส่งออกจำนวนรวมของต้นไม้ไบนารี (ไม่ซ้ำกัน) ที่มีโหนดn
ดังนั้นสำหรับn = 0 และn = 1 คำตอบคือ 1 สำหรับn = 2 คุณมี 2: รูตโหนดและจากนั้นโหนดที่สองจะอยู่ทางซ้ายหรือขวา
คุณสามารถรับข้อมูลเชิงลึกเกี่ยวกับเทคนิคการออกแบบและดูว่าพวกเขาคิดว่าการเรียกซ้ำหรือบันทึกช่วยจำหรือวิธีการเขียนโปรแกรมแบบไดนามิก
[ดูเพิ่มเติมที่การอภิปราย StackOverflow สำหรับกรณีที่เกี่ยวข้อง แต่แตกต่างกันของแผนผังการค้นหาแบบทวิภาค]
ถ้าฉันจะสัมภาษณ์นักพัฒนาซอฟต์แวร์ฉันขอให้เขาออกแบบซอฟต์แวร์และอธิบายข้อกำหนดของฮาร์ดแวร์เพื่อลบรายการที่ซ้ำกันออกจากไฟล์ขนาดใหญ่โดยพลการที่มีชื่อเต็มในแต่ละบรรทัด ฉันทิ้งบางส่วนของคำอธิบายปัญหาไว้อย่างคลุมเครือ จากนั้นฉันขอท้าให้เขาดูว่าเขาเข้าใจการวิเคราะห์และความต้องการที่ชัดเจนการแลกเปลี่ยนที่แตกต่างโครงสร้างข้อมูลและอัลกอริทึม I / O (ที่เก็บข้อมูลสำรอง) ซอฟต์แวร์และเทคโนโลยีฮาร์ดแวร์ความสามารถในการปรับขยายเป็นต้น
ฉันคิดว่ามันเป็นปัญหาเล็ก ๆ แต่มีความท้าทายเปิดเผยความรู้และความสามารถของผู้สมัครในหลาย ๆ ด้าน
Implement function/method(on c/c++/c# whatever), which calculates n-th item of Fibonacci sequence
ผู้ชายหลายคนอาจติดอยู่กับเรื่องนี้ หากมีวิธีการแก้ปัญหาบางอย่าง - โดยปกติจะใช้การสอบถามซ้ำ หลังจากนั้น:
Implement the same via 'for'-loop
ไม่สามารถบอกคุณได้ว่ามีเพื่อนกี่คนที่ไม่สามารถทำงานให้สำเร็จทั้งสอง - 50% ของผู้สมัคร
นั่นเป็นเหตุผลที่ฉันชอบ :)
fib(n)=round(power(PHI,n)/SQRT5)
. PHI และ SQRT5 เป็นค่าคงที่ที่แสดงอัตราส่วนทองคำ (1.618 ... ) และรากที่สองของ 5 ตามลำดับ
สำหรับฐานข้อมูลฉันไปกับ:
ตาราง: สิ่งต่าง ๆ ชื่อ 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 เดฟ
ฉันชอบมันเพราะ:
(นี่คือที่ที่ฉันพบว่ามีวิธีการทำสิ่งเล็ก ๆ น้อย ๆ ทั้งหมดและฉันได้รับมันซับซ้อนกว่าปีที่ผ่านมา)
SELECT min(ID), Name FROM Things GROUP BY Name
จะได้ผลใช่มั้ย
HAVING count(Name) > 1
แต่จากนั้นฉันเดาว่าคำตอบตัวอย่างของคุณควรละเว้น Bodkin Van Horn, Hot Shot, Snimm และ Dave
DELETE FROM Things WHERE ID NOT IN (SELECT MIN(ID) FROM Things GROUP BY Name)
ผมคิดว่าผมจะทำเช่นนี้: คุณมีทางออกที่ต้องการหรือไม่?
ปัญหาไวท์บอร์ด 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;
จากนี้ฉันสามารถเรียนรู้
คุณจะเป็นตัวแทนของสำรับไพ่มาตรฐาน 52 ใบได้อย่างไร ภาษาการเขียนโปรแกรมใดก็ได้ คุณจะสับไพ่ได้อย่างไร?
สิ่งที่ฉันชอบคือการเริ่มต้นด้วยการถามต้นแบบของ printf จากนั้นให้ API ระดับต่ำ printc (ถ่าน c) ซึ่งจะพิมพ์อักขระหนึ่งตัวใช้งาน printf ให้การตอบสนองที่น่าสนใจทุกประเภทเช่นสแต็คเป็นส่วนหนึ่งของ CPU อย่างที่คุณอาจเดาได้ว่าฉันมาจาก C และพื้นหลังแบบฝัง
varargs()
หรือฟังก์ชั่นบางอย่างเช่นนั้น ฉันถูกไหม? ฉันเพิ่งทำมันเพียงครั้งเดียวเพื่อบอกว่าฉันทำไปสักพักแล้ว
คุณมีชามที่มีปลา 200 ตัวอยู่ในนั้น ของปลาเหล่านี้ 99% ไม่ใช่ guppies คุณควรกำจัดปลากี่ตัวเพื่อให้เหลือเพียง 2% ของปลา guppies แสดงงานของคุณ
นี่คือความต้องการที่สับสน มันบอกว่าวิธีนี้จะเปลี่ยนมุมมองหลายครั้งในช่วงคำถามเดียวกัน มันมีไว้เพื่อดูว่าพวกเขาสามารถเข้าใจสิ่งที่เกิดขึ้นจริงหรือไม่
คุณจะแปลกใจว่ามีกี่คนที่เข้าใจผิด
answer = 100
=> [สมมติว่าคุณสามารถเลือกปลาอื่นได้ หากลบ guppies มีคำตอบอื่น ๆ ] คำถามที่ดีคุณจะแปลกใจว่ามีคนไม่กี่คนที่จัดการได้ดีแม้ว่ามันจะเป็นการเล่นของเด็กสำหรับโปรแกรมเมอร์
ฉันมีรายการโปรดบางส่วน แต่ที่นี่เป็นคู่ที่เกือบจะเกิดขึ้น ส่วนใหญ่ฉันจะทำการสัมภาษณ์ทางเทคนิครอบสุดท้าย (C ++) ดังนั้นชอบคำถามที่เปิดกว้างและยาวขึ้นซึ่งนำไปสู่ประเด็นใหม่ที่น่าสนใจ ไม่มีคำตอบที่ 'ถูกต้อง' เพียงเปิดการสนทนาอื่น
1) การใช้ตัวชี้ที่ใช้ร่วมกันขั้นพื้นฐานคำอธิบายที่มีข้อบกพร่องเมื่อเทียบกับ tr1 หรือตัวชี้ที่ใช้ร่วมกันของการเพิ่มในการดำเนินงานของพวกเขาวิธีการใช้งาน ฯลฯ
2) การตรวจสอบรหัส สำหรับการจ้างงานที่มีประสบการณ์เราคาดว่าพวกเขาจะสามารถตรวจสอบรหัสที่ให้ไว้อย่างมั่นใจสำหรับปัญหาการออกแบบข้อผิดพลาดความน่ากลัวของการเข้ารหัสและปัญหาการบำรุงรักษาที่อาจเกิดขึ้น และแน่นอนว่าพวกเขาจะแก้ไขอย่างไร และบางครั้งวิธีที่พวกเขาส่งข้อความนั้นถึงผู้พัฒนารุ่นน้องพวกเขากำลังยิงลง
คำถามหนึ่งที่ฉันใช้มานับตั้งแต่ที่ใช้กับฉันคือคำถามต่อไปนี้:
เขียนฟังก์ชั่นเพื่อพิมพ์ตัวเลขทั้งหมดระหว่าง 1 ถึง 100
ส่วนใหญ่ของเหตุผลที่ฉันใช้มันเป็นเพราะความจริงที่ว่าคุณสามารถใช้ทางออกและไปในทิศทางต่าง ๆ :
คุณจะปรับเปลี่ยนฟังก์ชันเพื่อพิมพ์ตัวเลขทั้งหมดระหว่าง 1 ถึง 1,000, 10000 หรือnอย่างไร
คำตอบสำหรับคำถามเหล่านี้จะช่วยให้คุณเข้าใจว่าพวกเขาตอบสนองต่อข้อกำหนดที่เปลี่ยนแปลงได้อย่างไร ผู้สมัครที่แข็งแกร่งอาจตอบกลับด้วยคำถามเกี่ยวกับฟังก์ชันที่จำเป็นสำหรับความถี่ในการเรียกใช้
ย้ายไปในทิศทางที่แตกต่าง:
คุณจะเปลี่ยนแปลงสิ่งต่าง ๆ อย่างไรถ้าคุณรู้ว่าฟังก์ชั่นนี้จะถูกเรียกหลายครั้งต่อนาทีและประสิทธิภาพเป็นเรื่องกังวล?
ฉันใช้สิ่งนี้เป็นวิธีการตรวจสอบความคิดด้านข้างของพวกเขา เนื่องจากการคำนวณจำนวนเฉพาะอาจช้าลงเมื่อค่าสูงสุดเพิ่มขึ้นบางครั้งก็เหมาะสมกว่าที่จะใช้ตารางการค้นหาที่คำนวณหรือคำนวณล่วงหน้าบางประเภทซึ่งปรับตามปัญหาที่คุณพยายามแก้ไข
นี่คือหนึ่งในการกระตุ้นความคิดบางอย่าง - มันตรงไปตรงมาเกี่ยวข้องกับคณิตศาสตร์และตรวจสอบความรู้ของผู้สมัครเกี่ยวกับการออกแบบคอมพิวเตอร์ขั้นพื้นฐาน (ล้นการแสดงตัวเลข ฯลฯ ):
เขียนโปรแกรม (หรือขั้นตอน) ที่ใช้คู่ของจำนวนเต็ม 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));
}
เติมวิธีต่อไปนี้: PSโหมดของตัวเลขคือตัวเลข (ในรายการ) ซึ่งมีการเกิดขึ้นมากที่สุด
public int getMode(List<Integer> numberList) {
}
นี่คือการดูที่มีประสิทธิภาพเป็นรหัสของคุณ
คุณจะเป็นตัวแทนเมทริกซ์สำรองที่ค่อนข้างใหญ่ได้อย่างไรพูด 1,000x1000 แต่มีรายการที่ไม่ใช่ศูนย์มากที่สุด 100 รายการ