0424腾讯手Q面经
1.题目:
首先用20分钟解一道题目,给出一个文本,然后从里面解析出来人名和金额,然后去进行一个简单的计算。
题目回忆如下:
// 题目:
function findTopSpender(text) {
// TODO: 找出花钱最多的人
// 在这里写代码
}
// 用例
const text = `在一次为期3天的搭伙出游中,第1天A花了12元,B花了8.6元,C花了21元,D花了12.8元;第2天A花了1,099元,B花了1,288元,C花了1,311元,D花了95元;第3天A花了66元,B花了121元,C花了32元,D花了612.66元;这三天里他们花钱最多的是人是谁?`
console.log('花钱最多的人是:', findTopSpender(text));
难点在于:
- 要求具有通用意义,不仅针对题目中的ABCD四人
- 解析其中的人名和金额
- 对摘取出来的金额进行处理
我的解答(仅作参考)
// 题目:
function findTopSpender(text) {
// TODO: 找出花钱最多的人
const spenders = {};
const pattern = /(\w+?)花了([\d,.]+)元/g;
let match;
while ((match = pattern.exec(text))) {
// console.log(match);
const name = match[1];
const amount = (match[2].replace(/,/g, ''));
spenders[name] = (spenders[name] || 0) + amount;
}
let topSpender = null;
let maxAmount = 0;
for (const spender of Object.keys(spenders)) {
if (spenders[spender] > maxAmount) {
maxAmount = spenders[spender];
topSpender = spender;
}
}
return topSpender;
}
// 用例
const text = `在一次为期3天的搭伙出游中,第1天A花了12元,B花了8.6元,C花了21元,D花了12.8元;第2天A花了1,099元,B花了1,288元,C花了1,311元,D花了95元;第3天A花了66元,B花了121元,C花了32元,D花了612.66元;这三天里他们花钱最多的是人是谁?`
console.log('花钱最多的人是:', findTopSpender(text));
考察代码中正则表达式具体的含义、考察parseFloat用法。
2.八股:
-
登录界面如何去做,如何判断用户需不需要登录。
我答了没做过,就没再问。
-
常见的攻击有哪些:
答:XSS,SQL注入,钓鱼攻击
讲一下XSS的含义:
答:恶意攻击者往web页面里插入恶意的script代码,当用户浏览该页之时,嵌入其中的script代码会被执行,从而达到恶意攻击用户的目的。
XSS具体怎么实现(没细问,过了)
-
cookie和local storage的区别
答:cookie一般较小,为4KB,随着浏览器和服务器之间来回传递,可以用来跟踪用户行为,可灵活设置过期时间;local storage一般较大,为5MB,存储在浏览器本地,可以永久保存。
local storage存储的一般是什么信息
答:当时没答上来,答案应该是
localStorage
中的键值对总是以字符串的形式存储。 (需要注意,和 js 对象相比,键值对总是以字符串的形式存储意味着数值类型会自动转化为字符串类型).永久存储是什么含义
答:除非用户显示在浏览器上清除localStorage信息,否则这些信息将永远存在。
-
跨域是什么
答:跨域是指一个域下的文档或脚本试图去请求另一个域下的资源
同源策略是什么,怎样才算跨域
答:同源策略是说浏览器协议、域名、端口相同,跨域当时没答上来
同源策略是一个重要的安全策略,它用于限制一个源的文档或者它加载的脚本如何能与另一个源的资源进行交互。
两个 URL 的协议、端口(如果有指定的话)和主机都相同的话,则这两个 URL 是同源的。
3.其他:
问了一些项目的东西,但是我的项目比较水,所以就糊弄过去了,面试官也没细问。
反问环节,我问了面试官是不是我对知识掌握的比较浅,面试官给了一些学习上的建议,我还问这个部门的具体业务,面试官回答说是做手机QQ支付页面的。
4.后续:
本以为面完应该就挂了,毕竟表现得很一般,但是没想到还有面试的机会。4.24面完,4.29收到腾讯新闻的约面。