面试系列:金三银四被自己摆过去了......

发布于:2024-05-02 ⋅ 阅读:(23) ⋅ 点赞:(0)

前言

金三银四已经过去,还没有拿到offer,因为之前一直得过且过的态度,有过面试,但是太少了,大厂面试几乎没有,而且也没有对面试进行系统的总结。直到友友们都陆陆续续oc,意识到总不能剩自己一个人吧。于是今天下午蓝湖的面试给了我当头一棒......

今天下午蓝湖的面试题

经典流程:先自我介绍。然后问了我一道简单的JS八股。倒在很简单的算法......

this 的指向问题

this是函数在运行过程中自动生成的一个对象,用来代指作用域的指向

  • 绑定规则:
  1. 默认绑定:当函数被独立调用时,函数的this指向window。(函数的词法作用域在哪里,this就指向哪个词法作用域)
  2. 隐式绑定:当函数被一个对象所调用时,函数的this指向该对象
  3. 隐式丢失:当函数调用前有多个对象,函数的this指向最近的对象
  4. 显示绑定:call, apply, bind
  5. new绑定:this指向实例对象
  • 箭头函数:箭头函数中的this是它外层非箭头函数的,指向也按照上述的绑定规则
let obj = {
    fn : () => {
        console.log(this) // window
    }
}
obj.fn()

let 和 {} 不是会形成块级作用域吗?为什么不打印obj呢?这里我们用对象字面量的方式声明了对象,可以把{}理解为表达式,所以这里没有形成块级作用域。所以this指向它的外层作用域,也就是window。

简历上写了 了解node.js,能介绍一下 node.js 吗

我巴拉巴拉讲了一些,面试官说讲的不太对,切入点不太对。说明我对这个问题其实还是掌握的不够。

Node.js 是一个开源、跨平台的 JavaScript 运行时环境,Node.js 在浏览器外部运行 V8 JavaScript 引擎,Node.js 在其标准库中提供了一组异步 I/O 原语,可防止 JavaScript 代码阻塞,并且通常 Node.js 中的库是使用非阻塞范例编写的,这使得阻塞行为成为例外而不是常态。当 Node.js 执行 I/O 操作(例如从网络读取、访问数据库或文件系统)时,Node.js 不会阻塞线程并浪费 CPU 周期等待,而是会在响应返回时恢复操作。 这使得 Node.js 能够通过单个服务器处理数千个并发连接,而不会引入管理线程并发的负担,而管理线程并发可能是错误的重要来源。

用我们自己的话来说,Node.js是基于谷歌V8引擎打造的JS运行环境,node.js使用事件驱动,非阻塞I/O模型,JS代码通常不会被阻塞。所以我们可以通过单个服务器,高效的处理多个并发连接。

  • 前端通过node.js做什么?

    • 服务端渲染(SSR)。Node.js 可以用于构建服务器端渲染的应用程序,这些应用程序在服务器上生成HTML页面,然后发送到客户端。这可以提高网站的加载速度和SEO性能。
    • 实时应用。利用其非阻塞I/O特性,Node.js 适用于构建实时应用,如聊天应用、游戏服务器等。
    • 构建工具。
    • 命令行工具。Node.js 易于创建命令行界面(CLI)工具,如自定义脚手架工具,用于快速生成项目模板、自动化部署等。
    • 数据处理和爬虫。Node.js 可用于网页数据抓取、数据处理、生成报表等任务。

    通过使用Node.js,前端开发者不仅可以处理用户界面开发,还可以涉足后端开发,利用其一致性、高效的项目管理工具和非阻塞I/O特性,快速构建高性能、可伸缩的Web应用程序。

字符串入门算法题:无重复字符的最长字串

实现节流

最不应该写不出来的一道题,当时想抽自己一巴掌-.-

面试官看我这种题都写不出来,直接就走流程了,开始介绍业务,问我有什么想问的......

对闭包的考查

 function throttle(fn, time) { 
      let pre = Date.now()   
      return function (...args) {
        let cur = Date.now() 
        if (cur - pre > time) {
          fn.call(this, ...args)
          pre = cur
        }
      }
    }

其他面试题(部分,后续完善)

JWT + Token

  • JWT: JSON Web Token(缩写 JWT)是目前最流行的跨域认证解决方案

  • cookie: 是浏览器的内存空间,但是受后端的掌控,后端将登陆令牌保存在 cookie 中,            所有被保存在cookie中的数据,都会在http请求时自动被携带在请求头中

  • token由三部分构成: Header(头部)   Payload(负载)    Signature(签名)

语义化标签

在HTML中,语义化标签指的是通过标签直观的表达出所包含的内容是什么。 它的意义在于提升搜索引擎优化效果,减少代码量,加快页面的加载;使维护代码和添加样式更容易。

常见标签

<body>
  <header>头部标签,用来放至一些logo,搜索框等待</header>
  <main>主体标签,用来放至内容主体等等</main>
  <footer>尾部标签</footer>
  <article>表示网页中的一块内容</article>
  <section>表示一块独立的区域</section>
  <aside>表示网页侧边栏</aside>
  <hgroup>表示标题组</hgroup>
  <nav>导航栏标签</nav>
  <img>:图像标签
  <input>:搜索框,有不同的type属性值。
</body>

如何改变数组的长度

考察数组身上的方法,这里可以分为改变原数组和不改变原数组两类。

改变原数组:

splice()、push()、unshift()、pop()、shift()、sort()、reverse()、copyWithin()、fill()、

不改变原数组:

 slice()、join()、toLocalString()、toString()、concat()、indexOf()、lastIndexOf()

script 阻塞Html的解析

js阻塞html解析.png

总结

总在给自己找理由,觉得什么都不会,我还要再看看,但是实际还是什么都没记下来。前期面试太少,没有针对面试去学习。知识点的深度广度都不够了。金三银四就这样被自己摆过去了......