赞
踩
一、选择题
1.下述有关css 属性position的属性值的描述,说法错误的是?
A. static:没有定位,元素出现在正常的流中
B. fixed:生成绝对定位的元素,相对于父定位元素进行
C. relative:生成相对定位的元素,相对于元素本身正常位置进行定位。
D. absolute:生成绝对定位的元素,相对于static定位以外的第一个祖先元素进行定位。
2.下面有关浏览器中使用js跨域获取数据的描述,说法错误的是?
A.域名、端口相同,协议不同,属于相同的域
B. js可以使用jsonp进行跨域
C.通过修改document.domain来跨子域
D.使用window.name来进行跨域
3.下面有关JavaScript中call和apply的描述,错误的是?
A.call与apply都属于Function.prototype的一个方法,所以每个function实例都有call、apply属性
B.两者传递的参数不同,call函数第一个参数都是要传入给当前对象的对象,apply不是
C. apply传入的是一个参数数组,也就是将多个参数组合成为一个数组传入
D.call传入的则是直接的参数列表。call方法可将一个函数的对象上下文从初始的上下文改变为由thisObj指定的新对象。
二、简答题:
1.display: none;与visibility: hidden;的区别
2.下面代码的输出是什么?
for (var i = 0; i< 3; i++) {
setTimeout(() =console.log(i),1);}
3.请给出这段代码的运行结果
var bb = 1;
function aa(bb) {
bb = 2;
alert(bb);}
aa(bb);
alert(bb);
4.请写出下面代码运行之后的结果
function func1(){
var n=99
nAdd = function(){
this.n+=1
console.log(this.n)}
function func2(){console.log(n)}
return func2}
var result = func1()result()
nAdd()result()
5.请描述一下cookies, sessionStorage和 localStorage 的区别?
6.请写出数组的冒泡排序方法
7.new操作符具体干了什么呢?
8.实现一个函数计算求和,支持这两个情况: sum(2,3)和sum(2)(3)
9..实现一个函数将字符串转驼峰,例如border-bottom-color ---> borderBottomColor
10..编写一个javscript函数fn,该函数有一个参数n(数字类型),其返回值是一个数组,该数组内是n个随机且不重复的整数,且整数取值范围是【2,32】。提示:可以使用getRand()函数
11.编写一个函数实现继承的例子
12.数据表
--1.学生表
Student(Sld,Sname,Sage,Ssex)
--Sld 学生编号,Sname学生姓名,Sage出生年月,Ssex 学生性别
--2课程表
Course(Cld,Cname,Tld)
--Cld 课程编号,Cname 课程名称, Tld教师编号
--3.教师表
Teacher( Tld, Tname)
--Tld教师编号, Tname教师姓名
--4.成绩表
sc(Sld,Cld,score)
--Sld学生编号,Cld课程编号,score分数
学生表Student
create table Student(Sld varchar(10),Sname varchar(10),Sage datetime,Ssex varchar(10));insert into Student values(01','赵雷', "1990-01-01','男');
insert into Student values('02',钱电', "1990-12-21',"男);
insert into Student values(03’,"孙风', "1990-12-20','男');
insert into Student values('04','李云',"1990-12-06’,'男");
insert into Student values('05",'周梅’,"1991-12-01','女');
insert into Student values('06",'吴兰', "1992-01-01','女');
insert into Student values('O7”,'郑竹’,"1989-01-01','女');
insert into Student values(09', "张三',2017-12-20','女);
insert into Student values('10”,'李四',"2017-12-25',"女');
insert into Student values('11','李四”,'2012-06-06",'女);
insert into Student values('12','赵六', '2013-06-13','女');
insert into Student values('13',孙七',"2014-06-01','女');
科目表Course
create table Course(Cld varchar(10),Cname nvarchar(10), Tld varchar(10));insert into Course values(01','语文',"02');
insert into Course values(02',"数学",'01');insert into Course values(03',"英语”,"03');教师表Teacher
create table Teacher( Tld varchar(10),Tname varchar(10));
insert into Teacher values('01", "张三');
insert into Teacher values('02”, "李四');
insert into Teacher values(03','王五');
成绩表sc
create table sC(Sld varchar(10),Cld varchar(10),score decimal(18,1));
insert into sC values('01 ,'01" , 80);
insert into sc values('01', '02 , 90);
insert into sc values('01' , '03' , 99);
insert into sC values(02 ,'01",70);
insert into sC values('02,"02', 60);
insert into sc values(02" , '03' , 80);
insert into sC values('03', '01' ,80);
insert into sC values('03' , 'o2' , 80);
insert into sC values('03' , '03' , 80);
insert into sC values('o4' , '01' , 50);
insert into sC values(04' , '02' , 30);
insert into sC values('04’ , '03',20);
insert into sC values('05', '01 ,76);
insert into sC values('05', '02 ,87);
insert into sC values('06' , '01' ,31);
insert into sC values('06' , '03' , 34);
insert into sC values('o7' , '02' , 89);
insert into sC values('O7' , '03', 98);
1.查询同时存在"01"课程和"02"课程的情况
2.按平均成绩从高到低显示所有学生的所有课程的成绩以及平均成绩
3.查询同名学生名单,并统计同名人数,找到同名的名字并统计个数
一、选择题
1、新口打开网页,用到以下哪个值(B)
A.self B._blank C._top D. _parent
2、元素的alt和title有什么异同,选出正确的说法?(B)
A、不同的浏览器,表现一样
B、alt和title同时设置的时候,alt 作为图片的替代文字出现,title 是图片的解释文字
C、alt和title同时设置的时候,title 作为图片的替代文字出现,alt 是图片的解释文字
D、以上说法都不正确
3, [“1”, “7”,“15"].map(parselnt)执行结果(D)
A: ["1", "7”,“15”]; B:[1,7,15] C:[0,7,15] D:[1,NaN,NaN]
4、多选题input元素的type属性的取值可以是(Bcd)
A、image B、checkbox C、button D、select
5、多选题css中可继承的属性有哪些(BE)
A.height B.font-size C.border D、width E、color
6、vue-router有哪几种导航钩子,以下哪种选项不是vue-router的导航钩子?(C)
A.全局导航钩子 B组件内的钩子 C页面钩子 D单独路由独享组件
二、问答
1.擅长技术栈,还原设计稿比例。用一句话评价自己(性格特质/优势/劣势)
2.JavaScript 有几种类型?
①.简单数据类型:Nomber.String.Boolear.Bigint.Symbol.Null.urdefined
②.复杂数据类型:Object(包含数组,函数等)
3. 什么是深浅拷贝,用js实现一个深拷贝?
浅拷贝:只拷贝一层,把地址给新对象
深拷贝:拷贝多层,完全拷贝对象,即使嵌套了对象也不影响
用js实现深拷贝①封装函数;②判断属性值的数据类型;获取属性值;分别判断是否为数组、对象,进行拷贝,若嵌套,则利用递归实现多层拷贝。
4.说出几种vue当中的指令和它的用法?
V-on:绑定监听事件
V-Show:根据条件真假来决定显示与否
V-model:数据双向绑定,一般用于input、textera等
V-bind:绑定属性.
V-for:循环
v-if/v-else:判断
5.请说下封装vue组件的过程
①使用vue-cli脚手架搭建项目;
②将组件都放在同一目录下;
③import…form…引入所需组件或资源
④注册组件,在components中写明组件
6.数组去重然后排序var arr=['1','2','1','12','12','78','12','32'];
排序:arr.sort (function (a,b){
Return a-b
});
去重:for (var i=0;i<arr.lenqth;i++){
for(var j=i+1;j<arr.lenqth;i++){
If(arr[i]==arr[j]){
Arr.splice(j,1)
j--;
}}
1.1语义化标签
使得页面的内容结构化,见名知义
1.2 音频audio标签
<audio>
<audio src="someaudio.wav">
您的浏览器不支持 audio 标签。
</audio>
1.3 视频video标签
<video>
<video src="/i/movie.ogg" controls="controls">
your browser does not support the video tag
</video>
1.4 canvas、svg
canvas是一个可以通过脚本语言(主要指JavaScript)来绘制图形的HTML元素,
Canvas | SVG |
依赖分辨率 | 不依赖分辨率 |
不支持事件处理器 | 支持事件处理器 |
弱的文本渲染能力 | 最适合带有大型渲染区域的应用程序。例如地图 |
能够以 .png或 .jpg 格式化保存结果图像 | 复杂度高会减慢渲染速度(任何过度使用DOM的应用都不快) |
最适合图像密集型的游戏,其中的许多对象会被频繁重绘 | 不适合游戏应用 |
1.5 webStorage
Web Storage的目的是为了克服由cookie带来的一些限制,当数据需要被严格控制在客户端上时,无须持续地将数据发回服务器。
Web Storage的两个主要目标是:
用于长久保存整个网站的数据,保存的数据没有过期时间,直到手动去除。
用于临时保存同一窗口(或标签页)的数据,在关闭窗口或标签页之后将会删除这些数据。
1.6 增强型表单
HTML5 拥有多个新的表单 Input 输入类型。这些新特性提供了更好的输入控制和验证。
输入类型:描述
表单元素 描述
元素规定输入域的选项列表使用 元素的 list 属性与 元素的 id 绑定
提供一种验证用户的可靠方法标签规定用于表单的密钥对生成器字段。
用于不同类型的输出比如计算或脚本输出
1.7 HTML5 新增的表单属性
Css盒模型分为:标准盒模型、怪异盒模型
(1)标准盒模型(W3C盒子模型)
标准盒模型:盒子总宽/高 = width/height +padding + border + margin
(即width/height只是内容高度,不包含padding和border)
(2)怪异盒模型(IE盒子模型)
怪异盒模型:盒子总宽/高 = width/height + margin
(即width/height包含了 padding 和 border 值)
vue-router实现原理
SPA(single page application):单一页面应用程序,只有一个完整的页面;它在加载页面时,不会加载整个页面,而是只更新某个指定的容器中内容。单页面应用(SPA)的核心之一是: 更新视图而不重新请求页面;vue-router在实现单页面前端路由时,提供了两种方式:Hash模式和History模式;根据mode参数来决定采用哪一种方式。
1、Hash模式:
vue-router 默认 hash 模式 —— 使用 URL 的 hash 来模拟一个完整的 URL,于是当 URL 改变时,页面不会重新加载。hash(#)是URL 的锚点,代表的是网页中的一个位置,单单改变#后的部分,浏览器只会滚动到相应位置,不会重新加载网页,也就是说hash 出现在 URL 中,但不会被包含在 http 请求中,对后端完全没有影响,因此改变 hash 不会重新加载页面;同时每一次改变#后的部分,都会在浏览器的访问历史中增加一个记录,使用”后退”按钮,就可以回到上一个位置;所以说Hash模式通过锚点值的改变,根据不同的值,渲染指定DOM位置的不同数据。hash 模式的原理是 onhashchange 事件(监测hash值变化),可以在 window 对象上监听这个事件。
2、History模式:
由于hash模式会在url中自带#,如果不想要很丑的 hash,我们可以用路由的 history 模式,只需要在配置路由规则时,加入"mode: 'history'",这种模式充分利用了html5 history interface 中新增的 pushState() 和 replaceState() 方法。这两个方法应用于浏览器记录栈,在当前已有的 back、forward、go 基础之上,它们提供了对历史记录修改的功能。只是当它们执行修改时,虽然改变了当前的 URL ,但浏览器不会立即向后端发送请求。
//main.js文件中
const router = new VueRouter({
mode:'history',
routes:[...]
})
当你使用 history 模式时,URL 就像正常的 url,例如 http://yoursite.com/user/id,比较好看!
不过这种模式要玩好,还需要后台配置支持。因为我们的应用是个单页客户端应用,如果后台没有正确的配置,当用户在浏览器直接访问 http://oursite.com/user/id 就会返回 404,这就不好看了。
所以呢,你要在服务端增加一个覆盖所有情况的候选资源:如果 URL 匹配不到任何静态资源,则应该返回同一个 index.html 页面,这个页面就是你 app 依赖的页面。
此处就设置如果URL输入错误或者是URL 匹配不到任何静态资源,就自动跳到到Home页面
3、使用路由模块来实现页面跳转的方式、
方式1:直接修改地址栏
方式2:this.$router.push(‘路由地址’)
方式3: <router-link to="路由地址"></router-link>
(1)MVC:MVC框架即Model View Controller,是模型Model-视图View-控制器Controller的缩写。
(2)MVVM:由Model,View,ViewModel三部分构成。
2 . 节流:n秒内只运行一次,若在n秒内重复触发,只有一次生效。
1. vue2和vue3双向数据绑定原理发生了改变
3. Composition API
Vue2 与vue3 最大的区别是vue2使用选项类型api,对比vue3合成型api。旧得选项型api在代码里分割了不同得属性:data,computed,methods等;新得合成型api能让我们使用方法来分割,相比于旧的API使用属性来分组,这样代码会更加简便和整洁。
vue2是把数据放入data中,vue3就需要使用一个新的setup()方法,此方法在组件初始化构造得时候触发。使用一下三个步骤来简=建立反应性数据: 1. 从vue引入reactive;使用reactive() 方法来声明数据为响应性数据;3. 使用setup()方法来返回我们得响应性数据,从而template可以获取这些响应性数据。
vue2 ---------------------------- vue3
beforeCreate -> setup()
Created -> setup()
beforeMount -> onBeforeMount
mounted -> onMounted
beforeUpdate -> onBeforeUpdate
updated -> onUpdated
beforeDestroyed -> onBeforeUnmount
destroyed -> onUnmounted
activated -> onActivated
deactivated -> onDeactivated
6. 父子传参不同,setup()函数特性
setup()函数接收两个参数:props、context(包含attrs、slots、emit)
setup函数是处于生命周期beforeCreated和created俩个钩子函数之前
执行setup时,组件实例尚未被创建(在setup()内部,this不会是该活跃实例得引用,即不指向vue实例,Vue为了避免我们错误得使用,直接将setup函数中得this修改成了undefined)
与模板一起使用时,需要返回一个对象
因为setup函数中,props是响应式得,当传入新的prop时,它将会被更新,所以不能使用es6解构,因为它会消除prop得响应性,如需解构prop,可以通过使用setup函数中得toRefs来完成此操作。
父传子,用props,子传父用事件 Emitting Events。在vue2中,会调用this$emit然后传入事件名和对象;在vue3中得setup()中得第二个参数content对象中就有emit,那么我们只要在setup()接收第二个参数中使用分解对象法取出emit就可以在setup方法中随意使用了。
在setup()内使用响应式数据时,需要通过 .value 获取
import { ref } from 'vue'
const count = ref(0)
console.log(count.value)
从setup() 中返回得对象上得property 返回并可以在模板中被访问时,它将自动展开为内部值。不需要在模板中追加.value。
setup函数只能是同步的不能是异步的。
(1)什么是回流
当render tree中的因为元素的规模尺寸,布局,隐藏等改变而需要重新构建。这就称为回流(Reflow)。而每个页面至少会进行一次回流,在页面第一次加载的时候,这时候是一定会发生回流的,因为要构建Render Tree。在回流的时候,浏览器会使渲染树中受到影响的部分失效,并重新构造这部分渲染树。具体引起回流的点如下:
(2)什么是重绘
完成回流后,浏览器会重新绘制受影响的部分到屏幕中,当render tree中的一些元素需要更新属性,而这些属性只是影响元素的外观,风格,而不会影响布局的,比如background-color。则就叫称为重绘。
(3)重绘与回流的区别
回流必将引起重绘,而重绘不一定会引起回流,这个是一个关键点,只有颜色改变的时候就只会发生重绘而不会引起回流,回流往往伴随着布局的变化,代价较大,重绘只是样式的变化,结构不会变化
当访问一个对象的属性时, 会在这个对象的属性上去找,如果没有找到就会去这个对象的--proto-- 对象原型上去找,即构造函数prototype 原型对象上找,如果没有会一直在--proto-- 对象原型上找,直到最顶层,不到即为undefined 。这样一层一层地向上,就彷佛一条链子串起来,所以就叫原型链。
(1)相同点:
(2)不同点
11.有没有对elementui组件进行过二次封装
12.深拷贝 浅拷贝区别
(1)浅拷贝:只是拷贝一层, 更深层次对象级别的只拷贝引用。(浅拷贝是把地址给新对象)无论在新旧数组进行了修改,两者都会发生变化,我们把这种复制引用的拷贝方法称为浅拷贝。
ES6 新增可浅拷贝方法:Object.assign(target,…sources)
(2)深拷贝:拷贝多层, 每一级别的数据都会拷贝。完全的拷贝一个对象,即使嵌套了对象,两者也互相分离,修改一个对象的属性,不会影响另一个。
一、原型继承
实现方式:把父类的实例作为子类的原型
缺点:子类的实例中共享了父类原型上的引用属性二、构造函数继承
实现方式:调用父类的构造函数,改变this的指向,指向子类
缺点:只能继承父类的属性,不能继承父类的方法
三、组合继承
实现方式:构造函数继承 + 原型继承
缺点:调用父类的构造函数两次,造成消耗
四、寄生组合式继承
实现方式: 构造函数继承 + 原型继承,原型继承的方式调整,不继承父类的属性
五、ES6 extends继承
1. 语义化的背景:
以前的HTML的结构,基本上就是DIV+CSS。然而,DIV它并没有什么任何的意义,全靠CSS显示页面的样式。那么近几年呢,开发者提出了HTML结构的语义化,所以W3C就制定出了语义化标签。
2. 什么是语义化
语义化就是构成HTML结构的标签要有意义。
比如有这样的标签:
那么这些标签构成的HTML结构就是有意义的,也是语义化的。
如果说页面的头部、主体以及底部都用div来表示,那么他就不是一个语义化的HTML结构了。
3. 怎么知道页面结构是否语义化了呢?
去掉CSS,看HTML代码的结构,是否清晰,再看页面内容呈现,是否可以正常显示
4. 为什么要语义化
5. 怎么做才能写出语义化的HTML呢?
少使用/不使用 div 和 span 标签;
用 p 标签代替 div 标签;
不使用样式标签,如: b 标签、font 标签;
强调文本放在 strong 或者 em 标签中,不要用 b 和 i 标签;
使用表格 table 时,标题要用 caption,表头要用 thead,主体部分用 tbody 包围,尾部用 tfoot 包围;表头用 th,单元格用 td。表单域用 filedset 包裹,用 lengend 标签说明表单的用途。
input 标签通过 id 属性或 for 属性与 label 标签关联。
html 语义化,css 类名也要语义化。
双向绑定包括两个方面:1.视图变化更新数据;2.数据变化更新视图。
(1)视图变化更新数据
对于视图变化更新数据,可以使用事件监听,比如input标签监听‘input’事件就可以实现。
(2)数据变化更新视图
设置一个set函数,当数据发生改变就会触发这个函数,所以我们只需要将一些需要更新的方法放在这个set函数里面就可以实现数据变化更新视图了。
17.问项目细节
18.你比较擅长的技术有哪些?你觉得你还原设计稿能力怎么样?
19.解释一下TCP三次握手、为什么建立连接需要二次握手?
建立连接的过程是利用客户服务器模式,假设主机A为客户端,主机B为服务器端。
(1)TCP的三次握手过程:主机A向B发送连接请求;主机B对收到的主机A的报文段进行确认;主机A再次对主机B的确认进行确认。
(2)采用三次握手是为了防止失效的连接请求报文段突然又传送到主机B,因而产生错误。失效的连接请求报文段是指:主机A发出的连接请求没有收到主机B的确认,于是经过一段时间后,主机A又重新向主机B发送连接请求,且建立成功,顺序完成数据传输。考虑这样一种特殊情况,主机A第一次发送的连接请求并没有丢失,而是因为网络节点导致延迟达到主机B,主机B以为是主机A又发起的新连接,于是主机B同意连接,并向主机A发回确认,但是此时主机A根本不会理会,主机B就一直在等待主机A发送数据,导致主机B的资源浪费。
(3)采用两次握手不行,原因就是上面说的失效的连接请求的特殊情况。
20.0*undefined和0*null分别输出什么?原理是什么?
NULL、0
null 是空或者不存在的值
undefined 通常是一个变量已经被声明,但是没有赋值
21.填空题:姓名: 身份证号: 年龄: 性别:
请把填空题中的 转成input输出框。(注意每个位置的 数量长短不定)
22.计算出let A="The highest frequency"中哪个字母出现频率最多。
let s="hasdfhdsfjhdjfaleeee";
let ss=s.split('');
console.log(ss); //输出分割后的数组
let f={};
for(let i=0;i<ss.length;i++){
if(f[ss[i]]==undefined){
f[ss[i]]=1;
}else {
f[ss[i]]++;
}
}
let max=0;
const v=function () {
for( e in f ){
if(f[e]>max){
max=f[e];
req=e;
}
}
return req
}();
console.log(f); //输出map
console.log(v) //输出出现频率最高的
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。