2022.7.14 花旗银行外包面试

提了离职,又开始出来找工作了,总体来说面试官人很好,问的都是老生常谈的问题,很有诚意,但是我好久没背八股,加上是最近第一次面试,没有准备好,寄了!

难度: 简单

我百度加上自己理解尝试写的答案,不对的请务必指正

自我介绍

英文自我介绍,项目介绍,项目细节,兴趣爱好。
英文这块一定得准备,各个问题都要事先想好怎么答,大部分国人的英语水平肯定达不到随时沟通的程度,不准备肯定寄。

前端部分:

怎么实现图片懒加载
我们是先把一张像素低的图片作为img的src,并把正常像素图片作为img的一个属性,这样当图片资源刚加载出来但是没显示的时候,默认加载低像素图片节省资源,然后等用户能够看到图片以后,再通过js把src替换成正常图片。

js原型链
原型链就是js实现继承的一种方式,js是一种函数式编程,他的构造函数里有一个原型对象,然后每个通过构造函数new出来的实例的原型,都可以指向构造函数的原型对象,然后构造函数的原型可以指向Function的原型对象,最终指向Object。这是一种类似于树结构,不过是倒着指向的,来使实现的继承,ES6以后就以class的方式写代码,跟传统java的继承方式差不多,用extends的方式进行继承, 底层的实现其实也是原型链,相当于语法糖。

js闭包
闭包就是为了实现传统面向对象里的封装,就是如果想让函数修改一个变量,通常做法是通过在函数外面定义全局变量的方式,但这样这个变量就不安全,谁都能访问到。现在就是可以通过函数自我调用的方式,return它自己,这样就可以把变量定义在函数里面,但是外面却能获取它的值。就相当于实现了java里的封装。这也是因为以前js的局限性只能这么去实现,Es6以后就是通过类里面getset方法的形式实现封装。

强缓存与协商缓存的区别
强缓存是从本地直接取得缓存
协商缓存是如果取得强缓存失败,浏览器就会发送请求到服务器,取得新的缓存信息

ES6有哪些新特性
取消使用var 普遍使用let和const代表变量和常量
对象解构,把变量赋值给大括号可以直接获得对象中同名的属性
属性传参时用扩展运算符三个点可以直接把属性传给下面组件
新增了类和对象,相当于面向对象编程
在数组和集合中也有一些新增内容

箭头函数和function的区别
箭头函数里面this没法指向调用者,因此是undefined,我通常做法是把对象当作参数传进去当作this.
箭头函数不能作为构造函数使用
function有变量提升,箭头函数不行

React和原生js的区别
我觉得最大的区别就是React使用了虚拟dom,每次渲染的时候减少了重绘次数,这样节省了内存,提升了加载速度. 而真实dom的元素体积较大,不轻易使用js加载页面
其次React框架里面只有一个div是html,其余所有内容都由js生成
最后React是基于组件的,提升了代码的复用性

React事件处理机制
我们日常写的事件放在某元素的jsx里,然而当jsx进行渲染的时候,它没有把事件加载到该元素对应的真实dom,而是绑定到顶层的document上面,由document监听所有的事件,调用对应的事件函数。
这样统一管理的优点就是提升了性能,也解决了兼容问题

有没有使用过hooks
hooks是react新特性,使得函数组件和类组件一样拥有生命周期以及状态。 毕竟类组件使用过多,不利于js函数式编程风格的特性。
useState:使得函数组件拥有state
useEffect:使得函数组件拥有componentDidMount,componentDidUpdate 和 componentWillUnmount等生命周期
useContext:使得函数组件可以数据共享
还有useCallback useReducer useRef等其他功能

React中state的作用
State用于表示类组件的状态,函数组件和样式组件都是无状态的,通常一个组件里会根据状态的不同,来渲染不同的效果。需要通过调用SetState来进行修改组件的状态,否则组件无法重新渲染。

为什么虚拟dom能提升速度
1.虚拟dom节点体积很小,因此比较虚拟dom会比比较真实dom需要更少的内存。
2.由于diff算法只更新存在差异的节点,不修改其他节点,极大程度上做到了节点复用,减少了重排次数。

虚拟dom用到的diff算法怎么实现的
dom是树形数据结构,然后虚拟dom是一种不同的树形数据结构,两棵树的节点一一对应。
diff算法通过广度优先搜索来找出两颗树的区别,就是比较每个树节点的类型和属性是否相同,把其中存在差异的节点放到一个补丁数组里面,最后就按照补丁数组来更新真实的dom树,这样一来就减少了重排的次数,提升了效率

React生命周期
挂载: 插入了真实dom,页面已经加载好,此时会调用componentDidMount()函数,相当于js里的window.onload()
更新:当组件的 state 或 props 发生变化时,组件就会更新,此时会重新渲染页面,并且会调用componentDidUpdate()函数
卸载:组件从dom中被移除,此时会调用componentWillUnmount()函数

对于https里的header有哪些了解
平时常用的几个:
Request部分:
Accept: 客户端可以接收的内容类型
Cookie:用于存储一些数据,它的格式是键值对,数据会随着http请求发送给服务器
Host : 请求服务器的域名
Response部分:
Expires: 控制缓存的过期时间
Cache-control:控制缓存的一些信息

后端部分:

你以前做过后端吗,在项目中的职责是什么?
.

c#怎么实现扩展函数
函数的第一个参数用this修饰,用于指定扩展的对象,然后该函数需要是static的。

什么是委托
这个就是相当于js里的函数式编程,将函数看成一个对象,当把某函数传入委托构造器并创建委托对象,该委托对象就具有这个函数的功能,可以直接调用。

面向对象的特性
封装,继承,多态。 相较于面向过程,对象的概念更贴近于世间万物,使人容易理解。

重写与重载的区别
重写:指子类实现父类的函数
重载:指一个类里面参数不同的重名函数

数据库的四特性acid是什么
a : atomic 原子性,一个事务看成一个原子,要么全部完成,要么全部不完成,如果事务执行时发生错误需要进行回退
c : consistency 一致性
i : isolation 隔离性,有4个事务隔离级别,说明了不同情况下对数据库的并发操作,以及造成的影响
d : durability 持久性,事务结束以后,对数据库的修改是永久的

个人部分:

个人的优缺点

怎么保证工作稳定性

  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 20
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 20
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值