1. 类和对象的区别
类是一个独立的程序单位,他应该有个类名,它的内部包含了属性和服务两个主要部分
对象其实就是构成系统的一个基本单位 ,一个对象由一组属性和一组服务组成的
说白了,类就像一台机器,而对象就是类身上的零件
2. 接口
接口只能具有抽象方法,一个类可以实现多个接口,当类实现了接口以后就必须
实现接口中的所有的抽象方法
3. JAVA中类的六种关系
1.继承关系 2.聚合关系 3.依赖关系 4.组合关系 5.实现关系 6.关联关系
4. 为什么要用spring
基于POJO的轻量级,通过依赖注入和面向接口实现松耦合
面向切面编程(aop 不修改源代码的情况下对系统动态统一添加功能的一种技术,扩展性)
5. 为什么要有控制反转
控制反转是将组件之间的依赖关系从程序内部提到外部来管理
就是把创建对象的控制权进行转移,以前都是由自己来把控,而现在是交给第三方进行管理
就比如说转移给了IOC(Spring)容器进行管理,你要什么对象它就给你什么对象
6. 堆,栈,Hash结构
栈是后进先出的,类似于计算机的Ctrl+z撤回一样的
队列是先进先出的,类似于自助冰淇淋机的蛋筒一样的
Hash是一个KV结构字符串,key不可重复,唯一的Key对应一个自己的value
7. sql优化
1.查询SQL尽量不要使用select * ,而是具体字段
2.避免在where中使用or来连接条件
3.查询尽量避免返回大量数据
4.优化like语句
6.索引不要太多,一般5个以内
等等
8. 什么是进程,什么是线程 串行并行
电脑中会运行很多程序,每个程序有一个独立的进程,而进程之间是相互独立存在的
线程是进程中最小的执行单位,并且一个进程至少有一个线程
串行:比如说电脑要下载多个文件,串行是先开始下载A再去下载B 它们在时间上市不可
能发生叠加的。
并行:下载多个文件,开启多条线程,多个文件同时进行下载,是同一时刻发生的,并行
在时间上是叠加的
9. 线程安全
加synchronized同步锁,加Lock释放锁
线程安全就是多线程访问时,采用了加锁机制,当一个线程访问该类的某个数据时,进行
保护,其他线程不能进行访问直到该线程读取完,其他线程才可使用。
10. HashMap的数据结构
可以用指定Key找到指定的Value,是一个数组加链表的结构,
整体是一个数组
数组的每一个位置是一个链表
链表每个节点的Value即我们存储的Object
11. 单点登录实现
用户访问浏览器,但是你又想保护服务器中的资源,就可以限制浏览器的请求,响应
合法的请求,忽略非法的请求,浏览器每次请求服务器,服务器创建一个会话id,后面第
二次 第三次请求都会带上会话id,服务器就知道这个会话id是不是同一个用户了
登录状态:假设浏览器第一次请求需要输入账号密码。服务器拿着用户的密码去数据库对比
正确的话就是合法用户,会给这个会话标记已登录的状态
12. SpringMVC流程
用户发送请求至前端控制器
前端控制器收到请求去调用处理器映射器
处理器映射器找到具体的处理器,生成处理器对象及处理器拦截器 返回
前端控制器调用处理器适配器
处理器适配器调用具体的后端处理器
后端控制器返回模型和视图
处理器适配器将后端控制器执行结果返回给前段控制器
前端控制器将模型和视图传给视图解析器
视图解析器解析后返回具体的视图
前端控制器根据视图进行渲染视图
前端控制器返回用户
13. sleep() 和 wait() 有什么区别?
类的不同:sleep() 来自 Thread,wait() 来自 Object。
释放锁:sleep() 不释放锁;wait() 释放锁。
用法不同:sleep() 时间到会自动恢复;wait() 可以使用 notify()/notifyAll()直接唤醒。
14. 怎么实现动态代理?
JDK 原生动态代理和 cglib 动态代理。
JDK 原生动态代理是基于接口实现的,而 cglib 是基于继承当前类的子类实现的。