以下是小编精心整理的程序员面试宝典java,本文共8篇,供大家阅读参考。本文原稿由网友“real懒”提供。
篇1:程序员面试宝典java
map,set,list,等JAVA中集合解析(了解)
在JAVA的util包中有两个所有集合的父接口Collection和Map,它们的父子关系:
java.util
+Collection 这个接口extends自 --java.lang.Iterable接口
+List 接口
-ArrayList 类
-LinkedList 类
-Vector 类 此类是实现同步的
+Queue 接口
+不常用,在此不表.
+Set 接口
+SortedSet 接口
-TreeSet 类
-HashSet
+Map 接口
-HashMap 类 (除了不同步和允许使用 null 键/值之外,与 Hashtable 大致相同.)
-Hashtable 类 此类是实现同步的,不允许使用 null 键值
+SortedMap 接口
-TreeMap 类
以下对众多接口和类的简单说明:首先不能不先说一下数组(Array)
一、Array , Arrays
Java所有“存储及随机访问一连串对象”的做法,array是最有效率的一种。
1、
效率高,但容量固定且无法动态改变。
array还有一个缺点是,无法判断其中实际存有多少元素,length只是告诉我们array的容量。
2、Java中有一个Arrays类,专门用来操作array。
arrays中拥有一组static函数,
equals:比较两个array是否相等。array拥有相同元素个数,且所有对应元素两两相等。
fill():将值填入array中。
sort():用来对array进行排序。
binarySearch():在排好序的array中寻找元素。
System.arraycopy():array的复制。
二、Collection , Map
若撰写程序时不知道究竟需要多少对象,需要在空间不足时自动扩增容量,则需要使用容器类库,array不适用。
1、Collection 和 Map 的区别
容器内每个为之所存储的元素个数不同。
Collection类型者,每个位置只有一个元素。
Map类型者,持有 key-value pair,像个小型数据库。
2、Java2容器类类库的用途是“保存对象”,它分为两类,各自旗下的子类关系
Collection
--List:将以特定次序存储元素。所以取出来的顺序可能和放入顺序不同。
--ArrayList / LinkedList / Vector
--Set : 不能含有重复的元素
--HashSet /TreeSet
Map
--HashMap
--HashTable
--TreeMap
Map----一组成对的“键值对”对象,即其元素是成对的对象,最典型的应用就是数据字典,并且还有其它广泛的应用。另外,Map可以返回其所有键组成的Set和其所有值组成的Collection,或其键值对组成的Set,并且还可以像数组一样扩展多维Map,只要让Map中键值对的每个“值”是一个Map即可。
Collection下 1.迭代器
迭代器是一种设计模式,它是一个对象,它可以遍历并选择序列中的对象,而开发人员不需要了解该序列的底层结构。迭代器通常被称为“轻量级”对象,因为创建它的代价小。
Java中的Iterator功能比较简单,并且只能单向移动:
(1) 使用方法iterator()要求容器返回一个Iterator。第一次调用Iterator的next()方法时,它返回序列的第一个元素。注意:iterator()方法是java.lang.Iterable接口,被Collection继承。
(2) 使用next()获得序列中的下一个元素。
(3) 使用hasNext()检查序列中是否还有元素。
(4) 使用remove()将迭代器新返回的元素删除。
Iterator是Java迭代器最简单的实现,为List设计的ListIterator具有更多的功能,它可以从两个方向遍历List,也可以从List中插入和删除元素。
2.List的功能方法
List(interface): 次序是List最重要的特点;它确保维护元素特定的顺序。List为Collection添加了许多方法,使得能够向List中间插入与移除元素(只推荐LinkedList使用)。一个List可以生成ListIterator,使用它可以从两个方向遍历List,也可以从List中间插入和删除元素。
ArrayList: 由数组实现的List。它允许对元素进行快速随机访问,但是向List中间插入与移除元素的速度很慢。ListIterator只应该用来由后向前遍历ArrayList,而不是用来插入和删除元素,因为这比LinkedList开销要大很多。
LinkedList: 由列表实现的List。对顺序访问进行了优化,向List中间插入与删除得开销不大,随机访问则相对较慢(可用ArrayList代替)。它具有方法addFirst()、addLast()、getFirst()、getLast()、removeFirst()、removeLast(),这些方法(没有在任何接口或基类中定义过)使得LinkedList可以当作堆栈、队列和双向队列使用。
3.Set的功能方法
Set(interface): 存入Set的每个元素必须是唯一的,这也是与List不同的,因为Set不保存重复元素。加入Set的Object必须定义equals()方法以确保对象的唯一性。Set与Collection有完全一样的接口。Set接口不保证维护元素的次序。
HashSet: HashSet能快速定位一个元素,存入HashSet的对象必须定义hashCode()。
TreeSet: 保持次序的Set,底层为树结构。使用它可以从Set中提取有序的序列。
LinkedHashSet: 具有HashSet的查询速度,且内部使用链表维护元素的顺序(插入的次序)。于是在使用迭代器遍历Set时,结果会按元素插入的次序显示。
HashSet采用散列函数对元素进行排序,这是专门为快速查询而设计的;TreeSet采用红黑树的数据结构进行排序元素;LinkedHashSet内部使用散列以加快查询速度,同时使用链表维护元素的次序,使得看起来元素是以插入的顺序保存的。需要注意的是,生成自己的类时,Set需要维护元素的存储顺序,因此要实现Comparable接口并定义compareTo()方法。
3、其他特征
* List,Set,Map将持有对象一律视为Object型别。
* Collection、List、Set、Map都是接口,不能实例化。
继承自它们的 ArrayList, Vector, HashTable, HashMap是具象class,这些才可被实例化。
* vector容器确切知道它所持有的对象隶属什么型别。vector不进行边界检查。
三、Collections
Collections是针对集合类的一个帮助类。提供了一系列静态方法实现对各种集合的搜索、排序、线程完全化等操作。
相当于对Array进行类似操作的类Arrays。
如,Collections.max(Collection coll); 取coll中最大的元素。
Collections.sort(List list); 对list中元素排序
四、如何选择?
1、容器类和Array的区别、择取
* 容器类仅能持有对象引用(指向对象的指针),而不是将对象信息copy一份至数列某位置。
* 一旦将对象置入容器内,便损失了该对象的型别信息。
2、
* 在各种Lists中,最好的做法是以ArrayList作为缺省选择。当插入、删除频繁时,使用LinkedList();
Vector总是比ArrayList慢,所以要尽量避免使用。
* 在各种Sets中,HashSet通常优于HashTree(插入、查找)。只有当需要产生一个经过排序的序列,才用TreeSet。
HashTree存在的唯一理由:能够维护其内元素的排序状态。
* 在各种Maps中
HashMap用于快速查找。
* 当元素个数固定,用Array,因为Array效率是最高的。
结论:最常用的是ArrayList,HashSet,HashMap,Array。而且,我们也会发现一个规律,用TreeXXX都是排序的。
注意:
1、Collection没有get()方法来取得某个元素。只能通过iterator()遍历元素。
2、Set和Collection拥有一模一样的接口。
3、List,可以通过get()方法来一次取出一个元素。使用数字来选择一堆对象中的一个,get(0)...。(add/get)
4、一般使用ArrayList。用LinkedList构造堆栈stack、队列queue。
5、Map用 put(k,v) / get(k),还可以使用containsKey()/containsValue()来检查其中是否含有某个key/value。
HashMap会利用对象的hashCode来快速找到key。
* hashing
哈希码就是将对象的信息经过一些转变形成一个独一无二的int值,这个值存储在一个array中。
我们都知道所有存储结构中,array查找速度是最快的。所以,可以加速查找。
发生碰撞时,让array指向多个values。即,数组每个位置上又生成一个表。
6、Map中元素,可以将key序列、value序列单独抽取出来。
使用keySet()抽取key序列,将map中的所有keys生成一个Set。
使用values()抽取value序列,将map中的所有values生成一个Collection。
为什么一个生成Set,一个生成Collection?那是因为,key总是独一无二的,value允许重复。
===List接口对Collection进行了简单的扩充,它的具体实现类常用的有ArrayList和LinkedList。你可以将任何东西放到一个List容器中,并在需要时从中取出。ArrayList从其命名中可以看出它是一种类似数组的形式进行存储,因此它的随机访问速度极快,而LinkedList的内部实现是链表,它适合于在链表中间需要频繁进行插入和删除操作。在具体应用时可以根据需要自由选择。前面说的Iterator只能对容器进行向前遍历,而ListIterator则继承了Iterator的思想,并提供了对List进行双向遍历的方法。
Set接口也是Collection的一种扩展,而与List不同的时,在Set中的对象元素不能重复,也就是说你不能把同样的东西两次放入同一个Set容器中。它的常用具体实现有HashSet和TreeSet类。HashSet能快速定位一个元素,但是你放到HashSet中的对象需要实现hashCode()方法,它使用了前面说过的哈希码的算法。而TreeSet则将放入其中的元素按序存放,这就要求你放入其中的对象是可排序的,这就用到了集合框架提供的另外两个实用类Comparable和Comparator。一个类是可排序的,它就应该实现Comparable接口。有时多个类具有相同的排序算法,那就不需要在每分别重复定义相同的排序算法,只要实现Comparator接口即可。集合框架中还有两个很实用的公用类:Collections和Arrays。Collections提供了对一个Collection容器进行诸如排序、复制、查找和填充
[程序员面试宝典java]
篇2:java程序员面试宝典
有一种说法是面试时交流的过程其实就是一个和人打交道的过程。那么,想成为一个java程序员,在面试之前,想一下你所面对的人即HR,和他做一次心灵上的交流,对自己也会有心态上和能力上的提升。
java程序员面试宝典--把自己当作英语天才
面试题目全部为英文,而且涉及到的知识面极广,一般来说,只有重点大学中品学兼优的在校学生才能搞定,不过鄙人以为大多数这样的人都去读研了。这样的题目通常出现在注册资产在一亿以上的公司,他们要是成长性好的员工,这是无可厚非的事情。不过他们认为工作了一年以上的程序员也能轻松搞定,至少有部分人能搞。所以当你踌躇满志的去应聘之前,请看看你的实力如何(过六级或者四级680分以上,专业课平均分80以上者可以一试)。
java程序员面试宝典--把自己视为java语言的高手
现在网上流行的大公司面试题可能有些人已经看过了,我用java将近两年了,自认为资质不弱常人,但那样的题目拿到手之后的感觉就是憋气。很多地方只是有个模糊的概念,回答不完全,查阅资料之后方能答上。或许我的基础还有些薄弱,不过当我试着以试题上的题目与面试我的人“讨论”时发现,他知道的也就是这一题的答案而已。
java程序员面试宝典--把自己当作编译器
考试题目大都是一些读程序写结果,或者找错误之类的,不过很多都是编译特例,如果给你个IDE,你肯定是轻松搞定,但你没有那样的机会,回答不出来说明你实际操作经验不足(别人就那么认为的)。虽然这也的确是程序员应该掌握的东西,但是这样似乎有些以偏概全了。平时忙着做项目,有空的时候学习新技术,谁会有那种闲夫去研究java原来可以这样运行的。
java程序员面试宝典--一些经验的东西对面试很重要
一份十页的卷子,他只需要看一两分钟就ok了,然后过来和你谈。询问的主要是过去做过什么项目,当然你说的越多越好(不能太夸张)。这样的面试一般是经理或者老板出马,因为你回答的东西他们看不懂,所以就懒得看了。如果你做过项目,那么适当的,含蓄的夸张点你所做过的东西,态度要好,同时要求的工资不能太高,市场价就可以了。对于那些没有工作经验或者经验较少的人,我只能报以深切的同情。不过如果你基础好,糊弄这样的老板应该没有什么问题。
总结:建议读者面试时不能自吹自擂,也不能心虚胆怯,要实实在在,一是一,二是二,把自己的优势和劣势都陈述出来,让考官定夺。当然,要多说优势少说劣势,但绝不能只说优势不说劣势,有人就是因为每次面试都主动述说一两条自己的劣势赢得考官的好感而面试成功的。
篇3:程序员面试宝典 java
1、 什么是Java集合API
Java集合框架API是用来表示和操作集合的统一框架,它包含接口、实现类、以及帮助程序员完成一些编程的算法。简言之,API在上层完成以下几件事:
● 编程更加省力,提高城程序速度和代码质量
● 非关联的API提高互操作性
● 节省学习使用新API成本
● 节省设计新API的时间
● 鼓励、促进软件重用
具体来说,有6个集合接口,最基本的是Collection接口,由三个接口Set、List、SortedSet继承,另外两个接口是Map、SortedMap,这两个接口不继承Collection,表示映射而不是真正的集合。
2、 什么是Iterator
一些集合类提供了内容遍历的功能,通过java.util.Iterator接口。这些接口允许遍历对象的集合。依次操作每个元素对象。当使用Iterators时,在获得Iterator的时候包含一个集合快照。通常在遍历一个Iterator的时候不建议修改集合本省。
3、 Iterator与ListIterator有什么区别?
Iterator:只能正向遍历集合,适用于获取移除元素。ListIerator:继承Iterator,可以双向列表的遍历,同样支持元素的修改。
4、 什么是HaspMap和Map?
Map是接口,Java 集合框架中一部分,用于存储键值对,HashMap是用哈希算法实现Map的类。
5、 HashMap与HashTable有什么区别?对比Hashtable VS HashMap
两者都是用key-value方式获取数据。Hashtable是原始集合类之一(也称作遗留类)。HashMap作为新集合框架的一部分在Java2的1.2版本中加入。它们之间有一下区别:
● HashMap和Hashtable大致是等同的,除了非同步和空值(HashMap允许null值作为key和value,而Hashtable不可以)。
● HashMap没法保证映射的顺序一直不变,但是作为HashMap的子类LinkedHashMap,如果想要预知的顺序迭代(默认按照插入顺序),你可以很轻易的置换为HashMap,如果使用Hashtable就没那么容易了。
● HashMap不是同步的,而Hashtable是同步的。
● 迭代HashMap采用快速失败机制,而Hashtable不是,所以这是设计的考虑点。
6、 在Hashtable上下文中同步是什么意思?
同步意味着在一个时间点只能有一个线程可以修改哈希表,任何线程在执行hashtable的更新操作前需要获取对象锁,其他线程等待锁的释放。
7、 什么叫做快速失败特性
从高级别层次来说快速失败是一个系统或软件对于其故障做出的响应。一个快速失败系统设计用来即时报告可能会导致失败的任何故障情况,它通常用来停止正常的操作而不是尝试继续做可能有缺陷的工作。当有问题发生时,快速失败系统即时可见地发错错误告警。在Java中,快速失败与iterators有关。如果一个iterator在集合对象上创建了,其它线程欲“结构化”的修改该集合对象,并发修改异常 (ConcurrentModificationException) 抛出。
8、 怎样使Hashmap同步?
HashMap可以通过Map m = Collections.synchronizedMap(hashMap)来达到同步的效果。
9、 什么时候使用Hashtable,什么时候使用HashMap
基本的不同点是Hashtable同步HashMap不是的,所以无论什么时候有多个线程访问相同实例的可能时,就应该使用Hashtable,反之使用HashMap。非线程安全的数据结构能带来更好的性能。
如果在将来有一种可能―你需要按顺序获得键值对的方案时,HashMap是一个很好的选择,因为有HashMap的一个子类LinkedHashMap。所以如果你想可预测的按顺序迭代(默认按插入的顺序),你可以很方便用LinkedHashMap替换HashMap。反观要是使用的Hashtable就没那么简单了。同时如果有多个线程访问HashMap,Collections.synchronizedMap可以代替,总的来说HashMap更灵活。
10、为什么Vector类认为是废弃的或者是非官方地不推荐使用?或者说为什么我们应该一直使用ArrayList而不是Vector
你应该使用ArrayList而不是Vector是因为默认情况下你是非同步访问的,Vector同步了每个方法,你几乎从不要那样做,通常有想要同步的是整个操作序列。同步单个的操作也不安全(如果你迭代一个Vector,你还是要加锁,以避免其它线程在同一时刻改变集合).而且效率更慢。当然同样有锁的开销即使你不需要,这是个很糟糕的方法在默认情况下同步访问。你可以一直使用Collections.sychronizedList来装饰一个集合。
事实上Vector结合了“可变数组”的集合和同步每个操作的实现。这是另外一个设计上的缺陷。Vector还有些遗留的方法在枚举和元素获取的方法,这些方法不同于List接口,如果这些方法在代码中程序员更趋向于想用它。尽管枚举速度更快,但是他们不能检查如果集合在迭代的时候修改了,这样将导致问题。尽管以上诸多原因,oracle也从没宣称过要废弃Vector.
[程序员面试宝典 java]
篇4:java面试宝典
*** JAVA面试题. ***
1、作用域public,private,protected,以及不写时的区别 答:区别如下:
作用域 当前类 同一package 子孙类 其他 package public √ √ √ √ protected √ √ √ × friendly √ √ × × private √ × × ×
不写时默认为friendly2、 Anonymous Inner Class (匿名内部类) 是否可以extends(继承)其它类,
是否可以implements(实现)interface(接口)
答:匿名的内部类是没有名字的内部类。不能extends(继承) 其它类,但一个内部类可以作
为一个接口,由另一个内部类 实现
3、Static Nested Class 和 Inner Class的不同 答:Nested Class (一般是C++的说法),Inner Class (一般是JAVA的说法)。Java内部类与C++
嵌套类最大的不同就在于
是否有指向外部的引用上。注: 静态内部类(Inner Class)意味着1创建一个static内部类
的对象,不需要一个外部类对
象,2 不能从一个static内部类的一个对象访问一个外部类对象 4、&和&&的区别
答:&是位运算符,表示按位与运算,&&是逻辑运算符,表示逻辑与(and) 5、Collection 和 Collections的区别
答:Collection是集合类的上级接口,继承与他的接口主要有 Set 和List. Collections是针对集合类的一个帮助类,他提供一系列静态方法实现对各种集合的搜索、排
序、线程安全化等操作 6、什么时候用assert
答: assertion(断言)在软件开发中是一种常用的调试方式,很多开发语言中都支持这种机制。
在实现中,assertion就是
在程序中的一条语句,它对一个 boolean 表达式进行检查,一个正确程序必须保证这个
boolean表达式的值为 true;如果该
值为false,说明程序已经处于不正确的状态下,系统将给出警告或退出。一般来说, assertion
用于保证程序最基本、关
键的正确性。assertion 检查通常在开发和测试时开启。为了提高性能,在软件发布后,
assertion检查通常是关闭的
7、String s = new String(“xyz”);创建了几个String Object
答:两个,一个字符对象,一个字符对象引用对象
8、Math.round(11.5)等於多少? Math.round(-11.5)等於多少
答: Math.round(11.5)==12;Math.round(-11.5)==-11;round方法返回与参数最接近的长整数,参
数加1/2 后求其floor9、short s1 = 1; s1 = s1 + 1;有什么错? short s1 = 1; s1 += 1;有什么错 答:short s1 = 1; s1 = s1 + 1; (s1+1运算结果是int型,需要强制转换类型)short s1 = 1; s1 += 1;(可以正确编 译)
10、Java有没有goto
答:java中的保留字,现在没有在java中使用 11、数组有没有length()这个方法? String有没有length()这个方法
答:数组没有length()这个方法,有 length的属性。String有有 length()这个方法
12、Overload和Override的区别。Overloaded 的方法是否可以改变返回值的类型
答:方法的重写 Overriding 和重载 Overloading 是 Java 多态性的不同表现。重写 Overriding
是父类与子类之间多态性的一种
表现,重载 Overloading 是一个类中多态性的一种表现。如果在子类中定义某方法与其父类
有相同的名称和参数,我们说该
方法被重写 (Overriding)。子类的对象使用这个方法时,将调用子类中的定义,对它而言,
父类中的定义如同被“屏蔽”
了。如果在一个类中定义了多个同名的方法,它们或有不同的参数个数或有不同的参数类型, 则称为方法的重载
(Overloading)。Overloaded的方法是可以改变返回值的类型
13、Set 里的元素是不能重复的,那么用什么方法来区分重复与否呢? 是用==还是 equals()? 它们有何区别
答:Set里的元素是不能重复的,那么用iterator()方法来区分重复与否。equals()是判读两个 Set是否相等
equals()和==方法决定引用值是否指向同一对象 equals()在类中被覆盖,为的是当两个分离的对象的内容和类型相配 的话,返回真值
14、给我一个你最常见到的 runtime exception
答 : 常 见 的 运 行 时 异 常 有 如 下 这 些 ArithmeticException, ArrayStoreException,BufferOverflowException,
BufferUnderflowException, CannotRedoException, CannotUndoException, ClassCastException, CMMException,
ConcurrentModificationException, DOMException, EmptyStackException, IllegalArgumentException,
IllegalMonitorStateException, IllegalPathStateException, IllegalStateException, ImagingOpException, IndexOutOfBoundsException, MissingResourceException, NegativeArraySizeException, NoSuchElementException, NullPointerException, ProfileDataException, ProviderException, RasterFormatException, SecurityException,
SystemException, UndeclaredThrowableException, UnmodifiableSetException, UnsupportedOperationException15、error和exception有什么区别
答:error 表示恢复不是不可能但很困难的情况下的一种严重问题。比如说内存溢出。不可
能指望程序能处理这样的情况
exception 表示一种设计或实现问题。也就是说,它表示如果程序运行正常,从不会发生的 情况
16、List, Set, Map是否继承自 Collection接口 答: List,Set是,Map不是
17、abstract class和interface 有什么区别
答:声明方法的存在而不去实现它的类被叫做抽象类(abstract class),它用于要创建一个体现某些基本行为的类,并
为该类声明方法,但不能在该类中实现该类的情况。不能创建abstract 类的实例。然而可以创建一个变量,其类型是一个
抽象类,并让它指向具体子类的一个实例。不能有抽象构造函数或抽象静态方法。 Abstract 类的子类为它们父类中的所有
抽象方法提供实现,否则它们也是抽象类为。取而代之,在子类中实现该方法。知道其行为的其它类可以在类中实现这些方法接口(interface)是抽象类的变体。在接口中,所有方法都是抽象的。多继承性可通过实现这样的接口而获得。接口中的所有方法都是抽象的,没有一个有程序体。接口只可以定义 static final成员变量。接口的实现与子类相似,除了该实现类不能从接口定义中继承行为。当类实现特殊接口时,它定义(即将程序体给予)所有这种接口的方法。然后,它可以在实现了该接口的类的任何对象上调用接口的方法。由于有抽象类,它允许使用接口名作为引用变量的类型。通常的动态联编将生效。引用可以转换到接口类型或从接口类型转换,instanceof 运算符可以用来决定某对象的类是否实现了接口
18、 abstract的method 是否可同时是static,是否可同时是 native,是否可同时是synchronized
答:都不能
---------- 1 ----------
*** JAVA面试题.txt ***
19、接口是否可继承接口? 抽象类是否可实现(implements)接口? 抽象类是否可继承实体类 (concrete class)
答:接口可以继承接口。抽象类可以实现(implements)接口,抽象类是否可继承实体类,但前提是实体类必须有明确的构 造函数
20、构造器Constructor 是否可被override
答:构造器Constructor 不能被继承,因此不能重写Overriding,但可以被重载Overloading21、是否可以继承String类
答:String类是final类故不可以继承
22、try {}里有一个return语句,那么紧跟在这个try后的 finally {}里的 code会不会被执行,什么时候被执行,在return 前还是后
答:会执行,在return前执行
23、用最有效率的方法算出 2乘以8等於几 答:2 << 324、两个对象值相同(x.equals(y) == true),但却可有不同的 hash code,这句话对不 对
答:不对,有相同的hash code25、当一个对象被当作参数传递到一个方法后,此方法可改
变这个对象的属性,并可返回变化后的结果,那么这里到底是 值传递还是引用传递
答:是值传递。Java 编程语言只有值传递参数。当一个对象实例作为一个参数被传递到方
法中时,参数的值就是对该对象
的引用。对象的内容可以在被调用的方法中改变,但对象的引用是永远不会改变的
26、swtich是否能作用在byte 上,是否能作用在long上,是否能作用在String上 答:witch(expr1)中,expr1 是一个整数表达式。因此传递给 switch 和 case 语句的参数
应该是 int、 short、 char
或者 byte。long,string 都不能作用于 swtich27、ArrayList 和 Vector 的区别,HashMap 和 Hashtable的区别
答:就ArrayList与Vector主要从二方面来说.
一.同步性:Vector 是线程安全的,也就是说是同步的,而 ArrayList 是线程序不安全的,不是 同步的
二.数据增长:当需要增长时,Vector默认增长为原来一培,而 ArrayList却是原来的一半
就HashMap与 HashTable主要从三方面来说。
一.历史原因:Hashtable 是基于陈旧的Dictionary 类的,HashMap是Java 1.2引进的 Map接口 的一个实现
二.同步性:Hashtable 是线程安全的,也就是说是同步的,而 HashMap 是线程序不安全的, 不是同步的
三.值:只有HashMap可以让你将空值作为一个表的条目的key或value
28、char 型变量中能不能存贮一个中文汉字?为什么?
答:是能够定义成为一个中文的,因为 java中以 unicode 编码,一个char 占16 个字节,所
以放一个中文是没问题的
29、GC是什么? 为什么要有 GC
答:GC是垃圾收集的意思(Gabage Collection),内存处理是编程人员容易出现问题的地方,
忘记或者错误的内存回收会
导致程序或系统的不稳定甚至崩溃,Java提供的GC功能可以自动监测对象是否超过作用域
从而达到自动回收内存的目的,
[java面试宝典]
篇5:java面试宝典
java面试宝典
String和StringBuffer的区别
JAVA平台提供了两个类:String和StringBuffer,它们可以储存和操作字符串,即包含多个字符的字符数据,这个String类提供了数值不可改变的字符串。而这个StringBuffer类提供的字符串进行修改。当你知道字符数据要改变的时候你就可以使用StringBuffer。典型地,你可以使用StringBuffers来动态构造字符数据。另外,String实现了equals方法,new String(“abc”).equals(newString(“abc”)的结果为true,而StringBuffer没有实现equals方法,所以,new StringBuffer(“abc”).equals(newStringBuffer(“abc”)的'结果为false。
数组有没有length这个方法? String有没有length()这个方法?
数组没有length()这个方法,有length的属性,
String有有length()这个方法。
final, finally, finalize的区别。
final 用于声明属性,方法和类,分别表示属性不可变,方法不可覆盖,类不可继承。 内部类要访问局部变量,局部变量必须定义成final类型,例如,一段代码……
finally是异常处理语句结构的一部分,表示总是执行。
finalize是Object类的一个方法,在垃圾收集器执行的时候会调用被回收对象的此方法,可以覆盖此方法提供垃圾收集时的其他资源回收,例如关闭文件等。JVM不保证此方法总被调用。
error和exception有什么区别?
error 表示恢复不是不可能但很困难的情况下的一种严重问题。比如说内存溢出。不可能指望程序能处理这样的情况。 exception表示一种设计或实现问题。也就是说,
篇6:程序员面试宝典
程序员面试宝典
对于即将成为程序员的应届生,首先需要考虑的是如何选择一个适合自己职业起步的公司,以及根据自己感兴趣的技术确立自己将来的职业方向,对于已经身为程序员的跳槽人员,则需要考虑继续走技术方向还是转型到管理、销售等方面。在求职面试过程中需要什么流程以及需要注意什么细节?
针对初级C/C++工程师职位
所谓的初级C/C++工程师,也就是刚刚踏入C/C++开发领域的初学者,或者说是有过很短经历的C/C++开发者。针对这个职位,下面将会介绍这个职位所需要掌握的知识体系。
面向对象的知识: C++是一个面向对象的开发语言,因此熟悉面向对象对学习C++很有必要。读者要了解:什么是对象、什么是类、什么是封装、什么是多态、什么是继承、什么是抽象类、什么是接口等。读者不但要了解概念,还需要知道这些概念是如何体现的。例如,类和对象有什么区别?类是如何封装的?
C/C++语法:如果读者已经有了开发经验,那对于学习C/C++语法来讲比较容易,
如果你有C++等面向对象语言的'开发经验,那么只需简单的翻看介绍C/C++的相关书籍。如果你是新手,那么就好好研究一本有关C/C++初级教程之类的书。学习了C/C++语法,加上面向对象的知识,相信读者可以写出来比较好的C/C++代码。如果再抽出时间熟悉一下C/C++编程规范,那么代码的水平就会比较正规了。
数据库知识:作为一名初级C++开发工程师,必须要清楚如何使用数据库进行一些简单的开发工作,这是一些应用软件开发的基础。
开发工具:读者都知道,开发工具可以帮助更好更快地开发,因此熟悉几种开发工具很有必要。目前C/C++的开发工具比较流行的有Turbo C和Visual C++ 6.0等。
掌握了以上的知识,另外再加上少许的开发经验,就可以称得上是一名基本合格的初级C/C++开发工程师。所有招聘公司对于初级程序员的要求并不高,但基础知识一定要扎实,如果你连开发工具都不会使用,那如何能迅速提高学习水平呢?
针对中、高级C/C++开发工程师职位
所谓的中、高级C/C++开发工程师,也就是有了几年的开发经验和实战经验的开发人员。针对这个职位,
篇7:程序员面试宝典
作 者:欧立奇,刘洋,段韬编
出 版 社:电子工业出版社 时 间:-11-1
原 价:39.80元
当当网最低价格:29.90元
卓越网最低价格:元
去当当网免费阅读,购买本书
程序员面试宝典(第二版) 欧立奇,刘洋,段韬编内容简介:
本书是《程序员面试宝典》的第二版,在保留第一版的数据结构、面向对象、程序设计等主干的基础上,使用各大IT公司及相关企业-的最新面试题替换和补充原内容,以反映自第一版以来近2年的时间所发生的变化。
本书取材于各大公司面试真题(笔试、口试、电话面试、英语面试,以及逻辑测试和智商测试),详细分析了应聘程序员(含网络、测试等)职位的常见考点。本书不仅对传统的C系语言考点做了详尽解说,还根据外企出题最新特点,新增加了对友元、Static、图形/音频、树、栈、ERP等问题的深入讲解。最后本书着力讲述了如何进行英语面试和电话面试,并对求职中签约、毁约的注意事项及群体面试进行了解析。本书的面试题除了有详细解析和回答外,对相关知识点还有扩展说明。希望真正做到由点成线,举一反三,对读者从求职就业到提升计算机专业知识都有显著帮助。
本书适合计算机相关专业应届毕业生阅读,也适合作为正在应聘软件行业的相关就业人员和计算机爱好者的参考书。
当当网用户妮妮90:
感觉书的质量不是很好,小的印刷错误也不少不过书的内容还是不错的
当当网用户玛莉梦菲:
不知道是配送问题,还是别的,新书上都有扎的洞了,质量太不行了
当当网用户落英缓缓:
不过这本书定位挺高的,面试题很丰富!
这篇文章希望能解决程序员面试宝典(第二版)写得好不好,读者读后感怎么样,网上哪里有卖,最低价格是多少钱,网上免费阅读地址,值不值得买等问题。
[程序员面试宝典]
篇8:如何面试java程序员
如何面试java程序员
JAVA面试经典问题:Java程序的基本结构
Java语言区分大小写吗?
区分,不管是数据还是标识符或者关键字都区分大小写,例如public不能写成Public, “abc”不能写成”ABC”,int i不能写成INT I等等,
main方法是作什么用处的?
这是程序的入口方法,是由虚拟机自动调用的。
语句必须用分号结束吗?
必须的,但是代码块{}可以用分号结束,也可以不用分号结束
Java中有几种注释,各自的功能
有三种:
单行注释//:加在行首只能注释一行
多行注释/* */:注释多行,但不能嵌套使用
文档注释/** */:用于生成HTML形式的文档,需要配合javadoc命令实现
Java语言的数据类型是强类型还是弱类型?
是强类型,意味着每一个变量都必须明确声明数据类型。
Java语言中数据类型的划分?有什么区别?
分成基本类型和引用类型两大类,
基本类型:有8种,只能存储单一的值,不以对象的形式存在
引用类型:除了基本类型之外其他的都是引用类型,能够存储复杂数据类型,以对象的'形式存在
基本类型都有哪8种类型?
布尔类型:boolean 占1字节
字符类型:char 占2字节
整型:byte 占1字节 short 占2字节 int 占4字节 long 占8字节
浮点型:float 占4字节 double 占8字节
布尔值可不可以用0或者非0数代替?
不可以,布尔值只能是true和false,不能使用数字,这和C语言是不一样的。
直接写个整数10默认是什么类型的?
整型的直接量例如10,100等默认的数据类型都是int型
如何让一个整型的直接量变成long型的?
在直接量后面加大写L后者小写l,例如10L
整型数据在程序中直接使用可以使用什么进制?
10进制
,8进制
,16进制
,但不能使用二进制
浮点运算在Java中有没有误差?
有误差,所以精密运算请使用BigDecimal类
直接写一个3.14的直接量是什么数据类型的?
- 面试宝典 程序员面试题精选100题2025-09-03
- java程序员离职申请书2023-01-17
- java程序员就业感言2023-04-12
- java程序员转正申请书2024-02-02
- 外企面试宝典2023-08-10
- java程序员实习目的及体会2022-12-27
- JAVA初中级程序员笔试试题2025-06-11
- 播音员面试自我介绍宝典2022-12-11
- 应届生java面试自我介绍的2022-12-19
- java面试问题及答案2023-03-06