owned this note
owned this note
Published
Linked with GitHub
---
tags: 程式研習社
---
# 程式社 108 下社課
地點:EC 9013
[TOC]
## 三月
### 專案開發 3/10
> 到場參與人:B063040050、B063040059、B073040047、B073012044、B084030022、B084020042、B083011026、B072040051、B072040042、B063040013、B063040046
<font size="6" style="font-weight: bold;">中山校務通</font>
> [name=房志剛]中山校務通
* 用爬蟲在顯示在手機上
* 爬蟲程式
* 協助瀏覽學校網頁
* HTTP Client端
* 版本
* 網頁
* 原生 (Native)
* 跨平台重寫
* 原生架構
* 原生的語言 ex: JAVA, Obj.c
* 原生程式碼 與元件溝通
* 元件(繪圖、事件)和硬體都由系統提供
* 不同的 Andriod 版本的系統提供的元件可能不同
* 跨平台
* 內嵌瀏覽器的架構(WebView)
* ex: Cordova
* JS (JavaScript) 寫繪圖和事件的部分
* 硬體由 JS 擔任橋接的程式碼,還是從原生程式碼去控制
* JS 映射
* ex: React-Native, Native Script
* JS 擔任橋接的程式碼,元件、繪圖、事件都是系統的
* 硬體部份同 WebView,也是擔任橋接,主要是原生的
* 簡單來說,寫 JS,但底下都是原生的
* (台下補充:因為要 compile,檔案通常比原生的肥很多)
* 自帶渲染引擎
* e.g. Flutter
* Flutter 使用的程式語言是 Dart
* 元件用引擎去渲染(EX: Flutter)
* 硬體一樣是自身擔任橋接,主要都是用原生的
* Flutter
* Mobile, Web, Desktop, Embedded
* 主要還是以 Mobile 為主,其他的還不穩定
* 校務通架構
* 使用 Firebase Server
* APP 主體是 Flutter
* HTTP Server 用 Python 寫 API (Flask 框架)
* 直接去爬校務網頁
* 校務通功能
* 中山只有課表、成績、基本資料
* 程式碼(介面)可以共用,不管是哪間學校的,基本上只差在爬蟲
* 功能加強(課表)
* 已知問題
* 課堂會重疊
* 時間範圍有誤
* 課堂只顯示兩個字
* 可延伸功能
* 自訂課表
* RWD(響應式界面)
* 上課提醒
* Firebase
* 只想寫前端,不想寫後端可以用
* 資料分析 (Analysis)
* 分析一些資料,EX 大家大多停留在哪一頁、使用者使用時間
* 雲端推播 (Clound Message)
* 就...推播?
* 崩潰分析 (Crashlytics)
* APP 閃退問題
* 遠端設定檔 (Remote Config)
* 部署 (Hosting)
* 可以部署在不同平台
* 例如 Flutter 可以用在 Mobile 和 Web,就可以部署在這些地方(高科校務通有網頁版)
* 中山不能寫網頁版,原因是 CORS 跨站請求(校務通直接對中山網頁發 request,官方目前無解,要解決只能自己寫一個爬蟲 server,變成請求自己的 server)
* CORS (Cross-Origin Resource Sharing)
* 怎麼加入
* 爬蟲
* 介面實作(Flutter + Dart)
* [開源專案](https://github.com/abc873693/NSYSU-AP)
* 介面設計(AI, PS, Ziplin)
* 資料分析或行為分析(By Firebase)
* 分析多少人使用,使用的人是什麼系...等
* 文件製作
* 功能測試 (內部測試)
* 宣傳
* 如果要寫介面/爬蟲
* [安裝 Flutter SDK](https://flutter.dev/docs/get-started/install)
* 學 Dart 基本語法
* [教學筆記](https://hackmd.io/@macs1207/rkLScjudE?type=view)
* 爬蟲
* HTTP, Dio, XML
* 找想爬的網站
* 介面
* [Widget catalog](https://flutter.dev/docs/development/ui/widgets), [Widget Livebook](https://flutter-widget.live/basics/introduction)
* [Dartpad](https://dartpad.dev/) 類似線上的 IDE
<font size="6" style="font-weight: bold;">實習經驗分享(找公司/履歷/面試)</font>
> [name=Rice]實習經驗分享(找公司/履歷/面試)
* Why實習?
* $$
* 未來找工作方便
* 學新技術
* 了解業界在做什麼
* 吃好吃的
* 公司分類
* 新創
* 小型:人數少、容易倒、程式能力強
* 中型:為了擴大產品招收新血,可能有點亂?
* 有一定能力,會教實習生怎麼做
* e.g. Dcard
* 大型
* 傳統產業
* 小型倒光ㄌ QAQ
* 中型
* 大型:做固定的事情
* e.g. 台GG
* 外商
* 偏重 資料結構與演算法
* 中型
* 大型
* e.g. Google
* 新創 vs. 傳產
* 新創偏重新技術,10年內的技術居多
* 傳產求穩定
* 找工作管道
* 104, Yourator, CakeResume, PTT, FB(最雜), Linkedin (外國人居多)
* 徵才博覽會、就業博覽會
* 問朋友是否可以內推
* 找工作技巧
* 公司名稱沒有很加分一律選擇支薪
* 心態:是否能和公司一起合作、對公司是否有幫助
* 流程
* 寫履歷優先,再去尋找有興趣的職缺
* 面試先選擇不重要的公司,比較想要的公司放後面面試
* 上了也不會去的放在前面,最想去的放後面一點
* 以利於提升面試的表現
* ==~~拉麵店很缺工程師喔XD~~==
* 寫履歷
* 外商要求全英文,也有中英都要
* 最好都投英文
* LaTeX template
* 一頁簡歷,一頁自傳
* 履歷內容
* 基本資料、部落格、GitHub
* 推薦要放 (放相關上去)
* 工作經驗(選擇相關的放上去)、學歷、競賽、技能樹、專案、研討會
* 工作經驗的敘述,大概做了什麼、專案等等
* 履歷如果太空
* 投遞目標、個人期望
* 面試
* 電話/實體面試
* 履歷上的東西都要準備好,可能會被問或要求DEMO (建議帶筆電)
* 白板題 (打聽該公司會怎麼面試,避免尷尬)
* 自我介紹(必備),1 min,通常還沒講完就被打斷ㄌ QQ
* 要問面試官什麼
* e.g. 經驗如何、可以學到什麼、問自己有關的問題
* 電話面試
* 詢問面試官是否可以晚點回撥
* 準備耳機、水
* 盡量找沒人的地方
* 實體面試
* 白板手寫 code (電話面試也有可能用 google doc)
* 提早到要準備聊天內容 (監介)
* 增進競爭力
* 多做 project,累積經驗
* 根據公司選擇放什麼 project
> [name=楊志璿]一些發現、想法跟討論
>> [東京都 新型コロナウイルス感染症対策サイト](https://github.com/tokyo-metropolitan-gov/covid19)
>> [口罩 2.0](https://github.com/PDIS/emask-static)
>> [jserv 作業](https://hackmd.io/0SMjfYhATgKtSek67F6q_Q)、[quiz 延伸練習](https://hackmd.io/@sysprog/linux2020-quiz3)
### 程式競賽 3/24
## 競賽常用 STL
> 簽到 M084112012、B083040012、B063040059、B063040049、B063040050
* Template 什麼資料型態都可以裝
* 容器本身是一種資料結構,因此可以宣告成資料型態
* 相較於array,vector無須固定大小,因此非常好用
* vector 擴展性高
| 功能 | 含意 |
| --------- | ------------------------------- |
| v.begin() | 回傳第一個 iterator |
| v.end() | 回傳最後一個之下一個的 iterator |
```C++=
#include <iostream>
using namespace std;
int main(){
vector<int> v = {1,2,3};
vector<int>::iterator it = v.begin();
while(it != v.end()){
cout << *it << endl;
it++;
}
return 0;
}
```
* 萬能標頭檔
`#include <bits/stdc++>`
includde C及C++常用的標頭檔
==pair==
* `#include <utility>`
```C++=
#include <iostream>
#include <utility>
using namespace std;
int main(){
pair <string, int> p;
cin >> p.first >> p.second;
p = {"Sophie", 18};
cout << p.first <<" "<< p.second;
return 0;
}
```
e.g.
```C++
vector< pair<int, string> > v(10);
for(int i=0; i<10; i++){
cin >> v[i].second >> v[i].first;
}
v[0] < v[1]; // 先比較 first 元素,再比較 second 元素
```
==stack==
比喻堆書
==queue==
* `include <queue>`
q.push()
q.front()
q.pop()
q.empty()
q.size()
迷宮問題:想像成淹水
==priority_queue==
`#include <queue>`
當作max-heap使用
由大到小印出
```C++=
#include <iostream>
#include <queue>
using namespace std;
int main()
priority_queue<int> pq;
for(int i=0, x; i<5; i++){
cin >> x;
pq.push(x);
}
while(!pq){
cout << pq.top() << endl;
pq.pop();
}
return 0;
}
```
由小到大輸出
```C++=
#include <iostream>
#include <queue>
using namespace std;
int main()
priority_queue<int> pq;
for(int i=0, x; i<5; i++){
cin >> x;
pq.push(-x);
}
while(!pq){
cout << -pq.top() << endl;
pq.pop();
}
return 0;
}
```
由小到大印出
```C++=
#include <iostream>
#include <queue>
using namespace std;
int main()
priority_queue<int, vector<int>, greater<int> > pq;
for(int i=0, x; i<5; i++){
cin >> x;
pq.push(x);
}
while(!pq){
cout << pq.top() << endl;
pq.pop();
}
return 0;
}
```
==set==
| 常見函數名稱 | 解釋用途 |
|:------------------------:|:---------------:|
| s.insert(val) | |
| s.find() | 元素是否有在set |
| s.erase(iterator or val) | 移除元素 |
| s.size() | 大小 |
使用時機
* 尋找比該數字還要大的第一個數字
==map==
```C++
#include <iostream>
#include <map>
using namespace std;
int main()
map<string, int> m;
for(int i=0, x; i<5; i++){
cin >> x;
pq.push(x);
}
for(auto i=m.begin(); i != m.end(); i++){
cout << i->first <<" "<< i->second << endl;
} // 或 for(auto i:m){...} 也行
return 0;
}
```
#### Algorithm
* `include <algorithm>`




## 四月
### 專案開發 4/14
> 因肺炎暫停
### 程式競賽 4/28
> 因肺炎暫停
## 五月
### 專案開發 5/19
***因本次課程延期後依然無人參與,故暫停乙次***
> 資料庫規劃簡介[name=Rice]
> 網頁遊戲製作簡介[name=Rice]
### 程式競賽 6/02
***因 CPE 遇上肺炎延期至 5/26 舉辦,故五月的程式競賽課程暫停乙次***
> 題目檢討[name=Rice]