面试题总结2021

这份资料写的不全只是去面试的时候,面试官提的几个问题记录 并在网上搜索去加深印象,具体的哪里看的也忘了 ,写的不是很及时。非原创。回答部分点到为止没有太深入,主要作为一个总结性的博文

一、java基础知识:

  1. 什么是线程安全: 线程安全是多线程编程时的计算机程序代码中的一个概念。在拥有共享数据的多条线程并行执行的程序中,线程安全的代码会通过同步机制保证各个线程都可以正常且正确的执行,不会出现数据污染等意外情况。死锁和脏数据就是典型的线程安全问题。
  2. 列举http请求的方式有几种,说说对这几种请求的理解: 1.get请求:这种方法是将信息存储在url中,既不安全,还无法传递太大的数据。注意:get方法不应当被哦那个与产生‘副作用’的操作中。一般的网络爬虫都会从get入手。2.post:向指定的路径提交数据进行处理请求,一般用于表单的提交数据。注意:数据包含在请求体中。post请求可能会导致新的资源或以有的资源被修改。3.options:返回服务器针对特定资源所支持的http请求方法。注意:允许客户端查看服务器的性能,也可以利用向web服务器发送的“*”的求情来测试服务器的功能4.head:与get请求相似的响应,但是请求体不会被返回。注意:这一方法可以不必传输整个响应内用的情况下,就可以获取包含在响应消息头中的原信息。5.put:从客户端向服务器传送的数据取代指定的文档的内容。6.delete:请求服务器删除指定的页面7.trace:返回显示服务收到的请求,主要用于测试或诊断。
  3. object类的方法有哪些: clone,getClass,toString,wait,notify,equals等
  4. 网络协议有哪七层: 最下面一层是物理层,第二层是数据链路层,第三层是网络层:主要是IP协议.第四层是传输层:主要是面向连接的TCP传输控制协议。另一个是不面向连接的UDP用户数据报协议。第五层是会话层:主要是解决一个会话的开始进行和结束。第六层是表示层:主要是编码如ASⅡ。第七层是应用层,就是应用程序里面的拉,文件传输协议FTP、电子邮件传输协议SMTP、域名系统服务DNS、网络新闻传输协议NNTP和HTTP协议等。 HTTP协议(Hypertext Transfer Protocol,超文本传输协议)是用于从WWW服务
  5. 什么是java的内存泄漏: 1.对象是可达的2.对象是无用的,即程序以后不会再使用这些对象。如果对象满足这两个条件,这些对象就可以判定为java中的内存泄漏,这些对象不会被GC所回收,然而它们却占用内存。简单来说,内存泄漏的原因就是:保留下来却永远不再使用的对象引用。
    Java内存泄漏引起的原因:1、静态集合类引起内存泄漏。2、当集合里面的对象属性被修改后,再调用remove()方法时不起作用。3、监听器。4、各种连接。5、内部类和外部模块的引用。6、单例模式。
    内存泄漏如何排查:详情看此文章
  6. threadLocal 详情看此文章
  7. 同步和异步分别是什么: 同步:提交请求->等待服务器处理->处理完毕返回 这个期间客户端浏览器不能干任何事,异步:请求通过事件触发->服务器处理(这是浏览器仍然可以作其他事情)->处理完毕。有哪些异步场景:秒杀系统。
  8. ** 单例模式是线程安全吗:**
  9. 怎么创建线程池

二、框架:

  1. aop是怎么实现的:AOP 思想: 基于代理思想,对原来目标对象,创建代理对象,在不修改原对象代码情况下,通过代理对象,调用增强功能的代码,从而对原有业务方法进行增强 !AOP应用场景场景一: 记录日志,场景二: 监控方法运行时间 (监控性能), 场景三: 权限控制 ,场景四: 缓存优化 (第一次调用查询数据库,将查询结果放入内存对象, 第二次调用, 直接从内存对象返回,不需要查询数据库 ),场景五: 事务管理 (调用方法前开启事务, 调用方法后提交关闭事务 )。
  2. Spring中AOP的实现原理 Spring中AOP的有两种实现方式:1.JDK动态代理:JDK动态代理只能为接口创建动态代理实例,而不能对类创建动态代理。需要获得被目标类的接口信息(应用Java的反射技术),生成一个实现了代理接口的动态代理类(字节码),再通过反射机制获得动态代理类的构造函数,利用构造函数生成动态代理类的实例对象,在调用具体方法前调用invokeHandler方法来处理。2.Cglib动态代理:CGLib动态代理需要依赖asm包,把被代理对象类的class文件加载进来,修改其字节码生成子类。
  3. mybatis级联查询:
public interface UserInfoDAO {
    //一个user对应一个userinfo
    @Select("select * from userinfo where id =#{id}")
    public UserInfo getUserInfoById(@Param("id") String id);
 
   //select ="com.ldy.dao.UserInfoDAO.getUserInfoById",getUserinfoById方法必须存在
    @Select("select * from user u where u.id = #{id}")
    @Results({
            @Result(id = true,property = "id" ,column = "id"),
            @Result(property ="password",column = "password"),
            @Result(property ="userInfo",column="info_id"
           ,one =@One(select ="com.ldy.dao.UserInfoDAO.getUserInfoById"))}
    )
    public User getById(@Param("id") String id);
}
  1. redis什么数据不一致怎么处理:
  2. springboot容器怎么创建的: 详情查看此文章
  3. rides的事务和mysql的区别: mysql:Begin:显式的开启一个事务,Commit:提交事务,将对数据库进行的所有的修改变成永久性的,Rollback:结束用户的事务,并撤销现在正在进行的未提交的修改。redis:Multi:标记事务的开始,Exec:执行事务的commands队列,Discard:结束事务,并清除commands队列

一、数据库:

  1. 联合索引是什么 : 联合索引是由多个字段组成的索引。生效时索引条件从左到右,A+B+C 索引生效,A+C先匹配A但索引失效,B+C索引失效。
  2. 数据库优化 : explain的使用和说明
  3. 事务什么情况下会失效: 1.数据库引擎不支持事务。2.没有被spring管理。3.方法不是public的。4.自调用问题。5.数据源没有配置事务管理器。6.事务的扩展上不支持事务。7.异常被吃。8.异常类型错误
  4. 索引的存储方式: 详情请看此文章
  5. 索引什么情况下会失效: 1.有or必全有索引;2.复合索引未用左列字段;3.like以%开头;4.需要类型转换;5.where中索引列有运算;6.where中索引列使用了函数;7.如果mysql觉得全表扫描更快时(数据少);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值