目录

1.说说你知道Javascript的内存回收机制

2.简单介绍一下Promise,它解决了什么问题?

3.position : absolute和float属性的异同

4.Cookie和Session有什么联系和区别?

5.Vue是如何实现双向数据绑定的?原理是什么?

6.css水平、垂直居中的写法,请至少写出4种(请写出垂直水平居中的实现方法)

7.对MVC和MVVM的理解?

8.vue-router有哪些钩子函数?

9.display : none和visiable : hidden区别

10.你是怎么学习JS的?(请写出渠道:网站、书籍和方法)

11.说一下localStorage、sessionStorage和cookie的区别

12.HTML5有哪些新特性?

13.介绍一下Vue的生命周期钩子函数

14.Vue有哪些指令,各自的用处是什么?

15.请写出css优先级

16.介绍一下标准的CSS的盒子模型?与低版本IE的盒子模型有什么不同的?

17.在以下元素,哪些是空元素?

18.(window.a ||  (window.a = 'a')) 最后输出什么?为什么?


1.说说你知道Javascript的内存回收机制

内存回收机制在回收内存时,首先会判断该对象是否被其它对象引用.在确定没有其它对象引用便释放该对象内存区域。

Javascript具有自动垃圾回收机制(GC:Garbage Collecation),也就是说,执行环境会负责管理代码执行过程中使用的内存。

原理:垃圾收集器会定期(周期性)找出那些不在继续使用的变量,然后释放其内存。

JavaScript垃圾回收的机制很简单:找出不再使用的变量,然后释放掉其占用的内存,但是这个过程不是实时的,因为其开销比较大,所以垃圾回收器会按照固定的时间间隔周期性的执行

不再使用的变量也就是生命周期结束的变量,当然只可能是局部变量,全局变量的生命周期直至浏览器卸载页面才会结束。局部变量只在函数的执行过程中存在,而在这个过程中会为局部变量在栈或堆上分配相应的空间,以存储它们的值,然后在函数中使用这些变量,直至函数结束,而闭包中由于内部函数的原因,外部函数并不能算是结束。

2.简单介绍一下Promise,它解决了什么问题?

Promise 是异步编程的一种解决方案: 从语法上讲,promise是一个对象,从它可以获取异步操作的消息;从本意上讲,它是承诺,承诺它过一段时间会给你一个结果。 promise有三种状态:pending(等待态),fulfiled(成功态),rejected(失败态);状态一旦改变,就不会再变。创造promise实例后,它会立即执行。Promise 规范中还规定了 Promise 中必须有 then 方法,这个方法也是实现异步的链式操作的基本。

Promise解决的问题:

(1)回调地狱问题

  • 异步的嵌套可称之为回调地狱,回调地狱有两个很典型的问题就是可读性问题和信任问题

(2)可读性问题

(3)信任问题(也称控制反转问题)

  • 对于回调过早的问题,由于Promise只能是异步的,所以不会出现异步的同步调用。即便是在决议之前的错误,也是异步的,并不是会产生同步(调用过早)的困扰。
  • 对于回调过晚或没有调用的问题,Promise本身不会回调过晚,只要决议了,它就会按照规定运行。所以不会存在回调过晚或没有调用的问题
  • 对于回调次数太少或太多的问题,由于Promise只能被决议一次,且决议之后无法改变,所以,即便是多次回调,也不会影响结果,决议之后的调用都会被忽略。

3.position : absolute和float属性的异同

两者的共同点:对行内元素设置float或absolute属性,可以让元素脱离文档流,并且可以设置其宽高。

两者的不同点:float仍会占位置,position会覆盖文档流中的其他元素。

网友总结的图如下:

4.Cookie和Session有什么联系和区别?

cookie:

在网站中,http请求是无状态的。也就是说即使第一次和服务器连接后并且登录成功后,第二次请求服务器依然不能知道当前请求是哪个用户。cookie的出现就是为了解决这个问题,第一次登录后服务器返回一些数据(cookie)给浏览器,然后浏览器保存在本地,当该用户发送第二次请求的时候,就会自动的把上次请求存储的cookie数据自动的携带给服务器,服务器通过浏览器携带的数据就能判断当前用户是哪个了。

session:

session和cookie的作用有点类似,都是为了存储用户相关的信息。不同的是,cookie是存储在本地浏览器(易伪造、不安全),而session存储在服务器端(会消耗服务器资源)。存储在服务器的数据会更加的安全,不容易被窃取。其次,Cookie 只能保存ASCII字符串,如果是Unicode字符或者二进制数据需要先进行编码。Cookie中也不能直接存取Java对象。 Session能够存取很多类型的数据,包括String、Integer、List、Map等,Session中也可以保存Java对象。

5.Vue是如何实现双向数据绑定的?原理是什么?

  • vue实现数据双向绑定主要是:采用数据劫持结合发布者-订阅者模式的方式,通过 Object.defineProperty() 来劫持各个属性的setter,getter,在数据变动时发布消息给订阅者,触发相应监听回调。当把一个普通 Javascript 对象传给 Vue 实例来作为它的 data 选项时,Vue 将遍历它的属性,用 Object.defineProperty() 将它们转为 getter/setter。用户看不到 getter/setter,但是在内部它们让 Vue追踪依赖,在属性被访问和修改时通知变化。
  • vue的数据双向绑定 将MVVM作为数据绑定的入口,整合Observer,Compile和Watcher三者,通过Observer来监听自己的model的数据变化,通过Compile来解析编译模板指令(vue中是用来解析 {{}}),最终利用watcher搭起observer和Compile之间的通信桥梁,达到数据变化 —>视图更新;视图交互变化(input)—>数据model变更双向绑定效果。

6.css水平、垂直居中的写法,请至少写出4种(请写出垂直水平居中的实现方法)

(1)水平居中:

  • 元素为行内元素,设置父元素text-align:center
  • 如果元素宽度固定,可以设置左右margin为auto
  • 如果元素为绝对定位(或相对定位),可以设置父元素position为relative,宽度固定时设置left:0;right:0;margin:auto
  • 如果元素为绝对定位(或相对定位),可以设置父元素position为relative,宽度固定时设置left:50%,margin-left值为宽度一半的负值
  • 使用flex布局,设置父元素display:flex;同时设置justify-content: center;
  • 使用老版flex布局,设置父元素display: -webkit-box;同时设置-webkit-box-pack: center;

(2)垂直居中:

  • 文本垂直居中,设置父元素line-heightheight
  • 如果元素为绝对定位(或相对定位),可以设置父元素position为relative,高度固定时设置top:0;bottom:0;margin:auto
  • 如果元素为绝对定位(或相对定位),可以设置父元素position为relative,高度固定时设置top:50%,margin-top值为高度一半的负值
  • 使用flex布局,设置父元素display:flex;同时设置align-items: center;
  • 使用老版flex布局,设置父元素display: -webkit-box;同时设置-webkit-box-align: center;
  • 将显示方式设置为表格,设置父元素display: table-cell;同时设置vertical-align: middle;

7.对MVC和MVVM的理解?

(1)MVC(Model View Controller)是一种软件设计典范,用一种业务逻辑、数据、界面显示分离的方法组织代码,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑。MVC被独特的发展起来用于映射传统的输入、处理和输出功能在一个逻辑的图形化用户界面的结构中。

(2)MVVM是 Model-View-ViewModel的缩写,即模型-视图-视图模型,是一种设计思想。

Model:代表数据模型,数据和业务逻辑都在Model层中定义;

View:代表UI视图,负责数据的展示;

ViewModel:就是与界面(view)对应的Model。因为,数据库结构往往是不能直接跟界面控件一一对应上的,所以,需要再定义一个数据对象专门对应view上的控件。而ViewModel的职责就是把model对象封装成可以显示和接受输入的界面数据对象。

8.vue-router有哪些钩子函数?

(1)全局路由钩子函数beforeEach和afterEach

每次路由跳转,都会执行beforeEach和afterEach,一般写在main.js可以做权限控制

beforeEach函数有三个参数:

to:router即将进入的路由对象
from:当前导航即将离开的路由
next:Function,进行管道中的一个钩子,如果执行完了,则导航的状态就是 confirmed (确认的);否则为false,终止导航。
afterEach函数不用传next()函数
这类钩子主要作用于全局,一般用来判断权限等操作

(2)单个路由钩子函数beforeEnter和beforeleave

beforeEnter有三个参数:to/from/next

单个路由钩子函数主要用于写某个指定路由跳转时需要执行的逻辑

(3)组件路由钩子函数beforeRouteEnter,beforeRouteUpdate,beforeRouteLeave

三个参数:to/from/next 
beforeRouteEnter:进入这个组建路由之前 
beforeRouteLeave:离开这个组建路由 
beforeRouteUpdate:再本路由的下级路由切换才会触发beforeRouteUpdate

总共有7个钩子函数!

9.display : none和visiable : hidden区别

  • 联系:它们都能让元素不可见

  • 区别:

    • display:none会让元素完全从渲染树中消失,渲染的时候不占据任何空间;visibility: hidden不会让元素从渲染树消失,渲染时元素继续占据空间,只是内容不可见
    • display: none是非继承属性,子孙节点消失由于元素从渲染树消失造成,通过修改子孙节点属性无法显示;visibility: hidden是继承属性,子孙节点消失由于继承了hidden,通过设置visibility: visible可以让子孙节点显式
    • 修改常规流中元素的display通常会造成文档重排。修改visibility属性只会造成本元素的重绘
    • 读屏器不会读取display: none元素内容;会读取visibility: hidden元素内容

10.你是怎么学习JS的?(请写出渠道:网站、书籍和方法)

网站:慕课网、bilibili、CSDN学院、简书、博客园、开源中国、github等;

书籍:JavaScript高级程序设计(第3版)、Java Web程序设计(慕课版);

方法:

  • 跟着优质教学视频进行学习,跟着著名老师敲代码;
  • 找到动力;
  • 学习时间投入;
  • 找学习路线图;
  • 写博客。博客是程序员必备的,在编程过程总要反思,知其然知其所以然,写代码多问问为什么。问懂了,记录下来,这些就成了你的宝贵经验;
  • 阅读源代码;

11.说一下localStorage、sessionStorage和cookie的区别

  • localStorage: localStorage 的生命周期是永久的,关闭页面或浏览器之后 localStorage 中的数据也不会消失。localStorage 除非主动删除数据,否则数据永远不会消失

  • sessionStorage: sessionStorage 的生命周期是仅在当前会话下有效。sessionStorage 引入了一个“浏览器窗口”的概念,sessionStorage 是在同源的窗口中始终存在的数据。只要这个浏览器窗口没有关闭,即使刷新页面或者进入同源另一个页面,数据依然存在。但是 sessionStorage 在关闭了浏览器窗口后就会被销毁。同时独立的打开同一个窗口同一个页面,sessionStorage 也是不一样的

  • cookie: cookie生命期为只在设置的cookie过期时间之前一直有效,即使窗口或浏览器关闭。 存放数据大小为4K左右, 有个数限制(各浏览器不同),一般不能超过20个。缺点是不能储存大数据且不易读取

共同点:都是保存在浏览器端、且同源的 
区别:

  • cookie数据始终在同源的http请求中携带(即使不需要),即cookie在浏览器和服务器间来回传递,而sessionStorage和localStorage不会自动把数据发送给服务器,仅在本地保存。cookie数据还有路径(path)的概念,可以限制cookie只属于某个路径下
  • 存储大小限制也不同,cookie数据不能超过4K,同时因为每次http请求都会携带cookie、所以cookie只适合保存很小的数据,如会话标识。sessionStorage和localStorage虽然也有存储大小的限制,但比cookie大得多,可以达到5M或更大
  • 数据有效期不同,sessionStorage:仅在当前浏览器窗口关闭之前有效;localStorage:始终有效,窗口或浏览器关闭也一直保存,因此用作持久数据;cookie:只在设置的cookie过期时间之前有效,即使窗口关闭或浏览器关闭
  • 作用域不同,sessionStorage不在不同的浏览器窗口中共享,即使是同一个页面;localstorage在所有同源窗口中都是共享的;cookie也是在所有同源窗口中都是共享的
  • web Storage支持事件通知机制,可以将数据更新的通知发送给监听者
  • web Storage的api接口使用更方便

12.HTML5有哪些新特性?

Html5 现在已经不是SGML 的子集,主要是关于图像,位置,存储,多任务等功能的增加

  • 新增选择器document.querySelectordocument.querySelectorAll
  • 拖拽释放(Drag and drop) API
  • 媒体播放的video 和audio
  • 本地存储localStorage 和sessionStorage
  • 离线应用manifest
  • 桌面通知Notifications
  • 语意化标签articlefooterheadernavsection
  • 增强表单控件calendardatetimeemailurlsearch
  • 地理位置Geolocation
  • 多任务webworker
  • 全双工通信协议websocket
  • 历史管理history
  • 跨域资源共享(CORS)Access-Control-Allow-Origin
  • 页面可见性改变事件visibilitychange
  • 跨窗口通信PostMessage
  • Form Data 对象
  • 绘画canvas

13.介绍一下Vue的生命周期钩子函数

Vue 实例从创建到销毁的过程,就是生命周期。也就是从开始创建、初始化数据、编译模板、挂载Dom→渲染、更新→渲染、卸载等一系列过程,我们称这是 Vue 的生命周期。在vue组件中,组件的实例从创建前(beforeCreate)、创建后(created)、挂载前(beforeMount)、挂载后(mounted)、更新前(beforeUptate)、更新后(updated)、销毁前(beforeDestroy)、销毁后(destroyed)一系列,即从创建到销毁的整个过程,我们把它称之为vue组件的一个完整的生命周期。

beforeCreate(){}:实例初始化之前  数据没有加载 页面没有显示

         debugger; 断点调试

      往往在这个阶段做loading 请求状态

Created(){}:实例初始化后,请求到了数据,事件,属性等,但是没有加载,页面依然没有显示,在这个阶段,往往发送 ajax请求,http请求

         create---beforeMount之间 vue会在options中查找有没有el选项,有就把它作为模板,没有就通过vm.$mount()  去挂载

created之后有个判断,先看你有没有el属性,在看看有没有模板属性,有模板属性呢,就会把模板上的东西渲染出去,没有模板属性呢,就把el上的东西当做模板渲染出去,

created-boforeMount的过程就是找模板,而模板都是虚拟的

beforeMount(){}vue会将el对应的模板 加到$el中去,但是还没有挂载出去,页面没有显示

mounted(){}:页面加载出来

beforeUpdate(){}:数据更新前,在虚拟dom中使用differ算法,在内存中实现的,mounted之前的过程就不管了。如果想看属性的变化,

                在这个阶段可以使用watch(属性监听)这个方法监听属性

update(){}:更新完了,在渲染,谁改变了渲染谁,不是整个dom树重新渲染

beforeDestroy(){}:销毁之后

                destroy销毁,实例销毁需要人为触发

        销毁:之前渲染好的保持不变,保留下来,后面再使用这个实例就不起作用了

                 Vm.$destroy()   进行销毁

destroyed(){}:销毁之后

简述一下每个周期具体适合那些场景:

beforeDestroy可以在这加个loading事件,在加载实例是触发

created初始化完成时的事件写在这里,如在这结束loading事件,异步请求也适宜在这里调用

mouted挂载元素,获取到DOM节点

updated如果对数据统一处理,在这里写上相应函数

beforeDestroy可以做一个确认停止事件的确认框

nextTick更新数据后立即操作Dom

14.Vue有哪些指令,各自的用处是什么?

v-if:根据表达式的值的真假条件渲染元素,在切换时元素及它的数据绑定/组件被销毁并重建。
v-show:根据表达式之真假值,切换元素的display CSS 属性。
v-for:循环指令,基于一个数组或对象渲染一个列表,Vue 2.0 以上必须需配合key值使用。
v-bind:动态地绑定一个或多个特性,或一个组件prop到表达式。
v-on:用于监听指定元素的DOM事件,比如点击事件。绑定事件监听器。
v-model:实现表单输入和应用状态之间的双向绑定。
v-pre:跳过这个元素和它的子元素的编译过程。可以用来显示原始Mustache标签。跳过大量没有指令的节点会加快编译。
v-once:只渲染元素和组件一次,随后的重新渲染,元素/组件及其所有的子节点将被视为静态内容并跳过。这可以用于优化更新性能。

15.请写出css优先级

优先级关系:!important(在样式属性后不加“;”,在!important后加分号) > 内联样式 > ID 选择器 > 类选择器 = 属性选择器 = 伪类选择器 > 标签选择器 = 伪元素选择器 > 通配符 > 继承 > 浏览器默认属性

CSS选择器分类

  • 全局选择器(通配符*)
  • 标签选择器(body,div,p,ul,li)
  • 类选择器(.)
  • ID选择器(#)
  • 组合选择器(.head .head_loge,两选择器之间用空格隔开)
  • 后代选择器(#head .nav li ul,从父级到子孙集的选择器)
  • 子选择器(div>p)
  • 群组选择器(div,span,img{color:red;},即将具有相同样式的标签分组显示)
  • 继承选择器(div p,两选择器用空格键分开)
  • 伪类选择器(链接样式a元素的伪类::link(未被访问),:visited(已访问),:active(被选择),:hover(当鼠标悬停在链接上))
  • 字符串匹配的属性选择符(^(开始),$(中间),*(结尾))
  • css相邻兄弟选择器(如h1+p)

CSS选择器权值:是由四个级别和各级别出现次数决定的
四个级别:行内样式,id选择器,class选择器,标签
每个规则对应一个初始值0,0,0,0

  • 若是 行内选择器,则加1、0、0、0
  • 若是 id选择器,则加0、1、0、0
  • 若是 类选择器/属性选择器/伪类选择器,则分别加0、0、1、0
  • 若是 元素选择器/伪元素选择器,则分别加0、0、0、1

算法:将每条规则中,选择符对应的数相加后得到的”四位数“,从左到右进行比较,大的优先级越高。

优先级相同时,则采用就近原则,选择最后出现的样式

16.介绍一下标准的CSS的盒子模型?与低版本IE的盒子模型有什么不同的?

标准模型和IE模型的区别就在于宽和高的计算方式不同,标准模型的宽度和高度指的就是content的宽度和高度,它不包含padding和border,IE模型的宽度和高度是计算padding和border的,如果宽度都设置为200px,对于IE模型来说,200px包含了padding和border,如果IE模型的padding是10px,无border,那么对应的content只能是180px,高度亦是如此。

CSS如何设置这两种模型

通过CSS3中的属性box-sizing:content-box;设置成标准模型;box-sizing:border-box;设置成IE模型。浏览器默认的方式是content-box

JS如何设置获取盒子模型对应的宽和高

DOM.style.width/height(并不能拿到所有的宽和高,只能拿到内联样式的宽和高,也就是在div标签内写style的写法,其他两种CSS写法是取不到宽高的)
DOM.currentStyle.width/height(拿到浏览器渲染后的宽高,但这个属性只有IE支持)
window.getComputedStyle(DOM).width/height(与上一种原理相似,但这种支持大多数浏览器,兼容性更好)
DOM.getBoundingClientRect().width/height(经常适用的场景是计算一个元素的绝对位置,这个绝对位置是根据视窗的绝对位置,getBoundingClientRect()这个方法拿到的有4个元素:left,top,width,height)

17.在以下元素,哪些是空元素?

a) img

b) span

c) meta

d) input

e) dd

18.(window.a ||  (window.a = 'a')) 最后输出什么?为什么?

"a"

以上皆是本人目前在广州找实习期间亲身经历过的笔试题中的简答题,部分答案源于网上,如有错漏或有更好的答案也欢迎大家指出,仅作为笔记收录使用,也衷心希望各位能少走弯路,能够找到自己心仪的工作!

前端开发交流QQ群:761614159

求职前端开发的小伙伴可以进群交流一下!

前端开发实习笔试题(简答题)相关推荐

  1. 最新前端开发面试笔试题及答案---图片(面试题系列持续更新中)(4)

    推荐文章: VUE之VUEX常见面试题大全汇总--史上最全[vuex面试题] 前端面试题之HTML+CSS(持续更新)_勤动手多动脑少说多做厚积薄发-CSDN博客1.行内元素和块级元素?img算什么? ...

  2. 最新前端开发面试笔试题及答案---图片(面试题系列持续更新中)(8)

    推荐文章: VUE之VUEX常见面试题大全汇总--史上最全[vuex面试题] 前端面试题之HTML+CSS(持续更新)_勤动手多动脑少说多做厚积薄发-CSDN博客1.行内元素和块级元素?img算什么? ...

  3. 前端开发实习面试题(JavaScript篇)

    目录 1.js有哪些数据类型? 2.说一下对闭包的理解,有什么运用场景? 3.对js中原型及原型链的理解 4.对作用域链的理解 5.介绍一下你对浏览器内核的理解?常见浏览器的内核是什么? 6.js中v ...

  4. 前端开发实习面试题(CSS篇)

    目录 1.CSS3有哪些新特性? 2.介绍一下盒子模型(由什么组成)? 3.定位有哪些值,分别是相对谁定位? 4.如果我想给table表格的第一列内容添加样式,如何做? 5.浮动的作用,如何清除浮动? ...

  5. 最新前端开发面试笔试题及答案---图片(面试题系列持续更新中)(3)

    推荐文章: VUE之VUEX常见面试题大全汇总--史上最全[vuex面试题] 前端面试题之HTML+CSS(持续更新)_勤动手多动脑少说多做厚积薄发-CSDN博客1.行内元素和块级元素?img算什么? ...

  6. 前端开发实习面试题(Web篇)

    1.http有哪些请求方式? GET方法 发送一个请求来取得服务器上的某一资源 POST方法 向URL指定的资源提交数据或附加新的数据 PUT方法 跟POST方法很像,也是想服务器提交数据.但是,它们 ...

  7. 最新前端开发面试笔试题及答案---图片(面试题系列持续更新中)(1)

    推荐文章: VUE之VUEX常见面试题大全汇总--史上最全[vuex面试题] 前端面试题之HTML+CSS(持续更新)_勤动手多动脑少说多做厚积薄发-CSDN博客1.行内元素和块级元素?img算什么? ...

  8. 金山办公2020校招前端开发工程师笔试题

    每天看看面试题,巩固知识,冲鸭 一 .写出如下代码的执行结果 考察了 promise,以及任务处理顺序.promise值得单写一篇文章,这里不过多赘述. new Promise((resolve) = ...

  9. 前端面试题:金山办公2020校招前端开发工程师笔试题(一)

    第一题: []==[]输出的结果为false: 首先,'=='运算符比较的是两个操作数是否相等,(这里不是指严格相等),两个操作数都是空数组,都是Object对象.但是对象的比较并非是值得比较,即使这 ...

最新文章

  1. 第三方支付接口的技术比较研究
  2. uiiamgeview 设置圆角
  3. PHP:第一章——PHP中的关键字
  4. Java学习第三天160818 表单 框架 下拉列表等
  5. python决策树sklearn_python利用sklearn包编写决策树源代码
  6. 作者:李喜莲(1992-),女,北京大学信息科学技术学院硕士生。
  7. 字符串常量池、堆、栈
  8. 数据中心Overlay技术简介
  9. python批量打印mathcad_全能批量打印工具-兼容所有打印机
  10. 解决:严重: Compilation error org.eclipse.jdt.internal.compiler.classfmt.ClassFormatException
  11. 又一恐怖技能!卡耐基梅隆大学发布超强智能体,炸翻科研圈
  12. vs2010c语言一闪而过,[转载]关于vs2010运行C程序时,运行结果窗口一闪而过的问题...
  13. Ubuntu 20.04 离线安装podman
  14. 【Android,Kotlin,TFLite】移动设备集成深度学习轻模型TFlite(图像分类篇)
  15. 连锁定位(Linkage Mapping)与关联定位(Association Mapping)
  16. 论文 | Movie Editing and Cognitive Event Segmentation in Virtual Reality Video
  17. PickerView和AutoSize
  18. 机器视觉系统光源选型技巧及应用案例
  19. 攀枝花java培训班_千里IT之行,始于中软卓越 丨中软国际成都EEC举行攀枝花学院2016年JAVA实训开班仪式...
  20. 基于mysql 模版代码生成器 快速DIY你的代码 2.0稳定版本发布

热门文章

  1. 【小白笔记】目标跟踪Deep Regression Tracking with Shrinkage Loss
  2. 第五章语言模型:n-gram
  3. 2020-12-20随笔
  4. CAD二次开发——通过Ribbon界面来运行程序
  5. C语言中fseek函数
  6. ESP UART 介绍
  7. (超、深)超像素网络SSN
  8. UDP可靠传输,UDT和UDX协议比较
  9. html抓取网址某链接,URL 筛选小工具 提取网页中的链接地址
  10. 访问控制模型总结(DAC MAC RBAC ABAC)