zoukankan      html  css  js  c++  java
  • 面试题

    1,什么是线程安全 (参考书:https://book.douban.com/subject/10484692/)
    不对共享变量进行修改
    2,都说String是不可变的,为什么我可以这样做呢
       String a = "1";
       a = "2";
       a只是一个引用 当a=2时候 a指向a=2 此时 a=1照样在内存中并没有改变。
    3,HashMap的实现原理
       jdk1.7   数组+链表
       jdk1.8   数据+链表+红黑树
    4,写出三种单例模式,如果能考虑线程安全最好
       /**
     * 描述:单利模式
     *
     * @author 
     * @create 2018-05-02 15:18
     */
    public class Singleton {


        /**
         * 懒汉模式
         */
       private static final Singleton singleton = new Singleton();
        public static Singleton getInstance() {
            return singleton;
        }


        /**
         * 双重校验
         */
        private  static volatile    Singleton  singleton1 ;
        public static  Singleton getInstance1(){
            if (null == singleton1) {
                synchronized (Singleton.class) {
                    if (null == singleton1) {
                        return new Singleton();
                    }
                }
            }
            return singleton1;
        }


        /**
         * 静态内部类
         */
        private static class LazyHolder {
            private static final Singleton INSTANCE = new Singleton();
        }
        public static final Singleton getInstance2() {
            return LazyHolder.INSTANCE;
        }
    5,ArrayList和LinkedList有什么区别
    ArrayList的实现用的是数组,LinkedList是基于链表,ArrayList适合查找,LinkedList适合增删
    6,实现线程的2种方式
    1、继承Thread类创建线程 2、实现Runnable接口创建线程
    7,JVM的内存结构
    JVM内存结构主要有三大块:堆内存、方法区和栈。堆内存是JVM中最大的一块由年轻代和老年代组成,而年轻代内存又被分成三部分,Eden空间、From Survivor空间、To Survivor空间,默认情况下年轻代按照8:1:1的比例来分配;
    8,Lock与Synchronized的区别
    Synchronized Java的关键字,在jvm层面上实现通过对象头的监入监出 ,锁的释放是以获取锁的线程执行完同步代码,释放锁 线程执行发生异常,jvm会让线程释放锁假设A线程获得锁,B线程等待。如果A线程阻塞,B线程会一直等待,无法获取锁的状态
    可重入 不可中断 非公平
    Lock 是一个类 在finally中必须释放锁,不然容易造成线程死锁、  可以判断锁的状态
    9,数据库隔离级别有哪些,各自的含义是什么,MYSQL默认的隔离级别是是什么。
      1.READ UNCIMMITTED(未提交读)
      2.READ COMMITTED(提交读)
     3.REPEATABLE READ(可重复读)
     4.SERIALIZABLE(可串行化)
      默认是可重复读
    10,请解释如下jvm参数的含义:
    -server -Xms512m -Xmx512m -Xss1024K 
    -XX:PermSize=256m -XX:MaxPermSize=512m -XX:MaxTenuringThreshold=20 XX:CMSInitiatingOccupancyFraction=80 -XX:+UseCMSInitiatingOccupancyOnly。
    -Xms512m JVM最小内存
    -Xmx512m JVM最大内存
    -Xss1024K 每个线程的堆栈大小
    -XX:PermSize=256m  表示非堆区初始内存分配大小,其缩写为permanent size(持久化内存)
    XX:MaxPermSize=512m 表示对非堆区分配的内存的最大上限。
    -XX:MaxTenuringThreshold=20 对象年龄标记次数
    XX:CMSInitiatingOccupancyFraction 是指设定CMS在对内存占用率达到80%的时候开始GC(因为CMS会有浮动垃圾,所以一般都较早启动GC);
    -XX:+UseCMSInitiatingOccupancyOnly 只是用设定的回收阈值(上面指定的70%),如果不指定,JVM仅在第一次使用设定值,后续则自动调整.

  • 相关阅读:
    把mysql数据库生成数据字典,直接可用
    WPF中触发器(Trigger、DataTrigger)使用动画最简单的方式EnterActions和ExitsActions
    WPF将TextBox的边框设为圆角的
    WPF中常用的Window事件
    Windows下搭建Redis集群
    Redis的服务命令(实现开机自启动)
    使用Visual Studio Code搭建PHP调试环境
    PHP生成随机字符串
    MySQL中date类型的空值0000-00-00和00:00:00
    下载Windows版本的Redis
  • 原文地址:https://www.cnblogs.com/root429/p/12799243.html
Copyright © 2011-2022 走看看