zoukankan      html  css  js  c++  java
  • 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序列化?
        
        可以把对象写入文本文件或者在网络中传输。
        
        如何实现序列化呢?
            让被序列化的对象所属的类实现序列化接口。
            该接口是一个标记接口。没有方法需要实现。
    =============================================================================
  • 相关阅读:
    Repeater嵌套绑定Repeater
    第一章 JavaScript概述
    一、mono for android学习:什么是mono for android(使用C#开发android)
    二、mono for Android学习:安装IDE 以及 可能遇到问题
    第三章 JavaScript 数据类型和值
    计算机是如何启动的?
    TSQL连接查询,基础连接理解
    三、mono for android 学习:参考书籍
    第二章 JavaScript 词法结构
    四、mono for android学习:在monodevelop与Visual Studio上的示例
  • 原文地址:https://www.cnblogs.com/chenmingjun/p/8745646.html
Copyright © 2011-2022 走看看