程序设计细节知识
空白源
为未来奋斗的小白
展开
-
程序员面试题总结(一)重点是“黑体字”
程序员基础面试题(一) 1、为什么重写 equals 还要重写 hashcode? 考点:java 基础 参考回答: HashMap中,如果要比较key是否相等, 要同时使用这两个函数! 因为自定义的类的hashcode() 方法继承于 Object 类,其 hashcode 码为默认的内存地址,这样即便有相同含义的两个对象,比 较也是不相等的。HashMap 中的比较 key 是这样的,先求出 ...原创 2019-08-09 01:16:08 · 255 阅读 · 0 评论 -
面试题 集合类与Cloneable 和 Serializable 接口
** 为什么集合类没有实现 Cloneable 和 Serializable 接口? ** 考察点:JAVA 集合 参考回答: 1.克隆(cloning)或者是序列化(serialization)的语义和含义是跟具体的实现相关的。因此, 应该由集合类的具体实现来决定如何被克隆或者是序列化。 说说作用 2.实现 Serializable 序列化的作用:将对象的状态保存在存储媒体中以便可以在以后重写创...原创 2019-08-17 22:57:38 · 291 阅读 · 0 评论 -
什么是迭代器?
什么是迭代器? 考察点:JAVA 迭代器 参考回答: Iterator 提供了统一遍历操作集合元素的统一接口, Collection 接口实现 Iterable 接口,每个集合都通过实现 Iterable 接口中 iterator()方法返回 Iterator 接口的实例, 然后对集合 的元素进行迭代操作. 有一点需要注意的是:在迭代元素的时候不能通过集合的方法删除元素, 否则会抛出 Concur...原创 2019-08-17 23:05:10 · 165 阅读 · 0 评论 -
Iterator 和 ListIterator 的区别--面试题
Iterator 和 ListIterator 的区别是什么? 考察点:迭代器 参考回答: 相同点:两者都是fail-fast机制,都是作为内部类实现的。 区别是: Iterator 可用来遍历 Set 和 List 集合,但是 ListIterator 只能用来遍历 List。 Iterator 对集合只能是前向遍历,ListIterator 既可以前向也可以后向。 ListIterator 实...原创 2019-08-17 23:11:56 · 301 阅读 · 0 评论 -
快速失败(fail-fast)和安全失败(fail-safe)--面试
快速失败(fail-fast)和安全失败(fail-safe)的区别是什么? 考察点:集合 参考回答: Iterator 的安全失败是基于对底层集合做拷贝,因此,它不受源集合上修改的影响。 java.util 包下面的所有的集合类都是快速失败的,而 java.util.concurrent 包下面的所有的 类都是安全失败的。快速失败的迭代器会抛出ConcurrentModificationExce...原创 2019-08-17 23:20:48 · 322 阅读 · 0 评论 -
HashMap 和 Hashtable--面试
HashMap 和 Hashtable 有什么区别? 考察点:集合 参考回答: HashMap 和 Hashtable 都实现了 Map 接口,因此很多特性非常相似。但是,他们有以下不同点: HashMap 允许键和值是 null,而 Hashtable 不允许键或者值是 null。 Hashtable 是同步的,而 HashMap 不是。因此,HashMap 更适合于单线程环境,而 Hashta...原创 2019-08-17 23:24:59 · 276 阅读 · 0 评论 -
ArrayList 和 LinkedList 有什么区别--面试
ArrayList 和 LinkedList 有什么区别? 考察点:ArrayList 参考回答: ----ArrayList 和 LinkedList 都实现了 List 接口,他们有以下的不同点: ---- ArrayList 是基于索引的数据接口,它的底层是数组。它可以以 O(1)时间复杂度对元素进行随机 访问。 ---- LinkedList 是以元素列表的形式存储它的数据,每一个元素都和...原创 2019-08-17 23:29:47 · 598 阅读 · 0 评论 -
ArrayList,Vector,LinkedList 的存储性能和特性--面试
ArrayList,Vector,LinkedList 的存储性能和特性是什么? 考察点:ArrayList 参考回答: ArrayList 和 Vector 都是使用数组方式存储数据,此数组元素数大于实际存储的数据以便 增加和插入元素,它们都允许直接按序号索 引元素,但是插入元素要涉及数组元素移动等内存操作,所以索引数据快而插入数据慢 Vector 由于使用了 synchronized 方法(线...原创 2019-08-17 23:36:22 · 151 阅读 · 0 评论 -
Collection 和 Collections 的区别--面试
Collection 和 Collections 的区别 考察点:集合 参考回答: Collection 是集合类的上级接口,继承与他的接口主要有 Set 和 List. Collection 是一个集合接口。它提供了对集合对象进行基本操作的通用接口方法。Collection接口在Java 类库中有很多具体的实现。Collection接口的意义是为各种具体的集合提供了最大化的统一操作方式。 Col...原创 2019-08-17 23:41:49 · 274 阅读 · 0 评论 -
几大经典的排序总结及代码实现
本文为学习总结性文章,借鉴了部分博主的内容,附上链接: 链接1 链接2 总结: 1.术语说明: 稳定:如果a原本在b前面,而a=b,排序之后a仍然在b的前面; 不稳定:如果a原本在b的前面,而a=b,排序之后a可能会出现在b的后面; 内排序:所有排序操作都在内存中完成; 外排序:由于数据太大,因此把数据放在磁盘中,而排序通过磁盘和内存的数据传输才能进行; 时间复杂度: 一个算法执行所耗费的时间。 ...原创 2019-08-27 01:05:51 · 485 阅读 · 0 评论 -
队列与栈详解
队列(Queue):是限定只能在表的一端进行插入和另一端删除操作的线性表 栈(Stack):是限定之能在表的一端进行插入和删除操作的线性表 队列和栈的规则 队列:先进先出 栈:先进后出 队列和栈的遍历数据速度 队列:基于地址指针进行遍历,而且可以从头部或者尾部进行遍历,但不能同时遍历,无需开辟空间,因为在遍历的过程中不影响数据结构,所以遍历速度要快 栈:只能从顶部取数据,也就是说最先进入栈底的,需...原创 2019-08-30 00:45:37 · 850 阅读 · 0 评论 -
数据结构的树
1.树 在计算器科学中,树(英语:tree)是一种抽象数据类型或是实现这种抽象数据类型的数据结构,用来模拟具有树状结构性质的数据集合。它是由n(n>0)个有限节点组成一个具有层次关系的集合。把它叫做“树”是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。它具有以下的特点: 每个节点有零个或多个子节点; 没有父节点的节点称为根节点; 每一个非根节点有且只有一个父节点; 除了根节点外...原创 2019-08-30 01:02:38 · 207 阅读 · 0 评论 -
程序员面试题(八) 集合部分
④集合部分 1、Map 和 ConcurrentHashMap 的区别? 考点:集合 参考回答: hashmap 是线程不安全的,put 时在多线程情况下,会形成环从而导致死循环。 CoucurrentHashMap 是线程安全的,采用分段锁机制,减少锁的粒度。 2、hashMap 内部具体如何实现的? 考点:集合 参考回答: Hashmap 基于数组实现的,通过对 key 的 hashcode ...原创 2019-08-16 22:08:48 · 202 阅读 · 0 评论 -
程序员面试题总结(四) 面向对象
③面向对象 1、wait 方法底层原理 考察点:基础 参考回答: ObjectSynchronizer::wait 方法通过 object 的对象中找到 ObjectMonitor 对象调用方法 void ObjectMonitor::wait(jlong millis, bool interruptible, TRAPS) 通过ObjectMonitor::AddWaiter调用把新建立的Obj...原创 2019-08-13 01:00:10 · 167 阅读 · 0 评论 -
程序员面试题(五) java面试题
11、静态变量存在哪? 考察点:类 参考回答: 方法区 12、讲讲什么是泛型? 考察点:JAVA 泛型 参考回答: 泛型,即“参数化类型”。一提到参数,最熟悉的就是定义方法时有形参,然后调用此方法 时传递实参。那么参数化类型怎么理解呢?顾名思义,就是将类型由原来的具体的类型参数化, 类似于方法中的变量参数,此时类型也定义成参数形式(可以称之为类型形参),然后在使用/ 调用时传入具体的类型(类型实参...原创 2019-08-13 20:15:28 · 240 阅读 · 0 评论 -
ArrayList、Vector、LinkedList 的存储性能和特性
ArrayList、Vector、LinkedList 的存储性能和特性 考察点:ArrayList 参考回答: ArrayList 和 Vector 都是使用数组方式存储数据,此数组元素数大于实际存储的数据以便 增加和插入元素,它们都允许直接按序号索引元素,但是插入元素要涉及数组元素移动等内存操 作,所以索引数据快而插入数据慢, Vector 中的方法由于添加了 synchronized 修饰,...原创 2019-08-18 20:45:58 · 133 阅读 · 0 评论 -
List、Map、Set区别
List、Map、Set 三个接口存取元素时,各有什么特点? 考察点:List 参考回答: List 以特定索引来存取元素,可以有重复元素。 Set 不能存放重复元素(用对象的 equals() 方法来区分元素是否重复)。 Map 保存键值对(key-value pair)映射,映射关系可以是一对一 或多对一。 Set 和 Map 容器都有基于哈希存储和排序树的两种实现版本,基于哈希存储的版本理 ...原创 2019-08-18 20:49:20 · 100 阅读 · 0 评论 -
多线程--面试题
1、多线程中的 i++线程安全吗?为什么? 考察点:多线程 参考回答: 不安全。i++不是原子性操作。i++分为读取 i 值,对 i 值加一,再赋值给 i++,执行期中任 何一步都是有可能被其他线程抢占的。 比如说两个线程公用一个i变量,同时运行i++,加到100为止,最后会发现有可能会加到100.101,102三种情况 2、如何线程安全的实现一个计数器? 考察点:多线程 参考回答: 可以使用加锁...原创 2019-08-18 21:06:02 · 129 阅读 · 0 评论 -
线程池--面试
Java 中有几种线程池? 考察点:线程池 参考回答: 1、newFixedThreadPool 创建一个指定工作线程数量的线程池。每当提交一个任务就创建一 个工作线程,如果工作线程数量达到线程池初始的最大数,则将提交的任务存入到池队列中。 2、newCachedThreadPool 创建一个可缓存的线程池。这种类型的线程池特点是: 1).工作线程的创建数量几乎没有限制(其实也有限制的,数目为 I...原创 2019-08-19 19:55:06 · 148 阅读 · 0 评论 -
线程的几种可用状态
概括的解释下线程的几种可用状态。 考察点:JAVA 线程状态 参考回答: 1.新建( new ):新创建了一个线程对象。 2. 可运行( runnable ):线程对象创建后,其他线程(比如 main 线程)调用了该对象 的 start ()方法。该状态的线程位于可运行线程池中,等待被线程调度选中,获 取 cpu 的使用权 。 3. 运行( running ):可运行状态( runnable )的...原创 2019-08-19 20:42:53 · 390 阅读 · 0 评论 -
程序员面试题总结(二) 每日十题
11、什么是值传递和引用传递? 考察点:JAVA 引用传递 参考回答: 值传递是对基本型变量而言的,传递的是该变量的一个副本,改变副本不影响原变量. 引用传递一般是对于对象型变量而言的,传递的是该对象地址的一个副本, 并不是原对象本身 。 所以对引用对象进行操作会同时改变原对象. 一般认为,java 内的传递都是值传递. 12、数组(Array)和列表(ArrayList)有什么区别?什么时候应该...原创 2019-08-12 00:21:53 · 220 阅读 · 0 评论 -
程序员面试题(六)
31、谈一下面向对象的"六原则一法则"。 考察点:Java 对象 参考回答: 单一职责原则:一个类只做它该做的事情。(单一职责原则想表达的就是"高内聚",写 代码最终极的原则只有六个字"高内聚、低耦合",所谓的高内聚就是一个代码模块只完成一项功 能,在面向对象中,如果只让一个类完成它该做的事,而不涉及与它无关的领域就是践行了高内 聚的原则,这个类就只有单一职责。另一个是模块化,好的自行车是组装...原创 2019-08-15 23:56:16 · 255 阅读 · 0 评论 -
面向对象的"六原则一法则"
面向对象的"六原则一法则" 单一职责原则:一个类只做它该做的事情。(单一职责原则想表达的就是"高内聚",写 代码最终极的原则只有六个字"高内聚、低耦合",所谓的高内聚就是一个代码模块只完成一项功 能,在面向对象中,如果只让一个类完成它该做的事,而不涉及与它无关的领域就是践行了高内 聚的原则,这个类就只有单一职责。另一个是模块化,好的自行车是组装车,从减震叉、刹车到 变速器,所有的部件都是可以拆...原创 2019-08-15 23:58:37 · 107 阅读 · 0 评论 -
程序员面试题(七)
21、Overload 和 Override 的区别。Overloaded 的方法是否可以改变返回值的类 型? 考察点:JAVA 多态 参考回答: 方法的重写 Overriding 和重载 Overloading 是 Java 多态性的不同表现。重写 Overriding 是父类与子类之间多态性的一种表现,重载 Overloading 是一个类中多态性的一种表现。如果在子类中定义某方法与其父类有相...原创 2019-08-16 00:09:20 · 212 阅读 · 0 评论 -
程序员面试题总结(三) java与关键字
21、你能比较一下 Java 和 JavaSciprt 吗? 考察:Java&JavaScript 参考回答: JavaScript 与 Java 是两个公司开发的不同的两个产品。Java 是原 Sun Microsystems 公司 推出的面向对象的程序设计语言,特别适合于互联网应用程序开发;而 JavaScript 是 Netscape 公司的产品,为了扩展 Netscape 浏览器的...原创 2019-08-13 00:21:27 · 616 阅读 · 0 评论 -
红黑树-知识点总结
红黑树 1.红黑树(Red Black Tree) 是一种自平衡二叉查找树 2.红黑树和AVL树类似,都是在进行插入和删除操作时通过特定操作保持二叉查找树的平衡,从而获得较高的查找性能。 3.虽然是复杂的,但它的最坏情况运行时间也是非常良好的,并且在实践中是高效的: 它可以在O(log n)时间内做查找,插入和删除 4.性质: 性质1. 节点是红色或黑色。 性质2. 根节点是黑色。 性质3 每个红...原创 2019-09-01 01:12:15 · 223 阅读 · 0 评论