1、Pod是最小部署单元,一个Pod由一个或多个容器组成,Pod中容器共享存储和网络,在同一台Docker主机上运行

2、微服务:小而自治,协同工作,专注一件事

 3、如何中断一个运行中的线程?推荐:thread.interrupt();   thread.stop()

4、Elasticsearch集群可以包含多个索引(indices)【库】,每一个索引可以包含多个类型(types)【表】,每一个类型包含多个文档(documents)【行】,然后每个文档包含多个字段(Fields)【列】,这种面向文档型的储存,也算是NoSQL的一种吧

 

5、Integer i1 = 100; Integer i2 = 100; Integer i3 = 200; Integer i4 = 200; System.out.println(i1==i2); 【true】System.out.println(i3==i4);  【false】 

 在通过valueOf方法创建Integer对象的时候,如果数值在[-128,127]之间, 便返回指向IntegerCache.cache中已经存在的对象的引用;否则创建一个新的Integer对象。 上面的代码中i1和i2的数值为100,因此会直接从cache中取已经存在的对象,所以i1和i2指向的是 同一个对象,而i3和i4则是分别指向不同的对象。

 

6、内存泄漏是指分配出去的内存无法回收了

    内存泄露:是指内存对象经过多次 GC 之后仍然无法被回收,堆积的越来越多,导致内存可用空间越来越少,称之为内存泄露。( 泄露的是内存空间)

 内存溢出 (out of memory)::指程序申请内存时,没有足够的内存供申请者使用,导致数据无法正常存储到内存中。

 

  如何产生内存泄漏:

  1. 静态集合类:在使用Set、Vector、HashMap等集合类的时候需要特别注意,有可能会发生内存泄漏。当这些集合被定义成静态的时候,由于它们的生命周期跟应用程序一样长,这时候,就有可能会发生内存泄漏。

  2. 单例模式:使用单例模式的时候也有可能导致内存泄漏。因为单例对象初始化后将在JVM的整个生命周期内存在,如果它持有一个外部对象(生命周期比较短)的引用,那么这个外部对象就不能被回收,而导致内存泄漏。如果这个外部对象还持有其它对象的引用,那么内存泄漏会更严重,因此需要特别注意此类情况。这种情况就需要考虑下单例模式的设计会不会有问题,应该怎样保证不会产生内存泄漏问题。

  3. 监听器:在Java中,我们经常会使用到监听器,如对某个控件添加单击监听器addOnClickListener(),但往往释放对象的时候会忘记删除监听器,这就有可能造成内存泄漏。好的方法就是,在释放对象的时候,应该记住释放所有监听器,这就能避免了因为监听器而导致的内存泄漏。

  4.  

    各种连接:Java中的连接包括数据库连接、网络连接和io连接,如果没有显式调用其close()方法,是不会自动关闭的,这些连接就不能被GC回收而导致内存泄漏。一般情况下,在try代码块里创建连接,在finally里释放连接,就能够避免此类内存泄漏。


7,HashMap 底层数据结构是数组 + 链表(JDK 1.8 之前)。JDK 1.8 之后是数组 + 链表 + 红黑 树。当链表中元素个数达到 8 的时候,链表的查询速度不如红黑树快,链表会转为红黑树,红 黑树查询速度快;

     HashMap 初始数组大小为 16(默认),当出现扩容的时候,以 0.75 * 数组大小的方式进行扩 容;

 put时如果key的hashcode的hash值的下表已经有值,就判断这个链表节点(node)的key,如果所有的key都和被插叙的key不一致则写到最尾部。 1.8之前是头插法 后是尾插法 

 

8、k8s

kubectl describe pods mallbbcg2-statistics-service-5ff4ccc898-stvwc -n mallbbcg2sit
kubectl get pods -n mallbbcg2sit

 

9、如何创建一个对象

A a = new A();

除过new,还有反射、反序列化、clone等,我们总是习惯固定的代码语句去执行,却很少思考背后的原理。

***JVM内存***
先简单说下内存模型的区别:
#### 栈内存 存放基本数据类型和对象的引用变量,数据可以直接拿来访问,速度比堆快
#### 堆内存 存放创建的对象和数组,会由java虚拟机的自动垃圾回收来管理(GC),创建一个对象放入堆内存的同时也会在栈中创建一个指向该对象堆内存中的地址引用变量,下面说的对象就是该内存中的对象。

*** 代码加载流程***
java文件会在编译期间被初始化生成.class字节码文件,字节码文件是专门给JVM阅读的,jvm的类加载器会把class文件转成一个二进制流加载到内存中,即把类的描述信息加载到Metaspace。

 

 

一、常见的数据结构

  B树:树结构,叶子节点和非叶子节点都存数据,数据左小右大

  B+树:和B树区别:只有叶子节点存数据,导致非叶子节点可以腾出大量空间存“索引”。。。且相邻的叶子节点之间是双向链表,所以对全表扫描和范围查找比较快

 

二、聚集索引与非聚集索引

  聚集索引是指索引顺序和表数据存储的物理顺序是一致的;主键索引属于聚集索引;所以根据主键找数据是很快的。

  费聚集索引:两者不一致。非主键索引(普通索引、联合索引、唯一索引等)都属于费聚集索引;根据非聚集索引找到的是主键,再根据主键二次回表找数据

 

三、事务隔离级别

  解决 多个事务并行执行导致数据安全问题的一种解决方式。

  具体的数据安全问题:1、脏读:A事务读取到了B事务还没有提交的数据,B后面可能会回滚,导致A拿到了一个不存在的数据。      【读未提交】

            2、不可重复读:A事务中查询了两次,但两次的结果不同,原因是中间B事务更新了值导致的。      【读已提交、读未提交】

            3、幻读:A事务查到到一个范围数据后做了修改,但再次检查结果时一条数据没有被修改,原因是A事务修改过程中,B事务新增了一条数据。  【可重复读、读已提交、读未提交】

  隔离级别从强到瑞:串行化-》可重复读-》读已提交-》读未提交。 mysql默认可重复度

posted on 2023-04-18 15:22  天马行空的秋意  阅读(13)  评论(0编辑  收藏  举报