面试项目准备(上)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

提示:这里可以添加本文要记录的大概内容:

例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。


提示:以下是本篇文章正文内容,下面案例可供参考

一、springboot的优缺点

优点:
快速构建项目。
对主流开发框架的无配置集成。
项目可独立运行,无须外部依赖Servlet容器。
-提供运行时的应用监控。
极大的提高了开发、部署效率。
与云计算的天然集成。
缺点:
如果你不认同spring框架,也许这就是缺点。

二、springboot的jar包为什么能独立运行

1.springboot内置tomcat服务器
2.只要main函数能够扫描,那么就会自动注入到spring容器中
详细解释

三, SVN和git的区别是什么你用哪个

1、GIT是分布式的,SVN不是分布式。

2、GIT把内容按元数据方式存储,而SVN是按文件。

3、GIT分支和SVN的分支不同。

4、GIT没有一个全局的版本号,而SVN有。

5、GIT的内容完整性要优于SVN。

四.logback的日志级别有哪几种

logback日志级别简介说明

logback有5种级别 其优先级依次如下所示: TRACE < DEBUG < INFO < WARN <
ERROR,定义于ch.qos.logback.classic.Level类中。

日志级别

Trace:是追踪,就是程序推进以下,你就可以写个trace输出,所以trace应该会特别多,不过没关系,我们可以设置最低日志级别不让他输出
Debug:指出细粒度信息事件对调试应用程序是非常有帮助的
Info:消息在粗粒度级别上突出强调应用程序的运行过程
Warn:输出警告及warn以下级别的日志
Error:输出错误信息日志
此外OFF表示关闭全部日志,ALL表示开启全部日志
级别等级

从低到高分别为:
TRACE < DEBUG < INFO < WARN < ERROR
logback日志等级注意事项
当未对logger分配级别时
则name它将从有被分配级别的最近的父类那里继承级别
root logger默认级别是DEBUG。
日志输出的时候
级别大的会输出,根据当前ROOT 级别,日志输出时,级别高于root默认的级别时会输出
如root的级别是info,则会输出info以及info级别以上的日志

五.slfj,logback,log4j是什么关系

详细资料

六.列举常见的http请求方式

1、GET方法

GET方法用于使用给定的URI从给定服务器中检索信息,即从指定资源中请求数据。使用GET方法的请求应该只是检索数据,并且不应对数据产生其他影响。

在GET请求的URL中发送查询字符串(名称/值对),需要这样写:

/test/demo_form.php?name1=value1&name2=value2

说明:

GET请求是可以缓存的,我们可以从浏览器历史记录中查找到GET请求,还可以把它收藏到书签中;且GET请求有长度限制,仅用于请求数据(不修改)。

注:因GET请求的不安全性,在处理敏感数据时,绝不可以使用GET请求。

2、POST方法

POST方法用于将数据发送到服务器以创建或更新资源,它要求服务器确认请求中包含的内容作为由URI区分的Web资源的另一个下属。

POST请求永远不会被缓存,且对数据长度没有限制;我们无法从浏览器历史记录中查找到POST请求。

3、HEAD方法

HEAD方法与GET方法相同,但没有响应体,仅传输状态行和标题部分。这对于恢复相应头部编写的元数据非常有用,而无需传输整个内容。

4、PUT方法

PUT方法用于将数据发送到服务器以创建或更新资源,它可以用上传的内容替换目标资源中的所有当前内容。

它会将包含的元素放在所提供的URI下,如果URI指示的是当前资源,则会被改变。如果URI未指示当前资源,则服务器可以使用该URI创建资源。

5、DELETE方法

DELETE方法用来删除指定的资源,它会删除URI给出的目标资源的所有当前内容。

6、CONNECT方法

CONNECT方法用来建立到给定URI标识的服务器的隧道;它通过简单的TCP / IP隧道更改请求连接,通常实使用解码的HTTP代理来进行SSL编码的通信(HTTPS)。

7、OPTIONS方法

OPTIONS方法用来描述了目标资源的通信选项,会返回服务器支持预定义URL的HTTP策略。

8、TRACE方法

TRACE方法用于沿着目标资源的路径执行消息环回测试;它回应收到的请求,以便客户可以看到中间服务器进行了哪些(假设任何)进度或增量。

七.怎么读取自定义的配置项,用什么注解?怎么设置默认值?

使用注解@Value读取,在配置文件内设置默认值

八.bootstrap和application配置文件的区别

1.bootstrap的优先级比application的优先级高,优先读取
2.bootstrap的配置信息不能被application的配置信息覆盖

九.为什么引入springboot内置依赖不需要加版本号

因为如果没有加版本号他会去springboot父类去查找,然后找到到在加载到demo里面

十.什么是全自动,什么是半自动

Mybatis的实现机制
1、读取 Mybatis的全局配置文件 mybatis-config.xml

2、创建 SqlSessionFactory会话工厂

3、创建 SqlSession会话

4、执行查询操作

mybatis-config.xml文件中包括一系列配置信息,其中包括标签 ,此标签配置了映射节点,映射节点内部定义了SQL语句。

Mybatis将 SQL的定义工作独立出来,让用户自定义,而 SQL的解析,执行等工作交由 Mybatis处理执行。

Hibenate 的实现机制
1、构建 Configuration实例,初始化该实例中的变量

2、加载 hibenate.cfg.xml 文件到内存

3、通过 hibenate.cfg.xml 文件中的 mapping 节点配置并加载 xxx.hbm.xml 文件至内存

4、利用 Configuration实例构建 SessionFactory 实例

5、由SessionFactory 实例构建 session实例

6、由 session实例创建事务操作接口 Transaction 实例

7、执行查询操作

总结

传统的 jdbc 是手工的,需要程序员加载驱动、建立连接、创建 Statement 对象、定义SQL语句、处理返回结果、关闭连接等操作。

Hibernate 是自动化的,内部封装了JDBC,连 SQL 语句都封装了,理念是即使开发人员不懂SQL语言也可以进行开发工作,向应用程序提供调用接口,直接调用即可。

Mybatis 是半自动化的,是介于 jdbc 和 Hibernate之间的持久层框架,也是对 JDBC 进行了封装,不过将SQL的定义工作独立了出来交给用户实现,负责完成剩下的SQL解析,处理等工作。

十一.泛型和Object的区别是什么

1.Object在类型转换的时候需要强转,泛型不需要
2.使用object作为形参当需要进行类型强制转换时,编译期不会检查类型是否安全,运行期才会检查,泛型会在编译期就会自动检查
3.泛型写法范型的指定保证了代码的健壮性,避免了强转的风险.

十二.你在项目中有没有用到泛型,怎么用的

用到过,在进行一些前后端交互的时候,一个类里面封装了一个泛型变量
还有一些工具类

十三.过滤器,拦截器,aop有什么区别

过滤器,拦截器拦截的是URL。AOP拦截的是类的元数据(包、类、方法名、参数等)。

过滤器并没有定义业务用于执行逻辑前、后等,仅仅是请求到达就执行。
拦截器有三个方法,相对于过滤器更加细致,有被拦截逻辑执行前、后等。
AOP针对具体的代码,能够实现更加复杂的业务逻辑。

三者功能类似,但各有优势,从过滤器–》拦截器–》切面,拦截规则越来越细致。
执行顺序依次是过滤器、拦截器、切面。

十四.什么是物理删除,什么是逻辑删除

物理删除是指从数据库中删除数据,逻辑删除是指将数据做个标记但不从数据库中删除

十五.常见的树形表结构有哪些

https://www.cnblogs.com/makai/p/12301707.html
链接

十六.无限级树形结构的增删改查怎么设计的

设置一个id和父id,id是唯一标识,可以根据id删除树形结构。
如果是添加父节点的话就单独添加,如果是子结点就会根据父id去找对应的子id,
然后将他放在父id对应下面

十七你们项目是否用过自定义异常,怎么用的

使用Java内置的异常类可以描述在编程时出现的大部分异常情况。除此之外,用户还可以自定义异常。用户自定义异常类,只需继承Exception类即可。

  1. 编写一个类继承Exception或者RunTimeException
    2.提供两个构造方法,一个无参的,一个带有String参数的
    在程序中使用自定义异常类,大体可分为以下几个步骤:
    1.创建自定义异常类 在方法中通过throw关键字抛出异常对象。
    2.如果在当前抛出异常的方法中处理异常,可以使用try-catch语句捕获并处理;
    3.否则在方法的声明处通过throws关键字指明要抛出给方法调用者的异常,继续进行下一步操作。
    4.在出现异常方法的调用者中捕获并处理异常。

自定义异常详细解释

十八你们项目的自定义异常是继承exception还是runtimeException,为什么呢

网上摘得一段话,比喻的很恰当:

继承Exception还是继承RuntimeException是由异常本身的特点决定的,而不是由是否是自定义的异常决定的。

例如我要写一个java api,这个api中会调用一个极其操蛋的远端服务,这个远端服务经常超时和不可用。所以我决定以抛出自定义异常的形式向所有调用这个api的开发人员周知这一操蛋的现实,让他们在调用这个api时务必考虑到远端服务不可用时应该执行的补偿逻辑(比如尝试调用另一个api)。此时自定义的异常类就应继承Exception,这样其他开发人员在调用这个api时就会收到编译器大大的红色报错:【你没处理这个异常!】,强迫他们处理。

又如,我要写另一个api,这个api会访问一个非常非常稳定的远端服务,除非有人把远端服务的机房炸了,否则这个服务不会出现不可用的情况。而且即便万一这种情况发生了,api的调用者除了记录和提示错误之外也没有别的事情好做。但出于某种不可描述的蛋疼原因,我还是决定要定义一个异常对象描述“机房被炸”这一情况,那么此时定义的异常类就应继承RuntimeException,因为我的api的调用者们没必要了解这一细微的细节,把这一异常交给统一的异常处理层去处理就好了。

总结一下:

抛出 RuntimeException(运行期才可以发现的异常),调用方法的程序员不需要知道会出这个异常。

抛出Exception的方法,调用者需要明确知道这个方法里会出现什么异常,并提示调用者要去处理这个可能得异常。

简单的说,非RuntimeException必要自己写catch块处理掉。RuntimeException不用try catch捕捉将会导致程序运行中断,若用则不会中断。
详细解释

十九常见的加密算法有哪些

常见的 对称加密 算法主要有 DES、3DES、AES 等,常见的 非对称算法 主要有 RSA、DSA 等,散列算法 主要有 SHA-1、MD5 等。

二十盐值有什么作用

盐值相当于二次加密,如果不加盐值,别人可能会通过密码本去查找密码

二十一简单说说单点登录的方案

单点登录就是为了用户体验好,能够一次登录后在多个互通的系统里
在多个分块系统里面共享用户登录信息

二十二token和Jwt是什么

详细解释

二十三.jwt与token+redis,哪种方案更好用?

详细解释

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值