Albert Chen

Albert Chen

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

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

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

PHP 也有 Day #33 - Swoole: 重新定義 PHP

這次有幸受邀擔任九月份 PHP 也有 Day 的講者來分享關於 Swoole 的一些基本應用。在這裡分享演講簡報與範例 Repo。 議題大綱 1. Swoole 的入門介紹與基本應用 * Swoole 簡介 * 安裝與編譯 * HTTP Server * Websocket Server * Async IO * Memory Table * Coroutine 2. Swoole Server 模型架構解說 * Master * Reactor * Manager * Worker * Task Worker 3. 如何透過 Swoole 讓你的 PHP 效能飛高高 * Database Connection Pooling * Speed up your Laravel App with
1 min read
UniMD 開發紀錄 (一)

UniMD 開發紀錄 (一)

前言 由於 HackMD 提供了非常好用的線上 Markdown 共筆平台,但我們公司內部自己使用上還有其他想達到的需求,如:進階檔案共享權限、團隊的概念、檔案資料夾管理、筆記備註等功能,於是我們就決定仿效 HackMD 自己重新開發屬於自己的一套 UniMD。 開發技術 我們團隊熱愛 PHP 語言和擅長 Laravel 框架,所以和 HackMD 所採用的 NodeJS 不同,我們採用 PHP 為主要開發的技術,並且搭配 Swoole 做為我們的 WebSocket Server 及其他進階的異步應用。 關於 Websocket 在 NodeJS 中要使用 WebSocket 非常方便,前後端只需要同時使用 socket.io 這個 package 就能夠快速建立起一切你要開發 WebSocket
6 min read
PHP 的性能猛獸 - Swoole
swoole

PHP 的性能猛獸 - Swoole

前言 PHP 發展至今已經 20 餘年,現今許多網站有相當高的比例都是以 PHP 所建構而成,然而一直以來 PHP 為人所詬病的就是他的效能問題。尤其是現今許多的開發框架雖然強大優雅,但同時也因為框架的複雜度讓 PHP 的效能更加倍放大來檢視,甚至成為許多人不選擇使用框架開發的原因。 雖然在新版的 PHP 7 中比起以往效能上有重大的突破,但在大多數人眼中 PHP 似乎始終都不是以效能為考量時的主要首選開發語言。但是接下來要介紹的 Swoole 可能會讓你重新定義 PHP,甚至更加倍地愛上他。 PHP 面對大流量或高效能需求時,也有既有的許多解決方案,但不在本篇文章的主題內,故不細加說明。 Swoole 簡介 首先,Swoole 這個名字源自於作者起出的名字 sword-server,意即希望為廣大的 PHP 開發者創造出一把鋒利的劍,後來又參考 google 的字將sword-server做變形變成了 Swoole 這個名字。  Swoole 並不是一個新的程式語言,他是一個以純
6 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