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) afterCompletion:在DispatcherServlet完全处理完请求后被调用,可用于清理资源等。返回处理(已经渲染了页面)。
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中绑定的属性。它可以像前端表达式进行条件判断 和循环,以及很多的功能