https://www.gravatar.com/avatar/1b2e937d26fa273fd402e042f2139949?s=240&d=mp

Huang Po-Hsun

Android Java - 簡易今日頭條 - RecyclerView 渲染多種不同樣式的新聞卡片

前言 上篇文章中我講述了如何實現Tabs 頻道頁面切換,接下來我們進一步實現 Tab Channel 中的新聞卡片列表渲染。 項目倉庫 簡易今日頭條 - Github Display 不同卡片樣式展示Display_recyclerView_different_card_styles.gif " 不同卡片樣式展示 具體實現 由於一種的渲染方法比較簡單,通常設計者是卡在顯示多種類型的 RecyclerView Item,在多種卡片 item 的設計這裡我只需要設計一種 DataModel ,然後在 DataModel 中添加 type 成員變量判斷是哪種類型的卡片。 以下我舉出實現的 Example,簡化的部份 Code,這裡的 Code 去掉: HTTP 請求的渲染、Pull To ReFresh、Load More。後面會再一一舉例。 layout/fragment_news_channel.xml 在需要渲染列表的地方加上 RecyclerView 組件。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 <?

Android Java - 簡易今日頭條 - Tabs 頻道頁面切換

前言 上一篇文章我寫了關於底部導覽頁的切換,這次換到關於簡易今日頭條中的 Tab Channel 切換。 項目倉庫 簡易今日頭條 - Github Display Tab Channel 展示Display_tabbed.gif " Tab Channel 展示 具體實現 這裡我一開始使用的是舊的 API 方法(ViewPagerFragment、PagerAdapter),如果你使用的是: androidx.viewpager.widget.ViewPager androidx.fragment.app.FragmentPagerAdapter 你會得到一個提示是這 兩個 API 是已經棄用(deprecated) 的,尤其是在寫 FragmentPagerAdapter 類的時候,Android Studio 會在父類類名上刪除線(Strikethrough),所以我們需要切換到新的 API: androidx.viewpager2.widget.ViewPager2 androidx.viewpager2.adapter.FragmentStateAdapter 那我們來開始看具體寫法,可以參考官方文檔Create swipe views with tabs using ViewPager2 - Android developers。 註:由於這個的 tabbed 項目需求的頁面是相同的,都是展示新聞卡片,所以我們就只需要設計一個 Fragment 類,但是如果我們需要每個新聞頻道 Tab 頁面有不同的設計,就需要設計多個 Fragment 類。 layout/fragment_home.xml 我需要在 Home Fragment 展示我的 Tabs,然後在 NewsChannelFragment 顯示各頁面內容,這裡我們有 TabLayout 和最新的 ViewPager2。

Android Java - 簡易今日頭條 - 實現底部按鈕導覽切換 Fragment 頁面

前言 我接下來會寫一系列關於安卓開發的過程,由於這學期我選修了安卓應用開發,該課程與字節跳動客戶端員工合作,課程的項目設計是 “簡易頭條”,而我身為安卓零基礎的學生在一週內邊做邊學,最終完成了成果。在 Blog 我所遇到的細節技術實現。這篇文章是關於底部導覽頁的實現。 項目倉庫 簡易今日頭條 - Github Display Bottom Nav 展示Display_nav.gif " Bottom Nav 展示 具體實現 使用 BottomNavigationView、NavController 與 NavigationUI.setupWithNavController() 方法去實現。 現在我需要使用三個子頁面(Fragment)分別是首頁(home)、視頻(video)、我的(account): 注意:目錄的正確需要自己去修改 layout/activity.xml 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 <?xml version="1.0" encoding="utf-8"?> <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.

2021 3 - 4 月春招找實習過程心得

前言 我將在這篇文章分享我的春招找實習心得,並且分享如何準備應聘。 背景 985 中南大學計算機學院軟件工程 18 級大三本科生 已修操作系統、計算機網路、數據庫、數據結構、算法等必要課程 時間安排從 7 月份開始能實習 3 - 4 個月 比較萬油精,可以前後端開發,偏好 C/C++ 崗位 (因為 Java 崗太卷了) 心得 這次 2021 年的春招實習,我先後投遞了各個大廠,像是阿里巴巴、騰訊、快手、字節跳動、華為,然而一直沒有好結果,加上自己一開始準備筆試面試並沒有準備多少,對我來說就像是突如其來的考試,最終到了五月份依然沒拿到好的 Offer。我過程有時被撈了又面掛了,剛開始每次面試我都很緊張,因為沒有面試經驗,甚至有一次我緊張到整晚都睡不著,然後面掛了又覺得自己是不是實力不夠,那段期間真的是不斷的自我懷疑,面到後面我都覺得有點無感隨緣了,感覺一切都無所謂了。 一開始我投的阿里巴巴招聘流程讓人覺得詭譎,說不出來的奇妙感,面試時問的問題過於硬核,然後阿里巴巴的崗位可能是因為內推關係,不能改比較坑。字節面試一面時感受得出面試官的不耐煩,華為的筆試我以為很簡單,結果我那次機考意外的難很多,我又寫題時間分配錯誤以及題意理解錯誤,最終以失敗告終,我或許不適合大廠。 至於小廠,小廠的面試反而沒那麼多八股文,就純聊天了解你的情況,但是最終都涼了,包括深圳的同為數碼科技(做監控安全方面)和武漢的統信(UOS、Deepin),拒我的理由大多是 “我們針對實習生的需求進行調整”。感覺計算機行業競爭很激烈。 我想我最後打擊的事情是在深圳的華為 HR 大哥評價我的簡歷,學校不夠優秀,實踐雖然可以,但是可能對他們來說技術含量低,又專業不對口,所以建議我不要急著去找實習,要我去考個 C9 的研究生。 最後還是希望各位面試時盡量放輕鬆,不然容易腦袋死機,語言邏輯等表達不通順。然後提醒一下很多大廠的面試電話是別人打得了給你,你打不了電話給別人。 關於面試準備工作 註:一定要提前準備 1 個月以上。 我們應該在這裡針對下面三個部份: 數據結構與算法 對應崗位的八股文 簡歷項目 數據結構與算法 首先,我不是 ACM 的選手,也沒有算法競賽背景,所以說想要在部份過關,我的建議是在 LeetCode(力扣) 上進行刷題練習,很多人會有困惑,“要怎麼刷?",我依序列出順序: 1. 劍指 Offer 75 題(劍指 Offer 是性價比最高,面試高頻考題) 2. 在題庫中照題目的出現頻率去刷,優先刷高頻出現率的題,刷題數約 100 題 其中面試很愛考得重點無非就是 DP(動態規劃)、鏈表、堆棧、隊列、排序(快排與歸併)、二分查找、數組、二叉樹、字符串處理、回溯、DFS、BFS、最短路徑算法(比較少考)。 你只要做到我所說的上面要求,基本大多數算法面試都能解決,如果之前學的東西都忘了沒關係,你邊刷題邊複習,學的效率很快。 我是在幾次面試的失敗毒打後,才開始刷 LeetCode,接著發現之前面試的算法題大多都是從劍指 Offer 選出來的。耗時一個月,已經刷了 180 題以上。

Python 爬蟲實戰教學 - Github 倉庫特徵爬取

前言 因為這期學期上半我選了機器學習與數據挖掘,我在課程小組項目中負責了爬蟲這個部份,我會在這篇文章紀錄一下我的過程,並教導大家如何實戰 Python 爬蟲。 項目說明 我們這個小組項目的爬取需求是爬取 Github 項目的各個特徵,這篇文章會分兩個部份,第一個部份是使用 BeautifulSoup 爬取原生的 HTML 頁面,第二部份是使用 Github API,其中第二部份包含了每個倉庫的 Commits、pull_request 等月變化量(2020.03 ~2021.03)。 P.S. 其實是我在剛開始寫爬蟲的時候,覺得 GIthub API 回傳的數據特徵有點少,所以就直接爬 Github 原生 HTML 頁面,沒有去爬月變化的數據,結果組長說要我重新去寫爬蟲,要爬月變化數據。 開發前準備 安裝相關庫 因為我們需要使用到的庫有 BeautifulSoup 和 requests 等。所以有些需要自己去安裝, 1 2 3 4 5 import requests import time import csv import json from bs4 import BeautifulSoup 1 pip install requests BeautifulSoup Github 私人 Token 因為我們需要爬取 Github 的網頁和使用 Github API,我們需要申請 Personal token,避免我們的請求達到 Rate Limit,Github 有限制一分鐘內的請求次數。

互聯網公司大廠 – 面試八股文彙整

前言 因為 2021/03 月份我已經是大三了,我開始在春招找實習 Offer,在找實習的期間我在牛課網以及各大平台的面經驗分享中整理出一份八文面試題,整理的過程整整花了我將近一週的時間,希望我整理的內容對各位有幫助。 註:這篇文章是針對 C/C++ 崗位的面試題,數據結構、算法、操作系統、計算機網路、數據庫對大部分崗位是通用的。 重要度 重要性: 語言基礎 >= 數據結構 == 算法 > 操作系統 > 計算機網路 > 數據庫 >= 機器學習 語言基礎 C++ 三大特性 封装性是基础,继承性是关键,多态性是补充,并且多态性存在于继承的环境中。 C++语言中支持数据封装,类是支持数据封装的工具,对象是数据封装的实现。 在封装中,还提供一种对数据访问的控制机制,使得一些数据被隐藏在封装体内,因此具有隐藏性。 封裝、繼承、多態,簡單說明 封装性:把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏。 类将成员变量和成员函数封装在类的内部,根据需要设置访问权限,通过成员函数管理内部状态。 1 2 3 4 5 6 7 8 9 10 11 class Person { private://数据私有 string bame; int num; public://方法公有 void getName() { return name; } }; 繼承:继承所表达的是类之间相关的关系,这种关系使得对象可以继承另外一类对象的特征和能力。 继承的作用:避免公用代码的重复开发,减少代码和数据冗余。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 #include <iostream> using namespace std; class Base { public: void printBase(void) { cout<<"Base中的printBase"<<endl; } }; class Son:public Base { }; int main(int argc, char *argv[]) { Son ob; ob.

Mariadb 啟動服務失敗

前言 在半年前,因為我的 ArchLinux 發行版系統在某次滾完系統後,我的 Mariadb 數據庫系統崩潰了,無法啟動服務,當時找了一下解決辦法,依然沒解決,網上雖然也有看到有些人也碰到跟我相似的問題,但都沒有具體好的解決辦法,像是 [SOLVED] Unable to start mariadb.service What to Do if MariaDB Doesn’t Start Failed to start MariaDB database server after upgrade to debian 9 今天終於在 ArchLinux-CN Telegram 技術群提問獲得了解決。 問題 我的 Linux 在某次更新完系統開機階段就會顯示我的數據庫啟動失敗,開機後我試著登入數據庫卻登入失敗。於是試著啟動 mariadb.service 於是出現下面的畫面: mariadb.service 啟動失敗systemctl_start_mariadb_service_failed.png " mariadb.service 啟動失敗 於是我接著查看 mariadb.service 的 status: 檢查 mariadb.service statussystemctl_status_mariadb.png " 檢查 mariadb.service status 依然沒找到問題所在,於是我進一步查看日誌: 1 $ journalctl -xeu mariadb.service 檢查 mariadb.service 日誌journalctl_xeu_mariadb.

MySQL 的基礎語法使用筆記

前言 自己經常用資料庫(數據庫),但是語法如果太久沒用都會忘光光,我就在這篇文章當作一個小抄,不然每次碰到 MySQL 語法問題都要 Google 一下語法使用,很麻煩。 MySQL 使用工具 我自己是比較偏好使用 MariaDB,因人而異,總之我這篇文章就略過什麼 MySQL 安裝過程,這些都是自己探索安裝一下就可以了。 1 2 3 # 進入 MySQL 指令 # 登入使用者為 root mysql -u root -p 基礎語法 自行修改中文成英文。不要真的輸入中文當資料庫名稱或資料表名稱喔。 操作功能 MySQL 語法格式 說明 列出所有資料庫 show databases; 建立資料庫 create database 資料庫名稱; 刪除資料庫 drop database 資料庫名稱; 使用資料庫 use 資料庫名稱; 建立資料表 create table 資料表名稱(

VMware Workstation Pro 中 CentOS 7 啟動崩潰

前言 我因為最近在做雲計算實驗中的 Hadoop + Spark,我在我的 Windows 上用 VMware Workstation 開了三個虛擬機,且都裝了 CentOS7 系統。當時因為我下課結束將筆電蓋住,去實驗室將電腦打開的時候,整個 Windows 系統變得很卡,視窗方面無法移動縮放,我只好強制關機重啟筆電,結果一開機啟動虛擬機就出錯了。 問題 我的三台 CentOS 虛擬機都出現 CentOS 7 Fails to Boot – XFS Corruption – Enters Emergency Mode 這樣的報錯,看起來是 XFS 文件系統出錯了,錯誤畫面如下: CentOS 無法啟動centos_fail_to_boot.jpg " CentOS 無法啟動 我嘗試了很久想想怎麼修復,爬文看看是哪裡出錯了,終於在一篇文章中找到解決辦法。 解決 I chose the default boot option and reached a console. Ideally one should create a dump of the damaged partition by running xfs_metadump, restore the dump to an image using xfs_mdrestore, and then perform the repair on that image.

LeetCode 題庫 - Add Two Numbers (兩數相加)

前言 是個難度適中的題目。 題目 Add Two Numbers (兩數相加) 題目描述 You are given two non-empty linked lists representing two non-negative integers. The digits are stored in reverse order, and each of their nodes contains a single digit. Add the two numbers and return the sum as a linked list. You may assume the two numbers do not contain any leading zero, except the number 0 itself. 給出兩個非空的鏈表用來表示兩個非負的整數。其中,它們各自的位數是按照逆序的方式存儲的,並且它們的每個節點只能存儲一位數字。 如果,我們將這兩個數相加起來,則會返回一個新的鍊表來表示它們的和。 您可以假設除了數字 0 之外,這兩個數都不會以 0 開頭。