面试知识总结(二)

1.What really happens when you negivate to a URL

第一种简单的说法:DNS域名解析的过程(要得到ip地址)

根域名服务器  根域名服务器是最高层次的域名服务器

顶级域名服务器    org com edu

权限域名服务器   abc.com

域名解析过程:主机向本地域名服务器的查询一般都是采用递归查询。本地域名服务器向

第一步:客户机提出域名解析请求,并将该请求发送给本地的域名服务器

第二步:当本地的域名服务器收到请求后,先查询本地缓存

第三步:如果本地缓存没有改记录,则本地域名服务器就直接把请求发给根域名服务器,然后根域名服务器再返回给本地域名服务器一个所查询域(顶级)的地址

第四步:本地域名服务器再向上一步返回的顶级域名服务器发送请求,然后接收请求的服务器查询自己的缓存,如果没有改记录,则返回相关的下级域名服务器(权限域名服务器)的地址

第五步:重复第四步

https://blog.csdn.net/weimibreeze/article/details/45367945  英文版很详细的解释

1.你在浏览器上输入一个URL

2.浏览器查询域名的IP地址

3.浏览器给web服务器发送一个HTTP请求

  • get方法能够发送的数据只有几百字节,如果表单中的数据超过这一长度,则必须使用post方法来发送。
  • URI:统一资源标识符。”对什么“的部分,URI的内容是一个存放网页数据的文件名或者是一个CGI程序的文件名。

 

4.Facebook服务器返回一个永久的重定向

  • 1XX告知请求的处理进度和情况
  • 2XX成功
  • 3XX表示需要进一步操作
  • 4XX表示客户端错误
  • 5XX表示服务器错误  比如502,网关错误

5.浏览器跟随重定向

6.服务器“处理”请求

7.服务器发送回来一个HTML响应

8.The browser begins rendering the HTML

9.The browser sends requests for objects embedded in HTML

10. The browser sends further asynchronous (AJAX) requests

补充:http的请求报文传给TCP层处理,TCP层如果有需要先将HTTP数据包分片。在一个网段内的寻址是通过以太网协议实现的?什么是以太网协议。 以太网协议需要目的IP地址的物理地址,要用到ARP协议。

 2.布隆过滤器

怎么过滤少量的数据,怎么存怎么查,比如有一亿个客户的电话,要过滤掉垃圾客户的电话。

https://www.jianshu.com/p/88c6ac4b38c8

如果三个点中有一个点不为1,则可以判断该元素一定不存在集合中。存在误判的可能,即这个元素不在这个集合中但是判断它在集合中了。

使用的场景:

什么是BitMap

https://www.cnblogs.com/54chensongxia/p/11591979.html

hash加count的方法?

BitMap算法的核心思想是用bit数组来记录0-1两种状态,然后再将具体数据映射到这个比特数组的具体位置,这个比特位设置为0表示数据不存在,设置成1表示数据存在。在大量数据查询,去重等应用场景中使用的较多,具有比较高的空间利用率。

bitmap缺点:1.数据碰撞。比如讲字符串映射到bitmap的时候会用碰撞的问题,那就可以考虑bloom filter来解决,bloom filter使用多个hash函数来减少冲突的概率。  2.数据稀疏的时候会造成空间的浪费。

  • 使用案例:给定10亿个不重复的正int的整数,没排过序,然后再给一个数,如何快速判断这个数是否在那10亿个数当中。
  • 判断正整型数组是否重复。
  • 进行元素不重复的正整形数组排序。遍历一遍,设置状态1,然后再次遍历,对状态等于1的进行输出+Hash取模,拆分成多个小文件,然后一个个文件读取,直到内存装的下,然后采用Hash+Count的方式判断即可。
  • 在2.5亿个整数中找出不重复的正整数,内存不足以容纳这2.5亿个整数。 解法一:采用2-BitMap 解法二:采用两个BitMap,即第一个Bitmap存储的是整数是否出现,接着在之后的遍历先判断第一个BitMap是否出现过,如果出现就设置第二个BitMap对应的位置也为1,仅仅在一个BitMap中出现过的元素,就是不重复的整数。 解法三:分治+Hash取模,拆分成多个小文件,然后一个个文件读取,直到内存装的下,然后采用Hash+Count的方式判断即可。

变形问题:已知某个文件内包含一些电话号码,每个号码为8位数字,统计不同号码的个数。

一个实例问题: 从一亿个ip找出出现次数最多的?(怎么从海量数据中找出出现次数最多的。)

怎么在海量数据中找出重复次数最多的一个?
算法思想:

方案1:先做hash,然后求模映射为小文件,求出每个小文件中重复次数最多的一个,并记录重复次数。然后找出上一步求出的数据中重复次数最多的一个就是所求(如下)。??这个方法感觉不太对,先做hash是什么意思

3.内核级线程和用户级线程的区别

https://zhuanlan.zhihu.com/p/26279675

线程的实现可以分为两类:用户级线程,内核级线程和混合式线程。

用户级线程是指不需要内核支持而在用户程序中实现的线程,它的内核的切换是由用户态程序自己控制内核的切换,不需要内核的干涉。但是它不能像内核级线程一样更好的运用多核CPU。

优点:线程的调度不需要内核直接参与,控制简单。可以在不支持线程的操作系统中实现。同一个进程中只能同时有一个线程在运行,如果有一个线程使用了系统调用而阻塞,那么整个进程都会被挂起,可以节约更多的系统资源。

缺点:一个用户级线程的阻塞将会引起整个进程的阻塞。  用户级线程不能利用系统的多重处理?仅有一个用户级线程可以被执行。

内核级线程:切换由内核控制,当线程进行切换的时候,由用户态转化为内核态

4.快速排序的伪代码

最好也要熟悉冒泡,

int Partition(int a[],int low,int high){
    int pivotkey=a[low];
    while(low<high){
        while(low<high && a[high]>=pivotkey) high--;
        a[low]=a[high];//  将比枢纽记录小的记录交换到低端
        while(low<high && a[low]<=pivotkey) low++;
        a[high]=a[low];
    }
    a[low]=pivotkey;
    return low;
}
void QSort(int a[],int low,int high){
    if(low<high){
        int pivotloc=Partition(a,low,high);
        QSort(a,low,pivotloc-1);
        QSort(a,pivotloc+1,high);
    }
}
void QuickSort(int a[],int n){
    if(n<=1) return;
    QSort(a,0,n-1);
}

 跟测试相关的

5.如何测试一个电梯

原文链接https://blog.csdn.net/baidu_37964071/article/details/82219819

有的电梯是分单双层的

1.功能:上升,下降,停止,开门,关门,梯内电话,灯光,指示灯

测试电梯能否实现正常的上升和下降功能。 电梯的按钮是否都可以使用,电梯内楼层按键是否正常

2.性能:速度,反应时间,关门时间等

3.压力:超载、尖锐物碰撞电梯壁等;

4.安全:停电、报警装置、轿箱停靠位置、有人扒门时的情况等;

5.可用性(易用性)按键高度、操作是否方便、舒适程度等

6.UI  美观程度、光滑程度、形状、质感等;

7.稳定性  长时间运行情况等;

8.兼容性  不同电压是否可工作、不同类型电话是否可安装等

6.bug的生命周期

新建-指派-已解决-待验-关闭

bug等级:严重程度1、2、3、4

致命错误,严重错误,一般错误,细微错误

 

7.重载和重写的区别

https://www.cnblogs.com/zhangjxblog/p/8723291.html

重写是指派生类中存在重新定义的函数。其函数名,参数列表,返回值类型,所有都必须同基类中被重写的函数一致。只有函数体不同(花括号内),派生类调用时会调用派生类的重写函数,不会调用被重写函数。重写的基类中被重写的函数必须有virtual修饰。

重载和重写的区别:(1)范围区别:重写和被重写的函数在不同的类中,重载和被重载的函数在同一个类中??一定在同一个类中吗? 不是同一作用域内吗

8.谈一谈你对多态的理解

https://blog.csdn.net/wei_cheng18/article/details/78236872

通俗来讲,就是同一操作对于不同的对象

可分为静态多态和动态多态:

静态多态:发生在编译阶段,具体表现为函数重载,泛型编程

动态多态:发生在程序运行时,需要满足两个条件。 虚函数,在派生类中对基类虚函数重写。在继承体系中,通过基类类型的指针或引用来调用虚函数。

实现多态的必要的三个条件:

首先必须要有继承

在父类和子类中都要有虚函数,并且子类和父类中的虚函数要构成重写

通过父类的指针或者引用来调用虚函数??

9.linux命令

https://blog.csdn.net/pythonw/article/details/80263428

ls: 用于查看所在文件夹的命令

Chmod: 用于改变指定目录或文件的权限命令

文件所有者-群组用户-其他用户。

读4  写入2 执行1

 

mkdir:用于创建目录

cd 

cd ..:回退到上级

free:查看当前系统的内存使用情况

kill:杀死一些特定的进程

vi编辑器   :q 没有对文件做过修改退出  :wq

cp:复制命令

top命令 

traceroute:  显示到达某一主机所经由的路径及所使用的时间

杀死占用某一端口进程的方法:  losf -i:8811(端口号)  

kill -s 9 9646(进程号)

10.C和C++的区别

设计思想上:面向对象的语言;  面向过程的结构化编程语言

语法上:C++具有封装,继承,多态三种特性。C++相比C,增加许多类型安全的功能,比如强制类型转换。  C++支持范式编程,比如模板类,函数模板等。

补充:

一些C++问题

C++中四种cast转换是:static_cast   dynamic_cast const_cast reinterpret_cast

++i和i++

++i先自增1,再返回,i++先返回i,再自增1。

虚函数和多态:

多态的实现主要分为静态多态和动态多态,静态多态主要是重载,在编译的时候就已经确定;动态多态是用虚函数机制实现的。多态的作用:在面向对象的程序设计中使用多态,能够增强程序的可扩充性,即代码需要修改或增加功能的时候,需要改动和增加的代码较少。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值