Java 面试

Java 面试宝典

不定时更新 Java的面试题, 有什么好的 感谢评论告知!

  • 小提示 可以看旁边的文章目录, 自问自带看看自己会不会!

奉上本人Java学习笔记!


Java

线程

泛型

集合



SSM

Mybatis

mybatis中namespace的作用

Namespace是命名空间
mapper中的namespace用于绑定dao接口的,即面向接口编程。namespace是映射文件唯一标识,不允许重复

  • 在大型项目中,可能存在大量的SQL语句,
  • 这时候为每个SQL语句起一个唯一的标识(ID)就变得并不容易了。
  • 为了解决这个问题,在MyBatis中,可以为每个映射文件起一个唯一的命名空间,
  • 这样定义在这个映射文件中的每个SQL语句就成了定义在这个命名空间中的一个ID。
  • 只要我们能够保证每个命名空间中这个ID是唯一的,即使在不同映射文件中的语句ID相同,也不会再产生冲突了。

#和$的区别。

#{} 和 ${} 都是Mybatis sql映射文件中实现,sql参数的绑定!

#{ }
是以一种 预编译的形式进行参数注入!自动拼接引号不会存在注入相对 ${}安全
${}
以一种,字符替换 直接将参数拼接到sql 语句中,需要自己写 ’ 单引号 存在sql 注入(不安全)!

sql 注入

因为可以 自定义单引号:

对于一个登录sql : select * from user where username= ${xx} and password= ${xx}

用户最后密码输入:’ OR ‘1’='1 那么如下!无论如何用户都能登录成功了!

select * from user where username='lalalala' and password='' or '1'='1'

SpringMVC

MVC 设计模式

在这里插入图片描述

MVC 工作原理:

MVC是 一种设计模式
1前台发送请求 ,到控制器,
2控制器接受请求,交给模型层处理(此模型层完成业务逻辑,service,dao等)
3模型层返回处理结果给控制器
4控制器将结果渲染到view视图上
5渲染好的视图通过控制器返回前台

在这里插入图片描述


Spring

说一说 ioc

在这里插入图片描述

微服务


SpringBoot

Spring boot和Spring mvc的区别

  • Spring 框架
    就像一个家族,
    有众多衍生产品例如 bootcloudsecurityjpa等等。
    但他们的基础都是Spring 的ioc 和 aop,ioc 提供了依赖注入的容器aop解决了面向横切面的编程
    然后在此两者的基础上实现了其他延伸产品的高级功能。

  • Spring MVC
    提供了一种轻度耦合的方式来开发web应用
    它是Spring的一个模块,是一个web框架。
    通过Dispatcher Servlet, ModelAndView 和 View Resolver,开发web应用变得很容易。
    解决的问题: 领域是网站应用程序或者服务开发——URL路由、Session、模板引擎、静态Web资源等等。

  • Spring Boot
    实现了自动配置,降低了项目搭建的复杂度。
    它主要是为了解决 使用Spring框架需要进行大量的配置太麻烦的问题,
    所以它并不是用来替代Spring的解决方案,而是和Spring框架紧密结合用于提升Spring开发者体验的工具。
    同时它集成了大量常用的第三方库配置(例如Jackson, JDBC, Mongo, Redis, Mail等等),
    Spring Boot应用中这些第三方库几乎可以零配置的开箱即用(out-of-the-box)。

总结:
Spring 最初利用“工厂模式”(DI)和“代理模式”(AOP)解耦应用组件。
大家觉得挺好用,于是按照这种模式搞了一个 MVC框架(一些用Spring 解耦的组件),用开发 web 应用( SpringMVC )。
然后发现每次开发都写很多样板代码,为了简化工作流程,于是开发出了一些“懒人整合包”(starter),这套就是 Spring Boot。

所以,用最简练的语言概括就是:

  • Spring 是一个“引擎”;

  • Spring MVC 是基于Spring的一个 MVC 框架;

  • Spring Boot 是基于Spring4的条件注册的一套 快速开发整合包。

Springboot的核心

  • 快速创建一个独立的spring应用程序

  • 内置了tomcat, jetty ,无需发布war包,直接就可运行!

  • 提供了可选的 starter (启动器) 依赖来 简化 项目的构建配置( pom.xml )

  • 自动配置Spring 和 第三方库 (简化 配置文件, 简化Spring 以及 能够和Spring进行集成的第三方 框架的配置)

  • 没有冗余代码生成 并且不需要 XML 配置:
    1.不是说没有配置文件
    2.也可以有XML配置 @ImportResource 引入原生配置

      @ImportResource("classpath:beanConf.xml") 			 //classpath表示就是资源目录下; 这里不多解释了..
      //一般注解直接声明在:主程序类上... 方便快速加载!
    

SpringCloud


数据库:

公共

怎样测试一条sql语句的执行效率。

  • EXPLAIN 要测试执行的sql
    输入sql语句“EXPLAIN select * from users”,前面加了explain,则查询语句在执行时,会记录执行过程效率。
  • 通过慢查询日志去寻找,哪些sql执行效率
    MySQL 主要分为 Server 层和引擎层,Server 层主要包括连接器、查询缓存、分析器、优化器、执行器,同时还有一个日志模块(binlog)这个日志模块所有执行引擎都可以共用

Mysql

组合索引怎么用的? 索引

  • 组合索引是将n个列组合成一个索引
    其应用场景为: 频繁同时使用, n列来进行查询;
  • 组合索引语法:
    create index 索引名 on 数据库名(多个列名); 多个列直接 , 逗号分隔!
  • 通过索引列进行查询 (遵循 最佳左前缀原则:
    就是, 假设创建一个索引: a b c 三列的索引,数据库的底层就会创建出 a ab abc 三种索引类型!
    如果此时, 一条sql 语句: 最左边使用了 a 和 c 列进行条件判断, 执行的时间是不一样的! a最左 会比c 快!
    因为底层针对 a 创建了一个索引,所以建议最常用的列, 创建时候在最左边声明!

什么情况会导致组合索引失效?

  • 组合索引不使用左侧第一个字段; 最左的不一定要在最左使用!但一定要用!
    (除非查询的字段只有建立组合索引的这几个列 select 索引列1,索引列2 from ...
  • like 以%开头
  • 字符串不加引号
  • where条件有数学运算或函数
  • order by 只能使用a,才能用到索引。
  • 如果mysql估计使用全表扫描要比使用索引快,则不使用索引 再次声明索引适合,高数据量的场景使用!

组合索引,如果不使用左侧第一个字段,什么情况下索引会生效?

  • 如果查询的字段只有建立组合索引的这几个列 索引会生效

事务用在哪里

Oracle

工具组件:

Git

git改变分支的指令

# 创建分支
git branch 分支名字 (如dev) 	# 创建(dev)分支
# 查看分支
git branch 					# git branch -a 查看所有分支!
# 切换分支
git checkout 分支名字 		# 切换到xx分支
# 合并分支
git merge (指定合并的分支)
# 删除分支
git branch -d 分支名 
# 还可以,使用.gitignore忽略文件进行版本控制!!

分支合并

无冲突)
# 假设现在我修改新分支上的文件
# 然后回到主分支,主分支我并没有进行修改,只有新分支修改了,那么进行合并
# 显然是没有冲突的,Git会直接对 master分支里的文件进行了更新
有冲突)
# 如果我修改新分支上的文件
# 然后回到主分支,主分支我也进行修改,那么进行合并
# 就会产生冲突的,Git会将都修改过的相同行代码都保留,以一种特殊格式保留;  
并且进入 合并模型 需要将格式更改为,正常的才可以继续操作,提交!!

Redis

Nginx

Maven

maven是怎么进行项目管理的?

  • 通过POM (工程对象模型)
    它是使用 Maven 工作时的基本组建,是一个 xml 文件。被放在 项目工程根目录下,文件命名为 pom.xml

  • POM 包含了关于工程和各种配置细节的信息,Maven 使用这些信息构建和管理项目
    统一字符编码格式! JDK 环境版本!
    最主要就是统一 依赖Jar包了! pom.xml 文件中添加所需jar包的坐标, Maven会根据坐标快速找到Jar的实际位置!
    避免了直接引入使项目工厂庞大! 底层存在,索引算法可以高效快速的响应传递; 不用担心影响程序性能!

maven是怎么管理jar包的? 接下

  • 通过项目根目录下的 pom.xml文件来管理Jar
  • Maven项目需要Jar时候就会,去pom.xml 文件中寻找对应的依赖!根据依赖就可以到对应的仓库中找到准确的Jar
    仓库流程:Maven有三个仓库 本地(本地电脑)——私服(公司内部)——远程(官方提供需要联网下载)
    而且:如果是远程下载的, 第一次下载时候,就会在本地 和 私服中进行了备份 下次就不用在远程下载了! 私服获取,也会在本地留取备份!

接上怎么体现出来的?

  • 可以是在Maven 的setting 文件中,得知本地仓库的安装位置 文件默认的位置在:用户目录下 .m2文件夹!
    可以通过查看 pom.xml文件来,获取具体的文件夹, 找到具体的依赖!
  • 不联网/联网: 来测试能不能下载Jar…

设计模式:

… … … … … … … … … … … … … … … … … … … … … … … … … … … 🧐

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

慈様や

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值