騰訊一面-軟件開發實習-PC客戶端開發方向

1.自我介紹就不多贅述了

2. 請介紹一下你的項目經歷

- 介紹了專輯鑒賞項目,前端使用html語言編寫,后端基于http協議使用C語言進行網頁開發。此外,還提及項目中涉及處理多線程問題以及做過內存池管理項目。

3. 項目中HTTP協議是使用庫實現的嗎

- 真忘了,只能往別的地方掰扯,我說我記得HTTP底層是TCP協議,通過TCP建立連接,經過傳輸層、網絡層找到服務器地址實現通信。

4. 實際開發過程中遇到過什么問題,如何解決的

- 將項目從Linux系統移植到云服務器時,網頁無法打開。經查閱資料發現是80端口未打開,打開后網頁得以正常顯示。

5. 處理多線程問題需要注意什么

- 需要注意線程安全、資源競爭和死鎖等問題。解決線程安全問題可使用鎖保護共享資源;避免死鎖要盡量避免多個鎖嵌套使用、統一加鎖順序或使用超時鎖;線程數太多時可使用線程池復用線程。

6. 進程申請的內存是虛擬內存還是物理內存,虛擬內存和物理內存如何映射

- 進程申請內存后拿到的是虛擬內存地址。虛擬內存是操作系統提供的假象內存空間,每個進程有獨立的虛擬地址空間;物理內存是內存條上的存儲單元,系統會調配物理內存給不同進程使用。?

7. 在一臺給定配置的電腦上,每個進程理論上可得的內存大小受哪些因素影響

- 受操作系統位數、系統總物理內存、交換空間、單個進程限制、地址空間布局以及分配方式等因素影響。

8. 32位系統中每個進程理論上可操作的內存空間最大是多少

- 32位系統中,理論上每個進程可操作的虛擬內存最大為4G。

9. 假設物理內存只有4G,有5個進程,每個進程啟動時申請1G內存,操作系統會如何處理

- 操作系統會使用虛擬內存、分頁機制和交換空間來解決。采用按需分配和頁面置換策略,不會一次性給進程分配所有所需內存,而是先給活躍部分分配物理內存頁,將不常用的內存頁換到硬盤的交換空間,再把新需要的內存頁從磁盤換進來。

10. 內存池前后添加強防止越界怎么理解,為什么要加

-在內存池前后添加強制邊界,是指在內存池的起始和結束位置額外添加一些特殊標記(通常是設置特定的標記值)。在內存池_邊界標識法中,通過在內存池的前后各添加一個標記單元,設置其tag為 1 來表示邊界。

Space pav = (Space)malloc((SIZE+2) *?sizeof(WORD));// 內存池 + 2 邊界
pav->tag =?1;?// 左邊界
pav++;
// ...
(p +?1)->tag =?1;?// 右邊界

原因:

-防止內存越界訪問:在內存管理過程中,可能會出現程序意外地訪問超出內存池范圍的情況。例如,在合并相鄰空閑塊時,如果沒有邊界標記,可能會錯誤地訪問到內存池之外的區域,導致未定義行為(如程序崩潰、數據損壞等)。通過添加邊界標記,可以在程序訪問到邊界時進行檢查,避免越界訪問。

-簡化合并邏輯:在釋放內存時,需要判斷相鄰的內存塊是否為空閑塊,以便進行合并操作。邊界標記可以作為一個明確的終止條件,簡化合并邏輯,避免不必要的錯誤。

11. 在申請內存的函數中需要傳什么參數,返回值是什么

(1)在伙伴系統中:

-參數:

FreeList* pf:指向空閑鏈表數組的指針,用于管理不同大小的空閑塊。

int n:需要申請的內存塊大小,以WORD_b為單位。

-返回值:

如果申請成功,返回一個指向分配的內存塊的指針WORD_b*

如果申請失敗(如沒有足夠的空閑塊),返回NULL

(2)在邊界標識法中:

-參數:

Space* pav:指向內存池的指針,用于管理空閑內存塊。

int n需要申請的內存塊大小,以WORD為單位。

-返回值:

如果申請成功,返回一個指向分配的內存塊的指針WORD*

如果申請失敗(如沒有足夠的空閑塊),返回NULL

12. 釋放內存時如何得知之前申請的空間大小

(1)在伙伴系統中,每個內存塊都有一個?kval?字段,表示該內存塊的大小為?(2^{kval})?個?WORD_b?單元。

因此,在釋放內存時,可以通過訪問該內存塊的?kval?字段來確定其大小。

void?MyFree(FreeList* pf, WORD_b* p)
{// ...int?size =?1?<< p->kval;?// 計算內存塊的大小// ...
}

(2)在邊界標識法中,每個內存塊的頭部都有一個size字段,用于記錄該內存塊的大小。

因此,在釋放內存時,可以直接訪問該內存塊頭部的size字段來確定其大小。

???????

void?MyFree(Space* pav, WORD* p)
{// ...int?size = p->size;?// 獲取內存塊的大小// ...
}

13. TCP請求相對于UDP有什么特點

- TCP比較可靠,是面向字節流的一對一傳輸協議。通過序列號、確認應答、流量控制和擁塞控制等手段保證可靠性。

14. TCP的滑動窗口機制用于什么場景,有什么作用

- 滑動窗口機制用于TCP發送端和接收端之間,根據網絡帶寬和接收方接收能力動態調整窗口大小,主要解決流量控制和擁塞控制問題。

15. 假設客戶端一次性發10個序列包,在部分包未收到應答的情況下還能繼續發送嗎

- 不能,需要每個數據包都被接收方確認到達,發送窗口才會滑動,釋放出空間才能發送新的數據包。

16. 在瀏覽器上輸入域名到收到后臺服務器返回的包,大概流程是怎樣的

- 流程包括:瀏覽器解析網址;進行DNS解析,查詢本地緩存,若沒有則向DNS服務器請求,獲取目標網址的IP地址;建立TCP連接;發送HTTP請求,請求包含請求方法、請求頭;服務器處理請求,如訪問數據庫或讀取文件;服務器發送HTTP響應,通常是HTML頁面、CSS、圖片等;瀏覽器解析HTML,構建文檔對象模型樹,進行CSS、JavaScript解析和頁面渲染;加載頁面資源,可能觸發新的HTTP請求,并緩存已加載資源;關閉TCP連接,通過四次揮手完成。

17. 在局域網內部,服務器如何找到發送請求的設備

- 設備連接局域網會通過動態主機配置協議或靜態IP配置獲得唯一的局域網內IP地址。服務器通過ARP地址解析協議,發送ARP請求詢問擁有該IP地址的設備,獲取設備的Mac地址。若設備和服務器在同一子網,交換機根據目標IP地址或Mac地址將數據包發送到相應設備;若在不同子網,路由器通過IP地址轉發數據包。

18. 找最長遞增子序列(手撕+思路)???????

class?Solution?{
public:int?lengthOfLIS(vector<int>& nums)?{int?n = (int)nums.size();if?(n ==?0) {return?0;}vector<int>?dp(n,?0);for?(int?i =?0; i < n; ++i) {dp[i] =?1;for?(int?j =?0; j < i; ++j) {if?(nums[j] < nums[i]) {dp[i] =?max(dp[i], dp[j] +?1);}}}return?*max_element(dp.begin(), dp.end());}
};

-加上輸入輸出后死活運行不出來,最后給面試官說了解題思路

- 采用動態規劃方法,定義一個Vector類型的DP數組,DP數組的第i個元素表示數組中第i個元素的最長遞增子序列的長度。對于原數組中的每個元素,從它前面找所有比它小的元素,若滿足條件則在相應DP元素基礎上延長長度,最終DP數組中的最大值就是最長遞增子序列的長度。

- 時間復雜度是O(n^2),空間復雜度是O(n)。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/902353.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/902353.shtml
英文地址,請注明出處:http://en.pswp.cn/news/902353.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

[數據可視化] Datagear使用心得:從數據整備到可視化聯動實踐

Datagear 是一款功能強大的數據可視化與報表工具&#xff0c;在日常數據分析與展示過程中&#xff0c;能有效幫助用戶構建交互式報表與面板。本文結合實際使用場景&#xff0c;總結了在 Datagear 平臺上關于元數據整備、Board 面板設計、圖表嵌入等方面的使用經驗&#xff0c;供…

【音視頻】MP4解封裝

一、概述 實現了讀取mp4文件&#xff0c;提取出h264和aac文件&#xff0c;可以直接播放 二、實現過程 準備文件 在build路徑下添加mp4文件 同時&#xff0c;添加main函數參數&#xff0c;表示輸入文件和輸出文件 打開文件 打開輸入文件&#xff0c;初始化格式上下文 char…

idea2024.1雙擊快捷方式打不開

idea2024.1突然雙擊快捷方式打不開&#xff0c;使用管理員運行也打不開 在安裝的idea路徑下的bin目錄下雙擊打開idea.bat文件&#xff0c;要是打不開使用txt格式打開&#xff0c;打開后在最后一行加上pause&#xff0c;之后保存。 看看報錯信息是不是有一個initializedExcept…

【錯誤記錄】Windows 命令行程序循環暫停問題分析 ( 設置 “ 命令記錄 “ 選項 | 啟用 “ 丟棄舊的副本 “ 選項 | 將日志重定向到文件 )

文章目錄 一、報錯信息二、問題分析1、Windows 命令行的緩沖區機制2、命令記錄設置 三、解決方案1、設置 " 命令記錄 " 選項2、將日志重定向到文件 一、報錯信息 Java 程序中 , 設置 無限循環 , 每次循環 休眠 10 秒后 , 再執行程序邏輯 , 在命令行中打印日志信息 ; …

STM32H5開發陀螺儀LSM6DSV16X(1)----輪詢獲取陀螺儀數據

STM32H5開發陀螺儀LSM6DSV16X.1--輪詢獲取陀螺儀數據 概述視頻教學樣品申請源碼下載硬件準備參考程序通信模式管腳定義IIC通信模式速率新建工程工程模板保存工程路徑芯片配置工程模板選擇時鐘設置UART配置UART屬性配置設置e2studio堆棧e2studio的重定向printf設置R_SCI_UART_Op…

Android端使用無障礙服務實現遠程、自動刷短視頻

最近在做一個基于無障礙自動刷短視頻的APP&#xff0c;需要支持用任意藍牙遙控器遠程控制&#xff0c; 把無障礙服務流程大致研究了一下&#xff0c;從下面3個部分做一下小結。 1、需要可調整自動上滑距離和速度以適配不同的屏幕和應用 智能適配99%機型&#xff0c;滑動參數可…

Spark和Hadoop的區別和聯系

Hadoop 和 Spark 的區別 1. 架構 Hadoop&#xff1a;基于 HDFS&#xff08;分布式文件系統&#xff09;和 MapReduce&#xff08;分布式計算框架&#xff09;。HDFS 負責數據的分布式存儲&#xff0c;而 MapReduce 是其主要的計算框架&#xff0c;通過 Map 和 Reduce 任務進行…

【版本控制】idea中使用git

大家好&#xff0c;我是jstart千語。接下來繼續對git的內容進行講解。也是在開發中最常使用&#xff0c;最重要的部分&#xff0c;在idea中操作git。目錄在右側哦。 如果需要git命令的詳解&#xff1a; 【版本控制】git命令使用大全-CSDN博客 一、配置git 要先關閉項目&#xf…

論文閱讀:2023 arxiv A Survey of Reinforcement Learning from Human Feedback

A Survey of Reinforcement Learning from Human Feedback https://arxiv.org/pdf/2312.14925 https://www.doubao.com/chat/3506943124865538 速覽 這篇論文是關于“從人類反饋中進行強化學習&#xff08;RLHF&#xff09;”的綜述&#xff0c;核心是講如何讓AI通過人類反…

單片機 + 圖像處理芯片 + TFT彩屏 進度條控件

進度條控件使用說明 概述 本進度條控件基于單片機 RA8889/RA6809 TFT開發&#xff0c;提供了簡單易用的進度顯示功能。控件支持多個進度條同時顯示、自定義顏色、邊框和標簽等特性&#xff0c;適用于需要直觀顯示進度信息的各類應用場景。 特性 支持多個進度條同時顯示可…

數據處理: OPTICS聚類及Python實現

1. 基本原理 OPTICS&#xff08;Ordering Points To Identify the Clustering Structure&#xff09;是一種基于密度的聚類算法&#xff0c;可視為DBSCAN的改進版本。它能夠識別不同密度的簇&#xff0c;并自動發現數據中的層次化聚類結構&#xff0c;適用于復雜分布的數據集…

PyCharm 在 Linux 上的完整安裝與使用指南

PyCharm 在 Linux 上的完整安裝與使用指南—目錄 一、PyCharm 簡介二、下載與安裝1. 下載 PyCharm2. 安裝前的依賴準備3. 安裝步驟方法 1&#xff1a;通過 Snap 安裝&#xff08;推薦&#xff09;方法 2&#xff1a;手動安裝&#xff08;從官網下載 .tar.gz 文件&#xff09;方…

【React】路由器 React-Router

安裝路由模式路由組件和屬性 (Link、NavLink、Outlet、Routes、Navigate、element)路由傳參 ( Hook&#xff1a;useParams 、useSearchParams )路由跳轉&#xff08;Hook&#xff1a;useNavigate&#xff09;路由的構建 前端路由指的是一種將瀏覽器URL與特定頁面或視圖關聯起來…

Flowable7.x學習筆記(十)分頁查詢已部署 BPMN XML 流程

前言 上一篇文章我們已經完成了流程的部署功能&#xff0c;那么下一步就是要激活流程了&#xff0c;但是我們要需要明確的指定具體要激活部署后的哪一條流程&#xff0c;所以我們先把已部署的基礎信息以及具體定義信息分頁查詢出來&#xff0c;本文先把基礎代碼生成以及完成分頁…

【論文閱讀23】-地下水預測-TCN-LSTM-Attention(2024-11)

這篇論文主要圍繞利用深度學習模型檢測地下水位異常以識別地震前兆展開。 [1] Chen X, Yang L, Liao X, et al. Groundwater level prediction and earthquake precursor anomaly analysis based on TCN-LSTM-attention network[J]. IEEE Access, 2024, 12: 176696-176718. 期刊…

electron從安裝到啟動再到打包全教程

目錄 介紹 安裝 修改npm包配置 執行安裝命令 源代碼 運行 打包 先安裝git, 安裝打包工具 導入打包工具 執行打包命令 總結 介紹 electron確實好用,但安裝是真的要耗費半條命。每次安裝都會遇到各種問題,然后解決了之后。后面就不需要安裝了,但有時候比如電腦重裝…

【Rust 精進之路之第4篇-數據基石·上】標量類型:整數、浮點數、布爾與字符的精妙之處

系列&#xff1a; Rust 精進之路&#xff1a;構建可靠、高效軟件的底層邏輯 作者&#xff1a; 碼覺客 發布日期&#xff1a; 2025-04-20 引言&#xff1a;構成萬物的“原子”——標量類型 在上一篇文章【變量觀】中&#xff0c;我們深入探討了 Rust 如何通過 let、mut、const…

消息中間件RabbitMQ:簡要介紹及其Windows安裝流程

一、簡要介紹 定義&#xff1a;RabbitMQ 是一個開源消息中間件&#xff0c;用于實現消息隊列和異步通信。 場景&#xff1a;適用于分布式系統、異步任務處理、消息解耦、負載均衡等場景。 比喻&#xff1a;RabbitMQ 就像是快遞公司&#xff0c;負責在不同系統間安全快速地傳遞…

Docker概念詳解

文章目錄 一、Docker&#xff1a;容器化應用的基石1.1 環境1.2 Docker 是什么1.3 Docker鏡像1.3.1 基礎鏡像(Base Image)1.3.2 Dockerfile1.3.3 容器鏡像&#xff08;Container Image&#xff09; 1.4 Registry1.5 容器1.6 Docker VS 虛擬機 二、Docker 的架構原理2.1 C/S軟件架…

linux查看及修改用戶過期時間

修改用戶有效期 密碼到期時間 sudo chage -E 2025-12-31 username sudo chage -M 180 username sudo chage -d $(date %F) username 查詢用戶密碼到期時間 for user in $(cat /etc/passwd |cut -d: -f1); do echo $user; chage -l $user | grep "Password expires"; …