面試-編程題目

1. TOPN 排序

有一字符串?dāng)?shù)組string(),對應(yīng)有一個(gè)權(quán)重?cái)?shù)組int[ ]沉唠,現(xiàn)按照如下規(guī)則取出字符串?dāng)?shù)組的top5:
1)對每個(gè)數(shù)組求綜合得分古劲,綜合得分=權(quán)重得分+順序得分掰曾,權(quán)重打得分對應(yīng)的權(quán)重值授账,順序得分為字符串在字符串?dāng)?shù)組中的順序號(從1開始)
2)按綜合得分升序排列,綜合得分相同改备,按照原先順序排列控漠,然后輸出

function top5_parms(str,weight,n) {
    var _sum=[];
    var _top5=[];
    var index;
    for(var i=0;i<str.length;i++){
        _sum[i]=i+weight[i]+1;
    }
    for(var k=0;k<n;k++){
        var _max=Math.max.apply(Math,_sum);
        var _min=Math.min.apply(Math,_sum);
        for(var j=0;j<_sum.length;j++){
            if(_sum[j]==_min){
                index=j;
                console.log(index);
                _top5[k]=str[index];
                _sum.splice(index,1,_max+1);
                break;
            }
        }
    }
    console.log(_top5.join(""));  // CDBFA
}
var _str=["A","B","C","D","E","F","G","H"];
var _weight=[7,5,3,2,6,1,4,9];
top5_parms(_str,_weight,5);

2. phoneNumber

A mapping of digit to letters (just like on the telephone buttons) is given below.
Input:Digit string "23"
Output: ["ad", "ae", "af", "bd", "be", "bf", "cd", "ce", "cf"].

phonenumber.png
function phnum(n1,n2){
  var numbs = {'2':'abc', '3':'def', '4':'ghi', '5':'jkl', '6':'mno', '7':'pqrs', '8':'tuv', '9':'wxyz'};
  var res=[];
  if((n1==1)||(n2==1)){
      return null;
  }
  for(var i=0;i<numbs[n1].length;i++){
      for(var j=0;j<numbs[n2].length;j++){
          res.push(numbs[n1][i]+numbs[n2][j]);
      }
  }
  return res.toString()
}
phnum(1,3);

3. arguments 對象 和 正則

(function(window) {
            function fn(str) {
                this.str = str;
            }
            fn.prototype.format = function() {
                var arg = arguments;
                return this.str.replace(/\?\?\{(\d+)\}/ig, function(a, b) {
                    return arg[b] || '';
                })
            };
            window.fn = fn;
        })(window);

// use
var t = new fn('<p><a href="??{0}">??{1}</a><span>??{2}</span></p>');
console.log(t.format('http://Alibaba.com','Alibaba','welcome'));

4. MySQL查詢語句中加limit

對于MySQL查詢語句,我們可以加上limitN來限制查詢條數(shù)悬钳,但是如果查詢語句中已經(jīng)加油limitN盐捷,則不能再加limitN,請寫程序判斷sql查詢語句是否加上limit N默勾。答案為yes和no碉渡,通過逗號分隔,例如yes母剥,no滞诺,no

function add_limit(_str) {
    var res=[];
    for(var i=0;i<_str.length;i++){
        if(_str[i].indexOf("limit")==-1){
            res.push("yes");
        }else{
            res.push("no");
        }
    }
    console.log(res.toString());
}
var _strlist=[
    "select * from table",
    "select * from table limit 1000",
    "select * from (select * from table limit 10000) sub_qry"];
add_limit(_strlist);

5. 列出JavaScript的繼承實(shí)現(xiàn)方式,并使用一種你喜歡的方式實(shí)現(xiàn)如下繼承

1)parent包含 共有方法:pubFun环疼;私有方法:priFun
2)Child繼承parent
使用es6實(shí)現(xiàn)

1)繼承第一種方式:對象冒充
function Parent(username){
  this.username = username;
  this.hello = function(){
   alert(this.username);
  }
}
function Child(username,password){
  //通過以下3行實(shí)現(xiàn)將Parent的屬性和方法追加到Child中习霹,從而實(shí)現(xiàn)繼承
  //第一步:this.method是作為一個(gè)臨時(shí)的屬性,并且指向Parent所指向的對象炫隶,
  //第二步:執(zhí)行this.method方法淋叶,即執(zhí)行Parent所指向的對象函數(shù)
  //第三步:銷毀this.method屬性,即此時(shí)Child就已經(jīng)擁有了Parent的所有屬性和方法 
  this.method = Parent;
  this.method(username);//最關(guān)鍵的一行
  delete this.method;
  this.password = password;
  this.world = function(){
   alert(this.password);
  }
}
var parent = new Parent("zhangsan");
var child = new Child("lisi","123456");
parent.hello();
child.hello();
child.world();

2伪阶、繼承第二種方式:call()方法方式

call方法是Function類中的方法
call方法的第一個(gè)參數(shù)的值賦值給類(即方法)中出現(xiàn)的this
call方法的第二個(gè)參數(shù)開始依次賦值給類(即方法)所接受的參數(shù)

function test(str){
  alert(this.name + " " + str);
}
var object = new Object();
object.name = "zhangsan";
test.call(object,"langsin");//此時(shí)煞檩,第一個(gè)參數(shù)值object傳遞給了test類(即方法)中出現(xiàn)的this,而第二個(gè)參數(shù)"langsin"則賦值給了test類(即方法)的str
function Parent(username){
  this.username = username;
  this.hello = function(){
   alert(this.username);
  }
}
function Child(username,password){
  Parent.call(this,username);
  this.password = password;
  this.world = function(){
   alert(this.password);
  }
}
var parent = new Parent("zhangsan");
var child = new Child("lisi","123456");
parent.hello();
child.hello();
child.world();

3栅贴、繼承的第三種方式:apply()方法方式
apply方法接受2個(gè)參數(shù)斟湃,
A、第一個(gè)參數(shù)與call方法的第一個(gè)參數(shù)一樣檐薯,即賦值給類(即方法)中出現(xiàn)的this
B凝赛、第二個(gè)參數(shù)為數(shù)組類型,這個(gè)數(shù)組中的每個(gè)元素依次賦值給類(即方法)所接受的參數(shù)

function Parent(username){ 
  this.username = username; 
  this.hello = function(){ 
   alert(this.username); 
  } 
} 
function Child(username,password){ 
  Parent.apply(this,new Array(username)); 
  this.password = password; 
  this.world = function(){ 
   alert(this.password); 
  } 
} 
var parent = new Parent("zhangsan"); 
var child = new Child("lisi","123456"); 
parent.hello(); 
child.hello(); 
child.world();

4坛缕、繼承的第四種方式:原型鏈方式墓猎,
即子類通過prototype將所有在父類中通過prototype追加的屬性和方法都追加到Child,從而實(shí)現(xiàn)了繼承

function Person(){ 
} 
Person.prototype.hello = "hello"; 
Person.prototype.sayHello = function(){ 
  alert(this.hello); 
} 
function Child(){ 
} 
Child.prototype = new Person();//這行的作用是:將Parent中將所有通過prototype追加的屬性和方法都追加到Child祷膳,從而實(shí)現(xiàn)了繼承 
Child.prototype.world = "world"; 
Child.prototype.sayWorld = function(){ 
  alert(this.world); 
} 
var c = new Child(); 
c.sayHello(); 
c.sayWorld();

5陶衅、繼承的第五種方式:混合方式
混合了call方式屡立、原型鏈方式

function Parent(hello){ 
  this.hello = hello; 
} 
Parent.prototype.sayHello = function(){ 
  alert(this.hello); 
} 
function Child(hello,world){ 
  Parent.call(this,hello);//將父類的屬性繼承過來 
  this.world = world;//新增一些屬性 
} 
Child.prototype = new Parent();//將父類的方法繼承過來 
Child.prototype.sayWorld = function(){//新增一些方法 
  alert(this.world); 
} 
var c = new Child("zhangsan","lisi"); 
c.sayHello(); 
c.sayWorld();

6.編寫SUM函數(shù)

實(shí)現(xiàn)不定量的參數(shù)求和直晨,非number類型參數(shù)需要過濾

function sumArg(arguments) {
    var res=0;
    for(var i=0;i<arguments.length;i++){
        if(isNaN(arguments[i])){
            continue;
        }
        res+=arguments[i];
    }
    console.log(res);
}
var arguments=[1,2,"welcome",4];
sumArg(arguments);

7. 尋找周期

給定一個(gè)日期數(shù)組Date[]搀军,數(shù)組按照某一周期遞增,尋找該周期勇皇。
輸出結(jié)構(gòu)請輸出數(shù)字加單位(year罩句、month、day敛摘、hour门烂、minute、second)的形式兄淫,如5month屯远、10second。

var _parms_date=["20170101 00:02:01","20170101 05:04:02","20170101 10:06:03","20170101 15:08:04"];

function countRangeDate(parms) {
    var res=[];
    var _newparms=[];
    for(var i=0;i<parms.length;i++){
        var _stri=parms[i].substr(0,4)+"-"+parms[i].substr(4,2)+"-"+parms[i].substr(6,2)+" "+parms[i].substr(9);
        _newparms.push(new Date(_stri));
    }

    for(var j=0;j<_newparms.length-1;j++){
        var _year=(_newparms[j+1].getFullYear()-_newparms[j].getFullYear());
        var _month=(_newparms[j+1].getMonth()-_newparms[j].getMonth());
        var _date=(_newparms[j+1].getDate()-_newparms[j].getDate());
        var _time=(_newparms[j+1].getTime()-_newparms[j].getTime());

        var _hour=parseInt(_time/1000/60/60);
        var _minute=parseInt(_time/1000/60%60);
        var _second=_time/1000%60;

        _year+=_year!=0?"year":"";
        _month+=_month!=0?"month":"";
        _date+=_date!=0?"day":"";
        _hour+=_hour!=0?"hour":"";
        _minute+=_minute!=0?"minute":"";
        _second+=_second!=0?"second":"";

        res.push(_year+_month+_date+_hour+_minute+_second);
    }
    console.log(res);
    return(res[0]);
}
countRangeDate(_parms_date);

8.字符串排序

給定一個(gè)字符串?dāng)?shù)組string [] 捕虽,按照規(guī)則進(jìn)行排序慨丐,規(guī)則A->B意為A必須在B左邊。輸出所有可能的排序結(jié)果泄私,輸出結(jié)果按照字符序排列房揭,用逗號隔開。

沒有做出來
function test(parms,rules){

        var str=[];
        /*排序,排列出所有rules的可能情況*/
        var sum=1;
        for(var x=1;x<=rules.length;x++){
            sum*=x;
        }
        console.log(sum);
        var index_arr=[];
        for(var xu=0;xu<sum;xu++){
            var index=[];
            for(var indextemp=0;indextemp<rules.length;indextemp++){
                var indexttt=parseInt(Math.random()*rules.length);
                if(index.indexOf(rules[indexttt])==-1){
                    index.push(rules[indexttt]);
                }else{
                    indextemp--;
                }
            }
            index_arr[xu]=index;
            for(var ind=0;ind<index_arr.length-1;ind++){
                if(index_arr[index_arr.length-1].join('')==index_arr[ind].join('')){
                    xu--;
                }
            }
        }
        var temp=[].concat(parms);
        /*數(shù)組*/
        for(var t=0;t<sum;t++){
//            var temp=parms;
//            console.log(temp);
            for(var i=0;i<index_arr[t].length;i++){
                var a1=index_arr[t][i].split('->')[0];
                var a2=index_arr[t][i].split('->')[1];
                var index1=temp.indexOf(a1);
                var index2=temp.indexOf(a2);
                /*刪除再加到最前面晌端,最后面*/
                temp.splice(index1,1);
                temp.unshift(a1);
                temp.splice(index2,1);
                temp.push(a2);
            }
            str[t]=[];
            str[t].push(temp);
            console.log(str[t].join(''));
        }

    }

    var parms=['A','B','C','D'];
    var rules=['A->C','B->C','D->C'];
//    var parms=['A','B','C','D','E','F'];
//    var rules=['A->C','C->B','C->D','A->B','D->F','C->E','B->E'];
    test(parms,rules);

9.解析類型

給定一個(gè)字符串捅暴,解析出相應(yīng)的類型(只有Boolean,number咧纠,date蓬痒,string四種)
Boolean 類型:true、false惧盹,不區(qū)分大小寫
number 包括整數(shù)乳幸,浮點(diǎn)型,科學(xué)計(jì)數(shù)
date 滿足yyyyMMdd 或者yyyyMMdd hh:mm:ss

function typeStr() {
    var _str=[-100.1,"ABCD","TRUE","20170101 03:05:06"];
    var _regB=/(true|false)/ig;
    var _regD=/^[1-9]\d{7}(||\s{0,2}\d{2}\:\d{2}\:\d{2})/;
    var _res=[];

    for(var i=0;i<_str.length;i++){
        if(_regB.test(_str[i])){
            console.log("Boolean");
            _res.push("Boolean");
        }else if(typeof(_str[i])=="number"){
            console.log("Number");
            _res.push("Number");
        }else if(_regD.test(_str[i])){
            console.log("Date");
            _res.push("Date");
        }else{
            console.log("String");
            _res.push("String");
        }
    }
    console.log(_regD.test(_str[1]));
    console.log(_res.toString());
    return _res.toString();
}
typeStr();
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末钧椰,一起剝皮案震驚了整個(gè)濱河市粹断,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌嫡霞,老刑警劉巖瓶埋,帶你破解...
    沈念sama閱讀 218,941評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異诊沪,居然都是意外死亡养筒,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,397評論 3 395
  • 文/潘曉璐 我一進(jìn)店門端姚,熙熙樓的掌柜王于貴愁眉苦臉地迎上來晕粪,“玉大人,你說我怎么就攤上這事渐裸∥紫妫” “怎么了装悲?”我有些...
    開封第一講書人閱讀 165,345評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長尚氛。 經(jīng)常有香客問我诀诊,道長,這世上最難降的妖魔是什么阅嘶? 我笑而不...
    開封第一講書人閱讀 58,851評論 1 295
  • 正文 為了忘掉前任属瓣,我火速辦了婚禮,結(jié)果婚禮上讯柔,老公的妹妹穿的比我還像新娘抡蛙。我一直安慰自己,他們只是感情好魂迄,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,868評論 6 392
  • 文/花漫 我一把揭開白布溜畅。 她就那樣靜靜地躺著,像睡著了一般极祸。 火紅的嫁衣襯著肌膚如雪慈格。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,688評論 1 305
  • 那天遥金,我揣著相機(jī)與錄音浴捆,去河邊找鬼。 笑死稿械,一個(gè)胖子當(dāng)著我的面吹牛选泻,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播美莫,決...
    沈念sama閱讀 40,414評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼页眯,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了厢呵?” 一聲冷哼從身側(cè)響起窝撵,我...
    開封第一講書人閱讀 39,319評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎襟铭,沒想到半個(gè)月后碌奉,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,775評論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡寒砖,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,945評論 3 336
  • 正文 我和宋清朗相戀三年赐劣,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片哩都。...
    茶點(diǎn)故事閱讀 40,096評論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡魁兼,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出漠嵌,到底是詐尸還是另有隱情咐汞,我是刑警寧澤判哥,帶...
    沈念sama閱讀 35,789評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站碉考,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏挺身。R本人自食惡果不足惜侯谁,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,437評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望章钾。 院中可真熱鬧墙贱,春花似錦、人聲如沸贱傀。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,993評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽府寒。三九已至魁衙,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間株搔,已是汗流浹背剖淀。 一陣腳步聲響...
    開封第一講書人閱讀 33,107評論 1 271
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留纤房,地道東北人纵隔。 一個(gè)月前我還...
    沈念sama閱讀 48,308評論 3 372
  • 正文 我出身青樓,卻偏偏與公主長得像炮姨,于是被迫代替她去往敵國和親捌刮。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,037評論 2 355

推薦閱讀更多精彩內(nèi)容

  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法舒岸,類相關(guān)的語法绅作,內(nèi)部類的語法,繼承相關(guān)的語法蛾派,異常的語法棚蓄,線程的語...
    子非魚_t_閱讀 31,639評論 18 399
  • 第5章 引用類型(返回首頁) 本章內(nèi)容 使用對象 創(chuàng)建并操作數(shù)組 理解基本的JavaScript類型 使用基本類型...
    大學(xué)一百閱讀 3,237評論 0 4
  • php usleep() 函數(shù)延遲代碼執(zhí)行若干微秒。 unpack() 函數(shù)從二進(jìn)制字符串對數(shù)據(jù)進(jìn)行解包碍脏。 uni...
    思夢PHP閱讀 1,984評論 1 24
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理梭依,服務(wù)發(fā)現(xiàn),斷路器典尾,智...
    卡卡羅2017閱讀 134,661評論 18 139
  • 為了用webpack打包CSS文件役拴,必須在在你的JavaScript代碼中引入CSS文件, 并運(yùn)用 css-loa...
    炎武森祿閱讀 959評論 0 1