static的独特之处
1、被static修饰的变量或者方法是独立于该类的任何对象,也就是说,这些变量和方法 不属于任何一个实例对象,而是被类的实例对象所共享 。
如何停止所有正在运行的容器?
使用docker kill $(sudo docker ps -q)
服务上线怎么兼容旧版本?
可以用版本号(version)过渡,多个不同版本的服务注册到注册中心,版本号不同的服务相互间不引用。这个和服务分组的概念有一点类似。
程序计数器为什么是私有的?
程序计数器主要有下面两个作用:
进程调度的种类有哪些?
高级调度:(High-Level Scheduling)又称为作业调度,它决定把后备作业调入内存运行
低级调度:(Low-Level Scheduling)又称为进程调度,它决定把就绪队列的某进程获得CPU
中级调度:(Intermediate-Level Scheduling)又称为在虚拟存储器中引入,在内、外存对换区进行进程对换
gzip 命令
创建一个 *.gz 的压缩文件:gzip test.txt 。
解压 *.gz 文件:gzip -d test.txt.gz 。
显示压缩的比率:gzip -l *.gz 。
kafka的message格式是什么样的?
一个Kafka的Message由一个固定长度的header和一个变长的消息体body组成。
header部分由一个字节的magic(文件格式)和四个字节的CRC32(用于判断body消息体是否正常)构成。
当magic的值为1的时候,会在magic和crc32之间多一个字节的数据:attributes(保存一些相关属性,比如是否压缩、压缩格式等等);如果magic的值为0,那么不存在attributes属性。
body是由N个字节构成的一个消息体,包含了具体的key/value消息。
为什么要尽量设定一个主键?
主键是数据库确保数据行在整张表唯一性的保障,即使业务上本张表没有主键,也建议添加一个自增长的ID列作为主键.设定了主键之后,在后续的删改查的时候可能更加快速以及确保操作数据范围安全。
工厂模式与抽象工厂模式的区别?
首先来看看这两者的定义区别:
集合框架中的泛型有什么优点?
Java1.5引入了泛型,所有的集合接口和实现都大量地使用它。泛型允许我们为集合提供一个可以容纳的对象类型,因此,如果你添加其它类型的任何元素,它会在编译时报错。这避免了在运行时出现ClassCastException,因为你将会在编译时得到报错信息。泛型也使得代码整洁,我们不需要使用显式转换和instanceOf操作符。它也给运行时带来好处,因为不会产生类型检查的字节码指令。
行级锁定的优点
1、当在许多线程中访问不同的行时只存在少量锁定冲突。
了解过哪些负载均衡算法?
轮询(Round Robin)
轮询算法把每个请求轮流发送到每个服务器上。
该算法比较适合每个服务器的性能差不多的场景,如果有性能存在差异的情况下,那么性能较差的服务器可能无法承担多大的负载。
高并发、任务执行时间短的业务怎样使用线程池?并发不高、任务执行时间长的业务怎样使用线程池?并发高、业务执行时间长的业务怎样使用线程池?
1)高并发、任务执行时间短的业务,线程池线程数可以设置为CPU核数+1,减少线程上下文的切换
2)并发不高、任务执行时间长的业务要区分开看:
a)假如是业务时间长集中在IO操作上,也就是IO密集型的任务,因为IO操作并不占用CPU,所以不要让所有的CPU闲下来,可以加大线程池中的线程数目,让CPU处理更多的业务
b)假如是业务时间长集中在计算操作上,也就是计算密集型任务,这个就没办法了,和(1)一样吧,线程池中的线程数设置得少一些,减少线程上下文的切换
c)并发高、业务执行时间长,解决这种类型任务的关键不在于线程池而在于整体架构的设计,看看这些业务里面某些数据是否能做缓存是第一步,增加服务器是第二步,至于线程池的设置,设置参考其他有关线程池的文章。最后,业务执行时间长的问题,也可能需要分析一下,看看能不能使用中间件对任务进行拆分和解耦。
Bean 工厂和 Application contexts 有什么区别?
Application contexts提供一种方法处理文本消息,一个通常的做法是加载文件资源(比如镜像),它们可以向注册为监听器的bean发布事件。另外,在容器或容器内的对象上执行的那些不得不由bean工厂以程序化方式处理的操作,可以在Application contexts中以声明的方式处理。Application contexts实现了MessageSource接口,该接口的实现以可插拔的方式提供获取本地化消息的方法。
举出一个例子,在这种情况你会更倾向于使用抽象类,而不是接口?
这是很常用但又是很难回答的设计面试问题。接口和抽象类都遵循”面向接口而不是实现编码”设计原则,它可以增加代码的灵活性,可以适应不断变化的需求。下面有几个点可以帮助你回答这个问题:
什么情况下调用doGet()和doPost()?
JSP页面中的form标签里的method属性为get时调用doGet(),为post时调用doPost();超链接跳转页面时调用doGet()
对于一个多模块项目,如果管理项目依赖的版本?
- 方式一,通过在父模块中声明
<dependencyManagement />
和<pluginManagement />
, 然后让子模块通过元素指定父模块,这样子模块在定义依赖是就可以只定义groupId
和artifactId
,自动使用父模块的version
,这样统一整个项目的依赖的版本。
通道是个什么意思?
- 通道是对原 I/O 包中的流的模拟。到任何目的地(或来自任何地方)的所有数据都必须通过一个 Channel 对象(通道)。一个 Buffer 实质上是一个容器对象。发送给一个通道的所有对象都必须首先放到缓冲区中;同样地,从通道中读取的任何数据都要读到缓冲区中。Channel是一个对象,可以通过它读取和写入数据。拿 NIO 与原来的 I/O 做个比较,通道就像是流。
- 正如前面提到的,所有数据都通过 Buffer 对象来处理。您永远不会将字节直接写入通道中,相反,您是将数据写入包含一个或者多个字节的缓冲区。同样,您不会直接从通道中读取字节,而是将数据从通道读入缓冲区,再从缓冲区获取这个字节。
浮点数之间做加减法运算需要几个步骤?每个步骤都是必须的吗?为什么?
浮点数加减法需要经过以下几个步骤:对阶、尾数求和、尾数规格化、舍入、溢出判断。对阶是为了使得尾数可以进行运算,阶码不一致尾数运算无效,尾数规格化、舍入是为了正确存储结果,溢出判断是为了判断运算过程是否有误,如果溢出将会发出信号进行溢出处理。
如何决定选用HashMap还是TreeMap?
对于在Map中插入、删除和定位元素这类操作,HashMap是最好的选择。然而,假如你需要对一个有序的key集合进行遍历,TreeMap是更好的选择。基于你的collection的大小,也许向HashMap中添加元素会更快,将map换为TreeMap进行有序key的遍历。
页面间对象传递的方法
request,session,application,cookie等
什么是etcd?
etcd是用Go编程语言编写的,是一个分布式键值存储,用于协调分布式工作。因此,Etcd存储Kubernetes集群的配置数据,表示在任何给定时间点的集群状态。
Redis中的大key怎么处理?
大key指的是value特别大的key。比如很长的字符串,或者很大的set等等。
大key会造成2个问题:1、数据倾斜,比如某些节点内存占用过高。2、当删除大key或者大key自动过期的时候,会造成QPS突降,因为Redis是单线程的缘故。
处理方案:可以将一个大key进行分片处理,比如:将一个大set分成多个小的set。
什么是 java序列化?
序列化就是一种用来处理对象流的机制,所谓对象流也就是将对象的内容进行流化。可以对流化后的对象进行读写操作,也可将流化后的对象传输于网络之间。序列化是为了解决在对对象流进行读写操作时所引发的问题
Java Consumer 为什么采用单线程来获取消息?
在回答之前,如果先把这句话说出来,一定会加分:Java Consumer 是双线程的设计。一 个线程是用户主线程,负责获取消息;另一个线程是心跳线程,负责向 Kafka 汇报消费者 存活情况。将心跳单独放入专属的线程,能够有效地规避因消息处理速度慢而被视为下线 的“假死”情况。
InnoDB有聚簇索引吗?MyIsam呢?
InnoDB有聚簇索引,主键索引就是聚簇索引。MyIsam没有聚簇索引,因为他的索引和记录行是分开存储的。
BASE理论了解过吗?
BASE是 Basically Available (基本可用) Soft state(软状态) Eventually consistent(最终一致性)这几个单词的缩写,是从CAP理论发展而来的,其核心思想是:即使无法做到强一致性,但每个应用都可以根据自身特点,采取适当的方式来使系统达到最终一致性.
为什么 Redis 需要把所有数据放到内存中?
Redis 为了达到最快的读写速度将数据都读到内存中,并通过异步的方式将数据写入磁盘。
谈谈对HashMap 构造方法中初始容量、加载因子的理解
初始容量代表了哈希表中桶的初始数量,即 Entry< K,V>[] table 数组的初始长度。
加载因子是哈希表在其容量自动增加之前可以达到多满的一种饱和度百分比,其衡量了一个散列表的空间的使用程度,负载因子越大表示散列表的装填程度越高,反之愈小。
客户端在和集群连接时,如何选择特定的节点执行请求?
TransportClient 利用 transport 模块远程连接一个 elasticsearch 集群。它并不加入到集群中,只是简单的获得一个或者多个初始化的 transport 地址,并以 轮询 的方式与这些地址进行通信。