当前位置: 首页 > news >正文

Myweb项目——面试题总结

一.项目描述

项⽬概述:本项⽬在云服务上开发了⼀个后端服务器与前端⻚⾯为⼀体的⾳乐专辑 鉴赏⽹站,旨在为⽤⼾提供丰富的⾳乐专辑信息展⽰和优 质的浏览体验。 主要内容及技术: 后端开发:利⽤ C 语⾔构建后端服务器,实现了基础的 HTTP 服务器 功能。开发 create_socket 函数,创建并配置 TCP 套接字,使⽤ socket、bind、 listen 等 函数进⾏套接字操作,并设置最⼤连接数为 5,确保服务器的正常启动和监听。实现 get_fd 函 数,使⽤ strtok 对客⼾端的 HTTP 请求进⾏解 析,包括提取请求⽅法和资源路径。采 ⽤ fun 函数作为线程函数,使⽤ recv 接收客⼾端请求,通过 get_fd 处理请求,根据⽂件是 否存在发送相应的 HTTP 响应。在 main 函数中,调⽤ create_socket 创建服务器套接字, 使⽤ accept 接收客⼾端连接,并为每个客⼾端创建独⽴线程,调⽤ fun 函数 处理请求,通 过 pthread_create 实现多线程并发处理,提⾼服务器的并发处理能⼒,避免客⼾端请求阻塞。 前端开发:设计了具有吸引⼒的主⻚和 404 ⻚⾯,呈现了醒⽬的标题,添加了背景⾳乐和背 景图⽚,展⽰了歌⼿信息,使⽤表格和超链接展 ⽰歌⼿的专辑封⾯图⽚,这些图⽚链接到⽹易 云⾳乐的相应专辑⻚⾯,⽅便⽤⼾跳转查看更多信息。

二.后端开发类

  1. 基础概念
    • 问题:在使用 C 语言构建后端 HTTP 服务器时,socket、bind、listen 这三个函数分别起到什么作用?如果缺少其中某一个函数的调用,会对服务器产生什么影响?
    • 答案:socket 函数用于创建一个套接字,确定通信的协议族(如 TCP/IP)、套接字类型(如流式套接字 SOCK_STREAM 用于 TCP 协议)和协议(通常为 0,让系统根据前两个参数自动选择合适的协议),它是网络通信的基础,没有它就无法创建通信端点。bind 函数将套接字与特定的 IP 地址和端口号绑定,使得服务器能够在指定的地址和端口上监听连接请求,若缺少该函数调用,服务器无法确定自己的地址和端口,客户端将无法准确连接到服务器。listen 函数用于将套接字设置为监听模式,指定服务器可以接受的最大连接数,它为服务器接收客户端连接做好准备,若没有调用该函数,服务器不能进入监听状态,无法接收客户端的连接请求。
  2. 函数实现细节
    • 问题:在 create_socket 函数中,设置最大连接数为 5 的依据是什么?如果实际并发连接数超过 5 会出现什么情况?如何改进以处理更多并发连接?
    • 答案:设置最大连接数为 5 通常是基于对服务器资源(如内存、CPU 处理能力等)的初步评估,以及对预期并发连接数的估计,避免因连接数过多导致服务器资源耗尽而崩溃。如果实际并发连接数超过 5,超出部分的连接请求会在队列中等待,直到有已建立的连接关闭,空出位置。若等待队列也满了,新的连接请求将被拒绝。改进方法可以采用多路复用技术,如 select、poll 或 epoll(在 Linux 系统下),这些技术可以让服务器在一个线程中同时监控多个套接字的状态,处理多个连接的 I/O 事件,从而提高服务器对大量并发连接的处理能力;也可以增加服务器资源,如提升硬件性能,或者采用分布式架构来分担负载。
    • 问题:get_fd 函数中使用 strtok 对客户端的 HTTP 请求进行解析,若请求格式不符合标准 HTTP 格式,strtok 会如何处理?这种情况下如何保证服务器的健壮性?
    • 答案:若请求格式不符合标准 HTTP 格式,strtok 函数可能会无法正确分割字符串,导致无法准确提取请求方法和资源路径,甚至可能引发程序错误(如访问非法内存)。为保证服务器的健壮性,可以在调用 strtok 前,先对 HTTP 请求进行合法性检查,比如检查请求是否包含必要的字段(如请求行中的请求方法、URL 和 HTTP 版本),检查字段之间的分隔符是否正确等。在解析过程中,添加错误处理逻辑,当发现解析异常时,返回合适的错误响应(如 HTTP 400 Bad Request)给客户端,并记录错误日志以便后续排查问题。
  3. 多线程处理
    • 问题:在 main 函数中使用 pthread_create 为每个客户端创建独立线程处理请求,线程之间如何进行资源共享和同步?如果存在多个线程同时访问共享资源,可能会出现什么问题?如何解决?                                                                                                                                                                             答案:线程之间可以通过全局变量或共享内存来实现资源共享。对于资源同步,可以使用互斥锁(pthread_mutex_t)、条件变量(pthread_cond_t)等机制。当多个线程同时访问共享资源时,可能会出现数据竞争问题,导致数据不一致或程序逻辑错误。例如,多个线程同时对同一个全局变量进行读写操作,可能会使变量的值出现混乱。解决方法是使用互斥锁,在访问共享资源前,线程先获取互斥锁,确保同一时刻只有一个线程能够访问该资源,访问完成后释放锁。条件变量则常用于线程间的通信和同步,比如一个线程等待某个条件满足后再继续执行,其他线程可以通过修改条件并通知等待线程。

三.前端开发类

  1. 页面设计与实现
    • 问题:在设计主页面和 404 页面时,如何确保背景图片和背景音乐不影响页面的加载速度和用户体验?如果背景图片过大,应该如何优化?
    • 答案:为确保背景图片和背景音乐不影响页面加载速度,对于背景图片,可以采用合适的图片格式(如 JPEG 适用于照片,PNG 适用于有透明效果的图片),并对图片进行压缩处理,减少文件大小。同时,使用 CSS 的background-size属性合理设置图片大小,避免加载过大尺寸的图片。对于背景音乐,可以使用音频压缩技术减小文件体积,采用渐进式加载方式,让用户在音频未完全加载时也能开始播放。还可以提供播放 / 暂停按钮,让用户自主控制音频播放。如果背景图片过大,可以使用图片编辑工具进行裁剪,去除不必要的部分;进一步压缩图片质量,但要注意在保证图片清晰度的前提下进行;也可以采用响应式图片技术,根据不同的设备屏幕尺寸加载合适大小的图片。
    • 问题:使用表格和超链接展示歌手的专辑封面图片,并链接到网易云音乐的相应专辑页面,如何保证超链接的有效性和安全性?如果网易云音乐的专辑页面地址发生变化,如何快速更新网站上的链接?
    • 答案:为保证超链接的有效性,在添加链接时要仔细核对网易云音乐专辑页面的 URL 地址,确保准确无误。可以定期对链接进行检查,编写脚本自动访问链接,检查是否能正常跳转,若发现无效链接及时处理。安全性方面,避免在链接中传递敏感信息,防止恶意用户利用链接进行攻击。对于链接地址变化的情况,可以将链接地址存储在数据库或配置文件中,而不是直接写在 HTML 代码里。当链接地址发生变化时,只需修改数据库或配置文件中的对应值,通过程序读取更新后的地址,实现网站上链接的快速更新,减少手动修改大量 HTML 代码的工作量和出错概率。

相关文章:

  • 腾讯云物联网平台
  • ASP.NET Core自动事务ActionFilter
  • 数据预处理之特征选择 (Feature Selection)
  • 深入探究 MySQL 架构:从查询到硬件
  • 100个节点的部署,整合Docker、Kubernetes和Jenkins的详细设计
  • 安全生产知识竞赛宣传口号160句
  • OpenCV --- 图像预处理(七)
  • 科学养生,拥抱健康生活
  • RD电子实验记录本选用贴士A-B-C
  • 探秘卷积神经网络:深度学习的图像识别利器
  • OpenCV第6课 图像处理之几何变换(缩放)
  • 33.状态压缩动态规划
  • 当JIT遇见K8s
  • Go 1.24 中的弱指针包 weak 使用介绍
  • 顶点着色器和片元着色器染色+表面体着色器染色
  • 《企业级 Java EE 架构设计精深实践》内容详解
  • 监听退出事件
  • 系统架构设计(三):质量属性
  • 扩展和自定义 asammdf 库:满足特定需求的解决方案
  • 如何创建一个C#项目(基于VS2022版)
  • 恒瑞医药赴港上市获证监会备案,拟发行不超8.15亿股
  • 可实时追踪血液中单个细胞的穿戴医疗设备问世
  • 演员孙俪:中年人没有脆弱的时间,学习胡曼黎不内耗
  • 苏迪曼杯即将在厦门打响,国羽向创纪录的14冠进军
  • 摩根士丹利基金雷志勇:AI带来的产业演进仍在继续,看好三大景气领域
  • 龚正会见巴基斯坦卡拉奇市市长穆尔塔扎·瓦哈卜、巴西圣保罗市市长里卡多·努内斯