Sama seperti judulnya, apa masalah wawancara papan tulis favorit Anda, dan mengapa itu terbukti efektif untuk Anda?
Junior, senior, Java, C, Javascript, PHP, SQL, pseudo-code, dll.
Sama seperti judulnya, apa masalah wawancara papan tulis favorit Anda, dan mengapa itu terbukti efektif untuk Anda?
Junior, senior, Java, C, Javascript, PHP, SQL, pseudo-code, dll.
Jawaban:
Saya meminta kandidat untuk merancang solusi untuk masalah yang sebenarnya saya temui dalam pekerjaan saya sehari-hari. Dengan melakukan itu, saya mencoba membuat dialog antara saya dan kandidat. Saya mencoba berdiskusi tentang desain yang sedang dibangun seolah-olah saya tidak pernah memikirkan masalah sebelumnya.
Apa yang saya coba evaluasi adalah apakah kita dapat saling memahami, dan apakah kita dapat berbicara tentang masalah teknis tanpa kebingungan.
(Untuk pengembang desktop java)
Rancang API untuk menangani riwayat navigasi browser web (halaman sebelumnya, halaman berikutnya, daftar 10 halaman sebelumnya), dan itu dapat digunakan kembali di banyak bagian aplikasi (di sini saya memberikan contoh nyata dalam aplikasi kami). Kemudian, buat sketsa implementasi.
Saya suka yang ini, karena cukup sederhana, mudah diilustrasikan, dapat diselesaikan langkah demi langkah (menambahkan perilaku tambahan tanpa merusak segalanya), memungkinkan untuk berbicara tentang kasus tepi dan penanganan kesalahan, dan juga memungkinkan untuk berbicara tentang data struktur.
Saya menemukan ini sangat mencerahkan ketika mewawancarai kandidat dan menyaring mereka yang tidak memiliki bisnis. Ini serupa dalam kompleksitas dengan Fizz Buzz, tetapi berfokus pada keterampilan basis data.
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"
Saya membiarkan mereka menuliskannya dalam varian SQL apa pun yang mereka inginkan, dan saya tidak terlalu pilih-pilih masalah sintaksis kecil. Saya terutama ingin tahu bahwa mereka memahami konsep DB relasional dasar.
Sebagian besar kandidat dapat melewati bagian 3 tanpa masalah sama sekali. Anda akan kagum betapa banyak yang berpikir bahwa jawaban untuk bagian 4 hanya untuk mengubah operator dari ATAU ke DAN dalam klausa mana.
"Gambar untuk saya di papan tulis desain proyek terakhir yang Anda kerjakan, tanpa mengungkapkan detail sensitif apa pun kepada saya."
Melaksanakan strcpy
, strcmp
dan teman-teman.
atoi()
.
strdup()
.
strrev()
atau fungsi pembalikan string. Solusi papan tulis saya mengesankan mereka dan saya melakukan pekerjaan sekarang.
Favorit saya yang mencakup beberapa disiplin ilmu adalah untuk menghitung jumlah node dalam pohon biner yang diberikan antarmuka (dalam 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.
}
dan hanya untuk bersenang-senang, inilah implementasinya, meskipun orang yang diwawancara tidak perlu melihat ini.
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.
}
dan asisten kelas:
public static class BinaryTreeNodeCounter
{
public static int CountNodes<T>(this IBinaryTree<T> tree)
{
// TODO: What goes here?
}
}
Solusi yang saya suka lihat adalah ini:
public static class BinaryTreeNodeCounter
{
public static int CountNodes<T>(this IBinaryTree<T> tree)
{
return tree == null
? 0
: 1 + tree.Left.CountNodes() + tree.Right.CountNodes();
}
}
Karena menunjukkan pengetahuan tentang:
Dua pertanyaan yang telah menimbulkan diskusi papan tulis yang menarik bagi saya adalah
Mereka memulai dari yang sederhana dan kemudian menjadi semakin kompleks.
Saya tidak suka menggunakan puzzle atau pertanyaan desain sebagai pertanyaan papan tulis. Saya lebih suka pertanyaan langsung, sederhana, yang menguji kemampuan kandidat untuk menulis beberapa kode. Favorit saya adalah:
1) Tulis fungsi untuk membalikkan daftar yang ditautkan sendiri. (Butuh beberapa saat sebelum mereka menyadari bahwa mereka membutuhkan 3 petunjuk.)
2) Diberikan pohon biner, temukan kedalaman pohon biner. (Pertanyaan ini menguji kemampuan mereka untuk menulis kode rekursif. Izinkan saya memeriksa apakah mereka memiliki kasing yang utuh.)
3) Tulis prosedur untuk mencari biner array bilangan bulat. (Seperti yang dikatakan Jon Bentley (dalam Pemrograman Mutiara), banyak orang cenderung membuat kesalahan dengan menulis pencarian biner. Orang kemudian dapat menindaklanjuti dengan menemukan bug, menulis kasus uji, menjalankan kode, dll.)
Kami menggunakan ini di satu perusahaan tempat saya bekerja.
Kami menyerahkan kandidat selembar kertas yang digunakan untuk melacak waktu. Itu adalah kartu absen nyata yang digunakan oleh salah satu atau divisi kami. Kami meminta kandidat untuk memandu kami melalui proses desain untuk membuat alat pelacakan waktu yang lebih baik. Tidak ada batasan, tidak mengatakan bahasa apa dll, hanya ingin melihat seberapa baik kandidat berada di "siklus hidup penuh". Itu memberi kami wawasan nyata tentang bagaimana mereka memenuhi persyaratan. Bagaimana mereka menyusun tabel database, seperti apa UI yang mungkin mereka lakukan. Keterampilan komunikasi jelas dibutuhkan untuk tugas ini. Itu biasanya dilakukan di sebuah ruangan dengan beberapa papan tulis besar dan berlangsung selama 2 jam.
Kami merekrut beberapa orang menggunakan proses ini dan jika mereka melakukan tugasnya dengan sangat baik, mereka melakukannya dengan sangat baik untuk kami. Jika mereka marjinal dan kami memutuskan untuk tetap mempekerjakan mereka (topik terpisah) mereka adalah programmer marginal.
Saya menggunakan masalah yang relevan dengan domain pemrograman saya.
Jika saya mengembangkan aplikasi web, saya ingin melihat bagaimana mereka membuat formulir web yang menghapus catatan, dan pendekatan apa yang mungkin mereka ambil untuk menghapus catatan dari database, misalnya. Ini memberitahu saya jika mereka tahu prinsip-prinsip basis data dasar, bagaimana mereka berinteraksi dengan pengguna untuk memverifikasi penghapusan, dan jika mereka tahu apa itu soft delete.
Saya tidak punya favorit. Masalah yang saya pilih akan sangat bervariasi tergantung pada pekerjaan.
Saya tidak peduli apakah mereka dapat menyelesaikan masalah sepenuhnya atau tidak dalam sebuah wawancara, teknologi dan bahasa apa yang mereka gunakan, atau seberapa jelek kode mereka di papan tulis. Saya mencari pola pikir; Saya ingin melihat apakah mereka tahu bagaimana memikirkan dan memecahkan masalah.
Favorit saya adalah yang digunakan teman saya.
Tuliskan saya fungsi untuk menghasilkan / mencetak / menyimpan bilangan prima "n" pertama dan kemudian menjelaskan cara kerjanya dan seberapa efisiennya.
Ini bekerja dengan baik karena:
Ini adalah pertanyaan algoritmik sehingga diperlukan orang yang diwawancarai untuk dapat berpikir dan kemudian menjelaskan pemikiran mereka - sehingga Anda dapat melihat bagaimana otak mereka bekerja.
Bahasa independen.
Hampir tidak ada orang yang sepenuhnya benar (biasanya ada kasus tepi yang mereka lewatkan (1 atau 2 normal), atau mereka tidak menangani angka negatif, sehingga Anda bisa melihat bagaimana mereka menangani bug dan diberi tahu bahwa mereka salah.
Sebagian besar melakukannya sebagai saringan sederhana tetapi sangat lambat (mis. 80% orang akan memeriksa n adalah bilangan prima dengan membagi n oleh semua bilangan bulat kurang dari n), yang memberi Anda banyak ruang untuk percakapan tentang bagaimana mereka dapat meningkatkan algoritme berdasarkan pada pengorbanan ruang / waktu mis. "mengapa Anda membagi angka dengan 4 jika Anda sudah tahu itu tidak dapat dibagi 2?" atau "Anda telah berhasil bahwa Anda hanya perlu membagi dengan semua bilangan prima kurang dari sqrt (n), tetapi itu mengharuskan Anda untuk menyimpan angka-angka itu di suatu tempat, jadi apa implikasinya?")
Tidak perlu bagi mereka untuk mendapatkan jawaban yang benar. Jika seseorang dapat berpikir dan menjelaskan pemikiran mereka maka mereka jauh di jalan untuk menjadi kandidat yang baik.
Sesuatu yang disebut aff_z, yang merupakan bagian dari ujian C sekolah teknik saya dan digunakan sebagai tes "dummy" untuk membuat siswa gagal ketika kembali dari liburan (sistem penilaian kami menyiratkan bahwa gagal tes menghentikan tanda, sehingga gagal bahwa tes boneka akan batalkan seluruh tes Anda. Memaksa Anda memperhatikan detail-detail tolol). Saya menggunakannya kembali sekali atau dua kali selama wawancara.
Ngomong-ngomong ... Aku lupa formulasi yang tepat tapi itu seperti ini ...
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
Yang menyedihkan adalah bahwa tidak hanya beberapa siswa akan menghasilkan solusi yang sangat rumit ketika jawabannya cukup jelas, tetapi beberapa bahkan akan berhasil gagal.
Dan percaya atau tidak, itu memang terjadi selama wawancara juga.
Menjalankannya dalam wawancara cukup menyenangkan, karena beberapa pelamar akan mulai menulis cabang yang mungkin dan kemudian menyadari apa yang salah (jelas, jika Anda hanya bertanya kepada mereka secara lisan, itu cukup dimengerti bahwa mereka melakukannya saat Anda berbicara ... tetapi jika Anda berikan secara tertulis, saya merasa membingungkan ...)
Itu bodoh, tapi saya kira ini adalah penyaringan yang minimalis (sama halnya, ketika mempekerjakan programmer JS, saya selalu bertanya bagaimana mendeklarasikan variabel, dan kemudian tergantung pada jawaban mereka apakah menggunakan var membuat perbedaan atau tidak sama sekali. Cukup sering saat yang menyedihkan, secara jujur.)
variablename = variablevalue;
" sedangkan yang baik hanya akan tertawa di telepon atau secara langsung dan langsung memberi tahu saya apa perbedaannya dengan atau tanpa var
).
Ini benar-benar tergantung apa yang Anda cari, sebagai organisasi yang melakukan banyak pekerjaan web dinamis yang melibatkan gambar, saya cenderung ingin mengajukan pertanyaan geometri yang berkaitan dengan pekerjaan itu. Dalam kasus apa pun, saya cenderung mengajukan pertanyaan geometri, karena menurut saya tes matematika bagus yang bagus dan visual dan dapat menunjukkan kemampuan kandidat untuk mempresentasikan pekerjaan mereka secara visual dan secara sistematis menyelesaikan masalah.
Untuk kandidat tingkat lanjut, saya sesekali memberikan pertanyaan berikut:
Gambar ini menunjukkan bulan sabit. Lebar bulan sabit dari B ke D adalah 9cm dan antara E dan F, 5cm. C adalah pusat dari lingkaran yang lebih besar.
a) Silakan menghitung luas bulan sabit.
b) Jelaskan perhitungan yang diperlukan untuk mengubah ukuran gambar agar cocok dengan lingkaran dalam dari ukuran tertentu, dan posisikan dalam lingkaran jika titik tengah diketahui.
Untuk pertanyaan yang lebih mudah, saya biasanya memberikan pertanyaan yang sama, tetapi gunakan contoh "kotak di dalam lingkaran di dalam kotak". Meskipun ini sangat mudah, jadi saya harapkan aljabar yang sempurna di atasnya.
Lebih dan di atas itu, saya cenderung meminta mereka untuk mengetuk suatu algoritma untuk menghasilkan semua kombinasi dari set data panjang variabel.
Jawaban FizzBuzz terbaik yang pernah saya lihat adalah:
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 # (sederhana)
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 # (pintar)
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));
Saya mencari beberapa hal dalam kandidat yang telah saya wawancarai. Karena alasan yang tidak bisa saya jelaskan secara online, kami mendapatkan kandidat yang sangat buruk, dan saya datang untuk mengharapkannya, jadi saya cukup mudah menggunakannya. Meski begitu, saya mencari:
Kesadaran desain.
"Tunjukkan pada saya struktur tabel untuk program buku alamat yang memiliki Kontak dengan nama depan dan belakang yang dapat memiliki beberapa Nomor Telepon dengan deskripsi nomor (sel / rumah / kantor / dll.)"
Saya tidak mencari diagram spec UML 2.0 di sini, diagram bubble sederhana di sini baik-baik saja. Selama itu masuk akal.
Pengetahuan bekerja dengan database (mis. SQL)
Pengetahuan tentang pengujian
Asumsikan ada metode dengan tanda tangan public IEnumerable<PhoneNumber> GetPhoneNumbers(string lastName)
yang mengembalikan hasil permintaan Anda dari sebelumnya. Asumsikan bahwa jika Anda memasukkan nol ke dalam metode, ia melempar NullReferenceException. Tulis tes untuk menunjukkan fungsi ini.
Tulis tes yang menunjukkan bahwa GetPhoneNumbers akan mengembalikan nomor telepon rumah (123) 456-7890 untuk seseorang dengan nama belakang "smith".
Pengetahuan tentang cara menulis beberapa kode
Terapkan metode yang akan memenuhi persyaratan tes yang Anda tulis.
Mengingat jumlah dan kualitas pelamar yang kami dapatkan, saya telah mewawancarai semua orang yang pernah mendaftar dengan serius. Saya tidak mempekerjakan siapa pun.
Saya biasanya membiarkan mereka membuat sketsa diagram blok dari sistem terakhir yang mereka kerjakan, menanyakan tentang hubungan antara blok dan kemudian membiarkan mereka menguraikan blok yang mereka kerjakan / yang bertanggung jawab. Anda dapat belajar banyak dari latihan ini, seperti bagaimana seseorang melihat di luar wilayahnya yang kecil, seberapa penting baginya untuk mengetahui 'di mana' dia bertindak, juga Anda dapat belajar tentang peran yang dia mainkan, apakah itu kunci atau sisi wewenang.
Tulis algoritma untuk masalah berikut: Diberi angka n , output jumlah total pohon biner (unik) yang memiliki n node.
Jadi, untuk n = 0 dan n = 1, jawabannya adalah 1. Untuk n = 2, Anda memiliki 2: simpul akar, dan kemudian simpul kedua baik ke kiri atau ke kanan.
Anda dapat memperoleh wawasan tentang teknik desain dan untuk melihat apakah mereka memikirkan rekursi atau memoisasi atau solusi pemrograman dinamis.
[Lihat juga diskusi StackOverflow ini untuk kasus pohon pencarian biner terkait, tetapi berbeda.]
Jika saya akan mewawancarai pengembang perangkat lunak, saya akan memintanya untuk merancang perangkat lunak dan menjelaskan persyaratan perangkat keras untuk menghapus entri duplikat dari file besar yang sewenang-wenang berisi nama lengkap di setiap baris. Saya meninggalkan beberapa bagian dari deskripsi masalah dengan sengaja. Kemudian saya menantangnya untuk melihat apakah dia memahami menganalisis dan mengklarifikasi persyaratan, pertukaran yang berbeda, struktur data dan algoritma, I / O (penyimpanan sekunder), teknologi perangkat lunak dan perangkat keras, skalabilitas, dll.
Saya pikir itu adalah masalah kecil namun menantang, mengungkapkan pengetahuan dan kemampuan pelamar di banyak bidang komputasi.
Implement function/method(on c/c++/c# whatever), which calculates n-th item of Fibonacci sequence
Banyak pria bisa terjebak dalam hal ini. Jika beberapa solusi diberikan - biasanya menggunakan rekursi. Setelah itu:
Implement the same via 'for'-loop
Tidak bisa memberi tahu Anda, berapa banyak orang yang gagal menyelesaikan kedua tugas - 50% dari kandidat.
Itu sebabnya saya suka :)
fib(n)=round(power(PHI,n)/SQRT5)
. PHI dan SQRT5 adalah konstanta yang mewakili rasio emas (1,618 ...) dan akar kuadrat masing-masing.
Untuk database saya pergi dengan:
Tabel: Benda Nama ID 1 Bodkin Van Horn 2 Hoos-Foos 3 Hoos-Foos 4 Hot-Shot 5 Marvin O'Gravel Balloon Face 6 Snimm 7 Marvin O'Gravel Balloon Face 8 Marvin O'Gravel Balloon Face 9 Dave
Tuliskan saya beberapa SQL yang akan menduplikat tabel seperti ini berdasarkan namanya (dan saya tidak peduli ID mana yang saya dapatkan kembali tetapi yang mana yang dikembalikan harus valid untuk nama itu). Jadi tabel setelah SQL yang benar telah diterapkan akan menampilkan sesuatu seperti:
Tabel: Benda Nama ID 1 Bodkin Van Horn 2 Hoos-Foos 4 Hot-Shot 5 Marvin O'Gravel Balloon Face 6 Snimm 9 Dave
Saya suka itu karena:
(Di sinilah saya menemukan bahwa ada beberapa cara sepele untuk melakukan ini dan saya sudah terlalu rumit selama bertahun-tahun).
SELECT min(ID), Name FROM Things GROUP BY Name
akan berhasil, bukan?
HAVING count(Name) > 1
, tapi kemudian saya kira jawaban sampel Anda harus menghilangkan Bodkin Van Horn, Hot Shot, Snimm, dan Dave.
DELETE FROM Things WHERE ID NOT IN (SELECT MIN(ID) FROM Things GROUP BY Name)
. Apakah Anda punya solusi yang disukai?
Masalah papan tulis C ++ favorit saya adalah menerapkan kandidat
Vector3 a(1, 0, 0), b(0, 1, 0); // Mathematical 3D vectors
double c = 7.0;
double d = a * c;
Vector3 e = a * b;
Dari sini saya bisa belajar
Bagaimana Anda mewakili setumpuk kartu 52 standar? Bahasa pemrograman apa pun baik-baik saja. Bagaimana Anda mengocok kartu?
Favorit saya adalah memulai dengan menanyakan prototipe printf. Kemudian diberi printc API level rendah (char c), yang akan mencetak satu karakter, mengimplementasikan printf. Memberikan segala macam tanggapan menarik seperti tumpukan adalah bagian dari CPU. Seperti yang mungkin Anda tebak, saya berasal dari latar belakang C dan tertanam.
varargs()
atau beberapa fungsi seperti itu. Apakah saya benar? Saya hanya melakukannya sekali untuk mengatakan saya melakukannya beberapa waktu yang lalu.
Anda memiliki mangkuk dengan 200 ikan di dalamnya. Dari ikan ini 99% bukan ikan guppy. Berapa banyak ikan yang harus Anda buang sehingga 2% dari yang tersisa adalah ikan guppy. Tunjukkan pekerjaan Anda.
Ini tentang persyaratan yang membingungkan. Dikatakan cara ini untuk mengubah perspektif beberapa kali selama pertanyaan yang sama. Ini dimaksudkan untuk melihat apakah mereka dapat mengetahui apa yang sebenarnya terjadi.
Anda akan terkejut betapa banyak orang yang salah.
answer = 100
. [Anggap saja kamu bisa memilih ikan lain secara selektif. Jika menghapus guppy, ada jawaban lain.] Pertanyaan yang bagus, Anda akan terkejut betapa sedikit orang yang menanganinya dengan baik, meskipun itu seharusnya permainan anak-anak untuk seorang programmer.
Saya punya beberapa favorit, tetapi di sini ada beberapa yang hampir selalu muncul. Sebagian besar waktu saya melakukan wawancara putaran teknis (C ++) final sehingga mendukung pertanyaan yang lebih panjang dan lebih terbuka yang mengarah pada bidang minat baru. Tidak ada jawaban yang 'benar', hanya ada celah untuk percakapan lain.
1) Menerapkan pointer bersama dasar, penjelasan di mana ada kekurangan dibandingkan dengan tr1 atau meningkatkan pointer bersama dalam implementasi mereka, bagaimana itu harus digunakan dll.
2) Tinjauan kode. Untuk karyawan yang berpengalaman, kami berharap mereka dapat dengan percaya diri meninjau beberapa kode yang disediakan untuk masalah desain, kesalahan, kengerian pengkodean, dan potensi masalah pemeliharaan. Juga, tentu saja, bagaimana mereka memperbaikinya; dan kadang-kadang bagaimana mereka memberikan pesan itu kepada pengembang junior yang mereka tembak.
Satu pertanyaan yang telah saya gunakan sejak digunakan pada saya adalah sebagai berikut:
Tulis fungsi untuk mencetak semua angka antara 1 dan 100.
Sebagian besar alasan mengapa saya menggunakannya adalah karena Anda dapat mengambil solusi di sana dan bergerak ke berbagai arah:
Bagaimana Anda memodifikasi fungsi untuk mencetak semua angka antara 1 dan 1000, 10000, atau n ?
Jawaban mereka atas pertanyaan-pertanyaan ini dapat memberi Anda wawasan tentang bagaimana mereka menanggapi perubahan persyaratan serta jika mereka dapat mengenali pertimbangan kinerja. Calon yang kuat mungkin menjawab dengan pertanyaan tentang apa fungsi yang diperlukan untuk seberapa sering akan dipanggil.
Bergerak ke arah yang berbeda:
Bagaimana Anda mengubah sesuatu jika Anda tahu fungsi ini akan dipanggil beberapa kali dalam satu menit dan kinerja menjadi perhatian?
Saya menggunakan ini sebagai cara memeriksa pemikiran lateral mereka. Karena menghitung bilangan prima bisa lambat karena nilai maks bertambah besar, kadang-kadang lebih masuk akal jika menggunakan semacam tabel pencarian yang dihitung atau dihitung sebelumnya yang disesuaikan berdasarkan masalah yang Anda coba selesaikan.
Ini salah satu untuk memancing beberapa pemikiran - Ini mudah, melibatkan sedikit matematika, dan memeriksa pengetahuan kandidat tentang desain komputer dasar (overflow, representasi numerik, dll):
Tulis sebuah program (atau prosedur) yang mengambil sepasang bilangan bulat X, Y sebagai input dan menentukan apakah X * Y dapat dibagi habis secara merata oleh 10. CATATAN PENTING: X dan Y mungkin cukup besar sehingga X * Y meluap dari jenis bilangan bulat terbesar yang tersedia di mesin Anda.
T_BOOL MultipleOfTen(int x, int y)
{
return((x%2==0 || y%2==0) && (x%5==0 || y%5==0));
}
Isi metode berikut: PS A mode angka adalah angka (dalam daftar) yang memiliki paling banyak kejadian.
public int getMode(List<Integer> numberList) {
}
Ini untuk melihat efisien adalah kode Anda.
Bagaimana Anda mewakili matriks cadangan yang relatif besar ... katakanlah 1000x1000 tetapi memiliki paling banyak 100 entri tidak nol?