Java高级面试题积累(二)

简述23种设计

  1. 抽象工厂模式(Abstract Factory):提供一个创建一系列相关或相互依赖对象的接口。而无需指定它们详细的类。

  2. 适配器模式(Adapter):将一个类的接口转换成客户希望的另外一个接口。适配器模式使得原本因为接口不兼容而不能一起工作的类能够一起工作。
  3. 桥梁模式(Bridge):将抽象部分与他的实现部分分离。使他们都能够独立的变化。
  4. 建造模式(Builder):将一个复杂对象的构建与他的标表示分离,使相同的构建过程能够创建不同的表示。

  5. 责任链模式(Chain of Responsibility):为解除请求的发送者和接收者之间耦合,而使多个对象都有差点儿处理这个请求。将这些对象连成一条链,并沿着这条链传递给请求,知道有一个对象处理他。

  6. 命令模式(Command):将一个请求封装为一个对象。从而可用不同的请求对客户进行參数化;对请求排列或记录请求日志,以及支持可取消的操作。
  7. 合成模式(Composite):将对象组合成树形结构以表示“部分-总体”的层次结构。

    它使得客户对单个对象和复合对象的使用具有一致性。

  8. 装饰模式(Decorator):动态地给一个对象加入一些额外的职责。就扩展功能而言。他能生成子类的方式更为灵活。

  9. 门面模式(Facade):为子系统中的一组接口提供一个一致的界面。门面模式定义了一个高层接口,这个接口使得这一子系统更加容器使用。
  10. 工厂方法(Factory Mehtod):定义一个用于创建对象的接口,让子类决定将哪一个类实例化。Factory Method使一个类的实例化延迟到其子类。
  11. 享元模式(Flyweight):运用共享技术以有效地支持大量细粒度的对象。

  12. 解释器模式(Interpreter):给定一个语言。定义他的语法的一种表示,并定义一个解释器,该解释器使用该表示解释语言中的句子。
  13. 迭代子模式(Iterator):提供一种方法顺序訪问一个聚合对象中的各个元素,而又不需暴露该对象的内部表示。
  14. 调停者模式(Mediator):用一个中介对象来封装一系列的对象交互。

    中介者使各对象不须要显式的内部表示。

  15. 备忘录模式(Memento):在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。

    这样以后就可将该对象恢复到保存的状态。

  16. 观察者模式(Observer):定义对象间的一种一对多的依赖关系。以便当一个对象的状态发生改变时,全部依赖于他的对象都得到通知并自己主动刷新。
  17. 原始模型模式(Prototype):用原型实例指定创建对象的种类。而且通过拷贝这个原型创建新的对象。
  18. 代理模式(Proxy):为其它对象提供一个代理以控制对这个对象的訪问。
  19. 单例模式(Singleton):保证一个类仅有一个实例。并提供一个訪问他的全局訪问点。
  20. 状态模式(State):同意一个对象在其内部状态改变时改变他的行为。对象看起来似乎改动了他所属的类。

  21. 策略模式(Strategy):定义一系列的算法,把他们一个个封装起来,而且使他们可相互替换。

    本模式使得算法的变化可独立使用他的客户。

  22. 模板模式(Template Mehtod):定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类能够不改变一个算法的结构就可以重定义该算法的某些特定步骤。
  23. 訪问者模式(Visitor):表示一个作用于某对象结构中的各元素的做。该模式能够实如今不改变各元素的类的前提下定义作用于这些元素的新操作。

结合项目说一下设计模式

模板方法模式结合实例说的话,在提交订单的抽象类。将提交订单固定的方法实现比如,检查购物车,支付方式,检查用户地址,生成发票等方法。

因为会依据订单类型不同(比如web端订单。ios端订单,andorid端订单等)而详细实现不同所以详细的提交订单用抽象方法定义让详细子类来实现提交订单方法。

工厂模式在做电商系统时因为依据订单类型创建的订单实例不同。

所以运用了工厂模式,通过订单类型获取相应订单实例。

策略模式之前做电商系统时候有规则引擎。通过不同的算法规则来运行不同的策略。

观察者模式定义对象间一对多的依赖关系,当一个对象的状态发生改变时。全部依赖于它的对象都得到通知自己主动更新

被观察者拥有全部的观察者实例。当被观察者状态变更时循环全部观察者来通知变更。

经常使用语事件监听中。

适配器模式是把一个类的接口变成client所期待的还有一种接口。分为类适配器和对象适配器。

类适配器实现通过继承部分实现的实现类来实现须要适配的接口。

对象适配器是通过实现类中包括部分实现的实现类实体来实现须要适配的接口。

当想适用积存的类,但接口不符合需求时能够选择适配器模式。

单例模式spring容器就是一个典型的单例模式,实现的话就是定义static final 变量指向实例。而且私有化构造函数。

提供public方法来提供实例,确保该类仅仅有一个实例。

gc的算法了解吗

gc的基本算法有引用计数,复制。编辑-清扫,编辑-压缩。分代等。

引用计数: 通过为每个对象加入一个计数器,通过计数器记录该对象的活跃引用数量。

若计数器为0就说明这个对象没有被不论什么变量引用。gc就能够进行垃圾收集。

复制:是把内存空间划分为2个相等的区域。每次仅仅使用一个区域。垃圾回收时,遍历当前使用区域,把正在使用的对象拷贝到另外一个区域。

编辑-清扫:第一阶段遍历全部的引用,将有活的对象进行标记,第二阶段对堆进行遍历。把未标记的对象进行清除。可是须要暂停整个应用、而且会产生内存碎片。

标记-压缩:第一阶段标记活的对象。第二阶段把未标记的对象压缩并按顺序放入堆中的某一块中。

分代:基于对象生命周期分析得出的垃圾回收算法,把对象分为年轻代、年老代、持久代。对不同生命周期使用不同的算法进行回收。

spring核心容器原理

Spring内部最核心的是IOC容器。就是具有依赖注入功能的容器。由容器依据配置文件去创建实例并创建各个实例之间的依赖关系。

由Spring容器初始化、装配及管理的对象称为Bean。代表接口为BeanFactory。提供了IOC容器的最基本功能。

而ApplicationContext继承BeanFactory,添加了很多其它企业级功能的支持。

因为ioc的支持企业级普遍採用面向接口的开发模式。

顺便说一下spring的AOP面向切面编程,事实上是通过动态代理来截取消息的方式,对消息进行装饰,代替原有对象的行为的运行。

一般用于权限。缓存,日志处理,事务。同步等场所应用。

JVM内存管理机制

JVM内存分布參考图

程序计数器是用来指示运行哪条指令的。

多线程是由CPU切换来运行的。所以在切换线程后为了恢复在切换之前的线程运行为止,所以每一个线程都须要有自己独立的程序计数器。

虚拟机 栈是java方法运行的内存模型。

栈中存储的是栈帧。每一个栈帧相应被调用的方法,在栈帧中包含局部变量表、操作数栈、指向当前方法所属的类的运行时常量池的引用、方法返回地址等。

当线程运行方法时会随之创建一个相应的栈帧,并将简历的栈帧压栈。当方法运行完成后将栈帧出栈。

局部变量表是用来存储方法中的局部变量。对于基本数据类型的变量,则直接存储值,对于引用类型的变量,则存储指向对象的引用。

操作数栈的作用是程序中的所以计算过程都是借助于操作数栈来完毕的。

指向执行时常量池的引用,因为方法执行的过程中有可能需要用到类中的常量,所以必需要有一个引用指向执行时常量。

方法返回地址。作用是当一个方法运行完成后,要返回之前调用它的地方,因此在栈帧中必须保存一个方法返回地址。

因为每一个线程正在运行的方法可能不同。因此每一个线程都会有独立的虚拟机栈。

本地方法栈与虚拟机栈的作用和原理相似。差别在于服务对象。虚拟机栈是服务于java方法,本地方法栈服务于本地方法。

是用来存储对象本身,以及数组等。资源是线程共享的。虚拟机栈中的引用指向堆中的详细实例,JVM中仅仅有一个堆。

方法区也是线程共享的区域,存储了每一个类的信息(比方类的名称、方法信息、字段信息等)、静态变量、常量以及编译器编译后的代码。

Java 线程池的作用

为了解决一个server接受到大量短小线程的请求时避免产生非常多创建和销毁线程动作,降低server在创建和销毁线程上花费的时间和消耗的系统资源。

赋:欢迎广大java程序员将自身经历的面试题留言,博主会更新到文章中。谢谢支持~

时间: 2024-11-05 18:35:01

Java高级面试题积累(二)的相关文章

剑指offer编程题Java实现——面试题10二进制中1的个数

题目: 请实现一个函数,输入一个整数,输出该整数二进制表示中1的个数.例如,把9表示成二进制是1001,有2位是1,该函数输出2解法:把整数减一和原来的数做与运算,会把该整数二进制表示中的最低位的1变成0,与运算进行多少次就有多少个1. 1 package Solution; 2 /** 3 * 剑指offer面试题10:二进制中1的个数 4 * 题目:请实现一个函数,输入一个整数,输出该整数二进制表示中1的个数. 5 * 例如,把9表示成二进制是1001,有2位是1,该函数输出2 6 * 解法

Java高级面试题及答案

List和Set比较,各自的子类比较 对比一:Arraylist与LinkedList的比较 1.ArrayList是实现了基于动态数组的数据结构,因为地址连续,一旦数据存储好了,查询操作效率会比较高(在内存里是连着放的). 2.因为地址连续, ArrayList要移动数据,所以插入和删除操作效率比较低. 3.LinkedList基于链表的数据结构,地址是任意的,所以在开辟内存空间的时候不需要等一个连续的地址,对于新增和删除操作add和remove,LinedList比较占优势. 4.因为Lin

Java高级面试题:分布式Session实现方案有哪些?

目录一.面试官心理分析二.面试题剖析2.1 完全不用 session2.2 tomcat + redis2.3 spring session + redis面试官心理分析面试官问了你一堆 dubbo 是怎么玩儿的,你会玩儿 dubbo 就可以把单块系统弄成分布式系统,然后分布式之后接踵而来的就是一堆问题,最大的问题就是分布式事务.接口幂等性.分布式锁,还有最后一个就是分布式 session.当然了,分布式系统中的问题何止这么一点,非常之多,复杂度很高,这里只是说一下常见的几个问题,也是面试的时候

一线互联网公司Java高级面试题总结

1.hashcode相等两个类一定相等吗?equals呢?相反呢? 2.介绍一下集合框架? 3.hashmap hastable 底层实现什么区别?hashtable和concurrenthashtable呢? 4.hashmap和treemap什么区别?低层数据结构是什么? 5.线程池用过吗都有什么参数?底层如何实现的? 6.sychnized和Lock什么区别?sychnize 什么情况情况是对象锁? 什么时候是全局锁为什么? 7.ThreadLocal 是什么底层如何实现?写一个例子呗?

国内一线互联网公司的Java高级面试题总结

Java重点知识 多线程(线程状态.线程并发,Synchronized与Lock的区别和底层原理,常用的锁及其使用场景和原理, volatile和ThreadLocal解决了什么问题,CAS在Java中的实现 线程池原理和实现,阻塞队列和线程安全队列, 线程间通信: synchronized + wait.notify/notifyAll, Lock + Condition 的多路复用, CountDownLatch.CyclicBarrier和Semaphore的作用和用法,使用场景) JVM

java面试题——java高级(二)

四.Java高级部分 1.红黑树的实现原理和应用场景: 1.(1)每个节点或者是黑色,或者是红色. (2)根节点是黑色. (3)每个叶子节点(NIL)是黑色. [注意:这里叶子节点,是指为空(NIL或NULL)的叶子节点!] (4)如果一个节点是红色的,则它的子节点必须是黑色的. (5)从一个节点到该节点的子孙节点的所有路径上包含相同数目的黑节点. 注意: (01) 特性(3)中的叶子节点,是只为空(NIL或null)的节点. (02) 特性(5),确保没有一条路径会比其他路径长出俩倍.因而,红

java面试题整理二(转灰灰+灰灰)

java 开发面试题小整理(二) 51.Anonymous Inner Class(匿名内部类)是否可以继承其它类?是否可以实现接口? 答:可以继承其他类或实现其他接口,在Swing编程和Android开发中常用此方式来实现事件监听和回调. 52.内部类可以引用它的包含类(外部类)的成员吗?有没有什么限制? 答:一个内部类对象可以访问创建它的外部类对象的成员,包括私有成员. 53.Java 中的final关键字有哪些用法? 答:(1)修饰类:表示该类不能被继承: (2)修饰方法:表示方法不能被重

JAVA基础再回首(二十五)——Lock锁的使用、死锁问题、多线程生产者和消费者、线程池、匿名内部类使用多线程、定时器、面试题

JAVA基础再回首(二十五)--Lock锁的使用.死锁问题.多线程生产者和消费者.线程池.匿名内部类使用多线程.定时器.面试题 版权声明:转载必须注明本文转自程序员杜鹏程的博客:http://blog.csdn.net/m366917 我们来继续学习多线程 Lock锁的使用 虽然我们可以理解同步代码块和同步方法的锁对象问题,但是我们并没有直接看到在哪里加上了锁,在哪里释放了锁,为了更清晰的表达如何加锁和释放锁,JDK5以后提供了一个新的锁对象Lock Lock void lock():获取锁 v

更多免费初级中级高级大数据java视频教程下载 加(微***信((号keepper,请备注java或扫下面2二3维4码架构师148讲视频教程(71-80讲)

更多免费初级中级高级大数据java视频教程下载 加(微***信((号keepper,请备注java或扫下面2二3维4码架构师148讲视频教程(71-80讲)java视频教程第71节:ActiveMQ入门和消息中间件.avijava视频教程第72节:JMS基本概念和模型.avijava视频教程第73节:JMS的可靠性机制.avijava视频教程第74节:JMS的API结构和开发步骤.avijava视频教程第75节:Broker的启动方式.avijava视频教程第76节:ActiveMQ结合Spri