---
# System prepended metadata

title: oj評論分享設計

---

# oj評論分享設計

## 構想

使用現有oj的session api在載入時確認是否登入，然後連接SQLite作為資料庫，並實作LRU緩存和記憶體分配器減輕資料庫和記憶體回收的壓力，外加nginx預防ddos。

## 功能

- 發表評論(對題目)
- 發表評論程式碼高亮(highlight.js)


## 後端

### 技術

- heap off快取系統
- ttl token

### 取得評論資訊

```flow
s=>start: 取得評論資訊
e=>end: 回傳資訊
n=>operation: nginx 防護
getorsetcache=>subroutine: 緩存處理
s->n->getorsetcache->e
```

### 緩存處理

```flow
s=>start: 緩存處理
e=>end: 回傳緩存
isincache=>condition: 在緩存裡?
loadsql=>operation: 從sql載入到緩存中

s->isincache
isincache(yes)->e
isincache(no)->loadsql->e
```

### 發表評論

```flow
s=>start: 發表評論
e=>end: 回傳結果
n=>operation: nginx 防護
islogin=>condition: 登入了?
savemsg=>subroutine: 儲存評論

s->n->islogin
islogin(yes)->savemsg->e
islogin(no)->e
```

### 登入檢測

```flow
s=>start: 登入檢測
e=>end: 回傳結果
hassession=>condition: cookie裡有session嗎?
checksession=>operation: 向oj伺服器確認session有效性:>http://mdcpp.mingdao.edu.tw/api/sessions[black]
isvaildsession=>condition: 是否有為有效session

s->hassession
hassession(yes)->checksession->e
hassession(no)->e
```

## 前端

### 技術

- markdown 渲染
    - 前端 [markdown it]+[highlight]
    - 後端 [github markdown]
- 嵌入pdf
    - [pdf.js]
    - [html5 object]
- 嵌入影片
    - [oembed]



<!-- 連結塞這 -->

[markdown it]:https://github.com/markdown-it/markdown-it
[highlight]:https://highlightjs.org/
[github markdown]: https://github.com/github/markup#github-markup
[pdf.js]:https://mozilla.github.io/pdf.js/
[html5 object]:https://stackoverflow.com/a/1244854/11729815
[oembed]:https://github.com/ybouane/markdown-it-oembed

