互联网名企面试模拟题

1.OSI有哪几层?其中http协议在哪一层?

应用层

网络服务与最终用户的一个接口。

协议有:HTTP FTP TFTP SMTP SNMP DNS TELNET HTTPS POP3 DHCP

表示层

数据的表示、安全、压缩。(在五层模型里面已经合并到了应用层)

格式有,JPEG、ASCll、DECOIC、加密格式等

会话层

建立、管理、终止会话。(在五层模型里面已经合并到了应用层)

对应主机进程,指本地主机与远程主机正在进行的会话

传输层

定义传输数据的协议端口号,以及流控和差错校验。

协议有:TCP UDP,数据包一旦离开网卡即进入网络传输层

网络层

进行逻辑地址寻址,实现不同网络之间的路径选择。

协议有:ICMP IGMP IP(IPV4 IPV6) ARP RARP

数据链路层

建立逻辑连接、进行硬件地址寻址、差错校验 [2]  等功能。(由底层网络定义协议)

将比特组合成字节进而组合成帧,用MAC地址访问介质,错误发现但不能纠正。

物理层

建立、维护、断开物理连接。(由底层网络定义协议)

TCP/IP 层级模型结构,应用层之间的协议通过逐级调用传输层(Transport layer)、网络层(Network Layer)和物理数据链路层(Physical Data Link)而可以实现应用层的应用程序通信互联。

 

2.简述一下三次握手过程?

在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接.

第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认;
SYN:同步序列编号(Synchronize Sequence Numbers)

第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态;

第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手.

 

3.数据库索引的实现一般有哪些数据结构?

 树结构  B+树,红黑树等等

 

4.描述一下数据库乐观锁的使用场景

加锁:同一时刻只能有一个访问

悲观锁:一段执行逻辑加上悲观锁,不同线程同时执行时,只能有一个线程执行,其他的线程在入口处等待,直到锁被释放.通过配置加锁,开销大

乐观锁:一段执行逻辑加上乐观锁,不同线程同时执行时,可以同时进入执行,在最后更新数据的时候要检查这些数据是否被其他线程修改了(版本和执行初是否相同),没有修改则进行更新,否则放弃本次操作.通过设计实现。

两种锁各有优缺点,读取频繁使用乐观锁(但是可能出现“脏”读),写入频繁使用悲观锁(上下文切换开销大,但是保证没有“脏”数据)

 

5.数据库中,什么是最左原则?

顾名思义是最左优先,以最左边的为起点任何连续的索引都能匹配上。

在创建多列索引时,要根据业务需求,where子句中使用最频繁的一列放在最左边

个人认为,所谓最左前缀原则就是先要看第一列,在第一列满足的条件下再看左边第二列,以此类推。

 

6.哪些sql语句会破坏索引,导致全表扫描?回答至少两种

1.模糊查询(like)

like ‘ a%’ 这种查询是可以使用索引的

like'%a'   这种查询索引是会失效的

所以尽量避免不要使用2个百分号一起查询。

2.select count(*) from table;

这样不带任何条件的count会引起全表扫描

 

7.数据库表建立索引后,对表数据的增删改查分别有什么影响?

坏处:对数据库做增删改 比较慢··因为索引结构是 会物理排序,你改了索引字段 的值时 这条记录会重新去排列

好处:排列好了 所以查询速度很快

HashMap增删改查都还是很快,但是有数据倾斜风险

 

8.Hash拉链结构

底层是数组,首先对关键码集合用散列函数计算散列地址,具有相同地址的关键码归于同一子集合,每个集合中的元素通过一个单链表链接起来,各链表的头结点存储在数组中。增删改查都基于此实现。

 

9.磁盘不能存数组,那么如何存储Hash拉链结构?

磁盘都是以文件形式操作,可以把数组写入文件中

 

10.列式数据库为什么增查数据快?

列式数据库以列式存储,所以数据有相似性,用类似哈夫曼编码的方法将数据压缩到一块空间。比如普通数据库存储数据要100MB,我压缩后只需要10MB就可以了,大大加快了IO读取速度。增加时也只需要找到那一块的起始地址,直接插入就可以。但如果是删改,因为数据压缩的原因,还要还原成原数据,之后还要再压缩,就很慢。

 

11.linux中模糊查询名字为“mmnnkk”的进程,并将进程杀死,请写出思路,以及linux命令。

ps -aux|grep mmnnkk

killall -9 NAME

 

12.父类声明的变量用final修饰可以继承和重写吗?

final 类不能继承

final 方法不能重新override,可以继承

final 成员变量可以继承,可以覆盖

 

13.String a="abc",String b="a"+"bc; a==b?

true

 

14.0.6332 的数据类型是什么

默认不可能为包装类,因为小数默认类型是double,想要转换需要在小数后面加上f或者F的后缀才能转换为flaot类型。


15.描述一下四次挥手

由于TCP连接是全双工(通信允许数据在两个方向上同时传输,它在能力上相当于两个单工通信方式的结合。全双工指可以同时(瞬时)进行信号的双向传输(A→B且B→A)。指A→B的同时B→A,是瞬时同步的。)的,因此每个方向都必须单独进行关闭。这原则是当一方完成它的数据发送任务后就能发送一个FIN来终止这个方向的连接。收到一个 FIN只意味着这一方向上没有数据流动,一个TCP连接在收到一个FIN后仍能发送数据。首先进行关闭的一方将执行主动关闭,而另一方执行被动关闭。

(1) TCP客户端发送一个FIN,用来关闭客户到服务器的数据传送

(2) 服务器收到这个FIN,它发回一个ACK,确认序号为收到的序号加1。和SYN一样,一个FIN将占用一个序号。

(3) 服务器关闭客户端的连接,发送一个FIN给客户端。

(4) 客户端发回ACK报文确认,并将确认序号设置为收到序号加1。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值