美文网首页
【面试1】

【面试1】

作者: giraffecode9668 | 来源:发表于2020-07-08 23:34 被阅读0次

    基础

    1、equals和==(equals和==的区别)
    equals:是Object的一个方法,实现对象的比较;复写equals()方法,达到比较对象内容是否相同的目的
    ==:用于比较是否同一个引用和比较基本数据类型是否相等

    2、多态(多态的理解)
    把不同的子类对象都当作父类来看,可以屏蔽不同子类对象之间的差异,写出通用的代码,做出通用的编程,以适应需求的不断变化。
    多态是面向对象的重要特性,简单点说:“一个接口,多种实现”。

    一、集合

    1、集合包括哪些API(集合有哪些)
    集合包括Collection接口和Map接口两大类。
    Collection是单列数据,定义了存取一组对象的方法的集合;Map是双列数据,存储的是键值对。
    Collection的子接口包含了List和Set,List是元素有序、可重复的集合,Set是元素无序、不可重复的集合。

    二、线程

    1、线程的创建4种方式(创建线程有几种方式)

    • 继承Thread,实现run()
    • 实现runnable,实现run()
    • 实现callable,实现call()
    • 线程池

    2、线程生命周期(线程的生命周期有几种)

    • 创建
    • 就绪
    • 运行
    • 阻塞
    • 死亡
    image.png

    3、yield()
    线程从运行状态变为就绪状态,释放执行权,本线程可能再次抢到执行权进入运行状态。

    4、wait() ( wait() 和 sleep() 的区别 )
    线程通信的一组api,是Object的方法,使线程进入阻塞状态,并释放同步监视器。调用notify()或notifyAll

    5、sleep()
    是线程类(Thread)的静态方法;
    调用此方法让当前线程暂停执行指定的时间;
    将执行机会(CPU)让给其他线程,但是对象的锁依然保持,因此休眠时间结束后会自动恢复(线程回到就绪状态)

    三、mysql

    1、mysql数据引擎( 了解的数据库引擎 )

    image.png

    2、索引、聚簇索引、覆盖索引(三者的理解)

    • 索引:一种数据结构,能够帮助我们快速的检索数据库中的数据。
    • 聚簇索引:将数据存储与索引放到了一块,找到索引也就找到了数据。
    • 非聚簇索引:将数据存储于索引分开结构,索引结构的叶子节点指向了数据的对应行

    3、隔离级别(什么是赃读、不可重复读、幻读)
    数据库事务问题:赃读、不可重复读、幻读

    • 赃读:读取未提交的数据
    • 不可重复读:同事务前后多次读取,发现数据内容不一致(事务开启对行未加锁,可以被修改)
    • 幻读:同事务前后多次读取,发现数据总量不一致(事务开启对表未加锁,可以被修改)
    隔离级别 赃读 不可重复读 幻读
    读未提交
    读提交 ×
    可重复读 × ×
    可串行 × × ×

    Spring

    1、spring是什么
    Spring是一个轻量级的IoC和AOP容器框架。

    spring模块

    模块名 作用
    Spring Core 核心类库,提供IOC服务
    Spring Context 提供框架式的Bean访问方式,以及企业级功能(JNDI、定时任务等)
    Spring AOP AOP服务
    Spring DAO 对JDBC的抽象,简化了数据访问异常的处理
    Spring ORM 对现有的ORM框架的支持
    Spring Web 提供了基本的面向Web的综合特性,例如多方文件上传
    Spring MVC 提供面向Web应用的Model-View-Controller实现

    2、spring配置方式3种

    • 基于XML的配置
    • 基于注解的配置
    • 基于Java的配置

    3、spring的优点

    • spring属于低侵入式设计,代码的污染极低;
    • spring的DI机制将对象之间的依赖关系交由框架处理,减低组件的耦合性
    • Spring提供了AOP技术,支持将一些通用任务,如安全、事务、日志、权限等进行集中式管理,从而提供更好的复用
    • spring对于主流的应用框架提供了集成支持

    4、IoC的理解(SpringIoc依赖什么实现)

    • IOC就是控制反转,对象创建的权力和时机实例的依赖关系由spring容器控制,有利于松散耦合,也利于功能的复用。
    • 使用java的反射机制,根据配置文件在运行时动态的去创建对象以及管理对象,并调用对象的方法
    • 3种注入方式:①构造器注入、②setter方法注入、③注解注入

    5、AOP理解 (AOP的原理)
    用于将业务无关,但却对多个对象产生影响的公共行为和逻辑,抽取并封装为一个可重用的模块,这个模块被命名为“切面”(Aspect)

    AOP实现的关键在于 代理模式
    AOP代理主要分为静态代理(AspectJ-编译增强)动态代理(Spring AOP)

    动态代理:JDK动态代理(实现共同接口)和CGLIB动态代理(继承类改写)

    springmvc

    1、springmvc的流程(springmvc的流程)
    请求 => DispatcherServlet =>
    请求HandlerMapping获取handler=> DispatcherServlet =>
    HandlerAdapter执行Handler方法获得ModelAndView => DispatcherServlet =>
    ViewResolver解析返回视图view => DispatcherServlet =>
    View视图渲染返回 => DispatcherServlet
    => 响应

    image.png

    nginx

    1、nginx是什么(nginx的了解)
    Nginx---Ngine X,是一款免费的、自由的、开源的、高性能HTTP服务器反向代理服务器;也是一个IMAPPOP3SMTP代理服务器;Nginx以其高性能、稳定性、丰富的功能、简单的配置和低资源消耗而闻名。

    也就是说Nginx本身就可以托管网站(类似于Tomcat一样),进行Http服务处理,也可以作为反向代理服务器负载均衡器HTTP缓存

    Nginx 解决了服务器的C10K(就是在一秒之内连接客户端的数目为10k即1万)问题。它的设计不像传统的服务器那样使用线程处理请求,而是一个更加高级的机制—事件驱动机制,是一种异步事件驱动结构。

    redis

    1、数据类型(5种)(reids的数据类型有几种)
    String、hash、list、set、sorted set
    (一)String
    这个其实没啥好说的,最常规的set/get操作,value可以是String也可以是数字。一般做一些复杂的计数功能的缓存。
    (二)hash
    这里value存放的是结构化的对象,比较方便的就是操作其中的某个字段。博主在做单点登录的时候,就是用这种数据结构存储用户信息,以cookieId作为key,设置30分钟为缓存过期时间,能很好的模拟出类似session的效果。
    (三)list
    使用List的数据结构,可以做简单的消息队列的功能。另外还有一个就是,可以利用lrange命令,做基于redis的分页功能,性能极佳,用户体验好。本人还用一个场景,很合适—取行情信息。就也是个生产者和消费者的场景。LIST可以很好的完成排队,先进先出的原则。
    (四)set
    因为set堆放的是一堆不重复值的集合。所以可以做全局去重的功能。为什么不用JVM自带的Set进行去重?因为我们的系统一般都是集群部署,使用JVM自带的Set,比较麻烦,难道为了一个做一个全局去重,再起一个公共服务,太麻烦了。
    另外,就是利用交集、并集、差集等操作,可以计算共同喜好,全部的喜好,自己独有的喜好等功能。
    (五)sorted set
    sorted set多了一个权重参数score,集合中的元素能够按score进行排列。可以做排行榜应用,取TOP N操作。

    相关文章

      网友评论

          本文标题:【面试1】

          本文链接:https://www.haomeiwen.com/subject/zgsccktx.html