主頁 > 後端開發 > 備戰春招!開源社區系統 Echo 超全檔案助力面試

備戰春招!開源社區系統 Echo 超全檔案助力面試

2021-02-22 06:13:28 後端開發

 

博主東南大學碩士在讀,寒假前半個月到現在差不多一個多月,斷斷續續做完了這個專案,現在終于可以開源出來了,我的想法是為這個專案撰寫一套完整的教程,包括技術選型分析、架構分析、業務邏輯分析、核心技術點分析、常見面試題等,不過說實話,這里面涉及的一些技術我仍然停留在僅僅是會用的階段,當然,后面我會不斷學習,了解透徹這些技術的底層原理,不斷完善這套教程,

?? 專案簡介

Echo 是一套前后端不分離的開源社區系統,基于目前主流 Java Web 技術堆疊(SpringBoot + MyBatis + MySQL + Redis + Kafka + Elasticsearch + Spring Security + ...),并提供詳細的開發檔案和配套教程,包含帖子、評論、私信、系統通知、點贊、關注、搜索、用戶設定、資料統計等模塊,

原始碼鏈接:已托管在 Github 和 Gitee:

  • Github(推薦):https://github.com/Veal98/Echo

  • Gitee:https://gitee.com/veal98/Echo

在線體驗:專案已經部署到騰訊云服務器,各位小伙伴們可直接線上體驗:http://1.15.127.74/,已內置三種不同身份的用戶:

 usernamepassword特殊權限
管理員 admin admin 資料統計、洗掉帖子
版主 master master 置頂帖子、加精帖子
普通用戶 user user  

檔案地址:檔案通過 Docsify + Gitee Pages 生成,國內訪問速度較快,在線訪問地址:https://veal98.gitee.io/echo

?? 核心技術堆疊

后端:

  • Spring

  • Spring Boot 2.1.5 RELEASE

  • Spring MVC

  • ORM:MyBatis

  • 資料庫:MySQL 5.7

  • 分布式快取:Redis

  • 本地快取:Caffeine

  • 訊息佇列:Kafka 2.13-2.7.0

  • 搜索引擎:Elasticsearch 6.4.3

  • 安全:Spring Security

  • 郵件任務:Spring Mail

  • 分布式定時任務:Spring Quartz

  • 日志:SLF4J(日志介面) + Logback(日志實作)

前端:

  • Thymeleaf

  • Bootstrap 4.x

  • Jquery

  • Ajax

?? 開發環境

  • 作業系統:Windows 10

  • 構建工具:Apache Maven

  • 集成開發工具:Intellij IDEA

  • 應用服務器:Apache Tomcat

  • 介面測驗工具:Postman

  • 壓力測驗工具:Apache JMeter

  • 版本控制工具:Git

  • Java 版本:8

?? 界面展示

首頁:

登錄頁:

帖子詳情頁:

個人主頁:

朋友私信頁:

私信詳情頁:

系統通知頁:

通知詳情頁:

賬號設定頁:

資料統計頁:

搜索詳情頁:

?? 功能串列

  • 注冊
    • 用戶注冊成功,將用戶資訊存入 MySQL,但此時該用戶狀態為未激活

    • 向用戶發送激活郵件,用戶點擊鏈接則激活賬號(Spring Mail)

  • 登錄 | 登出
    • 進入登錄界面,動態生成驗證碼,并將驗證碼短暫存入 Redis(60 秒)

    • 用戶登錄成功(驗證用戶名、密碼、驗證碼),生成登錄憑證且設定狀態為有效,并將登錄憑證存入 Redis 注意:登錄憑證存在有效期,在所有的請求執行之前,都會檢查憑證是否有效和是否過期,只要該用戶的憑證有效并在有效期時間內,本次請求就會一直持有該用戶資訊(使用 ThreadLocal 持有用戶資訊)

    • 勾選記住我,則延長登錄憑證有效時間

    • 用戶登錄成功,將用戶資訊短暫存入 Redis(1 小時)

    • 用戶登出,將憑證狀態設為無效,并更新 Redis 中該用戶的登錄憑證資訊

  • 賬號設定
    • 修改頭像

      • 將用戶選擇的頭像圖片檔案上傳至七牛云服務器

    • 修改密碼

  • 帖子模塊
    • 發布帖子(過濾敏感詞),將其存入 MySQL

    • 分頁顯示所有的帖子

      • 支持按照 “發帖時間” 顯示

      • 支持按照 “熱度排行” 顯示(Spring Quartz)

    • 查看帖子詳情

    • 權限管理(Spring Security + Thymeleaf Security)

      • 未登錄用戶無法發帖

      • “版主” 可以看到帖子的置頂和加精按鈕并執行相應操作

      • “管理員” 可以看到帖子的洗掉按鈕并執行相應操作

      • “普通用戶” 無法看到帖子的置頂、加精、洗掉按鈕,也無法執行相應操作

  • 評論模塊
    • 發布對帖子的評論(過濾敏感詞),將其存入 MySQL

    • 分頁顯示評論

    • 發布對評論的回復(過濾敏感詞)

    • 權限管理(Spring Security)

      • 未登錄用戶無法使用評論功能

  • 私信模塊
    • 發送私信(過濾敏感詞)

    • 私信串列

      • 查詢當前用戶的會話串列

      • 每個會話只顯示一條最新的私信

      • 支持分頁顯示

    • 私信詳情

      • 查詢某個會話所包含的所有私信

      • 訪問私信詳情時,將顯示的私信設為已讀狀態

      • 支持分頁顯示

    • 權限管理(Spring Security)

      • 未登錄用戶無法使用私信功能

  • 統一處理 404 / 500 例外
    • 普通請求例外

    • 異步請求例外

  • 統一記錄日志
  • 點贊模塊
    • 支持對帖子、評論/回復點贊

    • 第 1 次點贊,第 2 次取消點贊

    • 首頁統計帖子的點贊數量

    • 詳情頁統計帖子和評論/回復的點贊數量

    • 詳情頁顯示當前登錄用戶的點贊狀態(贊過了則顯示已贊)

    • 統計我的獲贊數量

    • 權限管理(Spring Security)

      • 未登錄用戶無法使用點贊相關功能

  • 關注模塊
    • 關注功能

    • 取消關注功能

    • 統計用戶的關注數和粉絲數

    • 我的關注串列(查詢某個用戶關注的人),支持分頁

    • 我的粉絲串列(查詢某個用戶的粉絲),支持分頁

    • 權限管理(Spring Security)

      • 未登錄用戶無法使用關注相關功能

  • 系統通知模塊
    • 通知串列

      • 顯示評論、點贊、關注三種型別的通知

    • 通知詳情

      • 分頁顯示某一類主題所包含的通知

      • 進入某種型別的系統通知詳情,則將該頁的所有未讀的系統通知狀態設定為已讀

    • 未讀數量

      • 分別顯示每種型別的系統通知的未讀數量

      • 顯示所有系統通知的未讀數量

    • 導航欄顯示所有訊息的未讀數量(未讀私信 + 未讀系統通知)

    • 權限管理(Spring Security)

      • 未登錄用戶無法使用系統通知功能

  • 搜索模塊
    • 發布事件

      • 發布帖子時,通過訊息佇列將帖子異步地提交到 Elasticsearch 服務器

      • 為帖子增加評論時,通過訊息佇列將帖子異步地提交到 Elasticsearch 服務器

    • 搜索服務

      • 從 Elasticsearch 服務器搜索帖子

      • 從 Elasticsearch 服務器洗掉帖子(當帖子從資料庫中被洗掉時)

    • 顯示搜索結果

  • 網站資料統計(管理員專屬)
    • 獨立訪客 UV

      • 存入 Redis 的 HyperLogLog

      • 支持單日查詢和區間日期查詢

    • 榷訓躍用戶 DAU

      • 存入 Redis 的 Bitmap

      • 支持單日查詢和區間日期查詢

    • 權限管理(Spring Security)

      • 只有管理員可以查看網站資料統計

  • 優化網站性能
    • 使用本地快取 Caffeine 快取熱帖串列以及所有用戶帖子的總數

?? 快速開始

各位如果需要將專案部署在本地進行測驗,以下環境請提前備好:

  • Java 8

  • MySQL 5.7

  • Redis

  • Kafka 2.13-2.7.0

  • Elasticsearch 6.4.3

然后修改組態檔中的資訊為你自己的本地環境,直接運行是運行不了的,而且相關私密資訊我全部用 xxxxxxx 代替了,

本地運行需要修改的組態檔資訊如下:

1)application-develop.properties

  • MySQL

  • Spring Mail(郵箱需要開啟 SMTP 服務)

  • Kafka:consumer.group-id(該欄位見 Kafka 安裝包中的 consumer.proerties,可自行修改, 修改完畢后需要重啟 Kafka)

  • Elasticsearch:cluster-name(該欄位見 Elasticsearch 安裝包中的 elasticsearch.yml,可自行修改)

  • 七牛云(需要新建一個七牛云的物件存盤空間,用來存放上傳的頭像圖片)

2)logback-spring-develop.xml

  • LOG_PATH:日志存放的位置

每次運行需要打開:

  • MySQL

  • Redis

  • Elasticsearch

  • Kafka

另外,還需要事件建好資料庫 greatecommunity,然后依次運行專案 sql 檔案夾下的這幾個 sql 檔案建立資料庫表:

?? 資料庫設計

用戶 user

DROP TABLE IF EXISTS `user`;
SET character_set_client = utf8mb4 ;
CREATE TABLE `user` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`username` varchar(50) DEFAULT NULL,
`password` varchar(50) DEFAULT NULL,
`salt` varchar(50) DEFAULT NULL,
`email` varchar(100) DEFAULT NULL,
`type` int(11) DEFAULT NULL COMMENT '0-普通用戶; 1-超級管理員; 2-版主;',
`status` int(11) DEFAULT NULL COMMENT '0-未激活; 1-已激活;',
`activation_code` varchar(100) DEFAULT NULL,
`header_url` varchar(200) DEFAULT NULL,
`create_time` timestamp NULL DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `index_username` (`username`(20)),
KEY `index_email` (`email`(20))
) ENGINE=InnoDB AUTO_INCREMENT=101 DEFAULT CHARSET=utf8;

討論帖 discuss_post

DROP TABLE IF EXISTS `discuss_post`;
SET character_set_client = utf8mb4 ;
CREATE TABLE `discuss_post` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`user_id` int(11) DEFAULT NULL,
`title` varchar(100) DEFAULT NULL,
`content` text,
`type` int(11) DEFAULT NULL COMMENT '0-普通; 1-置頂;',
`status` int(11) DEFAULT NULL COMMENT '0-正常; 1-精華; 2-拉黑;',
`create_time` timestamp NULL DEFAULT NULL,
`comment_count` int(11) DEFAULT NULL,
`score` double DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `index_user_id` (`user_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

評論(回復)comment

CREATE TABLE `comment` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`user_id` int(11) DEFAULT NULL,
`entity_type` int(11) DEFAULT NULL COMMENT '評論目標的類別:1 帖子;2 評論 ',
`entity_id` int(11) DEFAULT NULL COMMENT '評論目標的 id',
`target_id` int(11) DEFAULT NULL COMMENT '指明對誰進行評論',
`content` text,
`status` int(11) DEFAULT NULL COMMENT '狀態:0 正常;1 禁用',
`create_time` timestamp NULL DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `index_user_id` (`user_id`),
KEY `index_entity_id` (`entity_id`)
) ENGINE=InnoDB AUTO_INCREMENT=247 DEFAULT CHARSET=utf8;

私信 message

DROP TABLE IF EXISTS `message`;
SET character_set_client = utf8mb4 ;
CREATE TABLE `message` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`from_id` int(11) DEFAULT NULL,
`to_id` int(11) DEFAULT NULL,
`conversation_id` varchar(45) NOT NULL,
`content` text,
`status` int(11) DEFAULT NULL COMMENT '0-未讀;1-已讀;2-洗掉;',
`create_time` timestamp NULL DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `index_from_id` (`from_id`),
KEY `index_to_id` (`to_id`),
KEY `index_conversation_id` (`conversation_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

?? 部署架構

我每個都只部署了一臺,以下是理想的部署架構:

?? 功能邏輯圖

畫了一些不是那么嚴謹的圖幫助各位小伙伴理清思緒,

單向綠色箭頭:

  • 前端模板 -> Controller:表示這個前端模板中有一個超鏈接是由這個 Controller 處理的

  • Controller -> 前端模板:表示這個 Controller 會像該前端模板傳遞資料或者跳轉

雙向綠色箭頭:表示 Controller 和前端模板之間進行引數的相互傳遞或使用

單向藍色箭頭: A -> B,表示 A 方法呼叫了 B 方法

單向紅色箭頭:資料庫或快取操作

注冊

  • 用戶注冊成功,將用戶資訊存入 MySQL,但此時該用戶狀態為未激活

  • 向用戶發送激活郵件,用戶點擊鏈接則激活賬號(Spring Mail)

登錄 | 登出

  • 進入登錄界面,動態生成驗證碼,并將驗證碼短暫存入 Redis(60 秒)

  • 用戶登錄成功(驗證用戶名、密碼、驗證碼),生成登錄憑證且設定狀態為有效,并將登錄憑證存入 Redis

    注意:登錄憑證存在有效期,在所有的請求執行之前,都會檢查憑證是否有效和是否過期,只要該用戶的憑證有效并在有效期時間內,本次請求就會一直持有該用戶資訊(使用 ThreadLocal 持有用戶資訊)

  • 勾選記住我,則延長登錄憑證有效時間

  • 用戶登錄成功,將用戶資訊短暫存入 Redis(1 小時)

  • 用戶登出,將憑證狀態設為無效,并更新 Redis 中該用戶的登錄憑證資訊

下圖是登錄模塊的功能邏輯圖,并沒有使用 Spring Security 提供的認證邏輯(我覺得這個模塊是最復雜的,這張圖其實很多細節還沒有畫全)

分頁顯示所有的帖子

  • 支持按照 “發帖時間” 顯示

  • 支持按照 “熱度排行” 顯示(Spring Quartz)

  • 將熱帖串列和所有帖子的總數存入本地快取 Caffeine(利用分布式定時任務 Spring Quartz 每隔一段時間就重繪計算帖子的熱度/分數 — 見下文,而 Caffeine 里的資料更新不用我們操心,它天生就會自動的更新它擁有的資料,給它一個初始化方法就完事兒)

 

賬號設定

  • 修改頭像(異步請求)

    • 將用戶選擇的頭像圖片檔案上傳至七牛云服務器

  • 修改密碼

此處只畫出修改頭像:

發布帖子(異步請求)

顯示評論及相關資訊

評論部分前端的名稱顯示有些缺陷,有興趣的小伙伴歡迎提 PR 解決~

關于評論模塊需要注意的就是評論表的設計,把握其中欄位的含義,才能透徹了解這個功能的邏輯,

評論 Comment 的目標型別(帖子,評論) entityType 和 entityId 以及對哪個用戶進行評論/回復 targetId 是由前端傳遞給 DiscussPostController 的

一個帖子的詳情頁需要封裝的資訊大概如下:

添加評論(事務管理)

私信串列和詳情頁

發送私信(異步請求)

點贊(異步請求)

將點贊相關資訊存入 Redis 的資料結構 set 中,其中,key 命名為 like:entity:entityType:entityId,value 即點贊用戶的 id,比如 key = like:entity:2:246 value = https://www.cnblogs.com/cswiki/archive/2021/02/21/11 表示用戶 11 對物體型別 2 即評論進行了點贊,該評論的 id 是 246

某個用戶的獲贊數量對應的存盤在 Redis 中的 key 是 like:user:userId,value 就是這個用戶的獲贊數量

我的獲贊數量

關注(異步請求)

  • 若 A 關注了 B,則 A 是 B 的粉絲 Follower,B 是 A 的目標 Followee

  • 關注的目標可以是用戶、帖子、題目等,在實作時將這些目標抽象為物體(目前只做了關注用戶)

將某個用戶關注的物體相關資訊存盤在 Redis 的資料結構 zset 中:key 是 followee:userId:entityType ,對應的 value 是 zset(entityId, now) ,以關注的時間進行排序,比如說 followee:111:3 對應的value (20, 2020-02-03-xxxx),表明用戶 111 關注了物體型別為 3 即人(用戶),該帖子的 id 是 20,關注該帖子的時間是 2020-02-03-xxxx

同樣的,將某個物體擁有的粉絲相關資訊也存盤在 Redis 的資料結構 zset 中:key 是 follower:entityType:entityId,對應的 value 是 zset(userId, now),以關注的時間進行排序

關注串列

發送系統通知

顯示系統通知

搜索

類似的,置頂、加精也會觸發發帖事件,就不再圖里面畫出來了,

置頂加精洗掉(異步請求)

網站資料統計

帖子熱度計算

每次發生點贊(給帖子點贊)、評論(給帖子評論)、加精的時候,就將這些帖子資訊存入快取 Redis 中,然后通過分布式的定時任務 Spring Quartz,每隔一段時間就從快取中取出這些帖子進行計算分數,

帖子分數/熱度計算公式:分數(熱度) = 權重 + 發帖距離天數

// 計算權重
double w = (wonderful ? 75 : 0) + commentCount * 10 + likeCount * 2;
// 分數 = 權重 + 發帖距離天數
double score = Math.log10(Math.max(w, 1))
       + (post.getCreateTime().getTime() - epoch.getTime()) / (1000 * 3600 * 24);

?? 配套教程

想要自己從零開始實作這個專案或者深入理解的小伙伴,可以關注公眾號『飛天小牛肉』,回復 Echo 獲取配套教程, 不僅會詳細解釋本專案涉及的各大技術點,還會匯總相關的常見面試題,目前尚在更新中

并推薦我的開源教程類專案 『 CS-Wiki 』,Gitee 推薦專案,目前已 1.0k+ star: 致力打造完善的 Java 后端知識體系,不僅僅幫助各位小伙伴快速且系統的準備面試(秋招/社招),更指引學習的方向

轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/261977.html

標籤:其他

上一篇:PHP中的“多載”是個啥?

下一篇:初識HTTP/1.1

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 【C++】Microsoft C++、C 和匯編程式檔案

    ......

    uj5u.com 2020-09-10 00:57:23 more
  • 例外宣告

    相比于斷言適用于排除邏輯上不可能存在的狀態,例外通常是用于邏輯上可能發生的錯誤。 例外宣告 Item 1:當函式不可能拋出例外或不能接受拋出例外時,使用noexcept 理由 如果不打算拋出例外的話,程式就會認為無法處理這種錯誤,并且應當盡早終止,如此可以有效地阻止例外的傳播與擴散。 示例 //不可 ......

    uj5u.com 2020-09-10 00:57:27 more
  • Codeforces 1400E Clear the Multiset(貪心 + 分治)

    鏈接:https://codeforces.com/problemset/problem/1400/E 來源:Codeforces 思路:給你一個陣列,現在你可以進行兩種操作,操作1:將一段沒有 0 的區間進行減一的操作,操作2:將 i 位置上的元素歸零。最終問:將這個陣列的全部元素歸零后操作的最少 ......

    uj5u.com 2020-09-10 00:57:30 more
  • UVA11610 【Reverse Prime】

    本人看到此題沒有翻譯,就附帶了一個自己的翻譯版本 思考 這一題,它的第一個要求是找出所有 $7$ 位反向質數及其質因數的個數。 我們應該需要質數篩篩選1~$10^{7}$的所有數,這里就不慢慢介紹了。但是,重讀題,我們突然發現反向質數都是 $7$ 位,而將它反過來后的數字卻是 $6$ 位數,這就說明 ......

    uj5u.com 2020-09-10 00:57:36 more
  • 統計區間素數數量

    1 #pragma GCC optimize(2) 2 #include <bits/stdc++.h> 3 using namespace std; 4 bool isprime[1000000010]; 5 vector<int> prime; 6 inline int getlist(int ......

    uj5u.com 2020-09-10 00:57:47 more
  • C/C++編程筆記:C++中的 const 變數詳解,教你正確認識const用法

    1、C中的const 1、區域const變數存放在堆疊區中,會分配記憶體(也就是說可以通過地址間接修改變數的值)。測驗代碼如下: 運行結果: 2、全域const變數存放在只讀資料段(不能通過地址修改,會發生寫入錯誤), 默認為外部聯編,可以給其他源檔案使用(需要用extern關鍵字修飾) 運行結果: ......

    uj5u.com 2020-09-10 00:58:04 more
  • 【C++犯錯記錄】VS2019 MFC添加資源不懂如何修改資源宏ID

    1. 首先在資源視圖中,添加資源 2. 點擊新添加的資源,復制自動生成的ID 3. 在解決方案資源管理器中找到Resource.h檔案,編輯,使用整個專案搜索和替換的方式快速替換 宏宣告 4. Ctrl+Shift+F 全域搜索,點擊查找全部,然后逐個替換 5. 為什么使用搜索替換而不使用屬性視窗直 ......

    uj5u.com 2020-09-10 00:59:11 more
  • 【C++犯錯記錄】VS2019 MFC不懂的批量添加資源

    1. 打開資源頭檔案Resource.h,在其中預先定義好宏 ID(不清楚其實ID值應該設定多少,可以先新建一個相同的資源項,再在這個資源的ID值的基礎上遞增即可) 2. 在資源視圖中選中專案資源,按F7編輯資源檔案,按 ID 型別 相對路徑的形式添加 資源。(別忘了先把檔案拷貝到專案中的res檔案 ......

    uj5u.com 2020-09-10 01:00:19 more
  • C/C++編程筆記:關于C++的參考型別,專供新手入門使用

    今天要講的是C++中我最喜歡的一個用法——參考,也叫別名。 參考就是給一個變數名取一個變數名,方便我們間接地使用這個變數。我們可以給一個變數創建N個參考,這N + 1個變數共享了同一塊記憶體區域。(參考型別的變數會占用記憶體空間,占用的記憶體空間的大小和指標型別的大小是相同的。雖然參考是一個物件的別名,但 ......

    uj5u.com 2020-09-10 01:00:22 more
  • 【C/C++編程筆記】從頭開始學習C ++:初學者完整指南

    眾所周知,C ++的學習曲線陡峭,但是花時間學習這種語言將為您的職業帶來奇跡,并使您與其他開發人員區分開。您會更輕松地學習新語言,形成真正的解決問題的技能,并在編程的基礎上打下堅實的基礎。 C ++將幫助您養成良好的編程習慣(即清晰一致的編碼風格,在撰寫代碼時注釋代碼,并限制類內部的可見性),并且由 ......

    uj5u.com 2020-09-10 01:00:41 more
最新发布
  • Rust中的智能指標:Box<T> Rc<T> Arc<T> Cell<T> RefCell<T> Weak

    Rust中的智能指標是什么 智能指標(smart pointers)是一類資料結構,是擁有資料所有權和額外功能的指標。是指標的進一步發展 指標(pointer)是一個包含記憶體地址的變數的通用概念。這個地址參考,或 ” 指向”(points at)一些其 他資料 。參考以 & 符號為標志并借用了他們所 ......

    uj5u.com 2023-04-20 07:24:10 more
  • Java的值傳遞和參考傳遞

    值傳遞不會改變本身,參考傳遞(如果傳遞的值需要實體化到堆里)如果發生修改了會改變本身。 1.基本資料型別都是值傳遞 package com.example.basic; public class Test { public static void main(String[] args) { int ......

    uj5u.com 2023-04-20 07:24:04 more
  • [2]SpinalHDL教程——Scala簡單入門

    第一個 Scala 程式 shell里面輸入 $ scala scala> 1 + 1 res0: Int = 2 scala> println("Hello World!") Hello World! 檔案形式 object HelloWorld { /* 這是我的第一個 Scala 程式 * 以 ......

    uj5u.com 2023-04-20 07:23:58 more
  • 理解函式指標和回呼函式

    理解 函式指標 指向函式的指標。比如: 理解函式指標的偽代碼 void (*p)(int type, char *data); // 定義一個函式指標p void func(int type, char *data); // 宣告一個函式func p = func; // 將指標p指向函式func ......

    uj5u.com 2023-04-20 07:23:52 more
  • Django筆記二十五之資料庫函式之日期函式

    本文首發于公眾號:Hunter后端 原文鏈接:Django筆記二十五之資料庫函式之日期函式 日期函式主要介紹兩個大類,Extract() 和 Trunc() Extract() 函式作用是提取日期,比如我們可以提取一個日期欄位的年份,月份,日等資料 Trunc() 的作用則是截取,比如 2022-0 ......

    uj5u.com 2023-04-20 07:23:45 more
  • 一天吃透JVM面試八股文

    什么是JVM? JVM,全稱Java Virtual Machine(Java虛擬機),是通過在實際的計算機上仿真模擬各種計算機功能來實作的。由一套位元組碼指令集、一組暫存器、一個堆疊、一個垃圾回收堆和一個存盤方法域等組成。JVM屏蔽了與作業系統平臺相關的資訊,使得Java程式只需要生成在Java虛擬機 ......

    uj5u.com 2023-04-20 07:23:31 more
  • 使用Java接入小程式訂閱訊息!

    更新完微信服務號的模板訊息之后,我又趕緊把微信小程式的訂閱訊息給實作了!之前我一直以為微信小程式也是要企業才能申請,沒想到小程式個人就能申請。 訊息推送平臺🔥推送下發【郵件】【短信】【微信服務號】【微信小程式】【企業微信】【釘釘】等訊息型別。 https://gitee.com/zhongfuch ......

    uj5u.com 2023-04-20 07:22:59 more
  • java -- 緩沖流、轉換流、序列化流

    緩沖流 緩沖流, 也叫高效流, 按照資料型別分類: 位元組緩沖流:BufferedInputStream,BufferedOutputStream 字符緩沖流:BufferedReader,BufferedWriter 緩沖流的基本原理,是在創建流物件時,會創建一個內置的默認大小的緩沖區陣列,通過緩沖 ......

    uj5u.com 2023-04-20 07:22:49 more
  • Java-SpringBoot-Range請求頭設定實作視頻分段傳輸

    老實說,人太懶了,現在基本都不喜歡寫筆記了,但是網上有關Range請求頭的文章都太水了 下面是抄的一段StackOverflow的代碼...自己大修改過的,寫的注釋挺全的,應該直接看得懂,就不解釋了 寫的不好...只是希望能給視頻網站開發的新手一點點幫助吧. 業務場景:視頻分段傳輸、視頻多段傳輸(理 ......

    uj5u.com 2023-04-20 07:22:42 more
  • Windows 10開發教程_編程入門自學教程_菜鳥教程-免費教程分享

    教程簡介 Windows 10開發入門教程 - 從簡單的步驟了解Windows 10開發,從基本到高級概念,包括簡介,UWP,第一個應用程式,商店,XAML控制元件,資料系結,XAML性能,自適應設計,自適應UI,自適應代碼,檔案管理,SQLite資料庫,應用程式到應用程式通信,應用程式本地化,應用程式 ......

    uj5u.com 2023-04-20 07:22:35 more