我是一枚女程序猿,很少发文章,并且我深知这是不对的,不管好与坏分享出来大家一起讨论,总会把不好的变成好的,窄路变成宽路。哎,可能个人使然,但是发表出来的还是很少,都是在自己的工作笔记里每次记录着技术心得和一些总结。总觉得发表出来万一不好,被人取笑了怎么办。总之是一个爱多想的女程序员。
最近我以前一个同事在找工作,她面试了阿里,然后跟我聊了聊,说让我多发表自己的文章,建立自己的社区,最好再多参与一些开源项目或者在git上多建一些自己的项目。这话我以前也听过,但是就是执行上不彻底啊。
这不,我现在必须把自己以前写好的或者接下来的每一点技术总结也好 经验总结也好,都想写出来,就当不为别人看,为自己也行!
话不多说了,她给我发了一道她面试阿里的题。我自己做了做。这是我目前想到的思路和写法。欢迎有更好更优的方案发出来。我也可以学习。谢谢~
题目:
筛选笔试题 (请在半小时内完成):
var arr = [
{name:'小米1', value: 1, type: 2, date: '2018-06-07T08:00:01.589Z' },
{name:'锤子T1', value: 1, type: 2, date: '2018-06-07T08:10:01.589Z' },
{name:'小米2', value: 1, type: 4, date: '2018-06-07T20:00:01.589Z' },
{name:'小米2', value: 4, type: 4, date: '2018-06-07T20:10:21.189Z' },
{name:'小米4', value: 1, type: 4, date: '2018-06-07T08:00:01.560Z' },
{name:'小米4', value: 2, type: 4, date: '2018-06-07T08:10:31.584Z' },
{name:'小米6', value: 1, type: 3, date: '2018-06-07T08:00:01.589Z' },
{name:'小米5s',value: 1, type: 4, date: '2018-06-07T08:00:01.589Z' },
{name:'锤子T2', value: 1, type: 4, date: '2018-06-07T08:00:01.589Z' },
{name:'锤子T1', value: 4, type: 4, date: '2018-06-07T08:06:01.589Z' },
{name:'魅蓝note5', value: 1, type: 4, date: '2018-06-07T08:00:01.589Z' },
{name:'魅蓝note2', value: 5, type: 4, date: '2018-06-02T08:07:01.589Z' },
{name:'魅蓝note2', value: 6, type: 4, date: '2018-06-07T08:00:01.589Z' },
{name:'魅蓝note3', value: 1, type: 4, date: '2018-06-05T08:00:01.589Z' },
{name:'魅蓝note', value: 1, type: 4, date: '2018-06-07T08:00:01.589Z' },
{name:'oppor9', value: 7, type: 4, date: '2018-06-04T08:04:01.588Z' },
{name:'华为p9', value: 1, type: 4, date: '2018-06-02T08:00:01.577Z' },
{name:'华为p9', value: 2, type: 4, date: '2018-06-07T08:00:01.110Z' },
{name:'华为p10', value: 1, type: 1, date: '2018-06-07T08:00:01.534Z' }
]
/**
* 请用您认为最优化的方式,将arr中的type为4的数据过滤出来,
* 然后按相同的 name + date(按天)合并value(value累加),
* 然后按 value 降序(从大到小)排序,
* 最后每行按照 "${name},${本地日期},售出${sum(value)}部" 的格式,如:"小米2,2017年06月08日,售出5部", 打印(console.log)出来。
* 可以使用第三方js库,可以使用es6。
* 请在半小时内完成。
要求最后输出结果样例如下:
oppor9,2017年06月04日,售出7部
魅蓝note2,2017年06月07日,售出6部
魅蓝note2,2017年06月02日,售出5部
小米2,2017年06月08日,售出5部
......
*/
function printArray(arr){
}
我的解答:
function printArray(arr){
const res = arr.filter(function(item, index, arr){
item.date = item.date.split('T')[0]
return item.type === 4
})
console.log(res)
const newArr = []
const temp = {}
for(const i in res) {
const key = `${res[i].name}@${res[i].date}`
if (temp[key]) {
temp[key] += res[i].value
} else {
temp[key] = res[i].value
}
}
console.log(temp)
for (const key in temp) {
const tempObj = {}
tempObj.name = key.split('@')[0]
tempObj.date = key.split('@')[1]
tempObj.value = temp[key]
newArr.push(tempObj)
}
console.log(newArr)
function compare(prop) {
return function(a, b){
const value1 = a[prop]
const value2 = b[prop]
return value2 - value1
}
}
newArr.sort(compare('value'))
console.log(newArr)
newArr.forEach((item, index) =>{
const printStr = `${item.name},${item.date.split('-')[0]}年${item.date.split('-')[1]}月${item.date.split('-')[2]}日,售出${item.value}部`
console.log(printStr)
})
}
printArray(arr)
我有注意到时间那有点差异,题目数组里给的是2018,让最后打印出来是2017年,我自己觉得是打印错了。如果在现场我估计我会再问一下面试官这里是否不一样。如果真不一样,程序里在处理一下就行了
好了,此题完结。
在阿里巴巴面试通常会有3轮面试:
1、第一轮面试:
第一轮面试通常是电话面,面试官会提前打电话约定面试时间,在接到面试官电话时,不要紧张,如果自己尚未准备好面试,或者时间不方便,可以将时间约靠后一点,留下足够的时间缓冲。
面试的时候不用太紧张,面试你的工程师通常就是你所应聘岗位所在团队的成员,他是在为自己的团队挑选队友,因此,没有理由为难你。
2、第二轮面试:
如果你顺利通过第一轮面试,那么,大约一周后,将进行第二轮面试。第二轮面试的面试官通常是团队主管(不一定是你所应聘岗位所在的团队,因为存在“交叉面“防作弊)。
第二轮面试如果是程序员会考察程序员的能力水平,通过笔试和问答做出最后的判断。
3、第三轮面试:
在通过第二轮面试后,通常就进入到了技术“终面”,本轮通常由部门总监、HRD来面试。主要面试个人的心理素质,职业素养以及为人待物的能力。
如果面试者可以顺利通过3论面试就可以收到来自阿里巴巴的offer了。
1、基础知识的掌握
阿里的技术面试通常是一个由浅入深的过程。起初,面试官会根据岗位要求问一些技术相关的基础问题。当然“基础”二字的含义并不是简单,如果没有充分的准备和足够的积累,也容易被拒绝。
根据面试经验,超过一半的应聘者在这个环节被拒绝,因此,建议应聘者切勿“裸考”,否则留下一个“基础不扎实”的面试记录,短期内再应聘阿里的成功率就很低了。
2、应变能力
阿里面试官会通过设计类问题来考查应聘者的“应变能力”。
例如,给一个具体的问题,要求应聘者给出设计方案,比如设计一个交通信号灯系统,一个中国象棋系统,一个问答系统,一个在线购物网站等等。要求画出模块图,给出关键的API的定义或者类和类之间的关系。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)