使用微信公眾號開發模擬面試功能
最近在整理我在大廠面試以及平時工作中遇到的問題,記錄在 shfshanyue/Daily-Question 中,但覺得對於時時回顧,常常複習仍然做的不夠。
於是在微信公眾號中開發了隨機生成模擬面試的功能,由於覺得比較簡單且有趣,於是分享了出來
需求
先來談一談需求點:
- 在公眾號中回覆面試,隨機生成 N 道大廠面試題
- 每道面試題指向一個超連結,可以檢視答案
需求很簡單,如圖下所示。你也可以去我的公眾號 全棧成長之路
檢視實現效果
內容
在大部分行業中,內容是至為重要的,有內容才會有好的服務,而技術只是整合內容的一種手段。
在本次功能開發中也是如此:一個面試題庫才是至關重要。
為此,我在 github 上新建了一個倉庫,使用 Issue
每天一道面試題,有關前端,後端,devops以及軟技能,促進職業成長,敲開大廠之門。
到此一步,我擁有了自己的內容,並且擁有了開箱即用的後臺管理系統: github issues
資料
此時我們已經擁有了一個特殊的後臺管理系統,但很遺憾,由於該管理系統的特殊性,我們並不是資料對映管理系統,而需要根據 Github Issues 來生成結構化的資料,好在我們可以使用 Github API。
Github API 現在已經全部變成了 GraphQL
介面,看來大家又需要學習一門新的技術了。關於 Github API 的文件可以在這裡找到: Github API Explorer
以下 Query 就是我們所需要的資料
query ISSUES ($after: String) { repository (name: "Daily-Question", owner: "shfshanyue") { id issues (first: 100, after: $after, states: OPEN) { pageInfo { hasNextPage endCursor } nodes { id number title body comments (first: 10) { nodes { id body star: reactions (content: THUMBS_UP) { totalCount } author { login url } } } labels (first: 5) { nodes { id name } } } } } }
微信開發
在微信開發中,定義一條路由,用來處理對關鍵字 面試
的回覆
const routes = [{
default: true,
handle: handleDefault
}, {
text: /面試/,
handle: handleInterview,
}]
根據封裝好的 Issue SDK 隨機選取八個問題,更多程式碼可以前往 shfshanyue/wechat 中
function handleInterview () {
return issue.randomIssues(8).map((issue, i) =>
`<a href="https://github.com/shfshanyue/Daily-Question/issues/${issue.number}">${i+1}. ${issue.title.slice(6)}</a>`
).join('\n\n')
}
自此微信開發結束,開始部署專案
部署
開發完成之後使用 docker
及 docker-compose
部署,traefik
做服務發現及負載均衡。
如果你對它們不夠了解,可以檢視我的系列文章 個人伺服器運維指南 的案例篇,關於 docker
,compose
及 traefik
等基礎設施的搭建均在本系列中有所介紹。
在生產環境中,通過 https://we.shanyue.tech
暴露服務。
在測試環境中,需要監聽檔案重啟。在測試環境通過掛載目錄的方式在 https://we.dev.shanyue.tech
暴露服務。
Dockerfile
較為簡單,配置檔案如下
FROM node:10-alpine
WORKDIR /code
ADD package.json /code
RUN npm install --production
ADD . /code
CMD npm start
docker-compose.yaml
配置檔案如下
version: '3'
services:
wechat:
build: .
restart: always
labels:
- traefik.http.routers.wechat.rule=Host(`we.shanyue.tech`)
- traefik.http.routers.wechat.tls=true
- traefik.http.routers.wechat.tls.certresolver=le
expose:
- 3000
networks:
default:
external:
name: traefik_default
測試環境與生產環境
當我們需要測試微信公眾號時,直接使用自己的公眾號不太合適,特別是當已有上線內容時。微信官方提供了測試公眾號,我們可以重新填寫 域名
以及 token
。在測試環境使用域名 https://we.dev.shanyue.tech
我們在 docker-compose
中使用 service
中的 wechat
代表生產環境,wechat-dev
代表測試環境
wechat-dev
通過檔案掛載提供服務,可以更新重啟應用,便可以做到實時更新程式碼,並實時在測試公眾號中看到效果。
docker-compose.yaml
配置檔案如下
version: '3'
services:
wechat:
build: .
restart: always
labels:
- traefik.http.routers.wechat.rule=Host(`we.shanyue.tech`)
- traefik.http.routers.wechat.tls=true
- traefik.http.routers.wechat.tls.certresolver=le
expose:
- 3000
wechat-dev:
image: 'node:10-alpine'
restart: always
volumes:
- .:/code
working_dir: /code
command: npm run dev
labels:
- traefik.http.routers.wechat-dev.rule=Host(`we.dev.shanyue.tech`)
- traefik.http.routers.wechat-dev.tls=true
- traefik.http.routers.wechat-dev.tls.certresolver=le
expose:
- 3000
networks:
default:
external:
name: traefik_default
關於後端程式碼,託管在 shfshanyue/wechat