Java面试的重点(总结)

这个是我总结的面试总结,面试比较经常使用的有困难的点,面试加分的题目。

1.解决跨域问题
1)在过滤器filter中加入,HttpServletResponse response,设置参数
2)拦截器interceptor中加入,添加跨域CORS到response中。
改变接口方法也可以解决跨越问题
简单的说,就是把post方法的接口,变成get方法,也可以有效的解决跨域的问题。但是这种方法不建议用,毕竟它改变了方法的性质

2.导出excel的方式
利用java的poi
1、导入jar包,poi-ooxml-schemas.jar
2、在util下写一个公共类,该类主要利用Jakarta POI HSSF API组件(用于操作Excel的组件),主要部分包括Excel对象,样式和格式,还有辅助操作

 常用组件:
    HSSFWorkbook        excel的文档对象
    HSSFSheet           excel的表单
    HSSFRow             excel的行
    HSSFCell            excel的格子单元
    HSSFFont            excel字体
    HSSFDataFormat      日期格式
    HSSFHeader         sheet头
    HSSFFooter         sheet尾(只有打印的时候才能看到效果)

    样式:
    HSSFCellStyle                       cell样式
    辅助操作包括:
    HSSFDateUtil                        日期
    HSSFPrintSetup                      打印
    HSSFErrorConstants                  错误信息表

3.synchronized是Java中的关键字,是一种同步锁
修饰的对象有以下几种:
  1. 修饰一个代码块,被修饰的代码块称为同步语句块,作用的对象是调用这个代码块的对象;
  2. 修饰一个方法,被修饰的方法称为同步方法,其作用的范围是整个方法,作用的对象是调用这个方法的对象;
  3. 修改一个静态的方法,其作用的范围是整个静态方法,作用的对象是这个类的所有对象;
  4. 修改一个类,其作用的范围是synchronized后面括号括起来的部分,作用主的对象是这个类的所有对象
在定义接口方法时不能使用synchronized关键字。
构造方法不能使用synchronized关键字,但可以使用synchronized代码块来进行同步。

总结:
1、 无论synchronized关键字加在方法上还是对象上,如果它作用的对象是非静态的,则它取得的锁是对象;如果synchronized作用的对象是一个静态方法或一个类,则它取得的锁是对类,该类所有的对象同一把锁。
2、每个对象只有一个锁(lock)与之相关联,谁拿到这个锁谁就可以运行它所控制的那段代码。
3、实现同步是要很大的系统开销作为代价的,甚至可能造成死锁,所以尽量避免无谓的同步控制

4.说一说你能想到的sql语句优化
(1).避免select *,将需要查找的字段列出来;
(2).使用连接(join)来代替子查询;
(3).拆分大的delete或insert语句;
(4).使用limit对查询结果的记录进行限定;
(5).用 exists 代替 in 是一个好的选择;
(6).用Where子句替换HAVING 子句 因为HAVING 只会在检索出所有记录之后才对结果集进行过滤;
(7).不要在 where 子句中的“=”左边进行函数、算术运算或其他表达式运算,否则系统将可能无法正确使用索引尽量避免在where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描;
(8).尽量避免在 where 子句中使用 or 来连接条件,否则将导致引擎放弃使用索引而进行全表扫描;
(9).尽量避免在 where 子句中使用!=或<>操作符,否则将引擎放弃使用索引而进行全表扫描

5.说几个你除了增删改查之外在mysql中常用的命令答:
Explain:查看该SQL语句有没有使用上了索引,有没有做全表扫描
describe:查看表结构的
show:查看含义
truncate:当你仍要保留该表,但要删除所有记录时
distinct:去重复(select distinct name from user;)
limit:分页(SELECT * FROM orange LIMIT 10,15; // 检索记录11-25)
order by:排序查询、asc升序、desc降序
group by:分组查询、having
union:是取唯一值,记录没有重复
union all:取到得是所有值,记录可能有重复

5.Spring 的优点?
(1)spring属于低侵入式设计,代码的污染极低;
(2)spring的DI机制将对象之间的依赖关系交由框架处理,减低组件的耦合性;
(3)Spring提供了AOP技术,支持将一些通用任务,如安全、事务、日志、权限等进行集中式管理,从而提供更好的复用。
(4)spring对于主流的应用框架提供了集成支持。

5.Spring的AOP理解
OOP面向对象,定义纵向的关系
AOP,一般称为面向切面,作为面向对象的一种补充,用于将那些与业务无关,但却对多个对象产生影响的公共行为和逻辑,抽取并封装为一个可重用的模块,这个模块被命名为“切面”(Aspect),减少系统中的重复代码,降低了模块间的耦合度可用于权限认证、日志、事务处理。
AOP实现的关键在于 代理模式,AOP代理主要分为静态代理和动态代理。静态代理的代表为AspectJ;动态代理则以Spring AOP为代表
Spring AOP中的动态代理主要有两种方式,JDK动态代理和CGLIB动态代理
静态代理与动态代理区别在于生成AOP代理对象的时机不同,相对来说AspectJ的静态代理方式具有更好的性能,但是AspectJ需要特定的编译器进行处理,而Spring AOP则无需特定的编译器处理。

6.Spring的IoC理解:
(1)IOC就是控制反转,是指创建对象的控制权的转移,以前创建对象的主动权和时机是由自己把控的,而现在这种权力转移到Spring容器中,并由容器根据配置文件去创建实例和管理各个实例之间的依赖关系,对象与对象之间松散耦合,也利于功能的复用。DI依赖注入,和控制反转是同一个概念的不同角度的描述,即 应用程序在运行时依赖IoC容器来动态注入对象需要的外部资源。
(2)最直观的表达就是,IOC让对象的创建不用去new了,可以由spring自动生产,使用java的反射机制,根据配置文件在运行时动态的去创建对象以及管理对象,并调用对象的方法的。
(3)Spring的IOC有三种注入方式 :构造器注入、setter方法注入、根据注解注入。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值