TypeScript面试题
详细用法/TS基础篇见:http://www.duomangcoding.top/2022/11/24/TypeScript%E5%85%A5%E9%97%A8%E6%95%99%E7%A8%8B/
什么是TypeScript?
Typescript 是一个强类型的 JavaScript 超集,支持ES6语法,支持面向对象编程的概念,如类、接口、继承、泛型等。Typescript并不直接在浏览器上运行,需要编译器编译成纯Javascript来运行。
为什么要使用 TypeScript ? TypeScript 相对于 JavaScript 的优势是什么?
增加了静态类型,可以在开发人员编写脚本时检测错误,使得代码质量更好,更健壮。 优势: \1. 杜绝手误导致的变量名写错; \2. 类型可以一定程度上充当文档; \3. IDE自动填充,自动联想;
TypeScript 中 const 和 readonly 的区别?枚举和常量枚举的区别?接口和类型别名的区别?
const 和 readonly: const可以防止变量的值被修改,readonly可以防止变量的属性被修改。 ...
webpack面试题
谈谈你对webpack的看法webpack是一个模块打包工具,可以使用它管理项目中的模块依赖,并编译输出模块所需的静态文件。它可以很好地管理、打包开发中所用到的HTML,CSS,JavaScript和静态文件(图片,字体)等,让开发更高效。
你常用的loader?style-loader:创建style标签,将 CSS 样式插入到 HTML 文档的 <style> 标签中,再添加到 HTML 页面的 <head> 部分。
css-loader:将css资源变成commonjs模块加载到js中,里面是样式字符串。
less-loader:less转译成css
scss-loader:scss转译成css
file-loader:把文件输出到一个文件夹中,将文件复制到指定的输出目录,并返回文件的相对路径。代码中就可以通过相对路径引用这些文件。 (处理图片和字体)
url-loader:与 file-loader 类似,区别是用户可以设置一个阈值,大于阈值会交给 file-loader 处理,小于阈值时返回文件 base64 形式编码 (处理图片和字体)base64的 ...
js常见手写题
手写call12345678910111213141516171819202122232425Function.prototype.myCall = function(context,...args){ //1.判断是否是函数调用的方法 if(typeof this !== 'function'){ throw new typeError('not a function') } //2.判断是否传入了上下文对象 context = context||window //3.改变this的指向 context.fn = this let res = context.fn(...args) delete context.fn return res}let obj1 = { getName(...args){ console.log(this.name+args[0]+args[1]) } ...
项目面试
农产品前后端联调我们会接入同一个局域网,后端给前端一个ip地址,能ping通说明已经打通。然后在项目中配置host。Webpack里配置proxy,target改为后端的ip地址和端口号。
微信小程序原理
小程序本质就是一个单页面应用,所有的页面渲染和事件处理,都在一个页面内进行,但又可以通过微信客户端调用原生的各种接口;
它的架构,是数据驱动的架构模式,它的UI和数据是分离的,所有的页面更新,都需要通过对数据的更改来实现;
它从技术讲和现有的前端开发差不多,采用JavaScript、WXML、WXSS三种技术进行开发;
功能可分为webview和appService两个部分;
webview用来展现UI,appService有来处理业务逻辑、数据及接口调用;
两个部分在两个进程中运行,通过系统层JSBridge实现通信,实现UI的渲染、事件的处理等。
小程序开发中遇到的问题微信小程序登录授权调用wx.login接口获取登录凭证code。发送code给后端,后端通过code,appid,appsecret调用微信接口,返回openid和sessionkey,将openid和sessi ...
js继承
概述原型链继承
原型链继承是 JavaScript 最基本的继承方式,通过让子类的原型对象(prototype)指向父类的实例,继承父类的属性和方法。但是,它也存在一些问题,比如父类中引用类型值的属性被子类实例共享、不能传递参数等。
构造函数继承
构造函数继承是指在子类的构造函数中调用父类的构造函数,从而实现继承。但是,它存在一个问题,就是无法继承父类原型对象上的属性和方法。
组合继承
组合继承是指将原型链继承和构造函数继承组合在一起,从而实现继承。它既可以继承父类的实例属性和方法,也可以继承父类原型对象上的属性和方法。但是,它的缺点是在子类的构造函数中调用了父类的构造函数,同时在设置子类原型时又会再次创建父类实例,导致父类的构造函数被调用了两次。
原型式继承
原型式继承是指借助一个中间对象,将某个对象作为这个中间对象的原型对象,从而实现继承。它的优点是可以简单地实现对象之间的继承,但是它也存在一个问题,就是父对象的属性会被子对象共享,可能会导致子对象对父对象的属性进行修改,影响其他子对象。
寄生式继承
寄生式继承是指在原型式继承的基础上,增强了继承对象的能力。它在继承的基础上,增加了 ...
浏览器原理
浏览器结构/运行原理浏览器是多进程的,分为主进程、第三方插件进程、GPU进程(用于3D绘制)、浏览器渲染进程(浏览器内核,每个TAB页面对应一个进程。
浏览器内核又有许多线程:
GUI渲染线程:负责解析渲染,布局绘制,重绘时该线程会执行。与js引擎线程互斥。
js引擎线程:也称JS内核,负责处理js脚本。
事件触发线程:归属浏览器而不是js引擎线程(js是单线程),当js引擎执行settimeout/点击事件时,会将对应任务添加到事件触发线程中。符合触发条件时会将任务放入处理队伍队尾等待js引擎线程处理。
定时器触发线程:定时器是单个线程进行计时的,计时结束会将事件添加到事件队列后等待js引擎线程处理。
异步HTTP请求线程:XHR创建时。当检测到状态变化并有回调函数,会将回调函数放进事件队列等待js引擎线程处理。
参考:https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/6bc05b033f444b4198f0ce6084cc7b52~tplv-k3u1fbpfcp-zoom-in-crop-mark:1304:0: ...
计算机网络面试问题
常见状态码1开头表示请求已接受,继续处理。
2开头表示成功。
3开头表示浏览器需要进行特殊的处理来正常处理请求。
4开头表示客户端错误。
5开头表示服务器端错误。
200请求成功,204表示请求成功但是没有数据,301永久重定向,302临时重定向,303应该用get获取,304表示未修改,即命中协商缓存。400客户端可能有语法错误,401未授权,403请求的资源被服务器拒绝(也可能是权限问题),404页面不存在,405服务器禁止使用该方法,500服务器请求错误,503服务器超负载或正在停机维护。
HTTP缓存浏览器对请求过的文件缓存,降低服务器压力。
网络方面的缓存分为三块:DNS缓存、HTTP缓存、CDN缓存,也有人把这里的 HTTP 缓存称为浏览器缓存。
HTTP缓存分为强缓存和协商缓存。
强缓存是客服端不会向服务器发请求,先检查浏览器本地是否有可以用的缓存,如果有则使用,返回200;没有则向服务器发请求,看是否命中协商缓存,命中则更新缓存时间,返回304,没有命中则向服务器请求信息。
强缓存响应头中相关字段为Expires/Cache-Control 前者http1.0是使 ...
webpack学习笔记
构建工具从开发到效率提升,(比如转译、压缩)构建工具其实做的是集成的工作。有了构建工具,开发者不需要再关心代码在浏览器是如何运行的,而只需要关系编写代码的过程。
所有的构建工具都是基于node平台运行的。
什么是webpack?webpack是一种前端资源构建工具,一个静态模块打包器。在webpack看来,前端所有资源文件都会作为模块处理,它将根据模块的依赖关系进行静态分析,打包生成对应的静态资源(bundle)。
Webpack的5个核心Entry(入口)指示webpack以哪个文件为入口开始打包
Output(输出)指定打包后的资源bundles输出到哪里去,如何命名。
Loader本质就是一个函数。webpack只能处理js/json文件,所以要对非js文件进行转译,loader充当一个翻译官的工作。
写在module-rules,从右到左从下到上依次执行。
下载-使用
Plugins可以扩展webpack的功能。在webpack的生命周期中会广播出许多事件,plugin可以监听这些事件,在合适的时机通过webpack提供的API改变输出结果。
下载-引入-使用。
使用 ...
Vue动态绑定样式的几种方式
项目中时常会遇到需要动态改变样式的情况,这里总结一下常用的几种方法。
动态改变class绑定单个的class1<div :class="{'active':isActive}"</div>
对象语法:用大括号{}将class名称和变量名括起来,class名称要加引号。
绑定多个class1<div class="activeOne" v-bind:class="{ activeTwo: isActive, 'activeThree': hasError }"></div>
与绑定单个的方式同理,多个样式用,隔开。
也可以用数组语法,列出变量名。
1<div :class="[activeClass, errorClass]"></div>
123456data() { return { activeClas ...
TypeScript入门教程
介绍TypeScript是静态类型的弱类型语言,在编译阶段就能确定每个变量的类型,编译器可以进行类型检查并且会标注出语法错误。
弱类型:因为完全兼容Javascript,所以同样也是弱类型,即可以进行隐式类型转换,如:
12console.log(1 + '1');// 打印出字符串 '11'
但我们可以通过声明变量的类型,将Ts作为一个强类型语言来使用。
增强了IED的功能,提供代码补全等能力。
数据类型变量声明方式1let num: number = 1;
注意,如果使用Number()去创建一个变量,这个变量并不是number类型,而是Number类型。前者是基本数据类型,而后者是一个构造函数对象。
空值可以指定一个函数的返回值为空值(void)
123function test(): void { //do something}
可以将指定变量类型为void,此时只能将这个变量赋值为undefined和null
1234567891011121314151617### void与never的区别never是 ...