实习面试题

一、算法部分

1、基本排序的方式
冒泡、快排、桶排、堆排序、归并排序、插入排序。
2、二分搜索等
3、二叉树遍历相关,例如前序遍历中序遍历后序遍历等,深度优先搜索和广度优先最好掌握。还有二叉树的反转
 

二、计算机网络部分
1.最重要的就是http协议

http报文解构都包含什么(大致就是那个三部分,请求实体、请求头、请求行这些)

http协议常用的状态码(https://blog.csdn.net/xiaozhuxmen/article/details/51934706)

http头部关于缓存的字段

http和https的区别

https是http+SSL/TSL,是http的安全版,包含对称加密,非对称加密,CA认证,http是超文本传输协议,信息明文传输,有窃听、篡改、冒充风险,https密文传输

http端口号80,https端口号443

http建立连接快,https建立连接慢一点,因为它还要和ssl握手

http1.0 1.1 2 大致的区别

http1.0每个连接只允许一次请求,耗时

http1.1每次连接可以多个请求,但是这些请求有顺序,要是前面的有一个传输特别慢就会导致队头阻塞

http2复用tcp连接,请求无顺序,不用按顺序一一回应,避免了队头阻塞,头信息压缩

缓存字段和200、404、304之类非常常用的状态码一定要记住。
2.tcp的三次握手和四次挥手。
3.udp和tcp的比较等等
 

三、 html和css基础部分。
1.盒模型概念
网页布局就像摆放一个个盒子,盒子由margin, padding, border, content组成
 
2.position定位属性和相关的关系,例如relative占用文档流,而absolute和fixed却不占用,还有relative和absolute结合使用会有变化,一定要搞懂。
static,默认
relative,相对自身在文档流中的位置定位,不脱离文档流
absolute,相对最近的有定位的父元素进行定位,脱离文档流,结合top, left使用
fixed固定定位,相对浏览器窗口定位,结合top, left使用,脱离文档流
 
3.display相关属性,常用的block、inline、等等。
flex响应式布局,css3,justify-content设置水平方向排列,align-items设置垂直方向排列
inline-block转为行内块级元素,使之可以设置宽高
block转为块级元素
inline转为行内元素
none不显示,不保留位置
4.IFC和BFC问题。
BFC块级格式化上下文, 开启了BFC的元素不受外界元素干扰,可用来解决垂直塌陷问题,开启方法:
1、float的值不是none。
2、position的值不是static或者relative。
3、display的值是inline-block、table-cell、flex、table-caption或者inline-flex
4、overflow的值不是visible
5.双飞翼布局。
6.垂直居中、水平居中的多种方式和方法,这俩个都有很多的方法,尽量每个都记下来4个方法以上,使用line-height的时候需要知道高度等等。而且还有要注意字体的居中和块级元素等居中是不一样的。
水平居中,行内元素text-aljgn:center, 块级元素margin:0 auto;
垂直居中,设置line-height和height一样,绝对定位,设置left, top 为50%,margin-left:-元素本身宽度一半,margin-top:-元素本身高度一半
css3,display:flex; justify-content:
7.圣杯布局
8.rem、em的使用。
rem相对网页根元素字体大小,一般为html, em相对父元素字体大小;
9.less等预处理语言。
像写编程语言一样写css, 比如你css里重复用到某个相同属性,那你可以用less写成一个变量,到时候如果要改只需改那个变量值即可,便于维护
10.媒体查询。
11.vh和vw,当然这个考的实在太少。
12.h5的语义化部分。当时就有一个问题问我实现删除线怎么办。当然有html基础标签和css样式了。他就问哪种更好。当时楼主一脸蒙蔽的说html的方式更好。最后被问原因的时候说了一大堆不重要的,最后面试官告诉我是在语义化的方面考虑的。。。
13.h5 的web worker 还有websocket。这些不需要你真正使用过,但是要明白他们在什么场景下使用。就可以了。自己拿菜鸟教程上代码的实验一下就可以了。websocket内部还有一些关于协议的部分。要自己弄懂。
14.h5的语义化标签都有什么,大致看一下,记住一部分。还有新加的例如video这些东西。
header, nav, session, article, footer, audio音频, video视频
 
15.css3的都很重要,包括transform、transition、animate这些都好好看一下。
16.css选择器的优先级,也就是class id 元素选择器这些的优先级计算。
!important>内联1000>id100>class10(伪类)>标签1(伪元素)
17.css样式表引用的优先级部分。例如link引用或者行内都设置了字体颜色,问字体此时显示什么字体。
内联样式表>内部样式表>外部样式表
18.清除浮动。
19.canves 某些特别的公司部门可能需要,但是我至今没有被问过。
20.css实现响应式的方式。
设置字体用相对大小
除此之外暂时也想不到其他的了。如果再有想到会再次添加。
 
 

四、js部分
这个是重中之重了,如果你js掌握的非常非常好,面试官的问题你都回答上来了,那么html、css部分问题没答上也没有什么。毕竟js才是前端的重点。
1.js的作用域作用域链。
js没有块级作用域,有函数作用域,函数执行时js引擎会预解析函数内部的变量,将它们提升到所在作用域的顶部,但是赋值操作还在原来位置,当用到某个变量时,js会首先在函数内部查找这个变量,如果没有找到,就去外层找,逐级向上找,直到window, 这就是作用域链,是单向的,也就是外层作用域是没办法访问内层作用域的变量的。
 
2.js的原型原型链,来一张巨经典的图片。能看懂或者你给面试官讲明白就ok了。还有instanceOf那些判断。
对象包含实例和原型,实例包含实例属性和实例方法,原型包含原型属性和原型方法,当进行访问对象操作时,首先会访问对象实例,如果对象实例里没找到,就会到对象原型里找,如果对象原型也没找到,就会到创建这个对象的对象的原型库里找,逐级向上,这就是原型链。
 
3.js的dom元素操作插入删除等等。
节点增删改查, createElement(), appendChild(), removeChild()
4.js的垃圾回收机制。(问的比较少)。
标记清除,引用计数
5.js中String或者Array或者Math内部常用的方法。这些在菜鸟教程上都可以看的。
 
6.ajax请求详细怎么实现,和其中的响应状态。
7.js的基础类型和引用类型
基础类型undefined, null, number, boolean, string, symbol(es6), 引用类型object
8.事件委托、事件冒泡、事件捕获。
事件委托就是在要监听的元素的父级以上元素设置事件监听,比如要监听li的点击事件,那么可以在ul上监听,这样可以提升性能
事件冒泡就是事件由比较具体的元素向非具体元素逐级向上传播,直到document
事件捕获和事件冒泡相反,由非具体元素向具体元素传播
9.addEventlistener和正常的onclick=()=> 的区别
 
10.js中new和object.creat区别
11.除了js中DOM的基础方法还有BOM中的方法。比如通过js直接取出相应的url的端口号,或者是协议名,或者url整体。
12.浏览器输入url之后最后网页渲染出来经过了什么( https://blog.csdn.net/xiaozhuxmen/article/details/52014901
DNS解析,将域名解析成IP地址
TCP三次握手建立连接(为何要三次)
浏览器向服务器发送请求
服务器回应请求
TCP四次挥手断开连接(为何要四次)
浏览器构建生成渲染树,渲染页面
13.js跨域实现。我大概回答的有webpack和nginx等代理跨域。CORS和jsonp等。一般这些就可以了
14.浏览器的同源策略
浏览器基于安全考虑,仅限同源页面之间可以进行数据交互。所谓同源,即域名,端口,协议相同
15.浏览器的回流和重绘,就是reflow那些东西。
回流指元素大小,位置发生了改变,需要重新解析html构建dom树,解析css生成css规则树,二者合并成render树,浏览器重新渲染页面
重绘指元素颜色等不影响结构的外观样式发生了改变,无需重新构建dom树,回流一定导致重绘,重绘不一定导致回流
16.call、bind、apply区别。
改变this指向,call传递参数,apply传递数组
17.js实现继承怎么实现。原理是? 这个其实和上面的原型链原型是一起的。
原型链继承
借助构造函数继承
组合继承(原型链继承加构造函数继承)
寄生式继承
18.请求get和post的区别
get数据量小,post数据量大,get直接通过url传递参数,不安全
19.js方法参数argument
伪数组,具有length属性,也可像真数组一样遍历,但是无法使用数组的一些方法,实质是对象,可通过Array.prototype.slice.call(arguments)转为真数组
20.深拷贝和浅拷贝,还可以引入序列化。还要明白序列化的缺点。
对引用类型而言,直接拷贝的话拷贝的是引用地址,二者指向同一个堆内存,对其中一个的操作会影响另一个,即浅拷贝
深拷贝即对原来对象内存里的东西也拷贝出来,这样二者互不影响
以下都是es6
21.promise,最好自己声明一个构造函数尝试去实现,这样面试官会觉得你学的很认真。如果实在自己写不出来上网查一下promise的实现原理或者源码应该就有。
解决异步的方案
22.闭包
闭包就是可以访问其他函数的变量的函数,保留了闭包引用变量的命,可用来封装私有变量
23.let和const,最好全面一点解释,包括可以说一下变量提升引入一下var,和这些在什么场景下去使用。
定义变量的新方式,主要可以解决es5中var的一些缺陷,var没有块级作用域,有变量提升,变量可以重复定义赋值,会造成开发中一些问题,let具有块级作用域,不存在变量提升,const只能被定义一次,用来定义常量
24.generator
25.es6加上symbol的基础数据类型
26.set类型可以实现数组去重等。
27.箭头函数 重点,很多时候都会问 包括里面的简便写法和内部的this指针指向等等
28.解构赋值
29.es6新增加的正则符号。
30.或者直接问你es6有什么新加的东西,说得越多越好
es6我们可以去 http://wiki.jikexueyuan.com/project/es6/这里面去学习。当然想要更深了解的话就需要看一下阮一峰大大的那本书了。但是这个我觉得面向面试足够了。
以下就是亮点部分了,面试总要有一些亮点告诉面试官你基础很好。因为其实和面试官拽技术没必要的,人家真正搞开发的,真的拽技术能甩你8条大马路(当然真正的大大大佬请无视我这句话),而且我是面向咱们很多还是在蒙圈的同学们写的。都是很基础的东西,毕竟不能说所有人都瞄准bat进发对吧?
1.js单线程和js具体怎么实现异步的。大概的技术名词有事件队列、执行栈、宏任务、微任务。具体的各位老铁们百度吧。。
2.webworke做分线程
3.vue-router原理实现。多看源码之类的
4.nginx负载均衡。redis共享数据等等等。
5.asm.js(这个我想很多人没听过都。。这个是我自己看的一个技术。比较有意思的。因为面试官总会问你最近在看什么比较新的技术这样的问题,专门准备的)。
 

还有一些其他的问题。
1.跨域。
2.网络安全,大多就是csrf和xss看明白原理和解决方式就可以了。
3.数据结构的栈、队列、链表、等等这些基础的数据结构要明白是什么。
5.数据库相关操作语句(这个问得比较少,但是基础的数据库语句还是要学的,还是菜鸟教程。看一下就行了)
6.linex基础指令,一般很少问。就算问也是问你知道什么指令
7.bootstrap实现栅格的原理
8.webpack相关配置。例如跨域之类的

猜你喜欢

转载自www.cnblogs.com/wenzizaigaoge/p/10583198.html