[HTML&CSS]
⭐CSS图片自适应
1. max-height。
2. 背景图background-size:contain。
⭐布局
浮动,定位,分栏布局,百分比布局,flex弹性布局,响应式布局(rem,vw,@media)。
⭐浏览器的兼容
1. 默认的margin、padding不同,可以统一清除。
2. 块标签浮动后横margin显示不正确,可以把块标签变成行内标签。
3. 设置较小高度标签IE67里不受控制,可以用overflow:hidden或者line-height。
https://blog.csdn.net/weixin_42103706/article/details/88221751
⭐移动端的兼容
1. IOS移动端click事件300ms延迟,可以使用fastclick。
2. 一些情况对非可点击元素span监听click事件IOS不会触发,CSS增加cursor:pointer。
3. H5底部输入框被键盘挡住,让DOM元素出现在可见视图的顶部或者底部,.scrollIntoView( )。
4. 禁止IOS弹出各种操作窗口,-webkit-touch-callout:none。
5. 在IOS和Android,audio和video元素无法自动播放,可以设置触屏即播`.one('touchstart', function(){audio.play()})`。
6. CSS动画页面闪白动画卡顿,尽可能使用合成属性transform和opacity来设计CSS3动画,不适用position的left和top来定位,再就是开启硬件加速transform:translate3d(0, 0, 0)。
https://www.cnblogs.com/wangpenghui522/p/5398137.html
[JS]
⭐JS基本数据类型
Number,String,Boolean,Undefined,Null。
⭐正则匹配
/^d{17}[d|x]|d{15}$/身份证。
https://www.kancloud.cn/chechbox/fe/289368
⭐原型链
new一个实例,这个实例的原型就是这个构造函数。每个构造函数都有一个prototype属性显示原型,每个引用类型都有一个_proto_属性隐式原型,每个引用类型_proto_指向它构造函数的prototype。
https://blog.csdn.net/Bessicxie/article/details/93845684
⭐继承
1. 原型链继承。
2. 构造继承,使用父类的构造函数来增强子类实例。
3. 实例继承。
4. 拷贝继承。
5. 组合继承,属性通过父类的构造函数继承,函数通过父类的实例作为子类的原型继承。
6. 寄生组合继承,通过寄生方式砍掉父类的实例属性。
https://blog.csdn.net/weixin_43160780/article/details/86601225
⭐this指向
1. 没有明确的附属对象的函数中指向全局对象window。
2. 函数对象中指向函数所附属的对象。
3. 构造函数中指向构造函数实例。
4. 匿名函数指向全局对象。
5. 定时器中指向全局对象。
6. eval中指向调用上下文中的this。
7. call,apply,bind中指向参数。
⭐super和this
super指向当前对象的原型对象,this指向函数所在的当前对象。
https://www.cnblogs.com/pwindy/p/12666846.html
⭐call( )、apply( )、bind( )
改变一个函数里的this指向。
Fn.call(指向函数, '参数1', '参数2')
Fn.apply(指向函数, ['参数1','参数2'])
Fn.bind(指向函数, '参数1', '参数2')( )
https://www.runoob.com/w3cnote/js-call-apply-bind.html
⭐toFixed( ),Number四舍五入指定小数位数。
⭐ for...in和for...of
for...of不支持普通对象。
https://www.jianshu.com/p/c43f418d6bf0
⭐forEach和map
map会返回新数组,forEach不会。
⭐ES6特性
类,模块化,箭头函数,函数默认参数,模板字符串,解构赋值,延展操作符,对象属性简写,Promise,let与const。
https://www.jianshu.com/p/e2ba90e89754
⭐解构赋值浅拷贝,解构赋值本身是浅拷贝,但是拷贝基本类型得到是深的,拷贝引用类型是浅的。
⭐ES6新增数组方法
Array.from()把类数组对象转化为数组。Array.of()把一组值转化为数组。find(),findIndex()。fill()填充。entries()键值对,keys(),values()。includes()。flat()拉平数组,flatMap()拉平一层。
https://blog.csdn.net/weixin_33912246/article/details/88022414
⭐ES10了解
新增了Array的flat()和flatMap(),flat()可以给数组降维和去除数组的空项。
⭐什么时候用同步
一步一步操作,等待请求返回的数据再执行下一步。
⭐异步的解决方案
1. 回调函数。
2. 事件监听。on、bind、listen、addEventListener、observe。
3. 工具方案,如promise、async+await、node.js中nextTick、ES6的gengerator函数。
https://blog.csdn.net/qq_32442973/article/details/89322763
⭐promise,用来处理异步,.then和.catch。promise有三种状态,pending待定、fulfilled成功、rejected失败。
https://www.jianshu.com/p/1b63a13c2701
⭐promise.all和promise.race
promise.all打包多个promise返回一个结果数组。promise.race哪个结果快就返回哪个。
https://www.jianshu.com/p/7e60fc1be1b2
⭐ async、await
ES7出现,为了解决promise满屏then。async声明的函数的返回本质上是一个promise,await是在等待一个promise的异步返回。
https://segmentfault.com/a/1190000016788484
⭐AMD、CMD、CommonJS、import/export
前三个是ES5模块化编程方案,import/export是ES6的。
RequireJS是一个AMD框架,依赖前置异步定义。
CMD是在SeaJS中产出。
CommonJS通过module.exports定义,前端不支持,node.js后端使用。
import/export对模块导入导出。
https://blog.csdn.net/tangxiujiang/article/details/81104174
[JQ]
⭐$('#id')等于document.getElementById('id')。
[NodeJS]
[Vue]
⭐created和mounted的区别
都可以获取data和methods,只有mounted可以获取DOM节点。
https://segmentfault.com/a/1190000020058583?utm_source=tag-newest
⭐computed和watch的区别
computed有缓存,能控制多个。watch只能监听一个。
https://cn.vuejs.org/v2/guide/computed.html
⭐插槽slot
在子组件`<children></children>`里加`<slot></slot>`,在父组件调用`<children>这是后备内容</children>`时会将标签里的内容插入。v-slot。
https://cn.vuejs.org/v2/guide/components-slots.html
⭐父子组件传值。或者问自定义组件点击事件
1. 父给子用props,子给父用this.$emit。
2. 用vuex。
https://www.cnblogs.com/phermis/p/10710894.html
⭐路由守卫
全局三个router.beforeEach,router.brforeResolve,router.afterEach。路由独享守卫beforeEnter,组件内守卫三个beforeRouteEnter。
https://router.vuejs.org/zh/guide/advanced/navigation-guards.html
https://blog.csdn.net/weixin_41399785/article/details/79382243
⭐vue-router动态路由传参
path:'/user/:id',this.$route.params接收。
https://router.vuejs.org/zh/guide/essentials/passing-props.html#%E5%B8%83%E5%B0%94%E6%A8%A1%E5%BC%8F
⭐vue路由传参
1. this.$router.push里path:'/user/:id'。获取this.$route.params.id。
2. this.$router.push里params:{}。获取this.$route.params.id。
3. this.$router.push里query:{}。获取this.$route.query.id。
https://www.jianshu.com/p/d276dcde6656
⭐vue修饰符
1. 事件修饰符。.stop阻止冒泡;.prevent提交事件不重载页面;.capture内部事件由此进入;.self;.once;.passive滚动。
2. 按键修饰符。.enter;.tab;.delete等。
3. 系统修饰符。.ctrl等。
4. 鼠标修饰符。.left等。
https://cn.vuejs.org/v2/guide/events.html
⭐vue.use原理
vue.use通过initUse方法初始化,接受一个plugin,检测installedPlugins数组中是否有组件,调用toArray,把当前vue对象this插入转化后得数组前,接下来要么plugin中有install要么本身就是一个函数,最后将注册后的组件放入installedPlugins避免重复注册。
http://baijiahao.baidu.com/s?id=1666022212320580751&wfr=spider&for=pc
⭐hash和history
vue路由配置中`mode:"hash";`,hash带#,history不带#,history怕刷新。
https://blog.csdn.net/sayoko06/article/details/85321802
[React]
⭐react生命周期
Mounting里有constructor,componentDidMount。
Updating里有shouldComponentUpdate,getSnapshotBeforeUpdate,componentDidUpdate。
两者共有getDerivedStateFromProps(New props,setState()和forceUpdate()可以触发),render,React updates DOM and refs。
Unmounting里有componentWillUnmount。
https://projects.wojtekmaj.pl/react-lifecycle-methods-diagram/
⭐render
一个组件类必须要实现一个render方法,这个render方法必须要返回一个被包裹的JSX元素。
https://www.jianshu.com/p/00226a584eff
⭐Hooks
Hooks是一个特殊函数,钩入React特性。state hook获取state和更新state方法。effect hook可以理解成componentDidMount/componentDidUpdate。
https://segmentfault.com/a/1190000019513907
[App]
⭐wx:request封装
request.js处理一些基本类。比如统一异常处理,GET、POST、DELETE、PUT请求,请求拦截响应拦截等。
api.js处理接口处理。
https://www.cnblogs.com/shimily/articles/10717222.html
⭐小程序实现图片上传:wx.chooseImage。
[Others]
⭐MVVM和MVC的区别
MVVM最大的区别就是实现了view和model的自动同步。
⭐ajax和axios的区别
ajax指XMLHTTPRequest,会有回调地狱。axios是Promise实现对XHR的封装。fetch与XHR无关是原生js。
https://www.jianshu.com/p/8bc48f8fde75
⭐axios封装
request文件夹http.js和api.js。http.js封装请求超时、post请求头、请求和响应拦截、get、post等。api.js统一管理接口。
https://www.cnblogs.com/chaoyuehedy/p/9931146.html
⭐跨域方法
1. JSONP。通过动态创建script再通过script.src请求一个带参数的网址,在vue里this.$http.jsonp。
2. postMessage(data.origin)。
3. CORS。后端配置,前端用了谷歌插件。
4. nginx反向接口代理。域名相同端口不同的跳板机,配置里有server对象,里面有listen,location。
5. Nodejs中间件代理跨域。引入http-proxy-middleware和express。
6. WebSocket协议跨域。
https://segmentfault.com/a/1190000011145364
⭐nginx反向接口代理
1 var xhr = new XMLHttpRequest(); 2 xhr.withCredentials = true; 3 xhr.open('get','网址',true); 4 xhr.send();
⭐webpack和gulp
gulp通过对task对整个开发过程进行构建。webpack是前端资源模块化管理和打包工具,通过loader转换,CSS、图片、JSON都可以看作模块。
⭐gulp拷贝
gulp.task('copy',function())
https://www.cnblogs.com/EasonJim/p/6207688.html
⭐ESLint规则
ESLint是在ECMAScript/JavaScript代码中识别和报告模式匹配的工具。
1 npm i -g eslint //安装 2 eslint --init //第一次使用新建一个配置文件 3 eslint test1.js test2.js //检测js文件 4 eslint test.js --fix //自动修复一些规则
off或0关闭规则,warn或1警告级别,error或2错误级别。
https://blog.csdn.net/bbsyi/article/details/88816637
⭐项目开发流程
1. 市场调研、技术可行性分析(报告)。
2. 需求分析说明书(产品部门)。
3. 原型设计。
4. UI设计(出效果图)。
5. 架构设计(技术决策、技术选型)。
6. 接口设计(前端和后端相关负责人,输出接口文档)。
7. 搭建框架代码。
8. 项目研发(前后端并行编码)。
9. 对接联调(自测)。
10. 提测(把代码交付给测试团队)。
11. BUG修改再次提测(迭代)。
12. 上线(试运营、灰度测试)。
⭐自己总结的一点小经验
1. 太原薪资只有7k为什么来我们这里要这么高?注意突出自我,这几年的工作让我积攒了对项目的经验,再说明太原经济相对落后。
2. 介绍自己的项目时,解决什么问题,项目的用户,使用了什么技能,难点亮点,你的角色。
3. 对和面试官对线的时候,要学会掌握主动权,把不确定的问题引导到自己熟悉的问题上,引导到自己的项目上。
4. 会的问题不要太冲动,慢慢回答,不要打断面试官的话等说完再回答,不会的问题虚心请教。
5. 面试完可以问一下你觉得我面试得怎么样,发现自己得不足。
6. 叙述你的职业规划。
第一步,如果能有幸留到咱们贵公司,那我肯定会以最短的时间先熟悉公司的文化背景、业务流程。
第二步,因为自己现在从事这行业也有三年时间了,基本的项目模块都差不多能上手,但毕竟新的公司,肯定也会有很多新的技术需要自己提升,那我希望自己能在贵公司一年内达到小组负责人的职位。
第三步,两年后能把自己的技术历练的更加成熟,三年左右往产品这块或者往全栈这块发展,目前先就这么打算的。