36道常见道java后端面试题(五)

计算机直接使用原码计算有什么缺点?

0有两种表示方法,减法运算复杂。

Dubbo可以对结果进行缓存吗?

可以,Dubbo 提供了声明式缓存,用于加速热门数据的访问速度,以减少用户加缓存的工作量。

String类的常用方法有哪些?

•indexof();返回指定字符的的索引。

什么是Minikube?

Minikube是一种工具,可以在本地轻松运行Kubernetes。这将在虚拟机中运行单节点Kubernetes群集。

String str = “i” 和String str = new String(“1”)一样吗?

不一样,因为内存的分配方式不一样。String str = "i"的方式JVM会将其分配到常量池中,而String str = new String(“i”)JVM会将其分配到堆内存中。

如何设置 Kafka 能接收的最大消息的大小?

这道题除了要回答消费者端的参数设置之外,一定要加上 Broker 端的设置,这样才算完整。毕竟,如果 Producer 都不能向 Broker 端发送数据很大的消息,又何来消费一说呢? 因此,你需要同时设置 Broker 端参数和 Consumer 端参数。

什么是Java注释

定义:用于解释说明程序的文字

unzip 命令

解压 *.zip 文件:unzip test.zip 。
查看 *.zip 文件的内容:unzip -l jasper.zip 。

Java中实现多态的机制是什么?

Java中的多态靠的是父类或接口定义的引用变量可以指向子类或具体实现类的实例对象,而程序调用的方法在运行期才动态绑定,就是引用变量所指向的具体实例对象的方法,也就是内存里正在运行的那个对象的方法,而不是引用变量的类型中定义的方法。

Spring是怎么解决循环依赖的?

整个IOC容器解决循环依赖,用到的几个重要成员:
singletonObjects:一级缓存,存放完全初始化好的Bean的集合,从这个集合中取出来的Bean可以立马返回
earlySingletonObjects:二级缓存,存放创建好但没有初始化属性的Bean的集合,它用来解决循环依赖
singletonFactories:三级缓存,存放单实例Bean工厂的集合
singletonsCurrentlyInCreation:存放正在被创建的Bean的集合

常见的集合有哪些?

Collection接口的子接口包括:Set接口和List接口
Map接口的实现类主要有:HashMap、TreeMap、Hashtable、ConcurrentHashMap以及Properties等
Set接口的实现类主要有:HashSet、TreeSet、LinkedHashSet等
List接口的实现类主要有:ArrayList、LinkedList、Stack以及Vector等

中断与系统调用了解吗?

所谓的中断就是在计算机执行程序的过程中,由于出现了某些特殊事情,使得CPU暂停对程序的执行,转而去执行处理这一事件的程序。等这些特殊事情处理完之后再回去执行之前的程序。中断一般分为三类:

对象都是优先分配在年轻代上的吗?

不是。当新生代内存不够时,老年代分配担保。而大对象则是直接在老年代分配。

阻塞与非阻塞

阻塞与非阻塞主要是从 CPU 的消耗上来说的,阻塞就是 CPU 停下来等待一个慢的操作完成 CPU 才接着完成其它的事。非阻塞就是在这个慢的操作在执行时 CPU 去干其它别的事,等这个慢的操作完成时,CPU 再接着完成后续的操作。虽然表面上看非阻塞的方式可以明显的提高 CPU 的利用率,但是也带了另外一种后果就是系统的线程切换增加。增加的 CPU 使用时间能不能补偿系统的切换成本需要好好评估。

MongoDB的优势有哪些

面向文档的存储:以 JSON 格式的文档保存数据。
任何属性都可以建立索引。
复制以及高可扩展性。
自动分片。
丰富的查询功能。
快速的即时更新。

Leader 总是 -1,怎么破?

在生产环境中,你一定碰到过“某个主题分区不能工作了”的情形。使用命令行查看状态的 话,会发现 Leader 是 -1,于是,你使用各种命令都无济于事,最后只能用“重启大 法”。

mycat分库可以分成100个库吗?

我们目前项目组分的是3个库,我们说一般数据量大的话我们使用的是mycat中间件进行分片处理,如果更大的话,我们可以使用oracle数据库,如果更大的话可以使用hadoop或是云存储数据,不需要mycat作为工具手段。衡量的标准是项目有没有对应的硬件设备。 如果没有,基本就是使用mysql 因为搭建一套云环境或者大数据的环境基本都是超大型的公司。比如大数据中的所有的技术,例如hbase 或者是一大堆的服务器 一大堆的网络路由设备 或是私有云。或者是一大堆的数据库运维实施人员都是成本

超大分页怎么处理?

超大的分页一般从两个方向上来解决.

tomcat容器是如何创建servlet类实例?用到了什么原理?

当容器启动时,会读取在webapps目录下所有的web应用中的web.xml文件,然后对xml文件进行解析,

delete、truncate、drop区别

  • truncate和delete只删除数据,不删除表结构 ,drop删除表结构,并且释放所占的空间。
  • 删除数据的速度,drop> truncate > delete
  • delete属于DML语言,需要事务管理,commit之后才能生效。drop和truncate属于DDL语言,操作立刻生效,不可回滚。使用场合: 当你不再需要该表时, 用 drop; 当你仍要保留该表,但要删除所有记录时, 用 truncate; 当你要删除部分记录时(always with a where clause), 用 delete。

如何判断一个常量是废弃常量 ?

运行时常量池主要回收的是废弃的常量。假如在常量池中存在字符串 “abc”,如果当前没有任何 String 对象引用该字符串常量的话,就说明常量 “abc” 就是废弃常量,如果这时发生内存回收的话而且有必要的话,“abc” 就会被系统清理出常量池。

Minor Gc和Full GC 有什么不同呢?

大多数情况下,对象在新生代中 eden 区分配。当 eden 区没有足够空间进行分配时,虚拟机将发起一次Minor GC。
新生代GC(Minor GC):指发生新生代的的垃圾收集动作,Minor GC非常频繁,回收速度一般也比较快。
老年代GC(Major GC/Full GC):指发生在老年代的GC,出现了Major GC经常会伴随至少一次的Minor GC(并非绝对),Major GC的速度一般会比Minor GC的慢10倍以上。

当实体类的属性名和表种字段名不一致怎么办?

有两种解决方案:可以在sql语句给字段名取别名,别名于实体类属性名同名,也可以用resultMap来映射字段名和实体类属性名一一对应.

ReentrantLock与synchronized的区别

ReentrantLock 有如下特点:

HashMap有时候会死循环,你知道是什么原因吗?

详见:https://www.cnblogs.com/williamjie/p/11089522.html

了解过粘包拆包吗?为什么会出现粘包拆包?怎么处理粘包拆包?

粘包的主要原因:发送方写入数据<套接字缓冲区大小;接收方读取套接字缓冲区数据不够及时。

tomcat共享session如何处理?

目前的处理方式有如下几种:
1).使用Tomcat本身的Session复制功能
参考http://ajita.iteye.com/blog/1715312(Session复制的配置)
方案的有点是配置简单,缺点是当集群数量较多时,Session复制的时间会比较长,影响响应的效率
2).使用第三方来存放共享Session
目前用的较多的是使用memcached来管理共享Session,借助于memcached-sesson-manager来进行Tomcat的Session管理
参考http://ajita.iteye.com/blog/1716320(使用MSM管理Tomcat集群session)
3).使用黏性session的策略
对于会话要求不太强(不涉及到计费,失败了允许重新请求下等)的场合,同一个用户的session可以由nginx或者apache交给同一个Tomcat来处理,这就是所谓的session sticky策略,目前应用也比较多
参考:http://ajita.iteye.com/blog/1848665(tomcat session sticky)
nginx默认不包含session sticky模块,需要重新编译才行(windows下我也不知道怎么重新编译)
优点是处理效率高多了,缺点是强会话要求的场合不合适

Spring中的单例bean的线程安全问题了解吗?

大部分时候我们并没有在系统中使用多线程,所以很少有人会关注这个问题。单例bean存在线程问题,主要是因为当多个线程操作同一个对象的时候,对这个对象的非静态成员变量的写操作会存在线程安全问题。
有两种常见的解决方案:
1.在bean对象中尽量避免定义可变的成员变量(不太现实)。
2.在类中定义一个ThreadLocal成员变量,将需要的可变成员变量保存在ThreadLocal中(推荐的一种方式)。

Math.round(11.5) 等于多少?Math.round(-11.5)等于多少?

Math.round(11.5)的返回值是12,Math.round(-11.5)的返回值是-11。四舍五入的原理是在参数上加0.5然后进行下取整。

Maven的⽣命周期

一个项目的构建过成通常包括清理、编译、测试、打包、集成测试、验证、部署等。Maven从中抽取了一套完善的、易扩展的生命周期。Maven的生命周期是抽象的,其中的具体任务都交由插件来完成。Maven为大多数构建任务编写并绑定了默认的插件。
Maven定义了三套生命周期:clean、default、site,每个生命周期都包含了一些阶段(phase)。三套生命周期相互独立,但各个生命周期中的阶段却是有顺序的,且后面的夹断依赖于前面的阶段。执行某个阶段时,其前面的阶段会依顺序执行,但不会触发另外两套生命周期中的任何阶段。

MySQL的binlog有有几种录入格式?分别有什么区别?

有三种格式,statement,row和mixed.

常见的集合底层实现

ArrayList底层是数组。
LinkedList底层是双向链表。
HashMap底层与HashTable原理相同,Java 8版本以后如果同一位置哈希冲突大于8则链表变成红黑树。
HashTable底层是链地址法组成的哈希表(即数组+单项链表组成)。
HashSet底层是HashMap。
LinkedHashMap底层修改自HashMap,包含一个维护插入顺序的双向链表。
TreeMap底层是红黑树。
LinkedHashSet底层是LinkedHashMap。
TreeSet底层是TreeMap。

ElasticSearch中的集群、节点、索引、文档、类型是什么?

群集是一个或多个节点(服务器)的集合,它们共同保存您的整个数据,并提供跨所有节点的联合索引和搜索功能。群集由唯一名称标识,默认情况下为“elasticsearch”。此名称很重要,因为如果节点设置为按名称加入群集,则该节点只能是群集的一部分。
节点是属于集群一部分的单个服务器。它存储数据并参与群集索引和搜索功能。
索引就像关系数据库中的“数据库”。它有一个定义多种类型的映射。索引是逻辑名称空间,映射到一个或多个主分片,并且可以有零个或多个副本分片。 MySQL =>数据库,ElasticSearch =>索引。
文档类似于关系数据库中的一行。不同之处在于索引中的每个文档可以具有不同的结构(字段),但是对于通用字段应该具有相同的数据类型。 MySQL => Databases =>Tables => Columns / Rows, ElasticSearch => Indices => Types =>具有属性的文档。
类型是索引的逻辑类别/分区,其语义完全取决于用户。

service 命令

service 命令用于运行 System V init 脚本,这些脚本一般位于 /etc/init.d 文件下,这个命令可以直接运行这个文件夹里面的脚本,而不用加上路径。
查看服务状态:service ssh status 。
查看所有服务状态:service --status-all 。
重启服务:service ssh restart 。

用户态切换到内核态的方式有哪些?

系统调用:程序的执行一般是在用户态下执行的,但当程序需要使用操作系统提供的服务时,比如说打开某一设备、创建文件、读写文件(这些均属于系统调用)等,就需要向操作系统发出调用服务的请求,这就是系统调用。

说说类加载的过程

加载
验证
准备(为一些类变量分配内存,并将其初始化为默认值)
解析(将符号引用替换为直接引用。类和接口、类方法、接口方法、字段等解析)
初始化

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值