去哪儿秋招前端和软件开发笔试题.docx
《去哪儿秋招前端和软件开发笔试题.docx》由会员分享,可在线阅读,更多相关《去哪儿秋招前端和软件开发笔试题.docx(9页珍藏版)》请在冰豆网上搜索。
去哪儿秋招前端和软件开发笔试题
xxx去哪儿秋招试题
xxx去哪儿前端秋招试题
一、问答题
HTML中的table元素有2种布局(table-layout)算法,请给出默认值。
并详细说明为什么fixed布局要比auto快?
二、编程题
1.版本排序
题目描述:
去哪儿前端技术团队一直很富有创新性,经常为了解决实际工作的一些痛点,自主开发一些工具,来解决这些问题。
这样,工具的版本就成为了很重要的一个点,开发者如何提供正确版本,使用者如何获取正确版本,都是十分重要的。
因此,版本都会遵循业界统一的规范---SemVer。
常规版本规则如下:
(1)版本格式:
主版本号.次版本号.修订号,例如1.2.3,版本的三个位数都必须存在,并且为0到999之间的整数。
(2)主版本号:
当你做了不兼容的功能修改
(3)次版本号:
当你做了向下兼容的功能性新增
(4)修订号:
当你做了向下兼容的问题修正
当然,使用者不一定会指定版本号,可能使用通配符(例如***)未自动获取满足条件的最新版本。
(在本题中,只考虑这种情况表示匹配任意版本例如2.2.*,可以匹配所有2.2.1,2.2.2等;)
现在会给出一个版本列表,并给出使用者的匹配规则,找出符合版本规则而且满足条件的最新版本,并输出,如果没有找到相应结果,则输出0.
输入
输入第一行是一个整数N,之下N(0输出
5
2.1.4
2.5.7
3.4.6
2.1.8
2.1.0
2.1.*
样例输出
2.1.8
2.在去哪儿,前端工程师,在日常工作中,经常会使用到模版引擎,比较常用的有jQueryTemplate、artTemplate、Mustache等。
现在要求你实现一个简单的类似于Mustache的模版引擎,根据传入的模版字符串和数据,替换模版字符串中的标签,输出出对应的HTML片段。
需要支持的模版标签有:
(1){{keyName}}:
输出对象中属性名为keyName的值。
需要支持多级属性,比如{{keyName.name1.name2}};
(2){{keyName}}content{{/keyName}}:
keyName对应的值为“真”时,输出content,为“假”时不输出
(3){{#arr}}content{{/arr}}:
arr对应的值为“假“时,输出content为“真”时不输出;
(4){{.}}表示数组遍历中当前的元素(可以只考虑基本数据类型)。
(5){{^keyName}}content{{/keyName}}:
keyName对应的值为“假”时,输出content,为“真”时不输出;
注意:
如果给定的数据中,没有对应的属性字段,标签替换为空。
输入:
第一行出入模版字符串(长度不超过1000),字符串中可以包含模版标签,也可以不包括标签。
第二行输入需要渲染的数据(JSON字符串,长度不超过1000)。
输出:
输出对应的HTML的片段。
代码输入:
WelcomeQunar-Man
xxx去哪儿秋招笔试试题
一、编程题
1/3
日本旅行
时间限制:
C/C++语言1000MS;其他语言3000MS
内存限制:
C/C++语言65536KB;其他语言589824KB
题目描述:
楚乔、宇文玥和燕洵在日本旅行,经过了几天的游玩之后,钱包里出现了大量硬币,楚乔决定用钱包里的硬币为宇文玥和燕洵在自动贩卖机买水。
楚乔的钱包里有1元、5元、10元、50元、100元和500元硬币各C1,C5,C10,C50,C100,C500枚。
现在要用这些硬币来到自动贩卖机买价格为A的饮料,假设自动贩卖机所需的硬币金额必须是刚刚好,不能多也不能少,最少需要多少枚硬币?
限制条件
0<=C1,C5,C10,C50,C100,C500<=1000000000
0<=A<=1000000000
依次输入C1,C5,C10,C50,C100,C500和A,以空格分隔,输出最少所需硬币数,如果该金额不能由所给硬币凑出,则返回NOWAY
输入
依次输入C1,C5,C10,C50,C100,C500和A,以空格分隔
输出
输出最少所需硬币数,如果该金额不能由所给硬币凑出,则返回NOWAY
样例输入
321302620
样例输出
6
2/3
带权的DAG节点排序
时间限制:
C/C++语言1000MS;其他语言3000MS
内存限制:
C/C++语言65536KB;其他语言589824KB
题目描述:
DAG即DirectedAcyclicGraph,有向无环图.用DAG可以描述一些有依赖关系的任务组,而这些任务还有另外一个属性,即都有一个权重,标示这个任务的重要性.
我们需要你来实现一个算法,对DAG里面的节点进行排序,保证排序不违背DAG的依赖关系,即一个任务A如果排在任务B前面,那么在DAG中不能存在由B到A的路径.另外一个要求就是,让权重大的任务尽量优先执行.
输入
在第一行给定DAG的节点数n和边数e.
后面n行,每一行是节点的标号和权重,seqweight.
最后e行,每一行是对于边的描述,st.
输出
排序好的节点标号,在一行内输出,空格隔开.
样例输入
44
12
23
35
44
12
13
24
34
样例输出
1324
3/3
模拟LRUCache
时间限制:
C/C++语言1000MS;其他语言3000MS
内存限制:
C/C++语言65536KB;其他语言589824KB
题目描述:
LRU全称是LeastRecentlyUsed,LRUCache的核心设计思想是,如果一个数据在最近一段时间没有被访问到,那么在将来它被访问的可能性也很小。
在cache大小固定的情况下,如果cache满了,会把最近最久没有访问的元素删掉.
实现程序禁用各种语言基础库中的LinkedHashMap.
输入
在第一行给定cache的大小m,对cache执行读写操作的次数n.
从第二行开始,有n行操作命令.
操作有两种情况,put和get.
put命令格式是putkeyvalue,表示向cache写入数据.
get命令格式是getkey,标示从cache读取数据.
输出
对于n行命令中的每一行get命令.
如果对于数据存在,就把value在单独一行打印出来.
如果不存在,就在单独一行打印null.
样例输入
35
putab
putxy
putdkkk
putzzzlll
geta
样例输出
null
Hint
直接在输入的时候进行判断即可
xxx去哪儿软件开发工程师校招试题
一、编程题
编程题|30.0分1/3
最小与最大排列
时间限制:
C/C++语言1000MS;其他语言3000MS
内存限制:
C/C++语言65536KB;其他语言589824KB
题目描述:
定一个大小为m的字符集合,打印其全部k排列中按照字典序排序后最小和最大的两个排列。
其中m,k>0,且k≤m
输入
第一行:
空格分割的字符,互不重复
第二行:
排列数k
输出
第一行:
字典序排序后的最小排列
第二行:
字典序排序后的最大排列
样例输入
abc
2
样例输出
ab
cb
编程题|30.0分2/3
BST判定
时间限制:
C/C++语言3000MS;其他语言5000MS
内存限制:
C/C++语言65536KB;其他语言589824KB
题目描述:
判断给定的二叉树是否为二分查找树。
假设树的每个节点以整数为键值,且不同节点的键值互不相等。
二分查找树成立的判定条件:
对任何非叶子节点A,如果A存在左子树,则A的键值大于其左子树所有节点的键值,且,如果A存在右子树,则A的键值小于其右子树所有节点的键值。
输入
第一行:
根节点键值;
第二行开始,二叉树的结构,每行代表一组根节点与左右子节点的对应关系,-1代表空节点。
格式:
根节点键值:
左子节点键值|右子节点键值
例如,
5:
3|-1
表示键值为5的节点,左子节点的键值为3,右子节点为空节点
假设:
所有节点的键值非负,且不超过1023
输出
判断结果,0表示输入不是二分查找树,1表示输入是二分查找树
样例输入
5
5:
4|7
4:
3|8
7:
2|-1
3:
-1|-1
8:
-1|-1
2:
-1|-1
样例输出
0
编程题|40.0分3/3
乘方取模
时间限制:
C/C++语言1000MS;其他语言3000MS
内存限制:
C/C++语言65536KB;其他语言589824KB
题目描述:
给定非负整数a,b,m,利用基本的算术运算符(+-*/%)以及位运算符,计算abmodm
输入
一行三个非负整数,空格分隔,分为abm的值,其中m不为0
输出
abmodm的结果
样例输入
2105
样例输出
4