透過刷題變強的方法

更新於 發佈於 閱讀時間約 5 分鐘

上週發布的刷題無法變強的原因短短幾天就成為了我在方格子上最熱門的文章,既然我們討論到了刷題跟面試的關聯性,不如再深入討論刷題這個行為本身,應該要注重怎樣的關鍵才能夠變強。

什麼是電腦科學

我們身為軟體工程師,平常最常接觸的就是電腦,要讓電腦有效地發揮作用演算法、資料結構這些在學習電腦科學過程中會學到的知識,就是重要的技能。

這也是軟體工程師的素養點出的問題,成為一名軟體工程師已經變得非常容易入門,我自己也是把它當作興趣一樣在看待。然而這樣的狀態就很容易讓我們把「電腦科學」的重要性忘記。

即使知道電腦科學的重要,大多數人也只知道要學「演算法」「資料結構」卻不清楚為何而學,在我的經驗中成大教授 jserv 老師的線上公開課程經常會從硬體到軟體的關聯解釋,內容通常需要有點底子,有興趣可以挑戰看看。

善用科學思考

刷題的時候,我們應該思考的不是「如何回答」而是用科學的方式,根據情境、題目要求進行分析,最後再找出適合的演算法去解決這些問題,同時也可以反思自己是否缺少對某些知識的理解。

我在跟同事解釋演算法的時候經常會用 Ruby 的 Array#bsearch 方法來舉例,這是一個 Ruby 比較少人知道的方法,可以使用 Binary Search(二分搜尋法)演算法來查詢陣列內的資料。

如果對二分搜尋法有概念,會知道在「已排序」的狀況下速度會比正常狀況好很多。雖然會使用到的情況不常見,然而如果你對演算法跟 Ruby 語言都有一定的了解,很可能就可以在某個「效能瓶頸」透過替換 Array#find 為 Array#bsearch 而獲得不錯的效能改善。

下面附上簡單實驗的結果

# frozen_string_literal: true

require 'benchmark'

Point = Struct.new(:x, :y)
SAMPLE_DATA = [Point.new(1, 1), Point.new(2, 1), Point.new(2, 2), Point.new(1, 3)].freeze

Benchmark.bmbm do |x|
x.report(:bsearch) { 1000.times { SAMPLE_DATA.bsearch { |p| p.y == 2 } } }
x.report(:find) { 1000.times { SAMPLE_DATA.find { |p| p.y == 2 } } }
end


[elct9620] Desktop % ruby bsearch.rb
Rehearsal -------------------------------------------
bsearch 0.000280 0.000009 0.000289 ( 0.000305)
find 0.000664 0.000018 0.000682 ( 0.000682)
---------------------------------- total: 0.000971sec

user system total real
bsearch 0.000191 0.000002 0.000193 ( 0.000190)
find 0.000481 0.000002 0.000483 ( 0.000482)

可以看到 Array#bsearch 在「已排序」的狀況,表現會比 Array#find 好上不少。

能實際應用才算學會

從我的個人觀點來看,與其看到各種題目都能「馬上解出來」不如思考在真實專案的開發中,我們應該如何實際應用才是更有意義的。

如果沒辦法在工作中實際解決問題,那麼你只是一個「程式競賽選手」而不是一個優秀的專業人員,從刷題的成績、學歷這些角度來看大多是一間公司在無法判斷面試對象實力的「簡單參考」基準,如果你是一名在業界有一定實力跟知名度、同事跟主管都很願意幫你做 Reference Check(查核)的狀況下,真的需要刷題跟學歷嗎?

以我個人的求職經驗,我會提到「學歷」是因為我的興趣在多媒體上,所以我可以跟雇主分享我在程式技術跟遊戲上的看法跟觀點。至於這幾年面試人的經驗,看學歷也只是因為「名校學生在學習比較有技巧」這點,讀書是一種「學習技巧」這類人要教的話通常比較好教(個性是另外一回事)然而你的作品已經呈現了「我有實力」那麼會不會刷題、學歷好不好根本就不是參考的基準。


封面圖片使用 UnsplashGreen Chameleon 的作品,有想聽的主題可以透過匿名問卷告訴我,想了解專業的技術主題可以到弦而時習之找找靈感。


留言
avatar-img
留言分享你的想法!
avatar-img
蒼時弦也的沙龍
55會員
40內容數
軟體工程師逐漸變成一個熱門的職業,當我們進入這個職業之後應該要具備怎樣的技能才會在工作上更加順利呢?這系列的專欄會分享日常工作中的經驗以及一些案例分析,讓我們一起努力成為一位更優秀的軟體工程師吧!
蒼時弦也的沙龍的其他內容
2022/04/11
大多數時候,我們在討論壓力測試通常會先想到 ab 這個工具,然而這個工具會一次性的發送請求,有時候不一定符合現實的使用情況,同時也會受限於運行測試機器的限制(例如:Thread 上限)因此可能會得到不太精確的結果,在測試一定請求等級的瞬間壓力是有用的。
Thumbnail
2022/04/11
大多數時候,我們在討論壓力測試通常會先想到 ab 這個工具,然而這個工具會一次性的發送請求,有時候不一定符合現實的使用情況,同時也會受限於運行測試機器的限制(例如:Thread 上限)因此可能會得到不太精確的結果,在測試一定請求等級的瞬間壓力是有用的。
Thumbnail
2022/04/04
在我們要進行壓力測試的時候,必定會需要有「目標」而這個目標大多就是商業考量,也就是我們希望提供多大規模的服務。
Thumbnail
2022/04/04
在我們要進行壓力測試的時候,必定會需要有「目標」而這個目標大多就是商業考量,也就是我們希望提供多大規模的服務。
Thumbnail
2022/03/28
在一個功能完成後,比較嚴謹的方式會進行壓力測試來驗證是否能夠符合業務上的需求,在測試的時候是否能夠準確的測試就變得相當重要。
Thumbnail
2022/03/28
在一個功能完成後,比較嚴謹的方式會進行壓力測試來驗證是否能夠符合業務上的需求,在測試的時候是否能夠準確的測試就變得相當重要。
Thumbnail
看更多
你可能也想看
Thumbnail
孩子寫功課時瞇眼?小心近視!這款喜光全光譜TIONE⁺光健康智慧檯燈,獲眼科院長推薦,網路好評不斷!全光譜LED、180cm大照明範圍、5段亮度及色溫調整、350度萬向旋轉,讓孩子學習更舒適、保護眼睛!
Thumbnail
孩子寫功課時瞇眼?小心近視!這款喜光全光譜TIONE⁺光健康智慧檯燈,獲眼科院長推薦,網路好評不斷!全光譜LED、180cm大照明範圍、5段亮度及色溫調整、350度萬向旋轉,讓孩子學習更舒適、保護眼睛!
Thumbnail
創作者營運專員/經理(Operations Specialist/Manager)將負責對平台成長及收入至關重要的 Partnership 夥伴創作者開發及營運。你將發揮對知識與內容變現、影響力變現的精準判斷力,找到你心中的潛力新星或有聲量的中大型創作者加入 vocus。
Thumbnail
創作者營運專員/經理(Operations Specialist/Manager)將負責對平台成長及收入至關重要的 Partnership 夥伴創作者開發及營運。你將發揮對知識與內容變現、影響力變現的精準判斷力,找到你心中的潛力新星或有聲量的中大型創作者加入 vocus。
Thumbnail
LeetCode 是一個程式語言版的線上題庫平臺,提供題目描述、程式碼區塊、解題者分享的解法和疑問討論。藉由這篇文章分享我在 LeetCode 上的使用經驗和觀點,包括刷題的重要性、解題心態和練習目標。
Thumbnail
LeetCode 是一個程式語言版的線上題庫平臺,提供題目描述、程式碼區塊、解題者分享的解法和疑問討論。藉由這篇文章分享我在 LeetCode 上的使用經驗和觀點,包括刷題的重要性、解題心態和練習目標。
Thumbnail
1. 競賽題 或者 面試題 Medium Hard 以上題目,一開始在第一時間想不出解題思路,或者最佳解是很平常的事情。 通過官方解答、討論區的高手分享解題,進而學到新的解題思路,或者更泛用的演算法框架,就是最大的收穫。 2. 但是Easy分類的題目,通常就是該領域最基礎的題目,應該要
Thumbnail
1. 競賽題 或者 面試題 Medium Hard 以上題目,一開始在第一時間想不出解題思路,或者最佳解是很平常的事情。 通過官方解答、討論區的高手分享解題,進而學到新的解題思路,或者更泛用的演算法框架,就是最大的收穫。 2. 但是Easy分類的題目,通常就是該領域最基礎的題目,應該要
Thumbnail
題目會給我們一個排序好的陣列,還有一個目標值target 要求我們在陣列中尋找target所在的索引位置。 如果target 不存在,返回-1 題目要求必須在O( log n )對數時間內完成 。
Thumbnail
題目會給我們一個排序好的陣列,還有一個目標值target 要求我們在陣列中尋找target所在的索引位置。 如果target 不存在,返回-1 題目要求必須在O( log n )對數時間內完成 。
Thumbnail
LeetCode是一個學習演算法的網站,而非評斷技術能力的工具。本文將探討LeetCode對工程師的幫助、在面試中的地位、問題與限制,以及演算法是否是工程師必要的技能。此外,我們還提供有效學習演算法的建議。
Thumbnail
LeetCode是一個學習演算法的網站,而非評斷技術能力的工具。本文將探討LeetCode對工程師的幫助、在面試中的地位、問題與限制,以及演算法是否是工程師必要的技能。此外,我們還提供有效學習演算法的建議。
Thumbnail
假設有天你要在電話簿找一個K開頭的人,或是O開頭的人 你並不會從A開始找 一定是從最接近的開始找。 二分搜尋是一種演算法 下方是二分搜尋演算法的如何作用 STEP 1 圖一這是一組陣列,由小到大排列,其中我們在這陣列要找的數字是“13”所以我們必須把它存在 searchForNumber 這個變數裡
Thumbnail
假設有天你要在電話簿找一個K開頭的人,或是O開頭的人 你並不會從A開始找 一定是從最接近的開始找。 二分搜尋是一種演算法 下方是二分搜尋演算法的如何作用 STEP 1 圖一這是一組陣列,由小到大排列,其中我們在這陣列要找的數字是“13”所以我們必須把它存在 searchForNumber 這個變數裡
Thumbnail
Hi. I'm coding dog. Let's solve today's coding interview problem. Q: 給定一個整數陣列,請在線性時間和常數空間中找到第一個遺失的正整數。換句話說,找到陣列中不存在的最小正整數。陣列也可以包含重複項和負數。 A: 為了找到給定陣列中不
Thumbnail
Hi. I'm coding dog. Let's solve today's coding interview problem. Q: 給定一個整數陣列,請在線性時間和常數空間中找到第一個遺失的正整數。換句話說,找到陣列中不存在的最小正整數。陣列也可以包含重複項和負數。 A: 為了找到給定陣列中不
Thumbnail
今天接續上次的主題,如何改進做題時講不到解法的進步方式。解法問題是大多數同學遇到的困難,而且學測範圍很大,筆者提出兩個解決方案:歸納做法、一題多解。
Thumbnail
今天接續上次的主題,如何改進做題時講不到解法的進步方式。解法問題是大多數同學遇到的困難,而且學測範圍很大,筆者提出兩個解決方案:歸納做法、一題多解。
Thumbnail
這只是一篇測試功能的文章
Thumbnail
這只是一篇測試功能的文章
Thumbnail
刷題的時候,我們應該思考的不是「如何回答」而是用科學的方式,根據情境、題目要求進行分析,最後再找出適合的演算法去解決這些問題,同時也可以反思自己是否缺少對某些知識的理解。
Thumbnail
刷題的時候,我們應該思考的不是「如何回答」而是用科學的方式,根據情境、題目要求進行分析,最後再找出適合的演算法去解決這些問題,同時也可以反思自己是否缺少對某些知識的理解。
Thumbnail
在基礎教學完成後,接下來我們就要來學習檔案處理,不論我們今天要分析哪些數據,都需要將數據存取下來並且利用python去讀取出來才能分析,所以這步驟是我們爬蟲的第一步,必須要好好學習唷!!
Thumbnail
在基礎教學完成後,接下來我們就要來學習檔案處理,不論我們今天要分析哪些數據,都需要將數據存取下來並且利用python去讀取出來才能分析,所以這步驟是我們爬蟲的第一步,必須要好好學習唷!!
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News