惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

量子位
Stack Overflow Blog
Stack Overflow Blog
人人都是产品经理
人人都是产品经理
The GitHub Blog
The GitHub Blog
Engineering at Meta
Engineering at Meta
Vercel News
Vercel News
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Y
Y Combinator Blog
The Cloudflare Blog
Last Week in AI
Last Week in AI
B
Blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
T
Tailwind CSS Blog
V
Visual Studio Blog
博客园 - 三生石上(FineUI控件)
小众软件
小众软件
Google DeepMind News
Google DeepMind News
D
DataBreaches.Net
博客园 - 司徒正美
B
Blog RSS Feed
Microsoft Azure Blog
Microsoft Azure Blog
罗磊的独立博客
Hugging Face - Blog
Hugging Face - Blog
L
LangChain Blog

博客园 - 吹鱼算法

js文件获取自身的URL路径 Vue 数组封装和组件data定义为函数一些猜测 背景图片 设置距右边距离 手机端 一个像素线解决方案 css3 div 居中 怎么布局宽度自适应的正方形 前端Mvvm QC 设计解析 前端Mvvm QC 上传了测试版 对react的几点质疑 Display: table-cell实现img、文字垂直居中 为什么我们的web前端变的越来越复杂 扔格子游戏 -webkit-overflow-scrolling:touch iosBug on 在ios下 父对象是body的时候会 不调用 动态是执行脚本 html的转码玉反转码 获取url据对路径写法 CSS 外边距合并 页面禁制选中元素的 背景变蓝的通用写法
自己出的一套前端笔试题
吹鱼算法 · 2019-11-21 · via 博客园 - 吹鱼算法

前端高级软件工程师笔试题A卷

一、选择题(每题4分,共20分)

1.typeof [0,1] == _____ A
A.object B.array C.number D.string

2.关于session 和 cookie 描述不正确的是 C
A.sessionid是一种cookie
B.session的内容储存在服务端
C.session的过期时间有客户端决定
D.cookie只在客户端存储

3.下列关于跨域描述不正确的是 C
A.跨域可以通过服务端代理实现
B.跨域可以通过jsonp实现
C.所有的跨域方式必须设置crossDomain为true 才能携带cookie
D.跨域是前端后端分开部署的基础

4.下列提高性能方法错误的是 C
A.合并压缩Js文件,减少网络请求耗时
B.尽量减少Dom操作,提高js执行性能
C.在引用js文件的时候加入版本号,例如test.js?1000
D.减少Dom的复杂度

5.下列关于Vue的描述错误的是 D
A.支持服务端渲染
B.异步渲染
C.双向绑定
D.代码必须要编译后才能运行

二、填空题(每题4分,共40分)

1.function fun(){
temp = 0;
}
fun()
console.log(temp)
控制台的输出为____(0)

2.var obj1 = {
name:"张三",
say:function(){
console.log(this.name)
}
}
var obj2 = {
name:"李四",
say:obj1.say
}
obj2.say()
控制台输出为___(李四)

3.function a(){
this.name = "张三"
}
function b(){
this.name = "李四"
a.call(this)
console.log(this.name)
}
new b()
控制台的输出为____(张三)

4.在定义构造函数b,以原型继承的方式继承a,请在横线处补齐代码
function a(){
this.name = "张三"
}
a.prototype.say = function(){
console.log("我的名字"+this.name)
}
function b(){
this.age = 18;
}
b.prototype = ____(new a())

5.如果控制台输出 "hello",请在横线上补齐代码

function fun() {
return new Promise(function(resolve, reject){
setTimeout(function(){

_______(resolve("hello"))
})
})
}
fun().then(function(value){
console.log(value)
})

6.var obj = {
name:"张三"
}
function fun(o){
o.name = "李四"
}
fun(obj)
console.log(obj.name)
控制台的输出值为____(李四)

7.我们要在子组件里接收父组件传来的参数,请在横线处补齐代码
<child message="hello!"></child>
Vue.component('child', {
____(props): ['message'],
template: '<span>{{ message }}</span>'
})

8.现在需要在add函数理给input元素赋值,请在横线处补齐代码
<div id="app">
<input type="text" ref="input1"/>
<button @click="add">添加</button>
</div>

new Vue({
el: "#app",
methods:{
add:function(){
this.______($refs.input1).value ="22";
}
}
})

9.当add函数第一次执行时,控制台输出_____(张三)
<div id="app">
<span ref="test">{{ msg }}</span>
<button @click="add">添加</button>
</div>

new Vue({
el: "#app",
data:{
msg:"张三"
},
methods:{
add:function(){
this.msg = "李四"
console.log(this.$refs.test.innerHTML)
}
}
})

10.队列是先进___(先)出,栈是先进___(后)出

三、综合题(共40分)

1.简述用服务代理跨域的原理(5分)
答:
客户端发送请求时,不直接到服务器
再将请求发送到服务器
比如部署在a域名下前端代码,发送请求时,先发到本域名下的服务代理,服务代理再根据配置的规则,把请求转到到b域名下,
整个过程中,前端请求感觉不到b域名的存在

2.为什么Vue根实例data是一个对象,而组件中data必须是一个函数?(10分)
答:
根实例中只有一个data属性,共用该data。
组件中
因为如果data是一个对象,对象是引用类型,那复用的所有组件实例都会共享这些数据,就会导致修改一个组件实例上的数据,其他复用该组件的实例上对应的数据也会被修改。
如果data是一个函数,函数虽然也是引用类型,但是函数是有作用域的,函数内的变量不能被外部访问到,这样每个组件实例都会有个独立的拷贝同时又因为函数作用域的限制修改自己的数据时其他组件实例的数据是不会受到影响的

3.有一个字符串数组,var arr = ['11','22','aab','11',...],里面有重复元素,写一个去重函数(10分)

答:
function fun(list) {
var map = {}
var nList = []
for (var i = 0; i < list.length; i++) {
var value = list[i]
if (!map[value]) {
map[value] = 1
nList.push(value)
}
}
return nList
}

4.已知jQuery 有类似的链式调用用法(15分)
$("#test").show().hide()
扩展自定义方法的写法类似
$.fun.xxxx=function(value){
return this
}
请写出实现jQuery 这种链式调用的示意代码
答:
var $ = function (selector) {
var dom = selector
if (typeof selector === 'string') {
dom = document.querySelector(selector)
}
function _jq() {
this[0] = dom
}
_jq.prototype = $.fun
return new _jq()
}
$.fun = {}

前端高级软件工程师笔试题B卷

一、选择题(每题4分,共20分)

1.typeof 4.5 == _____ D
A.float B.string C.Infinity D.number

2.关于session 和 cookie 描述不正确的是 A
A.sessionStorage是seesion的升级版
B.sessionid存储在客户端
C.session 会比cookie 储存更多信息
D.session的安全性高于cookie

3.下列关于jsonp 描述不正确的是 C
A.jsonp跨域需要服务端配合
B.jsonp跨域需要设置crossDomain为true 才能携带cookie
C.jsonp 是ajax 请求的一种,类似 get post
D.jsonp具有良好的兼容性,不需要现代浏览器支持

4.下列提高性能方法错误的是 A
A.用Vue双向绑定 代替原生Dom操作
B.把前端代码部署到多台服务器上,进行负载均衡处理
C.减少向后端发送请求的数量
D.把常用的,比较固定的信息放在客户端缓存

5.下列关于React的描述错误的是 C
A.支持服务端渲染
B.异步渲染
C.双向绑定
D.代码必须要编译后才能运行

二、填空题(每题4分,共40分)

1.function fun() {
var temp = 0;
}
fun()
console.log(typeof temp)
控制台的输出为___(undefined)

2.var obj = {
name:"张三",
say:function(){
setTimeout(()=>{
console.log(this.name)
})
}
}
obj.say()
控制台的输出为___(张三)

3.var obj1 ={
name:"张三"
}
function fun(){
this.name = "李四";
console.log(this.name)
}
fun.apply(obj1)
控制台的输出为___(李四)

4.var obj = {
name: "张三"
}
obj.__proto__.name = "李四"
console.log(obj.name)
控制台的输出为___(张三)

5.如果控制台输出 "hello",请在横线上补齐代码

function fun() {
return new Promise(function(resolve, reject){
setTimeout(function(){

_______(reject("hello"))
})
})
}
fun().catch(function(value){
console.log(value)
})

6.console.log(0 === false)
控制台的输出值为____(false)

7.我们要在子组件里调用父组件的方法,请在横线处补齐代码
<button-counter v-on:increment="incrementTotal"></button-counter>
Vue.component('button-counter', {
template: '<button v-on:click="incrementHandler">{{ counter }}</button>',
methods: {
incrementHandler: function () {
this.____($emit)('increment')
}
}
})

8.现在需要在add函数理给input元素赋值,请在横线处补齐代码
<div id="app">
<input type="text" ____(ref)="input1"/>
<button @click="add">添加</button>
</div>

new Vue({
el: "#app",
methods:{
add:function(){
this.$refs.input1.value ="22";
}
}
})
9.当add函数第一次执行时,我们需要控制输出"李四",请在横线处补齐代码
<div id="app">
<span ref="test">{{msg}}</span>
<button @click="add">添加</button>
</div>

new Vue({
el: "#app",
data:{
msg:"张三"
},
methods:{
add:function(){
this.msg = "李四"
this.______($nextTick)(() => {
console.log(this.$refs.test.innerHTML)
})
}
}
})

10.描述算法性能的两个重要指标是____(空间)复杂度和____(时间)复杂度

三、综合题(共40分)

1.简述XSS攻击原理(5分)
答:
在博客里可以写文章,同时偷偷插入一段<script>代码
发布博客,有人查看博客内容
打开博客时,就会执行插入的js攻击代码
在攻击代码中,获取cookie(其中可能包含敏感信息),发送到攻击者的服务器,攻击者就得到了博客阅读者的信息

2.new Vue({
el: "#app",
data:{
msg:"张三"
},
methods:{
add:function(){
console.log(this.msg)
}
}
})
我们知道,this的指向只函数所在的对象,上面代码中 add函数所在的对象为methods,
但是在add里面通过this可以访问data对象的内容,为什么?

答:
Vue 在创建组件对象或执行 new Vue的时候 会把 data 和 methods扁平化放在一个对象上
例如上面会变成这种形式
{
children: [],
$el: div#app
...
msg: (...)
add: ƒ n(n)
}
3.已知斐波拉契数列1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144...,写代码计算第100项的值

答:
function fib(num) {
if (num === 0) return 0;
if (num === 1) return 1;
return fib(num - 2) + fib(num - 1);
}
4.有未知函数fun 可以实现下面功能
var list= [0,1];
fun(list)
调用数组的push方法,除了可以给数组增加相外,还可以在控制台打印出新增加的项,请写出实现函数fun的示意代码
list.push(5)
答:
function fun(list) {
var push = list.push;
list.push = function (value) {
push.call(this, value)
console.log(value)
}
}