java面试题整理(2)

一、注册中心你了解了哪些?
答:Consul 、Eureka、ZooKeeper

二、JDK 中有哪几个线程池?
答:JUC提供了调度器对象Executors来创建线程池,可创建的线程池有四种
1、newFixedThreadPool创建一个指定工作线程数量的线程池。每当提交一个任务就创建一个工作线程,如果工作线程数量达到线程池初始的最大数,则将提交的任务存入到池队列中。
2、newCachedThreadPool创建一个可缓存的线程池。这种类型的线程池特点是:
1).工作线程的创建数量几乎没有限制(其实也有限制的,数目为Interger. MAX_VALUE), 这样可灵活的往线程池中添加线程。
2).如果长时间没有往线程池中提交任务,即如果工作线程空闲了指定的时间(默认为1分钟),则该工作线程将自动终止。终止后,如果你又提交了新的任务,则线程池重新创建一个工作线程。
3、newSingleThreadExecutor创建一个单线程化的Executor,即只创建唯一的工作者线程来执行任务,如果这个线程异常结束,会有另一个取代它,保证顺序执行(我觉得这点是它的特色)。单工作线程最大的特点是可保证顺序地执行各个任务,并且在任意给定的时间不会有多个线程是活动的。
4、newScheduleThreadPool创建一个定长的线程池,而且支持定时的以及周期性的任务执行,类似于Timer。

三、Object 的 hashcode 方法重写了,equals 方法要不要改?
答:不需要,Ojbect类中有两个方法equals、hashCode,这两个方法都是用来比较两个对象是否相等的,如果两个对象相等(equal),那么必须拥有相同 的哈希码(hash code)。
即使两个对象有相同的哈希值(hash code),他们不一定相等
重写equals()方法就必须重写hashCode(),但重写hashcode方法不一定要重写equals方法

四、SQL 优化的常见方法有哪些
答:查询条件减少使用函数,避免全表扫描
减少不必要的表连接
有些数据操作的业务逻辑可以放到应用层进行实现
可以使用with as
尽量避免使用游标,因为游标的效率较差
不要把SQL语句写得太复杂
不能循环执行查询
用 exists 代替 in
表关联关系不要太纠结
查询多用索引列去查,用char index或者like[0-9]来代替%%
inner关联的表可以先查出来,再去关联left join的表
可以进行表关联数据拆分,即先查出核心数据,再通过核心数据查其他数据,这样会快得多
参考SQL执行顺序进行优化
表关联时取别名,也能提高效率
使用视图,给视图建立索引进行优化
使用数据仓库的形式,建立单独的表存储数据,根据时间戳定期更新数据。将多表关联的数据集中抽取存入一张表中,查询时单表查询,提高了查询效率
对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引
应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描,如:
select id from t where num is null
可以在num上设置默认值0,确保表中num列没有null值,然后这样查询:
select id from t where num=0
应尽量避免在 where 子句中使用!=或<>操作符,否则引擎将放弃使用索引而进行全表扫描

五、项目中的监控:监控指标常见的有哪些?
答:CPU、内存、IO 等等。建议下载个nmon工具,里面有各个指标。
数据库:Mysql(缓存命中、索引、单条SQL性能、数据库线程数、数据池连接数)
中间件:1.消息2、负载均衡3、缓存(包括线程数、连接数、日志)。
网络: 吞吐量、吞吐率
应用: jvm内存、日志、Full GC频率

六、Spring Boot除了自动配置,相比传统的 Spring 有什么其他的区别?
答:为Spring 生态系统的开发提供一种更简洁的方式,提供了很多非功能性特性,例如:嵌入式 Server,Security,统计,健康检查,外部配置等等,主要体现在以下几点:
1.Spring Boot可以建立独立的Spring应用程序;
2.内嵌了如Tomcat,Jetty和Undertow这样的容器,也就是说可以直接跑起来,用不着再做部署工作了;
3.无需再像Spring那样搞一堆繁琐的xml文件的配置;
4.可以自动配置Spring。SpringBoot将原有的XML配置改为Java配置,将bean注入改为使用注解注入的方式(@Autowire),并将多个xml、properties配置浓缩在一个appliaction.yml配置文件中。
5.提供了一些现有的功能,如量度工具,表单数据验证以及一些外部配置这样的一些第三方功能;
6.整合常用依赖(开发库,例如spring-webmvc、jackson-json、validation-api和tomcat等),提供的POM可以简化Maven的配置。当我们引入核心依赖时,SpringBoot会自引入其他依赖。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值