IT评测·应用市场-qidao123.com技术社区

标题: 前端口试笔试(二) [打印本页]

作者: 风雨同行    时间: 2024-11-17 12:20
标题: 前端口试笔试(二)
目次

一、数据布局算法等综合篇
1.HTTP/2、ETag有关
二、代码输出篇
1.new URL,url中的hostname,pathname,href
扩展说一下url的构成部门和属性
URL的构成部门
urlInfo 对象的属性
 2.一个递归的输出例子
 3.数组去重的不平常方法1
4.数组去重的不平常方法2
5.对象引用,函数参数通报,对象属性修改
扩展说下
三、css、html,JavaScript篇
1.在自定义组件上实现雷同原生表单元素的v-model功能,使用?
2.项目在主轴上的对齐方式?
3.JavaScript可能出现内存走漏的环境有哪些?
可能存在内存走漏的环境具体版:
4.position中绝对定位是相对于近来的定位父级来定位
扩展:css中position的值有哪些?分别的定位原点?


一、数据布局算法等综合篇

1.HTTP/2、ETag有关


在HTTP/1.1中,每个哀求通常都需要一个单独的TCP毗连,这会导致多个题目。起首,TCP毗连的创建和关闭都需要时间,这会增长网络耽误和资源斲丧。其次,HTTP/1.1需要按照顺序处理哀求,如果前面的哀求比较慢,后面的哀求就会被阻塞,这会导致队头阻塞题目。最后,每个哀求都需要携带完备的HTTP头部信息,这会占用大量的网络带宽。
而在HTTP/2中,多路复用技术解决了这些题目。它答应多个哀求和响应在同一个TCP毗连上并行处理,每个哀求都有一个唯一的ID,这使得多个哀求可以同时举行,而不必等待前一个哀求完成。这种方式淘汰了毗连创建和关闭的开销,进步了网络性能,低沉了耽误,并节省了网络带宽。
此外,HTTP/2还引入了头部压缩技术,通过压缩HTTP头部信息来进一步淘汰传输的数据量。这些改进使得HTTP/2在现代Web应用中具有更好的性能和用户体验。

ETag(Entity Tag)是HTTP协议中用于标识资源状态的一种机制,重要用于缓存管理和资源更新判定。当浏览器哀求服务器资源时,服务器会返回该资源的ETag值。在后续的哀求中,如果客户端想要验证该资源是否发生变化,它会将之前收到的ETag值通过If-None-Match哀求头发送给服务器。服务器会查抄当前资源的ETag值是否与客户端发送的值相匹配。如果匹配,阐明资源自前次哀求后未发生变化,服务器会返回304 Not Modified状态码,客户端可以继续使用缓存中的资源。如果不匹配,阐明资源已经发生变化,服务器会返回新的资源内容和新的ETag值。
通过这种方式,ETag头部有用地淘汰了不必要的网络传输,进步了页面加载速率,并确保了客户端能够获取到最新的资源。

cache-control是HTTP协议中用于控制资源缓存行为的头部字段,而max-age则是cache-control头部字段中的一个指令,用于指定资源在客户端缓存中的最大有用时间,单位是秒。当客户端吸收到服务器返回的包罗cache-control: max-age=N的响应头部时,它会将资源缓存起来,并在接下来的N秒内直接使用缓存中的资源,而不是向服务器发送新的哀求。
这种机制有助于淘汰不必要的网络哀求,进步页面加载速率,并减轻服务器的负担。
二、代码输出篇

1.new URL,url中的hostname,pathname,href

  1.     const urlInfo=new URL('https://reolink.com/product/argus/?id=123#comments');
  2.     console.log(urlInfo.hostname)
  3.     console.log(urlInfo.pathname)
  4.     console.log(urlInfo.href);
复制代码
输出为:

扩展说一下url的构成部门和属性

这个URL https://reolink.com/product/argus/?id=123#comments 是一个指向特定网页地址的字符串,它包罗了多个部门,这些部门可以被剖析和访问通过JavaScript中的 URL 对象。基于提供的URL创建的 URL 实例可能拥有的一些属性。
URL的构成部门

urlInfo 对象的属性

当你使用 const urlInfo = new URL('https://reolink.com/product/argus/?id=123#comments'); 创建一个 URL 对象时,urlInfo 将拥有以部属性(以及其他一些可能不直接相关的属性):
这些属性提供了对URL不同部门的访问,使得剖析、修改和使用URL变得更加轻易和直观。

 2.一个递归的输出例子

  1.     function calc(a){
  2.         return a>=2?calc(a-1)+a:a;
  3.     }
  4.     console.log(calc(5))
复制代码
输出结果为:15
现在,让我们计算 calc(5) 的结果:

现在,我们将这些值加起来,以逆序的方式(因为递归是从内向外计算的):


 3.数组去重的不平常方法1

  1.     console.log([1,2,2,4,4,5,5,6].reduce((p,q)=>p.includes(q)?p:[...p,q],[]))
复制代码
输出结果为[1,2,4,5,6]
上面的代码使用了JavaScript数组的reduce方法来对一个数组举行遍历和归约(或聚合),目的是去除数组中的重复元素。这里,reduce方法吸收一个回调函数和一个初始值(空数组[])作为参数。
 
回调函数吸收四个参数,但在这种环境下,只用到了前两个:

回调函数逻辑

初始值
初始值是一个空数组[],它作为第一次迭代时的累加器值。
代码实验流程
终极输出
终极,reduce方法返回的是去除重复元素后的数组[1, 2, 4, 5, 6],这个值被console.log输出到控制台。

4.数组去重的不平常方法2

  1. console.log(Object.values([1,2,2,4,4,5,5,6].reduce((p,q)=>(p[q]=q,p),{})))
复制代码
输出结果也是[1,2,4,5,6]
使用了JavaScript数组的reduce方法来处理一个数组,并联合Object.values方法来获取终极结果的数组形式。这里,reduce方法被用来构建一个对象,该对象的键是数组中的元素(去重后),值也是这些元素自己。然后,Object.values方法被用来从这个对象中提取出全部的值,形成一个新的数组。
回调函数吸收四个参数,但在这个例子中,只使用了前两个:

回调函数逻辑

初始值
初始值是一个空对象{},它作为第一次迭代时的累加器值。
代码实验流程

5.对象引用,函数参数通报,对象属性修改

  1.     let objA={name: 'A'}
  2.     let objB={name: 'B'}
  3.     function main(oa,ob){
  4.         oa={};
  5.         ob.name='C'
  6.     }
  7.     main(objA,objB);
  8.     console.log(objA.name,objB.name);
复制代码
输出结果为:A C
  1. oa = {}; // 这里重新赋值了oa,让它引用了一个新的空对象。这个修改不会影响到objA。
  2. ob.name = 'C'; // 这里修改了ob引用的对象的name属性。由于ob和objB引用的是同一个对象,所以这个修改会影响到objB。
复制代码

扩展说下
 



三、css、html,JavaScript篇

1.在自定义组件上实现雷同原生表单元素的v-model功能,使用?

用value和input
起首,创建一个自定义组件,好比 MyInput.vue:
  1. <template>
  2.   <input
  3.     :value="value"
  4.     @input="$emit('input', $event.target.value)"
  5.     :placeholder="placeholder"
  6.   />
  7. </template>
  8. <script>
  9. export default {
  10.   name: 'MyInput',
  11.   props: {
  12.     value: {
  13.       type: String,
  14.       default: ''
  15.     },
  16.     placeholder: {
  17.       type: String,
  18.       default: ''
  19.     }
  20.   }
  21. }
  22. </script>
复制代码
在这个组件中:

在你的父组件中使用这个自定义组件,并使用 v-model 绑定数据:
  1. <template>
  2.   <div>
  3.     <h1>自定义输入组件示例</h1>
  4.     <MyInput v-model="message" placeholder="请输入一些文字" />
  5.     <p>你输入的是: {{ message }}</p>
  6.   </div>
  7. </template>
  8. <script>
  9. import MyInput from './MyInput.vue';
  10. export default {
  11.   name: 'App',
  12.   components: {
  13.     MyInput
  14.   },
  15.   data() {
  16.     return {
  17.       message: ''
  18.     };
  19.   }
  20. }
  21. </script>
复制代码
在这个父组件中:

注意事项


2.项目在主轴上的对齐方式?

justify-content
在交织轴是align-items

3.JavaScript可能出现内存走漏的环境有哪些?

DOM 清空时还存在引用,定时器未清除,全局变量未清算,闭包使用不当,变乱监听器未解绑,循环引用,缓存未清算,第三方库或框架存在内存走漏
注意:箭头函数自己不会导致内存走漏
可能存在内存走漏的环境具体版:


4.position中绝对定位是相对于近来的定位父级来定位

扩展:css中position的值有哪些?分别的定位原点?

static:元素默认值,按正常的文档流举行定位,从上到下,从左到右,没有特定的原点
relative:相对定位。元素相对于其正常位置举行定位,相对于原本位置举行偏移,定位原点即元素原本在文档流中的位置
absolute:绝对定位。元素相对于近来的已定位先人(即设置了position属性为absolute,relative,fixed,sticky的元素)举行定位。定位原点是近来的已定位先人元素的左上角,相对于初始包罗块的左上角
fixed:固定定位。元素相对于浏览器窗口举行定位,即使页面滚动,也会始终位于同一位置。定位原点为浏览器窗口的左上角
sticky:粘性定位。根据正常文档流举行定位,然后相对于用户的滚动位置在视口内粘性定位,会黏在父元素身上直到某个阈值被超过。定位原点是元素原本在文档流中的位置,滚动到某个阈值后,相对于视口举行定位。

加油加油^_^

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 IT评测·应用市场-qidao123.com技术社区 (https://dis.qidao123.com/) Powered by Discuz! X3.4