Java---初级、中级工程师面试问题1

本文作者分享了作为面试官在招聘初级和中级Java开发工程师时的经验,强调沟通能力和问题解决能力的重要性。文章提及Mybatis中$与#号的区别,解释了数据库设计的三大范式,以及MySQL索引的原理和优化。同时,讨论了索引的利弊以及何时不应创建索引,并提出了MySQL语句优化的常用方法,如使用EXPLAIN和PROFILING进行性能分析。

  近两年时常客串一下面试官,给组内招募一些初级以及中级的Java开发工程师,其实程序员这个职业,在我看来,沟通能力,自主查找问题、解决问题的能力是最重要的,工作中呢,遇到的99%的问题,都可以依靠网络解决。所以,我招人时,主要看项目经历,个人遇到的问题,最后如何解决的。

但是偶尔也会形式上的也会问几个基础的问题,这几天闲着无事,瞎写几个,希望大家通过问题,可以偶尔去思考底层的东西。源码、底层实现、算法这些东西,工作中虽然99%用不到,但是希望大家还是去涉猎一下。

问1:Mybatis 中$与#号的区别

答:①首先明白${}底层实现的相当于是JDBC中的statement,即字符串的+号;然而#{}相当去preparestatement,即问号占位符

②我们通常的回答是推荐使用#{},因为它可以防止sql注入

③还有一点是,在模糊查询时我们推荐使用的是${},因为#{}会在参数类型是string的时候,默认拼接反斜杠,处理麻烦。

${}其实是OGNL 对象图表达式(了解过struts2的伙伴会知道)所以可以使用的方式如${user.name},但是#{}底层是通过反射获取data

问2:数据库设计的三大范式

答:第一范式(1NF)是对关系模式的基本要求,不满足第一范式(1NF)的数据库就不是关系数据库,是指数据库表的每一列都是不可分割的基本数据项,同一列中不能有多个值;

第二范式(2NF)要求数据库表中的每个实例或行必须可以被惟一地区分。

第三范式(3NF)要求一个数据库表中不包含已在其它表中已包含的非主关键字信息。 (不允许有冗余数据)

问3:mysql的索引和索引优化涉猎过吗

答:了解过。首先索引的原理:把无序的数据变成有序的查询;

每一个数据库一个文件夹;

       1,MYISAM引擎:每一个表(table_name)-->

             table_name.MYI:存放的是数据表对应的索引信息和索引内容;

             table_name.FRM:存放的是数据表的结构信息;

             table_name.MYD:存放的是数据表的内容;

       2,InnoDB引擎:每一个表(table_name)-->

             table_name.frm:存放的是数据表的结构信息;

             数据文件和索引文件都是统一存放ibdata文件中;

       3,索引文件都是额外存在的,对索引的查询和维护都是需要消耗IO;

问4:谈谈索引的利弊,以及什么情况下不创建索引

答:索引的好处:

1,提高表数据的检索效率;

2,如果排序的列是索引列,大大降低排序成本;

3,在分组操作中如果分组条件是索引列,也会提高效率;

索引的问题:索引需要额外的维护成本;

不创建索引的情况,例如:

1,较频繁的作为查询条件的字段应该创建索引;

2,唯一性太差的字段不适合单独创建索引,即使频繁作为查询条件;

3,更新非常频繁的字段不适合创建索引;

4,不会出现在WHERE 子句中的字段不该创建索引;

问5:Mysql语句的优化,常用手段是什么

答:查看MYSQL的执行计划和执行明细状态(explain+profiling)

1,Explain:可以让我们查看MYSQL执行一条SQL所选择的执行计划;

2,Profiling:可以用来准确定位一条SQL的性能瓶颈;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值