答案仅个人理解,做笔记用,如有问题欢迎指正。
一、HTML、CSS、JS
1. CSS实现三角形
div {
  width: 0;
  height: 0;
  border: 50px solid transparent;
  border-bottom-color: #000;
} 2. 已知或者未知宽度的垂直水平居中
/** 1 **/
.parent {
  position: relative;
}
.child {
  position: absolute;
  top: 50%;
  left: 50%;
  width: 100px;
  height: 100px;
  margin: -50px 0 0 -50px;
}
/** 2 **/
.parent {
  position: relative;
}
.child {
  position: absolute;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
}
/** 3 **/
.parent {
  display: flex;
  justify-content: center;
  align-items: center;
}
/** 4 **/
.parent {
  display: table;
}
.child {
  display: table-cell;
  vertical-align: middle;
} 3. absolute,relative相对于什么定位
relative是相对定位,生成相对定位的元素,基于自身的位置进行偏移。
absolute是绝对定位 ,相对于除static之外的第一个父元素进行定位
4. 设置所有div内部段落标签为黄色背景
div > p {
  background-color: yellow;
} 5. 设置所有div之后段落标签为黄色背景
div + p {
  background-color: yellow;
} 6. 数据缓存
  cookie: 4k(单个), 可以设置过期时间, 存储在客户端, 始终在同源的http请求中携带, 会在浏览器和服务器间来回传递。
  localStorage: 5M, 存储持久数据, 浏览器关闭后数据不丢失除非主动删除数据。
  sessionStorage: 5M, 数据在当前浏览器窗口关闭后自动删除。
7. 原型与原型链
- 任何函数在声明时都会有一个属性,就是
prototype(原型),这个属性会初始化一个空对象(即原型对象),原型对象中会有一个constructor,会默认声明的函数。每个对象都有__proto__属性,指向了创建该对象的构造函数的原型。 - 当我们访问一个对象的属性时,如果这个对象内部不存在这个属性,那么就会去它的原型对象上查找,一直检索到Object内建对象。原型对象上的方法是被不同实例所共有的。如果找不到,返回
null。 
8. JS DOM操作
document.getElementById :通过id查找元素
document.getElementsByClassName:通过类名查找元素
document.documentElement:获取html
document.querySelector:通过选择器获取一个元素
// 创建元素
var para = document.createElement("p");
var node = document.createTextNode("这是一个新的段落。");
para.appendChild(node);
document.body.appendChild(para); 9. 给div加阴影
box-shadow: 10px -10px 5px #333; /*水平位移 垂直位移 模糊半径 阴影颜色*/
10. GET/POST请求
二、Vue
1. Vue常用指令以及自定义指令
v-html:输出解析后的html内容,而非代码文本 v-bind:绑定一个或多个DOM属性 v-model:表单控件的双向绑定 v-on:绑定事件监听 v-for:根据一组数据的选项列表进行循环渲染 v-if:条件渲染 v-show:根据条件切换元素的 display属性 v-once:只渲染元素和组件一次,之后视为静态内容 v-pre:跳过vue的编译,直接输出原始值
// 注册全局自定义指令 `v-focus`
Vue.directive('focus', {
  inserted: function (el) {
    el.focus()
  }
})
 // 注册局部指令
directives: {
  focus2: {
    inserted: function (el) {
      el.focus()
    }
  }
} 2. Vue中标签怎么绑定事件
使用v-on绑定事件***
<button v-on:click="say" id="example"></button> <input @keyup.enter="onEnter"> <my-component @click.native="onClick"></my-component>
new Vue({
  el: '#example',
  methods: {
    say: function () {
      alert('hi')
    }
  }
}) 3. Vue生命周期以及具体每个阶段做什么
共分为8个阶段,创建前/后,挂载前/后,更新前/后,销毁前/后。
- 在beforeCreate阶段,vue实例的挂在元素el和data都未初始化,为undefined。在created阶段,vue实例的数据对象data有了,el还没有。
 - 在beforeMount阶段,vue实例的el和data都已经初始化,但仍为虚拟的dom节点,data.message还未替换。在mounted阶段,vue实例挂载完成,data.message成功渲染。
 - 当data变化时,会触发beforeUpdate和updated方法。
 - 在执行destroy()之后,data改变不会再触发周期函数,说明vue实例解除了事件监听与dom绑定,但dom结构仍然存在。
 
4. 自己封装过组件吗
5. Vue组件通信
- 父组件与子组件传值
<!-- 父组件通过标签上面定义传值 --> <template> <Main :obj="data"></Main> </template> <script> // 引入子组件 import Main form "./main" export default { name: "parent", data() { return { data: "我要向子组件传递数据" } }, // 初始化组件 components: { Main } } </script> 
{{data}}
 </template>   - 子组件向父组件传递数据
```html
<!-- 子组件通过$emit方法传递参数 -->
<!-- 子组件 -->
<template>
  <!-- 定义一个子组件传值的方法 -->
  <input type="button" value="点击触发" @click="childClick">
</template>
<script>
export default {
  data() {
    return {
      childValue: '我是子组件的数据'
    }
  },
  methods: {
    childClick() {
      // childByValue是在父组件on监听的方法
      // 第二个参数this.childValue是需要传的值
      this.$emit('childByValue', this.childValue)
    }
  }
}
</script>
<!-- 父组件 -->
<template>
  <span>{{name}}</span>
  <!-- 引入子组件 定义一个on的方法监听子组件的状态-->
  <child v-on:childByValue="childByValue"></child>
</template>
<script>
// 引入子组件
import child from './child'
export default {
  components: {
    child
  },
  data() {
    return {
      name: ''
    }
  },
  methods: {
    childByValue: function(childValue) {
      // childValue就是子组件传过来的值
      this.name = childValue
    }
  }
}
</script>6. Vue还了解哪些
- vuex所有组件状态管理器
 - vue router路由
 - vue computed计算属性,建立与其他属性(data、store)的联系,适合对多个变量或者对象进行处理
 - vue ssr,(vue-server-renderer)主要就是把 Vue 的组件输出成一个完整 HTML
 
三、算法和数据库
1. 从100万个数中找出最大的100个数
2. 斐波那契数列
// 递归
function fibonacci(number) {
  if (number === 1 || number === 2) { return 1; }
  return fibonacci(number - 1) + fibonacci(number - 2)
}
// 非递归
function fibonacci(n) {
  var a = 0;
  var b = 1;
  var c = a + b;
  for (var i = 3; i < n; i++) {
    a = b;
    b = c;
    c = a + b;
  }
  return c;
} 3. 输入一个已经升序排序的数组和一个数字,在数组中查找两个数,和为输入的那个数字,时间复杂度为O(n)。
const twoSum = (numbers, target) => {
  const max = numbers.length
  let start = 0
  let end = max - 1
  while (start < end) {
    const sum = numbers[start] + numbers[end]
    if (sum === target) {
      return [start + 1, end + 1]
    }
    if (sum > target) {
      end--
      continue
    }
    if (sum < target) {
      start++
      continue
    }
  }
} 4. SQL语句查出每个学生总分,并按总分从高到低排序(表结构省略)
SELECT score FROM tb_score order ORDER BY score DESC
5. SQL语句查出每门课都大于80分的学生
SELECT name FROM tb_score order GROUP BY name HAVING MIN(score)>=80
四、其它
1. 做过哪些项目
2. SEO,图片优化
合理的title、description、keywords 内链和友链的更新 给图片标注"Alt"可以让搜索引擎更友好的收录 通过搜索引擎站长工具分析流量来源,指导下一步的SEO 禁止使用gif图片实现loading效果(降低CPU消耗,提升渲染性能)。 对于一些小图标,可以使用base64位编码,以减少网络请求。 图片预加载,将样式表放在顶部,将脚本放在底部。 如果图片展示区域小于图片的真实大小,则应根据业务需要先行进行图片压缩。

京公网安备 11010502036488号