folder_open

面試雜記

arrow_right
article

面試心得–HP Taiwan 台灣惠普科技股份有限公司

面試心得–HP Taiwan 台灣惠普科技股份有限公司

2023/03/06~【System Developer 約聘】錄取

職缺介紹

#

由智誠科技的 Reese 直接寄信提供:

Job Description

#

Build an automated test platform.

Skill Request

#

  • Experience creating web technology and have solid understanding of frontend and backend development
  • Possess a solid understanding of CI/CD and SDLC/TDLC concepts: code review best practices, code coverage analysis, continuous test, and delivery.
  • Strong knowledge of networking concepts
  • Excellent verbal and written communication skills
  • Proficient in at least one programming language (JavaScript, NodeJS, or TypeScript).
  • Proficient in automation technologies such as Ansible, YAML.
  • Skilled with git and branching processes

工作地點:台北南港惠普office(鄰近捷運南港展覽館站)

上班時間:上下班為彈性不打卡

通話之後額外取得下列資訊:

  • 為約聘性質職缺,一年一約,勞健保及健檢由智誠負責,
  • 軟韌體自動化測試部門,使用 JS 建置自動化測試平台
  • 天花板約 1.5M / 13.5mth

第一輪線上面試(2 小時,面試官:Jeremy Hong、Theo)

#

開頭因面試官個人因素耽誤 15 分鐘,Team Lead Jeremy 負責 Live Coding,Theo 負責開放式提問。

Live Coding

#

  1. LeetCode 977. Squares of a Sorted Arrayopen_in_new
  2. LeetCode 283. Move Zeroesopen_in_new

Follow Up:

  • 求演算法的時間複雜度
  • 你知道一般 Library 裡的排序是用什麼演算法嗎?
  • Quick Sort 的時間複雜度

開放式問答

#

  • 過去的專案是怎麼使用 Microservice 及 DDD 的?
  • 你對於新技術接受程度?
  • 如果你身為 Team Member,與 Team Lead 意見不合會如何處理?反之又會如何?

會後交流

#

  • 目前的產品線有哪些?

    讓內部使用的 Testing Automation Framework

  • 各產品使用的技術棧?

    js, ts, mongodb, openapi, aws microservice, rabbitmq, react

  • 目前有遇過什麼樣的技術挑戰?

    1. 硬體相容性
    2. on-premise 設備的網路容錯性
  • 能否描述一下關於這個職位一天的概況?

    按照 Scrum 流程運作

錄取

#

HP 主管提供的天花板價為 1.6m/annum1.6m/annum,因遠低於我的期望,未繼續進行下去。

應徵結果及時程

#

  • 2023/03/06 人力派遣公司接洽
  • 2023/03/09 送出作業
  • 2023/03/13 通知有意願邀請面試
  • 2023/03/14 邀請第一輪線上面試
  • 2023/03/17 第一輪線上面試
  • 2023/03/27 口頭錄取

附錄:作業測驗參考解答

#

專案已開源於 Githubopen_in_new

附錄:測驗題目參考解答

#

Squares of a Sorted Array

#

解法一:從左右兩側使用 Two Pointer 掃描。

class Solution:
def sortedSquares(self, nums: List[int]) -> List[int]:
left, right = 0, len(nums) - 1
ans = []
while left <= right:
if abs(nums[left]) < abs(nums[right]):
ans.insert(0, nums[right] * nums[right])
right -= 1
else:
ans.insert(0, nums[left] * nums[left])
left += 1
return ans

解法二:從中間往兩側使用 Two Pointer 掃描。

class Solution:
def sortedSquares(self, nums: List[int]) -> List[int]:
non_negative_i = len(nums)
for i, n in enumerate(nums):
if n >= 0:
non_negative_i = i
break
left = non_negative_i - 1
right = non_negative_i
ans = []
while left >= 0:
n_num_square = nums[left] * nums[left]
left -= 1
while right < len(nums):
p_num = nums[right]
p_num_square = p_num * p_num
if p_num_square <= n_num_square:
ans.append(p_num_square)
right += 1
else:
break
ans.append(n_num_square)
ans.extend([n*n for n in nums[right:]])
return ans

Move Zeroes

#

解法一:Single Pointer。

掃描陣列中的數字,若遇到非零者就將該數字寫入到寫入指標所在位置,並且遞進寫入指標,完成掃描後,再讓寫入指標一路補零到結尾。

class Solution:
def moveZeroes(self, nums: List[int]) -> None:
n = len(nums)
write = 0
for num in nums:
if num != 0:
nums[write] = num
write += 1
while write < n:
nums[write] = 0
write += 1

解法二:Two Pointer,可以最小化操作次數。

使用第一個指標 持續追蹤最左側的 0 所在的位置,並使用另一個指標 掃描陣列,掃描過程遇到非零者就與最左側的 0 交換數字。需注意此做法成立的條件是必須保持 ,如此迭代的過程才能往答案逼近,否則像是 這樣的反例就會找不到答案。

class Solution:
def moveZeroes(self, nums: List[int]) -> None:
zero_index = 0
n = len(nums)
while zero_index < n and nums[zero_index] != 0:
zero_index += 1
for i in range(zero_index + 1, n):
num = nums[i]
if nums[i] != 0:
nums[zero_index], nums[i] = nums[i], nums[zero_index]
while zero_index < n and nums[zero_index] != 0:
zero_index += 1