Jerry Wang
    • Create new note
    • Create a note from template
      • Sharing URL Link copied
      • /edit
      • View mode
        • Edit mode
        • View mode
        • Book mode
        • Slide mode
        Edit mode View mode Book mode Slide mode
      • Customize slides
      • Note Permission
      • Read
        • Only me
        • Signed-in users
        • Everyone
        Only me Signed-in users Everyone
      • Write
        • Only me
        • Signed-in users
        • Everyone
        Only me Signed-in users Everyone
      • Engagement control Commenting, Suggest edit, Emoji Reply
    • Invite by email
      Invitee

      This note has no invitees

    • Publish Note

      Share your work with the world Congratulations! 🎉 Your note is out in the world Publish Note

      Your note will be visible on your profile and discoverable by anyone.
      Your note is now live.
      This note is visible on your profile and discoverable online.
      Everyone on the web can find and read all notes of this public team.
      See published notes
      Unpublish note
      Please check the box to agree to the Community Guidelines.
      View profile
    • Commenting
      Permission
      Disabled Forbidden Owners Signed-in users Everyone
    • Enable
    • Permission
      • Forbidden
      • Owners
      • Signed-in users
      • Everyone
    • Suggest edit
      Permission
      Disabled Forbidden Owners Signed-in users Everyone
    • Enable
    • Permission
      • Forbidden
      • Owners
      • Signed-in users
    • Emoji Reply
    • Enable
    • Versions and GitHub Sync
    • Note settings
    • Note Insights New
    • Engagement control
    • Make a copy
    • Transfer ownership
    • Delete this note
    • Save as template
    • Insert from template
    • Import from
      • Dropbox
      • Google Drive
      • Gist
      • Clipboard
    • Export to
      • Dropbox
      • Google Drive
      • Gist
    • Download
      • Markdown
      • HTML
      • Raw HTML
Menu Note settings Note Insights Versions and GitHub Sync Sharing URL Create Help
Create Create new note Create a note from template
Menu
Options
Engagement control Make a copy Transfer ownership Delete this note
Import from
Dropbox Google Drive Gist Clipboard
Export to
Dropbox Google Drive Gist
Download
Markdown HTML Raw HTML
Back
Sharing URL Link copied
/edit
View mode
  • Edit mode
  • View mode
  • Book mode
  • Slide mode
Edit mode View mode Book mode Slide mode
Customize slides
Note Permission
Read
Only me
  • Only me
  • Signed-in users
  • Everyone
Only me Signed-in users Everyone
Write
Only me
  • Only me
  • Signed-in users
  • Everyone
Only me Signed-in users Everyone
Engagement control Commenting, Suggest edit, Emoji Reply
  • Invite by email
    Invitee

    This note has no invitees

  • Publish Note

    Share your work with the world Congratulations! 🎉 Your note is out in the world Publish Note

    Your note will be visible on your profile and discoverable by anyone.
    Your note is now live.
    This note is visible on your profile and discoverable online.
    Everyone on the web can find and read all notes of this public team.
    See published notes
    Unpublish note
    Please check the box to agree to the Community Guidelines.
    View profile
    Engagement control
    Commenting
    Permission
    Disabled Forbidden Owners Signed-in users Everyone
    Enable
    Permission
    • Forbidden
    • Owners
    • Signed-in users
    • Everyone
    Suggest edit
    Permission
    Disabled Forbidden Owners Signed-in users Everyone
    Enable
    Permission
    • Forbidden
    • Owners
    • Signed-in users
    Emoji Reply
    Enable
    Import from Dropbox Google Drive Gist Clipboard
       Owned this note    Owned this note      
    Published Linked with GitHub
    • Any changes
      Be notified of any changes
    • Mention me
      Be notified of mention me
    • Unsubscribe
    # 面試 ## 為什麼想換工作 希望尋求更多發展和發揮自己的機會。 我們是作 ai 語音相關的 tts 服務,但主管主要都是關注在 ai 模型的成果,對於實際應用的需求和商務模式,沒有太多規劃和思考。到最後設計的應用的需求就只是單純的如何使用 app 操作這些 ai 服務。 我們的 ai 服務是使用者登入後,可以錄製 411 句句子,然後開始訓練模型,未來只要輸入文字和選擇模型,就可以產生自己的聲音。 所以 app 內就是讓使用者看到句子, 錄音,送出訓練和等待,送出文字產生聲音...都是些很直觀的功能。再加上主管沒有軟體需求迭代的概念,所以對於應用的需求就一直停留在這。 另外,在我工作的這兩年, 上線時間已經延後了 4, 5 次,原因就是主管主觀認為 ai 模型產生的聲音還不夠好聽,還不要上線。所以 app 和系統完成後,都一直停留在公司內部自己使用,還沒有發布到市場上進行驗證。 總之,想換工作的原因是希望尋求更多發展和發揮自己的機會。 (還有原本部屬在 aws 上,最近很有可能要拉回本地部屬) why aws to local? ## 公司工作內容技術 ### aten 這個專案已經開發兩年,有一個前後端沒有完全分離,用 python starlette + vue 開發的網站,然後用 http 的方式分派任務丟給 worker 。 架構主要分成執行商業邏輯的主要 server 和執行 ai 任務的 worker。 主要 server 使用 python 的 starlette 框架來開發,使用者資料存在 postgresql database 內。執行商業邏輯的 server 收到 tts 任務後,就是放到 rabbitmq 上排隊,讓其他有 gpu 資源的 worker 去慢慢消化。tts 任務完成後再 pub-sub 通知主要 server。 而 tts 完成後產生的音檔和每個使用者的語音 ai 模型,會存在一個 nfs server 上,這個 nfs server 在主要 server 和 workers 中都可以存取。 另外,產出的 log 也會寫入到 es 內,方便觀看和 debug。 pg, rabbitmq, es, nfs, secret manager 使用 aws 的服務,server 和 worker 則是都容器化,部屬於 eks 內。 公司內有自架 gitlab ,推上去後觸發 gitlab ci 和 gitlab runner 自動跑測試和自動 build image, push 到 ecr, 之後再手動用 kubectl 連 k8s cluster,並重新啟動 development。 (這段可自動化) (公司不想多花錢,所以都是預先開好的 ec2 instance 們,沒有使用 auto scaling) why rabbitmq? 學習曲線比 kafka 緩和 這種東西的市場不可能像是電商一樣,會有很大的流量, pm 也定義每日活躍使用者大概是 100,其實不是很高,所以在技術選型時就沒選 kafka。 why no s3? 因為想掛在 file system, 讓 ai engineer 直接取用,他們不必去理解如何從 s3 拿到檔案。 ### biggo 8 個月 分成兩個部份 一開始進去的時候,就是單純用 python 寫爬蟲,然後用 crontab 設定爬蟲執行的時間,爬完的資料會寫成 pickle 檔,另外用其他 script 定期把資料寫入到 es 內。 寫爬蟲其實人力需求很大,當時甚至找了很多實習生來專門寫爬蟲。因為各網站常常都在修改,當時的工作內容就是檢查產生的 logfile 中有沒有 error,然後去開 issue 並修改爬蟲程式,都沒問題的話就繼續寫新的網站的爬蟲。 所有爬蟲程式撰寫, 設定執行的時間,這些工作都要由工程師來完成。 這樣的架構後來就慢慢亂掉,人力需求變超高,然後 crontab 設定的越來越雜亂,沒有系統化的安排爬取的時間。 所以後來就和主管規劃了爬蟲管理後台,由我主要開發 api 和後台,另外有一個前端工程師開發 chrome extension 部份。 主要架構是有一台機器部屬了爬蟲後台,另外多台機器上面都各部屬一個簡單的 server,負責接收爬蟲任務和回傳狀態。 爬蟲管理後台使用 python django 開發,大量的使用到 django admin 的界面。 BD 可以使用後台的管理帳號在 chrome extension 內登入。在 chrome extension 內,BD 可以建立爬蟲設定檔,直接在頁面上點選要爬的 elements ,並把相對應的 css selector 存起來,只需要簡單的教育訓練就可以設定,不需要去寫各種 css selector。 登入後台後,可以使用界面設定各個爬蟲執行的時間,原本要使用 terminal 設定 crontab,變成在網頁後台設定,就可以自動寫入到 crontab 內。固定的時間到, crontab 內就會打一個 api 給後台的 server,送要爬的網站 id 過來,後台 server 就會去每一台機器尋找有空檔的,把爬蟲設定檔取出並丟過去,機器就會開啟 selenium 並執行爬蟲。 在後台 server 中,將爬蟲設定檔存在 es 內,其餘使用者資料和網站 id ...等就儲存在 pg 內。 在爬蟲後台可以設定爬蟲執行時間, 檢視爬蟲的紀錄,點選按鈕直接執行爬蟲,使用者登入登出。 ## vg ios 開發的後期其實就慢慢發現自己對刻畫面, ui 的部份還好,對於軟體架構, 資料庫, 雲端的部份更有興趣。 這家公司的老闆也是以前在好想工作室認識的朋友的朋友,是一個富二代,台灣人但長期住在美國。他創了這家公司在美國,台灣就設分公司,讓我那個朋友來管理。 那時的定位是美國公司是家 VC, 台灣這邊就是負責提供他投資的公司的軟體服務。 我朋友就找我過去,主要用 python 的 django 做後端開發,弄 aws 部屬這樣。 因為剛開始,那時架構滿簡單的,就是把 server, 前端, db 都部屬在 ec2 內而已,然後 cicd 用 aws 的 code pipline 。 (codepipline -> codebuild(buildspec) -> codedeploy(appspec)) (而我原本就會寫 Python, 以前是用他來寫爬蟲,把資料放在自己的 app 內。) 中間做的第一個案子是公司內部的管理系統,類似 erp ,開發了員工管理, 報帳, 請假...那些系統....但最後公司就收掉了,所以產品也沒上線。 收掉的原因是因為老闆的爸爸身體不好,所以他要回去接家業,只能把這家公司收掉。 ## bummp 是一個獨立音樂的社群平台,有 ios, android 平台,我是負責寫 ios 的部份 中間就是討論, 訪談, 找痛點, 開發, 推廣, 接受一些採訪什麼的... 那時大家都滿菜的,一直開發新功能,但就是沒找到一個很合適的商業模式,就磨了兩年,後來就停止了。 ## 怎麼會轉軟體工程師 讀書時候就有寫程式,都是用來做資料分析,沒有做應用端的程式。 第一份工作想說想找多與人接觸的工作,才會當科技業的 PM, 因為可以接受新鮮人。 我也喜歡當 pm, 只是在台灣科技業當 pm 比較無趣,因為是代工廠,工作內容是著重在盯著工廠把產品量產出來,良率低成本低就好,而 rd 就是照著客戶要的需求把東西設計出來,面板也是滿固定的東西,所以需求也沒什麼好來來回回討論的。 後來離職後剛好我朋友在台南的好想工作室接前端案子,我當時就是用 iphone 和 mac,他們那邊也有接 ios 案子的,就問我要不要過去順便學和一起做,才開始正式踏入這個領域。 在那邊就是持續接 ios 的案子,同時也跟在那邊認識的設計師和後端,組團參加政府的比賽,得到些獎金,就一起創業做接下來的 bump。 ## 自我介紹 我叫王彥龍,有 5 年多的軟體開發工作經驗,前 2 年專精於 ios 開發,後來發現對軟體架構, 資料庫, 雲端更有興趣,因此轉為後端工程師,目前有 3 年多的 Python 後端開發經驗。 我目前的工作主要做後端程式開發和 AWS 伺服器維運,與 App 工程師, AI 工程師, pm 和設計師進行合作,開發 AI 語音合成的 App (tts)。 空閒的時候,我也喜歡研究新技術和開發個人專案,將想學的技術學習後並實際運用在個人專案上,以加深我對新技術的掌握度並磨練我的學習能力。 ## 自我介紹英文 Hi, my name is Yen Lung Wang, you can also call me Jerry. I have more than 5 years of experience in software development, the first 2 years I specialized in iOS development, then I found more interested in software architecture, database and cloud, so I changed my speciality to backend development, and now I have more than 3 years of experience in backend development using Python. My current job is mainly backend development and AWS management, working with App engineers, AI engineers, pms and designers to develop an AI voice synthesis app (TTS). In my free time, I also like to research new technologies and develop personal projects. Learning the technologies that I want to learn and applying them to my personal projects can deepen my understanding of new technologies and practice my learning ability. ## 工作內容介紹 主要使用 python 做後端開發,與 app 工程師, pm 和設計師合作。ai 的部份與 ai 工程師合作,將 ai 工程師提供的 ai 模型包成 worker 在 tts 服務內使用。 另外也負責規劃整個後端和 tts 服務的架構,並部屬在 aws 上。 同時也將部屬的流程, 開發的 api 們全部文件化。 ## 工作內容介紹英文 I mainly used python for backend development, worked with app engineers, pms, designers and ai engineers. The other part of my job was to package the ai models as workers for using in the tts service. I am also responsible for planning the entire backend and tts service architecture and deploy them onto AWS. I also documented all processes of deployment and apis. ## 問題 為何會有職缺 薪資結構, 加薪方式, 獎金 職等, 升遷方式 同事組成 會跟哪些部門合作 是團隊合作還是單打獨鬥 開發流程 時程訂定 code review 技術分享 主管做多久, 主管技術專業在哪 遠端文化, 目前的挑戰, 大家都喜歡遠端嘛, 未來遠端政策 產品需求來源 產品使用量 開發和維護的比例 會有機會碰到維運嘛?還是會有專門的 sre? 辦公室氣氛?是否有工程師文化? --- https://www.youtube.com/watch?v=0YG3vo78gSM https://www.youtube.com/watch?v=6QGuf0O1j4E https://www.youtube.com/watch?v=NBi66VNHW18 --- 1. 電影搜尋, 登入, 上傳照片 & 心得(公開, 私人) 2. https://github.com/bxcodec/go-clean-arch https://github.com/caohoangnam/go-clean-architecture https://github.com/adigunhammedolalekan/go-contacts https://github.com/superj80820/2020-ithelp-contest/tree/master/DAY07 https://ithelp.ithome.com.tw/users/20122925/ironman/3537 https://github.com/eminetto/clean-architecture-go-v2/blob/master/api/main.go --- http://ec2-54-168-241-97.ap-northeast-1.compute.amazonaws.com/api https://developer.mozilla.org/zh-TW/docs/Learn/Getting_started_with_the_web/HTML_basics#html_元素的組成 https://ec-aws-dev.signin.aws.amazon.com/console fucking69ev! jerry0420A jerrywang

    Import from clipboard

    Paste your markdown or webpage here...

    Advanced permission required

    Your current role can only read. Ask the system administrator to acquire write and comment permission.

    This team is disabled

    Sorry, this team is disabled. You can't edit this note.

    This note is locked

    Sorry, only owner can edit this note.

    Reach the limit

    Sorry, you've reached the max length this note can be.
    Please reduce the content or divide it to more notes, thank you!

    Import from Gist

    Import from Snippet

    or

    Export to Snippet

    Are you sure?

    Do you really want to delete this note?
    All users will lose their connection.

    Create a note from template

    Create a note from template

    Oops...
    This template has been removed or transferred.
    Upgrade
    All
    • All
    • Team
    No template.

    Create a template

    Upgrade

    Delete template

    Do you really want to delete this template?
    Turn this template into a regular note and keep its content, versions, and comments.

    This page need refresh

    You have an incompatible client version.
    Refresh to update.
    New version available!
    See releases notes here
    Refresh to enjoy new features.
    Your user state has changed.
    Refresh to load new user state.

    Sign in

    Forgot password

    or

    By clicking below, you agree to our terms of service.

    Sign in via Facebook Sign in via Twitter Sign in via GitHub Sign in via Dropbox Sign in with Wallet
    Wallet ( )
    Connect another wallet

    New to HackMD? Sign up

    Help

    • English
    • 中文
    • Français
    • Deutsch
    • 日本語
    • Español
    • Català
    • Ελληνικά
    • Português
    • italiano
    • Türkçe
    • Русский
    • Nederlands
    • hrvatski jezik
    • język polski
    • Українська
    • हिन्दी
    • svenska
    • Esperanto
    • dansk

    Documents

    Help & Tutorial

    How to use Book mode

    Slide Example

    API Docs

    Edit in VSCode

    Install browser extension

    Contacts

    Feedback

    Discord

    Send us email

    Resources

    Releases

    Pricing

    Blog

    Policy

    Terms

    Privacy

    Cheatsheet

    Syntax Example Reference
    # Header Header 基本排版
    - Unordered List
    • Unordered List
    1. Ordered List
    1. Ordered List
    - [ ] Todo List
    • Todo List
    > Blockquote
    Blockquote
    **Bold font** Bold font
    *Italics font* Italics font
    ~~Strikethrough~~ Strikethrough
    19^th^ 19th
    H~2~O H2O
    ++Inserted text++ Inserted text
    ==Marked text== Marked text
    [link text](https:// "title") Link
    ![image alt](https:// "title") Image
    `Code` Code 在筆記中貼入程式碼
    ```javascript
    var i = 0;
    ```
    var i = 0;
    :smile: :smile: Emoji list
    {%youtube youtube_id %} Externals
    $L^aT_eX$ LaTeX
    :::info
    This is a alert area.
    :::

    This is a alert area.

    Versions and GitHub Sync
    Get Full History Access

    • Edit version name
    • Delete

    revision author avatar     named on  

    More Less

    Note content is identical to the latest version.
    Compare
      Choose a version
      No search result
      Version not found
    Sign in to link this note to GitHub
    Learn more
    This note is not linked with GitHub
     

    Feedback

    Submission failed, please try again

    Thanks for your support.

    On a scale of 0-10, how likely is it that you would recommend HackMD to your friends, family or business associates?

    Please give us some advice and help us improve HackMD.

     

    Thanks for your feedback

    Remove version name

    Do you want to remove this version name and description?

    Transfer ownership

    Transfer to
      Warning: is a public team. If you transfer note to this team, everyone on the web can find and read this note.

        Link with GitHub

        Please authorize HackMD on GitHub
        • Please sign in to GitHub and install the HackMD app on your GitHub repo.
        • HackMD links with GitHub through a GitHub App. You can choose which repo to install our App.
        Learn more  Sign in to GitHub

        Push the note to GitHub Push to GitHub Pull a file from GitHub

          Authorize again
         

        Choose which file to push to

        Select repo
        Refresh Authorize more repos
        Select branch
        Select file
        Select branch
        Choose version(s) to push
        • Save a new version and push
        • Choose from existing versions
        Include title and tags
        Available push count

        Pull from GitHub

         
        File from GitHub
        File from HackMD

        GitHub Link Settings

        File linked

        Linked by
        File path
        Last synced branch
        Available push count

        Danger Zone

        Unlink
        You will no longer receive notification when GitHub file changes after unlink.

        Syncing

        Push failed

        Push successfully