JAVA八股文面经问题整理第8弹

文章目录

  • 目录

    文章目录

    提问问题

    问题1

    问题2

    问题3

    问题4

    问题5

    问题6

    问题7

    问题8

    问题9

    问题10

    写在最后


提问问题

  1. 笔试题:n皇后问题
  2. 笔试题:求一颗二叉搜索树中的众数
  3. TCP与UDP的概念,特点,区别和对应的使⽤场景?
  4. HTTP请求常⻅的状态码和字段
  5. 常⻅的请求⽅式?GET和POST请求的区别?
  6. 什么是虚拟内存?为什么需要虚拟内存?
  7. 什么是内存分段和分⻚?作⽤是什么?
  8. 说⼀说事物隔离级别?
  9. 什么时候需要创建索引
  10. 什么时候不需要创建索引?

问题1

利用回溯法解决,代码如下;具体思路看回溯法解n皇后

class Solution {List<List<String>> res = new ArrayList<>();//结果列表public List<List<String>> solveNQueens(int n) {char[][] chessboard = new char[n][n];for (char[] c : chessboard) {Arrays.fill(c, '.');}backTrack(n, 0, chessboard);return res;}public void backTrack(int n, int row, char[][] chessboard) {if (row == n) {//叶子节点res.add(Array2List(chessboard));return;}for (int col = 0;col < n; ++col) {if (isValid (row, col, n, chessboard)) {chessboard[row][col] = 'Q';backTrack(n, row+1, chessboard);chessboard[row][col] = '.';}}}public List Array2List(char[][] chessboard) {//处理结果List<String> list = new ArrayList<>();for (char[] c : chessboard) {list.add(String.copyValueOf(c));}return list;}public boolean isValid(int row, int col, int n, char[][] chessboard) {//检查是否合法// 检查列for (int i=0; i<row; ++i) { // 相当于剪枝if (chessboard[i][col] == 'Q') {return false;}}// 检查45度对角线for (int i=row-1, j=col-1; i>=0 && j>=0; i--, j--) {if (chessboard[i][j] == 'Q') {return false;}}// 检查135度对角线for (int i=row-1, j=col+1; i>=0 && j<=n-1; i--, j++) {if (chessboard[i][j] == 'Q') {return false;}}return true;}
}

问题2

二叉树的经典题目,代码如下;具体思路看二叉搜素树求众数

class Solution {ArrayList<Integer> resList;//结果集int maxCount;//最大出现频次int count;//当前节点频次TreeNode pre;//用来比较节点值是否相同public int[] findMode(TreeNode root) {resList = new ArrayList<>();maxCount = 0;count = 0;pre = null;//初始为空findMode1(root);int[] res = new int[resList.size()];for (int i = 0; i < resList.size(); i++) {res[i] = resList.get(i);}return res;}public void findMode1(TreeNode root) {if (root == null) {return;}findMode1(root.left);int rootValue = root.val;if (pre == null || rootValue != pre.val) { // 计数count = 1;} else {count++;}// 更新结果以及maxCountif (count > maxCount) {resList.clear();//清空失效的结果集resList.add(rootValue);//加入新的结果maxCount = count;} else if (count == maxCount) {resList.add(rootValue);}pre = root;findMode1(root.right);}
}

问题3

 TCP(传输控制协议)和UDP(用户数据报协议)是互联网协议套件(Internet Protocol Suite)中的两种主要传输层协议,它们定义了数据如何在网络中的不同设备之间进行传输

TCP特点:
- 面向连接:在数据传输前必须在通信双方建立连接。
- 可靠传输:通过序号和确认机制确保数据正确无误地按序到达。
- 流量控制:通过窗口机制防止发送方过快发送数据导致接收方来不及处理。
- 拥塞控制:能够检测网络拥塞并相应地调整数据发送速率。
- 全双工通信:支持数据同时双向传输。

UDP特点:
- 无连接:发送数据前不需要建立连接。
- 不可靠传输:不保证数据包的顺序、完整性或可靠到达。
- 无流量和拥塞控制:发送方不会根据网络状况调整数据发送速率。
- 轻量级:头部开销较小,开销仅有8字节,适合高速传输。
- 广播和多播支持:能够同时向多个接收者发送相同的数据。

TCP与UDP的区别:
连接性:
TCP是面向连接的,而UDP是无连接的。
可靠性:TCP提供可靠的数据传输服务,UDP不保证。
头部开销:TCP的头部开销较大,UDP较小。
顺序性:TCP保证数据按序传输,UDP不保证。
数据流量控制:TCP有流量控制和拥塞控制,UDP没有。
使用场景:TCP适合对数据传输质量要求较高的应用,如HTTP、FTP、SMTP等;UDP适合对实时性要求高但可以容忍一定丢包的应用,如VoIP、视频会议、在线游戏等。


问题4

 HTTP状态码是由三位数字组成,用来表示服务器响应请求的状态。

以下是一些常见的HTTP状态码及其含义:

  • `200 OK`:请求已成功,响应消息体中包含了请求的资源。
  • `201 Created`:请求已被实现,并且创建了新的资源。
  •  `204 No Content`:请求已成功,但响应消息体中不包含任何内容。
  •  `301 Moved Permanently`:请求的资源已被永久移动到新位置,响应中将包含新的URL。
  • `302 Found`:请求的资源临时移动到了其他URL,浏览器会跟踪这个临时位置。
  • `304 Not Modified`:资源未修改,可以使用缓存的版本。
  • `400 Bad Request`:服务器无法理解请求格式,客户端不应该尝试再次提交相同的请求。
  • `401 Unauthorized`:请求未经授权。通常需要用户认证。
  •  `403 Forbidden`:服务器理解请求客户端的请求,但是拒绝执行此请求。
  • `404 Not Found`:服务器找不到请求的资源。
  •  `500 Internal Server Error`:服务器遇到错误,无法完成请求。

HTTP响应中还包含一些重要的字段,这些字段通常位于HTTP响应头部(Status-Line之后):

  • Date:消息发送的日期和时间。
  • Server:处理请求的HTTP服务器软件及其版本。
  • Content-Type:响应体的媒体类型,例如text/htmlapplication/json等。
  • Content-Length:响应体的长度,以字节为单位。
  • Set-Cookie:由服务器设置客户端的cookie。
  • Location:用于重定向的URL。
  • Cache-Control:指示缓存指令,如max-age=300表示资源可以缓存300秒。
  • Expires:响应过期的日期和时间。
  • Last-Modified:资源最后修改的日期和时间。
  • ETag:资源的特定版本标识符,用于缓存验证。


问题5

 HTTP请求方法定义了客户端可以对服务器执行的操作。以下是一些常用的HTTP请求方法

  • GET:用于请求服务器发送指定资源。通常用于请求数据,如网页内容。
  • POST:用于向服务器提交数据进行处理,例如表单数据的提交。
  • PUT:用于上传资源到指定的URI。
  • DELETE:用于请求服务器删除指定的资源。
  • HEAD:类似于GET,但服务器在响应中只返回头部信息,不返回实体主体部分。
  • OPTIONS:用于获取目的资源所支持的通信选项。
  • PATCH:用于对资源进行部分更新。

GET和POST请求的区别主要包括以下几点:

1. 数据传输方式:GET请求将数据附加在URL之后,通过URL传递,数据可见且有长度限制;POST请求将数据放在HTTP请求的body中,数据不在URL中显示,没有长度限制

2. 安全性:POST比GET更安全,因为POST的数据不会显示在URL中,不易被保存和缓存。

3. 缓存:GET请求结果可以被浏览器缓存,而POST请求一般不会被缓存

4. 可重复性:GET请求可重复提交,而POST请求通常不建议这样做,因为可能导致同一资源被多次处理。

5. 应用场景:GET适用于获取数据,如网页浏览;POST适用于提交要被处理的数据,如表单提交、文件上传等。

6. 影响服务器状态:GET请求是幂等的,即多次执行相同的GET请求,资源状态不变;POST请求非幂等,执行多次可能会创建额外的资源或导致副作用。


问题6

虚拟内存是一种计算机系统内存管理技术,它允许操作系统使用硬盘空间作为临时的RAM(随机存取存储器)使用。在虚拟内存系统中,每个运行的程序都认为它拥有一大块连续的地址空间,即所谓的虚拟地址空间,而实际上这块空间可能被分割成多个物理内存碎片和硬盘上的交换文件。

虚拟内存的引入主要是为了解决以下问题

1. 物理内存限制:随着应用程序对内存需求的增加,物理内存(RAM)可能不足以满足所有程序的需求。虚拟内存通过使用硬盘空间来扩展可用内存,从而允许更多的程序同时运行。

2. 内存碎片:物理内存可能会因为频繁的内存分配和释放而产生大量的小碎片,这些碎片会降低内存的使用效率。虚拟内存抽象了物理内存的细节,使得操作系统可以更有效地管理内存。

3. 简化编程模型:虚拟内存为每个程序提供了一个连续的地址空间,这简化了程序设计和内存管理,因为程序员不需要担心实际物理内存的布局和限制。

4. 保护机制:虚拟内存可以实现内存隔离,确保一个程序的操作不会影响到其他程序的内存空间,从而提高系统的稳定性和安全性。

虚拟内存的关键技术包括分页(paging)和分段(segmentation)分页将虚拟地址空间和物理内存均划分为固定大小的块(页),而分段则根据逻辑结构划分数据块(段)。现代操作系统通常结合使用这两种技术来实现虚拟内存。

然而,虚拟内存也有其缺点,特别是当频繁访问硬盘上的虚拟内存时,会导致性能下降,这种现象称为“页面交换”(page swapping)或“页面抖动”(thrashing)。因此,虽然虚拟内存提供了灵活的内存管理和扩展能力,但它也依赖于足够快的硬盘和良好的内存管理策略来维持系统性能。


问题7

内存分段(Segmentation)和分页(Paging)是操作系统中用来管理虚拟内存的两种主要技术

内存分段按照程序的逻辑结构来划分内存,例如代码段、数据段、堆栈段等。每个段有自己的起始地址和长度,可以是不连续的物理内存块。分段的优点是可以更好地反映程序的逻辑结构,便于实现内存保护和共享。每个段可以独立地控制访问权限,而且可以支持动态链接和程序的模块化

分页则是将虚拟地址空间和物理内存均等划分为固定大小的块,这些块称为页(Page)和帧(Frame)。页和帧的大小是一样的,通常为几千字节。分页的优点在于它简化了内存的管理,因为内存的分配和回收只需要考虑页的大小,而不需要关心具体的物理内存布局。此外,分页减少了外部碎片,提高了内存的利用率

在实际的操作系统设计中,经常会将分段和分页结合起来使用,形成了段页式内存管理(Segmented Page)。这种方式既保留了分段的优点,又利用了分页的高效管理特性。在段页式内存管理中,首先按照程序的逻辑结构将虚拟地址空间分成若干逻辑段,然后再将每个逻辑段细分成固定大小的页。这样,操作系统可以通过段表来管理各个逻辑段的基址和界限,通过页表来管理各个页到物理帧的映射。这种方法既提供了灵活的内存管理,又保持了较高的性能。


问题8

当数据库上有多个事务同时执⾏的时候,就可能出现脏读(dirty read)、不可重复读(non-
repeatable read)、幻读(phantom read)
的问题,为了解决这些问题,就有了“隔离级别”的概
念。
SQL标准的事务隔离级别包括:读未提交(read uncommitted)、读提交(read committed)、可重复读(repeatable read)和串⾏化(serializable )

  • 读未提交是指,⼀个事务还没提交时,它做的变更就能被别的事务看到。
  • 读提交是指,⼀个事务提交之后,它做的变更才会被其他事务看到。
  • 可重复读是指,⼀个事务执⾏过程中看到的数据,总是跟这个事务在启动时看到的数据是⼀致的。当然在可重复读隔离级别下,未提交变更对其他事务也是不可⻅的。
  • 串⾏化,顾名思义是对于同⼀⾏记录,“写”会加“写锁”,“读”会加“读锁”。当出现读写锁冲突的时候,后访问的事务必须等前⼀个事务执⾏完成,才能继续执⾏。


问题9

什么时候需要创建索引

  1. 表的主关键字:⾃动建⽴唯⼀索引
  2. 直接条件查询的字段:经常⽤于WHERE查询条件的字段,这样能够提⾼整个表的查询速度
  3. 查询中与其它表关联的字段:例如字段建⽴了外键关系
  4. 查询中排序的字段:排序的字段如果通过索引去访问将⼤⼤提⾼排序速度
  5. 唯⼀性约束列: 如果某列具有唯⼀性约束,那么为了确保数据的唯⼀性,可以在这些列上创建唯⼀索引。
  6. ⼤表中的关键列: 在⼤表中,如果查询的效率变得很低,可以考虑在关键列上创建索引。

问题10

什么时候不需要创建索引

  1. ⼩表: 对⼩表创建索引可能会带来额外的开销,因为在⼩数据集中扫描整个表可能⽐使⽤索引更快。
  2. 频繁的插⼊、更新和删除操作: 索引的维护成本会随着数据的插⼊、更新和删除操作⽽增加。如果表经常被修改,过多的索引可能会影响性能。
  3. 数据重复且分布平均的表字段:假如⼀个表有10万⾏记录,性别只有男和⼥两种值,且每个值的
  4. 分布概率⼤约为50%,那么对这种字段建索引⼀般不会提⾼数据库的查询速度。
  5. 很少被查询的列: 如果某列很少被⽤于查询条件,那么为它创建索引可能没有明显的性能提升。
  6. 查询结果总⾏数较少的表: 如果查询的结果集总⾏数很少,使⽤索引可能不会有太⼤的性能提升。

写在最后

PS:以上是网络上收集的一些常见的问题以及自己对答案搜索整理;一次整理基本上就是面试一次的题量,适合对自己的知识的查缺补漏

面试一般根据岗位要求或者简历上写的来进行扩展提问,也有些是直接问公司常用到的相关方面的技术问题,无论怎么准备都祝大家能拿到心怡的offer!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/764661.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

DashVector - 阿里云向量检索服务

DashVector 文章目录 DashVector一、关于 DashVector二、使用 DashVector 前提准备1、创建Cluster&#xff1a;2、获得API-KEY3、安装最新版SDK 三、快速使用 DashVector1. 创建Client2. 创建Collection3、插入Doc4、相似性检索5、删除Doc6. 查看Collection统计信息7. 删除Coll…

【阿里云物联网】上报设备数据

前言 MQTT客户端上传数据到阿里云服务端&#xff0c;并且能将数据显示出来。在此之前&#xff0c;我们先要懂得阿里云给设备管理划分的概念。首先是产品&#xff0c;所以在产品里要配置内容&#xff0c;产品下的设备才可以使用&#xff0c;比如主题大类都是在产品里面就可以查…

2024-3-22-Qtday3作业

1> 思维导图 2> 要求&#xff1a; 使用手动连接&#xff0c;将登录框中的取消按钮使用qt4版本的连接到自定义的槽函数中&#xff0c;在自定义的槽函数中调用关闭函数 将登录按钮使用qt5版本的连接到自定义的槽函数中&#xff0c;在槽函数中判断ui界面上输入的账号是否…

【目标检测】YOLOv9理论解读与代码分析

前言 YOLO这个系列的故事已经很完备了&#xff0c;比如一些Decoupled-Head或者Anchor-Free等大的策略改动已经在YOLOv8固定下来&#xff0c;后面已经估计只有拿一些即插即用的tricks进行小改。 mmdetection框架的作者深度眸也在知乎上对“是否会有YOLOv9”这一观点发表看法&a…

Python爬取歌曲宝音乐:轻松下载Jay的歌

歌曲宝是一个不用付费就能听jay的歌曲&#xff0c;但是每次都只能播放一首不方便&#xff0c;于是今天想把它下载下来&#xff0c;本地循环播放&#xff0c;它所用到的接口是某我的还不错哈 获取搜索接口 分析html请求接口&#xff0c;获取到的数据是直接渲染好的HTML内容&…

苍穹外卖-day02

1. 新增员工 1.1 需求分析和设计 注意事项&#xff1a; 账号必须是唯一的手机号为合法的11位手机号码身份证号为合法的18位身份证号码密码默认为123456 本项目约定&#xff1a; 管理端发出的请求&#xff0c;统一使用**/admin**作为前缀。用户端发出的请求&#xff0c;统一使用…

Redis中的缓存穿透

缓存穿透 缓存穿透是指客户端请求的数据在缓存中和数据库中都不存在&#xff0c;导致这些请求直接到了数据库上&#xff0c;对数据库造成了巨大的压力&#xff0c;可能造成数据库宕机。 常见的解决方案&#xff1a; 1&#xff09;缓存无效 key 如果缓存和数据库中都查不到某…

Dell戴尔XPS 12 9250二合一笔记本电脑原装出厂Windows10系统包下载

链接&#xff1a;https://pan.baidu.com/s/1rqUEM_q5DznF0om6eevcwg?pwdvij0 提取码&#xff1a;vij0 戴尔原厂WIN10系统自带所有驱动、出厂主题壁纸、系统属性专属联机支持标志、系统属性专属LOGO标志、Office办公软件、MyDell等预装程序 文件格式&#xff1a;esd/wim/sw…

Xilinx FPGA 远程升级时bin和bit文件使用注意

以Spartan-6 ISE开发环境为例。 ISE开发环境支持生成bit和bin格式的程序文件&#xff0c;可以在生成选项进行配置&#xff1a; 把生成的bit文件和bin文件进行二进制比较&#xff0c;发现bit比bin文件头部多了一些内容&#xff08;头部信息&#xff09;&#xff0c;剩余部分完…

Microsoft Edge 中的 Internet Explorer 模式解决ie禁止跳转到edge问题

作为网工&#xff0c;网络中存在很老的设备只能用ie浏览器访问打开&#xff0c;但是win10后打开Internet Explorer 会强制跳转到Edge 浏览器&#xff0c;且有人反馈不会关&#xff0c;为此找到了微软官方的Microsoft Edge 中的 Internet Explorer 模式&#xff0c;可以直接在Mi…

qt 程序 打包 批处理方式

如果可执行程序包含很多自己写的dll&#xff0c;用cmd 方式 使用 windeployqt 绝对路径打包时比较慢&#xff0c;下面介绍通过bat批处理的方式&#xff0c;将打包命令写在文件中&#xff0c;执行bat文件即可&#xff0c;具体步骤如下&#xff1a; 1.复制 将要打包的a1.dll 等…

网络工程师练习题6

网络工程师 综合题 计算并填写下表&#xff1a; TP地址191.23.181.13子网掩码255.255.192.0地址类型 &#xff08;1&#xff09;网络地址&#xff08;2&#xff09;直接广播地址&#xff08;3&#xff09;主机号&#xff08;4&#xff09;子网内的最后一个可用IP地址&#xf…

【使用redisson完成延迟队列的功能】使用redisson配合线程池完成异步执行功能,延迟队列和不需要延迟的队列

1. 使用redisson完成延迟队列的功能 引入依赖 spring-boot-starter-actuator是Spring Boot提供的一个用于监控和管理应用程序的模块 用于查看应用程序的健康状况、审计信息、指标和其他有用的信息。这些端点可以帮助你监控应用程序的运行状态、性能指标和健康状况。 已经有了…

vue请求后端接口提示:CORS header miss ‘Access-Control-Allow-Origin’

原因分析&#xff1a; url请求中协议、域名、端口中只要有任意一个与当前url不相同&#xff0c;及出现跨域。 解决方案&#xff1a; JSONP (利用<script>标签的跨域能力) 例如&#xff1a; <img src"图片url地址" alt"" /> <script src&q…

专业矢量绘图设计软件:Sketch for mac 中文激活版

Sketch for Mac 是一款专业的矢量图形设计工具&#xff0c;主要用于 UI/UX 设计、网页设计、图标设计等领域。它的界面简洁、易用&#xff0c;功能强大&#xff0c;可以帮助设计师快速创建高质量的设计作品。 人性化界面 Sketch的界面非常简洁。最顶端的工具箱包含了最重要的操…

搭建基于 Snowflake 的 CI/CD 最佳实践!

Snowflake 提供了可扩展的计算和存储资源&#xff0c;和基于 SQL 的界面 Snowsight&#xff0c;方便用户进行数据操作和分析。然而&#xff0c;如果用户想将自己的 CI/CD 流程与 Snowflake 集成时&#xff0c;会发现一些不便之处&#xff08;尤其相比其 SnowSight 优秀的查询能…

eclipse中使用PlantUML plugin查看对象关系

一.背景 公司安排的带徒弟任务&#xff0c;给徒弟讲了如何设计对象。他们的思维里面都是单表增删改查&#xff0c;我的脑海都是一个个对象&#xff0c;他们相互关系、各有特色本事。稳定的结构既能满足外部功能需求&#xff0c;又能在需求变更时以最小代价响应。最大程度的记录…

0201线性方程组和矩阵-矩阵及其运算-线性代数

文章目录 一、线性方程组二、矩阵的定义结语 一、线性方程组 设有 n 个未知数 m n个未知数m n个未知数m个方程的线性方程组 { a 11 x 1 a 12 x 2 ⋯ a 1 n x n b 1 , a 21 x 1 a 22 x 2 ⋯ a 2 n x n b 2 , ⋯ a m 1 x 1 a m 2 x 2 ⋯ a m n x n b m , \begin{ca…

Python RPA简单开发实践(selenium登陆浏览器自动输入密码登陆)

打开csdn博客&#xff0c;简单版 class BS:def __init__(self, url):self.url url# self.password password# self.username usernamedef login_url(self):from selenium import webdriver# 不自动关闭浏览器option webdriver.ChromeOptions()option.add_experimental_opt…

【Canvas与艺术】绘制暗绿色汽车速度仪表盘

【原型】 【成果】 【代码】 <!DOCTYPE html> <html lang"utf-8"> <meta http-equiv"Content-Type" content"text/html; charsetutf-8"/> <head><title>暗绿色汽车速度仪表盘</title><style type"t…