广州华资软件技术有限公司
Java后端开发工程师
面试前准备
1.string属于基本数据类型吗?
不属于,String是包装类型,基本数据类型有8种,但不包括String
2.string能继承吗?为什么?
String 不能继承,因为String是用final修饰的类
3.说一下对hashcode的理解。
hashcode是哈希值,是一个十进制整数,实际上是一个模拟出来的地址。通常通过hashcode来判断集合中元素存放的位置,通过元素的hashcode()方法获取哈希值,定位到它应该存放的物理位置上。如果这个位置上没有元素,就可以直接存储在这里。如果这个位置上已经有元素,就要牵扯到另一个方法equals,要使用equals方法比较两个元素是否相同,如果相同,就不再存放,如果不相同,就通过链表,将这两个元素连接在同一个位置。
如果两个元素的hashcode相等,它们equals不一定相等(通话和重地);但是如果它们equals相等,那么它们的hashcode一定相等。
重写equals的同时也一定要重写hashcode,让它们的逻辑一致。
- 说说你对spring中的IOC和AOP的理解,以及他们的区别,spring中aop的核心技术是什么?
AOP是面向切面编程,将日志、异常等相对独立并且重复的功能抽取出来,利用Spring的配置文件或者注解的方式将这些功能切入进去,提高了复用性。
IOC是控制反转,就是将对象的创建权交给容器来管理。
DI是依赖注入,就是由IOC容器在运行期间将对象的属性值通过配置进行注入。
AOP的核心技术是:代理技术,AOP 代理则可分为静态代理和动态代理两大类。
5.statement与preparedstatement的区别?
一、statement执行的SQL语句必须是完整的SQL,而preparedStatement可以使用"?"占位符,然后通过setXXX方法来给占位符赋值,最后再执行。
二、使用statement时,如果SQL中出现"-"或者空格等符号,需要使用转义字符来转义,而preparedStatement中如果占位符的值中有这些符号,会自动转义。
三、PreparedStatement会将SQL语句进行预编译,每次执行的时候只需要将参数设置给相应的占位符就可以运行了。而Statement的SQL语句每次都需要进行编译,所以PreparedStatement的效率高。
6.preparedstatement可以执行多个语句吗?
7.说说你对索引的理解。
对要查询的字段建立索引就是把该字段按照一定的方式排序;建立的索引只对这个字段有用,如果查询的字段改变,那这个索引也就失效了;比如图书馆的书是按照书名的第一个字母排序的,那么你想要找作者叫张三的就不能用改索引了;还有就是如果索引太多会降低查询的速度。
8.假如在某个条件下的查询结果超过半数,那么系统还会不会通过索引查询?
9.索引在什么情况下会失效?
10.抽象类/接口中可以有变量吗?可以有静态方法吗?
抽象类中可以有变量,接口中不能有变量(必须定义为常量,public static final 数据类型 变量名 = 值);
接口中只能定义抽象方法;
抽象类和接口中不能有静态方法,因为抽象类是不能被实例化的,而static修饰的方法在类实例化之前就已经被分配内存,抽象类不能被分配内存,而static方法必须被分配内存。
而接口中的方法是public abstract修饰的,不能被实例化。
11.jsp的隐式对象有几个?有哪些?
有9个。
request、response、out、Session、application、config、pageContext、page、Exception
12.jsp中有静态与动态include,两者有何区别?哪个效率更高?
13.项目使用什么框架?有没有使用流程控制?
14.说说连接查询?什么是左连接与右连接?
左连接就是以左表为准,查询左表中存在的数据,如果右表中存在对应的数据,则显示出来,如果没有,则显示为NULL;
15.了解视图吗?
16.用过Oracle吗?
17.了解多线程吗?说说wait()与sleep()的区别以及类锁和对象锁的区别。
wait()属于Object类,wait会释放锁,wait的唤醒需要调用notify或者notifyAll方法;
sleep()属于Thread类,不会释放锁,sleep会自动唤醒;
对象锁是用于对象实例方法,或者一个对象实例上的,类锁是用于类的静态方法或者一个类的class对象上的
18.说说hashmap和hashtable
————————————————————————————————————
具体问题:(总结了回答不上来的)
数据库:
1.知道视图吗?用过视图存储数据吗?
链接:https://www.nowcoder.com/questionTerminal/1976ad20d8c2422784abc9df8b7a7bbc
来源:牛客网
(1)安全性。使用视图隐藏了数据的来源。
(2)方便性。在多表连接查询时,可以使用视图提高效率。
区别:1、视图是已经编译好的sql语句。而表不是
2、视图没有实际的物理记录。而表有。
3、表是内容,视图是窗口
4、表只用物理空间而视图不占用物理空间,视图只是逻辑概念的存在,表可以及时四对它进行修改,但视图只能有创建的语句来修改
5、表是内模式,试图是外模式
6、视图是查看数据表的一种方法,可以查询数据表中某些字段构成的数据,只是一些SQL语句的集合。从安全的角度说,视图可以不给用户接触数据表,从而不知道表结构。
7、表属于全局模式中的表,是实表;视图属于局部模式的表,是虚表。
8、视图的建立和删除只影响视图本身,不影响对应的基本表。
联系:视图(view)是在基本表之上建立的表,它的结构(即所定义的列)和内容(即所有数据行)都来自基本表,它依据基本表存在而存在。一个视图可以对应一个基本表,也可以对应多个基本表。视图是基本表的抽象和在逻辑意义上建立的新关系
2.了解范式吗?
链接:https://www.nowcoder.com/questionTerminal/dbcc5564c2f34d62a6d86dc829cf4655
来源:牛客网
第一范式:原子性,每一个列不可再分。
学生表,(姓名,班级,年龄,电话)
如果一个学生有个人电话和家庭电话,那么这样没有办法统计了。
应该改为:学生表,(姓名,班级,年龄,个人电话,家庭电话)
理解:设计数据库的时候,根据业务最好把东西拆分成合适的粒子。
第二范式:非主属性列完全依赖于主属性,不存在部分依赖(指的是联合主键情况)
第三范式:非主属性直接依赖于主属性,不存在传递函数依赖。
第三范式(3NF)和第二范式(2NF)的概念很容易混淆,区分它们的关键点在于,2NF:非主键列是否完全依赖于主键,还是依赖于主键的一部分;3NF:非主键列是直接依赖于主键,还是直接依赖于非主键列。
Java:
1.map原理
2.你所了解的集合实现原理
3.怎么取出哈希值相等的元素?
4.spring有什么作用
5.有什么框架可以代替spring
guice框架