zoukankan      html  css  js  c++  java
  • 1.java面试题(一)

    1.private修饰的方法可以通过反射访问,那么private的意义是什么
    答:(1)java的private修饰符并不是为了绝对安全性设计的,更多的是对用户常规使用java的一种约束;
    (2)从外部对对象进行常规调用时,能够看到清晰的类结构。
     
    2.Java类初始化顺序
    答:基类静态代码块->基类静态成员字段(并列优先级,按照代码中出现的先后顺序执行,且只有第一次加载时执行)->派生类静态代码块->派生类静态成员字段(并列优先级,按照代码中出现的先后顺序执行,且只有第一次加载时执行)->基类普通代码块->基类普通成员字段(并列优点级,按代码中出现先后顺序执行)->基类构造方法->派生类普通代码块->派生类普通成员字段(并列优点级,按代码中出现先后顺序执行)->派生类构造方法。
    
    
    3.对方法区和永久区的理解以及它们之间的关系
    答:方法区是jvm规范里要求的,永久区是Hotspot虚拟机对方法区的具体实现,前者是规范,后者是实现方式。
    4.一个java文件有3个类,编译后有几个class文件
    答:文件中有几个类编译后就有几个class文件。
     
    5.ReadWriteLock读写之间互斥吗
    答:ReadWriteRock读写锁,使用场景可分为读/读、读/写、写/写,除了读和读之间是共享的,其它都是互斥的。
     
    6.写一个你认为最好的单例模式
    答:双检锁的:
     public class Singleton {
        //定义一个私有的实例
        private volatile static Singleton instance;
        //构造方法私有化
        private Singleton() {
        }
        //定义一个公共的方法获取私有的实例
        public static Singleton getInstance(){
            if(null==instance){
                synchronized (Singleton.class){
                    if(null==instance){
                        instance = new Singleton();
                    }
                }
            }
            return instance;
        }    
    }
    
    7.写一个生产者消费者模式
    答:生产者消费者模式,synchronized锁住一个LinkedList,一个生产者,只要队列不满,生产后往里放,一个消费者只要队列不空,向外取,两者通过wait()和notify()进行协调。
    8.写一个死锁
    答:定义两个ArrayList,将他们都加上锁A,B,线程1,2,1拿住了锁A,请求锁B,2拿住了锁B请求锁A,在等待对方释放锁的过程中谁也不让出已获得的锁。
     
    9.String a = "ab"; String b = "a" + "b"; a == b 是否相等,为什么。
    答:相等。
    10.int a = 1; 是原子性操作吗
     答:int a = 1; 是原子性操作
    11.可以用for循环直接删除ArrayList的特定元素吗?可能会出现什么问题?怎样解决
    答:for循环直接删除ArrayList中的特定元素是错的,不同的for循环会发生不同的错误,泛型for会抛出ConcurrentModificationException,普通的for想要删除集合中重复且连续的元素,只能删除第一个。
    解决方案:用 Iterator。
    12.新的任务提交到线程池,线程池是怎样处理
    答:第一步:线程池判断核心线程池里的线程是否都在执行任务。如果不是,则创建一个新的工作线程来执行任务。如果核心线程池里的线程都在执行任务,则执行第二步。
    第二步 :线程池判断工作队列是否已经满。如果工作队列没有满,则将新提交的任务存储在这个工作队列里进行等待。如果工作队列满了,则执行第三步。
    第三步 :线程池判断线程池的线程是否都处于工作状态。如果没有,则创建一个新的工作线程来执行任务。如果已经满了,则交给饱和策略来处理这个任务。

    13.dispatchServlet怎样分发任务的
    答:(1)客户端发送请求到前端控制器dispatchServlet;
    (2)dispatchServlet查询一个或多个处理器映射器(handlerMapping),找到处理请求的controller
    (3)dispatchServlet发送请求到controller,controller调用业务逻辑层处理后,返回modeAndView。
    (4)dispatchServlet找到一个或者多个视图解析器(viewResolver),找到modeAndView对指定的视图
    (5)视图负责将结果显示到客户端。

    14.mysql给离散度低的字段建立索引会出现什么问题,具体说下原因
    答:重复性较强的字段,不适合添加索引。mysql给离散度低的字段,比如性别设置索引,再以性别作为条件进行查询反而会更慢。

  • 相关阅读:
    模块之datetime
    模块之time模块
    模块之相对路径导入
    模块之包跨模块导入
    模块
    迭代器
    leetcode234 回文链表(Easy,不简单)
    leetcode543 二叉树的直径(Easy 不简单)
    leetcode538 把二叉树转换为累加树(Easy,不简单)
    leetcode136 只出现一次的数字(Easy)
  • 原文地址:https://www.cnblogs.com/liqinzhen/p/12897661.html
Copyright © 2011-2022 走看看