• 前端面试题总结


    css
    1,css 布局
    2,css模型
    3,css动画
    4,BFC
    5,css实现三角形、梯形、圆形
    6,css的性能优化
    js
    1,实现jsonp
    function handleResponse(response){
    }
    var script=document.createElement("script")
    script.src="http:baidu.com?callback=handleResponse"
    $('body').append(script)
    2,中间件的实现方式
    // compose
    function compose(middlewares){
    return function(){
    return dispatch(0)
    function dispatch(i){
    let fn=middlewares[i]
    if(!fn){
    return Promise.resolve()
    }
    return Promise.resolve(
    fn(function next(){
    return dispatch(i+1)
    })
    )
    }
     
    }
    }
    3, 防抖
    function debounce(fn,wait){
    var timeout;
    return function(){
    let context=this;
    let args=arguments;
    if(timeout) clearTimeout(timeout)
    timeout=setTimeout(function(){
    fn.apply(context,args)
    },wait)
     
    }
    }
    4,节流
    function throttle(fn,wait){
    var prev=Date.now();
    return function(){
    let context=this;
    let args=arguments;
    let now=Date.now();
    if(now-prev>wait){
    fn.aplly(context,args)
    prev=Date.now();
    }
     
    }
    }
     
    5, bind实现方式的
    Function.prototype.bind=function (context){
    var self=this;
    var args=Array.prototype.slice.call(arguments,1)
    var ff= function (){
    var args1=Array.prototype.slice.call(arguments,1)
    var args2=args.concat(args1)
    self.apply(context,args2)
    }
    ff.prototype= Object.create(this.prototype)
    }
    6,promise的源码
     
    // const p1 = new MyPromise((resolve, reject) => {
    // setTimeout(() => {
    // resolve('result')
    // }, 1000);
    // })
    // p1.then(res => console.log(res))
    // 设置promise 规范三种状态
    const PENDDING='pedding'
    const FULFILLED='fulfilled'
    const REJECTED='rejected'
     
    class MyPromise{
    constructor(executor){
    this._resolveQueue=[];
    this._rejectQueue=[];
    this._status=PENDDING
    // 解决_resolve
    let _resolve=(val)=>{
    if(this._resolveQueue.length>1){
    if(this._status!=='pedding') return;
    this._status=FULFILLED
    this._resolveQueue.foreach((callback)=>{
    callback(val)
    })
    }
    }
    let _reject=(val)=>{
    if(this._rejectQueue.length>1){
    if(this._status!=='pedding') return;
    this._status=REJECTED
    this._rejectQueue.paforeach((callback)=>{
    callback(val)
    })
    }
    }
    executor(_resolve,_reject)
    }
    then(resolvefn,rejectfn){
    // 开始注册
    return new MyPromise((resolve,reject)=>{
    const fulfilledFn=value=>{
    try{
    let x=resolvefn(value)
    x instanceof MyPromise? x.then(resolve, reject):resolve(x)
    }catch(error){}
    }
     
    const rejectedFn = error => {
    try {
    let x = rejectFn(error)
    x instanceof MyPromise ? x.then(resolve, reject) : resolve(x)
    } catch (error) {
    reject(error)
    }
    }
    this._resolveQueue.push(fulfilledFn);
    this._rejectQueue.push(rejectedFn);
    })
     
    }
    }
    7,es5---继承
    function inheritPrototype(a, A){
    var prototype = object(superType.prototype); //create object
    prototype.constructor = subType; //augment object
    subType.prototype = prototype; //assign object
    }
    8,高阶组件
    属性代理,反向代理,渲染劫持,样式包裹,状态提升
    9,async 实现原理
    10, proxy的实现方法
    11,Object.defineProperty()
    12, new 实现方式
    13 webpck的源码理解、热更新的处理
    14, https
    15,http 的状态
    16, http请求
    17,js的算法
    18, 脚手架的维护
    19,dns
    20,webview 数据通讯-
    jsBrage怎么一个拦截
    andriod
    4.4- webview-loadurl
    4.4+ webview-evalutejavascript
    ios
    stringByEvaluatingJavaScriptFromString
    21,pu /pv的一个原理
    1,没有跨域的问题
    2,不会阻塞页面的加载,影响用户的体验
    3,在所有的图片中体积比较小
    22,监控处理异常
    处理些网络异常unhandledrejection
    23,vue监听属性对象的异常
    // this.items.length=1 // 添加数组
    // this.items.splice(1)
    // this.items[2]={message:1}
    this.$set(this.items,2,{message:1})
    console.log("这是修改之后的数组", this.items);
    24,node时间循环机制
    timer
    io callback
    prepare idel
    poll
    check
    close callback
    25,前端敏感信息加密
    1,md5+随机数
    2,Rsa+采用非对称加密
    26热更新原理
    Server端使用webpack-dev-server去启动本地服务,内部实现主要使用了webpack、express、websocket。
    使用express启动本地服务,当浏览器访问资源时对此做响应。
    服务端和客户端使用websocket实现长连接
    webpack监听源文件的变化,即当开发者保存文件时触发webpack的重新编译。
     
    每次编译都会生成hash值、已改动模块的json文件、已改动模块代码的js文件
    编译完成后通过socket向客户端推送当前编译的hash戳
    客户端的websocket监听到有文件改动推送过来的hash戳,会和上一次对比
    27,call实现的原理
    Function.prototype.myCall = function(context) {
    // context object
    context.fn = this;
    let args = [];
    for (let i = 1, len = arguments.length; i < len; i++) {
    args.push(arguments[i]);
    }
    context.fn(...args);
    let result = context.fn(...args); delete context.fn;
    return result;
    };
    28,订阅发布
    class EventEmiter {
    constructor() {
    //维护一个对象
    this._events = {
     
    }
    }
    on(eventName, callback) {
    if (this._events[eventName]) {
    //如果有就放一个新的
    this._events[eventName].push(callback);
    } else {
    //如果没有就创建一个数组
    this._events[eventName] = [callback]
    }
    }
    emit(eventName, ...rest) {
    console.log(...rest + 'rest的写法')
    // alert(...rest)
    if (this._events[eventName]) { //循环一次执行
    this._events[eventName].forEach((item) => {
    item.apply(this, rest)
    });
    }
    }
    removeListener(eventName, callback) {
    if (this._events[eventName]) {
    //当前数组和传递过来的callback相等则移除掉
    this._events[eventName] =this._events[eventName].filter(item => item !== callback);
    }
    }
    once(eventName, callback) {
    function one() {
    //在one函数运行原来的函数,只有将one清空
    callback.apply(this, arguments);
    //先绑定 执行后再删除
    this.removeListener(eventName, one);
    }
    this.on(eventName, one);
    //此时emit触发会执行此函数,会给这个函数传递rest参数
    }
    }
    29, 301 302 转发实质区别
    //object.protptype
    30, 对象遍历属性
    31,promise 新的属性
    32,css 性能优化的
    1,id selector非常的高效
    2 ,防止写动画的
    3,深层次嵌套
    4,防止引用import
    5,开启gpu加速
    6,不要使用attibute selector
    7,将浏览器的标准至于前面,标准样式至于后面的=
    8,减少css文档的体积
    9,防止回流、重绘
     
    33,IOS
    6.1 开始支持旧版本 display:-webkit-box;
    7.1 开始支持标准版本display: flex;
    34,移动端
    1,1像素的问题
    35,300ms延迟
    36,amd/cmd/module gulp/grunt webpack
    37,算法
    // 3, 9, 10
    // [3] [3,3] [2,5]
    38,// 第三个参数 false 为冒泡
    element.addEventListener('click',function(){},false)
    39,求得数组最大值
    Math.max.apply(null,this)
    40,7大模型
    41,浏览器缓存
    42,ngix
    43,this
    44,原型、原型链
    45,作用域、作用域链
    46 http请求错误码
    47 es6
    箭头函数
    48 typescript
    49,node线上的监控
     

  • 相关阅读:
    常用集合比较
    windows和centos下安装ActiveMQ
    windows + maven + eclipse
    Eclipse常用插件 + Eclipse快捷键
    Zookeeper + Dubbo + SpringMVC + dubbo-admin
    Hession集成Spring + maven依赖通讯comm项目 + 解决@ResponseBody中文乱码
    Spring结合log4j(slf4j)
    nginx安装配置+集群tomcat:Centos和windows环境
    Manthan, Codefest 18 (rated, Div. 1 + Div. 2) ABCDE
    51nod 1483 化学变化
  • 原文地址:https://www.cnblogs.com/yayaxuping/p/12845240.html
Copyright © 2020-2023  润新知