高新西区网站建设网页设计作业保护动物
news/
2025/9/27 20:43:17/
文章来源:
高新西区网站建设,网页设计作业保护动物,wordpress查看文章id,百度网页版微信目录
90、简述一下你了解的设计模式。
91、用 Java 写一个单例类。
92、什么是 UML#xff1f;
93、UML 中有哪些常用的图#xff1f;
94、用 Java 写一个冒泡排序。
95、用 Java 写一个折半查找。 90、简述一下你了解的设计模式。 所谓设计模式#xff0c;就是一套被…目录
90、简述一下你了解的设计模式。
91、用 Java 写一个单例类。
92、什么是 UML
93、UML 中有哪些常用的图
94、用 Java 写一个冒泡排序。
95、用 Java 写一个折半查找。 90、简述一下你了解的设计模式。 所谓设计模式就是一套被反复使用的代码设计经验的总结情境中一个问题经过证实的一个解决方案。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。设计模式使人们可以更加简单方便的复用成功的设计和体系结构。将已证实的技术表述成设计模式也会使新系统开发者更加容易理解其设计思路。 在 GoF 的《Design Patterns: Elements of Reusable Object-Oriented Software》中给出了三类创建型[对类的实例化过程的抽象化]、结构型[描述如何将类或对象结合在一起形成更大的结构]、行为型[对在不同的对象之间划分责任和算法的抽象化]共 23 种设计模式包括Abstract Factory抽象工厂模式Builder建造者模式Factory Method工厂方法模式Prototype原始模型模式Singleton单例模式Facade门面模式Adapter适配器模式Bridge桥梁模式Composite合成模式Decorator装饰模式Flyweight享元模式Proxy代理模式Command命令模式Interpreter解释器模式Visitor访问者模式Iterator迭代子模式Mediator调停者模式Memento备忘录模式Observer观察者模式State状态模式 Strategy策略模式 Template Method模板方法模式Chain Of Responsibility责任链模式。
面试被问到关于设计模式的知识时可以拣最常用的作答例如
工厂模式工厂类可以根据条件生成不同的子类实例这些子类有一个公共的抽象父类并且实现了相同的方法但是这些方法针对不同的数据进行了不同的操作多态方法。当得到子类的实例后开发人员可以调用基类中的方法而不必考虑到底返回的是哪一个子类的实例。
代理模式给一个对象提供一个代理对象并由代理对象控制原对象的引用。实际开发中按照使用目的的不同代理可以分为远程代理、虚拟代理、保护代理、Cache 代理、防火墙代理、同步化代理、智能引用代理。
适配器模式把一个类的接口变换成客户端所期待的另一种接口从而使原本因接口不匹配而无法在一起使用的类能够一起工作。
模板方法模式提供一个抽象类将部分逻辑以具体方法或构造器的形式实现然后声明一些抽象方法来迫使子类实现剩余的逻辑。不同的子类可以以不同的方式实现这些抽象方法多态实现从而实现不同的业务逻辑。
除此之外还可以讲讲上面提到的门面模式、桥梁模式、单例模式、装潢模式Collections 工具类和 I/O 系统中都使用装潢模式等反正基本原则就是拣自己最熟悉的、用得最多的作答以免言多必失。 91、用 Java 写一个单例类。
饿汉式单例
public class Singleton {private Singleton(){}private static Singleton instance new Singleton();public static Singleton getInstance(){return instance;}
}
懒汉式单例
public class Singleton {private static Singleton instance null;private Singleton() {}public static synchronized Singleton getInstance(){if (instance null) instance new Singleton();return instance;}
}注意实现一个单例有两点注意事项①将构造器私有不允许外界通过构造器创建对象②通过公开的静态方法向外界返回类的唯一实例。这里有一个问题可以思考Spring 的 IoC 容器可以为普通的类创建单例它是怎么做到的呢 92、什么是 UML UML 是统一建模语言Unified Modeling Language的缩写它发表于 1997年综合了当时已经存在的面向对象的建模语言、方法和过程是一个支持模型化和软件系统开发的图形化语言为软件开发的所有阶段提供模型化和可视化支持。使用 UML 可以帮助沟通与交流辅助应用设计和文档的生成还能够阐释系统的结构和行为。 93、UML 中有哪些常用的图 UML 定义了多种图形化的符号来描述软件系统部分或全部的静态结构和动态结构包括用例图use case diagram、类图class diagram、时序图sequence diagram、协作图collaboration diagram、状态图statechart diagram、活动图activity diagram、构件图component diagram、部署图deployment diagram等。在这些图形化符号中有三种图最为重要分别是用例图用来捕获需求描述系统的功能通过该图可以迅速的了解系统的功能模块及其关系、类图描述类以及类与类之间的关系通过该图可以快速了解系统、时序图描述执行特定任务时对象之间的交互关系以及执行顺序通过该图可以了解对象能接收的消息也就是说对象能够向外界提供的服务。
用例图 类图 时序图 94、用 Java 写一个冒泡排序。 冒泡排序几乎是个程序员都写得出来但是面试的时候如何写一个逼格高的冒泡排序却不是每个人都能做到下面提供一个参考代码 import java.util.Comparator;
public interface Sorter {/*** 排序* param list 待排序的数组*/public T extends ComparableT void sort(T[] list);/*** 排序* param list 待排序的数组* param comp 比较两个对象的比较器*/public T void sort(T[] list, ComparatorT comp);
}
import java.util.Comparator;
/**
* 冒泡排序
*
*/
public class BubbleSorter implements Sorter {Overridepublic T extends ComparableT void sort(T[] list) {boolean swapped true;for (int i 1, len list.length; i len swapped; i) {swapped false;for (int j 0; j len - i; j) {if (list[j].compareTo(list[j 1]) 0) {T temp list[j];list[j] list[j 1];list[j 1] temp;swapped true;}}}}
Override
public T void sort(T[] list, ComparatorT comp) {boolean swapped true;for (int i 1, len list.length; i len swapped; i) {swapped false;for (int j 0; j len - i; j) {if (comp.compare(list[j], list[j 1]) 0) {T temp list[j];list[j] list[j 1];list[j 1] temp;swapped true;}}}}
} 95、用 Java 写一个折半查找。 折半查找也称二分查找、二分搜索是一种在有序数组中查找某一特定元素的搜索算法。搜素过程从数组的中间元素开始如果中间元素正好是要查找的元素则搜素过程结束如果某一特定元素大于或者小于中间元素则在数组大于或小于中间元素的那一半中查找而且跟开始一样从中间元素开始比较。如果在某一步骤数组已经为空则表示找不到指定的元素。这种搜索算法每一次比较都使搜索范围缩小一半其时间复杂度是 O(logN)。
import java.util.Comparator;public class MyUtil {public static T extends ComparableT int binarySearch(T[] x, Tkey) {return binarySearch(x, 0, x.length- 1, key);}// 使用循环实现的二分查找public static T int binarySearch(T[] x, T key, ComparatorT comp)
{int low 0;int high x.length - 1;while (low high) {int mid (low high) 1;int cmp comp.compare(x[mid], key);if (cmp 0) {low mid 1;}else if (cmp 0) {high mid - 1;}else {return mid;}
}return -1;
}// 使用递归实现的二分查找
private staticT extends ComparableT int binarySearch(T[] x, int low, int high, T key) {if(low high) {int mid low ((high -low) 1);if(key.compareTo(x[mid]) 0) {return mid;}else if(key.compareTo(x[mid]) 0) {return binarySearch(x,low, mid - 1, key);}else {return binarySearch(x,mid 1, high, key);}}return -1;}
}
说明上面的代码中给出了折半查找的两个版本一个用递归实现一个用循环实现。需要注意的是计算中间位置时不应该使用(high low) / 2 的方式因为加法运算可能导致整数越界这里应该使用以下三种方式之一low (high - low)/ 2 或 low (high – low) 1 或(low high) 1是逻辑右移是不带符号位的右移 要想了解更多
千题千解·Java面试宝典_时光の尘的博客-CSDN博客
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/919919.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!