1.计算机网络分为几层?
OSI参考模型:应用层,表示层,会话层,传输层,网络层,数据链路层,物理层。
Tcp/ip模型:应用层,传输层,网际层,网络接口层。
2.说说你知道的网络协议:
应用层协议:http协议,smtp邮箱协议,DNS协议,RIP协议。
传输层协议:TCP,UDP协议。
网际层协议:IP协议。
网络接口层:DHCP协议。
3.http协议实现了什么:
1、客户与服务器建立连接tcp
2、客户向服务器提出请求;
3、服务器接受请求,并根据请求返回相应的文件作为应答;
4、客户与服务器关闭连接。
4.http的cookie和session是什么?
Cookie通过在客户端记录信息确定用户身份,Session通过在服务器记录确定用户身份。
Web程序是使用HTTP协议传输数据的,HTTP协议是无状态的协议,一旦数据交换完毕,客户端与服务端的链接就会关闭,再次交换数据需要建立新的链接。这就意味着服务器无法从链接上面跟踪会话。永久登陆,把登录信息如账号、密码等保存在Cookie中,并控制Cookie的有效期,下次访问时再验证Cookie中的登录信息即可。
Session是另一种记录客户状态的机制,不同的是Cookie保存在客户端浏览器中,Session保存在服务器上。客户端浏览器访问服务器的时候,服务端把客户端信息以某种形式记录在服务器上,这就是Session。客户端浏览器再次访问时只需要从该Session中查找该客户的状态就可以了。
5.快速排序的时间复杂度是多少,空间复杂度是多少?
时间复杂度是多少平均O(nlogn),最坏时间复杂度O(n2),空间复杂度最坏深度On,时间复杂度O(logn),主要是和他的递归深度有关。
6.mysql会不会?索引是什么?
会点,索引是快速搜索的关键。MySQL索引的建立对于MySQL的高效运行是很重要的。如果布简历索引,数据库会把每一个数据读入并且进行比较看它是不是符合要求。
索引按照数据结构可以分为hash索引,fulltext索引,BTree索引,Rtree索引。
Hash索引相当于是一个哈希表去查找一个变量是什么,fulltext索引利用了倒排索引,统计每一个文字在哪一个位置,Btree就是B树,Rtree相当于是多维的B树查询。
7.mysql如何进行检索调优?
1. 优化数据访问
用LIMIT来限制查询的条数,避免使用select *
查看返回条数,查询条数,比较次数过多可以使用索引
2. 重构查询
比如返回连接两个查询的表的话,可以先查询得到两个子表,再连接
8.简述TCP三次握手和四次挥手?
三次握手:客户端发起连接,服务器接收后,发送连接就绪报文给客户端,客户端收到后明确链路无任何问题,发送报文给服务器,服务器收到后成功建立连接。
四次挥手:客户端发起,我事情完了,请求释放,服务器收到,但是还未准备好,因为是客户端突然发起的,但是服务器任然会发送报文告诉客户端中止连接报文已经收到。然后服务器处理未处理完的事务,告诉应用层该链接请求中止。事务执行完毕后发送中止报文给客户端,然后客户端收到并返回终止报文(此时客户端要等待2MSL),服务器收到,连接终止。如果没收到,服务器还会再发送一次终止报文,然后客户端收到并返回终止报文(此时客户端要等待2MSL)。
9.什么是容器?
容器就是储存对象的对象,如python的列表,元组,优先队列,栈,队列等等。
10.git是不是一个分布式控制系统?明明要和服务器上的东西比较,为什么不是集中式的?
Git是一个分布式版本控制系统,虽然看起来是集中式的,他有开发这个软件的每一个步骤,中心的master只是一个伪集中式的版本,即使它挂掉了,我本地的软件依然是能够使用的。
11.找两个数组的中位数。
class Solution: def findMedianinTwoSortedAray(self , arr1 , arr2 ): # write code here if arr1 == None or arr2 == None or len(arr1) != len(arr2): raise Exception("Your arr is invalid!") start1 = 0 end1 = len(arr1) - 1 start2 = 0 end2 = len(arr2) - 1 while start1 < end1: mid1 = (start1 + end1) // 2 mid2 = (start2 + end2) // 2 offset = 0 if(end1-start1)%2 == 0 else 1 if arr1[mid1] == arr2[mid2]: return arr1[mid1] elif arr1[mid1] > arr2[mid2]: end1 = mid1 start2 = mid2 + offset else: start1 = mid1 + offset end2 = mid2 return min(arr1[start1], arr2[start2])
12.进程和线程的区别?
1、进程是资源分配的最小单位,线程是程序执行的最小单位(资源调度的最小单位)。
2、程序运行先创建进程,系统就会为它分配地址空间,建立数据表来维护代码段、堆栈段和数据段。线程是共享进程中的数据的,使用相同的地址空间,因此CPU切换一个线程的花费远比进程要小很多,同时创建一个线程的开销也比进程要小很多
3、线程之间的通信更方便,同一进程下的线程共享全局变量、静态变量等数据,而进程之间的通信需要以管道pipe或者消息队列进行。
4、但是多进程程序更健壮,多线程程序只要有一个线程死掉,整个进程也死掉了,而一个进程死掉并不会对另外一个进程造成影响,因为进程有自己独立的地址空间。
全部评论
(8) 回帖