基础
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、线程生命周期(线程的生命周期有几种)
- 创建
- 就绪
- 运行
- 阻塞
- 死亡
3、yield()
线程从运行状态变为就绪状态,释放执行权,本线程可能再次抢到执行权进入运行状态。
4、wait() ( wait() 和 sleep() 的区别 )
线程通信的一组api,是Object的方法,使线程进入阻塞状态,并释放同步监视器。调用notify()或notifyAll
5、sleep()
是线程类(Thread)的静态方法;
调用此方法让当前线程暂停执行指定的时间;
将执行机会(CPU)让给其他线程,但是对象的锁依然保持,因此休眠时间结束后会自动恢复(线程回到就绪状态)
三、mysql
1、mysql数据引擎( 了解的数据库引擎 )
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
=> 响应
nginx
1、nginx是什么(nginx的了解)
Nginx---Ngine X,是一款免费的、自由的、开源的、高性能HTTP服务器和反向代理服务器;也是一个IMAP、POP3、SMTP代理服务器;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操作。