- Java关键字
- transient
- Java的serialization持久化对象实例时,用来表示一个域不是对象串行化的一部分
- native
- volatile
- 表示可以被多个线程异步修改的成员变量
- 确保所有线程看到的指定变量值相同
- 禁止指令重排序
- 实现机制:
- lock前缀指令,形成内存屏障,之前操作必须全部完成
- 对缓存的修改立即写入主存
- 写操作后,其他CPU中的缓存无效
- Java多线程
- Lock与synchronized区别:
- Lock是一个接口,synchronized是java关键字
- synchronized发生异常时会自动释放线程占有的锁,Lock需要手动释放
- Lock可以响应中断
- 提高读操作的效率
- 序列化与反序列化:
- 序列化:对象转换为字节序列
- 序列化用途:对象持久化,保存在磁盘;网络传输对象
- Java NIO:
- Channel(通道)
- IO中的Steam是单向的,Channel双向,可进行读写
- Buffer(缓冲区)
- Selector(选择器)
- 轮询每个注册的通道,有注册事件发生,进行处理
- 同步非阻塞IO,对IO的读写是同步阻塞的,通过线程复用,将IO准备事件分离
- 单线程管理多个通道,不必创建并维护多个线程,减少线程上下文切换导致的开销
- SelectorKey表示一个到达的事件
![](blob:https://i.cnblogs.com/eddb1db5-41ce-47cc-bee1-daa1c857ae11)
- 同步&非同步、阻塞&非阻塞
- 同步:对象是多个进程或多个线程,能否并发执行,能则两个线程是同步的
- 阻塞:单进程或线程,等待(阻塞)还是返回标志信息(非阻塞)
- 同步IO&异步IO:
- 同步IO:IO操作完成之前,线程阻塞
- 异步IO:IO操作不会导致请求线程阻塞,IO操作两个阶段都是由内核完成,不会阻塞用户线程
- IO:1)查看是否就绪 2)数据拷贝
- 区别:数据拷贝是由用户还是内核完成
- 阻塞IO是反映在IO操作的第一个阶段(查看是否就绪)
- JAVA设计模式:
- 代理模式:
- 为其他对象提供代理,控制对此对象的访问(Thread实现Runnable接口)
- 策略模式:
- 单例模式:
- 系统中只有一个实例,用在资源共享
- 数据库连接池、线程池
- 构造函数设置为private,定义static变量储存实例
- 装饰模式:
- 在不改变原类和使用继承的情况下,动态扩展一个对象的功能。
- 通过创建一个包装对象,包裹真实对象
- 工厂模式:
- 原型模式
- 模板方法模式
- 内存泄露:
- 无用对象持续占有内存空间而得不到释放
- 原因:长生命周期对象持有短生命周期对象
- Servlet、Tomcat、Spring MVC关系
- Servlet:小型JAV程序,运行在Web服务器中处理用户请求
- Tomcat:作为Web应用服务器,是一个Servlet容器,对Servlet进行管理
- 一个基本的流程:
- tomcat接收请求,找到合适的Servlet来处理请求,如果该Servlet没加载,就顺便编译加载到JVM,如果加载了,就调init方法初始化,调Service方法处理request并返回responser,观测Servlet状态变化,在结束时调用destory方法
- Spring MVC:Spring 提供的一个MVC框架,把保存数据Map的Model、页面显示的View、控制器Controller三者分析,简化web项目开发难度
- Spring Boot 将Tomcat设为默认容器,Spring MVC的入口是一个Servlet(前置控制器DispatcherServlet),前置控制器拦截请求,分发给Controller处理
- String StringBuffer StringBuilder
- String用final修饰, 不可变
- 都用字符数组保存字符串char[] value
- StringBuffer加同步锁,线程安全;StringBuilder没加
- 接口与抽象类区别
- 一个类可以实现多个接口,但是只能实现一个抽象类
- 接口中的实例变量是final类型的
- 一个类需要实现接口中的所有方法,抽象类不一定
- 接口中的方法不能实现,抽象类可以有非抽象的方法
- 接口不能通过new实例化,但可以声明
- Servlet
- 负责接收用户HttpServletRequest,并将HttpServletResponse反馈给用户
- 不是线程安全的
posted @
2018-12-15 15:28
李怕怕
阅读(
102)
评论()
编辑
收藏
举报