最全的 Vue 面试题+详解答案

前言 本文整理了高频出现的 Vue 相关面试题并且附带详解答案 难度分为简单 中等 困难 三种类型 大家可以先不看答案自测一下自己的 Vue 水平哈 如果对原理感兴趣的同学 欢迎查看小编的手写 Vue 源码系列文章 如果对答案有不一样见解的同学欢迎评论区补充讨论 最后欢迎大家点击 链接 加入到鲨鱼哥的前端群 内推 讨论技术 摸鱼 求助 皆可(进群免费领取 Vue2 源码思维导图哈) 整理不易 如果觉得本文有帮助 记得点赞三连哦 十分感谢! 简单 1 MVC 和 MVVM 区别 MVC MVC 全名是 Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范 Model(模型):是应用程序中用于处理应用程序数据逻辑的部分。通常模型对象负责在数据库中存取数据 View(视图):是应用程序中处理数据显示的部分。通常视图是依据模型数据创建的 Controller(控制器):是应用程序中处理用户交互的部分。通常控制器负责从视图读取数据,控制用户输入,并向模型发送数据 MVC 的思想:一句话描述就是 Controller 负责将 Model 的数据用 View 显示出来,换句话说就是在 Controller 里面把 Model 的数据赋值给 View。 MVVM MVVM 新增了 VM 类 ViewModel 层:做了两件事达到了数据的双向绑定 一是将【模型】转化成【视图】,即将后端传递的数据转化成所看到的页面。实现的方式是:数据绑定。二是将【视图】转化成【模型】,即将所看到的页面转化成后端的数据。实现的方式是:DOM 事件监听。 MVVM 与 MVC 最大的区别就是:它实现了 View 和 Model 的自动同步,也就是当 Model 的属性改变时,我们不用再自己手动操作 Dom 元素,来改变 View 的显示,而是改变属性后该属性对应 View 层显示会自动改变(对应Vue数据驱动的思想) 整体看来,MVVM 比 MVC 精简很多,不仅简化了业务与界面的依赖,还解决了数据频繁更新的问题,不用再用选择器操作 DOM […]

最全的手写JS面试题

前言 本文整理了前端面试高频出现的手写源码相关的题目 其中有小编面试亲自遇到的也有其他同学帮忙补充的 整体采用 es6 语法并且以简单易懂版进行实现 如果对答案有不一样见解的同学欢迎评论区补充讨论 虽然鲨鱼哥也很不喜欢内卷 但是在如今人人皆卷的大环境下 大家只有比别人更卷才能收获更好的未来 最后欢迎大家点击 链接 加入到鲨鱼哥的前端群 内推 讨论技术 摸鱼 求助 皆可~~ 整理不易 如果觉得本文有帮助 记得点赞三连哦 十分感谢! 1 compose 题目描述:实现一个 compose 函数

实现代码如下:

2 settimeout 模拟实现 setinterval(带清除定时器的版本) 题目描述:setinterval 用来实现循环定时调用 可能会存在一定的问题 能用 settimeout 解决吗 实现代码如下:

扩展:我们能反过来使用 setinterval 模拟实现 settimeout 吗?

扩展思考:为什么要用 settimeout 模拟实现 setinterval?setinterval 的缺陷是什么? 答案请自行百度哈 这个其实面试官问的也挺多的 小编这里就不展开了 3 发布订阅模式 题目描述:实现一个发布订阅模式拥有 on emit once off 方法 实现代码如下:

4 数组去重 实现代码如下:

5 数组扁平化 题目描述:实现一个方法使多维数组变成一维数组 最常见的递归版本如下:

扩展思考:能用迭代的思路去实现吗? 实现代码如下:

6 寄生组合继承 题目描述:实现一个你认为不错的 js 继承方式 实现代码如下:

7 实现有并行限制的 Promise […]

最全的TypeScript学习指南

前言 Hello 大家好 我是鲨鱼哥 这次给大家带来的是我曾经非常嫌弃 如今却爱不释手的 TS 技术 哈哈 大家看往期文章可能已经发现鲨鱼哥之前主要是 Vue 技术栈的 然后因为 Vue2 和 TS 的结合总感觉不是很丝滑 所以我果断就在技术选型的时候去掉了 TS(其实我是觉得用起来很烦 和我之前最讨厌的 eslint 一样 各种报错让人不爽)但是 鲨鱼哥今年换了新公司 开启了全新的 react hook+ts 这一套组合拳 然后在重新认真学习并在项目里用上了 ts 之后 确实真香 哈哈 最直观的感受就是可以帮我们规避很多类型错误 更友好的提示 甚至有些方法我们根据定义的类型大概就知道作用是什么了(去掉了写注释的麻烦)况且如今大火的 Vue3 也是 TS 重构的 然后 react 和 ts 的结合就更不必说了 所以还没有开始 ts 的同学就从现在开始跟着鲨鱼哥一起来学习吧 最后欢迎大家点击 链接 加入到鲨鱼哥的前端群 内推 讨论技术 摸鱼 求助 皆可 整理不易 如果觉得本文有帮助 记得点赞三连哦 十分感谢! 1 ts 安装和编译 第一步 新建一个空文件夹用来学习 ts 第二步 全局安装 ts 和 ts-node

  第三步 生成 tsconfig.js 配置文件

  我们就先按照自动生成的 tsconfig 配置项去使用 里面的配置咱们可以先不去管他 后续熟练了再去配置 第四步 在项目下新建一个index.ts 直接写入

[…]

TypeScript+Vue实例完全教程

功能 轮播 搜索 列表 懒加载 简单动画 loading vue-router.ts vuex.ts vue-class-component使用 vuex-class使用 xxx.d.ts声明文件 基于类的编写方式 mock数据 tsconfig.json webpack配置 vue-typescript-cli 项目地址:https://github.com/SimonZhangITer/vue-typescript-dpapp-demo 完成后的简单例子 基于类的写法加上静态类型检查,简直不能再嗨

  为什么使用TypeScript JavaScript的超集 支持所有原生JavaScript的语法 强类型语言 现在很多主流语言都是强类型的,而这点也一直是JavaScript所被人诟病的地方。使用TypeScript之后,将会在代码调试、重构等步骤节省很多时间。 比如说:函数在返回值的时候可能经过复杂的操作,那我们如果想要知道这个值的结构就需要去仔细阅读这段代码。那如果有了TypeScript之后,直接就可以看到函数的返回值结构,将会非常的方便 强大的IDE支持 现在的主流编辑器如VSCode、WebStorm、Atom、Sublime等都对TypeScript有着非常友好的支持,主要体现在智能提示上,非常的方便 可运行于任何浏览器、计算机、操作系统 强大的编译引擎 迭代更新快 不断更新,提供更加方便友好的Api 微软和Google爸爸 TypeScript是微软开发的语言,而Google的Angular使用的就是TypeScript,所以不用担心会停止维护,至少在近几年内TypeScript都会一门主流开发语言 npm下载量非常高 截止2017.12.17, TypeScript在全球范围内的npm日均下载量在30w左右,这个数字将近是vue下载量的10倍,可见TypeScript还是非常受欢迎的 TypeScript配置 本项目已经配置完毕,这里记录一下当时的踩坑过程 1. Webpack 首先需要安装ts-loader,这是TypeScript为Webpack提供的编译器,类似于babel-loader

  接着在Webpack的module.rules里面添加对ts的支持(我这里的webpack版本是2.x):

  2. tsconfig.json 创建tsconfig.json文件,放在根目录下,和package.json同级 配置内容主要也看个人需求,具体可以去typescript的官网查看,但是有一点需要注意: 在Vue中,你需要引入 strict: true (或者至少 noImplicitThis: true,这是 strict 模式的一部分) 以利用组件方法中 this 的类型检查,否则它会始终被看作 any 类型。 这里列出我的配置,功能在注释中给出

  3. 修改main.js 把项目主文件main.js修改成main.ts,里面的写法基本不变,但是有一点需要注意: 引入Vue文件的时候需要加上.vue后缀,否则编辑器识别不到 把webpack的entry文件也修改成main.ts 4. vue-shims.d.ts TypeScript并不支持Vue文件,所以需要告诉TypeScript*.vue文件交给vue编辑器来处理。解决方案就是在创建一个vue-shims.d.ts文件,建议放在src目录下再创建一个typings文件夹,把这个声明文件放进去,如:src/typings/vue-shims.d.ts,文件内容: *.d.ts类型文件不需要手动引入,TypeScript会自动加载

  到这里TypeScript在Vue中配置就完成了,可以愉快的撸代码了~ 第三方插件库 现在Vue官方已经明确提出支持TypeScript,并考虑出一个对应的vue-cli,在这之前,Vue开发团队已经开发出了一些插件库来支持TypeScript,这里简单和大家介绍一下。 Vue-Class-Component vue-class-component是官方维护的TypeScript装饰器,写法比较扁平化。Vue对其做到完美兼容,如果你在声明组件时更喜欢基于类的 API,这个库一定不要错过 ps:用了这个装饰器之后写方法不需要额外加逗号,贼嗨~~~

[…]

.NET Core log4net 使用

log4net .NET Core 版使用,log4net 2.0.7版发布也有一段时间了,从2.0.6 版开始就已经支持.NET Core。 之前有介绍NLog .NET Core版的使用,ASP.NET Core 开发-Logging 使用NLog 写日志文件。 ASP.NET Core已经内置了日志支持,可以轻松输出到控制台。使用log4net 将日志写入到文件及输出控制台。   .NET Core项目使用 新建一个 .NET Core 项目,选择控制台应用程序。 添加引用: Install-Package log4net   使用简单配置,将日志输出至控制台,跟之前.NET 版本略微有些区别,需要指定Repository 。

运行程序显示如下:   下面增加配置,让其输出至文件。 在项目中添加一个配置文件,这里添加一个log4net.config ,内容如下:

这里定义了三个 Appender,都会起作用,然后日志级别ALL 所有的日志都会记录。 更改Program.cs 代码如下:

加了指定配置文件。运行程序会生成一个文件夹和一个文件,因为重新定义了ConsoleAppender,控制台输出也有所不同。   ASP.NET Core项目使用 在ASP.NET Core 使用也是一样,可以在Program.cs或Startup.cs 中指定Repository,然后控制器或中间件中获取对象使用。 以下代码是在Startup 构造函数中初始化log4net

然后在Configure 中加了一个记录日志

  在HomeController 也增加了:

运行应用结果如下,然后对应的文件会有日志记录。   对于输出中文乱码,需要增加编码引用,以及代码。NLog 那篇文章有介绍。写到日志文件是没有问题的。   参考文档: http://logging.apache.org/log4net/release/manual/configuration.html http://logging.apache.org/log4net/release/config-examples.html   如果你觉得本文对你有帮助,请点击“推荐”,谢谢。 ASP.NET Core 3.1 新书发布 《ASP.NET Core项目开发实战入门》 京东当当淘宝 GitHub:https://github.com/linezero 博客示例代码GitHub:https://github.com/linezero/Blog from:https://www.cnblogs.com/linezero/p/log4net.html

.netCore 反射 :Could not load file or assembly 系统找不到指定文件

“System.IO.FileNotFoundException:“Could not load file or assembly 'ClassLibrary2, Culture=neutral, PublicKeyToken=null'. 系统找不到指定的文件。”” 在 .net 程序开发中我们会经常用到反射,最近在开始慢慢接触 .netCore。Core 反射的语法也是一样的,所以写下来也没有什么问题,但是一运行,就弹出了开头的 异常。 项目结构如下 ClassLibrary3 是一个接口

  ClassLibrary2 是 ClassLibrary3 的实现

  主程序通过反射获取到到类型并创建对象

  这代码都这里没有问题,但是执行的时候却抛出了 开篇的异常。仔细检查了下,ClassLibrary2 生成的 dll 确认已经是复制到了主程序目录下。 刚开始接触Core  也没有系统去熟悉,最后经过多方努力后,发现在主程序项目下有个 deps.json 的文件 文件内容是这样的(里面没有 ClassLibrary2 因为我们没有在项目中引用 ClassLibrary2) 然后想着 那异常提示找不到路径,那我们在这里配置下不久可以了? 然后改成如下:   这时候我们运行程序: 完美! from:https://www.cnblogs.com/mengtree/p/7139108.html

Kubernetes(一) 跟着官方文档从零搭建K8S

前言 本文将带领读者一起, 参照着Kubernetes官方文档, 对其安装部署进行讲解. Kubernetes更新迭代很快, 书上、网上等教程可能并不能适用于新版本, 但官方文档能. 阅读这篇文章你能收获到: 如何阅读Kubernetes官方安装指南并搭建一个Kubernetes环境. Kubernetes安装过程中的注意事项. 避过常见的坑. 阅读本文你需要: 熟悉Linux命令. 知道Kubernetes是用来干什么的 (不然装它干啥(ಥ_ಥ)). 知道Docker 器材准备 文档链接: Before you begin 序号 名称 数量 备注 1 服务器 2 操作系统: Linux(centos7, 其它操作系统也可, 安装过程类似, 可参考官方文档) 机器配置: CPU >= 2, 内存 >= 2G 从官网找到kubeadm安装文档入口, 文档很详细. 英文阅读没有障碍的读者推荐直接查看英文文档, 中文文档不全且更新不及时安装时可能存在问题. 前期准备 笔者已经预先安装好了两台虚拟机, centos7(CPUx2, 内存2.5G). 并在路由器上固定了这两个虚拟机的IP地址. 修改hostname

  修改后, 两台虚拟机的配置如下:

  确认MAC和product_uuid的唯一性 文档链接: Verify the MAC address and product_uuid are unique for every node

  注: 如果你的centos7没有ifconfig命令, 可以执行yum install net-tools进行安装. 配置防火墙 文档链接: Check required ports 由于是本地内网测试环境, 笔者图方便, 直接关闭了防火墙. 若安全要求较高, 可以参考官方文档放行必要端口.

  […]

《K8S权威指南》读书笔记-入门篇

一. k8s介绍 1. 是什么 kubernetes:古希腊“舵手”的意思(指引鲸鱼-docker) Production-Grade Container Orchestration:生产级别的容器编排系统 is an open-source system for automating deployment, scaling, and management of containerized applications:用于自动部署,扩展和管理容器化应用程序的开源系统 2. 发展历程 google内部使用十年之久的大规模机器管理系统-Borg,k8s是其他开源版本。 2014年6月 谷歌在旧金山的发布会为这款新的开源工具揭牌 2015年4月:google发布论文,高调宣传k8s 2015年7月:发布1.0版本 2015-2016:1.0-1.5,主要发布了五个版本 2017年: 相继推出 1.6、1.7、1.8、1.9,围绕稳定性、性能和平台的 cloud availability 做了改进 2018年3月27日,v1.10 发布。此版本持续增强了 Kubernetes 2018年6月28 日,v1.11 发布。此版本增强了网络功能、可扩展性与灵活性。Kubernetes 1.11 功能的更新为任何基础架构、云或内部部署都能嵌入到 Kubernetes 系统中增添了更多可能性的成熟性、可扩展性以及可插拔性,并在存储、安全、网络增强了其稳定性 2018年9月28日,v1.12 发布。此版本新增了两个备受期待的功能,Kubelet TLS Bootstrap 和对 Azure 虚拟机规模集支持(并已达到 GA 阶段)。同时该版本在安全性和 Azure 等关键功能上作出了改进; 2018年12月4日,v1.13发布。此版本的三个主要特性已逐渐过渡到 GA。此版本中的显着特征包括:使用 kubeadm 简化集群管理、Container Storage Interface(CSI)、以 CoreDNS 作为默认 DNS 大约每100天更新一次,如今已是 V 1.15.0版本(2019.7.17) 3. 特点 一切以服务为中心 自动化:自我扩展、自我诊断 底层不仅仅依赖docker,还支持Rocket 不局限于语言,对现有代码、框架没有任何侵入 4. 功能 基于容器的、一站式的分布式平台和分布式解决方案 主要功能是生产环境的容器编排,包括: 滚动升级 在线扩缩容 资源自动调度 资源配额管理 服务注册、服务发现 负载均衡 故障发现和自我修复 5. 为什么要用k8s 容器逐渐替代宿主机,k8s是业界广泛认可和看好的容器分布式解决方案 […]

我把SpringBoot应用部署到了K8S上,怎么感觉用起来像Docker!

SpringBoot实战电商项目mall(40k+star)地址:github.com/macrozheng/… 摘要 想要把一个复杂的微服务项目部署到K8S上去,首先我们得学会把单个SpringBoot应用部署上去。今天我们来讲下如何把SpringBoot应用部署到K8S上去,和使用Docker Compose部署非常类似,希望对大家有所帮助! 学前准备 学习本文需要有一些K8S基础,对K8S还不了解的朋友可以参考如下的文章。 《K8S太火了!花10分钟玩转它不香么?》 《自从上了K8S,项目更新都不带停机的!》 推送镜像到Docker Hub 之前我们都是自建的镜像仓库,这次我们换种方式,把镜像上传到Docker Hub中去。 首先我们得注册个Docker Hub的账号,Docker Hub地址:hub.docker.com/ 部署应用使用之前的mall-tiny-fabric项目,先修改pom.xml文件,主要是添加Docker Hub的认证信息和修改下镜像前缀,具体内容如下;

  修改完成后使用package命令先把镜像打包到Linux服务器,再使用docker:push命令把镜像推送到Docker Hub中去: 推送成功以后就可以在Docker Hub中看到镜像了。 应用部署 接下来我们将把应用部署到K8S上去,包含SpringBoot应用的部署和MySQL的部署。 部署MySQL 首先添加配置文件mysql-deployment.yaml用于创建Deployment,具体说明参考注释即可;

  通过应用配置文件来创建Deployment;

  运行成功后查询Deployment,发现mysql-deployment已经就绪;

  想要其他Pod可以通过服务名称访问MySQL,需要创建Service,添加配置文件mysql-service.yaml用于创建Service;

  通过应用配置文件来创建Service;

  运行成功后查询Service,发现mysql-service已经暴露在Node的30306端口上了;

  部署完成后需要新建mall数据库,并导入相关表,表地址:github.com/macrozheng/… 这里有个比较简单的方法来导入数据库,通过Navicat创建连接,先配置一个SSH通道; 之后我们就可以像在Linux服务器上访问数据库一样访问Minikube中的数据库了,直接添加Minikube中数据库IP和端口即可。 部署SpringBoot应用 首先添加配置文件mall-tiny-fabric-deployment.yaml用于创建Deployment,这里我们可以通过环境变量来覆盖SpringBoot中的默认配置;

  通过应用配置文件来创建Deployment;

  我们可以通过kubectl logs命令来查看应用的启动日志;

  如果想要从外部访问SpringBoot应用,需要创建Service,添加配置文件mall-tiny-fabric-service.yaml用于创建Service;

  通过应用配置文件来创建Service;

  此时服务已经暴露到了Node的30180端口上了;

  在Linux服务器上,我们可以通过curl命令来访问下项目的Swagger页面,不过只能查看到返回的一串HTML代码。

  外部访问应用 由于使用Minikube安装的K8S Node处于Linux服务器的内网环境,无法直接从外部访问,所以我们需要安装一个Nginx反向代理下才能访问。 首先我们需要安装Nginx,对Nginx不熟悉的朋友直接参考该文章即可:《Nginx的这些妙用,你肯定有不知道的!》 安装完成后添加一个Nginx的配置文件,这里我的配置路径为/mydata/nginx/conf/conf.d/,用于将mall-tiny.macrozheng.com域名的访问代理到K8S中的SpringBoot应用中去,proxy_pass为上面curl使用的路径;

  重启Nginx服务,再修改访问Linux服务器的本机host文件,添加如下记录;

  之后即可直接在本机上访问K8S上的SpringBoot应用了,访问地址:mall-tiny.macrozheng.com/swagger-ui.… 总结 通过把SpringBoot应用部署到K8S上的一顿操作,我们可以发现在K8S上部署和在Docker上部署有很多相似之处。K8S上很多部署用的脚本,直接翻译之前使用Docker Compose的脚本即可,非常类似。如果你之前用过Docker,那么你就可以轻松上手K8S! 项目源码地址 github.com/macrozheng/… 作者:MacroZheng 链接:https://juejin.cn/post/6924462821774196750 […]

fiddler抓苹果手机上app包的方法,解决https连接只抓到Tunnel to的问题

今天需要用fiddler抓iphone上安装的app包,ios 12.3.1 电脑端用的360浏览器,手机端用的safari 具体步骤如下 1、电脑连入wifi,记下电脑端的ip地址备用 2、手机与电脑连入同一个wifi,代理服务器IP填电脑IP,端口8888 3、打开fiddler,菜单栏依次点击Tools -->Options -->HTTPS 按下图操作,完成电脑端证书的安装 4、Tools -->Options -->Connections如下图设置,完成后重启fiddler。 5、iphone手机端用safari浏览器访问 http://192.168.100.66:8888, 点击连接下载证书到手机 6、手机设置 -->通用 -->描述文件与设备管理,安装证书 7、设置 -->通用 --> 关于本机 -->证书信任设置,打开开关 网上文章都没说到iphone需要打开这个开关才能抓到app中的https数据 否则抓包显示Tunnel to,无法获取数据,手机浏览器打开https网址报非私人连接   from:https://blog.csdn.net/dandanben/article/details/102703034