第一次面试

面试记录

一.JAVA面试问题

1.AOP的原理是什么?
核心基于:java设计模式–代理模式

基于 JDK的代理

静态代理:为每个业务定义一个接口,此接口用于定义业务的方法,为此业务编写实现类,好处是灵活方便,随意添加功能。
缺点:我们得为每一个服务都得创建代理类,工作量太大,不易管理。同时接口一旦发生改变,代理类也得相应修改。

动态代理:基于实现InvocationHandler接口的invoke方法的动态处理器和反射实现。优点运行时才去操作,缺点逃不过interface的桎梏。

基于CGLIB代理

用于没有接口的类使用,CGLib采用了非常底层的字节码技术,其原理是通过字节码技术为一个类创建子类,并在子类中采用方法拦截的技术拦截所有父类方法的调用,顺势织入横切逻辑。但因为采用的是继承,所以不能对final修饰的类进行代理。

Spring Aop
基于JDK的动态代理实现有接口类的aop,对于没有接口的类使用CGLIB代理。

2.left join right join inner join outer join on where

on条件是在生成临时表时使用的条件,它不管on中的条件是否为真,都会返回左边表中的记录。

where条件是在临时表生成好后,再对临时表进行过滤的条件。这时已经没有left join的含义(必须返回左边表的记录)了,条件不为真的就全部过滤掉。

inner join(内连接),在两张表进行连接查询时,只保留两张表中完全匹配的结果集。

left join,在两张表进行连接查询时,会返回左表所有的行,即使在右表中没有匹配的记录。

right join,在两张表进行连接查询时,会返回右表所有的行,即使在左表中没有匹配的记录。

3.java匹配2M字符串中的内容

IndexOf:返回第一次出现的指定子字符串在此字符串中的索引。

正则表达: 这里用到的是Pattern 和 Matcher ,pattern是一个编译好的正则表达式,而Mather是一个正则表达式适配器,Mather的功能很强大,所以我们一般用pattern 来获取一个Matcher对象,然后用Matcher来操作正则表达式。

split 方法:将一个字符串分割为子字符串,然后将结果作为字符串数组返回。将分离的字符串放到一个数组中,数组的长度-1为子串在父串中的匹配个数。

KMP,加上缓存+多线程

4.浅拷贝 深拷贝

浅拷贝:被复制对象的所有变量都含有与原来的对象相同的值,而所有的对其他对象的引用仍然指向原来的对象。即对象的浅拷贝会对“主”对象进行拷贝,但不会复制主对象里面的对象。”里面的对象“会在原来的对象和它的副本之间共享。简而言之,浅拷贝仅仅复制所考虑的对象,而不复制它所引用的对象。 实现Cloneable接口。

深拷贝是一个整个独立的对象拷贝,深拷贝会拷贝所有的属性,并拷贝属性指向的动态分配的内存。当对象和它所引用的对象一起拷贝时即发生深拷贝。深拷贝相比于浅拷贝速度较慢并且花销较大。简而言之,深拷贝把要复制的对象所引用的对象都复制了一遍。 用对象的clone()方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值