4月找工作面试题记录及答案

Redis 持久化

持久化就是把内存数据存入在硬盘中,做数据备份。

RDB:以二进制文件将数据写入临时文件。 RDB性能较好,缺点是持久化时如果redis发生故障会导致数据丢失。

AOF:通过append将数据存入到操作日志文件尾部,AOF文件内容是字符串的,容易阅读和解析。AOF可以更好的保持数据的完整性,如果追加文件的世界是1s,发生故障时只会丢失1s的数据。缺点是文件比较大,恢复速度慢。

Memcached的持久化

Memcached是缓存系统,所以无法进行持久化。redis是存储系统,

 

Redis memcache的区别

Redis 可以进行持久化,数据类型多,最大存储多。

 

Jdk自带锁

就是ReentrantLock,叫可重入锁,是Lok对象的实现类

Linux命令:top、查看进程命令

top:Linux系统可以通过top命令查看系统的CPU、内存、运行时间、交换分区、执行的线程等信息。通过top命令可以有效的发现系统的缺陷出在哪里。是内存不够、CPU处理能力不够、IO读写过高….

通过ps命令可以查看进程

rabbitMq的底层原理,为什么要使用rabbitMQ

RabbitMQ是一个消息队列,实现了AMQP高级消息队列协议,用Erlang语言开发的,工作机制是一个生产者、消费者模式。

工作机制:首先连接到rabbitMQ服务器,会和服务器创建一个TCP连接,对连接的用户名和密码进行一个认证,认证通过后就建立了一条AMQP信道。AMQP的命令都是通过信道发送,每个信道都有一个唯一的id,发布消息、订阅队列等都是通过信道完成。

RabbitMQ应用场景:

(1)异步处理:比如发送邮件和短信之类的,可以不需要同步等待的业务

(2)秒杀活动:秒杀活动有大量的用户请求,会产生巨大的服务器压力;可以使用rabbitMQ先将用户的请求都存入到消息队列,当存入不了达到限制时则返回给用户失败,存入的请求再做后续的业务逻辑处理。

(3)做消息通讯:比如聊天功能,用户A和用户B都订阅对方的消息,双方都是生产者和消费者。

RabbitMQ优势:

(1) 是除了Qpid之外唯一一个实现了AMQP的消息服务器

(2) 提供了持久化支持(但是持久化会影响rabbitMQ性能,因为数据是写入到硬盘),具有高并发的特点,Erlang语言本身就具有高并发性,好像是为电话机交换开发的语言。

(3) 有后台管理界面,可以看登录用户的消费者、生产者、以及队列等信息,以及监控运行状态。

(4) 网络上的信息和学习资料很多

(5) 集群部署比较简单

 

线程池的方法参数和工作流程

corePoolSize:核心线程数量

maximumPoolSize:最大线程数量

workQueue:阻塞队列

keepAliveTime:线程池维护线程所允许的空闲时间

threadFactory:创建新线程

Handler:线程池的饱和策略,当线程池的阻塞队列满了并且没有空闲线程时,有新任务进来时进行何种处理。有4种策略。

(1)AbortPolicy:直接抛出异常,这是默认策略;

(2)CallerRunsPolicy:用调用者所在的线程来执行任务;

(3)DiscardOldestPolicy:丢弃阻塞队列中靠最前的任务,并执行当前任务;

(4)DiscardPolicy:直接丢弃任务;

线程池工作流程

  

Spring mvc 拦截器的实现接口和方法(举例几个)

实现HandlerInterceptor接口,有以下方法:

(1) preHandle在业务处理器处理请求之前被调用。预处理,可以进行编码、安全控制、权限校验等处理

(2) postHandle在业务处理器处理请求执行完成后,生成视图之前执行。后处理(调用了Service并返回ModelAndView,但未进行页面渲染)有机会修改ModelAndView

(3) afterCompletionDispatcherServlet完全处理完请求后被调用,可用于清理资源等。返回处理(已经渲染了页面)

 

delete和truncate的区别

truncate会删除整个表的数据,并且回收数据和索引所占的的空间。truncate删除的数据难以找回。删除效率比delete快,因为没有回滚操作。

 

数据库优化

(1) sql语法优化

(2) 索引优化(避免全表扫描)

(3) 分库分表,分表有(横向分割和纵向分割)

(4) 合理的表设计,对字段使用合理的类型

(5) 使用数据库工具对慢sql进行问题分析,并优化sql

(6) 数据库读写分离

 

应用服务器优化

(1) 使用nosql缓存数据库

(2) 使用消息中间件

(3) 集群、负载均衡

(4) JVM调优

(5) nginx做静态资源服务器

 

公司验签

https://blog.csdn.net/zhenglianghui163/article/details/79068986

mybatis和hibernate的区别

mybatis是一个半orm的手写sql框架,比较灵活,对sql优化也比较方便,比较简单上手,执行速度比hibernate快一点。

hibernate是一个全自动生成hql语句的框架,学习成本较高。当然hibernate也可以进行手写sql。

hibernate可以通过表关系进行级联删除。

hibernate移植性更高,只需要改变数据库方方言。

 

前端vue框架了解

vue可以将后端返回数据在javascript中封装起来,然后id选择器绑定在标签中,在标签中用两个大括号{{ 属性 }} 展示data中绑定的属性。它可以像前端表达式进行条件判断 和循环,以及很多的功能

猜你喜欢

转载自www.cnblogs.com/chenglangpofeng/p/10783163.html