先和Hr谈好,HR约的面试官,面试官人挺好的,先做一个自我介绍、面试官看简历上的信息来询问一些问题,多为基础类的问题,后面谈了一些平时的兴趣、学习方式之类的
信雅达Java后端开发面试题
1. 集合:
arrayList、hashMap、hashSet底层原理
答:ArrayList: 基于动态数组,连续内存存储,适合下标访问(随机访问)
LinkedList:基于链表实现,更适合添加,删除
hashMap:1.7 1.8区别 扩容 以及 put set
HashSet:基于哈希表实现,支持快速查找,但不支持有序性操作。
并且失去了元素的插入顺序信息,也就是说使用Iterator 遍历 HashSet 得到的结果是不确定的。
2.Stringbuffer、Stringbuilder、String区别
答:String:用于字符串操作,属于不可变类;【补充:String 不是基本数据类型,是引?类型,底层? char 数组实现的】
StringBuilder:与 StringBuffer 类似,都是字符串缓冲区,但线程不安全;
StringBuffer:用于字符串操作,属于可变类,对方法加了同步锁,线程安全(并不是所有方法)
执行效率:StringBuilder > StringBuffer > String
3.SpringBoot启动原理
答:SpringBoot启动整体可分为两步:
1.初始化一个SpringApplication对象 (@SpringBootApplication =》SpringBootConfiguration 、 @EnableAutoConfiguration 、@ComponentScan)
2.执行该对象的run()方法
4.实现线程池的几种方式和应用场景
答:1.通过 ThreadPoolExecutor 的构造方法实现:
2.通过 Executor 框架的工具类 Executors 来实现:
可以创建三种类型的 ThreadPoolExecutor: 1、 FixedThreadPool:该方法返回一个固定线程数量的线程池。
2、 SingleThreadExecutor:方法法返回一个只有一个线程的线程池。
3、 CachedThreadPool:该方法返回一个可根据实际情况调整线程数量的线程池。
5.SpringAop 基本原理
答:面向切面编程。
通过动态代理实现:一、基于JDK的动态代理;(如果目标对象的实现类实现了接口,)
二、基于cglib动态代理。(如果目标对象的实现类没有实现接口,,)
6.结合实际项目谈谈自己的sql优化
答:优化成本:硬件>系统配置>数据库表结构>SQL及索引。
优化效果:硬件<系统配置<数据库表结构
索引失效的情况:
1. 逻辑失效
1. 少用select *,需要什么字段返回什么字段. (遇到过)
2. 发生索引列的类型转换. (遇到过)
3. 对索引列进行了各种运算(遇到过)
2. 物理失效
1. long列调整导致索引失效(Oracle似乎会自动感知)
2. move操作导致索引失效
3. 分区表导致索引失效
所有的全局索引,只要用到update global indexes,都不会失效,其中add分区甚至不需要增加 update global indexes都可以生效.
局部索引的操作都不会失效,除了split分区。split分区时,要将局部索引进行rebuild.
7.看了下简历简单的问了问项目用的什么技术,遇到了什么难题
8.他看我简历上写了jvm,问了些jvm的东西,类加载机制,双亲委派机制
java基础、多线程、进程、Redis
你是通过何种渠道获得这次面试机会的?
答:校园招聘
你觉得这次面试的难度如何?
答:难度一般
这次面试的结果如何?
答:面试成功但没有去报到