java多线程、集合和IO面试题_02
java多线程、集合和IO面试题_02
============================================================================= 逻辑思考题: 1:你有一桶果冻,其中有黄色、绿色、红色三种,闭上眼睛抓取同种颜色的两个。抓取多少个就可以确定你肯定有两个同一颜色的果冻? 4个 ----------------------------------------------------------------------------- 2:如果你有无穷多的水,一个3公升的提捅,一个5公升的提捅,两只提捅形状上下都不均匀,问你如何才能准确称出4公升的水? 5-3+5-3 3+3+3-5 ----------------------------------------------------------------------------- 3:有8个颜色,大小一样的小球,其中的一个质量和比其他的重,给你一个天平,你最少几次就可以称出那个重的球。(不要想着自己用手拿) 2次 先分成三份3个、3个、2个, 称3个、3个, 若重的在其中一份,再分成三份1个、1个、1个; 称1个、1个,若重的在其中一份,就称出了。 若重的不在其中,那剩余的1个就是重的。 若称的3个相等,说明在2个里面。 思想:更多可能的利用推理。 ============================================================================= 面试题: 1:请介绍一下自己(2-3分钟) 姓名、家乡。 经验(项目经验)和能力(自学能力)。 态度:对编程有兴趣 兴趣爱好:可提可不提 ----------------------------------------------------------------------------- 2:你有男/女朋友吗?你结婚了吗? 稳定性 精力,加班,出差。 你家庭和睦吗? ----------------------------------------------------------------------------- 3:你有什么要问的吗? 对公司一定要有了解。(太偏僻的公司女同学就不要去了) 公司的前景、业务方向。 谈钱不伤感情。(心里有个底线6000,开口7000) ============================================================================= 面试题: 多线程: 1:多线程有几种实现方法,都是什么?同步有几种实现方法,都是什么? 两种。 继承Thread类 实现Runnable接口 两种。 同步代码块 同步方法(静态同步方法) ----------------------------------------------------------------------------- 2:启动一个线程是用run()还是start()? start(); run():封装了被线程执行的代码,直接调用仅仅是普通方法的调用。 start():启动线程,并由JVM自动调用run()方法。 ----------------------------------------------------------------------------- 3:sleep() 和 wait() 有什么区别? sleep():必须指定时间,不释放锁。 是Thread类中的一个方法,用于线程休眠,休眠时间结束后,该线程可以自动唤醒。 wait():可以不指定时间,也可以指定时间,并立即释放锁。 是Object类中的一个方法,用于线程等待,如果想要唤醒,必须使用notify()或notifyAll()(不能自动唤醒)。 ----------------------------------------------------------------------------- 4:线程的基本概念及线程的生命周期 线程:是进程(程序)的执行单元,执行路径。 新建-->就绪-->运行-->死亡 新建-->就绪-->运行-->阻塞-->就绪-->运行-->死亡 ----------------------------------------------------------------------------- 集合: 1: HashMap和Hashtable的区别。 历史原因:Hashtable是基于陈旧的Dictionary类的,HashMap是Java1.2引进的Map接口的一个实现。 同步性:Hashtable是线程安全的,也就是说是同步的;而HashMap是线程序不安全的,不是同步的。 值:只有HashMap可以让你将空值作为一个表的条目的key或value。
HashMap类和Hashtable类的区别(注意:Hashtable的第二个单词是小写,继承了老版本jdk1.0的命名错误,如同System类下的静态方法Arraycopy()一样) HashMap类:不同步,线程不安全,效率高。允许null键和null值。 Hashtable类:同步,线程安全,效率低。不允许null键和null值。 其实HashMap类就是用来替代Hashtable类的。如同ArrayList类用来替代Vector类一样。 Hashtable是线程安全的,而且名字没有按照驼峰格式命名。Hashtable虽然是线程安全的,但是效率比较低。 HashMap是非线程安全的,在多线程修改的时候,会出现异常或者是死循环。 补充掌握的知识点 java.util.concurrent.ConcurrentHashMap<K,V> ConcurrentHashMap类的特点:Hashtable的线程安全 + HashMap的高性能 只针对需要修改的数据进行加锁(Hashtable线程安全的体现) 对其它不需要修改的数据不添加锁,可以直接获取(HashMap高性能的体现) 举例理解: 游乐场某一项项目需要维护,这个时候只针对需要维护的这个项目加锁, 而其它无需维护的项目仍然对外开放(即不加锁),而不是一个项目需要维护就必须关掉整个游乐场。
----------------------------------------------------------------------------- 2:ArrayList和Vector的区别。 同步性:Vector是线程安全的,也就是说是同步的;而ArrayList是线程序不安全的,不是同步的。 数据增长:当需要增长时,Vector默认增长为原来一培,而ArrayList却是原来的一半。 ----------------------------------------------------------------------------- 3:Collection和Collections的区别。 Collections是个java.util下的类,它包含有各种有关集合操作的静态方法。 Collection是个java.util下的接口,它是各种集合结构的父接口,有两个子接口List和Set。 ----------------------------------------------------------------------------- 4:List、Set、Map是否继承自Collection接口? List、Set不是继承自Map接口,它们继承自Collection接口。 Map接口本身就是一个顶层接口。 ----------------------------------------------------------------------------- 5:说出ArrayList、Vector、LinkedList的存储性能和特性? ArrayList 底层数据结构是数组,查询快,增删慢。 线程不安全,效率高。 Vector 底层数据结构是数组,查询快,增删慢。 线程安全,效率低。 LinkedList 底层数据结构是链表,查询慢,增删快。 线程不安全,效率高。 ----------------------------------------------------------------------------- 6:你所知道的集合类都有哪些?主要方法? ArrayList,LinkedList,HashSet,HashMap Collection(接口): add() remove() contains() iterator() size() 遍历: 增强for 迭代器 |--List get() 遍历: 普通for |--Set --------------------------------------- Map(接口): put() remove() containskey(),containsValue() keySet() value() get() entrySet() size() 遍历: 根据键找值。 根据键值对对象分别找键和值。 ----------------------------------------------------------------------------- IO: 1: java中有几种类型的流?JDK为每种类型的流提供了一些抽象类以供继承,请说出他们分别是哪些类? 字节流,字符流。 字节流继承于InputStream、OutputStream, 字符流继承于Reader、Writer。 在java.io包中还有许多其他的流,主要是为了提高性能和使用方便。 ----------------------------------------------------------------------------- 2:什么是java序列化,如何实现java序列化? 可以把对象写入文本文件或者在网络中传输。 如何实现序列化呢? 让被序列化的对象所属的类实现序列化接口。 该接口是一个标记接口。没有方法需要实现。 =============================================================================
Copyright ©2018-2019
【转载文章务必保留出处和署名,谢谢!】
【转载文章务必保留出处和署名,谢谢!】