初级前端面试题(简化版)

本文整理了适用于中小公司面试的HTML+CSS+JS简化面试题,包括DOCTYPE的作用、盒子居中、0.5px线实现、字符串处理、数组操作、对象遍历等基础知识,并提及Vue.js的重要知识点,如双向数据绑定、监听、计算属性等。还提供了几道面试题供读者自我检测。

近期有一朋友开始面试,刚开始面试比较紧张,网上找的面试题,一般都比较大且多,不能很高效的去面试。所以再面试知识准备的时候费了不少时间。

这里我结合了朋友的经历,然后整理了一份个人觉得够用的,简化面试题(面向部分中小公司)。

1.html+css

   1. DOCTYPE :<!DOCTYPE> 声明不是 HTML 标签,这个实际用处就是规定了浏览器文档使用哪种html或者xhtml规范。

   2.盒子居中方式(写出俩到三种方式,这里写一种)

    <style>
        .fahther_box{
            position: relative;
        }
        .child_box{
            width: 100px;
            height: 100px;
            position: absolute;
               left: 50%;
               top:50%;
               transform: translate(-50%,-50%);
            }
    </style>

3.0.5px的线(实际就是用的transform)

transform: scale(0.5,0.5);

个人感觉实现的效果,还是有问题,感觉颜色会淡。有人说还可以用阴影和渐变色处理,不过我没试过。现在大多数面试都是vue,所以再html和css方面侧重没有那么多。

2.Js

不管用啥框架,实际咱们都是再写JavaScript。所以往往面试的时候,这块是大头。问的也比较多。我这里会写一些基础且够用的,那种比较绕的promise嵌套就不写了。

1.字符串处理

  常见: toString,slice,charAt,charCodeAt,length,substr,substring,indexOf,trim,toLowerCase,toUpperCase。

    1.toString(): 转字符串用法。

      const num  = 10;
      console.log(num.toString()); // '10'
      console.log(typeof num.toString()); // 'string'
       
      console.log((num+'').toString()); // '10' //实际开发咱们一般会用这个方法处理

   2.slice,substr ,substring 都是截取的方法,用法差不多,slice用负数比较友好

   const demoStr = '摸鱼写文章'
      console.log(demoStr.slice(-1)); // 章

    其他方法用起来差不多,具体自己看,这里举例一种。

    3.charAt,charCodeAt 这俩一般没有用处

      const demo1Sre ='asdewwsdd';
      console.log(demo1Sre.charAt(0)); // 'a'
      console.log(demo1Sre.charCodeAt(0)); // 97 a的ASCII码

    4.indexOf 这个可以用的场景比较多(例如:去重)PS:它不只是字符串方法

      const demo1Sre ='asdewwsdd';
      console.log(demo1Sre.indexOf('a')); // 0 这个是下标,返回第一个符合条件值得下标
      // indexOf(target,index) 这个有俩参数,第二参数是开始查找得下标。不写默认从0开始。

   去重我就不写了,毕竟去重有太多得方法了,这个不是最好得,主要也是我懒,毕竟摸鱼得时        候,还是想多休息休息(笑脸)。

    5.trim 去除字符串首尾空格

    const demo1Sre ='     asdewwsdd       ';
      console.log(demo1Sre.trim());//'asdewwsdd'

    这个不能出去中间得,中间得可以用正则,我一样不写。

   6.toUpperCase,toLowerCase 这俩就是一个把字符串转大写,一个转小写,你们说要是字符串        里面不全是英文,用起来会是咋样?

2.数组

   写到这里,我发现我好像写得有点详细了,不应该是简化版吗???

   从这里开始就不会展开说了

   1.数组去重


    const arr = [1,2,3,1,4,6,8,2];
    const target = [...new Set(arr)];
    console.log(target); // [1, 2, 3, 4, 6, 8]

2.数组求最大值

    const arr = [1,2,3,1,4,6,8,2];
    console.log(Math.max.apply(Math,arr)); // 8

     这个会引申出来改变this指向得方法,call, apply ,bind 自己去查

    3.数组排序

    const arr = [1,2,3,4,6,8];
    console.log(arr.sort((a,b)=>a-b));//[1, 2, 3, 4, 6, 8]
    console.log(arr.sort((a,b)=>b-a));//[8, 6, 4, 3, 2, 1]

    4.数组扁平化(这个有flat函数直接可以用,不过一般面试都是手撸一个)

      处理这个方法比较多,reduce,递归啥的,都可以。这里写一个

   let arr = [1, [2, [3, 4]]];


   flatArray = (source) => {
      if(!Array.isArray(source)) return
      while(source.some(item=>Array.isArray(item))){
        source = [].concat(...source)
      }
      return source;
   }

   console.log(flatArray(arr)); // [1, 2, 3, 4]

     直接解决就完事了,实际开发用flat就可以了。

    数组这块实际有一些方法没有说,splice。find 。。。都比较重要,你们可以自己看。

3.对象

   这个里面东西实际比较多。这里写一点普通得。够用的

   1.循环 for in

   这个不写了。

  2.拓展方法(就给你拓展俩)

    const obj = {
       name:[1,2,3],
       age:[4,5,6]
    }
    console.log(Object.values(obj)); // [[1, 2, 3],[4, 5, 6]]
    console.log(Object.keys(obj));  //  ['name', 'age']

   3.一维数据深拷贝

 

    const temp = {
        name:'zs',
        age:18
    }
    const newObj = JSON.parse(JSON.stringify(temp))

   4.深拷贝

   我写了一个普通的深拷贝,另外一个文章

3. ajax封装,(这玩意太多了,过几天重新开一篇)

    ajax和axios的关系,axios就是用promise封装的ajax.

   axios俩拦截器,请求拦截器,用来种token,响应拦截器可以做全局数据处理和弹错等等。

4. vue知识点

  1. 双向数据绑定 v-modal 原理 Object.defineProperty

  2. 监听watch,深浅监听(深监听会引起页面卡顿,可以转浅监听)

  3. 计算属性compute,这个定义的数据,不能再data内出现

   4.为啥data要用函数: 独立作用域。防止变量不同页面 变量覆盖。

   5.页面传参,父子组件,子父组件,路由传参(不同的方式)。

   6.vuex 用法,助手函数,namespace modal的命名空间。

    不要问我为啥,越写越少,我累了。

附加几道题(没有答案那种,可以自己打印)

      // 1. 以下每行输出的结果是什么?

      !!(0 == null);

      undefined == null;

      isNaN('123') == NaN;

      typeof [];

      typeof null;

   

    // 2 下面代码输出结果
      
    (function (){
        var a = b = 5
    })();
    console.log(a);
    console.log(b);

   

    //3.输出结果
     
    for(var i = 0 ; i <5 ; i++){
        setTimeout(()=>{
            console.log(i);
        },1000*i)
    }
    
    for(var i = 0 ; i < 3 ; i ++){
        setTimeout(()=>{
            console.log(i);
        },(()=>{
            var b= i *1000;
            console.log(b);
            return b
        }))
    }

好了,就到这里了。部分知识点,我没有展开,你可以复制去C一下。

<think>嗯,用户让我介绍一下前端面试题以及答案。首先,我需要确定用户的需求是什么。可能他们正在准备前端开发岗位的面试,想了解常见的面试题类型和对应的答案。不过,用户也可能只是想大致了解前端面试的内容,或者作为学习参考。我需要确保覆盖前端面试的主要知识点,同时提供一些示例答案,帮助他们理解如何回答这类问题。 首先,前端面试通常分为几个部分:HTML/CSS、JavaScript、框架(如React、Vue)、网络相关、性能优化、算法等。我需要分门别类地整理常见的问题,并给出简洁明了的答案。但要注意不要太泛泛而谈,每个问题都要有重点。 比如,HTML可能会问到语义化标签,CSS可能会问布局方式,比如Flexbox和Grid的区别。JavaScript部分肯定会涉及闭包、原型链、事件循环等核心概念。框架方面,React的生命周期、Hooks的使用,Vue的响应式原理都是常见问题。网络方面,HTTP和HTTPS的区别,跨域解决方法也是高频题。 接下来,我需要考虑用户可能的水平。如果是初级开发者,可能需要更基础的题目和详细解答;如果是中高级,问题可能更深入,比如项目优化经验、设计模式等。但用户没有明确说明,所以最好覆盖初级到中级的内容,兼顾一些高级话题。 另外,答案部分需要准确,避免错误。比如,解释事件循环时,要区分浏览器和Node.js的环境差异。在涉及框架的问题时,要确保答案与最新版本接轨,比如React的Hooks现在更常用,而不是Class组件。 还要注意示例代码的正确性,比如用箭头函数和普通函数的this指向问题,闭包的例子是否恰当。网络部分可能需要解释状态码,如304和200的区别,跨域的CORS机制如何工作。 另外,用户可能需要答案的结构清晰,分点列出问题和答案,方便阅读。但要注意避免信息过载,每个问题给出一个简洁的答案,可能的话再补充扩展知识点,比如在回答闭包后,提到内存泄漏的问题。 最后,是否需要提供一些资源或建议,比如推荐学习网站、书籍,或者刷题平台?但用户只要求问题和答案,可能暂时不需要额外信息。总之,整理出高频问题,确保覆盖全面,答案准确简洁,结构清晰,就是关键。</think>以下是前端面试常见题型及示例答案,涵盖核心知识点,供参考学习: --- ### 一、HTML/CSS 基础 **1. HTML语义化的意义是什么?** 答案: - 提升代码可读性,便于团队维护 - 利于SEO(搜索引擎优化) - 增强无障碍访问能力(屏幕阅读器识别) 示例:使用 `<article>`、`<nav>` 替代 `<div>` --- **2. 如何实现垂直水平居中?** 答案: ```css /* Flex方案(推荐) */ .parent { display: flex; justify-content: center; align-items: center; } /* Grid方案 */ .parent { display: grid; place-items: center; } /* 传统定位方案 */ .child { position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); } ``` --- ### 二、JavaScript 核心 **1. 解释闭包及其应用场景** 答案: - **定义**:函数与其词法环境的引用捆绑 - **特点**:内部函数访问外部作用域变量 - **应用**:模块化、防抖节流、数据私有化 - **风险**:不当使用可能导致内存泄漏 示例: ```javascript function createCounter() { let count = 0; return () => count++; // 闭包保留count变量 } ``` --- **2. 事件循环(Event Loop)机制** 答案: 1. 同步任务进入主线程执行 2. 异步任务由Web API处理(如setTimeout) 3. 回调函数进入任务队列(宏任务/微任务) 4. 主线程空闲时按优先级执行微任务(Promise)→ 宏任务(setTimeout) --- ### 三、框架相关(React示例) **1. React Hooks 解决了什么问题?** 答案: - 类组件中状态逻辑难以复用的问题 - 生命周期函数带来的代码碎片化 - 简化函数组件的状态管理 核心Hook:useState(状态)、useEffect(副作用)、useContext(上下文) --- **2. Virtual DOM 工作原理** 答案: 1. 数据变化时生成新虚拟DOM树 2. Diff算法对比新旧树差异 3. 批量更新真实DOM 优势:减少直接操作DOM的性能损耗 --- ### 四、网络与浏览器 **1. HTTPS 加密过程** 答案: 1. 客户端发送SSL/TLS版本信息 2. 服务端返回数字证书 3. 客户端验证证书,生成对称加密密钥 4. 通过非对称加密传输密钥 5. 使用对称密钥加密通信 --- **2. 跨域解决方案** 答案: - CORS:服务端设置 `Access-Control-Allow-Origin` - JSONP:通过 `<script>` 标签跨域请求(仅GET) - 代理服务器:开发环境配置proxy - Nginx反向代理:生产环境常用方案 --- ### 五、高频算法题 **1. 手写防抖函数** ```javascript function debounce(fn, delay) { let timer = null; return (...args) => { clearTimeout(timer); timer = setTimeout(() => fn.apply(this, args), delay); }; } ``` --- **2. 数组去重(至少3种方案)** ```javascript // Set方法 [...new Set(arr)] // Filter方法 arr.filter((item, index) => arr.indexOf(item) === index) // Reduce方法 arr.reduce((acc, cur) => acc.includes(cur) ? acc : [...acc, cur], []) ``` --- ### 六、项目优化实践 **首屏加载优化方案** 1. 代码分割:Webpack动态import 2. 资源压缩:Gzip/Brotli压缩 3. 图片优化:WebP格式 + 懒加载 4. CDN加速静态资源 5. 服务端渲染(SSR) --- 建议结合具体岗位JD针对性准备,重点掌握: - 原理性知识(如浏览器渲染机制) - 框架底层实现(如Vue响应式原理) - 性能优化实战经验 - 系统设计能力(如状态管理方案) 推荐练习平台:LeetCode、前端练习场(FrontendMasters)
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值