Albert's Blog

Albert's Blog

A technical blog to share my personal development notes.

PHP/後端工程師學習與面試指南
backend

PHP/後端工程師學習與面試指南

前言 每位後端工程師的工作資歷、工作環境與學習經歷都不一樣,大家心中對於後端工程師應該具備什麼技能、學習路線規劃和程度上 Junior/Senior 的定義也不相同。 本文旨在分享筆者個人在這幾年在軟體開發一路上學習路線的經驗,與近幾年累計大約超過百人以上的面試經歷提供大家在學習路線和未來面試過程中有個參考依據。 文章標題命名為 PHP/後端工程師主要是個人工作經歷上習慣使用的主要語言為 PHP,但是本文的內容也能適用在其他後端語言(如:NodeJS, Golang, Python 等),應該說 PHP 和其他語言的工程師除了使用語言的表層差別外,本質上在 Web 中所面臨與要解決的後端問題其實相去不遠。 工程師職級定義 在不同行業或公司中對於工程師 Junior 與 Senior 定義的標準都不相同,為了對齊下面段落中對於職級標準,本文借用 Avance Venture Lab 所分享的工程師職級定義,由比較抽象的層次來定義不同職級的標準: avancevl.github.io/_main/people/engineering_level.md at master ·
18 min read
在 PHPUnit 中測試 protected 和 private 方法
php

在 PHPUnit 中測試 protected 和 private 方法

前言 就理論上沒有理由要針對已封裝的方法進行測試,對於那些 protected 和 private 方法一般會採取間接的測試方法。意即透過測試 public 方法來驗證裡面所呼叫的封裝方法是否符合預期邏輯,而對外部使用者來說,針對 public 方法的單元測試便會順便包含到這些封裝方法的測試,封裝方法本身就是 public 方法的一部分,他們也不需要去分辨哪些是封裝過的邏輯,因為只需要關注 public 方法即可。 封裝本身代表著:針對外部使用者本來就不需要了解,也根本不了解的成員或方法進行隱藏。單元測試本身就是模擬外部使用者的動作,那當然也只需要對測試目標 public 的方法進行模擬與驗證。 如果你發現測試 public 方法無法協助你測到所有想測試的封裝方法,大部分代表在設計本身上就有問題或是那些 protected 和 private 方法在現階段是沒有必要的,屬於 over design。 這其實也是 TDD 提倡的精神,如果全部的測試都符合預期,就代表功能完成了。而且按照測試來撰寫的程式,幾乎不會出現測試無法涵蓋的程式,因為程式本來就是為了滿足測試而撰寫的。
3 min read
Swoole - 基本概念
swoole

Swoole - 基本概念

Process 與 Thread Process(行程、進程、處理程序)與 Thread(執行緒、線程)是作業系統中相當重要的概念。因為他們相對比較抽象,且通常 PHP 開發者對於兩者的概念較薄弱,但是在 Swoole 開發中會運用大量 Process 與 Thread 的觀念,所以在開始學 Swoole 之前對於他們必須有基本的了解。 Process Process 是一個程式執行後實體化的概念,在分時系統年代中 Process 是程式運作的基本單位。一個程式可以產生多個 Process(一對多關係),若干 Process 有時可能與同一個程式相關聯,且每個 Process 皆可以同步(循序)或非同步(平行)的方式獨立執行。Process 需要一些資源才能完成工作,如:CPU、記憶體、
8 min read
在 Laravel  實現自動 Refresh JWT 機制
laravel

在 Laravel 實現自動 Refresh JWT 機制

簡介 JWT JSON Web Token (JWT) 是由 Auth0 於 2015 年所提構出的一個新 Token 機制,嚴格來說 JWT 並不是一個新的技術或軟體,而是一套規範(RFC-7519)。基本上 JWT 包含以下三種資訊: * Header {"alg":"HS256","typ":"JWT"} * Payload {"loggedInAs":"admin","iat":1422779638} * Signature key = 'secretkey' unsignedToken = encodeBase64Url(header) + '.' + encodeBase64Url(payload) signature = HMAC-SHA256(key, unsignedToken) 以上資訊最終會被以 . 的符號組成一段 JWT Token encodeBase64Url(
5 min read
透過 Swoole 加速 Laravel 效能
swoole

透過 Swoole 加速 Laravel 效能

Laravel 的速度瓶頸 雖然 Laravel 非常的強大與優美,但是對於 PHP 這種直譯式腳本語言來說,像 Laravel 這種複雜及龐大的框架會使得速度比起原生的 PHP 還要慢上許多,常見的優化方式有以下幾種: * 使用 Laravel 提供的指令來做快取優化 php artisan optimize php artisan config:cache php artisan route:cache php artisan optimize 在 Laravel 5.5 中已經列為 deprecated,無實際作用(不需要了)。 * 使用 Opcahce 加速 PHP 在每次執行時都會由 Zend 引擎先編譯成 OpCode。最後 Zend 虛擬機再執行
4 min read
Swoole 相關學習資源整理
swoole

Swoole 相關學習資源整理

有鑒於 Swoole 學習資源在網路上較為分散,所以特地整理關於 Swoole 的一些學習資源供參考。 官方資源 * 說明文件:https://wiki.swoole.com/ * API 文件:https://rawgit.com/tchiotludo/swoole-ide-helper/english/docs/index.html * 討論區:http://group.swoole.com/ * 英文文件:https://github.com/swoole/swoole-docs 官方的文件資源可能有部分內容並不是最新版本的說明 非官方資源 * Awesome Swoole: https://github.com/swooletw/awesome-swoole * Easy Swoole:https://linkeddestiny.gitbooks.io/easy-swoole/
1 min read
PHP 的性能猛獸 - Swoole
swoole

PHP 的性能猛獸 - Swoole

前言 PHP 自 1995 年發展至今已將近 30 年,經過不斷發展迭代的 PHP 語言儼然與大家古老中刻板印象的概念大相逕庭。現今的 PHP 8 除了具備許多現代化的語法與特性外,在近 10 年中 Symfony 與 Laravel 等開發社群的持續蓬勃的發展加持下,Laravel 更是成為了在跨語言的 Web 框架中人氣居高不下的開源專案,加上原本的 Wordpress、Drupal、WooCommerce 等生態也使得 PHP 一直在現今 Web 系統中始終保持很高的使用占比。 由於 PHP 先天上程式運行模型的設計與 Blocking I/O 的特性,加上許多現代的熱門 Web 框架都內建了許多功能,使得 PHP 的效能問題常常變成大家的討論議題。事實上在 PHP 7
7 min read
在Laravel/Lumen中快速整合Invisible reCPATCHA
laravel

在Laravel/Lumen中快速整合Invisible reCPATCHA

前言 在上一篇的文章中,我們提到了今年Google宣佈推出最新版的機器人識別技術-Invisible reCPATCHA,而在這片文章中將教你如何快速的在你的Laravel專案中應用這項技術。 前端驗證指南 根據Google官方的文件指南看來,其實Invisible reCPATCHA的背後驗證的技術與前一代的no captcha應該不會相差太多,使用與前一代的API相同的引入位置: https://www.google.com/recaptcha/api.js,但既然Invisible reCPATCHA是完全隱形的,那該如何觸發進行驗證動作的時機呢? 其實很簡單,API只需要和你的submit button的送出事件綁定在一起,API即可在你正式送出表單資料前與Google的驗證伺服器完成驗證,以下為Google官方文件所提供的前端範例: reCAPTCHA demo: Simple page