上一家果然还是凉凉,后面面试官也说我基础薄弱,最近也在回头去看java编程思想, 补补基础。今天去面试了一家小公司,过了,但薪资给的太低了,试用实习期一个月,1.5k,加每个项目提成400,据说一个月两三个项目,感觉太低了,而且公司并不是主营软件开发这一块的,也就没去。笔试太水了,就七道题,还挺简单的,没有技术面试,直接hr问明天能否来上班,谈薪资。。。哈哈,题目如下:
一:Spring的注入方式有哪些?
常见的注入方式有三种:
1.构造器注入
在xml中进行配置
<bean id="xxxService" class="com.xxx.xxx.service.impl.XxxService">
<!如果有多个参数,可以指定name属性>
<! <construtor-arg name = "xxx1" ref="xxxDao"/>
<construtor-arg name = "xxx2" ref="xxxDao"/> >
<construtor-arg ref="xxxDao"/>
</bean>
<bean id="xxxDao" class="com.xxx.xxx.dao.impl.XxxDao"/>
public XxxService(IxxDao xxxDao){
this.xxxDao = xxxDao;
}
2.setter注入
<bean id="xxxService" class="com.xxx.xxx.service.impl.XxxService">
<!name属性不区分大小写>
<property name = "xxxDao" ref="xxxDao"/>
</bean>
<bean id="xxxDao" class="com.xxx.xxx.dao.impl.XxxDao"/>
public void setXxxDao(IXxxDao, xxxDao){
this.xxxDao = xxxDao;
}
3.基于注解的注入
autowire主要有三个属性值:constructor,byName,byType。
constructor:通过构造方法进行自动注入,spring会匹配与构造方法参数类型一致的bean进行注入,如果有一个多参数的构造方法,一个只有一个参数的构造方法,在容器中查找到多个匹配多参数构造方法的bean,那么spring会优先将bean注入到多参数的构造方法中。
byName:被注入bean的id名必须与set方法后半截匹配,并且id名称的第一个单词首字母必须小写,这一点与手动set注入有点不同。
byType:查找所有的set方法,将符合符合参数类型的bean注入。
主要有四种注解可以注册bean,每种注解可以任意使用,只是语义上有所差异:
@Component:可以用于注册所有bean
@Repository:主要用于注册dao层的bean
@Controller:主要用于注册控制层的bean
@Service:主要用于注册服务层的bean
二:Spring事务的特性?
什么是事务:
事务逻辑上的一组操作,组成这组操作的各个逻辑单元,要么一起成功,要么一起失败.
事务特性(4种):
原子性 (atomicity):强调事务的不可分割.
一致性 (consistency):事务的执行的前后数据的完整性保持一致.
隔离性 (isolation):一个事务执行的过程中,不应该受到其他事务的干扰
持久性(durability) :事务一旦结束,数据就持久到数据库
三:String是最基本的数据类型吗?
答:不是。Java中的基本数据类型只有8个:byte、short、int、long、float、double、char、boolean;除了基本类型(primitive type)和枚举类型(enumeration type),剩下的都是引用类型(reference type)。
四:== 与 equals的区别
== 的作用是判断两个对象的地址是不是相等。即,判断两个对象是不是同一个对象(基本数据类型==比较的是值,引用数据类型 == 比较的是地址)
equals():它的作用也是判断两个对象是否相等。但它一般有两种使用情况:
- 情况1:类没有覆盖equals()方法,则通过equals()比较该类的两个对象时,等价于通过”==“比较这两个对象。
- 情况2:类覆盖了equals()方法,一般,我们都覆盖equals()方法来比较两个对象的内容是否相等;若它们的内容相等,则返回true(即,认为这两个对象相等)
五:java的继承,封装,多态是什么?
封装
封装把一个对象的属性私有化,同时提供一些可以被外界访问的属性的方法,如果属性不想被外界访问,我们大可不必提供方法给外界访问。但是如果一个类没有提供给外界访问的方法,那么这个类也没有什么意义了。
继承
继承是使用已存在的类的定义作为基础建立新类的技术,新类的定义可以增加新的数据或新的功能,也可以用父类的功能,但不能选择性地继承父类。通过使用继承我们能够非常方便地复用以前的代码。
关于继承如下 3 点请记住:
- 子类拥有父类对象所有的属性和方法(包括私有属性和私有方法),但是父类中的私有属性和方法子类是无法访问,只是拥有。
- 子类可以拥有自己属性和方法,即子类可以对父类进行扩展。
- 子类可以用自己的方式实现父类的方法。(以后介绍)。
多态
所谓多态就是指程序中定义的引用变量所指向的具体类型和通过该引用变量发出的方法调用在编程时并不确定,而是在程序运行期间才确定,即一个引用变量到底会指向哪个类的实例对象,该引用变量发出的方法调用到底是哪个类中实现的方法,必须在由程序运行期间才能决定。
在Java中有两种形式可以实现多态:继承(多个子类对同一方法的重写)和接口(实现接口并覆盖接口中同一方法)。
六:双向链表和单向链表的区别
单链表只有一个指向下一结点的指针,也就是只能next 双链表除了有一个指向下一结点的指针外,还有一个指向前一结点的指针,可以通过prev()快速找到前一结点,顾名思义,单链表只能单向读取,而双向链表可以双向读取。
七:写出mysql的左连接,右连接,内连接关键字(还有这种题,卧槽,我都惊呆了!)
内连接:组合两个表中的记录,返回关联字段相符的记录,也就是返回两个表的交集(阴影)部分。
左连接:left join 是left outer join的简写,它的全称是左外连接,是外连接中的一种。 左(外)连接,左表(a_table)的记录将会全部表示出来,而右表(b_table)只会显示符合搜索条件的记录。右表记录不足的地方均为NULL。
右连接:right join是right outer join的简写,它的全称是右外连接,是外连接中的一种。与左(外)连接相反,右(外)连接,左表(a_table)只会显示符合搜索条件的记录,而右表(b_table)的记录将会全部表示出来。左表记录不足的地方均为NULL。