【多态】
- 同一个事件发生在不同的对象上会产生不同的结果。
- 多态是编程语言给不同的底层数据类型做相同的接口展示的一种能力
【继承】
- 1.提供代码的重用性。
【抽象】【封装】
- 1.【抽象】和【封装】是互补。
- 2.【抽象】关注对象的行为。
- 3.【封装】关注对象的行为的细节。
- 4.【封装】提供抽象的一种策略。
【接口】【抽象类】
- 1.【接口】方法隐含的都是抽象,抽象类可以包含非抽象
- 2.可以实现多个接口,但只能继承一个抽象类。
- 3.【接口】final,【抽象】非final
【Java虚拟机】
- 一个可以执行Java字节码的虚拟机进程,java可以在任意一个有JVM的平台都可以运行。
-【overriding覆盖】【overloading重载】
-【overrding】是子类重新定义父类的方法。
【java数据类】
【值传递】
- 对基本型变量而言的,传递的是该变量的一个副本,改变副本不影响原变量
- 【引用传递】
- 对象型变量,变量地址的副本,会影响变量值。
【创建线程的三种方式】
- 1.继承Thread类。
- 2.实现runnable接口。
【Java集合类框架的基本接口】
- 1.Collection:代表一组对象,每一个对象都是它的子元素。
- 2.Set:不包含重复元素的Collection
- 3.List:有顺序的collection,并且可以包含重复元素。
- 4.Map:可以把键(key)映射到值(value)的对象,键不能重复。
【Array】大小固定 【ArrayList】动态变化
【ArrayList】
-GC是在什么时候,对什么东西,做了什么事情?
- GC什么时候开始回收
- eden满了minor gc,升到老年代的对象大于老年代剩余空间full gc,或者小于时被HandlePromotionFailure参数强制full gc;gc与非gc时间耗时超过了GCTimeRatio的限制引发OOM,调优诸如通过NewRatio控制新生代老年代比例,通过MaxTenuringThreshold控制进入老年前生存次数等
- 对什么东西:
- 1.超出作用域或者是引用基数为0的对象
- 2.从gc root开始搜索,搜索不到的对象
- 3.从root搜索不到,而且经过第一次标记、清理后,仍然没有复活的对象
- 做什么事情:
- 删除不使用的对象,腾出内存空间
- 新生代做的是复制清理,老年代做的标记处理,
内存空间小,字节码解释器工作时通过改变这个计数值可以选取下一条需要执行的字节码指令,分支、循环、跳转、异常处理和线程恢复等功能都需要依赖这个计数器完成。该内存区域是唯一一个java虚拟机规范没有规定任何OOM情况的区域。
判断对象是否存在?
不一定会被回收,不一定会马上回收,而是处于一个死缓的阶段,需要经过两次标记。
简诉下java垃圾回收机制
虚拟机自动运行,低优先级的垃圾回收线程,在空闲或者内存不足时执行,扫描无引用对象,添加到回收集合,进行回收。
java中垃圾收集方法
【标记-清除】
【java内存模型】
-java内存模型(JMM)是线程间通信的控制机制.JMM定义了主内存和线程之间抽象关系。线程之间的共享变量存储在主内存(main memory)中,每个线程都有一个私有的本地内存(local memory),本地内存中存储了该线程以读/写共享变量的副本。本地内存是JMM的一个抽象概念,并不真实存在。它涵盖了缓存,写缓冲区,寄存器以及其他的硬件和编译器优化。Java内存模型的抽象示意图如下:
【java类加载过程?】
- 加载-》验证-》准备-》解析-》初始化
- 【java类加载机制】
- 虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验,解析和初始化,最终形成可以被虚拟机直接使用的java类型
【类加载器双亲委派模型机制】
- 当一个类收到了类加载请求时,不会自己先去加载这个类,而是将其委派给父类,由父类去加载,如果此时父类不能加载,反馈给子类,由子类去完成类的加载。
【简述java内存分配与回收策率以及Minor GC和Major GC】
- 1.对象优先在堆的Eden区分配。
- 2.大对象直接进入老年代.
- 3.长期存活的对象将直接进入老年代.
当Eden区没有足够的空间进行分配时,虚拟机会执行一次Minor GC.Minor Gc通常发生在新生代的Eden区,在这个区的对象生存期短,往往发生Gc的频率较高,回收速度比较快;Full Gc/Major GC发生在老年代,一般情况下,触发老年代GC的时候不会触发Minor GC,但是通过配置,可以在Full GC之前进行一次Minor GC这样可以加快老年代的回收速度。
参考链接
【控制反转IOC】
- Spring 把相互协作的关系称为依赖关系。假如 A 组件调用了 B 组件的方法,我们可称A 组件依赖于 B 组件。
- 在依赖注入的模式下,创建被调用者的工作不再由调用者来完成,因此称为控制反转
- 好处:依赖注入让 Spring 的 Bean以被指文件组织在一起,而不是以硬编码的方式耦合在一起。程序完成无须理会被调用者的实现,也不无须主动定位工厂,这是最好的解耦方式。实例之间的依赖关系由 IoC 容器负责管理
【依赖注入】
- IoC的一个重点是在系统运行中,动态的向某个对象提供它所需要的其他对象。这一点是通过DI(Dependency Injection,依赖注入)来实现的
【Java注入三种方式】
- 1.构造注入
- 2.Setter注入
- 3.接口注入
【spring中的bean】
- Java的实例,Java组件,包括任何应用
- 参考链接
【Spring的三种配置方式】
- 1.基于xml的配置
- 2.基于注解的配置
- 3.基于Java的配置
【spring bean的作用域】
- singleton 默认范围 只有唯一一个实例
- prototype 为每一个bean提供一个实例
- request 在请求bean范围内会每一个来自客户端的网络请求创建一个实例,在请求完成以后,bean会失效并被垃圾回收器回收。
- session 确保每个session中有一个bean的实例,在session过期后,bean会随之失效。
- global-session global-session和Portlet应用相关。当你的应用部署在Portlet容器中工作时,它包含很多portlet。如果你想要声明让所有的portlet共用全局的存储变量的话,那么这全局变量需要存储在global-session中。
【Spring框架中的单例Beans是线程安全的么?】
- Spring框架并没有对单例bean进行任何多线程的封装处理,如果这个bean有多种变化的话,就需要自行保证线程安全【PS:最浅显的解决方案:改变作用域为prototype】
【Spring框架中有哪些不同类型的事件】
- 1.上下文更新事件(ContextRefreshedEvent)
- 2.上下文开始事件(ContextStartedEvent)
- 3.上下文停止事件(ContextStoppedEvent)
- 4.上下文关闭事件(ContextClosedEvent)
- 5.请求处理事件(RequestHandledEvent)
【Spring 框架中都用到了哪些设计模式?】
- 【代理模式】
- AOP remoting
- 【单例模式】
- spring配置文件中定义的bean默认为单例模式
- 【模板方法】
- 用来解决代码重复的问题。比如. RestTemplate, JmsTemplate, JpaTemplate
- 【前端控制器】
- Spring提供了DispatcherServlet来对请求进行分发
- 【视图帮助】
- Spring提供了一系列的JSP标签,高效宏来辅助将分散的代码整合在视图里。
- 【依赖注入】
- 贯穿于BeanFactory / ApplicationContext接口的核心理念
- 【工厂模式】
- BeanFactory用来创建对象的实例
5.易于扩展
【SpringMVC的工作流程】
【strust2和springMVC的区别】
3.Struts采用值栈存储请求和响应的数据,通过OGNL存取数据,springmvc通过参数解析器是将request请求内容解析,并给方法形参赋值,将数据和视图封装成ModelAndView对象,最后又将ModelAndView中的模型数据通过reques域传输到页面。Jsp视图解析器默认使用jstl。
【SSM优缺点】
【Mybatis】
【进程】
【用户线程】
- Java程序中创建一个线程,它就被称为用户线程
- 没有用户线程,JVM关闭程序且退出。
【守护线程】
- 一个守护线程是在后台执行并且不会阻止JVM终止的线程
- 子线程仍是守护线程
【线程生命周期】
- Runnable,Waiting,Blocked,Dead
【线程的优先级】
- 线程优先级是一个int变量(从1-10),1代表最低优先级,10代表最高优先级
【线程的join方法】
- 释放所有线程资源来执行当前调用这个方法的线程直到结束。
【线程之间的通信】
- Object类中wait()\notify()\notifyAll()方法可以用于线程间通信关于资源的锁的状态
【确保线程安全】
- 1.使用原子类(atomic concurrent classes)
- 2.实现并发锁
- 3.使用volatile关键字
- 4.使用不变类和线程安全类
【死锁】
- 两个以上的线程永远阻塞的情况,这种情况产生至少需要两个以上的线程和两个以上的资源。
【数据结构和八大算法】
- 内部排序
- - 插入排序
- - - 直接插入排序
- - - 希尔排序
- - 选择排序
- - - 简单选择排序
- - - 堆排序
- - 交换排序
- - - 冒泡排序
- - - 快速排序
- - 归并排序
- - 基数排序
- 外部排序
- 八大排序算法参考链接