java程序员的金三银四求职宝典(三)

程序员的金三银四求职宝典

随着春天的脚步渐近,对于许多程序员来说,一年中最繁忙、最重要的面试季节也随之而来。金三银四,即三月和四月,被广大程序员视为求职的黄金时期。在这两个月里,各大公司纷纷开放招聘,求职者们则通过一轮又一轮的面试,力争心仪的职位。而如何在这关键的时期脱颖而出,成为每个求职者关注的焦点。在金三银四的关键时期如何准备,快来看看吧

面试题解析

接着上一篇面试题解析(java程序员的金三银四求职宝典),咱们继续……

41、Spring中常见的设计模式?--也可以说自己用过的设计模式

答:

  1. 工厂设计模式:BeanFactory(懒加载)或者ApplicationContext(饿加载)创建对象;
  2. 单例设计模式:spring中的bean默认作用域就是单例。
  3. 代理设计模式:springAOP就是基于动态代理实现的。代理有:JDK接口代理和CGlib类代理;
  4. 适配器设计模式:适配器设计模式将一个接口转换成客户希望的另一个接口,适配器模式使得接口不兼容的那些类可以一起工作,其别名为包装器。在spring MVC中,DispatcherServlet根据请求信息调用HanderMapping,解析请求对应的Handler,解析到对应的Handler(也就是controller控制器)后,开始由HanderAdapter适配器处理。

为什么在spring MVC中使用适配器模式?Spring MVC中的controller种类众多,不同类型的controller通过不同的方法来对请求进行处理,有利于代码的维护

42、Mybatis工作原理?

答:

  1. 先读配置文件:配置mybatis的运行环境的信息,例如数据库连接信息;
  2. 加载映射文件:映射文件(xml)就是sql语句文件,需要在mybatis的配置文件中加载;
  3. 构造会话工厂SqlSessionFactory:通过mybatis的环境等配置信息构建会话工厂SqlSessionFactory
  4. 创建会话对象:由会话工厂创建Sqlsession对象,该对象中包含了执行sql语句的所有方法
  5. Executor执行器:mybatis底层定义了一个Executor接口操作数据库,它根据Sqlsession传递的参数动态的生成需要执行的sql语句,同时负责查询缓存的维护
  6. MappedStatement对象:在Executor接口的执行方法中有一个MappedStatement类型的参数,该参数是对映射信息的封装,用于存储要映射的sql语句的id、参数等信息。

43、Mybatis有哪些Executor执行器?

答:SimpleExecutor、ReuseExecutor、BatchExecutor

SimpleExecutor:每执行一次update或者select,就开启一个statement对象,用完立刻关闭statement对象。

ReuseExecutor:执行update或者select,以sql作为key查找statement对象,存在就使用,不存在就创建,用完后,不关闭statement对象,而是放置于Map<String,Statement>内,供下一次使用。

BatchExecutor:执行完update,没有select,JDBC批处理不支持select,将所有sql都添加到批处理中,等待同一执行,它缓存了多个statement对象,每个statement对象都是添加完毕后,同一执行的。

44、Redis的数据结构?

答:string、list、set、hash、zset

45、Spring boot starter的工作原理

答:

46、Spring的事务是怎么生效的?AOP使用场景?

答:底层使用的AOP实现的,对被代理的对象的每个方法进行拦截,在方法执行前启动事务,在方法完成后根据是否有异常及异常的类型进行提交或回滚。

Spring AOP动态代理机制:spring在运行期间会为目标对象生成代理对象,并在代理对象中实现目标对象的增强

Spring AOP中默认的动态代理方式是JDK代理

AOP使用场景:

  1. 记录日志;
  2. 监控方法运行时间;
  3. 权限控制;
  4. 事务管理

Spring事务失效场景需要去了解

47、Spring中的自动配置和自动装配?

答:简单版本:

自动配置:根据项目引入的依赖库来自动配置应用程序中需要的组件;

自动装配:自动将符合条件的bean注入到spring容器中。当我们需要使用某个bean时,springboot会根据bean的类型和名称自动找打对应的bean。

48、实体类中的字段和表中字段不一致的解决方案?

答:

  1. sql语句中字段起别名(我经常用)
  2. 在xml中的resultmap中进行字段映射;

49、在mapper如何传递多个参数?

答:

  1. 如果mapper层的接口形参有多个,那在xml中就使用#{0}、#{1}……的方式按序获取;
  2. 如果mapper层的接口形参有多个,也可以在mapper中使用@Param注解(我经常使用)

50、Jdk和cglib代理的区别?

答:

51、redis和rabbitmq做消息队列的区别?

答:

Redis:

  1. 数据持久化,可以将内存中的数据存储到磁盘中;
  2. 单线程,多路复用技术;
  3. 支持数据备份。
  4. 性能极高;
  5. 原子操作,要么成功要么失败;
  6. 支持发布和订阅;

Rabbitmq:

  1. 是一个消息队列技术;
  2. 异步、消峰、解耦、负载均衡;
  3. 架构:

3.1消息:转发的二进制对象;

3.2生产者:消息的生产者,负责把消息发送到交换机中;

3.3消费者:使用队列交换机获取信息

3.4交换机:负责接收生产者的消息并把它转到合适的队列

3.5队列:一个存储交换机发来的消息的缓冲,并将消息主动发送给消费者或者消费者主动获取消息

3.6绑定:队列交换机之间的关系。交换机根据消息的属性和绑定的属性来转发消息。绑定的一个重要的属性是binding_key;

3.7连接和通道:生产者和消费者需要和mq建立TCP连接。一些应用需要多个连接,为了节省TCP连接,可以使用通道,它被认为是一种轻型的共享TCP连接的连接。连接需要用户认证,并且支持TLS。

52、rabbitmq的使用场景?

答:

  1. 服务之间的异步通信--就是我执行了某个步骤后,不需要立即知道结果也行,在这个期间我可以去执行其他步骤,等我想知道结果后,我再去看;
  2. 顺序消费--队列?
  3. 请求消峰;
  4. 定时任务?

53、定时任务的实现方式?

答:定时任务的应用场景:客户下单后多久提醒商家发货等

  1. springboot的@Scheduled注解;
  2. 采用定时线程池来实现;
  3. 采用redis队列实现延迟的效果;
  4. Rabbitmq实现延迟时任务并间接实现动态定时任务

4.1通过死信的方式实现延时信息消费(队列顺序消费问题和开销过大问题);

死信:生产者将消息投递到队列中,消费从队列中去出信息消费,但是某些时候由于特定的原因导致队列的某些消息无法被消费,这样的消息如果没有后续处理,就会变成死信,所有的死信都会被放到死信队列中。

4.2通过MQ延时插件实现延时任务。

54、Rabbitmq消息基于什么传输的?

答:基于TCP,但是TCP连接断开消耗较大。所以Rabbitmq是使用信道通信,一个TCP连接中有多个信道。

55、Rabbitmq如何保证消息不丢失?

答:消息持久化,消息消费之前,Rabbitmq将消息持久化到磁盘的日志文件中。

56、Mysql中innodb和myisam区别?

答:

  1. innodb支持ACID(原子性(要么发生,要么不发生)、一致性(事务前后数据一致)、隔离性(不同事务之间操作不影响)、持久性(数据是持久存储的,即使数据库有问题))、事务,myisam不支持ACID、事务;
  2. Innodb支持行锁,myisam支持表锁;行锁粒度小,表锁粒度大
  3. Innodb支持外键,myisam不支持外键。

57、Innodb四种事务隔离级别?

答:脏读:读到没有提交的事务结果;不可重复读:两次读取出现数据不一致现象-行级影响;幻读:两次读取出现数据表不一致现象-表级影响

  1. 读未提交--可以看到未提交的事务执行结果--出现脏读、不可重复度、幻读
  2. 读已提交--只能看到已经提交事务的改变--出现不可重复读、幻读
  3. 可重复读--mysql的默认隔离级别,它确保同一事务的多个实例在并发读取数据时,会看到同样的数据行。但是会出现幻读
  4. 串行--最高隔离级别,它通过强制事务排序,使之不可能互相冲突,从而解决幻读问题。

58、Mysql如何优化distinct?

答:自己也不太理解,也没用过,先记录一下吧。

DISTINCT 在所有列上转换为 GROUP BY,并与 ORDER BY 子句结合使用。 

59、Mysql中关于锁的问题?

答:

60、实践中如何优化mysql?

答:优化顺序如下:

  1. sql语句以及索引的优化‘;
  2. 数据库表的优化;
  3. 系统配置的优化;
  4. 硬件的优化;
  • 12
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值