程式社 108 下社課

地點:EC 9013

三月

專案開發 3/10

到場參與人:B063040050、B063040059、B073040047、B073012044、B084030022、B084020042、B083011026、B072040051、B072040042、B063040013、B063040046

中山校務通

房志剛中山校務通

  • 用爬蟲在顯示在手機上
  • 爬蟲程式
    • 協助瀏覽學校網頁
    • 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)
    • 介面設計(AI, PS, Ziplin)
    • 資料分析或行為分析(By Firebase)
      • 分析多少人使用,使用的人是什麼系
    • 文件製作
    • 功能測試 (內部測試)
    • 宣傳
  • 如果要寫介面/爬蟲
  • Dartpad 類似線上的 IDE

實習經驗分享(找公司/履歷/面試)

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

楊志璿一些發現、想法跟討論

東京都 新型コロナウイルス感染症対策サイト
口罩 2.0
jserv 作業quiz 延伸練習

程式競賽 3/24

競賽常用 STL

簽到 M084112012、B083040012、B063040059、B063040049、B063040050

  • Template 什麼資料型態都可以裝
  • 容器本身是一種資料結構,因此可以宣告成資料型態
  • 相較於array,vector無須固定大小,因此非常好用
    • vector 擴展性高
功能 含意
v.begin() 回傳第一個 iterator
v.end() 回傳最後一個之下一個的 iterator
#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>
#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.

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使用

由大到小印出

#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; }

由小到大輸出

#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; }

由小到大印出

#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

#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

因本次課程延期後依然無人參與,故暫停乙次

資料庫規劃簡介Rice
網頁遊戲製作簡介Rice

程式競賽 6/02

因 CPE 遇上肺炎延期至 5/26 舉辦,故五月的程式競賽課程暫停乙次

題目檢討Rice