JAVA面试实战篇(一)

某星小厂

笔试题:

一、int A = 12,int B = 24,在没有第三个变量产生的情况下,交换A和B的值。

B=B-A;
A=B+A;(不知道这样答对不对)

二、有8个一模一样的珠子,其中有一个重量比其余7个重,给你一个天平,在只测量两次的情况下,找到那颗珠子。

3 3 2 模式

先各拿三个放天平上,两种情况:

情况一:

若平衡,重的那个在余下两个中,再测一次即可得到;

情况二:

若不平衡,取出重的那三颗,任选两颗进行测量,若平衡,则剩下那颗为重的珠子,若不平衡,根据天平倾斜情况即可找到重的珠子。

三、有红蓝两桶颜料,先从蓝桶滔一勺给红桶,再从红桶滔一勺给蓝桶,问原先红色颜料桶现在的红蓝比例和原先蓝色颜料桶现在的蓝红比例,哪个更高?

设:蓝桶红桶体积都为N,每滔一勺的体积都为M;

红桶比例:\frac{}{}\frac{N}{N+M}       >>通分>>   \frac{N^{2}}{N(N+M)}

蓝桶比例:\frac{N-M+M*(1-\frac{N}{N+M}))}{N}    >>通分>>  \frac{(N-M+M*(1-\frac{N}{N+M}))*(N+M)}{N(N+M)}

化简:\frac{N^{2}}{N(N+M)}

结论:比例相同!

面试题:

一、数据库事务四大特性?

原子性:整体(指事务包含的所有操作要么全部成功,要么全部失败。)

一致性:数据(事务提交后的状态合集称为一致,也就是数据库只包含数据提交的状态)

分离性:并发(对于任意两个并发的事务A和B,在事务A看来,B要么在A开始之前已经结束,要么在A结束之后才开始,这样每个事务都感觉不到有其他的事务并发执行)

持久性:结果(指一个事务一旦提交了,就保存到硬盘上,对数据库中的数据改变就是永久的)

二、ngnix是如何实现反向代理的?原理是什么?

比如我们向一台服务器的80端口发送了请求,该请求首先由Nginx监听到,其接受到请求内容后再转发给其他服务器,其他服务器处理完后再将结果传送给Nginx,最后由Nginx来统一返回给初始请求端。
原理:1.启动后首先解析配置, 得到需要监听的端口与ip地址,然后在nginx的master进程里面,先初始化好这个监控的socket.
2.通过 fork函数创建出多个子进程, 子进程会竞争accept新的连接.

三、SpringMVC的实现原理?

四、SpringIOC、SpringAOP实现原理?应用场景?

1、IOC是指容器控制程序对象之间的关系,而不是我们传统实现中,由程序代码直接操作。控制权由应用代码转到外部容器,控制权的转移是所谓反转。对于Spring而言,就是由Spring来控制对象的生命周期和对象之间的关系;IOC还有另外一个名字--"依赖注入",从名字上理解,所谓依赖注入,即组件之间的依赖关系由容器在运行期决定,即由容器动态的将某种依赖关系注入到组件中去。
2、在Spring的工作方式中,所有类都会在Spring容器中登记,告诉Spring这是个什么东西,你需要什么东西,然后Spring会在系统运行到适当的时候,把你需要的东西主动给你,同时也把你交给其他需要你的东西。所有的类的创建、销毁都由Spring来控制,也就是说控制对象生命周期的不再是引用它的对象,而是Spring,对于某个具体的对象而言,以前是它控制其他对象,现在是所有的对象都被Spring控制,所以这叫控制反转。
3、在系统运行中,动态的向某个对象提供它所需要的其他对象。
4、依赖注入的思想是通过反射机制实现的,在实例化一个类时,它通过反射调用类中set方法将事先保存在HashMap中的类属性注入到类中,总而言之,在传统的对象创建方式中,通常由调用者来创建被调用者的实例,而在Spring中创建被调用者的工作由Spring来完成,然后注入调用者,即所谓的依赖注入or控制反转。注入方式有两种:依赖注入和设置注入;IOC的优点:降低了组件之间的耦合,降低了业务对象之间替换的复杂性,使之能够灵活的管理对象。

AOP
1、AOP面向切面编程是基于IOC,是对OOP的有益补充。
2、AOP利用一种称为“横切”的技术,剖解开封装的对象内部,并将那些影响对个类的公共行为封装到一个可重用模块,并将其名为“Aspect”,即方面。所谓“方面”,简单的就是说,就是将那些与业务无关,却为业务模块所共同调用的逻辑或责任封装起来,比如日志记录,便于减少系统的重复代码,降低模块的耦合度,并有利于未来的可操作性和可维护性。
3、AOP代表的是一个横向的关系,将“对象”比作一个空心的圆柱体,其中封装的是对象的属性和行为;则面向方面编程的方法,就是将这个圆柱体以切面形式剖开,选择性的提供业务逻辑。而剖开的切面,也就是所谓的“方面”了,然后它又以巧夺天工的妙手将这些剖开的切面复原,不留痕迹,但完成了效果。
4、实现AOP的技术,主要分为两大类:一类是采用动态代理技术,利用截取消息的方式,对该消息进行装饰,以取代原有对象的执行;而是采用静态植入的方式,引入特定的语法创建“方面”,从而使得编辑器可以在编制期间植入有关“方面”的代码。
5、Spring实现AOP:JDK动态代理和CGLIB代理 JDK动态代理:其代理对象必须是某个接口的实现,它是通过在运行期间创建一个接口的实现类来完成对目标对象的代理;其核心的两个类是InvocationHandler和Proxy。 CGLIB代理:实现原理类似于JDK动态代理,只是它在运行期间生成的代理对象是针对目标类扩展的子类。CGLIB是高效的代码生成包,底层是依靠ASM(开源的java字节码编辑类库)操作字节码实现的,性能比JDK强;需要引入包asm.jar和cglib.jar。     使用AspectJ注入式切面和@AspectJ注解驱动的切面实际上底层也是通过动态代理实现的。
6、 AOP使用场景:                     
Authentication 权限检查        
Caching 缓存        
Context passing 内容传递        
Error handling 错误处理        
Lazy loading 延迟加载        
Debugging 调试      
logging, tracing, profiling and monitoring 日志记录,跟踪,优化,校准        
Performance optimization 性能优化,效率检查        
Persistence 持久化        
Resource pooling 资源池        
Synchronization 同步        
Transactions 事务管理    
另外Filter的实现和struts2的拦截器的实现都是AOP思想的体现。

五、hashmap底层实现?

参考下面这篇博客,博主写的非常详细!

阿里面试官没想到一个HashMap,我能跟他扯半小时_敖丙-CSDN博客_hashmap敖丙

六、mybatis中#和$的区别?

1、#号传入的数据都会当成字符串,而$会将数据直接显示生成在sql中,故#可以有效防止sql注入。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值