kentyangfake
    • 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 No publishing access yet

      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.

      Your account was recently created. Publishing will be available soon, allowing you to share notes on your public page and in search results.

      Your team account was recently created. Publishing will be available soon, allowing you to share notes on your public page and in search results.

      Explore these features while you wait
      Complete general settings
      Bookmark and like published notes
      Write a few more notes
      Complete general settings
      Write a few more notes
      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 No publishing access yet

    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.

    Your account was recently created. Publishing will be available soon, allowing you to share notes on your public page and in search results.

    Your team account was recently created. Publishing will be available soon, allowing you to share notes on your public page and in search results.

    Explore these features while you wait
    Complete general settings
    Bookmark and like published notes
    Write a few more notes
    Complete general settings
    Write a few more notes
    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
    # < T >泛型讀書會 ## 前端system design研究 #### 6/24 謙 Autocomplete [資源](https://www.greatfrontend.com/questions/system-design/autocomplete#do-we-need-to-support-fuzzy-search) #### 7/8 [Ethan](https://www.canva.com/design/DAGshYZR7BY/aSpl_ZYayWvUVdm4QXdwjw/edit?utm_content=DAGshYZR7BY&utm_campaign=designshare&utm_medium=link2&utm_source=sharebutton) IDL 和Makefile 是兩個不同的工具,前者用來描述軟體組件的介面,後者用來自動化建置過程,但兩者可以相互配合使用,以提升開發效率。 - makefile - IDL: Interface Description Language [heptabase](https://heptabase.com/) : 這間面試考這個 #### 7/22 [Flora E-commerce](https://www.canva.com/design/DAGtwQxqiTs/tMfRoe1hWXLhk-SjKOYfbQ/edit?utm_content=DAGtwQxqiTs&utm_campaign=designshare&utm_medium=link2&utm_source=sharebutton) - [Console Ninja](https://console-ninja.com/):VScode裡看console.log - [stripe checkout](https://stripe.com/payments/checkout):金流服務 - 數字字串輸入設定:`<input type='text' inputmode='numeric' />` - [Google AI課](https://growonairtw.withgoogle.com/events/digitaleducation) - [沈浸式翻譯](https://immersivetranslate.com/zh-TW/) - [Css Peeper](https://csspeeper.com/):Google插件可以顯示CSS間距 - #### 8/5 [奶茶 Video Streaming](https://www.canva.com/design/DAGuveCYV3U/aXgXy1do5ozwQktt_ff8hQ/edit?utm_content=DAGuveCYV3U&utm_campaign=designshare&utm_medium=link2&utm_source=sharebutton) [dash.js](https://dashjs.org/):串流影片後端用的套件 #### 8/19 [Sharon Travel Booking](https://www.canva.com/design/DAGwJWWrQXc/fJhc9fpET1zldXL8fRSUJQ/edit) [Signal鐵人賽文章](https://ithelp.ithome.com.tw/m/users/20129020/ironman/8219) #### 9/2 [Jill News Feed]() #### 9/16 [Sam Google Docs]() #### 9/30 [Yumy Chat App]() 通常聊天室會用IndexDB [BroadcastChannel](https://developer.mozilla.org/zh-CN/docs/Web/API/BroadcastChannel)可以跨tab溝通(包括postMessage) [Chat UI kit](https://www.social.plus/) [列印的後端套件](https://github.com/Kozea/WeasyPrint) [前端DB](https://newsletter.betterstack.com/p/how-sqlite-made-notion-30-faster?utm_campaign=post&utm_medium=web) #### 10/14 [Macy Pinterest](https://separate-tempo-553.notion.site/Pinterest-27b3da1fa57780c1b7b8ddf62f89f2a0) ## 下次可能題目 [前端架構學習*選這個](https://www.greatfrontend.com/questions/system-design/news-feed-facebook) - 帳:sam21323.fl04@nctu.edu.tw / 密:19fe12345 - 75 折折扣碼:YMSDP8EC [大型前端架構方法](https://largeapps.dev/) [CSR前端框架(Sam公司)](https://umijs.org/) [前端整合build tool](https://voidzero.dev/) | [podcast訪談](https://open.spotify.com/episode/4QEesDjjzzcuJt0aWF5cUY?si=037ccb7bf97e42a5) ## React深度討論/React 19 React 思維進化: [書](https://www.books.com.tw/products/0010977360) | [鐵人文](https://ithelp.ithome.com.tw/users/20129300/ironman/5892) #### 題目討論 [Google Ai課程](https://rsvp.withgoogle.com/events/csj-tw-2024) [awesome-react-renderer](https://github.com/chentsulin/awesome-react-renderer?tab=readme-ov-file#web) sue 新公司 [Appier](https://appier.com/zh-tw/) sam 新公司 Tutor ABC #### 2/11 第一章 & 第二章:謙 & Sam [React 畫面處理機制 (上)](https://www.canva.com/design/DAGeUGGgHWk/SUdxB9Y0QoPzvlKlwpv2iQ/edit) [React 畫面處理機制 (下)](https://www.notion.so/samselflearning/React-191271af845180f4b986c542c4de6914) #### 2/25 第三章:奶茶 & Sharon [3-1 - 3-2](https://calico-roadway-36f.notion.site/React-3-1-to-3-2-1a12914af9b88069ae8ed196eadc7c4c?pvs=73) [3-3](https://www.canva.com/design/DAGf59cLqVY/XCSbEt_aKRZRHw62aPFWLg/edit?utm_content=DAGf59cLqVY&utm_campaign=designshare&utm_medium=link2&utm_source=sharebutton) [flushSync](https://react.dev/reference/react-dom/flushSync):強制關閉batch update [updater function](https://react.dev/learn/queueing-a-series-of-state-updates):確保能拿到最新的值 `setState(prev => !prev)` [React concurrent mode](https://chentsulin.medium.com/%E7%90%86%E8%A7%A3-react-%E7%9A%84%E4%B8%8B%E4%B8%80%E6%AD%A5-concurrent-mode-%E8%88%87-suspense-327b8a3df0fe) #### 3/11 第四章:Flora & Macy [component生命週期](https://www.canva.com/design/DAGkqy77GbQ/2syn33_JM2A_IDHRVaNjYA/edit) 開發者工具 [override content](https://developer.chrome.com/docs/devtools/overrides?hl=zh-tw) : 可以在開發者工具裡直接修改API/Header等等 #### 3/25 第五章:Jill & Yumy [useEffect](https://www.canva.com/design/DAGl_aCVlls/Vfnp5Rf2SyiXi0T_XNUMwQ/edit?utm_content=DAGl_aCVlls&utm_campaign=designshare&utm_medium=link2&utm_source=sharebutton) useEffect執行兩次:React 18以後的版本在dev環境啟用Strict mode會出現,目的是協助發現不穩定的sideEffect [5-4 ~ 5-7](https://yiting-yang.notion.site/5-4-5-7-1e0e13d6dded80168251d75f4ac3b476) [react fiber](https://www.frontendnote.site/frontend/React/react-fiber/) #### [4/8 React 19: Ethan](https://shorturl.at/XodfO) [Form Action Pattern](https://x.com/leerob/status/1869881269468663994) ## [Grind 75](https://www.techinterviewhandbook.org/grind75?order=topics&difficulty=Easy&difficulty=Medium&hours=1&mode=preferences&grouping=topics&weeks=13) #### Dynamic Programming: YU * DP是演算法設計思維(ex:Greedy, Divide and Conquer, Backtracking) 建議看lecture,吸收大量的題型,吃"可以用DP解這題"的經驗 * 概念: 在遞迴過程中,將「可能重覆計算但答案不變」的部份,把算過的答案記錄下來避免重覆計算。目前大致了解成「遞迴+記錄過程中計算過的子問題答案」就可以了。 就是聰明版的遞迴,不要一直call到call過的東西 * [從零開始進入動態規劃的世界](https://arthur-lin.medium.com/%E5%BE%9E%E9%9B%B6%E9%96%8B%E5%A7%8B%E9%80%B2%E5%85%A5%E5%8B%95%E6%85%8B%E8%A6%8F%E5%8A%83%E7%9A%84%E4%B8%96%E7%95%8C-%E4%B8%80-%E5%9F%BA%E7%A4%8E%E4%B8%AD%E7%9A%84%E5%9F%BA%E7%A4%8E-eee0695b3795) [遞迴 (Recursion) 的思維模式](https://medium.com/appworks-school/%E9%80%B2%E5%85%A5%E9%81%9E%E8%BF%B4-recursion-%E7%9A%84%E4%B8%96%E7%95%8C-%E4%BA%94-b678adad95ca) #### [Heap: 奶茶](https://www.canva.com/design/DAGXS8eXqmM/2XfSEB043naoCFm2F8pXEA/edit) #### [Linked List: 表姐](https://www.canva.com/design/DAGV-MPaJf0/yh8xbjYCo8U_ScNwj3P5nQ/edit) #### [Stack: Suuuuuu](https://www.canva.com/design/DAGUGX0fRqo/oDd8ELyz1syhdiwgfooIlg/view?utm_content=DAGUGX0fRqo&utm_campaign=designshare&utm_medium=link&utm_source=editor) * [Astro - Framework Components](https://docs.astro.build/en/guides/framework-components/) : 跨框架component * [webpack - Module Federation](https://webpack.js.org/concepts/module-federation/) : 模組聯盟 * [sentry](https://docs.sentry.io/platforms/javascript/guides/react/) : Error時會有alert,效能監控 * [jam](https://jam.dev/?gad_source=1&gclid=Cj0KCQjwmt24BhDPARIsAJFYKk2xtYP2yShz-YyaROcu2Dq3hCcIrCmp70pZHyMUJy60b33fGeBbCuAaAjxDEALw_wcB) : 螢幕錄影工具 * [metahuman](https://www.unrealengine.com/en-US/metahuman) | [inZoi](https://playinzoi.com/en) : 虛擬人物平台 * #### [Hash Table: 雪倫](https://www.canva.com/design/DAGSJbX_cxo/TDFyS8dqCwfMV45HcSjIaA/edit?utm_content=DAGSJbX_cxo&utm_campaign=designshare&utm_medium=link2&utm_source=sharebutton) #### [Binary tree: Sam](https://www.canva.com/design/DAGPecaj6vY/rQcUCV5uK2DcUdNPwU7GCQ/edit?utm_content=DAGPecaj6vY&utm_campaign=designshare&utm_medium=link2&utm_source=sharebutton) * [structy](https://www.structy.net/): 演算法練習網站 #### [Binary search tree: Yiting](https://www.canva.com/design/DAGNbGmPGo8/cxgf1dtcux37Nl3Lv0lQVw/view#1) * 延伸閱讀: [bubble up 和 bubble down](https://www.youtube.com/watch?v=PkCBI4BKeb8) | [medium](https://medium.com/@verdi/binary-heap-basics-40a0f3f41c8f) * Binary tree 跟 Binary search tree 不同 #### [Graph: 抹西](https://www.canva.com/design/DAGLE11Z8iY/DMNNOa8f4v3r77DkJvGrjg/view?utm_content=DAGLE11Z8iY&utm_campaign=designshare&utm_medium=link&utm_source=editor) * [習題](https://separate-tempo-553.notion.site/graph-06cd2f1f8cac45828f8a4a8e88346fc1) * [教學](https://www.youtube.com/watch?v=tWVWeAqZ0WU&t=1029s) #### [Binary Search: Yumy](https://leetcode.com/problems/binary-search/description/) * [sue找到的讚講義](https://leetcode.com/problems/search-insert-position/solutions/423166/binary-search-101) * [易廷新公司](https://www.heartbot.com/#product) #### [String: Jill](https://www.canva.com/design/DAGFlzUA-e8/pHpt774_FUr8mskOYRNbAg/view?utm_content=DAGFlzUA-e8&utm_campaign=designshare&utm_medium=link&utm_source=editor) * 奇怪的比賽 [HackSussex](https://www.youtube.com/watch?v=VixYfv0UEyE&t=1547s) | [Excel](https://www.bnext.com.tw/article/77795/microsof-excel-championships-las-vegas?) #### [Array: Ethan](https://www.canva.com/design/DAGFLCR_0jw/0JslzQMm83HkPdrR08vg1g/edit) * 有些題目可以用Dynamic Programming解 * 可以用Array method,但要知道method的限制,要準備 ## Web前端效能優化大補帖 #### 4/16 [Performance Tab](https://www.canva.com/design/DAGBEWpkUuU/BUW_GVRIA3EQtaEhoHDIgQ/view?utm_content=DAGBEWpkUuU&utm_campaign=designshare&utm_medium=link&utm_source=editor) performance API:可以在檔案裡mark在Timing顯示的標記![截圖 2024-04-16 下午9.20.26](https://hackmd.io/_uploads/ByomolhlA.png) requestAnimationFrame API:用在連續動畫![截圖 2024-04-16 下午9.14.35](https://hackmd.io/_uploads/Hymbolhl0.png) [前端電子報Jing Su](https://jingtech.substack.com/) #### 3/19 [記憶體/GC](https://www.canva.com/design/DAF_qcYXmjY/35K3kGkOSjTdSOap8jIp9A/view) * 補充 需求:Next需要跑Server,所以沒辦法直接部署在S3(放靜態檔案的地方).作法:連線到EC2 VM上,透過把[Next Docker File](https://github.com/vercel/next.js/blob/canary/examples/with-docker/Dockerfile)把Next server在container上跑起來 (機器上已經裝好Node.js,docker) 部署的概念:`Next start`會跑在`localhost:3000`上,下指令把`port:3000`映射到`port:9090` ![截圖 2024-03-19 下午9.23.58](https://hackmd.io/_uploads/HyrTSGwR6.png) ![截圖 2024-03-19 下午9.25.07](https://hackmd.io/_uploads/HJfArfDAT.png) ![截圖 2024-03-19 下午9.25.30](https://hackmd.io/_uploads/rktRrMPCT.png) [ngrok](https://ngrok.com/):把localhost轉為https網址,可以分享給別人 | [nginx](https://www.nginx.com/) | [Google App Script](https://www.google.com/script/start/) #### 3/5 [Web Workers 與 WebAssembly](https://www.canva.com/design/DAF5xgVldbU/jrbEykOt9peaxARuaOFJVw/view?utm_content=DAF5xgVldbU&utm_campaign=designshare&utm_medium=link&utm_source=editor) * 補充 [Google VBA](https://youtu.be/fKTnjZfPVh4?si=NfEG9fC4tLp-llh8) [INP](https://ranking.works/knowledge/core-web-vitals-inp/):core web vitals新指標,今年三月取代FID #### 2/20 [App Shell / HTTP 2](https://www.canva.com/design/DAF9IGOsWTw/s4S-6b-2a9Gz9j6cs1mMoQ/edit?utm_content=DAF9IGOsWTw&utm_campaign=designshare&utm_medium=link2&utm_source=sharebutton) #### 1/9 [快取與網路機制](https://www.canva.com/design/DAF5XD6hg18/khJNhEa3KTu9TZMWhE8N4g/edit?utm_content=DAF5XD6hg18&utm_campaign=designshare&utm_medium=link2&utm_source=sharebutton):更多參考資料可以看[web.dev](https://web.dev/?hl=zh-tw) * 補充 [Xstate](https://stately.ai/docs/xstate) | [userpilot](https://userpilot.com/) | [productfruits](https://productfruits.com/userpilot-alternative?utm_term=userpilot&utm_campaign=Competition_ROW&utm_source=adwords&utm_medium=ppc&hsa_acc=3344993221&hsa_cam=16099285325&hsa_grp=135788962512&hsa_ad=648512076908&hsa_src=g&hsa_tgt=kwd-866041389583&hsa_kw=userpilot&hsa_mt=p&hsa_net=adwords&hsa_ver=3&kw=userpilot&cpn=16099285325&gad_source=1&gclid=CjwKCAiA-vOsBhAAEiwAIWR0TQxsAEXuSiAMXXBVN7A4HDSQJoQED0KPPXUuw4zT9RPrLFZ3NAz1MBoCZ5MQAvD_BwE):把程式碼state畫成圖表 [sam分享push之前自動build方法](https://samselflearning.notion.site/32c1cf88668d4f54b135400417e245c2?pvs=4) ``` tsc --noemit && next lint ``` #### 12/26 [Dynamic import](https://www.canva.com/design/DAF33hh-JJw/rboc30UZ-SqTBZUqqLVSeg/view?utm_content=DAF33hh-JJw&utm_campaign=designshare&utm_medium=link&utm_source=editor) * 補充 [薪水談判](https://www.canva.com/design/DAF2UEAfiVU/X88ZTpeZDcAJ36UvwZ5GJg/view?utm_content=DAF2UEAfiVU&utm_campaign=designshare&utm_medium=link&utm_source=editor) [JSdoc](https://www.gss.com.tw/blog/javascript%E4%BD%BF%E7%94%A8jsdoc%E8%A8%BB%E8%A7%A3%E4%B8%A6%E5%BF%AB%E9%80%9F%E7%94%A2%E7%94%9Fapi%E6%96%87%E4%BB%B6):VScode插件 [Bulk Problem Diagnostics](https://github.com/marinaglancy/vscode-bulk-problem-diagnostics):VScode插件 [Husky](https://medium.com/@Hsu.Yang-Min/husky-%E8%AE%93%E4%BD%A0%E7%9A%84-git-%E5%8F%AF%E4%BB%A5%E5%81%9A%E5%85%B6%E4%BB%96%E4%BA%8B%E6%83%85-b437497826a3) | [Husky commit hook](https://www.freecodecamp.org/chinese/news/how-to-add-commit-hooks-to-git-with-husky-to-automate-code-tasks/):commit hook [Lottie](https://tenten.co/learning/what-is-lottie/):動畫插件 [codewhisperer](https://aws.amazon.com/tw/codewhisperer/):強化版終端機 [typescript考試](https://www.explainthis.io/zh-hant/swe/advent-typescript-2023-1) [React Testing Library 的 15 个常见错误](https://mp.weixin.qq.com/s/pgdcDNjDGPgNq76Zh_dZxg) [css-overview](https://szeching.com/enable-css-overview-in-chrome/):Chrome插件,可以看css #### 12/12 [lazyloading](https://www.canva.com/design/DAFz8PAIuyU/nJenY00H9BYo9uJBVmQkhw/view?utm_content=DAFz8PAIuyU&utm_campaign=designshare&utm_medium=link&utm_source=editor) * 補充 [langchain](https://www.langchain.com/):LLM框架 [v0](https://v0.dev/):自動產UI #### 11/28 [瀏覽器的架構演進史+渲染引擎的機制](https://separate-tempo-553.notion.site/cb4a2057bdf44333a912d4522f47f40e?pvs=4) [3-2分享](https://calico-roadway-36f.notion.site/3-2-ea32539c4dcc4e92b80e6e8bbdc788b1?pvs=25) * 補充 [vite科普](https://bold-passbook-f2f.notion.site/Vite-fb399bec0032441097c92476386e8e3d) | [Intersection Observer API](https://developer.mozilla.org/en-US/docs/Web/API/Intersection_Observer_API) | [MWC 2023共筆](https://hackmd.io/@ModernWeb/2023/%2FDtxDy-8KR4mItQ2gGi4xRA) ``` - Mockoon: mock api 工具 - Docker image、Docker container - VM: AWS EC2、GCP Compute Engine ``` #### 10/31 [網頁資源優化](https://samselflearning.notion.site/samselflearning/3bd07e77bb074c9aa4df238a1eec984c) * 補充 CMD指令模糊搜尋: [Warp](https://www.warp.dev/b) | [Fig](https://fig.io/) | [fzf](https://github.com/junegunn/fzf) [Reack Hook Form](https://react-hook-form.com/): 表單套件 #### 10/17 * 補充 [SEO metadata](https://yiting-yang.notion.site/SEO-metadata-2c6e990ba5714daeaf2708f93810a8d9) ``` Sam用cyperss寫自動打卡程式,跑Shell Script 1. cron ( crontab )- Linux 系統排成工具 2. Apify- 可線上排程跑 Cypress 腳本 3. Zod- runtime 型別資料驗證工具 ``` # Appworks 讀書會 ## Week 0 ### 什麼是 [css specificity](https://muki.tw/tech/html-css/css-specificity-document/)? #### 原則上由小到大, `.class`最小 CSS Specificity 是 CSS 中用來決定一個元素呈現樣式的重要概念。它代表了一個樣式選擇器的特殊性,告訴瀏覽器在一堆有爭議的樣式選擇器中哪個會被應用到元素上。 #### Specificity 分為四個部分計算: 1. Inline styles 每個內聯樣式都給了 1000 分。 2. `#id`每個 ID 選擇器都給了 100 分。 3. `.class`, `[attribute]`, `:pseudo-class`,每個選擇器給了 10 分。 4. 標籤選擇器 `<tag>`(element)和伪元素選擇器(`::before`, `::after`),每個選擇器給了 1 分。 #### 其他方式可以影響 Specificity 的值: 1. `!important`:如果一個樣式有 !important,它將強制優先選擇,即使它的 Specificity 較低也是如此。 2. 樣式繼承(style inheritance):父元素的樣式會被繼承到子元素上,因此在沒有其他干擾的情況下,子元素的樣式將繼承父元素的樣式。 #### 查看元素的 Specificity 值 * 開發者工具:大多數現代瀏覽器都內置了開發者工具,您可以在其中查看每個元素的樣式並查看它的 Specificity 值。 * CSS Specificity Calculator:您可以在線使用 CSS Specificity 計算器,輸入樣式選擇器並查看它們的 Specificity 值。 #### CSS 管理方法 * BEM Block Element Modifier, BEM 的名称代表了块(Block)、元素(Element)和修饰符(Modifier)。它通过使用特定的约定和语法,使 CSS 的代码结构更加清晰和易于理解。 * SMACSS Scalable and Modular Architecture for CSS 把 CSS 分为五个不同的类别:基础,布局,模块,状态和主题。这些类别用于组织 CSS 代码,使 CSS 的代码结构更加清晰和易于理解。 * OOCSS (Object-Oriented CSS)OOCSS 的主要理念是将 CSS 样式视为对象,并通过创建通用的 CSS 类来使用这些对象。这种方法帮助开发人员减少代码的冗余,并提高代码的可读性和可维护性。 OOCSS 还提倡使用结构和皮肤技巧来分离外观和结构,以便使代码更具可重用性。使用 OOCSS 的一个优点是,可以在不改变代码结构的情况下修改样式,从而使 CSS 代码更具弹性和可维护性。 ### Reset vs Normalize CSS #### Reset.css 是一個極端的 CSS 文件,它將所有的瀏覽器預設樣式設為 0,以確保所有元素在各個瀏覽器中具有相同的樣式。這樣做有助於消除瀏覽器之間的差異,但是將所有東西設置為 0 可能會造成問題,因為你需要手動重新定義風格。 #### Normalize.css 是一個更加保守的 CSS 文件,Normalize.css 比 Reset.css 更加普遍,它保留了瀏覽器的一些預設樣式,但是通過對瀏覽器之間的差異進行調整,以確保所有元素在所有瀏覽器中具有相似的樣式。這樣做保留了一些可讀性和預設風格,同時也確保了所有元素的可移植性。 ### Git flow 工作流程有哪些分支?各是做什麼的? [git flow](https://gitbook.tw/chapters/gitflow/why-need-git-flow) ![](https://i.imgur.com/s3ylfrZ.png) * Master 分支:存储了当前的稳定版本,包含当前生产环境代码。 * Develop 分支:存储了当前的开发版本,功能分支的合并点。 * Feature 分支:用于开发新的特性,在完成后合并到 Develop 分支。 * Release 分支:用于完成一个版本的最后测试和修订,用于将代码准备发布到生产环境,在完成后合并到 Master 和 Develop 分支。 * Hotfix 分支:用于快速修复当前生产版本的紧急问题,在完成后合并到 Master 和 Develop 分支。 #### 情 * develop 分支 remote端: 是公司github帳號,feature開發完後發PR,主管審核完成會mearge local端: 主管審核完成後再從remote端pull到local端的develop分支,完成task * feature 分支 開發新feature用的分支,必須從remote端的develop分支先pull到local端,再從local端的develop分支長新的feature #### Beta版本是什麼? 通常是Release分支上 Alpha版 內部測試完後 的外部測試版 內部測試或封測會在不同的環境(同樣的github,不同的伺服器和資料庫,前後端一起般過去) ### 好的 commit message 怎麼寫?多久 commit 一次? [Conventional Commits](https://www.conventionalcommits.org/en/v1.0.0/) 1. 简洁明了的说明提交的目的:commit message 应该清晰地说明提交的代码的作用和意图。 2. 使用现实语言:commit message 应该使用简洁明了的现实语言,避免使用技术术语。 3. 避免使用缩写:为了保证易读性,避免使用缩写。 4. 第一行不超过 50 个字符:第一行应该简洁明了,不超过 50 个字符,方便在提交历史中快速浏览。 5. 想寫多行commit可以用shift+空格, 或是不加`-m`會進入vim模式 关于 commit 频率,没有固定的时间间隔,你可以根据代码提交的数量和质量来决定提交的频率。一般来说,提交越频繁,代码更容易被团队成员管理和协作。但是,如果提交过于频繁,也可能导致提交历史难以管理和查询。因此,建议每次提交的代码数量和质量尽量保证。 ex: 完成一个明确任务后立即commit代码 每天commit一次代码 每次commit前进行 code review,以确保代码的质量。 * [**binary search**](https://medium.com/appworks-school/binary-search-%E9%82%A3%E4%BA%9B%E8%97%8F%E5%9C%A8%E7%B4%B0%E7%AF%80%E8%A3%A1%E7%9A%84%E9%AD%94%E9%AC%BC-%E4%B8%80-%E5%9F%BA%E7%A4%8E%E4%BB%8B%E7%B4%B9-dd2cd804aee1) #### 整理 commit * [`git rebase -i`](https://gitbook.tw/chapters/rewrite-history/merge-multiple-commits-to-one-commit) 預設會進入vim模式,整理commit好用 [什麼是 ORIG_HEAD 和 HEAD](https://blog.csdn.net/dss886/article/details/39271645) * `git push -f` 強制push 因為 Rebase 等於是修改已經發生的事實,所以若已經push後才整理commit, 那在rebase後是推不上去的。可用此指令解決, 但只能用在自己身上。 ### 比較 git rebase 和 git merge 都是用于合并分支的 Git 命令。但是,它们的工作方式和结果是不同的。 #### git rebase 合并分支时将当前分支的历史重写为另一分支的历史。它会将当前分支的提交记录移到另一分支的末尾(checkout feature分支, 在feature分支上rebase Develop)。这样,提交历史就会变成一条直线,看起来比较整洁 ``` A - B - C (branch 1) \ D - E - F (branch 2) A - B - C - D - E - F (branch 1 after rebase) ``` * 等於做多次的[cherry-pick](https://zlargon.gitbooks.io/git-tutorial/content/branch/rebase.html) * git rebase衝突 使用 git rebase 时需要注意,如果在原始分支上进行了更改,则可能会导致冲突。 解決方法: 1. 查看衝突:在執行 git rebase 時,如果遇到衝突,Git 會停止並提示衝突的檔案。 2. 解決衝突:打開衝突的檔案,手動解決衝突並保存。 3. 確認解決衝突:使用 "git add" 指令將解決衝突的檔案加入暫存區,再使用 "git rebase --continue" 指令繼續 rebase 流程。 4. 重複上述步驟直到所有衝突都被解決。 #### git merge 将两个分支的历史合并在一起,并创建一个新的commit。(誰merge誰沒差)这会在提交历史中生成一个合并点,并保留**原始分支的历史**记录。 ``` A - B - C (branch 1) \ D - E - F (branch 2) \ G (merge commit) ``` * fast-forward: 當分支 A 向分支 B 合併時,如果分支 B 是分支 A 的直接祖先,則 Git 會自動將分支 A 向前移動到分支 B 的位置,不會產生新的合併提交。這種合併方式比較簡單,不會產生分歧。 * non-fast-forward: 當分支 A 向分支 B 合併時,如果分支 B 不是分支 A 的直接祖先,則 Git 會產生新的合併提交,以紀錄分支 A 和分支 B 的合併過程。這種合併方式比較複雜,會產生分歧,但更能保證分支的完整性。 #### pros & cons git rebase 更适合在开发过程中合并分支,以便在团队协作时保持提交历史的整洁。記錄會比較乾淨。遇衝突會改動commit紀錄,不適合處理別人的分支 git merge 更适合在合并分支之后合并历史,以便保留原始分支的历史记录。比較能追溯歷史。 ## Week 1 #### Trunk based git flow #### 技術選型 #### 測試 * 自動化測試 * unit test * BigO:表示演算法的效率(複雜度) ### Array Method `push`, `pop`, `reverse`, and `sort` will mutate the original array, but `slice`, `filter`, and `map` will create a new one. #### `.reverse` 有ppt #### `.pop` #### `.join` ![](https://i.imgur.com/I5qb3iW.png) #### prototype的概念可以看 chrome可以看這個type有哪些方法 ![](https://i.imgur.com/RrulqUV.png) #### 範型,array-like #### shallow copy / deepcopy * 會改變本來array的method很危險,盡量不要mutate #### [reference](https://codeburst.io/javascript-passing-by-value-vs-reference-explained-in-plain-english-8d00fd06a47c)的概念 ## Week 2 #### [spread Operator 展開運算子](https://hackmd.io/@yiting444/By6PFTc9o) [運算子順序](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Operator_Precedence):通常不會去記順序,所以寫程式時會用`()`把優先順序包起來(為了幫助人理解) 淺拷貝,不更改原陣列 深拷貝,第二層變成傳參考,會更改到原陣列 #### `.concat()` spread Operator的前身 #### `.find()` #### `.flatMap()`:flat+map,順序:先處理map,再flat攤平 參數:map的callback,flat只能攤一層 * `.flat()`攤平一層array,會忽略空值,保留空字串 `.flat(層數)`可以指定要攤幾層,`infinity`會全攤平 #### [`.call()`](https://developer.mozilla.org/zh-TW/docs/Web/JavaScript/Reference/Global_Objects/Function/call) array-like object無法直接套用array method,要透過`.call()`來使用 #### `new Set(arr)`:抓取唯一值 #### `.filter()`: return值是array #### `.some() / .every()` some: arr裡面有沒有? every: arr裡是否全部都有? #### 共用的function 可以拆成一個獨立的js檔案,HTML裡先載入或用module import 常用命名: utils.js / common.js / helpers.js / lib.js ``` //lib.js function fetchData (url) { return fetch(url).then(res => res.json()); } //index.js import { fetchData } from './lib.js'; fetchData().then(json => {}); ``` * function沒有return的報錯:`//reading properties of undefined (reading 'then')` #### flex vs grid * grid屬性可以幾乎設在父層 * flex也可以用gap #### `.fill(value)` 沒有value時會填入undefined 會改變原本的array 傳入的value為object或array時 -> copy reference (是淺拷貝,填入的值都指向同一個object或array) 製造長度為n,內容都一樣的Array ``` Array(n).fill("歐耶!") ``` #### `.includes(value)` Case sensetive #### `Array.from()` 第二個參數可以放function #### `indexOf vs findIndex`&資料型別(Data Type) [簡報](https://www.notion.so/samselflearning/IndexOf-a2b52985493c440eb5174a1595f291ba?pvs=4) indexOf: 只能帶值,不能比對object type findIndex: 可以帶一個function,可以進到object裡去比對值是否相翁 #### 工作流程: ![](https://i.imgur.com/uV0IRvG.png) ![](https://i.imgur.com/9FgfNLX.png) ![](https://i.imgur.com/zGnDGKY.png) ## Week 3 #### 後端相關關鍵字 狀況:後端伺服器壞了,目前AWS只租一台(目前租的RAM跟HD都比我們的電腦還差) * [redis](https://redis.io/) 後端常用cache服務,資料是存在RAM記憶體(DB是存在硬碟裡,撈資料比較慢) * cookies也是存在RAM * CDN是cache的進階版 * load balance也是一台電腦,如果有租多台伺服器,這台電腦會負責把流量分散到不同的伺服器 * AWS 有自動擴載服務Auto Scaling * EC2:AWS的租電腦服務 Compute Engine:Google的 * S3:給工程師的雲端的硬碟 * SQL類似excel的vb最基本的語法:`select * from` * MySQL / MongoDB: 可以用SQL語法查詢的DB #### error log:實務上會把error message存到一個地方,如果網站壞掉可以用來查紀錄 ### 會員系統 網站會幫每個帳號建立獨特的id id的產生會用亂數 #### 註冊 * 使用者輸入帳號密碼 -> 存到DB一個叫USER的資料表,並發一個id給他 * 密碼不會明碼存進去,會加密(有很多加密方法,例如sha但不知道這個網站用什麼) * 加鹽: 加密前加一點鹽,讓加密後產生的結果不同 #### 記住使用者 local storage是公開的,通常不會直接儲存帳號密碼 * AppWorks使用jwt token,可以有過期機制 #### FB login * [OAuth](https://medium.com/%E9%BA%A5%E5%85%8B%E7%9A%84%E5%8D%8A%E8%B7%AF%E5%87%BA%E5%AE%B6%E7%AD%86%E8%A8%98/%E7%AD%86%E8%A8%98-%E8%AA%8D%E8%AD%98-oauth-2-0-%E4%B8%80%E6%AC%A1%E4%BA%86%E8%A7%A3%E5%90%84%E8%A7%92%E8%89%B2-%E5%90%84%E9%A1%9E%E5%9E%8B%E6%B5%81%E7%A8%8B%E7%9A%84%E5%B7%AE%E7%95%B0-c42da83a6015)(第三方登入): 免註冊就可以登入的流程 * 跟fb拿完資料後會在自己STYLiSH的DB建資料,並發給使用者STYLiSH的jwt token * 前端會把STYLiSH的jwt token存到local storage,下次進入網頁就可以使用token直接登入 * local storage有分domain(A網站從程式面無法拿到B網站的local storage資料,但有人還是能鑽漏洞) #### 前端常遇到的安全性問題 * [XSS](https://medium.com/hannah-lin/%E5%BE%9E%E6%94%BB%E6%93%8A%E8%87%AA%E5%B7%B1%E7%B6%B2%E7%AB%99%E5%AD%B8-xss-cross-site-scripting-%E5%8E%9F%E7%90%86%E7%AF%87-fec3d1864e42) * [CSRF](https://tech-blog.cymetrics.io/posts/jo/zerobased-cross-site-request-forgery/) * innerHTML很危險 * 社交工程(防範內部人員) * 因無法保證使用者一定是透過前端介面輸入資料(可能透過post man)所以驗證做在userInput到DB最有效 * [dangerouslySetInnerHTML](https://zh-hant.reactjs.org/docs/dom-elements.html#dangerouslysetinnerhtml):react會去擋類似innerHTML的行為,但可以透過這個api做insert ### Lighthouse ![](https://i.imgur.com/gJ6iFs3.png) #### PWA * 技術門檻高 * (手機端)網頁“加入主畫面”可安裝成類似手機app, * 透過暫存機制可離線使用 * 網頁縮小後可在背景執行(可以使用通知) ## Programming Paradigm OOP / FP 共通點:避免Shared mutable state ### 命令vs宣告 Imperative programming:命令式,一行一行執行下去(高效) Declarative programming:宣告式,我告訴你怎麼做,實做的過程我不在意,給我結果(抽象) ### OOP * 封裝:很好用,把資訊(內部運作)隱藏起來,提供一個介面 如:MVC架構,登入功能,Components or Custom Hooks * 繼承和多型用classc語法會比較方便(用extend),用object要解構再return * 封裝和繼承(不要超過兩層)太多層都會不好維護 * 重點是object之間要怎麼傳遞訊息 * S.O.L.I.D 原則 open-closed:不要去改原本object的介面,多寫一個比較好 linkov subtitution:繼承要保持一致 ### FP * pure function:根據imput回應output,避免side Effect(無法預測)會較好測試 * Immutability:避免非預期的改動 * Declaritive:[Ramda](https://ramdajs.com/) | [Lodash](https://lodash.com/)套件 * React也是根據FP設計的 ### 各自Shared mutable state解法 * OOP: Mutable state,透過interface溝通,各自有各自的state * FP: Shared state,不改變外部的state ## 資料結構&演算法 資料結構:管理/儲存/安全性/處理速度 #### 大區塊結構 * array:在記憶體上是連續的空間 排序/二分搜尋法 #### 小區塊結構 * tree:二元樹/多元樹 * linked list:一個連一個 * hash table:混合 ### Linked List #### single linked list 特色:只記開頭(head),開頭會指向下一個點,一個一個串起來(tail) * insert的概念:W>A>N>E要插入Y 1. 從W先開始找 memory leak:指向的順序錯誤 #### double linked list 特色:連結是雙向,指向上一個&下一個,可以記頭(head)跟尾(tail) * insert的概念:W>A>Y>E要插入N ### Hash Table(雜湊表) sha,處理碰撞用linked list hash function ``` class Node { constructor(value,next = null) { this.value = value; this.next = next; } } class LinkedList { constructor(head=null) { this.head = head } append(node) { if(this.head){ let current = this.head; while(current.next){ current = current.next; } current.next = node; } else { this.head = node; } } get(value) { let current = this.head; while (current.value !== value){ current = current.next; if(!current.next){ return null; } } return current; } remove(value) { //TODO:let prevNode let current = this.head; while (current.value !== value){ current = current.next; } current = null; } insert(value, node) { let current = this.head; while (current.value !== value){ current = current.next; } node.next = current.next; current.next = node; } } const linkedList = new LinkedList() linkedList.append(new Node(1)) ``` ## 技術選型 [選無聊的技術](https://boringtechnology.club/index_zh_TW.html?fbclid=IwAR2focRPokrCWXYoJMs5dPItkwPFMxzKEbDH2BGxZ9HCw8Zsf8FFFN0vv-o) ## Algorithm 101 [演算法視覺化](https://visualgo.net/en) 1. 有邏輯性的依照 **步驟** 解決特定問題 2. 每個步驟都要 **明確**, **能執行** 3. 如果 **無法停止** ,就不算演算法 ### Log複習 一般log的base會用2,10 ![](https://i.imgur.com/eLwuvj4.png) [BigO cheat sheet](https://www.bigocheatsheet.com/) ## Network 101 超讚 ## Recursion 俄羅斯娃娃 * Bing - Bing is not google的縮寫 遞迴資料結構: ``` const obj={}; obj.self = obj; console.log(obj); // JSON.stringify(obj); //會報錯 ``` #### Alogrithms + Data Structure = Programs 遞迴實際上沒辦法無限次的跑下去(記憶體限制) #### 常見題目 印出1-10 ``` function print(min,max){ console.log(min); if(min>=max){ return } print(min+1,max); } print(1,10); ``` 階乘 ``` 數學關係式: n! = n * (n-1)!; 終止條件: 1! || 0! function factorial(n){ if( n === 0 ) return 1 return n* factorial(n-1) } ``` 河內塔:最少步數 ``` //動4=動3*2+1 //動3=動2*2+1 //動2=動1*2+1 //動1=1 //先取得關係式和終止條件,就能轉成程式碼 function f(n){ if (n === 1) return 1; return f(n-1)*2+1; } const result = f(5) console.log(result); ``` 費氏數列:第n個是什麼數? 關係式:f(n)=f(n-1)+f(n-1) ``` //終止條件 function fibo(n){ if(n < 2) return n; return fib(n-1) + fib(n-2); } const resault = fibo(8); ``` #### Memoization 遞迴計算過程中有很多重複的計算,把值存下來,可以提升時間複雜度 #### Tailcode ### 寫遞迴最需要注意終止條件 ## Refactor & UnitTest [FridayTalk Refactor](https://github.com/AppWorks-School-Materials/FridayTalk_Refactor) 1.改善可讀性/重用性/程式碼結構 2.確保行為不會被改變->測試 [Refactor 共筆](https://samselflearning.notion.site/Refactor-cc170f27f15647d0a10f541309f48540) ## Big O定義 * 時間複雜度描述的是**算法執行所需的時間量**,與算法執行所需的總次數無關。 * 空間複雜度描述的是**算法執行時所使用的額外空間量**,與算法執行所需的總空間量無關。 ## Binary Search 題目:704.Binary Search 遞迴/while版本各寫一次,用白板寫 ## i18n [工作坊](https://separate-tempo-553.notion.site/react-i18next-5c4104ccc6494f379dd370c18684fc65) ## Sort ( O(n^2) ) 題目:75.Sort Color * JS的`Array.sort()`:現在都是stable sorting,但實作方法不一定相同 沒有要學演算法,用這個就可以 * Bubble sort:前後比較,可優化:如果沒有動到順序,可以直接結束 * Selection sort:比一輪,把最小值換到最前面 * Insertion Sort:分成沒排序/已排序,拿未排序好的第一筆跟已排序好的最後開始比較,拿出來再插入 ### Merge sort 題目:912.Sort an Array Divide and Conquer algorithm / ( O(n logn) )/ stable 1.切切切切到底,回頭合合合合出來 2.比較兩個陣列第一個誰大,和到新陣列 ### Quick sort 題目:912.Sort an Array Divide and Conquer algorithm / 最差:已排序Array( O(n^2) ) 最好:( O(n logn) )/not stable 1.隨機選中心點 2.比中心大的往左邊,比中心大的往右邊 ## Cypress cy run/cy open WebDriver:動態生成的元素不友善/透過不同瀏覽器操控,比較慢 [工作營](https://samselflearning.notion.site/Cypress-Workshop-9ac1284eecb948bb9cd762ccc11c7b9c) 怎麼抓到對應元素?多寫一個attibute: data-cy="..." 測試版/正式版?用某些方式去拿掉特定的attibute 非同步:[語法](https://docs.cypress.io/guides/core-concepts/retry-ability)如cy.getClick ## Vue 有很多前置knowledge需要知道 [Vue工作坊](https://bold-passbook-f2f.notion.site/Vue-workshop-174145e59221453aa1574c133f2ec673) [Vue VSCode Snippets](https://marketplace.visualstudio.com/items?itemName=sdras.vue-vscode-snippets): 創基本檔案架構 ## Hash Table( O(1) ) 題目:1.Two Sum / 705.Design HashSet / 706.Design HashMap [Hash概念](https://rickbsr.medium.com/%E6%B7%BA%E8%AB%87-hash-hashtable-%E8%88%87-hashmap-4e5f5e5d36da) | [Two Sum解題](https://ithelp.ithome.com.tw/articles/10269246) 用ASCII嗎去計算對應array裡的值 ### HashMap [Map](https://developer.mozilla.org/zh-TW/docs/Web/JavaScript/Reference/Global_Objects/Map) | [.has()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map/has) ## Two Pointer 題目: 217.Contains Duplicate / 26.Remove Duplicates from Sorted Array / 167.Two Sum II - Input Array Is Sorted / 11.Container With Most Water / 977.Squares of a Sorted Array ## Stack & Queue 題目: 20.valid-parentheses / 150.Evaluate Reverse Polish Notation / 232.Implement Queue using Stacks ## #[promptInjectionAttack](https://www.inside.com.tw/article/31695-ChatGPT-API-Plugin-Prompt-injection-attack) [chatGPT攻擊](https://systemweakness.com/new-prompt-injection-attack-on-chatgpt-web-version-ef717492c5c2) ## Tree 題目: 94.Binary Tree Inorder Traversal DFS適合用Stack資料結構 BFS適合用Queue資料結構 ## Graph Tree是一種Graph特化的形式 ## String(很難) 題目: 208.Implement Trie (Prefix Tree) String是字組成的array Prefix Tree / Trie:用字組成的一棵樹 [KMP](https://yeefun.github.io/kmp-algorithm-for-beginners/) LPS:直接去檢查自己種的一棵樹(耗能但後面的搜尋更快速) # Dynamic Programming “不想做重複的事情,但不知道要怎麼省時的時候” 動態規劃,面對複雜沒有答案的問題,用在時間複雜度很高的程式,用空間換時間,找最優解 最精華的code會在動態轉移方程式(子問題需要父問題的哪些資訊才能解)

    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
    Sign in via Facebook Sign in via X(Twitter) Sign in via GitHub Sign in via Dropbox Sign in with Wallet
    Wallet ( )
    Connect another wallet

    New to HackMD? Sign up

    By signing in, you agree to our terms of service.

    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