栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

面试题总结

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

面试题总结

一.集合框架

1.介绍一下JAVA的集合框架 
集合框架分为三类:list列表,set集合、map映射 list

2.HashMap遇到哈希冲突会如何怎么办?HashMap是线程安全的吗?HashMa在高并发下会发生什么问题?然后引入ConcurrentHashMap的原理?

3.Hashtable和concurrentHashMap的区别
区别是hashtable是当新增和删除时把整个map都加了锁,读取和其余新增和修改也会受影响。而concurrentHashMap是采用了分段式群默认16个分段,当新增和删除时,根据key的hash值找到table[i]的位置,个当前段技能加锁,其余数据不加锁,所以可以支持高并发查询和其余修改不受影响。
4.数组和ArrayList的区别?ArrayList是如何扩容的
Array可以存储数据类型和对象,ArrayList只能存储对象。
数组可以指定大小,arraylist是自动扩转展的。
Array内置方法没有ArrayList多,比如addAll、removeAll、iterantion等方法ArrayList有
Arraylist每次扩容50%。
5.线程池中的阻塞队列一般会选择那种队列?为什么?

6.RetreenLock的原理?AQS的原理?
 ReentrantLock使用内部类Sync来实现加解锁,Sync是AbstractQueuedSynchronizer(下面简称AQS)的子类。 
 AQS,人如其名抽象队列同步器。
7.HashMap的容量为什么推荐是2的幂次方?

二·框架类

1.mabatis的二级缓存有什么问题?
mybatis二级缓存对于细粒度的数据级别的缓存实现不好。
2,mabatis中的mapper的#{}和${}有什么区别?哪一种可以防止sql注入?
#{}:代表占位符用来传递参数,${}用来拼接sql语句,譬如:把数据库中的表名作为参数拼接在 sql 语句中,必须使用 $,#{}可以防止sql注入
3.我们知道mabatis的mapper和接口之间是没有对象的,那他是如何映射的?

4.说一说springMVC的注解有哪些?他们的原理是什么?

5.sprinMVC的控制器是单例吗?是线程安全的吗?

方法一、使用ThreadLocal,ThreadLocal会为每一个线程提供一个独立的变量副本,这样在多线程对数据访问就不会出现冲突。因为每一个线程都拥有自己的变量副本,因此也就不需要同步该变量。ThreadLocal提供了线程安全的共享对象,在编写多线程代码时,可以把不安全的变量封装进ThreadLocal。
方法二、如果时web应用,可以使用Spring Bean的作用域中的request,在controller类前面加上@Scope("****"),表明每次请求都会生成一个新的Bean对象。这样也能起到线程安全的作用。
方法三、使用线程同步,关键字synchronized

当线程较多时,当一个线程调用该方法时,其他想要调用此方法的线程就要block ,多线程并发量大的时候会对性能有一定的影响。

6.是struts1和struts2的区别?

7.spring如何解析它的xml文件?

8.spring的核心是什么?Aop的原理是什么?

Spring的核心是IOC(Inverse of Control 控制反转)和AOP(Aspect Oriented Programming 面向切面编程)
三、redis相关:

1:redis数据类型有哪些?

2:zset数据类型是如何排序的?

3:redis如何做项目的中间缓存层?

4:redis的Hash的时间复杂度是多少?

数据库:

1:数据库索引分为哪几种?组合索引有什么要注意的问题?

2:什么是悲观锁 什么是乐观锁?如何实现悲观锁?

3: 数据库关键字的执行顺序是什么?

1、FROM 2、ON 3、JOIN 4、WHERe 5、GROUP BY 6、WITH 7、HAVINg 8、SELECT 9、DISTINCT 10、ORDER BY

4:如何进行sql优化?
数据类型

数据类型的选择原则:更简单或者占用空间更小。

如果长度能够满足,整型尽量使用tinyint、smallint、medium_int而非int。
如果字符串长度确定,采用char类型。
如果varchar能够满足,不采用text类型。
精度要求较高的使用decimal类型,也可以使用BIGINT,比如精确两位小数就乘以100后保存。
尽量采用timestamp而非datetime。

MySQL中字段为NULL时依然占用空间,会使索引、索引统计更加复杂。从NULL值更新到非NULL无法做到原地更新,容易发生索引分裂影响性能。尽可能将NULL值用有意义的值代替,也能避免SQL语句里面包含is not null的判断

连接的表越多,性能越差
可能的话,将连接拆分成若干个过程逐一执行
优先执行可显著减少数据量的连接,既降低了复杂度,也能够容易按照预期执行
如果不可避免多表连接,很可能是设计缺陷
外链接效果差,因为必须对左右表进行表扫描
尽量使用inner join查询

5:有没有进行过分库分表操作?分库之后如何保持事务一致?

通过在主库中创建一个流水表,把操作数据库的逻辑映射为一条流水记录。当整个大事务执行完毕后(流水被插入到流水表),然后通过其他方式来执行这段流水,保证最终一致性。

分布式和微服务:

1:微服务要克服那些问题?微服务系统是怎样通信的?

2:分布式环境下如何解决session不一致的问题?

session同步法:多台web-server相互同步数据

客户端存储法:一个用户只存储自己的数据

反向代理hash一致性:四层hash和七层hash都可以做,保证一个用户的请求落在一台web-server上

后端统一存储:web-server重启和扩容,session也不会丢失


3:分布式下如何保证id一致?

4:你在dubbo的使用过程中遇到什么问题?

5: zookeeper的负载均衡算法有哪些?

jdk源码相关

1:synchronized的原理?它该怎么用?如何一个方法是synchronized的,其他的非synchronzied线程能进入吗?

2:cvs中的ABA问题如何解决?

3:volatile的原理是什么?volatile一定是线程安全的吗?

4:ThreadLocal是什么?它的原理是什么?

5:CountDowanLatch有没有用过?适合在什么样的场景下用?

设计模式相关:

1:实现两种单例模式

2:讲一下观察者模式

3:spring中都用到哪些设计模式?

4:动态代理模式是如何实现的?

5:你在项目中用到哪些设计模式了?讲解一下业务场景

算法相关:

1:快速排序的时间复杂度?手写快速排序(注意递归式和非递归式的实现方式)

2:手写二分查找

3:手写堆排序

4:一个int数组如何进行奇数和偶数分离?

5:用算法实现String转double

jvm相关:

1: jvm的垃圾回收算法有哪些?分别解释一下?

2: 新生代为什么要设置两个survior区?

3:如何通过一个.class文件获取它的jdk版本?
jdk版本区分

只看第一行的数据:

(1)前面8个字节CA FE BA BE是固定的。

(2)随后4个字节00 00是次版本号

(3)再后面的4个字节00 32是JDK的版本号(JDK1.6)。
34(对应十进制的50):JDK1.8
 33(对应十进制的50):JDK1.7
32(对应十进制的50):JDK1.6

4:jvm的内存模型?哪些是线程私有的?哪些是公共的?
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/306018.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号