前端高阶面试题

前端高阶面试

1.单行或多行文本溢出展示省略号的实现方法

css 实现

  1. 单行文本

    固定容器宽度

    white-space:nowrap

    work-break:keep-all

    overflow:hidden

    text-overflow:ellipsis

  2. ​ 多行文本

    添加line-clamp属性

    转成弹性布局

js

多行文本检测子容器和父容器的高度,子容器高度超过父容器时,对子容器的字符串内容进行遍历,配合slice对子容器的高度进行重新更改,当新的容器高度高于父元素高度时,截取最后两个字符并且替换成,"…"

#container {
  border: 1px solid;
  height: 90px; 
  width: 30px; // height 和 width 都必要
  /*overflow: hidden;*/
  overflow-wrap: break-word; // 设置文本溢出容器宽度时换行(但会溢出容器长度)
}
#content {
  line-height: 30px; // 必要,控制文本行数。否则文本会被挤压,行数不定
}
var $container = $('#container')
var $content = $('#container .content')
var str = $content.text()
if ($content.height() > $container.height()) {
  for (var i = 0; i <= str.length; i++) {
    $content.text(str.slice(0,i))
    if ($content.height() > $container.height()) {
      $content.text(str.slice(0,i-2) + "..");
      break;
    }
  }
}

2.你知道ES6中的Generator和yiled吗,在实际开发中有使用过吗?

Generator的初衷是用来解决异步的嵌套问题

语法: 使用 * 声明一个函数,这个函数在调用时会返回一个Generator对象,使用 * 声明的函数内部使用yield生成阻塞行为,yield后面声明的内容,配合一个外部调用的next方法来控制被阻塞代码的执行,并且yiled会将Generator中的value值设置成为刚刚被阻塞的内容的返回值,一个yiled配合一个next使用。

​ 所以在使用时通常可以将异步处理放在yiled后生成一个阻塞,配合一个返回值是promise的函数进行异步处理操作,需要使用两次的next,第一次是调用yiled后的函数,第二次是获得异步操作的结果

​ 实际应用:redux中间件的saga中takeEvery内部封装了这两部操作,两步并作一步直接让开发者拿到结果

3.redux处理的中间件有什么作用,使用过哪些redux处理的中间件?有什么优缺点

redux是相当于一个仓库,配合react使用时能够成为一种状态管理工具,但是redux本身的特性规定其在派发信息时只能派发同步并且是扁平化的内容,这样在redux中若想实现异步操作就会有很大的局限性,中间件等同于一个仓库管理员的身份,每次想去仓库中取货,必须经过管理员去取钥匙,redux-thunk,redux-saga是两个常用的中间件,通过中间件能够增强redux本身的功能,redux-thunk中能够处理函数,其内部机制就是识别派发的参数类型,若是函数则直接调用,若是对象直接进行派发的操作,redux-saga则在内部封装了一些方法能够拦截派发的请求,到内部执行异步操作后,再去处理数据。

redux-thunk直接函数,较为直接,但是由于派发内容可以是扁平的对象,也可以是函数,所以不易于维护。

redux-saga仍旧派发扁平对象,符合redux派发规则,但是实现的逻辑较为复杂,其实就是在内部封装了处理异步的行为。

4.简述微信支付的开发原理

微信支付存在两种模式的实现,其中第二种模式较为简洁且易于实现
基本逻辑:
首先,用户需要在开发者的系统中下单,完成下单行为后向开发者的服务器发送请求,这个请求能够携带商品信息等数据,在服务器接收到请求时,需要向微信服务器发送请求,以完成一个预支付的行为,在发送请求前需要按照微信服务器的规则生成一些必要的参数,微信服务器在接收到请求时,会对签名进行验证,随后会返回一个支付url,开发者服务器需要将连接处理成为二维码供用户扫码支付
之后,用户在扫码后微信服务器会验证连接真实性及有效性,在完成支付行为后,微信服务器会以一种异步的形式,向开发者服务器发送请求,以通知开发者服务器支付状态,方便开发者执行后续操作。

5.如何在react中构建一个弹出的遮罩层

实现方式:

  1. 组件库
    直接使用antdesign组件库中的遮罩层

  2. react portal
    portal是ReactDOM上的一个方法,能够更改某组件或节点的挂载位置
    我们在需要构建弹出层的时候,将某个元素利用portal直接提升到与根组件并列的位置上,加一些覆盖的样式,就能够实现一个弹出层

 ReactDOM.createPortal(
 	<myComponent></myComponent>,// 更改位置的节点
 	document.queryselector("#root")// 挂载位置
 )

为了便于复用,我们可以将portal封装在一个高阶组件或者装饰器中

import React from 'react'
import ReactDOM from 'react-dom'

function withModel (WrapperedComponent) {
 return class extends React.Component {
   render() {
     return (
       ReactDOM.createPortal(
         <WrapperedComponent {...this.props}></WrapperedComponent>,
         document.querySelector('body')
       )
     )
   }
 }
}

export default withModel

6.装饰器是什么

装饰器是ES6中一种增强类的功能函数,基本实现就是传入一个类,在修饰器加工后返回一个具有修饰器中功能的新的类,常用在react中,类似于高阶组件的实现,但时没有了高阶组件的嵌套结构,语法上清晰明了
但是在webpack环境中如果使用修饰器,需要另外载入一些解析修饰器语法的babel

    "@babel/core": "^7.10.5",
    "@babel/preset-env": "^7.10.4",
    "@babel/plugin-proposal-decorators": "^7.10.5"
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Golang是一种新兴的程序设计语言,被广泛应用于网络开发、云计算等领域。50k的高阶面试题对于不少求职者来说是一道难题,需要具备深厚的编程基础和实践经验,所以需要在以下几个方面下功夫: 1. 熟练掌握Golang的语法和特性,包括但不限于变量、函数、结构体、接口、包、并发等。透彻理解Golang的设计理念和哲学,掌握其优秀的并发性能和简洁的语法结构。 2. 掌握Golang的标准库和第三方库,并深入了解其内部实现和使用方法。掌握Golang的常用框架和工具,如Beego、Gin、Echo等,能够在实际工作中熟练使用。 3. 掌握Golang的性能优化和高可用架构设计,能够对应用程序进行优化,包括优化算法、内存管理、并发控制等方面。同时了解分布式系统、消息队列、容器化等技术,为应用程序提供高可用性和弹性。 4. 具备实际应用经验,能够解决实际工作中出现的各种问题。理解业务需求和用户体验,并能够为其提供创新的解决方案。 总之,要成为一名合格的Golang工程师,需要具备深厚的编程背景和实践经验。不断学习和深入掌握Golang的特性和应用场景,才能在高阶面试中获得成功。 ### 回答2: Golang 50K高阶面试题主要包括了Go语言的基础概念、并发编程、内存管理、网络等多个方面的考察。以下是对其中一些难点的简要解答。 并发编程: Go语言天生支持并发编程,因此并发编程是其核心优势之一。与其它编程语言不同,Go语言提供了一些内置的原语,如goroutine和channel,以便于编写并发代码。Goroutine是一个轻量级的线程,可与其他goroutine一起运行,而channel是用于在goroutine之间进行通信的并发安全的数据结构。通过这些特性,Go语言为开发并发程序提供了显着的便利。 内存管理: Go语言的内存管理是自动化的,开发者无需手动进行内存分配及释放。Go的垃圾回收机制可以自动检测不再使用的变量并将其回收,以便于再次利用。同时,Go语言还支持指针操作,但使用指针时需注意指针的生命周期以及指针空间的释放等问题,以免引起内存泄漏或者指针悬空等问题。 网络编程: Go语言提供了内置的网络库,能够轻松地进行TCP/IP和HTTP等协议的编程。与其它语言比较,Go语言提供了更高层次的API,使得开发网络应用变得更加简单,开发人员可以用更少更简洁的代码来实现同样的功能。 总的来说,Golang 50K高阶面试题主要考察了面试者在Go语言开发中的实际应用及其优势,特别是在并发编程、内存管理和网络编程等方面的应用。如果您希望在面试中表现更出色,需要熟练掌握Go语言的基本语法及其特性,并具有实际的项目经验。 ### 回答3: 首先,Golang 是一种高效、简洁、快速的编程语言,它在一定程度上成功地解决了传统语言的缺点,如并行编程的困难和内存泄漏等问题。而对于 Golang 高阶面试题,我们需要了解一些关键知识点。 首先是 Golang 的并发处理。Golang 的并发是基于 Goroutine 和 Channel 实现的,Goroutine 是轻量级线程,可以实现高度并发。而 Channel 是用来在 Goroutine 之间传递数据的通信机制。在面试中,常被问到如何确保 Goroutine 安全并实现并发。这时我们需要回答一些并发编程的关键问题,如共享资源、锁的使用和死锁避免等。 其次是 Golang 的内存管理。Golang 通过自动垃圾回收技术来实现内存管理和防止内存泄漏,而在面试中,常被问及如何避免内存泄漏,如何手动管理内存等问题,需要对 Golang 内存管理和垃圾回收机制有深入了解。 还有一些其他关键的问题,如异常处理和数据结构等,都需要我们进行深入学习和思考。在备战 Golang 的高阶面试时,除了掌握上述知识点外,还需要实践经验和多思考,不断完善自己的编程技能和能力。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值