【面试1】

基础

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】)