每一秒钟的时间都值得铭记

0%

面试系列04

1、请简述一下Git的分支管理?

两种核心分支

  • master分支存放的是随时可供在生产环境中部署的稳定版本代码。
  • develop分支是保存当前最新开发成果的分支。

三种辅助分支

  • 功能(feature)分支: 这个分支主要是用来开发一个新的功能,一旦开发完成,我们合并回Develop分支进入下一个Release。
  • 预发布(release)分支: 当你需要一个发布一个新Release的时候,我们基于Develop分支创建一个Release分支,完成Release后,我们合并到Master和Develop分支。
  • 修补bug(hotfix)分支: 当我们在Production发现新的Bug时候,我们需要创建一个Hotfix, 完成Hotfix后,我们合并回Master和Develop分支,所以Hotfix的改动会进入下一个Release。

2、请说一下Web项目的分层结构?

JavaWeb一般分为三层架构,分别是:

  • 数据访问层,即Dao层,主要用来封装对数据库的操作。
  • 业务逻辑层,即Service层,主要用于处理具体的业务逻辑,即对Dao层的数据进行处理。
  • Web层,或者是Controller层,主要用于对前端请求作出响应。

3、请简述一下Spring的IOC和AOP?

Spring的两大核心特征就是IOC(控制反转)和AOP(面向切面编程)。

  • IOC: 控制反转,是Spring用来解决类与类之间的程序耦合问题的,因为Java代码需要通过类与类之间的相互协作来完成特定的业务逻辑,每个类都需要管理与自己有交互的类的引用和依赖,代码将会变得难以维护和极度的高耦合。而Spring IOC正是为了解决这个问题,将类与类之间的引用和依赖交给Spring IOC容器管理,每个对象只需要专注自己的业务逻辑即可,降低了程序之间的耦合度。
  • AOP: 面向切面编程,AOP不是单独指某一种技术,而是一种编程思想,AOP是OOP的一种补充,用于处理各个业务逻辑中的横切关注点,比如日志记录,事务处理,性能统计,异常处理等等。AOP的主要功能是将大量的通用行为从业务逻辑中抽取出来,将这些行为封装成独立的非业务方法,用于横向切入,这些行为不会对已有的业务逻辑产生任何影响。AOP是一种设计思想,而Spring AOP则是符合AOP思想的一种框架实现。

4、怎么记录一个项目的访问日志?

可以使用Spring AOP技术,设置一个前置通知,记录访问开始时间和访问请求的具体信息,设置一个后置通知,记录响应的时间,并通过这些信息,处理获得请求的访问时长,访问方法,访问路径,访问用户等等信息。

5、MyBatis中#{}和${}的区别?

#{} ${}
相当于的占位符 相当于字符串拼接
在传参的时候会先对SQL进行预编译 在传参的时候相当于字符串拼接
可以防止SQL注入 不能防止SQL注入
尽量使用 在需要传入表名或者列名的时候使用,比如order by

6、请简述一下left join,right join,inner join?

  • left join: 在两张表进行连接查询时,会返回左表所有的行,即使在右表中没有匹配的记录。
  • right join: 在两张表进行连接查询时,会返回右表所有的行,即使在左表中没有匹配的记录。
  • inner join: 在两张表进行连接查询时,只保留两张表中完全匹配的结果集。

7、数据库为什么要有事务?

所谓事务是用户定义的一个数据库操作序列,这些操作要么全做要么全不做,是一个不可分割的工作单位。事务是数据库维护数据一致性的单位,在每个事务结束时,都能保持数据一致性。

8、乐观锁和悲观锁?

  • 乐观锁: 总是假设最好的情况,每次去拿数据的时候都认为别人不会修改,所以不会上锁,但是在更新的时候会判断一下在此期间别人有没有去更新这个数据,可以使用版本号机制和CAS算法实现。
  • 悲观锁: 总是假设最坏的情况,每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁,这样别人想拿这个数据就会阻塞直到它拿到锁。

9、SpringBoot设置端口号?

1
2
server:
port: 8888

10、数据库连接池?

  • 数据库连接是一种关键的有限的昂贵资源,无论是创建数据库连接还是关闭数据库连接,都会消耗大量的系统性能,频繁创建连接和关闭连接,会造成系统性能低下。
  • 数据库连接池就是为了解决这个问题而诞生的,数据库连接池是在启动项目的时候,在程序中创建足够多的数据库连接池,当程序需要使用连接池的时候,就可以直接从数据库连接池中获取一个连接,使用完毕后则将连接归还到数据库连接池中。
  • 数据库连接池技术尽可能地减少了系统资源的开销,大大节省了内存,提高了程序的运行效率。
坚持原创技术分享,您的支持将鼓励我继续创作!
-------------这是我的底线^_^-------------