【OfferX】综合

Java

垃圾回收

分配和回收策略:对象有限在eden区分配,如果不足发生ygc,复制之后转移到survive区,大对象进入老年代。老年代gc通常伴随一次ygc

运行时内存

运行时数据区域:栈,堆,方法区(存放类,常量)

方法区也可以称为永久代

常量池是永久代的一部分

类型擦除(TODO整理)

编译后的字节码没有泛型信息,编译后的类型以bound作为参数类型。所以,赋值object是没有问题的,但是取出之后不兼容导致转换错误

1.转换包括泛型方法, 2.取出的时候加上checkcast 3.生成桥接方法,桥接方法的内容就是put(Object e){ put((Integer)e)}

桥接方法,以继承为例,setData(T t)子类实现setData(Integer i), 最终编译出来父类和子类方法不重载,为了使得重载发生,会生成一个Object参数的桥接方法委派给子类重载的方法。这样,父类引用调用setData时,尽管会调用Object的参数方法,但实际最终转向了子类的方法。

类加载器

类加载器:加载,验证,准备,解析,初始化

volatile

写入可见性和禁止指令重排序

设计模式

HTTPS

通信过程: 1+4+3+1

Client                   Server
-------------------------------------
ClientHello ->
                         <- ServerHello 
                         <- ServerCertificate
                         <- ServerKeyExchange
                         <- ServerHelloDone
ClientKeyExchange->
ChangeCiperSpec->
ClientHelloDone->
                        <-ChangeCipherSpec
  
ApplicationData    <->    ApplicationData

TCP/IP

通信过程

Client                   Server
-------------------------------------
SYN->
                      <-SYN,ACK
ACK->
...

FIN->
   (FIN_WAIT_1)      
                        <-ACK
 (FIN_WAIT_2)
                      (CLOSE_WAIT)
                          <-FIN
                         (LAST_ACK)
ACK->
                         (CLOSED)
(TIME_WAIT)
(wait 2MSL)
(CLOSED)           

MSL=报文最大生存时间,一般2分钟,因此TIME_WAIT等待4分钟。

TIME_WAIT:是主动发起关闭的一方最后的状态,主要是避免对方收不到LAST_ACK,这样对方就会重复FIN,然后这个时间内可以重新应答ACK。

为什么是2MSL:ACK报文可以在1MSL内丢失,然后另一方可以在1MSL内重传。

问题

半连接状态

服务器发送 SYN-ACK之后就,在收到ACK之前一直处于SYN_RECV状态,这个状态称为半连接状态。
如果服务器存在大量的半连接状态,则意味着服务器正在经受DDOS共计。

为什么要四次挥手

全双工,正在传输的数据不受影响

每个系统有多少个TCP/IP模块?

1个,操作系统统一实现TCP/IP协议栈,通过端口将数据交付给进程。

backlog的含义

系统中每个TCP连接由(源地址, 目标地址)标识, 每个连接有一个专门的accept queue,当这个queue满了之后就不能再接收新的请求, backlog就是指定这个queue的大小。

Linux中系统受到SYN之后并不直接进入accept queue,而是进入syn queue,只有转移到ESTABLISHED状态才会进入accept queue。
syn queue的大小通常是系统决定的。

CLOSE_WAIT状态怎么产生和转移

在收到客户端FIN并发送ACK之后,服务器进入CLOSE_WAIT状态。
当服务器主动调用close时会发送FIN给客户端,进入LAST_ACK状态然后关闭连接。

当系统中因为服务器未正确调用close,而进程终止之后,由于客户端的FIN_WAIT_1会经过一段时间超时进入关闭状态,而CLOSE_WAIT状态则不会,因此会导致系统产生大量的CLOSE_WAIT状态。

一般面试题:浏览器输入网址的全过程

1.DNS协议解析域名
2.

操作系统

Linux

Shell

如何查看TCP连接状态?

ss

进程创建

资源申请:数据段,代码段和堆栈
进程号分配
进程的TSS结构

死锁产生的必要条件

1.互斥 2.不可剥夺 3.请求与保持(已经持有一个资源,还要请求另一个资源) 4.循环等待链,{P0,P1,…,PN-1}这些进程中,Pi等待Pi+1的资源

预防死锁:1.进程在等待过程中可以释放资源 2.预分配资源 3.资源编号,并按照递增的方式分配资源,递减的方式释放资源

Redis

支持的数据类型

字符串,数字,列表,有序列表,Hash

持久化

RDB持久化:定期持久化数据库
AOF:将写入的命令添加到文件末尾

集群和分片

将key hash映射到slot上,一个集群总共处理16384个slot,通过CRC16(key) % 16384来计算key,然后分配到服务器上。如果有n个服务器,则每个服务器的区间是 [i, i+16384/n]

实现锁

setnx 如果不存在则返回1,否则返回0

一致性hash

将key映射到0~2^32的圆上,然后寻找最近一个匹配的服务器

扩容与缩容

redis使用桶实现hash结构,因此当元素数量(used=所有kv数量,每一个链表的kv和)/桶数量≥1(执行bgsave,bgrewriteaof是5)时,也就是每个桶的平均装载达到1时,进行扩容。redis扩容是增量式,扩容时首先分配空间,然后标记每一个key是在老的表中还是新的表中,在老表中的元素移动到新表。维护一个rehash index,每移动完成一个index,就增加,直到所有元素完成。扩容期间需要先在老表上进行查找,然后再在新表上查找。

负载因子小于0.1时,开始收缩。

Kafka

如何避免重复消费

MQ

Spring

数据库

B+树,所有叶子节点位于同一层,每个节点至少含有m/2个数据,至多含有m个数据,每个节点可查找k个区间。

B树和B+树

B+树的内部节点存储在内存中,而叶子节点存储在磁盘上。
叶子节点之间有指针相连

https://www.geeksforgeeks.org/introduction-of-b-tree/

每个B+树的节点有c个指针,c-1个关键字, 一颗度为a的B+树每个节点至多有a个指针

ACID

原子性,一致性,隔离性,持久性

Explain

主要看type

  • ALL 表示全表扫描,即需要加载全表到内容进行扫描
  • index 索引扫描,只需要扫描索引树
  • range 只遍历某些行
  • const 常量扫描

聚簇索引

聚簇索引是指非主键都指向主键,主键指向最终的数据

InnoDB是聚簇索引

编译器

有限状态自动机和无线状态自动机

语法和文法

设计模式

单例模式

实现单例有几种模式

Hashmap的实现

如果指定初始容量,则只有达到初始容量之后才会进行扩容。

扩容会找到当前tableSize的下一个2的幂,然后进行扩张。

ConcurrentHashMap的实现

使用分段实现。

数据结构

红黑树

根节点是黑色,红色节点的子节点是黑色,从根节点到叶子节点的黑色节点数目相同

性质1:最长路径至多是最短路径的两倍

算法细节

1.堆排序过程
只需从 i=floor(n/2)到1进行建堆就可以了,因为大于floor(n/2)的所有节点都是一个元素的堆。建堆的过程其实就是在合并这个n/2个堆的过程,使用的是一个siftDown的过程。
siftDown:选择3个元素的最大值,然后将其下沉到合适的位置。

分布式

CAP理论

一个系统不能同时满足一致性,可用性和分区容错性的

分区容错性是指系统的分区之间发生网络故障不影响系统对外的可用性,即系统能够容忍分区网络故障。

BASE理论

基本可用,软状态,最终一致性

项目细节

自我介绍

名字+毕业时间和院校+简短的工作经历+当前从事的事情

遇到的问题

规划

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值