• 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中绑定的属性。它可以像前端表达式进行条件判断 和循环,以及很多的功能

    纸上得来终觉浅,绝知此事要躬行。
  • 相关阅读:
    python3爬取咪咕音乐榜信息(附源代码)
    python3通过Beautif和XPath分别爬取“小猪短租-北京”租房信息,并对比时间效率(附源代码)
    在windows7 32ibt安装MongoDB数据库的方法及连接失败解决方案
    GoWeb开发_Iris框架讲解(一)
    Web项目开发介绍及实战项目介绍
    DAY7学习笔记
    DAY6课下作业
    DAY6学习笔记
    DAY5课下作业
    DAY5学习笔记
  • 原文地址:https://www.cnblogs.com/chenglangpofeng/p/10783163.html
Copyright © 2020-2023  润新知