本次的系列博文主要是针对 腾讯课堂七天前端求职提升营 课程中,所推送的面试题目及编程练习的一次汇总,期间还包括三次直播课的分享,均由腾讯导师给大家讲解,该系列博文的发布已得到 IMWeb 前端学院助教的许可
IMWeb 前端学院 授权转发0. 课程目录
腾讯课堂 IMWeb 七天前端求职提升营 Day 1
腾讯课堂 IMWeb 七天前端求职提升营 Day 2
腾讯课堂 IMWeb 七天前端求职提升营 Day 3
腾讯课堂 IMWeb 七天前端求职提升营 Day 4
腾讯课堂 IMWeb 七天前端求职提升营 Day 5
腾讯课堂 IMWeb 七天前端求职提升营 Day 6
腾讯课堂 IMWeb 七天前端求职提升营 Day 7
1. 经典前端面试题
问题 1: 优先级算法如何计算?
答案: 重要性和来源的优先级排序从低到高是:
① 浏览器默认样式
② 用户在浏览器中定义的普通样式(normal 规则,不带 important 规则)
③ 开发人员定义的普通样式( normal 规则,不带 important 规则)
④ 开发人员定义特殊样式(带 important 规则)
⑤ 用户在浏览器中定义特殊样式(带 important 规则)
另外还有一些原则:
① 相同的样式在 CSS 规则后添加了 !important
的优先于没有添加的
② CSS 规则在文档中出现的顺序后面定义的的优先于前面定义的
③ 加了 !important
的优先于内联样式
④ 内联样式优先于用 link 引入的样式和页面上 <style>
里的样式
问题 2: split() 和 join() 的区别?
答案: 前者是切割成数组的形式,后者是将数组转换成字符串
问题 3: ajax 请求的时候 get 和 post 方式的区别?
答案: ① 一个在 url 后面 一个放在虚拟载体里面
② 有大小限制
③ 安全问题
④ 应用不同 一个是论坛等只需要请求的,一个是类似修改密码的
问题 4: IE 和标准下有哪些兼容性的写法?
答案: ① Var ev = ev || window.event
② document.documentElement.clientWidth || document.body.clientWidth
③ Var target = ev.srcElement||ev.target
2. 前端常见题目个人思考题
1、 说一下你理解的 MVVM,画一下你的设计模式。
2、 说一下 H5 中的离线存储有哪些?
3. 在线编程任务
—— 所有 AC 代码均在 JavaScript(V8 6.0.0)下提交通过 ——
题目 13:输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。
思路:
新建两个数组,分别用来存放奇数和偶数;
将偶数的数组连接到奇数数组后面。
function reOrderArray(array) {
var odd = [];
var even = [];
for(var i = 0;i < array.length;i++){
if((array[i]%2)===0){
even.push(array[i]);
}
else{
odd.push(array[i])
}
}
return odd.concat(even);
}
题目 14:输入一个链表,输出该链表中倒数第 k 个结点。
function FindKthToTail(head, k)
{
if(!head||k<=0){return null;}else{
var q=head;
var p=head;
for(var i=0;i<k-1;i++){
if(p.next)
{ p=p.next;}else{
return null;
}
}
for(;p.next;p=p.next){
q=q.next;
}
return q;
}
}
题目 15:输入一个链表,反转链表后,输出链表的所有元素。
function ReverseList(pHead)
{
var pCur = null;
var pNext = null;
while(pHead !== null){
pNext = pHead.next;
pHead.next = pCur;
pCur = pHead;
pHead = pNext;
}
return pCur;
}
题目 16:输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。
思路:
① 如果 pHead1 和 pHead2 中有一个为空,则 result 是另一个;
② 如果 pHead1 的头结点值小于 pHead2,那么 result 的头结点为 pHead1 的头结点,其 next 为 pHead1.next 和 pHead2 比较的结果。同理对 pHead2 也一样。
③ 因此本题可采用递归的方法。
function Merge(pHead1, pHead2) {
// write code here
if (pHead1 == null) {
return pHead2;
} else if (pHead2 == null) {
return pHead1;
}
var result = {};
if (pHead1.val < pHead2.val) {
result = pHead1;
result.next = Merge(pHead1.next, pHead2);
} else {
result = pHead2;
result.next = Merge(pHead1, pHead2.next);
}
return result;
}
题目17:输入两棵二叉树 A,B,判断 B 是不是 A 的子结构。(ps:我们约定空树不是任意一个树的子结构)
相关知识:二叉树子结构的意思是包含了一个结点,可以只取左子树或者右子树,或者都不取。例如:
由于 A 中有一部分子树的结构和 B 是一样的,因此 B 是 A 的子结构。
思路:
① 有关二叉树的算法问题,一般都可以通过递归来解决。那么写成一个正确的递归程序,首先一定要分析正确递归结束的条件。
② 如果根节点相同则递归调用 isSubtree(),如果根节点不相同,则判断 root1 的左子树和 root2 是否相同,再判断右子树和 tree2 是否相同;
③ 注意 null 的条件,HasSubTree 中,如果两棵树都不为空才进行判断,isSubtree 中,如果 root2 为空,则说明第二棵树遍历完了,即匹配成功;
④ root1 为空有两种情况:(1) 如果 root1为空 && root2 不为空说明不匹配,(2) 如果 root1 为空,root2 为空,说明匹配。
function isSubtree(root1, root2) {
if (root2 == null) return true;
if (root1 == null) return false;
if (root1.val == root2.val) {
return isSubtree(root1.left, root2.left) &&
isSubtree(root1.right, root2.right);
} else {
return false;
}
}
function HasSubtree(pRoot1, pRoot2)
{
if (pRoot1 == null || pRoot2 == null) {
return false;
}
return isSubtree(pRoot1, pRoot2) ||
HasSubtree(pRoot1.left, pRoot2) ||
HasSubtree(pRoot1.right, pRoot2);
}
**题目 18:操作给定的二叉树,将其变换为源二叉树的镜像。 **
输入描述:
二叉树的镜像定义:源二叉树
8
/ \
6 10
/ \ / \
5 7 9 11
镜像二叉树
8
/ \
10 6
/ \ / \
11 9 7 5
思路:
① 有关二叉树的算法问题,一般都可以通过递归来解决。那么写一个正确的递归程序,首先一定要分析正确递归结束的条件。
② 先前序遍历这棵树的每个结点,如果遍历到的结点有子结点,就交换它的两个子节点;
③ 当交换完所有的非叶子结点的左右子结点之后,就得到了树的镜像。
function Mirror(root)
{
if(root === null) {
return;
}
var temp = root.left;
root.left = root.right;
root.right = temp;
Mirror(root.left);
Mirror(root.right);
}
—— 题目来源 剑指 offer ——
简历 应届生笔试特点 数据结构 排序算法 计算机基础 前端附加题 开放性笔试题_1 开放性笔试题_2 开放性笔试题_3 面试官的套路 入职4. 鹅厂求职直播课:如何申请大公司职位-面试笔试_旷旭卿导师
End of File
行文过程中出现错误或不妥之处在所难免,希望大家能够给予指正,以免误导更多人,最后,如果你觉得我的文章写的还不错,希望能够点一下喜欢和关注,为了我能早日成为简书优秀作者献上一发助攻吧,谢谢!^ ^
网友评论