面试题|上周前端面试挂了一个985研究生,大家一定注意编程基本功
13387
2023.04.20
发布于 未知归属地

上周前端面试挂了一个985研究生,大家一定注意编程基本功

关注程序员耳东,编程转码真轻松

上周组里招实习生,在笔试成绩比较好的里面挑了一个某985的研究生,科班生

因为候选人学历比较好,而且今年公司hc确实不多,所以大家期待还是比较高的,希望可以赶紧面完发offer来实习

面试前我们针对简历做了一些面试题准备,对于实习生我们的面试要求不会很高,考察的角度主要是这么几方面:

  • 首先是会问简历上的实战项目,实习生没有工作经验,大部分项目都是课程设计或者跟着网课做的项目,所以这部分要求不是非常高,只要能说清楚自己做了什么,用了什么技术就好

  • 然后是计算机的基础,比如说数据结构、操作系统、网络、编译等等,这里面最重要的就是数据结构与算法,一般稍微好点的公司都会在面试的时候加上一两道手写算法题

  • 最后还有你面试的这个方向所涉及到的知识点,你面的Java那就问Java基本功,你要面前端那就问JavaScript、CSS

基本上一个完整的面试就包含这些东西吧

OK,言归正传,说说上周这个面试都问了什么吧

首先问了一些计算机基础知识,无非就是围绕着操作系统的线程进程、内存,计网的网络分层、握手,数据结构的链表、树等等来问

这里面有一个比较明显的特点就是,候选人在回答概念性的问题还行,但是在需要白纸写数据结构的时候表现的就不太好

不过我们也不会因为一个环节表现不好就直接挂掉候选人,面试的时候还是需要全面的考察

然后我们根据简历上的React项目问,因为简历上的项目比较简单,这个环节比较短

我们只问了ta在项目里面使用了哪些组件库,有没有自己封装过组件,Class组件和Hooks等等

这个环节无非就是听一听对于框架的熟悉度,对于实习生来说不会要求对框架掌握的特别深刻

这个环节回答的也不太好,给人的感觉是照着视频敲了一遍但是不具备使用框架开发功能的能力

最后我们问了一些JavaScript相关的东西,也就是这个环节让我们挂了ta

首先我们问了工作中最常用的Ajax,让面试者手动实现一个Ajax的请求方法,这个问题主要是想考察面试者对于Ajax请求流程、请求状态、HTTP状态码以及基本的编码能力

然后我们问了一道手写编程题:解析url上面的search,比如说url是"xxx.com?name=erdong&age=88",需要把它的search部分解析成对象,也就是{ name: "erdong", age: 88 }

这个题目考察的点比较多,首先是对于浏览器属性的熟悉度,比如说window.location.search,还有就是对于字符串的处理,因为需要把search字符串解析成key和value对应的部分,过程中还涉及到对Object的处理

如果这个题目可以快速的写出来,那么我们还能继续往下加要求,比如如果有key重复的时候合并value为数组,如果有value是中文的时候需要把它encode一下

其实考的这两道手写题都不难,但是回答效果确实不太好,过程中暴露出编程基本功不好的问题,最终还是决定不通过

事后我们也在想是不是我们问的太难,结合其他部门以及同事之间的交流,我们的结论是这个面试题目难度是合适的。但是这个候选人回答的效果不好,我觉得80%的原因是在于编程基本功不好,可能是平时代码写的不够,编程训练不到位

所以建议大家在平时学习和准备面试的时候,可以专门找一些有复杂度的程序去做专项练习,比如说实现工具函数库、常用组件库、微型框架等等

我推荐我之前收集的一些JavaScript编程手写题目,大家有空可以去做练习:

  1. 实现节流(throttle)函数
  2. 实现深拷贝函数
  3. 实现js对象扁平化
  4. 实现instanceof函数
  5. 模拟实现new操作符
  6. 实现call函数
  7. 实现apply函数
  8. 实现bind函数
  9. 模拟实现Object.create函数
  10. 实现JS的继承
  11. 实现JSON.stringify
  12. 实现JSON.parse
  13. 实现Promise.resolve方法
  14. 实现Promise.reject方法
  15. 实现Promise.finally方法
  16. 实现Promise.all方法
  17. 实现Promise.allSettled方法
  18. 实现Promise.race方法
  19. 实现简版的Promise
  20. 实现解析URL的Params方法
  21. 实现简版模板引擎
  22. 实现千分位分割
  23. 实现判断电话号码方法
  24. 实现判断邮件方法
  25. 实现判断身份证号方法
  26. 实现数组的map方法
  27. 实现数组的reduce方法
  28. 实现数组的flat(扁平化)
  29. 实现对象扁平化方法
  30. 实现add方法,满足以下要求
  31. 实现sleep方法
  32. 实现方法求两个数组的交集
  33. 实现函数柯里化
  34. 实现Array.isArray方法
  35. 实现双向绑定
  36. 实现对象数组去重
  37. 实现判断数据类型的方法
  38. 基于generator实现async/await
  39. 基于Promise实现Ajax方法
  40. 实现JSONP跨域
  41. 实现发布订阅
  42. 实现观察者模式
  43. 实现Object.freeze方法
  44. 实现异步并发数限制
  45. 实现异步串行和异步并行
  46. 实现Vue的reactive功能
  47. 实现简版图片懒加载
  48. 实现深度对比isEqual方法
  49. 实现getValue和setValue来获取/设置对应path的值
  50. 实现按指定长度拆分数组(lodash.chunk方法)
  51. 实现compose方法
  52. 实现简版redux
  53. 实现const运算符
  54. 实现管理本地缓存过期的方法
  55. 实现ES6的extends运算符功能
  56. 实现setTimeout模拟setInterval方法
  57. 实现lazyMan方法
  58. 实现DomToJson方法
  59. 实现类数组转换为数组方法
  60. 实现列表转换为树结构方法
  61. 实现大数相加方法
  62. 实现JS乱序算法
  63. 实现JS函数记忆
评论 (57)