永遠的菜鳥工程師

記錄


  • 首頁

  • 歸檔

Python - LeetCode使用到的好用Fun.

發表於 2018-07-22

1. List Init

1.var = [x for x in x]:快速定義List的使用方式,可以搭配if來使用
2.range(start:end):產生range的int
3.len() : 長度

1
2
checkMap = [[0 for y in range(nYCount)] for x in range(nXCount)]
nLength = len(checkMap)

基本LeetCode


2. Object Init

1
2
3
4
5
6
7
8
9
10
11
12
13
#1.list() : LIST         []
#2.set() : 獨立不重覆 {}
#3.dict() : 字典 {{}}
#4.tuple() : 不可改變 ()

listVar = list([5,3,3])
setVar = set([5,3,3])

print(listVar)
print(setVar)

#[5, 3, 3]
#{3, 5}

基本LeetCode 771 807 595 804 491 832 728


3. String

1.count : 計算內容物的次數

1
2
3
4
5
6
7
class Solution:
def judgeCircle(self, moves):
return moves.count('L') == moves.count('R') and moves.count('U') == moves.count('D')
"""
:type moves: str
:rtype: bool
"""

基本LeetCode 657


4. List[int]

1.index : 找到對應的index
2.max : 取出最大值

1
return (A.index(max(A)))

基本LeetCode 852


5. binary Tree

binary Tree的使用範例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
# Definition for a binary tree node.
# class TreeNode(object):
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None

class Solution(object):
def mergeTrees(self, t1, t2):
NewNode = TreeNode(0)
def nextLoop(tCurrent,tcopy):
if tcopy == None:
return
tCurrent.val += tcopy.val
print(tcopy.val)
if tcopy.left is not None:
if tCurrent.left == None:
tCurrent.left = TreeNode(0)
nextLoop(tCurrent.left,tcopy.left)
if tcopy.right is not None:
if tCurrent.right == None:
tCurrent.right = TreeNode(0)
nextLoop(tCurrent.right,tcopy.right)
nextLoop(NewNode,t1)
nextLoop(NewNode,t2)
if t1 == None and t2 == None:
NewNode = None
return NewNode
"""
:type t1: TreeNode
:type t2: TreeNode
:rtype: TreeNode
"""

基本LeetCode 617


Kotlin 近期最流行的Google Android開發

發表於 2018-07-22

Kotlin是一種在Java虛擬機上執行的靜態型別程式語言,它也可以被編譯成為JavaScript原始碼。它主要是由俄羅斯聖彼得堡的JetBrains開發團隊所發展出來的程式語言,其名稱來自於聖彼得堡附近的科特林島。[3]2012年1月,著名期刊《Dr. Dobb’s Journal》中Kotlin被認定為該月的最佳語言。[4]雖然與Java語法並不相容,但Kotlin被設計成可以和Java程式碼相互運作,並可以重複使用如Java集合框架等的現有Java類別庫。Hathibelagal寫道,「如果你正在為Android開發尋找一種替代程式語言,那麼應該試下Kotlin。它很容易在Android專案中替代Java或者同Java一起使用。」
在Google I/O 2017中,Google宣布在Android上為Kotlin提供最佳支援。

這兩篇都是很好學習Kotlin的文章,先記錄下來,有空再開始繼續碰。
目前就是Hello World的進度

推薦文章 :

Android Tutorial using Kotlin 第一堂(3)開始設計Android應用程式
Kotlin Tutorial(2)10分鐘認識Kotlin

思考Engineer

發表於 2018-07-22

通常大家都會問自己一個問題
工程師做到一定程度以後,應該走管理路線還是繼續技術路線?
一般台灣公司 技術職職涯 大概長這樣 :

工程師->資深工程師->主任工程師->沒了–>技術長->首席工程師->總工程師或某某總監

以台灣而言,主任工程師就是一般純技術職涯的頂點了
約主任工程師通常6~8年就可以做到 ( 32歲以前 )
而更上面的技術長等職位,不太可能有這種位置

因此部分的人轉走 主管路線
但主管是條不歸路,當上了主管在職涯的路上就是選擇了管理這條路

工程師->資深工程師->主任工程師->初階主管->副理
(轉主管有這麼容易嗎?是否定的,這大部分都看上面的老人是否走掉,老闆喜不喜歡你)

怎樣生主管

1.有一堆鳥是的時候 : 不穩定的公司會急需人才;越穩定的公司,也越難更換主管
2.發展速迅的時候 : (在中小企業或成長型的公司中,通常三年內當上部門主管)
3.跳槽

沒辦法以金錢考量,如果做一輩子工程師,薪水是上不去的
去看獵人的頭職缺也是這樣,工程師了不起開2M封頂,經理至少2M起跳
整個就不是同一個等級
堅持技術有沒有錯?沒錯,錯的是環境
但你要堅持賭環境會改善,還是離開鬼島,還是跟錯誤的環境妥協,就是個人選擇了

但現在的問題就是,台灣有時無法鑽研技術這塊
學習到的東西也很少,都要求迅速開發
必需 時常練習、並 出錯學習新的解決方法

關鍵的發現是,當你的技術程式設計能力可以在穩定狀態
( 譯註:也等於是沒有陡峭的成長狀態)
你的技術貢獻影響力則不需要。用你的才能決定要將力氣花在什麼地方以將你的影響力最大化
例如決定要寫什麼程式碼,建構什麼軟體,並解決其業務問題
這是沒有界限的。這個才能從其他人區隔出了最有價值和效能的工程師。
– By Edmond 如果你不想走管理路線,工程師職涯要如何成長?

如今我必須先問自己,想要從事哪方面的工作 ( SA SD RD PG PM DBA MIS QA FAE Sales )
我發現我還是喜歡RD的事情,那就要考慮從事哪方面
( 硬體、軟體、韌體、網頁、手機 … 決定使用的語言 )
這一點我還是很猶豫的,那當這些都決定後 確認工作內容/語言
就要面臨先拼個主任工程師、再考慮轉主管的問題
( 畢竟在台灣只做RD有點困難、錢又少、沒法從技術角度改變別人事情,你必須成為主管決定正確的方向。 )


工程師職等

職稱 工作項目 職業時間
助理工程師 新人 1年
工程師 獨立交代事項 2年
資深工程師 co-work、帶領助理工程師 2年
主任工程師 Project Leader 2年

工程師分類

分類 工作項目 補充
SA(SA: System Analyst) 系統分析師 系統分析、系統測試 偏分析整體
SD(System Designer)系統設計師 SA 所建構的是屬於偏向於領域的概念模型;而 SD 則是根據領域模型 (類別圖、循序圖以及 Database Schema) 偏程式多點
RD(”R”esearch and “D”evelopment engineer) 研發設計工程師,簡稱研發工程師 TBD
PG(Programming)程式設計師 產品線跟商品管得很雜,廣而難精 TBD
PM (Project Manager) 專案經理 專案管理部 TBD
FAE 負責客戶相關技術問題回覆、 產品應用;產品線跟商品管得很雜,廣而難精 TBD
DBA (Database Administrator)資料庫設計與管理人員 資料庫設計與管理人員 TBD
MIS (Management Information System)管理資訊系統,即網管人員 管理資訊系統,即網管人員 TBD

RD分類


半導體相關

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
RD:研發設計類的工程師
QA:品質管理工程師
SQE: Supplier Quality Engineer 供應商品管工程師
IE: Industrial Engineer 工業工程師
TE: Test Engineer 測試工程師
EE: Equipment Engineer 設備工程師
EE: Electronic Engineer 電子工程師
OP: Operator , 作業員
QA: quality assurance engineer , 品保工程師
QE: quality (control) engineer, 品管工程師
QS: quality system engineer , 品質系統工程師
SQE: supplier quality engineer , 供應商品管工程師
ME: manufacturing engineer , 機製工程師
PM: Project Manager , 專案經理
PE : Product Engineer , 產品工程師
PE:project engineer , 專案工程師
PE:procurement engineer , 採購工程師
PIE: Process Integration Engineer , 製程整合工程
PC: Production Control , 生產控管
TF: Thin Film , 薄膜製程
ET: Etch , 蝕刻製程
LIT: Litho or Photo , 黃光製程
DF: Diffusion , 擴散製程
IE: industrial engineer , 工業工程師
MIS:資訊管理人員
IE: industrial engineer , 工業工程師
IE: test engineer , 測試工程師
ID: Industrial Designer 工業設計師
CIM: Computer Integrated Manufacturing CIM工程師

常見的職務縮寫 SA SD RD PG PM DBA MIS QA Sales

SA(SA: System Analyst) 系統分析師:

在軟體開發團隊中,屬於中高階的基層管理者與領導者。
他們除了須具備優秀的文字、語言溝通能力之外,還要有良好的分析、組織、邏輯思考能力。
當然也需要有良好的人際關係,以及深厚的技術背景與知識。

系統分析師的工作內容,依階段劃分大致可分為下述幾個階段:
系統分析:分析現行系統:確定系統的功能需求;確定系統的資源:保護及績效需求,
發展系統架構確定使用單位將面臨的環境及組織變遷。
初步設計:劃分作業子系統.擬定子系統的輸入、輸出、介面及作業處理流程:
子系統人工作業規格:邏輯質料庫設計:開列系統軟、硬體規格。
細步設計:設計實體資料庫:設計人工作業程序;設計文件表格及輸出、入格式;
擬訂程式規格及細步流程:確定公用常式與共用程式。
系統測試:根據分析階段所訂定的各種功能.加以測試,錯誤資料收集與分析。
資料轉換:整理及彙編文件.指派工作人員及進行訓練.進行資料轉換。
系統維護:更正系統內潛伏的錯誤:因適應環境的改變而做適度的調整

SD(System Designer)系統設計師:

系統設計師與 SA 所不同的是,
SA 所建構的是屬於偏向於領域的概念模型;而 SD 則是根據領域模型,
再配合實體的平台,考量其效能、穩定、分散與安全性等,所建構而得的軟體規格模型。
SD 的主要產出,仍包括了類別圖、循序圖以及 Database Schema,
而這些產出,都會與實體的平台相依。
而系統內部的分析與設計,是交由 SA 與 SD 來負責的,而 SA 與 SD 的界限,
可以以是否有與實體的平台相依來界定。
我們也可以以兩句話來說明分析與設計的關係:
“Do the right thing (分析)”and “Do the thing right (設計)”。

RD(”R”esearch and “D”evelopment engineer)研發設計工程師,簡稱研發工程師:

RD的分類:
一般有可能會遇到二種RD:一種是會不斷發問的RD. 一種是都沒有問題的RD.
然而,常問問題的人大多數是Key man. 是公司重要的人物.
會問問題代表著學習心強. 表達能力良好。

RD在公司的地位:

RD部門在公司是重要的單位. 但不代表有地位.
只要企劃, 業務或者是老闆有了想法,
不管有理無理, RD就要想辦法把他們的想法具體的實現出來.
採購, 倉管,工程每天追著RD要求配合,
生產線的媽媽,大姐們更是得罪不得,
她們會為了一顆電容擺放位置不好焊來跟你吵半天. 更別提客服部門的抱怨.

PG(Programming)程式設計師:

從每一個資訊的專業職位來看,程式設計師的定義都有一點差異,
但基本上你必須要具備幾項基本的資訊技術,
才得以勝任多數的資訊工作職位,以下的建議提供參考:

  1. 必須至少專精一種程式語言.C,C++,Java都可以.
  2. 必須至少專精一種作業系統.Windows,Linux.(可以管理與架設伺服器)
  3. 瞭解資料庫.
  4. 熟悉網路架構.
  5. 要能讀懂英文的技術文件.
PM (Project Manager) 專案經理:

一般而言,比較大的公司才會有專案管理部 (Project Management Department)。
負責解決新機種生產、還有新產品研發過程中所有的問題。
PM專案管理師隸屬於專案管理部,通稱「專案經理」,簡稱 PM (Project Manager),
另外依功能不同,又可稱為「產品經理」 (Product Manager)。
所以,作為一個好的PM,必須
1.熟悉該產業的生產製造流程;
2.有好的溝通協調、管理能力;
3.良好的外語能力(英、日語為主)
要了解工廠內各部門(製造部、工程部、測試工程部、產品線、
開發採購、倉儲、物流處、關務…等等)的運作,
還有研發中心各部門(包括EE、ME、Layout、安規、EMI)的訴求和考量。

DBA (Database Administrator) 資料庫設計與管理人員:

資料庫設計與管理人員,最好本身也有寫程式的能力,這樣在管理上會如虎添翼,
就這部份的準備方式跟系統平台類似,熱門的SQL、Oracle、Sybase…等,
要能有一樣是最擅長的,其他的多少都要懂一點,有很多公司都是從SQL開始,
到後來轉成Oracle,所以如果跟不上企業的轉變,會是很大的缺憾。

MIS (Management Information System)管理資訊系統,即網管人員:

MIS依管理決策之需要,應用資料庫將一個機構之資訊整合處理分析,
以便即時提供各階層管理者使用。

FAE (Field Application Engineer, Failure Aanlysis Engineer) 產品技術諮詢:

通常 FAE 需負責
1.負責客戶相關技術問題回覆、 產品應用

  1. 協助業務團隊解決銷售過程中的技術問題及提供售後的技術支援
    3.協助RD進行軟體發行前相關測試
    4.協助RD解決客戶問題,客戶端Design In應用問題解決,提供第一線客戶技術支援
    5.產品相關使用文件撰寫及網站維護
    6.技術支援資料準備及客戶產品應用之教育訓練。
  2. 客訴問題分析與解決,客戶量產問題解決

Google職缺薪水

TechNews


推薦文章 :

推薦1
推薦2
科技業常見的職務縮寫 SA SD RD PG PM DBA MIS QA Sales
玩者小菩 SA SD RD PG PM DBA MIS QA Sales
如果你不想走管理路線,工程師職涯要如何成長?

Python Class介紹

發表於 2018-07-22

Class介紹

模組 vs Class

-如果某種東西你只想使用一次,請使用模組。(Singleton)
-避免過度設計資料結構。盡量使用數字、字串、tuple、串列、集合、字典。
(Guido van Rossum)

(一) 基本

1.1 Self

1.2 私用名稱

1.3 Property

(二) 繼承

2.1 覆寫

2.2 Super

(三) 多型

(四) ClassMethod, staticmethod

請注意Python跟C系列的不同。
它的@classmethod、@staticmethod用法,還有MemberData的使用。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
class ClassObject():
count = 0 # 共用
def __init__(self):
self.countFail = 1 # 自己的變數
ClassObject.count += 1

@classmethod
def kids(cls):
print("A has",cls.count, "little objects.")

@staticmethod
def commercial():
print('This coyoteWeapon has been brought to you by Acme')

A = ClassObject()
B = ClassObject()
C = ClassObject()
ClassObject.kids()

ClassObject.commercial()

(五) DockType

(六) 特殊用法

eq … etc.

hexo + github 使用方式

發表於 2018-07-21

其實也不用寫什麼 … 因為別人寫得超好請參考

(一) 安裝方式

https://wwssllabcd.github.io/blog/2014/12/22/how-to-install-hexo/

1.1 __config.yml 設定

1
2
3
4
5
deploy:
type: git
repository: https://github.com/asdense/asdense.github.io.git
branch: master
# [Trouble Shooting] yml要有空白,不然會編譯錯誤...

1.2 上傳設定

1
2
3
4
5
6
7
8
9
# Step1 : Create a new post
$ hexo new "My New Post"
# Step2 : Edit post.md for notepad++
# Step3 : Run Local server
$ hexo server
# Step4 : Generate static files ( IMPORTANT !!! )
$ hexo generate
# Step5 : Deploy to remote sites
$ hexo deploy

1.3 MD Format ( 寫文章的方式 )

https://markdown.tw/
https://kingofamani.gitbooks.io/git-teach/content/chapter_6_gitbook/markdown.html (這偏比較好懂)

(二) 使用方式

https://yogapan.github.io/2017/08/11/%E7%94%A8Hexo-Github-Pages%E6%90%AD%E5%BB%BA%E5%80%8B%E4%BA%BA%E9%83%A8%E8%90%BD%E6%A0%BC/

2.1 參考Themes

https://hexo.io/themes/

2.2 調整Tags … (TBD)

Hello World

發表於 2018-07-21

Welcome to Hexo! This is your very first post. Check documentation for more info. If you get any problems when using Hexo, you can find the answer in troubleshooting or you can ask me on GitHub.

Quick Start

Create a new post

1
$ hexo new "My New Post"

More info: Writing

Run server

1
$ hexo server

More info: Server

Generate static files

1
$ hexo generate

More info: Generating

Deploy to remote sites

1
$ hexo deploy

More info: Deployment

CrazyCat

CrazyCat

6 文章
4 標籤
© 2018 CrazyCat
由 Hexo 強力驅動
|
主題 — NexT.Pisces v5.1.4