腾讯一面-软件开发实习-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.mzph.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"; …