前言
作为一个典型的分布式项目,Kubernetes 的部署一直以来都是挡在初学者前面的一只“拦路虎”。尤其是在 Kubernetes 项目发布初期,它的部署完全要依靠一堆由社区维护的脚本。
其实,Kubernetes 作为一个 Golang 项目,已经免去了很多类似于 Python 项目要安装语言级别依赖的麻烦。但是,除了将各个组件编译成二进制文件外,用户还要负责为这些二进制文件编写对应的配置文件、配置自启动脚本,以及为 kube-apiserver 配置授权文件等等诸多运维工作。
这几年,在跟朋友探讨 k8s 落地时,也有一些问题被反反复复地提及,比如:
- 为什么容器里只能跑“一个进程”?
- 原先一直用的某个 JVM 参数,在容器里就不好使了?
- 为什么 kubernetes 不能固定 IP 地址?容器网络连不通,该如何 debug?
- k8s 中 statefulSet 和 operator 到底什么区别?pv 和 pvc 又该怎么用?
在这里分享我偶然间得到的一份文档,该文档将K8S分为理论和实践两个部分进行讲解,双管齐下,事半功倍,让我们来看看文档内容
01 JAVA基础
1.1 java知识点
- Hashmap 源码级掌握,扩容,红黑树,最小树化容量,hash冲突解决,有些面试官会提出发自灵魂的审问,比如为什么是红黑树,别的树不可以吗;为什么8的时候树化,4不可以吗,等等
- concureentHashMap,段锁,如何分段,和hashmap在hash上的区别,性能,等等
- HashTable ,同步锁,这块可能会问你synchronized关键字 1.6之后提升了什么,怎么提升的这些
- ArrayList 优势,扩容,什么时候用
- LinkedList 优势,什么时候用,和arraylist的区别 等等
- 基本类型和包装类型的区别,涉及自动装箱和拆箱,怎么做的,原理
- String ,StringBuffer,StringBuilder哪个是安全的
- 字符串编码的区别,被问到过,我觉得比较容易被忽视的一个点
- 什么是泛型,怎么用泛型
- static能不能修饰threadLocal,为什么,这道题我当时一听到其实挺懵逼的
- Comparable和Comparator接口是干什么的,其区别
- 多态的原理是什么,感觉这个很容易被问到
- 接口和抽象类,面试官问我是怎么理解的,我说接口对应功能,抽象类对应属性,然后面试官给我说了他的看法,说抽象类更偏向于一种模板~ 然后又交流了一下各自的想法
- 如何通过反射和设置对象私有字段的值
- 快速失败(fail-fast)和安全失败(fail-safe)的区别是什么
- synchronized 的实现原理以及锁优化?
- volatile 的实现原理?
- Java 的信号灯?
- synchronized 在静态方法和普通方法的区别?
- 怎么实现所有线程在等待某个事件的发生才会去执行?
- CAS?CAS 有什么缺陷,如何解决?
- synchronized 和 lock 有什么区别?
- Hashtable 是怎么加锁的 ?
- List,Map,Set接口在取元素师,各有什么特点
- 如何线程安全的实现一个计数器
- 生产者消费者模式,要求手写过代码,还是要知道的
- 单例模式,饿汉式,懒汉式,线程安全的做法,两次判断instance是否为空,每次判断的作用是什么。
- 线程池,这个还是很重要的,在生产中用的挺多,四个线程池类型,其参数,参数的理解很重要,corepoolSize怎么设置,maxp