用go觉得方便吗
挺方便
k8s基本组件介绍
Master节点
Master节点是Kubernetes集群的控制中心,负责管理整个集群的状态和资源分配。它包含以下关键组件:
- kube-apiserver
- 功能:作为集群的中央控制平面的API入口,提供API服务,允许用户通过kubectl工具或其他客户端与集群进行交互。
- 作用:所有操作都需要通过kube-apiserver发起和处理,它是集群管理、资源配置、整个集群安全机制的入口。
- etcd
- 功能:作为Kubernetes集群的分布式键值存储,存储了整个集群的状态和元数据。
- 作用:etcd保存了集群的所有状态信息,包括Pod、Service、Deployment等对象的创建、更新和删除等操作,使得Kubernetes系统具有高可用性和复原能力。
- kube-controller-manager
- 功能:负责管理集群中的控制器,监听集群状态的变化并控制集群的状态向用户期望的状态靠拢。
- 作用:Controller Manager包含多个控制器,每个控制器负责监控和维护一种资源对象的状态,如Deployment、ReplicaSet、DaemonSet等,同时根据用户的需求,自动进行相应的容器调度、扩容、缩容等操作。
- kube-scheduler
- 功能:负责资源的调度,根据资源的需求和约束选择最合适的节点部署Pod。
- 作用:Scheduler会根据Pod的资源需求、节点的资源情况、节点之间的网络距离等因素进行智能调度,从而实现负载均衡和资源最大化利用的目标。
Node节点
Node节点是集群中运行应用程序的工作节点,每个Node节点包括以下组件:
- kubelet
- 功能:运行在每个节点上,负责维护容器的生命周期,管理Pod的运行状态。
- 作用:kubelet负责监听节点上Pod的状态,同时负责上报节点和节点上面Pod的状态,与Master节点通信,并管理节点上面的Pod。
- kube-proxy
- 功能:负责实现Kubernetes服务的网络代理和负载均衡。
- 作用:kube-proxy负责将指定的流量分发到后端正确的机器上,实现集群内Service的负载均衡和访问控制等功能。
- 容器运行时(Container Runtime)
- 功能:负责运行容器化的应用程序。
- 作用:容器运行时是Kubernetes中用于运行容器的底层组件,它负责将容器镜像转换为可以运行的进程,并提供容器的隔离、资源管理和网络管理等功能。Kubernetes支持多种容器运行时,如Docker、CRI-O、containerd等。
kubectl的命令,查看当前运行的pod命令
kubectl get pods
编辑service的node pod命令
kubectl exec -it pod -- bash
springcloud里面都用了哪些组件
Nacos、sentinel、gateway、openfeign、rabbitmq
平时用的语言用的最多是什么
JAVA、C++
zset能介绍一下它的数据结构吗
压缩列表(ziplist):当满足以下两个条件时,Redis会使用压缩列表作为ZSet的底层存储结构:
- 集合中元素数量少于
zset-max-ziplist-entries
(默认值为128)。- 所有元素的最大长度小于
zset-max-ziplist-value
(默认值为64字节)。跳跃表(skiplist):当不满足上述两个条件时,Redis会使用跳跃表作为ZSet的底层存储结构。跳跃表是一种可以进行快速查找的有序数据结构,它通过维护多级索引来实现快速查找。跳跃表的查找、插入和删除操作的时间复杂度都是O(logN),其中N是跳跃表中的元素数量。这使得跳跃表在处理大量数据时具有很高的性能。
跳跃表的结构定义如下(以Redis的C语言实现为例):
- zskiplistNode:表示跳跃表中的一个节点,包含元素对象(obj)、分数(score)、指向前一个节点的指针(backward)和一个包含多个层的数组(level)。每一层都包含一个指向下一个节点的指针(forward)和一个表示当前节点到下一个节点的跨度(span)。
- zskiplist:表示一个跳跃表,包含头节点(header)、尾节点(tail)、跳跃表中的节点数量(length)和当前跳跃表的最大层数(level)。
Reids多个请求用单线程处理,怎么保证高性能
内存操作:Redis 所有的数据都存储在内存中,内存的读写速度远远快于磁盘。这使得 Redis 能够在极短的时间内完成数据的读写操作。
高效的数据结构:Redis 使用了多种高效的数据结构,如字符串(strings)、列表(lists)、集合(sets)、哈希表(hashes)、有序集合(sorted sets)等,这些数据结构都经过优化,以适应快速读写和高效的空间利用。
事件驱动:Redis 使用了基于事件的非阻塞 I/O 模型,它使用 I/O 多路复用技术(如 epoll/kqueue)来高效地处理网络请求。这使得 Redis 可以在单个线程中处理多个客户端的并发连接,而不会阻塞。
避免上下文切换:由于 Redis 是单线程的,它避免了多线程或多进程模型中的上下文切换开销。上下文切换是操作系统在多任务处理时保存和恢复 CPU 状态的过程,这个过程会消耗大量的 CPU 时间。
arraylist和linkedlist什么区别,怎么用
arraylist采用动态数组实现,其底层是数组,扩容1.5倍后会新建数组。
linkedlist采用双向链表实现。
- ArrayList:适合需要频繁进行随机访问的场景,如频繁通过索引访问元素。
- LinkedList:适合需要频繁进行插入和删除操作的场景,特别是在列表的头部或尾部进行操作时。
linkedlist怎么实现get
怎么优化get,不能用hashmap映射
linkedlist采用从头遍历实现get
采用跳表优化get
有一些并发工具类,用过哪些
Java并发工具类主要位于
java.util.concurrent
(简称JUC)包中CountDownLatch
CyclicBarrier
ReadWriteLock
Semaphore
ConcurrentHashMap
分布式web系统,多节点web服务,服务是分布式的,map怎么共享?
Redis存储
怎么保证优惠卷不超卖,保证高性能
redis分布式锁加上sentinel限流
sentinel限流机制,原理
滑动窗口机制
维护一个窗口,窗口分为若干时间段,每个时间段以及窗口都有计数器,超过则拒绝。当新的请求到来时,滑动窗口会向后滑动,保持窗口大小不变。
数据库sql题:
算法题:
二分查找