Shopee 面经

4、HashMap机制
5、HashMap扩容过程以及安全问题
6、TCP拥塞机制

https://www.cnblogs.com/ppzhang/p/10506237.html

拥塞控制就是防止过多的数据注入网络中,这样可以使网络中的路由器或链路不致过载。

拥塞控制的方法:

  1.慢开始

  2.拥塞避免

  3.快重传

  4.快恢复


7、如果没有拥塞机制会怎样
8、TCP流量控制

https://www.cnblogs.com/ppzhang/p/10506237.html

       所谓的流量控制就是让发送方的发送速率不要太快,让接收方来得及接受。

什么方式进行流量控制?

     利用滑动窗口机制可以很方便的在TCP连接上实现对发送方的流量控制。


9、TCP怎么保证安全机制

  校验和 确认应答+序列号 超时重传 流量控制 拥塞控制

1. 停止等待协议 :每发送完一个分组,就停止发送,等待对方确认,收到确认后再发送下一个分组。

2. 连续ARQ协议

        利用滑动窗口,位于滑动窗口内的所有分组都可以连续的发送出去,而不需要逐个等待对方的确认。A每收到一个确认,就把发送窗口向前滑动一个分组的位置。B采用累积确认的方式,对按序到达的最后一个分组发送确认(就是最后这个分组的编号),就表示这个分组之前的所有分组都收到了。

(1)优点:信道利用率高,容易实现,即使确认丢失,也不必重传。

(2) 缺点:不能向发送方反映出接收方已经正确收到的所有分组的信息。

 

10、TCP头部字段

      https://blog.csdn.net/weixin_44198965/article/details/90083126

         16位源端口号、16位目的端口号、32位序号、32位确认序号、4位首部长度、保留(6位)、6位标志域、16位窗口、16位校验和、16位紧急指针、32位选择和填充


11、TCP什么时候发送复位包

       1、请求超时  2、 请求的链接地址不存在


12、如果客户端请求服务端请求不通怎么做


13、TCP心跳包机制

心跳机制是定时发送一个自定义的结构体(心跳包),让对方知道自己还活着,以确保连接的有效性的机制。

心跳检测步骤:
1.客户端每隔一个时间间隔发生一个探测包给服务器
2.客户端发包时启动一个超时定时器
3.服务器端接收到检测包,应该回应一个包
4.如果客户机收到服务器的应答包,则说明服务器正常,删除超时定时器
5.如果客户端的超时定时器超时,依然没有收到应答包,则说明服务器挂了

心跳包的发送,通常有两种技术:

  1、应用层自己实现的心跳包

  2、TCP的KeepAlive保活机制


14、操作系统虚拟内存

  https://mp.weixin.qq.com/s?__biz=MzAxMzE4MDI0NQ==&mid=2650336679&idx=1&sn=1b727d7ddc6c069627d7b8fbb444aaf4&chksm=83aac19db4dd488b5186ed9d7f1ff14b89234ac8479708b89b107de39f173adef227921cdcf3&token=1451129541&lang=zh_CN#rd

虚拟内存使得应用程序认为它拥有连续的可用内存,这样一来,就在逻辑层面上扩大了内存容量。但是实际上,只是把比较常用的内存片段取出来了而已,还有部分资源是放在磁盘存储器上的。需要的时候再进行数据交换。

调度方式有,分页式,段式,段页式。比较流行方式是段页式,他结合了前两者的优点,以页为单位替换,以段为单位使用。

常见的替换替换算法有4种,随机算法,先进先出算法,LRU算法,最优算法。 比较常使用的是LRU算法,他在redis里也有使用,当redis的内存满了的时候就是使用LRU算法替换掉旧内存。


15、虚拟地址和物理地址转换

https://blog.csdn.net/qq_39755395/article/details/78380942

 分页内存管理
将虚拟内存空间和物理内存空间皆划分成大小相同的页面,例如4KB、8KB和16KB等。并将页作为内存空间的最小分配单位,一个程序的一个页面(虚拟页面)可以存放在任何一个物理页面中。

一个程序发出的虚拟地址由虚拟页面号页内偏移值两部分组成

 

16、进程和线程区别

  1. 进程是资源分配最小单位,线程是程序执行的最小单位;
  2. 进程有自己独立的地址空间,每启动一个进程,系统都会为其分配地址空间,建立数据表来维护代码段、堆栈段和数据段,线程没有独立的地址空间,它使用相同的地址空间共享数据;
  3. CPU切换一个线程比切换进程花费小;
  4. 创建一个线程比进程开销小;
  5. 线程占用的资源要⽐进程少很多。

协程

协程是一种用户态的轻量级线程,协程的调度完全由用户控制。从技术的角度来说,“协程就是你可以暂停执行的函数”。协程拥有自己的寄存器上下文和栈。协程调度切换时,将寄存器上下文和栈保存到其他地方,在切回来的时候,恢复先前保存的寄存器上下文和栈,直接操作栈则基本没有内核切换的开销,可以不加锁的访问全局变量,所以上下文的切换非常快。

协程与线程的区别:

1) 一个线程可以多个协程,一个进程也可以单独拥有多个协程。

2) 线程进程都是同步机制,而协程则是异步。

3) 协程能保留上一次调用时的状态,每次过程重入时,就相当于进入上一次调用的状态。

4)线程是抢占式,而协程是非抢占式的,所以需要用户自己释放使用权来切换到其他协程,因此同一时间其实只有一个协程拥有运行权,相当于单线程的能力。

5)协程并不是取代线程, 而且抽象于线程之上, 线程是被分割的CPU资源, 协程是组织好的代码流程, 协程需要线程来承载运行, 线程是协程的资源, 但协程不会直接使用线程, 协程直接利用的是执行器(Interceptor), 执行器可以关联任意线程或线程池, 可以使当前线程, UI线程, 或新建新程.。

6)线程是协程的资源。协程通过Interceptor来间接使用线程这个资源。

 



17、为什么需要进程,他存在的意义

      从理论角度看,是对正在运行的程序过程的抽象;从实现角度看,是一种数据结构,目的在于清晰地刻画动态系统的内在规律,有效管理和调度进入计算机系统主存储器运行的程序。


18、进程切换怎么实现的

       进程调度由操作系统内核进行,目的是合理分配系统资源,令每个进程都能获得执行时间。进程调度由schedule函数负责,该函数是操作系统内核函数,并非系统调用,只能在内核态中由内核代码主动调用。


19、数据库索引结构

20、辅助索引和覆盖索引、聚族索引

21、数据库锁机制(乐观锁和悲观锁、表锁和行锁)

 https://blog.csdn.net/xifeijian/article/details/20313977?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-2.nonecase&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-2.nonecase

22、意向锁

 https://blog.csdn.net/arkblue/article/details/53895150


23、什么情况会造成数据库的死锁

  1、一个用户A 访问表A(锁住了表A),然后又访问表B;另一个用户B 访问表B(锁住了表B),然后企图访问表A;这时用户A由于用户B已经锁住表B,它必须等待用户B释放表B才能继续,同样用户B要等用户A释放表A才能继续,这就死锁就产生了。

 


24、那种语句会造成数据库死锁
25、主从复制


26、红黑树的实现

https://blog.csdn.net/tanrui519521/article/details/80980135

27、一范式、二范式和三范式

  1. 第一范式: (1NF) 实体表中的数据(字段)不可再分; 对数据项(字段)的要求是具备独立性,不可再分;
  2. 第二范式:(2NF)    1、每张表必须要有主属性(主键)唯一,该表上的其他字段都可以由该字段来推导其相关内容;2、其它属性数据项(非主键)要完全依赖于主属性(主键);
  3. 第三范式:(3NF)所有的非主属性(非主键)都直接由其它表的主属性(主键)推导生成,而不需要传递依赖。


28、所有排序的思路

  https://www.cnblogs.com/onepixel/articles/7674659.html

冒泡排序:它重复地走访过要排序的数列,一次比较两个元素,如果它们的顺序错误就把它们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成; 

时间复杂度:O(n2)

选择排序:首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。

时间复杂度:O(n2)

快速排序:通过一趟排序将待排记录分隔成独立的两部分,其中一部分记录的关键字均比另一部分的关键字小,则可分别对这两部分记录继续进行排序,以达到整个序列有.

时间复杂度:O(nlogn)

归并排序(Merge)是将两个(或两个以上)有序表合并成一个新的有序表,即把待排序序列分为若干个子序列,每个子序列是有序的。然后再把有序子序列合并为整体有序序列。

时间复杂度:O(nlogn)

堆排序: 是指利用堆这种数据结构所设计的一种排序算法。堆积是一个近似完全二叉树的结构,并同时满足堆积的性质:即子结点的键值或索引总是小于(或者大于)它的父节点。

时间复杂度:O(nlogn)

桶排序: 是计数排序的升级版。它利用了函数的映射关系,高效与否的关键就在于这个映射函数的确定。桶排序 (Bucket sort)的工作的原理:假设输入数据服从均匀分布,将数据分到有限数量的桶里,每个桶再分别排序(有可能再使用别的排序算法或是以递归方式继续使用桶排序进行排)。

时间复杂度:O(n+k)

 

 

 


29、为什么堆排序比快排慢

https://blog.csdn.net/every__day/article/details/86580883

第一、堆排序访问数据的方式没有快速排序友好。

对于快速排序来说,数据是顺序访问的。而对于堆排序来说,数据是跳着访问的

第二、对于同样的数据,在排序过程中,堆排序算法的数据交换次数要多于快速排序。


30、哪种排序比快排快

        桶排序
31、上电过程,程序如何跑起来的

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值