最后
大厂面试问深度,小厂面试问广度,如果有同学想进大厂深造一定要有一个方向精通的惊艳到面试官,还要平时遇到问题后思考一下问题的本质,找方法解决是一个方面,看到问题本质是另一个方面。还有大家一定要有目标,我在很久之前就想着以后一定要去大厂,然后默默努力,每天看一些大佬们的文章,总是觉得只有再学深入一点才有机会,所以才有恒心一直学下去。
这股风气貌似是字节跳动带起来的,我认为这是好事,因为这会促使更多的前端不再把自己当成切图仔,而是真正的程序员。
字节跳动的面试跟国外公司面试很像,像Google、Facebook其实不太分前后端,都是软件工程师。
我认为这也是正确的职位设定。前端和后端一样需要深入学习数据结构与算法,否则技术之路不会走得太远(走管理,混关系这条路暂且不讨论)。随便举一些前端知识点吧!
如果不了解栈,那么 js 函数堆栈的机制能彻底搞清楚?你能把所有的函数递归用栈改写吗?能理解函数调用过程中的空间复杂度吗?
如果不了解队列,能理解 js 异步中的 task queue吗?
如果不了解链表,能理解 js 的引用类型、指针、原型链吗?
如果不了解字典, 写的 js 代码里该不会都是 if else?
如果不了解树,如何遍历json里的每个字段?如何渲染树插件?如何处理城市级联?
上面说的这些还都是最简单的数据结构知识,当你哪天发现纯前端一抓一大把,毫无差异化竞争力,这时候你可能想做前端里懂后端的,前端里懂机器学习的,前端里懂业务的,一旦你跳出浏览器,就会发现外面世界好大,一些更神奇的数据结构与算法也都冒出来了。
-
自然语言处理将文字变为数字,用到了哈希。
-
tensorflow 里的图优化,知识图谱,图数据库,有限状态机里的图……
-
如果你想从数据中找到最大的几个数,你不会再傻傻地把所有数据排序,而是会用堆来计算。
-
利用分治构建决策树。
-
……
随着前端的不断发展,我认为计算机科学和软件工程的底层技术(比如数据结构与算法)会越来越受到前端的重视。而前端圈也会因此变得越来越技术,越来越专业。
那么回到标题,我们该如何搞定算法面试呢?刷题是关键!
正好从朋友那薅到一份**《2021最新版数据结构与算法⾯试题⼿册》**,硬着头皮全部啃完了,不直接看答案,先自己思考,不然很容易忘记,实在不会的看题解,看看别人的解题方法。做完了之后总结思路和常见套路。
1.哈希
-
请说⼀说,Java中的HashMap的⼯作原理是什么?
-
介绍⼀下,什么是Hashmap?
-
讲⼀讲,如何构造⼀致性哈希算法。
-
请谈⼀谈,hashCode() 和equals() ⽅法的重要性体现在什么地⽅?
2.⼆叉树
-
求⼆叉树的最⼤深度
-
求⼆叉树的最⼩深度
-
求⼆叉树中节点的个数
-
求⼆叉树中叶⼦节点的个数
-
求⼆叉树中第k层节点的个数
-
判断⼆叉树是否是平衡⼆叉树
-
判断⼆叉树是否是完全⼆叉树
-
两个⼆叉树是否完全相同
-
翻转⼆叉树or镜像⼆叉树
-
两个⼆叉树是否互为镜像
-
求两个⼆叉树的最低公共祖先节点
3.链表
-
谈⼀谈,bucket如果⽤链表存储,它的缺点是什么?
-
有⼀个链表,奇数位升序偶数位降序,如何将链表变成升序?
-
如何反转单链表
-
现在有⼀个单向链表,谈⼀谈,如何判断链表中是否出现了环
-
随机链表的复制
4.数组
-
写⼀个算法,可以将⼀个⼆维数组顺时针旋转90度。
-
⼀个数组,除⼀个元素外其它都是两两相等,求那个元素?
-
找出数组中和为S的⼀对组合,找出⼀组就⾏
-
求⼀个数组中连续⼦向量的最⼤和
-
寻找⼀数组中前K个最⼤的数
5.排序
-
⽤Java写⼀个冒泡排序?
-
介绍⼀下,排序都有哪⼏种⽅法?请列举出来
-
介绍⼀下,归并排序的原理是什么?
-
介绍⼀下,堆排序的原理是什么?
文末
如果30岁以前,可以还不知道自己想去做什么的话,那30岁之后,真的觉得时间非常的宝贵,不能再浪费时间在一些碎片化的事情上,比如说看综艺,电视剧。一个人的黄金时间也就二,三十年,不能过得浑浑噩噩。所以花了基本上休息的时间,去不断的完善自己的知识体系,希望可以成为一个领域内的TOP。
同样是干到30岁,普通人写业务代码划水,榜样们深度学习拓宽视野晋升管理。
这也是为什么大家都说30岁是程序员的门槛,很多人迈不过去,其实各行各业都是这样都会有个坎,公司永远都缺的高级人才,只用这样才能在大风大浪过后,依然闪耀不被公司淘汰不被社会淘汰。
269页《前端大厂面试宝典》
包含了腾讯、字节跳动、小米、阿里、滴滴、美团、58、拼多多、360、新浪、搜狐等一线互联网公司面试被问到的题目,涵盖了初中级前端技术点。
开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】
前端面试题汇总
JavaScript