面试笔记

1. 基本数据类型

基本数据类型有6种,分别是Number,String,Undefined,Null,Boolean,Symbol(ES6),还有Bingint(ES10)
基本数据类型存放在栈内存中,复杂数据类型的值存放在堆内存,复杂数据类型的引用存放在栈内存,对象的赋值操作是将地址赋值给新的引用,指向同一片内存区域.

2. 判断一个值的类型

  • typeof可以正确判断基本数据类型,但不能判断复杂数据类型. 但typeof null除外,他返回object但是null是基本数据类型,
  • instanceof可以判断复杂数据类型,但不能判断基本数据类型.
  • typeof 函数 返回function,除此之外,typeof 对象返回的都是object,所以可以先用typeof判断是否为基本数据类型,如果是复杂数据类型那么再用instanceof来判断复杂数据类型.

3.判断一个元素是否为数组

  • isArray(),返回true代表是数组,false不是数组
  • instanceof Array返回true代表是数组,false不是数组
  • obj.constructor === Array返回true代表为数组,false代表不是数组.
function fn() {
    let a = [1, 2, 3, 4];
    let args = arguments;

    console.log(Array.isArray(a));
    console.log(Array.isArray(args));
    console.log(a instanceof Array);
    console.log(args instanceof Array);
    console.log(a.constructor === Array);
    console.log(args.constructor === Array);
  }
  fn(1, 2, 3, 4)

4.类数组和数组

  • 类数组具有length属性
  • 类数组没有数组的方法
  • Array.prototype.slice.call(arraylike,start),[...arraylike] , Array.from(arraylike)三个方法可以把类数组转化为真正的数组
  • ...扩展运算符 可以把数组或者类数组转换为逗号分割的参数序列

5.=== 和 ==

  • === : 等同符 只有类型/数值 均相等才返回true,否则返回false
  • == : 等值符 类型相同时,直接比较值
    类型不同时,转换类型后在进行比较,转换规则如下:
    1. NaN和任何值都不相同(包括自己)
    2. 有undefined和null时,他们之和自己以及对方相等,和其他的都不相等
    3. 当有Boolean/string/number时,会转化成数字进行比较
    4. 一方是对象,一方是Boolean/string/number时,object转换成基本类型在判断.

[] == ![]的返回值?

  1. !的优先级高,所以先计算 ![],引用数据类型转换为布尔都是true,所以![]false
  2. 一方为对象要转换为基本类型,[]转换为0,有一个数字的数组会转换为那个数字,多个数字是NaN
  3. 布尔值会转换为数字计算,所以false变成0
  4. 最后是0 == 0返回true

6.ES6中的class和ES5的类有什么区别?(复习js的继承和构造函数)

  1. ES6 class 内部所有定义的方法都是不可枚举的;
  2. ES6 class 必须使用 new 调用;
  3. ES6 class 不存在变量提升;
  4. ES6 class 默认即是严格模式;
  5. ES6 class 子类必须在构造函数中调用super(),这样才有this对象;ES5中类继承的关系是相反的,先有子类的this,然后用父类的方法应用在this上。

7. 改变数组的api

  • splice/sort/splice/reverse/fill/push/pop/shift/unshift
  • 不改变的: foreach/map/filter/slice/every/reduce/find/entries

8. JS执行上下文和作用域链

执行上下文就是js解析和执行的环境.执行上下文栈是存储函数调用的栈结构.

  • js执行在单线程上,所有代码排队执行.
  • 一进入浏览器就会创建全局上下文,并压入栈底.
  • 每执行一个函数,就会创建一个函数的上下文并压入栈顶,当函数执行完成后,就会出栈,等待垃圾回收并销毁.
  • js的执行引擎总是会在栈顶的执行上下文.
  • 全局上下文只有唯一的一个,在退出浏览器时销毁.

作用域链:会从当前作用域开始查找,如果没找到,就会向上级作用域查找,直到全局作用域.

9. 什么是闭包? 闭包的作用?

闭包就是指在一个函数访问另一个函数的变量.闭包最常见的方法就是一个函数里创建另一个函数.

闭包的作用:

  • 封装私有变量
  • 模拟块级作用域
  • 实现js的模块化

10. new 发生了什么

  1. 创建了一个新对象
  2. 设置新对象的原型链, obj.__proto__ = constructor.prototype
  3. 调用构造函数,func.call(obj,...args)
  4. 如果构造函数没有返回值,则将新对象返回

11.ES6新特性

  1. 块级作用域 let/const
  2. 箭头函数
  3. 引入了基本数据类型symbol
  4. 对象解构
  5. 数组的新方法
  6. 增加了模块化 import/export
  7. 提供了set/map等数据结构
  8. 增加了Proxy构造函数,可以创建Proxy对象
  9. 提供了类的语法糖(class)
  10. 提供了扩展运算符
  11. 提供了生成器(Generator)和迭代器(iteator)

12.跨域

跨域指的就是违背了浏览器的同源策略

同源:协议/端口/域名必须完全一样

跨域的限制

  1. 不能读取非同源页面的cookies/localstorage
  2. 不能操作非同源页面的dom
  3. 不能跨域发送ajax请求

跨域解决方法

  1. 设置两个页面为相同的域名解决cookies无法访问的问题
  2. 通过jsonp解决ajax问题
  3. 通过后端设置允许跨域解决ajax跨域
  4. 通过nginx代理,向同源的nginx发送请求,nginx进行代理转发解决跨域问题

13.从地址栏输入url到显示页面的步骤

  1. 浏览器根据url找到DNS进行解析,从DNS找到服务器的IP,然后向服务器发送请求.
  2. 服务器对请求进行解析,将页面返回给浏览器.
  3. 浏览器对资源进行解析,建立html(DOM),css,js
  4. 对资源进行解析的时候,分为dom树和(render)渲染树,当解析时,遇到html就会形成一个个dom,但是遇到js就会阻塞dom树,因为js可能会修改dom,而css的加载不会阻塞dom树,当dom树和css规则树都加载完成后,就会合并成为render树,渲染成最终的页面
  5. 将资源进行加载,渲染页面.
  6. dom的操作非常消耗性能,所以频繁的操作dom可能造成页面的卡顿.

在这里插入图片描述

14.判断某个对象是不是某个类型的方法

一个对象是不是某个类型的本质就是这个对象有没有某个类型的属性和方法,如果有就是这个类型的对象.比如有了Persion 的属性和方法,就是Person的对象,在JS中,类的属性和方法都在原型对象上Persion.probotype,所以一个对象如果能找到Person.probotype就有了Person的属性和方法,那就是Person的对象,而一个对象是通过__proto__属性去找原型的,所以obj.__proto__ === Person.probotype这个对象就有了Person的属性和方法,就是Person的对象.
instanceof就是通过找原型链来判断能不能找到Person.prototype找到了就有了Person的属性和方法就是person对象,返回true,否则返回false

面试笔记

金山云一面
  1. 双向绑定
  2. diff算法
  3. 服务端渲染ssr
  4. url
  5. 三次握手 四次挥手
  6. vue2 vue3 react
  7. localstorage
  8. 304 302 301 用在哪
  9. 浏览器缓存
  10. 页面跳转
  11. 事件循环
  12. 页面传输数据
  13. 学习vue3 react
爱奇艺一面
  1. flex布局 flex容器和元素的属性 包括order
  2. vuex的作用,什么时候用到
  3. 用过混入么,怎么使用
  4. 混入中钩子的执行顺序 data和methods的合并 谁的destory先调用
  5. nexttick
  6. 直接修改数组会相应式更新么 可能通过什么方法直接更改数组下标
  7. 事件循环 宏任务队列 微任务队列 js为什么是单线程的(因为js的主要功能是修改dom,多个线程同时修改dom会造成显示错乱,需要加各种锁)
  8. nginx如何配置的 git如何使用的
  9. 深浅拷贝 浅拷贝直接赋值和object.assign()的区别 (assign只能拷贝一层,内层还是浅拷贝)
  10. vue首屏加载缓慢的问题
2021-4-1 爱奇艺二面
  1. 介绍https 协议 (没看过不会)
  2. Tcp/IP协议 三次握手/四次挥手
  3. 从url到页面发生的过程
  4. 网页性能问题 首屏加载缓慢(主要) 页面加载缓慢(次要) 以及解决方案
  5. linux的常用命令
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,下面是一些 Spring Boot 面试时可能会涉及的重要知识点和面试建议: 1. 什么是 Spring Boot? Spring Boot 是 Spring 框架的一个子项目,它基于 Spring 框架,简化了 Spring 应用的配置和开发过程,使得开发者可以更加便捷地创建独立、生产级别的 Spring 应用。Spring Boot 提供了自动化配置、开箱即用的组件和快速启动的能力,使得开发者可以更加专注于业务逻辑的实现。 2. Spring Boot 有哪些优点? - 简化了 Spring 应用的配置和开发过程。 - 集成了众多常用的第三方库,可以快速地搭建项目。 - 提供了自动化配置和开箱即用的组件,使得开发者可以更加专注于业务逻辑的实现。 - 与 Spring Framework 完美集成,可以很方便地使用 Spring 的各种功能。 - 支持多种开发方式,包括传统的 WAR 包部署、嵌入式服务器部署、Docker 容器化部署等。 3. Spring Boot 的核心注解有哪些? - @SpringBootApplication:用于标记 Spring Boot 应用的主类,它包含了 @Configuration、@EnableAutoConfiguration 和 @ComponentScan 三个注解,可以简化应用的配置和启动过程。 - @Controller、@Service、@Repository、@Component:用于标记 Spring Bean,可以自动扫描并注册到 Spring 容器中。 - @Autowired、@Resource、@Inject:用于依赖注入,可以自动装配 Spring Bean。 4. Spring Boot 的配置文件有哪些? Spring Boot 支持多种配置文件格式,包括 properties、yml、json 等。其中,application.properties 或 application.yml 是 Spring Boot 默认的配置文件,它可以放在项目的 classpath 下,也可以通过指定 spring.config.location 属性来指定配置文件的路径。 5. Spring Boot 的自动配置原理是什么? Spring Boot 的自动配置基于条件注解和条件判断,它会根据应用的上下文环境和 classpath 中的依赖库来自动配置 Spring Bean。例如,当 classpath 中存在 HikariCP 库时,Spring Boot 会自动配置一个 HikariCP 数据源,而不需要手动配置。 6. Spring Boot 如何处理异常? Spring Boot 提供了统一的异常处理机制,可以通过 @ControllerAdvice 和 @ExceptionHandler 注解来处理应用中的异常。在异常处理类中,可以通过 @ExceptionHandler 注解和方法参数来定义需要处理的异常类型和异常处理逻辑。 7. Spring Boot 如何实现 AOP? Spring Boot 集成了 Spring Framework 的 AOP 功能,可以通过 @Aspect 和 @Around 注解来实现切面编程。在切面类中,可以定义需要拦截的方法和拦截逻辑,以实现日志记录、权限控制等功能。 8. Spring Boot 如何实现事务管理? Spring Boot 集成了 Spring Framework 的事务管理功能,可以通过 @Transactional 注解来实现事务控制。在需要进行事务控制的方法上添加 @Transactional 注解,即可开启事务。 9. Spring Boot 如何集成数据库? Spring Boot 支持多种数据库,包括 MySQL、Oracle、MongoDB 等,可以通过在 pom.xml 中添加相应的依赖库来实现数据库的集成。同时,Spring Boot 也提供了多种数据库访问方式,包括 JDBC、JPA、MyBatis 等,可以根据实际需求选择合适的方式。 10. Spring Boot 如何实现缓存? Spring Boot 集成了多种缓存框架,包括 Ehcache、Redis、Caffeine 等,可以通过在 pom.xml 中添加相应的依赖库来实现缓存功能。同时,Spring Boot 也提供了多种缓存注解,包括 @Cacheable、@CachePut、@CacheEvict 等,可以方便地实现缓存功能。 面试建议: - 对于 Spring Boot 的基本原理和使用方法要有深入了解,并能够熟练使用 Spring Boot 搭建项目。 - 对于 Spring Boot 中常用的注解和配置文件要熟练掌握。 - 对于 Spring Boot 中的高级功能(如自动配置、AOP、事务管理、缓存等)要有一定的了解,并能够根据实际需求进行应用。 - 在面试中要注意表达清楚自己的观点和思路,可以通过实际项目经验来证明自己的能力。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值