自我介绍下: 某 985 硕士, 程序媛, 接触前端一年时间. 从八月份开始校招面试笔试, 前前后后大厂小厂也都面了挺多, 不过大厂基本都被我挂完了, 哭晕我, 还是太菜啊. 面过的公司: ThoughtWorks, 大疆, 阿里, 网易, 百度, 电信 it 研发中心, 深信服, 华为, 小米, 搜狗. 拿了 offer 的公司目前是: 大疆, 电信, 深信服(已拒), 前辈们也可以留下选择哪个公司的建议, 感激不尽. 下面总结了这段时间的面筋和挂筋~
大疆
大疆是我校招面的第一家公司, 从六月份投简历, 然后笔试面试到拿到录用意向书, 前后用了近四个月, 来之不易啊.
一面二面
因为时间太久, 就直接放在一起了, 问的都是基础吧, 讲真, 大疆前端面试不难, 都是很基础的, 就是时间长, 等的捉急. 一面是电话面, 两个面试官轮流问; 二面是视频面, 是三个面试官一起微信视频, 视频面还是蛮累的, 上下左右都得顾上; 终面是去的现场面, 就跟一个面试官聊了十几分钟人生.
1. meta 标签
- function getXHR(){
- var xhr = null;
- if(Windows.XMLHttpRequest) {// 兼容 IE7+, Firefox, Chrome, Opera, Safari
- xhr = new XMLHttpRequest();
- } else if (Windows.ActiveXObject) {
- try {
- xhr = new ActiveXObject("Msxml2.XMLHTTP");// 即 MSXML3
- } catch (e) {
- try {
- xhr = new ActiveXObject("Microsoft.XMLHTTP");// // 兼容 IE6, IE5, 很老的 API, 虽然浏览器支持, 功能可能不完善, 故不建议使用
- } catch (e) {
- alert("您的浏览器暂不支持 Ajax!");
- }
- }
- }
- return xhr;
- }
- var xhr = getXHR();
- xhr.open('GET', url/file,true); // 设置请求方式, url, 以及是否异步
- xhr.onreadystatechange = function() { // 设置回调监听函数
- if(xhr.readyState==4){
- if(xhr.status==200){
- var data=xhr.responseText;
- console.log(data);
- }
- };
- xhr.onerror = function() {
- console.log("Oh, error");
- };
- xhr.send(); // 发送请求
- shouldComponentUpdate(被调用时 this.state 没有更新; 如果返回了 false, 生命周期被中断, 虽然不调用之后的函数了, 但是 state 仍然会被更新)
- componentWillUpdate(被调用时 this.state 没有更新)
- render(被调用时 this.state 得到更新)
- componentDidUpdate
- .container{
- width: 600px;
- height: 600px;
- background: #eee;
- display: table-cell;
- text-align: center;
- vertical-align: middle;
- }
- .center{
- background: blue;
- }
- .container{
- width: 100%;
- height: 400px;
- background: #eee;
- position: relative;
- }
- .center{
- background: blue;
- position:absolute;
- top: 50%;
- left: 50%;
- transform: translate(-50%, -50%);
- }
- .container{
- width: 100%;
- height: 400px;
- background: #eee;
- display: flex;
- justify-content: center;
- align-items: center;
- }
- .center{
- width: 100px;
- height: 100px;
- background: blue;
- text-align: center;
- }
- for(let i = 1 ; i <6; i++){
- setTimeout(() => {
- conosle.log(i)
- }, 1000)
- }
- function transform(number){
- var num = number.toString()
- var numArr = num.split('.')
- var [num, dotNum] = numArr
- var operateNum = num.split('').reverse()
- var result = [], len = operateNum.length
- for(var i = 0; i<len; i++){
- result.push(operateNum[i])
- if(((i+1) % 3 === 0) && (i !== len-1)){
- result.push(',')
- }
- }
- if(dotNum){
- result.reverse().push('.', ...dotNum)
- return result.join('')
- }else{
- return result.reverse().join('')
- }
- }
- function indexOf(str, val){
- var strLen = str.length, valLen = val.length
- for(var i = 0; i < strLen; i++){
- var matchLen = i + valLen
- var matchStr = str.slice(i, matchLen)
- if(matchLen> strLen){
- return -1
- }
- if(matchStr === val){
- return i
- }
- }
- return -1
- }
- function A () {
- this.name = 'a';
- }
- A.prototype.getName = function () {
- return this.name;
- }
- function B () {
- }
- // B 如何继承 A
- Function.prototype.call2 = function (context) {
- var context = Object(context) || Windows
- context.fn = this
- var args = []
- for (var i = 1; i <arguments.length; i++) {
- args.push('arguments[' + i +']')
- }
- var res = eval('context.fn(' + args + ')')
- delete context.fn
- return res
- }
- createDocumentFragment() // 创建一个 DOM 片段
- createElement() // 创建一个具体的元素
- createTextNode() // 创建一个文本节点
- getElementsByTagName() // 通过标签名称
- getElementsByClassName() // 通过标签名称
- getElementsByName() // 通过元素的 Name 属性的值
- getElementById() // 通过元素 Id, 唯一性
- function debounce(fn, delay) {
- var timer
- return function () {
- var that = this
- var args = arguments
- clearTimeout(timer)
- timer = setTimeout(function () {
- fn.apply(that, args)
- }, delay)
- }
- }
- function throttle(fn, interval) {
- var previousTime = +new Date()
- return function () {
- var that = this
- var args = arguments
- var now = +new Date()
- if (now - previousTime>= interval) {
- previousTime = now
- fn.apply(that, args)
- }
- }
- }
- function throttle(fn, interval) {
- var timer
- return function (){
- var that = this
- var args = arguments
- if(!timer){
- timer = setTimeout(function () {
- fn.apply(that, args)
- timer = null
- }, interval)
- }
- }
- }
- var throttle = function(func,delay){
- var timer = null;
- var startTime = Date.now();
- return function(){
- var curTime = Date.now();
- var remaining = delay-(curTime-startTime);
- var context = this;
- var args = arguments;
- clearTimeout(timer);
- if(remaining<=0){
- func.apply(context,args);
- startTime = Date.now();
- }else{
- timer = setTimeout(func,remaining);
- }
- }
- }
- function isObj(obj) {
- // 判断是否为对象或者函数, 但不是 null
- return (typeof obj === 'object' || typeof obj === 'function') && obj !== null
- }
- function deepCopy(obj) {
- let newObj = Array.isArray(obj) ? [] : {}
- for(let key in obj) {
- newObj[key] = isObj(obj[key]) ? deepCopy(obj[key]) : obj[key]
- }
- return newObj
- }
- Git checkout test
- Git rebase dev
来源: https://juejin.im/post/5bb470295188255c5e66f88f