Mybatis****的面试题:
Q1:Mybatis 的优缺点?
优点:
相⽐ JDBC 减少了⼤量代码量,减少冗余代码。
使⽤灵活,SQL 语句写在 XML ⾥,从程序代码中彻底分离,降低了耦合度,便于管理。提供 XML 标签,⽀持编写动态 SQL 语句。
提供映射标签,⽀持对象与数据库的 ORM 字段映射关系。
缺点:
SQL 语句编写⼯作量较⼤,尤其是字段和关联表多时。
SQL 语句依赖于数据库,导致数据库移植性差,不能随意更换数据库。
Q2:Mybatis 的 XML ⽂件有哪些标签属性?
select 、 insert 、 update 、 delete 标签分别对应查询、添加、更新、删除操作。
parameterType属性表示参数的数据类型,包括基本数据类型和对应的包装类型、String 和 JavaBean 类型,当有多个参数时可以使⽤#的形式表示第 n 个参数。除了基本数据类型都要以全限定类名的形式指定参数类型。
resultType表示返回的结果类型,包括基本数据类型和对应的包装类型、String 和 Java Bean 类型。
还可以使⽤把返回结果封装为复杂类型的resultMap。
Q3:Mybatis 的⼀级缓存是什么?
⼀级缓存是 SqlSession 级别,默认开启且不能关闭。
操作数据库时需要创建 SqlSession 对象,对象中有⼀个 HashMap 存储缓存数据,不同 SqlSession 之间缓存数据区域互不影响。
⼀级缓存的作⽤域是 SqlSession 范围的,在同⼀个 SqlSession 中执⾏两次相同的 SQL 语句时,第⼀次执⾏完毕会将结果保存在缓存中,第⼆次查询直接从缓存中获取。
如果 SqlSession 执行了 DML 操作(insert、update、delete),Mybatis 必须将缓存清空保证数据有效性。
一级缓存的工作原理如下所示:
Q4:Mybatis 的⼆级缓存是什么?
⼆级缓存是Mapper 级别,默认关闭。
使⽤二级缓存时多个 SqlSession 使⽤同⼀个 Mapper 的 SQL 语句操作数据库,得到的数据会存在⼆级缓存区,同样使⽤ HashMap 进行数据存储,相⽐于⼀级缓存,⼆级缓存范围更⼤,多个 SqlSession 可以共⽤⼆级缓存,作⽤域是 Mapper 的同⼀个 namespace,不同 SqlSession 两次执⾏相同的namespace 下的 SQL 语句,参数也相等,则第⼀次执行成功后会将数据保存在⼆级缓存中,第⼆次可直接从⼆级缓存中取出数据。
要使⽤⼆级缓存,需要在全局配置⽂件中配置,再在对应的映射⽂件中配置⼀个标签。
二级缓存的工作原理是:
Q5:Mybatis #{}和${}的区别?
使⽤${}相当于使⽤字符串拼接,存在 SQL 注⼊的⻛险。
使⽤#{}相当于使用占位符,可以防⽌ SQL 注入,不⽀持使⽤占位符的地⽅就只能使⽤${},典型情况就是动态参数。
KaTeX parse error: Expected 'EOF', got '#' at position 20: …符串替换,相当于直接显示数据,#̲{}是预编译处理,相当于对数据…是将传入的数据直接显示生成sql语句
–Mybatis在处理#{}时
select id,name,age from teacher where id =#{id}
当前端把id值1传入到后台的时候,就相当于:
select id,name,age from teacher where id ='1'
--Mybatis在处理${}时
select id,name,age from teacher where id =${id}
当前端把id值1传入到后台的时候,就相当于:
select id,name,age from teacher where id = 1
Q6、MyBatis实现一对多有几种方式,怎么操作的?
A.联合查询:几个表联合查询,只查询一次,通过在resultMap里面配置collection节点配置一对多的类就可以完成。
B.嵌套查询:是先查一个表,根据这个表里面的结果的外键id去另外一个表里面查询数据,也是通过配置collection,但另外一个表的查询通过select节点配置。
Spring Data JPA ⾯****试题:
Q1:ORM 是什么?
ORM 即 Object-Relational Mapping ,表示对象关系映射,映射的不只是对象的值还有对象之间的关系,通过 ORM 就可以把对象映射到关系型数据库中。操作实体类就相当于操作数据库表,可以不再重点关注 SQL 语句。
Q2:JPA 如何使用?
只需要持久层接⼝继承 JpaRepository 即可,泛型参数列表中第⼀个参数是实体类类型,第⼆个参数是主键类型。
运⾏时通过JDKDynamicAopProxy的invoke方法创建了⼀个动态代理对象。
SimpleJpaRepository , SimpleJpaRepository中封装了JPA的操作,通过 hibernate (封装了
JDBC)完成数据库操作。
Q3:JPA 实体类相关注解有哪些?
@Entity :表明当前类是⼀个实体类。
@Table:关联实体类和数据库表。
@Column:关联实体类属性和数据库表中字段。
@Id:声明当前属性为数据库表主键对应的属性。
@GeneratedValue : 配置主键⽣成策略。
@OneToMany:配置⼀对多关系,mappedBy 属性值为主表实体类在从表实体类中对应的属性名。
@ManyToOne:配置多对⼀关系,targetEntity 属性值为主表对应实体类的字节码。
@JoinColumn :配置外键关系,name 属性值为外键名称,referencedColumnName 属性值为主表主键名称。
Q4:对象导航查询是什么?
通过 get 方法查询⼀个对象的同时,通过此对象可以查询它的关联对象。
对象导航查询⼀到多默认使⽤延迟加载的形式,关联对象是集合,因此使⽤⽴即加载可能浪费资源。对象导航查询多到⼀默认使⽤⽴即加载的形式, 关联对象是⼀个对象,因此使⽤⽴即加载。
如果要改变加载方式,在实体类注解配置加上 fetch 属性即可,LAZY 表示延迟加载,EAGER 表示⽴即加载。
Spring MVC面试****题:
Q1:Spring MVC 的处理流程?
Web 容器启动时会通知 Spring 初始化容器,加载 Bean 的定义信息并初始化所有单例 Bean,然后遍历容器中的 Bean,获取每⼀个 Controller 中的所有⽅法访问的 URL,将 URL 和对应的 Controller 保存 到⼀个 Map 集合中。
所有的请求会转发给 DispatcherServlet 前端处理器处理,DispatcherServlet 会请求 HandlerMapping找出容器中被@Controler注解修饰的 Bean 以及被@RequestMapping
修饰的⽅法和类,⽣成Handler 和 HandlerInterceptor 并以⼀个 HandlerExcutionChain 处理器执⾏链的形式返回。
之后 DispatcherServlet 使⽤ Handler 找到对应的 HandlerApapter,通过 HandlerApapter 调⽤Handler 的⽅法,将请求参数绑定到⽅法的形参上,执⾏⽅法处理请求并得到 ModelAndView。最后 DispatcherServlet 根据使⽤ ViewResolver 试图解析器对得到的 ModelAndView 逻辑视图进⾏解析得到 View 物理视图,然后对视图渲染,将数据填充到视图中并返回给客户端。
Q2:Spring MVC 有哪些组件?
DispatcherServlet :SpringMVC 中的前端控制器,是整个流程控制的核⼼,负责接收请求并转发给对应的处理组件。
Handler :处理器,完成具体业务逻辑,相当于 Servlet 或 Action。
HandlerMapping :完成 URL 到 Controller 映射,DispatcherServlet 通过 HandlerMapping 将不同请求映射到不同 Handler。
HandlerInterceptor :处理器拦截器,是⼀个接口,如果需要完成⼀些拦截处理,可以实现该接口。
HandlerExecutionChain :处理器执行链,包括两部分内容:Handler 和 HandlerInterceptor。
HandlerAdapter :处理器适配器,Handler执行业务方法前需要进⾏⼀系列操作,包括表单数据验证、数据类型转换、将表单数据封装到JavaBean等,这些操作都由 HandlerAdapter 完成。 DispatcherServlet 通过 HandlerAdapter 来执⾏不同的 Handler。
ModelAndView :装载模型数据和视图信息,作为 Handler 处理结果返回给 DispatcherServlet。
ViewResolver :视图解析器,DispatcherServlet 通过它将逻辑视图解析为物理视图,最终将渲染的结果响应给客户端。
Q3:Spring MVC 的相关注解?
@Controller :在类定义处添加,将类交给IoC容器管理。
@RequtestMapping :将URL请求和业务方法映射起来,在类和⽅法定义上都可以添加该注
解。 value 属性指定URL请求的实际地址,是默认值。 method 属性限制请求的⽅法类型,包括GET、POST、PUT、DELETE等。如果没有使⽤指定的请求⽅法请求URL,会报405 Method Not Allowed 错误。 params 属性限制必须提供的参数,如果没有会报错。
@RequestParam :如果 Controller 方法的形参和 URL 参数名⼀致可以不添加注解,如果不⼀致可以使用该注解绑定。value属性表示HTTP请求中的参数名。required 属性设置参数是否必要,默认false。 defaultValue 属性指定没有给参数赋值时的默认值。
@PathVariable :Spring MVC ⽀持 RESTful风格 URL,通过的绑定。
Spring****的面试:
Q1:AOP 是什么?
本人从事网路安全工作12年,曾在2个大厂工作过,安全服务、售后服务、售前、攻防比赛、安全讲师、销售经理等职位都做过,对这个行业了解比较全面。
最近遍览了各种网络安全类的文章,内容参差不齐,其中不伐有大佬倾力教学,也有各种不良机构浑水摸鱼,在收到几条私信,发现大家对一套完整的系统的网络安全从学习路线到学习资料,甚至是工具有着不小的需求。
最后,我将这部分内容融会贯通成了一套282G的网络安全资料包,所有类目条理清晰,知识点层层递进,需要的小伙伴可以点击下方小卡片领取哦!下面就开始进入正题,如何从一个萌新一步一步进入网络安全行业。
学习路线图
其中最为瞩目也是最为基础的就是网络安全学习路线图,这里我给大家分享一份打磨了3个月,已经更新到4.0版本的网络安全学习路线图。
相比起繁琐的文字,还是生动的视频教程更加适合零基础的同学们学习,这里也是整理了一份与上述学习路线一一对应的网络安全视频教程。
网络安全工具箱
当然,当你入门之后,仅仅是视频教程已经不能满足你的需求了,你肯定需要学习各种工具的使用以及大量的实战项目,这里也分享一份我自己整理的网络安全入门工具以及使用教程和实战。
项目实战
最后就是项目实战,这里带来的是SRC资料&HW资料,毕竟实战是检验真理的唯一标准嘛~
面试题
归根结底,我们的最终目的都是为了就业,所以这份结合了多位朋友的亲身经验打磨的面试题合集你绝对不能错过!
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!