Java实习生面试实录

你平时是怎么使用多线程的

  1. 我认为多线程使用我们可以就是你手动的,最初始学多线程就是可以去new Thread,然后去创建别的线程去异步执行一些任务,但是多线程的话最多使用可能在线程池这块会用到吧
  2. 多线程技术就是创建线程池,然后由线程池对我们这种线程一个这种更合理更可控的一个把控吧,多线程就是一个线程池技术的使用吧
  3. Runnable接口就是一个执行单元,它就是java几之后,反正就是将这个执行机制和一个这种执行单元分隔看一下runnable,callable,它就是作为一个执行单元的任务体,然后传到那个thread里面去执行嘛

简化mysql索引的最左前缀如何优化orderby语句

  • 首先要对sql进行分析检查必要的查询字段,过滤字段和排序字段,是否按顺序建立索引
  • 如果查询字段不再索引中可能会产生回表操作会导致filesort,降低性能
  • 一定要有过滤字段不然不能使用索引
  • 排序字段和索引顺序不一致会导致filesort,降低性能
  • 多个字段排序时如果方向不一致也会导致filesort,降低性能
  • 使用explain观察查询类型和索引利用情况
  • 尽可能减少不必要的filesort 

JVM内存模型中,为什么要区分新生代和年老代?在新生代中,为什么要区分eden区和survival区

  • 主流垃圾回收器cms g1都使用了分代收集算法
  • 正常系统运行时会产生大量临时对象,这些对象短期内大部分会失效,对于这些对象我们把他们临时放到新生区
  • 新生代满了之后需要清理垃圾对象,我们会把有效对象复制到老年代,以便后续继续使用
  • 为了更有效的区分哪些对象应该被复制到老年代,所以在新生代划分出了eden,s0和s1区 

细化后的新生代内部会被再次划分以便保证高速读写同时内存连续

新对象被会被保存到eden区(开始是空的,所以内存连续),eden区满了会把有效对象复制到s0(s0也是空的所以也是连续空间)

  • 清空eden区(再次写入时又是连续空间)
  • s0和s1在命名上互换 原来的s1等待写入(空的)
  • eden区再次满了,重复上述步骤

eden区通过复制/清除算法保证了读写连续性(因为新生代的对象产生和销毁非常频繁,所以采用了清空的方式)

典型的JDBC按顺序编写

  • 注册JDBC Driver
  • 获得与数据库的物理连接
  • 创建不同类型的Statement
  • 执行SQL命令
  • 如果有结果集,处理结果集
  • 释放资源

事务重点:不能在类上使用@Transactional注解,默认开启了全局读写事务 

springboot是如何管理版本依赖的

springboot底层使用maven管理依赖,通过控制pom.xml父子关系来完成细节配置,在父pom中定义具体框架和版本号以及具体信息

提供了很多场景的spring-boot-starter的pom.xml文件,来标准化的引入依赖避免冲突

数据库索引的原理 

  1. 以mysql为例,默认引擎innodb使用了b+树实现索引,在索引查找时实现了log(n)的时间复杂度
  2. 聚簇索引记录了主键id(完整数据),非聚簇索引的索引树中记录数据(索引字段+主键)
  3. 在聚簇索引的叶子节点中记录了完整的值,非聚簇索引的叶子节点记录的是主键以及索引字段,如果需要完整值的话需要回表操作,即使用主键去聚簇索引中再次查找完整数据
  4. 索引的叶子节点以链表的形式存储,方便顺序查找和排序

创建索引的缺点

会占用空间、更新时会级联更新索引、高并发写影响性能

什么情况索引失效

  1. 计算、函数导致索引失效
  2. like以%开头索引失效
  3. 不等于索引失效
  4. IS NOT NULL 可能会索引失效
  5. 类型转换索引失效

优化数据库的方法有哪些

  • 硬件 主要在存储层优化
  • 网络
  • 操作系统调优
  • 表结构设计优化
  • sql优化
  • 减少函数使用
  • 索引优化
  • 大字段及全文检索优化
  • 连接池优化
  • 事务优化
  • 数据库集群化
  • 加入缓存
  • 冷热存储
  • 分库分表

Integer和int区别

  • Integer是int的包装类,int则是java的一种基本数据类型
  • Integer实际是对象的引用,当new一个Integer,实际上生成一个指针指向对象,而int直接存储数值
  • Integer的默认值是null,而int的默认值是0

jsp八大隐含对象

pageContext、request、session、application、response、out、config、page

Spring的依赖注入 

依赖注入是指将依赖的对象实例交给spring帮我们注入管理,从而释放到对象的管理权,比如可以统一替换接口的实现,更高效的开发程序

set方法注入、构造方法注入、autowire自动注入

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值