
你應(yīng)該如何回答數(shù)據(jù)科學(xué)編碼面試問題,這是沒有秘訣的。沒有一種方法總是有效的。但是,在大多數(shù)情況下,有一些指導(dǎo)原則將幫助您更好地回答編碼問題。
這些指導(dǎo)方針是根據(jù)參加面試和回答編碼問題的經(jīng)驗(yàn)形成的。我們將這些指導(dǎo)方針分為四個(gè)部分。您可以使用這些指南作為核對表,特別是如果您沒有數(shù)據(jù)科學(xué)編碼面試問題的經(jīng)驗(yàn)。以后,你當(dāng)然可以找到自己的方法,也許忽略一些要點(diǎn),甚至包括一些對你更有效的方法。
但是不管你的經(jīng)驗(yàn)如何,如果你遵循這個(gè)清單,你就會增加你對編碼問題給出一個(gè)好答案的機(jī)會。
現(xiàn)在您已經(jīng)有了檢查表大綱,我們將研究每一節(jié),并解釋其中包含的檢查表要點(diǎn)。
清單中的問題分析部分是花幾分鐘徹底思考你剛剛得到的問題。就像您在處理實(shí)際業(yè)務(wù)問題時(shí)會看到的那樣,最好先考慮問題,然后“浪費(fèi)”一些時(shí)間從各個(gè)角度來看問題。記住,思考永遠(yuǎn)不是浪費(fèi)時(shí)間!
這幾分鐘以后會有回報(bào)的。如果您立即開始編寫解決方案,那么一旦您意識到您的方法并不能產(chǎn)生所需的解決方案,就很有可能不得不從頭開始?;蛘吣仨毑粩嗟馗暮椭貙懘a。
幫助你練習(xí)思考問題的要點(diǎn)是:
i。理解問題
為了確保你理解這個(gè)問題,你必須非常仔細(xì)地閱讀這個(gè)問題。慢慢讀。并且讀2-3遍以確保你沒有遺漏任何東西。這適用于所有數(shù)據(jù)科學(xué)面試問題,無論它們有多容易或多難。關(guān)鍵是,你不會知道你得到的問題是難還是容易。有些問題可能看起來很簡單,但它們有一些陷阱,這正是為了消除那些不夠徹底和傾向于膚淺的考生。
如果問題沒有寫出來,也可以讓面試官重復(fù)一遍,如果你沒有聽懂的話。在這種情況下,一旦你理解了這個(gè)問題,最好把它重復(fù)給面試官。這樣,你就可以確保你寫得很好,并允許面試官在沒有給你所有必要信息的情況下糾正自己。
ii。分析正在使用的表和數(shù)據(jù)
一旦您理解了這個(gè)問題,下一個(gè)合乎邏輯的步驟就是分析給出的表。這意味著您需要分析有多少表以及它們之間的連接方式(外鍵和主鍵)。
您還希望查看這些表中的數(shù)據(jù)。表示每個(gè)表中有哪些列。每列中的數(shù)據(jù)類型。這很重要,因?yàn)槟拇a將取決于您處理的是字符串?dāng)?shù)據(jù)、整數(shù)、貨幣還是任何其他類型的數(shù)據(jù)。也許您甚至需要將一種數(shù)據(jù)類型轉(zhuǎn)換為另一種數(shù)據(jù)類型以獲得所需的結(jié)果。
除了數(shù)據(jù)類型之外,理解數(shù)據(jù)的組織、排序和粒度也很重要。意思是,表中是否有重復(fù)的值?數(shù)據(jù)是否按客戶級別、事務(wù)級別等表示?
iii??紤]代碼結(jié)果
在開始編碼之前,您應(yīng)該知道您希望得到的結(jié)果是什么樣子。當(dāng)然,這也取決于你想要回答的問題。
但想想結(jié)果文學(xué)意味著,會不會是一行只有一個(gè)值,還是一個(gè)有幾列的表。如果是一個(gè)表,那么您還必須考慮如何對數(shù)據(jù)進(jìn)行聚合和排序,必須顯示多少列,等等。
問題分析-示例
為了向您展示如何應(yīng)用檢查列表的第一部分,我們將使用Dropbox編碼問題。問題是這樣的:
“寫一個(gè)查詢,計(jì)算市場營銷部門和工程部門最高工資之間的差異。產(chǎn)出只是工資的差異?!?/em>
如果你仔細(xì)閱讀這個(gè)問題,你就會意識到你必須找到最高的薪水。好的,但不是每個(gè)部門的最高工資,而是兩個(gè)部門的最高工資:市場營銷和工程。一旦你發(fā)現(xiàn)這兩個(gè)部門的工資最高,你就需要計(jì)算出兩者之間的差異。
既然您理解了問題,您就可以分析其中的表和數(shù)據(jù)了。您將使用的表是db_employee和db_dept。表db_employee包含有關(guān)公司員工的數(shù)據(jù)。它有五列:
id | int |
first_name | varchar |
last_name | varchar |
salary | int |
department_id | int |
您可以看到,name列是varchar數(shù)據(jù)類型,而salary是一個(gè)整數(shù)。知道工資值中沒有小數(shù)可能很重要。如果使用此處的預(yù)覽選項(xiàng),您將看到此數(shù)據(jù)是唯一的:每個(gè)員工只有一個(gè)薪資值分配給他們。還有,一件重要的事情要知道;它也可以是歷史數(shù)據(jù),在那里你會有每個(gè)員工過去幾年的所有工資。有一個(gè)列department_id,它是一個(gè)外鍵,將該表與表db_dept鏈接起來:
id | int |
department | varchar |
此表中只有兩列。這只是一個(gè)部門的列表,沒有重復(fù),表中顯示了六個(gè)部門。
很好,你已經(jīng)分析了數(shù)據(jù)?,F(xiàn)在,回到問題,讀第二句。是的,這是關(guān)于你的解決方案需要是什么的說明。您不需要在一欄中顯示一個(gè)部門的最高工資,然后在第二欄中顯示另一個(gè)部門的最高工資,然后在第三欄中顯示兩者之間的差異。不,輸出將只差:
沒有關(guān)于該輸出列應(yīng)命名的說明。所以不管你給它起什么名字,或者你根本不給它起名字,都不會出錯(cuò)。重要的是你得到了這個(gè)結(jié)果,別無他法。
這樣,您就有了編寫高質(zhì)量代碼的基礎(chǔ)?,F(xiàn)在是關(guān)于策略的時(shí)候了:你將如何編寫代碼?
在開始編寫代碼之前,對代碼的外觀有一個(gè)清晰的概念也很重要。編碼應(yīng)該只翻譯你的(清除!)編程語言的解決方案。
當(dāng)您考慮如何處理您的解決方案(或編寫代碼)時(shí),請考慮以下事項(xiàng):
i。有幾種編寫代碼的方法嗎?
在思考解決方案時(shí),首先想到的有時(shí)是最好的解決方案。但有時(shí)并非如此。你怎么會知道?一旦你有了第一個(gè)想法,訣竅就是考慮是否有其他方法解決這個(gè)問題。編程語言,更多的時(shí)候,有幾種可能的解決方案。
記住這一點(diǎn)。這很重要有幾個(gè)原因。首先,可能有一些簡單的技巧或函數(shù)可以輕松地解決您認(rèn)為需要用冗長代碼才能解決的問題--例如,使用Window functionsor CTEs,而不是編寫帶有無盡子查詢的代碼。
Always go with what’s easier to write, with as few lines of code as possible. When you’re at the interview, you also have to manage time at your disposal. This is one of the ways.
當(dāng)然,如果有幾個(gè)或多或少同樣復(fù)雜的解決方案,請考慮代碼將如何執(zhí)行。對于大量數(shù)據(jù),不同的代碼執(zhí)行起來可能比其他代碼占用更多的時(shí)間和內(nèi)存。
簡而言之,您應(yīng)該從兩個(gè)方面考慮代碼效率。一個(gè)是個(gè)人效率,或者說你寫代碼的速度有多快。第二個(gè)是代碼效率,或者代碼執(zhí)行所需內(nèi)容的速度有多快。
ii。陳述您的假設(shè)
陳述你的假設(shè)很重要,有幾個(gè)原因。第一個(gè)是大聲說出來并寫出來,這將幫助你看到你的方法的潛在問題。
第二個(gè)重要的原因是它邀請你的面試官與你交流,甚至提供一些幫助,他們通常會這樣做。如果他們不知道你想做什么和為什么,他們就幫不了你。正如我們已經(jīng)提到的,通常有幾個(gè)解返回相同的結(jié)果。傳達(dá)你的假設(shè)可以讓面試官根據(jù)你選擇的方法引導(dǎo)你朝著正確的方向前進(jìn)?;蛘呱踔烈龑?dǎo)你遠(yuǎn)離完全錯(cuò)誤的假設(shè),這些假設(shè)會使你的解決方案一團(tuán)糟。
第三個(gè)原因是,有時(shí)這個(gè)問題可能被故意設(shè)置得含糊其辭。這些問題不是與正確的解決方案有關(guān),而是與你如何思考有關(guān)。因此,如果你陳述你的假設(shè),這將向面試官展示你的想法,他們通常對此非常感興趣。
陳述假設(shè)的第四個(gè)也是最后一個(gè)原因是,即使你得到了完全錯(cuò)誤的答案,但在你陳述的假設(shè)中是正確的,你仍然有可能得到一些分?jǐn)?shù)。在這種情況下,我們的思路是這樣的:好吧,也許候選人完全誤解了所問的問題,但在他們理解的背景下,解決方案實(shí)際上是正確的。
這一切都導(dǎo)致tomaking一定會對面試問題給出正確的答案。
iii。將解決方案分解為步驟
這也是很有幫助的一點(diǎn),它將使您更容易有一個(gè)明確的解決方案想法,并在以后編寫一個(gè)干凈的代碼。
在這種情況下,分解意味著寫下來。是的,寫下你的解決方案的所有關(guān)鍵步驟和功能??紤]是否應(yīng)該聯(lián)接表、有多少表以及將使用哪些聯(lián)接。您應(yīng)該編寫子查詢還是CTE?寫下你的選擇??紤]必須使用哪些聚合函數(shù),是否必須轉(zhuǎn)換數(shù)據(jù)類型,是否應(yīng)該以特定的方式對數(shù)據(jù)進(jìn)行排序,是否應(yīng)該對其進(jìn)行篩選和分組,等等。
所有這些都是不同的步驟,所以把它們寫下來,以及在每一步中使用的主要關(guān)鍵字。
iv。開始編碼
在某種程度上,這是一個(gè)緊急點(diǎn)。如果您確實(shí)考慮了解決方案的方法,但您根本看不到完整的解決方案,那么您應(yīng)該簡單地開始編寫代碼。
這背后的想法是,即使您給出了一個(gè)不完整的解決方案,它肯定比不編寫一行代碼更有價(jià)值。此外,有些問題可能真的很難,即使是最有經(jīng)驗(yàn)的人也很難立即看到整個(gè)解決方案。開始編寫代碼,你有機(jī)會在這個(gè)過程中想出一個(gè)主意。如果沒有,再說一遍,你至少有東西可以展示。
你應(yīng)該記住的另一個(gè)原因是:有些問題甚至不打算被回答。其中有些是簡單的(而且是故意的?。┨y了,在面試的時(shí)間里解決不了。沒有人能完全解決問題。局部解決方案是任何人都能得到的最好方案。因此,你會被標(biāo)記出與其他不完全解相比,你走了多遠(yuǎn)。
解決方案的方法-示例
既然你知道了你應(yīng)該如何思考你的解決方案,讓我們用一個(gè)面試問題來演示它在實(shí)踐中是如何工作的。我們將使用Amazon編碼面試問題:
“查找每個(gè)客戶訂單的總成本。輸出客戶的id、名字和訂單總成本。按客戶名字字母順序排列的訂單記錄?!?/em>
在這個(gè)問題中,我們必須使用來自兩個(gè)表的數(shù)據(jù):表customers和表orders。我們可以編寫一個(gè)帶有子查詢的代碼來克服這個(gè)問題。但是,您可能知道,如果查詢和子查詢使用來自多個(gè)表的數(shù)據(jù),那么也可以使用聯(lián)接編寫解決方案。記住了編寫盡可能少的代碼行的建議,最好使用join。
這個(gè)解決方案的假設(shè)是什么?一種假設(shè)是,可能有客戶沒有訂單。這意味著表customers中的客戶可能不會出現(xiàn)在表Orders中。第二個(gè)假設(shè)是,我們不會顯示零訂單的客戶,因?yàn)閱栴}沒有明確地說。
現(xiàn)在,這已經(jīng)導(dǎo)致我們解決方案崩潰。我們必須輸出兩個(gè)已經(jīng)存在的列,所以我們一定要使用SELECT。我們需要找到每個(gè)客戶訂單的總數(shù)。我們必須使用sum()聚合函數(shù)對其求和。好的,桌子必須連接起來。我們將使用JOIN關(guān)鍵字來實(shí)現(xiàn)這一點(diǎn)。為什么不讓其他人加入呢?因?yàn)槲覀兊募僭O(shè)是,我們只想要至少有一個(gè)訂單的客戶。使用JOIN將給我們提供這樣的結(jié)果:它將連接兩個(gè)表,并且只查找兩個(gè)表中的值(客戶)。接下來呢?我已經(jīng)使用了聚合函數(shù),所以我必須使用GROUP by。結(jié)果必須按字母順序排列,所以我將使用ORDER BY和ASC。
由此產(chǎn)生的解決方案分解可能如下所示:
在您的情況下,這并不是緊急情況,因?yàn)槟斫饬怂袃?nèi)容,所以您可以進(jìn)入下一個(gè)檢查列表部分,或者您也可以在這里找到最多的commonSQL JOIN面試問題。
在評估了問題并為代碼制定了策略之后,是時(shí)候開始編寫它了。
i。堅(jiān)持所選方言
如果您參加SQL編碼面試,這一點(diǎn)尤其重要。正如您已經(jīng)知道的,有一個(gè)ANSI/ISO SQL標(biāo)準(zhǔn),并且有許多SQL方言。實(shí)際上,每個(gè)RDBMS都使用自己的SQL方言。當(dāng)然,你不可能都知道。你面試的公司可能使用的是其中一種方言。
如果面試官不在乎你使用哪種方言,那就選擇你最喜歡的一種。如果你不是很擅長用SQL方言編碼,不要試圖通過選擇他們使用的SQL方言來吸引面試官。最好選擇你最熟悉的方言來解決問題,而不是使用其他一些你不太確定的方言。如果你選擇后一種,你可能會比必要的更緊張。此外,不熟悉特定的SQL方言可能會使您搞砸解決方案。
一旦選擇了SQL方言,請堅(jiān)持使用。例如,如果您選擇用PostgreSQL編寫,不要將其與T-SQL混在一起。
ii。逐行進(jìn)行
有一個(gè)明確的解決方案分解將幫助您檢查這一點(diǎn)幾乎沒有注意到。由于您已經(jīng)概述了代碼的功能和部分,您只需要保持冷靜,按照解決方案大綱系統(tǒng)地編寫代碼。代碼只不過是你思想的編程語言版本。如果你的想法和你的解決方案大綱是清晰的,你的代碼也將是清晰的。
如果你開始從一行跳到另一行,你會讓自己和面試官感到困惑。這可能會導(dǎo)致不能編寫正確的代碼。
iii。邊編碼邊說話
當(dāng)您一行一行地編寫代碼時(shí),您還應(yīng)該談?wù)撃谧鍪裁础_@很重要,因?yàn)楫?dāng)大聲說出你在做什么時(shí),你更容易看出你是否做錯(cuò)了什么。一切在你的腦海里聽起來都很棒。但是當(dāng)你大聲說出來的時(shí)候,那些不太好的想法真的很突出!這使您有機(jī)會在執(zhí)行過程中更正代碼。否則,您可以完成代碼,甚至沒有意識到您做錯(cuò)了什么。
為什么在你寫的時(shí)候解釋每一行都很重要,原因之一是它再次邀請面試官參與你的解決方案。這讓他們有可能理解你在做什么,并給你一些提示。如果你只是寫了一個(gè)代碼,并對自己在做什么保持沉默,面試官也可能會停下來,只是等你完成代碼,讓你知道你做得如何。
iv。使其具有可讀性
簡單地從美學(xué)的角度來看,擁有一個(gè)結(jié)構(gòu)良好的代碼是一種樂趣。不僅如此,它還使您和面試官更容易閱讀您的代碼。
使您的代碼具有可讀性的主要因素在上面的一個(gè)要點(diǎn)中提到:盡可能簡單地編寫代碼。然而,有些解決方案不能簡單。如果您不努力使其具有可讀性,那么即使是幾行代碼讀起來也可能是一場噩夢。
要記住的一個(gè)技巧是使用空格、制表符和Enter。并且經(jīng)常使用它!這些鍵可以將代碼分成幾個(gè)部分,從而更容易理解代碼的功能。把它想象成你說的或?qū)懙娜魏螙|西??崭瘛⒅票矸蚭nter將使代碼具有逗號、句子和段落。
如果可能,請為表使用別名。但試著讓它們變得不言自明。避免使用單個(gè)字母的別名,但也不要使別名過于冗長和描述性。變量名也是如此。
雖然SQL不區(qū)分大小寫,但最好用大寫來編寫SQL關(guān)鍵字。這也會使它們在代碼中突出,特別是如果所有列和表名都是小寫的。
查看我們的文章“編寫SQL查詢的最佳實(shí)踐:如何構(gòu)造您的代碼”,它關(guān)注如何改進(jìn)SQL查詢,特別是在性能和可讀性方面。
V。與選定的約定保持一致
沒有規(guī)則讓你寫大小寫;沒有規(guī)定的命名慣例,所以它取決于你和你喜歡它。但無論你做什么,都要與之保持一致。
如果你想用小寫來寫所有的新列名,并用下劃線分隔單詞,請這樣做并保持這種方式。將列命名為salary_per_employee看起來相當(dāng)不錯(cuò)。但是盡量避免將一個(gè)列命名為salary_per_employee,另一個(gè)列命名為SalaryPerDepartment,第三個(gè)列命名為“total salary”,第四個(gè)列命名為max_salaryperdeparment。當(dāng)你試圖閱讀代碼時(shí),你會傷害自己,尤其是最后一個(gè)代碼。
在編寫表名、使用別名等時(shí)也是如此。保持一致性也會增加代碼的可讀性。
談到一致性,我們將向您展示此核對表部分在實(shí)踐中是如何工作的。
編寫代碼示例
以下是臉書的一個(gè)編碼問題:
“當(dāng)用戶試圖2FA(2因子身份驗(yàn)證)進(jìn)入平臺登錄時(shí),臉書會發(fā)送短信。為了成功2FA,他們必須確認(rèn)他們收到了SMS短信。確認(rèn)文本僅在發(fā)送日期有效。不幸的是,數(shù)據(jù)庫中存在一個(gè)ETL問題,其中朋友請求和無效的確認(rèn)記錄被插入到日志中,這些日志存儲在'FB_SMS_SENTS'表中。這些消息類型不應(yīng)在表中。幸運(yùn)的是,'fb_confirmers'表包含有效的確認(rèn)記錄,因此您可以使用該表來識別用戶確認(rèn)的SMS文本消息。
計(jì)算2020年8月4日確認(rèn)短信短信的百分比?!?
如果您編寫這樣的代碼,它將涵蓋我們在本檢查列表一節(jié)中提到的所有內(nèi)容:
SELECT cust_id, SUM(total_order_cost) AS revenue FROM orders WHERE EXTRACT('MONTH' FROM order_date :: TIMESTAMP) = 3 AND EXTRACT('YEAR' FROM order_date :: TIMESTAMP) = 2019 GROUP BY cust_id ORDER BY revenue DESC
讓我們假設(shè)Facebook使用SQL Server,但它讓您自己決定用哪種SQL方言編寫代碼。您不熟悉T-SQL,因此決定使用PostgreSQL編寫。
例如,EXTRACT()和雙冒號(::)是PostgreSQL的典型函數(shù)。第一個(gè)從datetime數(shù)據(jù)類型中提取日期的部分。它不存在于T-SQL中!所以如果你對面試官說你是用T-SQL寫的,然后使用這個(gè)函數(shù),你就犯了一個(gè)錯(cuò)誤。在T-SQL中,應(yīng)該使用DATEPART()函數(shù)。您應(yīng)該知道PostgreSQL中的這個(gè)函數(shù)稱為DATE_PART()。一個(gè)下劃線可能意味著代碼工作和不工作之間的差異。
類似地,PostgreSQL中的雙冒號(::)用于數(shù)據(jù)類型轉(zhuǎn)換。在T-SQL中,它不起作用;您必須使用CAST()或CONVERT()。
對于這段代碼有一個(gè)解決方案分解將使您很容易一行一行地編寫它。其實(shí)很容易。首先,您必須從表中選擇一些數(shù)據(jù),對其進(jìn)行篩選、分組,最后對其進(jìn)行排序。不要先編寫WHERE子句,然后轉(zhuǎn)到SELECT語句,然后轉(zhuǎn)到數(shù)據(jù)類型轉(zhuǎn)換或任何其他處理代碼的奇怪方式。
在編寫代碼時(shí),可以像這樣與面試官交談:我使用SUM()函數(shù)選擇cust_id列來計(jì)算表訂單的收入。然后,我使用WHERE子句根據(jù)ORDER_DATE列中的月份和年份篩選數(shù)據(jù)。之后,我在客戶級別上對數(shù)據(jù)進(jìn)行分組,并按降序?qū)Y(jié)果進(jìn)行排序。
您可以看到這段代碼有縮進(jìn),代碼的每個(gè)關(guān)鍵部分都有一個(gè)新行,并且命名約定是一致的。你想看看如果我們不遵循這個(gè)代碼會是什么樣子嗎?在這里:
SELECT cust_id,SUM(total_order_cost) AS REVENUE FROM ORDERS WHERE EXTRACT('MONTH' FROM order_date :: TIMESTAMP) = 3 AND EXTRACT('YEAR' FROM order_date :: TIMESTAMP) = 2019 GROUP BY cust_id order BY Revenue DESC
4.檢查代碼
編寫完代碼后,是時(shí)候在它成為最終答案之前對它進(jìn)行審查了。如果到目前為止您已經(jīng)遵循了清單上的所有項(xiàng)目,那么您將很容易檢查它。
在某種程度上,檢查代碼就是對照清單上的一些要點(diǎn)檢查代碼:
i。檢查您還剩多少時(shí)間
核對表這一部分的所有其他要點(diǎn)都依賴于這一點(diǎn)。如果你沒有時(shí)間了,那么你什么都做不了。你做了你所做的,你的代碼就是你得到的答案,不管你喜歡與否。
時(shí)間管理很重要,所以您應(yīng)該有意識地為檢查代碼留出一些時(shí)間。理想情況下,您將有時(shí)間執(zhí)行以下三個(gè)檢查。
ii。對照所需的輸出檢查代碼
您應(yīng)該回到您的問題,看看您的代碼是否真的返回所需的內(nèi)容。你是不是忘了包括一些必需的列?你真的按要求訂購了結(jié)果嗎?這些和其他類似的問題是你應(yīng)該問自己的。
如果你有時(shí)間,改正你所犯的錯(cuò)誤。如果沒有時(shí)間,保持代碼原樣,但寫下你做錯(cuò)了什么。
iii。根據(jù)聲明的假設(shè)檢查代碼
您基于一些假設(shè)編寫了代碼?;氐侥愕募僭O(shè)列表,檢查你是否遵循了它們。
如果你這么做就太完美了。但是在編寫更復(fù)雜的代碼時(shí),您可能會放棄一些假設(shè)或引入新的假設(shè)。也寫下來。如果您沒有遵循所有的假設(shè),但您認(rèn)為您應(yīng)該遵循,并且您有時(shí)間更改代碼,那么就這樣做。如果沒有,就保持原樣。
iv。檢查代碼可讀性
在這里你應(yīng)該檢查一下你是否理解你剛剛寫的東西?;氐侥拇a,再次檢查每一行的語法和邏輯。在逐行執(zhí)行時(shí),評估代碼可讀性是否可以提高。您在命名約定上是否一致?你的別名清楚嗎?有什么歧義嗎?代碼是否以邏輯的方式構(gòu)造并分成邏輯的部分?
同樣,如果有時(shí)間,提高代碼的可讀性。如果沒有時(shí)間,試著寫下來,或者簡單地記住你本可以做得更好的事情。
V。引導(dǎo)面試官完成解決方案
如果你做了上面所有的步驟,這一個(gè)應(yīng)該會很自然地對你來說。最重要的是,當(dāng)你解釋你的代碼時(shí),你是誠實(shí)的。
無論您在檢查代碼時(shí)發(fā)現(xiàn)了什么錯(cuò)誤,都要顯式地聲明它們。不要指望你的面試官不會注意到他們。別想把他們藏起來。承認(rèn)你的錯(cuò)誤,并表明你知道自己做錯(cuò)了什么。每個(gè)人都會犯錯(cuò),但不是每個(gè)人都能意識到自己犯了錯(cuò)并承認(rèn)錯(cuò)誤。它表明即使你犯了錯(cuò)誤,你也知道自己在做什么。說到錯(cuò)誤,以下是人們在數(shù)據(jù)科學(xué)采訪中最常見的錯(cuò)誤。
如果您在輸出中包含了一個(gè)不必要的列,請這樣說,并繼續(xù)解釋您的輸出。你偏離了你最初的假設(shè)還是加入了新的假設(shè)?這么說并解釋原因。如果你做錯(cuò)了,說這不是故意的,但你看到你的解決方案應(yīng)該包括一些額外的假設(shè)。說明它們應(yīng)該是什么,以便您的代碼工作??勺x性也是如此:如果您認(rèn)為可以使代碼更好,請解釋如何使代碼更好。
通過完成所有這些,您不僅可以顯示您的編碼能力,還可以顯示您的思考速度,您的責(zé)任感和誠實(shí)性。這些都是所有公司都非常重視的特點(diǎn)。
vi。優(yōu)化代碼
編碼面試中的最后一個(gè)問題通常是要求您優(yōu)化代碼的問題。這樣,面試官將測試你的SQL理論知識。例如,如果您知道聯(lián)接可能在計(jì)算上耗時(shí)?您將被要求找出是否有消除聯(lián)接或子查詢的方法。例如,如果試圖找到最大值,通常可以使用某個(gè)函數(shù)(如排序函數(shù))刪除WHERE子句中的子查詢。
或者如果您知道對某些數(shù)據(jù)類型執(zhí)行操作的速度有多快。例如,字符串比較比整數(shù)比較慢,那么也許有一種方法可以在字符串?dāng)?shù)據(jù)上做到這一點(diǎn)?
所有這些都總結(jié)到:如果你能很好地構(gòu)建你的方法,編寫代碼幾乎應(yīng)該是一個(gè)技術(shù)性的問題。重點(diǎn)是更多地思考,而不是編碼。編寫代碼應(yīng)該以非常有條理的方式進(jìn)行。
你應(yīng)該仔細(xì)考慮問題、你面前的數(shù)據(jù)、可能的解決方案、你的假設(shè)和你需要的功能。只有在那之后,你才應(yīng)該開始編碼。一旦你開始編寫代碼,你應(yīng)該能夠讓面試官了解你正在做的事情,并讓他們知道你所做的每一步。像在實(shí)際生活中一樣,在開始在生產(chǎn)中使用代碼之前,您必須檢查和優(yōu)化代碼。這次采訪是你的制作;管理好您的時(shí)間,以便能夠?qū)忛喣慕鉀Q方案。
這些是你應(yīng)該做的事情。在我們的帖子中還有更多的準(zhǔn)備技巧:準(zhǔn)備數(shù)據(jù)科學(xué)面試的5個(gè)技巧。
這一切都不容易。它需要經(jīng)驗(yàn)和實(shí)踐;沒人能偽造這個(gè)。但不管你的經(jīng)歷如何,遵循這份清單肯定會給你的思維和面試表現(xiàn)增加一個(gè)堅(jiān)實(shí)的結(jié)構(gòu)。只能讓你表現(xiàn)得更好。
數(shù)據(jù)分析咨詢請掃描二維碼
若不方便掃碼,搜微信號:CDAshujufenxi
LSTM 模型輸入長度選擇技巧:提升序列建模效能的關(guān)鍵? 在循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN)家族中,長短期記憶網(wǎng)絡(luò)(LSTM)憑借其解決長序列 ...
2025-07-11CDA 數(shù)據(jù)分析師報(bào)考條件詳解與準(zhǔn)備指南? ? 在數(shù)據(jù)驅(qū)動決策的時(shí)代浪潮下,CDA 數(shù)據(jù)分析師認(rèn)證愈發(fā)受到矚目,成為眾多有志投身數(shù) ...
2025-07-11數(shù)據(jù)透視表中兩列相乘合計(jì)的實(shí)用指南? 在數(shù)據(jù)分析的日常工作中,數(shù)據(jù)透視表憑借其強(qiáng)大的數(shù)據(jù)匯總和分析功能,成為了 Excel 用戶 ...
2025-07-11尊敬的考生: 您好! 我們誠摯通知您,CDA Level I和 Level II考試大綱將于 2025年7月25日 實(shí)施重大更新。 此次更新旨在確保認(rèn) ...
2025-07-10BI 大數(shù)據(jù)分析師:連接數(shù)據(jù)與業(yè)務(wù)的價(jià)值轉(zhuǎn)化者? ? 在大數(shù)據(jù)與商業(yè)智能(Business Intelligence,簡稱 BI)深度融合的時(shí)代,BI ...
2025-07-10SQL 在預(yù)測分析中的應(yīng)用:從數(shù)據(jù)查詢到趨勢預(yù)判? ? 在數(shù)據(jù)驅(qū)動決策的時(shí)代,預(yù)測分析作為挖掘數(shù)據(jù)潛在價(jià)值的核心手段,正被廣泛 ...
2025-07-10數(shù)據(jù)查詢結(jié)束后:分析師的收尾工作與價(jià)值深化? ? 在數(shù)據(jù)分析的全流程中,“query end”(查詢結(jié)束)并非工作的終點(diǎn),而是將數(shù) ...
2025-07-10CDA 數(shù)據(jù)分析師考試:從報(bào)考到取證的全攻略? 在數(shù)字經(jīng)濟(jì)蓬勃發(fā)展的今天,數(shù)據(jù)分析師已成為各行業(yè)爭搶的核心人才,而 CDA(Certi ...
2025-07-09【CDA干貨】單樣本趨勢性檢驗(yàn):捕捉數(shù)據(jù)背后的時(shí)間軌跡? 在數(shù)據(jù)分析的版圖中,單樣本趨勢性檢驗(yàn)如同一位耐心的偵探,專注于從單 ...
2025-07-09year_month數(shù)據(jù)類型:時(shí)間維度的精準(zhǔn)切片? ? 在數(shù)據(jù)的世界里,時(shí)間是最不可或缺的維度之一,而year_month數(shù)據(jù)類型就像一把精準(zhǔn) ...
2025-07-09CDA 備考干貨:Python 在數(shù)據(jù)分析中的核心應(yīng)用與實(shí)戰(zhàn)技巧? ? 在 CDA 數(shù)據(jù)分析師認(rèn)證考試中,Python 作為數(shù)據(jù)處理與分析的核心 ...
2025-07-08SPSS 中的 Mann-Kendall 檢驗(yàn):數(shù)據(jù)趨勢與突變分析的有力工具? ? ? 在數(shù)據(jù)分析的廣袤領(lǐng)域中,準(zhǔn)確捕捉數(shù)據(jù)的趨勢變化以及識別 ...
2025-07-08備戰(zhàn) CDA 數(shù)據(jù)分析師考試:需要多久?如何規(guī)劃? CDA(Certified Data Analyst)數(shù)據(jù)分析師認(rèn)證作為國內(nèi)權(quán)威的數(shù)據(jù)分析能力認(rèn)證 ...
2025-07-08LSTM 輸出不確定的成因、影響與應(yīng)對策略? 長短期記憶網(wǎng)絡(luò)(LSTM)作為循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN)的一種變體,憑借獨(dú)特的門控機(jī)制,在 ...
2025-07-07統(tǒng)計(jì)學(xué)方法在市場調(diào)研數(shù)據(jù)中的深度應(yīng)用? 市場調(diào)研是企業(yè)洞察市場動態(tài)、了解消費(fèi)者需求的重要途徑,而統(tǒng)計(jì)學(xué)方法則是市場調(diào)研數(shù) ...
2025-07-07CDA數(shù)據(jù)分析師證書考試全攻略? 在數(shù)字化浪潮席卷全球的當(dāng)下,數(shù)據(jù)已成為企業(yè)決策、行業(yè)發(fā)展的核心驅(qū)動力,數(shù)據(jù)分析師也因此成為 ...
2025-07-07剖析 CDA 數(shù)據(jù)分析師考試題型:解鎖高效備考與答題策略? CDA(Certified Data Analyst)數(shù)據(jù)分析師考試作為衡量數(shù)據(jù)專業(yè)能力的 ...
2025-07-04SQL Server 字符串截取轉(zhuǎn)日期:解鎖數(shù)據(jù)處理的關(guān)鍵技能? 在數(shù)據(jù)處理與分析工作中,數(shù)據(jù)格式的規(guī)范性是保證后續(xù)分析準(zhǔn)確性的基礎(chǔ) ...
2025-07-04CDA 數(shù)據(jù)分析師視角:從數(shù)據(jù)迷霧中探尋商業(yè)真相? 在數(shù)字化浪潮席卷全球的今天,數(shù)據(jù)已成為企業(yè)決策的核心驅(qū)動力,CDA(Certifie ...
2025-07-04CDA 數(shù)據(jù)分析師:開啟數(shù)據(jù)職業(yè)發(fā)展新征程? ? 在數(shù)據(jù)成為核心生產(chǎn)要素的今天,數(shù)據(jù)分析師的職業(yè)價(jià)值愈發(fā)凸顯。CDA(Certified D ...
2025-07-03