ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

Java 面试

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

    • 初始Spring 详解
    • Spring IOC 和 AOP
    • Spring配置补充

    说一说 ioc

    微服务


    SpringBoot

    Spring boot和Spring mvc的区别

    • Spring 框架
      就像一个家族,
      有众多衍生产品例如boot、cloud、security、jpa等等。
      但他们的基础都是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

    组合索引怎么用的?索引

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

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

    事务用在哪里

    Oracle

    工具组件:

    Git

    git改变分支的指令

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

    分支合并

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

    Redis

    Nginx

    Maven

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

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

    接上怎么体现出来的?

    设计模式:

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

    RELATED READING

    延伸阅读

    更多一线实战笔记与深度复盘,助您持续精进