牛客网刷题记录(2)

来源(第四范式2019前端面试题):https://www.nowcoder.com/profile/2496345/test/21517591/318685#summary

1.折半查找

已知一个有序表为(12,18,24,35,47,50,62,83,90,115,134),当折半查找值为90的元素时,经过()次比较后查找成功?

2次

第一次折半得到62,83,90,115,134,第二次折半时可直接得到90。

2.常用图片格式

SVG(无损压缩、支持动画)
1、矢量图形,文件比较小,同时也能提供高清晰的画面,适合于直接打印或输出;
2、图像文件可读,易于修改和编辑;
3、可以方便的创建文字索引,从而实现基于内容的图像搜索;
4、可以用来动态生成图形。也可以与现有技术可以互动融合。

JPEG(有损/无损)
1、支持渐进传输,传输过程中图片从模糊到清晰;
2、支援高动态范围成像、支援图片透明度。

GIF(无损压缩、支持动画、8位压缩最多处理256种颜色)
1、优秀的压缩算法使其在一定程度上保证图像质量的同时将体积变得很小;
2、可插入多帧,从而实现动画效果;
3、可设置透明色以产生对象浮现于背景之上的效果。

PNG(无损压缩)
1、分为8位,24位,32位。其中PNG24不支持透明;
2、渐进显示和流式读写;
3、保留图像名称、作者、版权、创作时间。

通俗理解有损压缩和无损压缩:有损压缩删除了不易被人眼察觉的颜色细节,减少了图片在内存和磁盘上的占用空间。无损压缩则首先记录图片的那些颜色是相同的,哪些颜色是不同的,然后压缩相同的颜色,减少了磁盘占用空间,但是不能减少内存占用量——这是因为当从磁盘读取图片时,丢失的颜色都会被填回来。如果要减少图片内存占用量就必须用有损压缩方法。

3.深拷贝与浅拷贝

基本数据类型的简单的赋值就是深拷贝,所以在说深拷贝和浅拷贝区别的时候我们一般考虑的是引用数据类型。

let a = {
age: 1
}
let b = a
a.age = 2
console.log(b.age) // 2

let a = {
age: 1
}
let b = Object.assign({}, a)
a.age = 2
console.log(b.age) // 1

let a = {
age: 1
}
let b = {...a}
a.age = 2
console.log(b.age) // 1

3.HTTPS和HTTP区别

HTTP1.0中,默认使用的是短连接。也就是说,浏览器和服务器每进行一次HTTP操作,就会建立一次连接,但是任务结束就会中断连接。

HTTP1.1中,默认使用长连接。使用HTTP长连接会在响应头中加入Connection:keep-alive。

牛客网刷题记录(2)_第1张图片

在 OSI 网络模型中,HTTP 工作于应用层,而 HTTPS 工作在传输层

4.当一个Ajax请求由于跨域问题导致请求不能顺利完成时,你觉得是哪个环节导致的?

浏览器不会将存在跨域限制的服务器端响应正常交给客户端代码去处理。

5.25 辆车分成 5 组,每场比赛最多只能 5 辆车同时比赛,请问最少进行几场比赛可以赛出前三名?

答案:7次

解析:
第一步, 25人分五组进行五次比赛 假设各组排名 a组:a1,a2,a3,a4,a5。 b组:b1,b2,b3,b4,b5。 c组:c1,c2,c3,c4,c5。 d组:d1,d2,d3,d4,d5。 e组:e1,e2,e3,e4,e5。假设比赛结果是a1,b1,c1,d1,e1.
第二步,第六场比赛结果排名是a1,b1,c1,d1,e1,那么第一名肯定是a1,要找出第二名第三名,d1,e1及其组员肯定无缘前三总决赛,而a1的第二第三名a2 a3可能入选前三,b1的b2也可能是第三名,所以需要比第七场
第三步,第七场比赛人员是a2 a3 b1 b2 c1,比赛的前两名是总排名的二三名。

6.执行如下代码,控制台的输出是什么?

var arr = [];
console.log(typeof arr, Object.prototype.toString.call(arr));

object [object Array]

Object.prototype.toString.call(arr))用于检验对象类型。

关于typeof、instanceof、Object.prototype.toString.call(arr))的区别专门写一篇文章。

7.获取input节点的正确方法:

document.getElementsByTagName('input')[0]

关于这几个的区分,我们会重新写篇文章总结。

8.稳定排序和不稳定排序

选择排序、快速排序、希尔排序、堆排序不是稳定的排序算法,
而冒泡排序、插入排序、归并排序和基数排序是稳定的排序算法

堆选快希不稳定,堆选归基与初始队列无关

更多可以参考:https://www.cnblogs.com/codingmylife/archive/2012/10/21/2732980.html

9.请问wrap这个div的高度是什么?


 
 
a
b
c

因为他都是向左浮动他的宽度是200,所以wrap的高度应该是,B+C=150px
牛客网刷题记录(2)_第2张图片

部分无视和完全无视的区别?需要注意的是,使用float脱离文档流时,其他盒子会无视这个元素,但其他盒子内的文本依然会为这个元素让出位置,环绕在周围(可以说是部分无视)。而对于使用absolute position脱离文档流的元素,其他盒子与其他盒子内的文本都会无视它。(可以说是完全无视)。

如果C 没有 display: inline-block; 那么C会直接和a重叠,虽然文本让出位置也就是c会出现在a的下边界下方. 但是高度仍然是100px.这里的关键在于 display: inline-block 使得 C内部形成了BFC, BFC不与float元素重叠. 所以会出现在紧贴着a的右边界以及b的下边界的位置出现.

10.[“1”, “2”, “3”].map(parseInt) 的结果是什么?

[1, NaN, NaN]

解析:

//其中radix为可选参数   按照radix进制进行转换,当为0的时候默认为10进制
parseInt(string,radix) 

//map对array中的每一项传入回调函数得到一个新的数组,结果不改变原数组
//其中item为array中的值,index为array的对应索引
array.map(function callBackFn(item,index,array){}) 

//str超出进制基数大小得到NaN                                                   
于是原式可以转换为:[parseInt("1",0),parseInt("2",1),parseInt("3",2)]  

parseInt()函数

parseInt(string, radix)

string 必需。要被解析的字符串。

radix 可选。表示要解析的数字的基数。该值介于 2 ~ 36 之间。如果省略该参数或其值为 0,则数字将以 10 为基础来解析。如果它以 “0x” 或 “0X” 开头,将以 16 为基数。如果该参数小于 2 或者大于 36,则 parseInt() 将返回 NaN。

参考文章:https://blog.csdn.net/freshlover/article/details/19034079

11.给定一个字符串(数字或大小写字母), 找出最长的对称的子串(如有多个,输出任意一个)。

例如:
输入:“abbaad”
输出:“abba”

12.给定两个数字(0-9)字符串(长度不限)求它们的乘积。

var multiply = function(num1, num2) {
    if(num1 == "0" || num2 == '0'){
        return '0' ;
    }
    var res = new Array(num1.length + num2.length) ;
    for(var i = 0; i < res.length; i ++){
        res[i] = 0 ;
    }
     
    var a = num1.split('').reverse() ;
    var b = num2.split('').reverse() ;
     
    for(var i = 0; i < a.length; i ++){
        for(var j = 0; j < b.length; j ++){
            res[i+j] += a[i]*b[j] ;
        }
    }
     
    var carry = 0 ;
    var str = [] ;
     
    for(var i = 0; i < res.length; i ++){
        res[i] += carry ;
        carry = parseInt(res[i] / 10 );
        res[i] = res[i] % 10 ;
        str[i] = res[i] ;
    }
     
    str = str.reverse().join("") ;
     
    var index = 0 ;
    while(str[index] === "0"){
        index ++ ;
    }
     
    return str.substring(index) ;
     
};
console.log(multiply(readline(),readline())) ;

你可能感兴趣的:(刷题)