阿里 mysql 代码笔试_web前端大厂面试题(阿里云笔试篇)

之前分享的web前端面试题,获得了不错的关注。今天小编准备继续努力出栏,希望能对大家的前端面试有所帮助。5秒钟后,阿里云前端笔试题及思路详解将呈现眼前,请查收~

1、阿里云产品线十分丰富,拥有ECS、RDS等数百款产品,每个产品都具有一些通用属性,例如:ID(id),地域(region),名称(name),同时每个产品又包含自己特有的属性。 ECS拥有实例(instance)属性,可选值有ecs.t1.small、ecs.t3.small、ecs.t1.large RDS拥有数据库类型(dbType)属性,可选值有mysql、mssql、PPAS,

请使用你的面向对象知识,基于ES6语法编写ECS、RDS两个类,并实现如下方法: 1. config() 返回一个字面量对象,可以拿到所有的成员变量。 2. buy() 返回一个URL,格式为 https://www.aliyun.com/buy?id=xxx®ion=xxx&name=xxx&每个产品自己特有的成员变量

class Property{

constructor(_identify,_region,_name){

this.id=_identify;

this.region=_region;

this.name=_name;

}

buy(){

var _url="https://www.aliyun.com/buy?";

for(let _key in this){

if(this.hasOwnProperty(_key) && typeof(this[_key])!=="object"){

_url+=_key+"="+this[_key]+"&";

}

}

if(_url.indexOf("&")>0){

return _url.replace(/&$/g,"");

}

return _url;

}

}

class ECS extends Property{

constructor(_identify,_region,_name){

super(_identify,_region,_name);

}

config(_value){

this.instance=_value;

return this;

}

}

let _ecs=new ECS(1,"beijing","ECS");

console.log(_ecs.config("ecs.t1.small"));

console.log(_ecs.buy());

class RDS extends Property{

constructor(_identify,_region,_name){

super(_identify,_region,_name);

}

config(_type){

this.dbType=_type;

return this;

}

}

var _rds=new RDS(2,"beijing","RDS");

console.log(_rds.config("mysql"));

console.log(_rds.buy());

解题思路:1、根据面试题描述,数百种产品均有通用的属性,那么就选择一次定义多次使用的,能达到这种效果的而且又要求面向对象,所以优先考虑继承。把公共的属性和方法放到父类。子类实现继承即可。

2、每个产品均有自己的特有属性,那么在调用config方法的时候传入配置参数,同时还要求返回一个字面两对象,还要能拿到所有属性,所以直接返回当前对象即可。

3、buy方法要求返回url,此时查看url中都包含哪些属性,我们发现均为当前产品对象的属性。所以遍历拼接即可。

2、请将编写一个函数将 [3, 5, 7, 2, 1, 8, 9, 0, 5, 23, 15, 5, 1, 5, 8] 这样的一个组件中重复的元素去除掉

function splice(){

var _arr=[3,5,7,2, 1, 8, 9, 0, 5, 23, 15, 5, 1, 5, 8];

for(var i=0;i<_arr.length>

for(var n=i+1;n<_arr.length>

if(_arr[i]===_arr[n]){

_arr.splice(n--,1);//因为元素数量减少了,如果向前挪动一个下标3个以上的连续重复的元素会有遗漏 }

}

}

console.log(_arr);

}

splice();

解题思路:数组去重是比较常规的面试题,主要考察一个知识点数组的splice方法的使用。但是阿里出这个题个人认为他更注意的是你的认真态度,或者思维缜密性。因为在题中并没有连续3个重复的数字。在注释那一行我写的很清楚,这题的不用n—结果也是对的。但是连续出现三个数字的话,你会发现不能完全清除重复的数字。

3、编写一个递归函数查询tree给定节点的祖先链(包含给定节点),要求:要求查出祖先链后函数立即返回,不再继续递归遍历后面的节点

函数要有一个参数来指定tree的节点的主键名

使用示例代码中的options作为tree结构的参考

const options = [

{

id: 'zhejiang',

text: 'Zhejiang',

children: [

{

id: 'hangzhou',

text: 'Hangzhou',

children: [

{

id: 'xihu',

text: 'West Lake'

}

]

}

]

},

{

id: 'jiangsu',

text: 'Jiangsu',

children: [

{

id: 'nanjing',

text: 'Nanjing',

children: [

{

id: 'zhonghuamen',

text: 'Zhong Hua Men'

}

]

}

]

}

];

function recursion(_primary,_options){

var _parent=null;

for(var i=0;i<_options.length>

if(_options[i].id!==_primary){

if(!_options[i].children){

return null;

}

_parent=recursion(_primary,_options[i].children);

if(_parent){

_parent.push(_options[i])

return _p

解题思路:题目要求需要递归,那么就考察我们对递归算法的了解。根据给定的节点主键查询父路径,那么首先我们要找到主键所在的位置,然后一路返回,此题的难度主要在于,当找到后立即停止,而不能继续浪费查询。在这一点上如果直接无条件return的话,第一个对象递归完就回结束递归。

4、将类似以下JSON表示的树状结构(可以无限层级)

通过parseDOM函数(使用document.createElement,document.createTextNode,appendChild等方法),生成一颗DOM树(返回一个element元素)

const JsonTree = {

"tagName": "ul",

"props": {

"className": "list",

"data-name": "jsontree"

},

"children": [

{

"tagName": "li",

"children": [{

"tagName": "img",

"props": {

"src": "//img.alicdn.com/tps/TB1HwXxLpXXXXchapXXXXXXXXXX-32-32.ico",

"width": "16px"

}

}]

},

{

"tagName": "li",

"children": [{

"tagName": "a",

"props": {

"href": "https://www.aliyun.com",

"target": "_blank"

},

"children": "阿里云"

}]

}

]

};

function parseDOM(jsontree){

const {tagName,props,children} = jsontree;

const element = document.createElement(tagName);

//请实现过程 //.... for(let _key in props){

element[_key]=props[_key];

}

if(children && typeof(children)==="object"){

for(let i=0;i

element.appendChild(parseDOM(children[i]));

}

}else{

if(children){

element.appendChild(document.createTextNode(children));

}

}

return element;

}

document.getElementsByTagName(“body")[0].appendChild(parseDOM(JsonTree));

解题思路:首先这个面试题很切合实际,在日常的开发过程中经常会遇到这种类型的数据。主要考我们对递归算法的熟练程度。具体的知识点就是题中列出的3个DOM操作的知识。参考答案的思路是把每次创建完成的节点添加到父元素中。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值