1. 在长度为10的顺序表中插入一个节点,平均移动次数是(5次 —— n/2)
2. 在长度为13的顺序表中删除一个节点,平均移动次数是 (6次 —— (n-1)/2)
3. n个节点的环形拓扑结构有(n-1)条物理链
4. n个节点的星形拓扑结构有(n-1)条物理链
5. 主机网络地址为240.210.43.56,子网掩码为255.255.248.0,则子网地址是(240.210.40.0)
6. 远程window口令破解的工具是(hydra)
7. 两个div都形成了bfc,前一个div设margin-botton:20px; 后一个div设margin-top:16px; 则二者之间间隔为(20px)
8. OSI参考模型中,自上而下第一个提供端到端服务的层次是(传输层)、
9. Git与SVN冲突解决
- rebase时,不论发生什么,我们都处在no-branch中,都没有一个有效分支
- 使用git status查看项目,如果发现一个“.ditest ”文件,可以忽略它
- 如果想中止合并,使用“ git rebase--abort ”
- 手动修复完冲突的文件,还需要使用 “ git add ” 加入被修复的文件
- 然后使用 “ git rebse -- continue ” 继续更新
- 如果遇见提示 “ did you forget to call ‘ git add’ ? ” 而实际冲突已经处理,那么可以使用“ git rebase -- abort ” 来跳过它
- 重复上面的步骤,直到rebase完成
- 在任何时候都可以使用git rebase -- abort 来终止操作
10. 一个页面用原生js和vue框架写有什么区别
js首先要获取到DOM对象,然后对DOM对象进行值的修改等操作
Vue是首先把值和js对象就行绑定,然后修改js对象的值,Vue框架就会自动更新DOM值
11. 为了元素可拖动,需要把(draggable)设为true
12. jquery 用(fadeOut)方法让元素淡出
13. for in 主要用于枚举对象的(*非符号键值
14. CSS媒体查询用(device-width)定义输出设备的屏幕可见宽度
15. 刷新页面用(window.location.reload)
16. (navigator)包含了有关客户端浏览器的信息
17. 用户在Internet上传输加密文件,加密密钥和解密密钥相同的加密模型是(对称加密)
18. (IP)协议运行在网络层
19. 监听dom事件的指令是(v-on)
20. em是根据什么来判断的
如果其元素本身有font-size,就是根据其本身字体大小计数
如果本身没有font-size才会去找父级元素
21. SSL工作在哪一层
以网络为例,SSL工作在传输层和应用层之间,对网络连接加密
22. 有向图各个定点你的出度和入读是?
在有向图中,所有顶点的入度之和是所有顶点出度之和的一倍
23. 递归的调用和返回过程更接近与哪种数据结构?(栈)
24. 哪种存储方式不可以在运行中改变程序位置(动态运行时装入方式)
25. 满二叉树1000个节点从根节点到最深节点的最长路径的节点数是(10)
26. 哪种数据结构最适合用来检查一段html代码中所有开始标签是否都有结束标签 (栈)
27. 不支持冒泡的鼠标事件是 (mouseleave)
28. HTML行内元素和块级元素的区别
- 行内元素: 会在一条直线上排列(默认宽度只与内容相关),都是同一行的,水平方向排列
块级元素: 各占据一行(默认宽度是它本身父容器的100%),和父元素的宽度一致,与内容无关,垂直方向排列,块级元素从新行开始,结束接着一个断行- 块级元素: 可以包含行内元素和块级元素
行内元素: 不能包含块级元素,只能包含文本或其他行内元素- 行内元素和块级元素属性不同
主要是在盒模型属性上:行内元素设置
width无效,height无效,margin无效,padding无效
29. =,==,=== 三者的区别
1)“=” 赋值符
2)“==” 等值符号,在运算之前不管是字符串或是其他类型,都会转化为number类型。只要值一直即可,类型不需要一致
3)“===” 恒等/等同符号,类型数值均相同才可以
30. JS事件捕获和冒泡的区别
一、捕获:从最外层的祖先元素,向目标事件进行捕获,但默认此时不会触发事件
二、冒泡:事件从目标元素向他的祖先元素传递,依次触发祖先元素上的事件
31. position有几种属性值
- static 默认值
- relative 相对于原本位置的定位,不脱离文档流,不影响其他元素
- absolute 如果祖先设置了position,定位对象为祖先元素;如果没有设置祖先元素,则相对于body定位
- fixed 特殊版的absolute,总是相对于body定位
- sticky 在屏幕范围内该元素位置不受到定位影响,当将要移出偏移范围时,又会变成fixed
32. vue-router的原理
Vue Router的核心是,通过Vue.use注册插件,在插件的install方法中获取用户配置的router对象,当浏览器地址发生变化的时候,根据router对象匹配相应路由,获取组件,并将组件渲染到试图上
33. Web Worker
web worker 就是在web应用程序中使用的worker,这个worker独立于web主线程的,在后台运行的线程
web worker的优点是可以将工作交给独立的其他线程去做,这样就不会阻塞主线程
34. vue指令的一下缩写
- v-on 用于监听DOM事件
- v-bind 绑定属性之类的
- v-model 数据双向绑定
35. 双向绑定
把Model绑定到View,用JS更新Model时,View会自动更新,用户更新View时,Model的数据也会自动更新
以Vue为例,来看看Vue中的双向数据绑定流程是什么
- new Vue() 首先执行初始化,对data执行响应化处理,这个过程发生Observe中
- 同时对模板执行编译,找到其中动态绑定的数据,从data中获取并初始化试图,这个过程发生在Compile中
- 同时定义一个更新函数和Watcher,将来对应数据变化时Watcher会调用更新函数
- 由于data的某个key在一个视图中可能出现多次,所以每个key都需要一个管家Dep来管理多个Watcher
- 将来data中数据一旦发生变化,会首先找到对应的Dep,通知所有Watcher执行更新函数
流程图如下:
36. 内存泄漏如何查看
- windows的任务管理器,运行程序,然后在任务管理器里面查看“内存使用”和“虚拟内存大小”两项,当程序请求了它所需要的内存之后,如果虚拟内存持续增长的话,就说明这个程序有内存泄漏的问题,如果内存泄漏的数目非常小,需要比较长的时间才能看出来
- 最简单的方法是使用CompuWare的BoundChecker之类的工具检测,但是价格比较贵
37. 如何定位内存泄露
一、使用Chrome DevTools
Performance
打开准备分析的页面和DevTools的Performance面板,勾选Memory并开始录制,在模拟用户操作一段时间后停止录制,DevTools会将这段时间内的页面行为活动进行记录和分析
观察内存时间线,如果内存占用成阶梯状一直上升,则可能存在内存泄漏,按需选取时间线中的区域片段,检查对应时间段内的活动类型和时间占用,作为排查和定位的辅助办法
Memory
打开准备分析的页面和DevTools面板,按需生成快照,多次生成进行对比,排查泄漏对象,根据路径检查代码
二、Nodejs中的内存泄漏定位
启动Nodejs时带上 -- inspect 参数,以便利用Chrome DevTools 工具生成Memory数据
38. React 生命周期
- 在React16新的生命周期弃用了componentWillMount,componentWillReceiveProps,componentWillUpdate
2. 新增了getDerivedStateFromProps,getSnopshotBeforeUpdate来替代弃用的三个钩子函数
39. 长链接,短链接
传输层常用的协议为TCP和UDP
TCP协议用于一般的请求响应
UDP用于即时通讯,如视频,音频,通话信号的传输
40. setTimeout / setInterval 定时不准确的原因及解决办法
原因:
- 浏览器中所有的JS都在单线程上执行,所以异步事件仅在线程空闲时才会被调度运行
- 为了控制要执行的代码,JS配置了一个任务队列,这些异步事件任务会按照将它们添加到队列的顺序执行
- setTimeout() 的第二个参数(延时时间),只告诉JS再过多长时间把当前任务添加到队列中,如果队列为空,则立即执行;如果不为空,就要等前面的代码执行完毕以后再执行
解决办法:
- 动态计算时差(仅针对循环定时,只起修正作用)
- 使用Web Worker
41. 反转链表
leetcode 206
var reverseList = function (head) { let prev = null while (head) { let next = head.next head.next = prev prev = head head = next } return prev };
42. this指向问题
//testFunc为普通函数 var testFunc = function () { console.log(this) } //testFunc为箭头函数 var testFunc = () => { console.log(this) } var objA = { testFunc: testFunc } var objB = {} var testFuncBind = testFunc.bind(objA) var ttfun = objA.testFunc //testFunc为箭头函数和普通函数的清情况下,以下代码分别输出什么? testFunc() objA.testFunc() testFuncBind() testFunc.apply(objA) testFuncBind.apply(objB) ttFun() //简要解释一下你的答案箭头函数:window window window window window window
普通函数:window testFunc testFunc testFunc testFunc window
43. 以下代码得输出结果是什么?请作出简要解释
setTimeout(function () { const p = new Promise(function (r, j) { console.log(1) r() }) p.then(() => { console.log(2) }) console.log(3) }, 1000) const np = new Promise((r, j) => { console.log(5) r() }).then(() => { setTimeout(function () { console.log(6) }, 0) return 7 }).then(n => { console.log(n) }) console.log(4)5 4 7 6 1 3 2
44. gird 和 flex 得区别
1)flex布局是一维布局,适合做局部布局,比如导航栏组件
2)grid是二维布局系统,通常用于整个页面的规划
45. 防抖和节流的区别,及各自的应用场景
一、防抖
防抖策略:当事件被触发后,延迟n秒后再执行回调函数,如果在n秒内事件再次触发,则重新计时
应用场景:用户在输入框连续输入一串字符时,可以通过防抖策略,只有在输入完成后,才执行查询的请求,这样可以有效减少请求次数,节约请求资源
二、节流
节流策略:可以减少一段事件内事件的触发频率
应用场景:1. 鼠标不断触发某事件时,如点击,只在单位时间内触发一次
2. 懒加载时要监听计算滚动条的位置,但不必要每次滑动都触发,可以降低计算频率,而不必要浪费CPU资源
46. 页面下滑到底部触发加载更多时防抖还是节流?(防抖)
47. 在输入框输入内容,失焦后请求接口对比是否输入正确,用防抖还是节流?(防抖)
48. 为什么要使用事件委托
每绑定一个事件处理器都是有代价的:
- 要么增加页面负担(更多的JS代码)
- 要么增加了运行期的执行时间(因为JS代码多)
- 绑定事件时候访问或修改dom越多,越耗时
- 浏览器跟踪每个事件处理器也需要耗更多内存
因此,可以使用事件委托,事件委托基于,事件会逐层冒泡至其父元素实现的,只需要给外层元素绑定一个事件,就可以让其子元素上的所有事件触发
49. Promise 的状态
- 初始状态 Pending
- 成功状态 Resolved / Fulfilled
- 失败状态 Rejected
50. 看代码说输出顺序
new Promise((resolve, reject) => { console.log(1) resolve(3) console.log(2) }).then(res => { console.log(res) }) console.log(4)1 2 4 3