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