前端面试笔试(四)

news2024/12/22 9:26:37

目录

一、数据结构算法等综合篇

1.线性探查法解决哈希冲突

2.请求分页系统中文件区和对换区

3.RADIUS认证协议,运行在哪个网络协议上

二、代码输出篇

1.res=['1','2','100'].map(parseInt)

如果我们想要输出为[1,2,100],可以:

还可以换map里的这个函数:换成Number

2.delete 操作符用于删除对象的属性

3.call,bind改变this指向

三、html、css、JavaScript篇

1.Math.ceil()、Math.round() 和 Math.floor()


一、数据结构算法等综合篇

1.线性探查法解决哈希冲突

哈希表有10个元素,采用的hash函数为H(key)=key%10,用线性探查法解决哈希冲突,则(1,3,5,13,4,6)中4应该放在第几号格中?

答案:6

我理解的线性探查法就是,通过哈希函数取余后,得到的这个数字如果没有被占用就放在应该的位置,如果占用了就向后探查,直到探查到没有被占用的位置

对于给定的键值序列 (1,3,5,13,4,6),我们依次插入这些键并处理冲突。

  1. 插入1:
    • H(1)=1%10=1
    • 位置1是空的,直接插入1。
  2. 插入3:
    • H(3)=3%10=3
    • 位置3是空的,直接插入3。
  3. 插入5:
    • H(5)=5%10=5
    • 位置5是空的,直接插入5。
  4. 插入13:
    • H(13)=13%10=3
    • 位置3已被3占据,使用线性探查法:
      • 检查位置4(3+1),位置4是空的。
    • 插入13到位置4。

哈希表当前状态:

索引:  0 1 2 3 4 5 6 7 8 9
值:    _ 1 _ 3 13 5 _ _ _ _

这时候插入4: 

  • H(4)=4%10=4
  • 位置4已被13占据,使用线性探查法:
    • 检查位置5(4+1),位置5已被5占据。
    • 检查位置6(5+1),位置6是空的。
  • 插入4到位置6。

所以4放在6号格中。

然后链地址法就是,通过哈希函数取余后,在哈希表的这个位置放个链表,然后把哈希地址相同的记录都链接在同一链表中。


2.请求分页系统中文件区和对换区

请求分页系统中的外存分为用于存放文件的文件区和用于存放对换页面的对换区,关于文件区和对换区的分配方式,哪个用离散分配,哪个用连续分配?
文件区是离散分配,对换区是连续分配    

文件区

  • 分配方式:离散分配。

  • 原因:文件区用于存放各类文件,这些文件的访问频率通常较低。为了提高文件存储空间的利用率,文件区采取离散分配方式。离散分配允许文件被分散地存储在外存的多个不相邻的位置,从而更有效地利用存储空间。

对换区

  • 分配方式:连续分配。

  • 原因:对换区用于存放从内存换出的进程(或页面)。这些进程(或页面)在需要时会被换入内存,因此它们的访问频率相对较高。为了提高进程换入和换出的速度,对换区采取连续分配方式。连续分配可以确保进程(或页面)在换入和换出时能够快速地找到连续的内存块或外存区域,从而减少地址转换和内存管理的时间开销。

综上所述,文件区采用离散分配方式以提高存储空间的利用率,而对换区则采用连续分配方式以提高进程换入和换出的速度。这两种分配方式共同构成了请求分页系统中外存的有效管理策略。


3.RADIUS认证协议,运行在哪个网络协议上

RADIUS(Remote Authentication Dial In User Service,远程用户拨号认证)认证协议是运行在网络协议UDP(User Datagram Protocol,用户数据报协议)之上的。RADIUS是一种分布式的、客户端/服务器结构的信息交互协议,能保护网络不受未授权访问的干扰,常应用在既要求较高安全性、又允许远程用户访问的各种网络环境中。该协议定义了基于UDP的RADIUS报文格式及其传输机制,并规定UDP端口1812、1813分别作为默认的认证、计费端口。

RADIUS协议最初仅是针对拨号用户的AAA(认证、授权和计费)协议,后来随着用户接入方式的多样化发展,RADIUS也适应多种用户接入方式,如以太网接入等。它通过认证授权来提供接入服务,通过计费来收集、记录用户对网络资源的使用。


二、代码输出篇

1.res=['1','2','100'].map(parseInt)

  let res=['1','2','100'].map(parseInt)
  console.log(res);

输出结果为:[1,NaN,4]

解释:

map函数:
将数组的每个元素传递给指定的函数处理,并返回处理后的数组
所以 [‘1’,‘2’,‘100’].map(parseInt) 就是将字符串1,2,100作为元素;0,1,2作为下标分别调用 parseInt 函数。
即求出 parseInt(‘1’,0), parseInt(‘2’,1), parseInt(‘100’,2)的结果。

parseInt函数会接收到两个参数:当前遍历的元素(这里是字符串)和当前元素的索引(一个整数)。由于parseInt的第二个参数(基数)通常用于指定解析时使用的进制,但在这里,它错误地接收了元素的索引作为基数。

这里是具体发生了什么:

  • 对于第一个元素'1',索引是0。parseInt('1', 0)在现代浏览器中通常会被解析为1,因为当基数为0时,如果字符串不以"0x"或"0X"开头,则默认使用10作为基数(尽管这个行为在某些旧版浏览器中可能有所不同)。但在这个例子中,我们可以认为它解析为了1,因为结果符合我们的预期。

  • 对于第二个元素'2',索引是1。parseInt('2', 1)会解析为NaN,因为基数1不是有效的基数

  • 对于第三个元素'100',索引是2。parseInt('100', 2)会尝试将字符串"100"解析为二进制数。在二进制中,"100"是一个有效的数字,它等于十进制的4。因此,这里的结果是4,而不是我们可能期望的100(如果我们希望将其解析为十进制数的话)。

这个结果是由于parseInt函数在map回调中被错误地使用了数组的索引作为基数所导致的。

如果我们想要输出为[1,2,100],可以:

指定一个明确的基数(通常是10,如果你希望将字符串解析为十进制数)给parseInt函数

let res = ['1', '2', '100'].map(numStr => parseInt(numStr, 10));
console.log(res); // 输出: [1, 2, 100]

还可以换map里的这个函数:换成Number

  let res=['1','2','100'].map(Number)
  console.log(res);//[1,2,100]

2.delete 操作符用于删除对象的属性

  const name="name";
  url="www.baidu.com";// 注意:这里应该用var、let或const声明url,否则它是全局对象的属性(在浏览器中通常是window)
  console.log(delete name);
  console.log(delete url);

  console.log(delete name);
  console.log(delete url);

输出结果为:

false

true

在JavaScript中,delete 操作符用于删除对象的属性。然而,它不能用于删除通过 varconst 或 let 声明的变量,因为这些变量并不是对象的属性,而是属于词法环境的一部分。

有几个关键点需要注意:

  1. const name = "name"; 声明了一个常量 name,它不能被 delete 操作符删除。
  2. url = "www.baidu.com"; 实际上是在全局作用域中创建或覆盖了一个属性 url(在浏览器中,这通常是 window.url 的一个简写,但 window 对象本身并未在代码中显式提及)。由于 url 是作为全局对象的属性被创建的,所以理论上它可以通过 delete 操作符被删除(尽管在实际开发中修改全局对象通常是不推荐的做法)。

在严格模式('use strict';)下,尝试删除通过 const 或 let 声明的变量会抛出一个 TypeError。同时,即使不在严格模式下,delete 操作符对于通过 const 声明的变量也会返回 false,表示删除操作失败。


3.call,bind改变this指向

  var num=2;
  function getNum(){
      let num=3;
      console.log(this.num);
  }
  function func(){
      let num=3;
      getNum.call(this);
  }
  var obj={
      num: 1,
      func:func.bind(this)
  }
  obj.func();

输出结果为:2

在解析这段代码之前,我们需要理解几个关键点:变量作用域、this 关键字的行为,以及 bind 方法的用途。

  1. 变量作用域var 声明的变量具有函数作用域或全局作用域(如果声明在函数外部)。let 声明的变量具有块级作用域,即它们只在其声明的块(由 {} 包围的代码块)内有效。

  2. this 关键字this 的值取决于函数是如何被调用的。在全局作用域中,this 通常指向全局对象(在浏览器中是 window)。但是,当函数作为对象的方法被调用时,this 指向该对象。使用 callapply 或 bind 方法可以显式地设置 this 的值。

  3. bind 方法bind 方法创建一个新的函数,当这个新函数被调用时,this 被设置为 bind 方法的第一个参数,其余参数将作为新函数的前置参数传递给原函数

那么上面的代码可以添加一些注释如下:

var num = 2; // 全局变量 num

function getNum() {
    let num = 3; // 块级作用域变量 num,仅在 getNum 函数内部有效
    console.log(this.num); // 输出 this 指向对象的 num 属性
}

function func() {
    let num = 3; // 块级作用域变量 num,仅在 func 函数内部有效
    getNum.call(this); // 使用 call 方法显式设置 this 的值
}

var obj = {
    num: 1, // 对象属性 num
    func: func.bind(this) // 将 func 函数绑定到全局 this(在这里是全局对象)
};

obj.func(); // 调用 obj 的 func 方法

关键点在于 func.bind(this)。在这里,this 在 bind 调用时指的是全局对象(在浏览器中是 window)。因此,func 函数被绑定到全局对象,无论它如何被调用,其内部的 this 都指向全局对象。

但是,由于 getNum.call(this) 在 func 内部被调用,并且 func 是通过 obj.func() 被调用的,我们可能会误以为 this 在 getNum.call(this) 中会指向 obj。然而,由于 func 已经被 bind 到全局对象,this 在 func 内部实际上指向全局对象。因此,getNum.call(this) 中的 this 也指向全局对象。

然而,这里有一个陷阱:在严格模式('use strict';)下,全局作用域中的 this 不会是 window 对象(在浏览器中),而是 undefined。但是,由于代码中没有启用严格模式,我们可以假设 this 指向全局对象。

最终,getNum 函数中的 console.log(this.num) 会输出全局对象上的 num 属性,即 2(因为全局变量 num 被设置为 2)。


三、html、css、JavaScript篇

1.Math.ceil()Math.round() 和 Math.floor()

console.log(Math.ceil(-0.6) + Math.round(-0.6) - Math.floor(-0.6));

输出结果为: 0

在这个表达式中,我们使用了三个数学函数:Math.ceil()Math.round() 和 Math.floor(),它们分别用于向上取整、四舍五入和向下取整。现在,让我们逐一分析这些函数对于输入 -0.6 的行为。

  1. Math.ceil(-0.6)
    • 这个函数将 -0.6 向上取整到最接近的整数。
    • 因为 -0.6 小于 0,所以向上取整的结果是 0(而不是 -0,因为在 JavaScript 中整数和 -0 在数值上是相等的,但通常表示为 0)。
  2. Math.round(-0.6)
    • 这个函数将 -0.6 四舍五入到最接近的整数。
    • 因为 -0.6 的小数部分小于 0.5,所以四舍五入的结果是 -1
  3. Math.floor(-0.6)
    • 这个函数将 -0.6 向下取整到最接近的整数。
    • 因为 -0.6 小于 0,所以向下取整的结果是 -1

所以原来的代码就相对于: console.log(0 + (-1) - (-1));,结果就是0
 

我们可以记:

floor是地板,向下取。round是左右,大约,要四舍五入。ceil和floor相对,向上取。


加油加油^_^

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

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

相关文章

从零开始学习 sg200x 多核开发之 milkv-duo256 编译运行 sophpi

sophpi 是 算能官方针对 sg200x 系列的 SDK 仓库 https://github.com/sophgo/sophpi ,支持 cv180x、cv81x、sg200x 系列的芯片。 SG2002 简介 SG2002 是面向边缘智能监控 IP 摄像机、智能猫眼门锁、可视门铃、居家智能等多项产品领域而推出的高性能、低功耗芯片&a…

【客户服务】互联网时代客户投诉处理金点子

互联网时代客户投诉新特点 客户投诉渠道广投诉的内容涉及到企业的各个方面客户维权意识越来越强负面效应很难管 卓越客户体验成为企业核心竞争力 移动互联网与社会化媒体背景下,客户的全方位感知、情感、卓越体验、高效需求成为驱动技术、应用、终端以及服务持续…

SQL 审核在 CloudQuery 的四大场景应用

数据库作为数据的核心载体,其安全性和稳定性对业务的影响至关重要。而在我们日常业务中,SQL 编写不当是引起数据库故障的一个重要原因,轻则影响数据库性能,重则可能直接导致「雪崩」。因此,SQL 审核作为 SQL 代码投入生…

【前端知识】Javascript前端框架Vue入门

前端框架VUE入门 概述基础语法介绍组件特性组件注册Props 属性声明事件组件 v-model(双向绑定)插槽Slots内容与出口 组件生命周期完整示例1. 创建 Vue 项目(如果还没有)2. 定义和使用组件3. 在主应用中使用组件4. 运行应用完整项目结构 参考文献 概述 V…

Jmeter基础篇(24)Jmeter目录下有哪些文件夹是可以删除,且不影响使用的呢?

一、前言 Jmeter使我们日常做性能测试最常用的工具之一啦!但是我们在和其他同学协同工作的时候,偶尔也会遇到一些问题,例如我想要给别人发送一个Jmeter工具包,但这个文件包往往会很大,比较浪费流量和空间,…

Python_爬虫3_Requests库网络爬虫实战(5个实例)

目录 实例1:京东商品页面的爬取 实例2:亚马逊商品页面的爬取 实例3:百度360搜索关键词提交 实例4:网络图片的爬取和存储 实例5:IP地址归地的自动查询 实例1:京东商品页面的爬取 import requests url …

StructuredStreaming (一)

一、sparkStreaming的不足 1.基于微批,延迟高不能做到真正的实时 2.DStream基于RDD,不直接支持SQL 3.流批处理的API应用层不统一,(流用的DStream-底层是RDD,批用的DF/DS/RDD) 4.不支持EventTime事件时间(一般流处理都会有两个时间:事件发生的事件&am…

计算机网络HTTP——针对实习面试

目录 计算机网络HTTP什么是HTTP?HTTP和HTTPS有什么区别?分别说明HTTP/1.0、HTTP/2.0、HTTP/3.0请说明访问网页的全过程请说明HTTP常见的状态码Cookie和Session有什么区别?HTTP请求方式有哪些?请解释GET和POST的区别?HT…

转轮数组(C语言实现)

题目介绍 方法一我们可以先把数字1 2 3 4逆转一下&#xff0c;第二步我们可以逆转一下5 6 7&#xff0c; 最后整体逆置一下就会变成上面的数字。 void reverse(int* nums, int begin, int end) {while (begin < end){int tmp nums[begin];nums[begin] nums[end];nums[en…

Ubuntu 的 ROS 操作系统 turtlebot3 gazebo仿真

引言 TurtleBot3 Gazebo仿真环境是一个非常强大的工具&#xff0c;能够帮助开发者在虚拟环境中测试和验证机器人算法。 Gazebo是一个开源的3D机器人仿真平台&#xff0c;它能支持物理引擎&#xff0c;允许机器人在虚拟环境中模拟和测试。结合ROS&#xff0c;它能提供一个完整的…

uniapp vuex的使用

实现组件全局&#xff08;数据&#xff09;管理的一种机制&#xff0c;可以方便的实现组件之间共享数据&#xff0c;不同于上述三种传递值的方式。 可以把vuex当成一个store仓库&#xff0c;可以集中管理共享的数据&#xff0c;并且存储在vuex中的数据都是响应式的&#xff0c…

uniapp适配暗黑模式配置plus.nativeUI.setUIStyle适配DarkMode配置

uniapp适配暗黑模式配置 目录 uniapp适配暗黑模式配置setUIStyleDarkMode 适配app-plus manifest.json配置theme.json配置pages.json配置页面切换代码实现同步手机暗黑配置额外适配 参考官方文档&#xff1a;https://uniapp.dcloud.net.cn/tutorial/darkmode.html 主要用到api…

element ui table进行相同数据合并单元格

示例如图 //要合并的项&#xff08;自定义&#xff09; const columnArr ["dq","sj","xj","zj","zjj","zjfzr","nhxm","nhsjh","nhsfzh","","",""…

uniapp 实现 ble蓝牙同时连接多台蓝牙设备,支持app、苹果(ios)和安卓手机,以及ios连接蓝牙后的一些坑

首先对 uniapp BLE蓝牙API进行封装 这里我封装了一个类&#xff1a;bluetoothService.js 代码&#xff1a; import { throttle } from lodash export default class Bluetooth {constructor() {this.device {};this.connected false;// 使用箭头函数绑定类实例的上下文&am…

51单片机应用开发(进阶)---模块化编程

实现目标 1、掌握.h 文件的格式、extern 的用法&#xff1b; 2、握模块化编程方法步骤&#xff1b; 3、具体实现&#xff1a;&#xff08;1&#xff09;提供一个C文件&#xff0c;将其按照功能模块进行模块化。 一、为什么要进行模块化编程&#xff1f; 传统的编程方式&…

arkUI:水果选择与管理:基于 ArkUI 的长按编辑功能实现

水果选择与管理&#xff1a;基于 ArkUI 的长按编辑功能实现 1 主要内容说明2 相关内容2.1 相关内容2.1.1 源码1内容的相关说明2.1.1.1 数据结构与状态管理2.1.1.2 添加水果功能2.1.1.3 水果列表展示2.1.1.4 长按进入编辑模式2.1.1.5 复选框的多选功能2.1.1.6 删除水果功能2.1.1…

小程序20-样式:自适应尺寸单位 rpx

手机设备的宽度逐渐多元化&#xff0c;也就需要开发者开发过程中&#xff0c;去适配不同屏幕宽度的手机&#xff0c;为了解决屏幕适配问题&#xff0c;微信小程序推出了 rpx 单位 rpx&#xff1a;小程序新增的自适应单位&#xff0c;可以根据不同设备的屏幕宽度进行自适应缩放 …

unity3d————Resources异步加载

知识点一&#xff1a;Resources异步加载是什么&#xff1f; 在Unity中&#xff0c;资源加载可以分为同步加载和异步加载两种方式。同步加载会在主线程中直接进行&#xff0c;如果加载的资源过大&#xff0c;可能会导致程序卡顿&#xff0c;因为从硬盘读取数据到内存并进行处理…

C#/WinForm拖拽文件上传

一、首先创建一个上传文件的类&#xff0c;继承Control类&#xff0c;如下&#xff1a; public class UploadControl : Control{private Image _image;public UploadControl(){this.SetStyle(ControlStyles.UserPaint | //控件自行绘制&#xff0c;而不使用操作系统的绘制Cont…

2024 同一个网段,反弹shell四种方法【linux版本】bash、python、nc、villian反弹shell图解步骤

实验环境准备&#xff08;同一个网段下&#xff0c;我是桥接的虚拟机&#xff09; 一、bash反弹shell 二、python反弹shell 三、nc反弹shell 四、villain反弹shell 实验环境准备&#xff08;同一个网段下&#xff0c;我是桥接的虚拟机&#xff09; 一台kali的linux(攻击者)…