zoukankan      html  css  js  c++  java
  • 【java面试题——测试版2】

    Q:对内存溢出的理解,什么情况下会内存溢出,你写代码时遇到过内存溢出吗

    A:个人理解,内存溢出就是可用内存不够了,(它还有个亲戚叫内存泄漏,申请内存用完了不释放,大量内存泄漏就会导致内存溢出)

    可能会出现溢出的情况:

    一次性在内存中处理的数据过多,或者对象调用资源但是最后没有释放,JVM无法回收;也可能是死循环造成的;还有静态集合类,因为静态集合类的生命周期是和jvm一致的,如果其引用的对象一直得不到释放也会造成内存溢出;

    OutofMemoryError....

    第一次遇到内存溢出好像是因为递归吧,没设置结束条件很容易这样。

    Q:jdbc连接数据库的步骤

    A:(啊这,不都是mybatis搞定了吗,现在谁还写老jdbc啊)传统jdbc连接步骤如下:

      注册驱动,Class.forName.....

      设置三个参数:连接(url);用户名,密码

      获取连接:Connection co = DriverManager.getConnection(参数1,参数2,参数3)

      //建立完连接jdbc其实就结束了,剩下就是执行sql语句

      //Connection的对象创建startment语句  :Statement st=conn.createStatement();

      //然后就是执行SQL语句,处理结果集ResultSet:ResultSet rs=st.executeQuery(sql语句),结果集是用来显示的

      

    Q:为什么要分页查询,Mysql如何分页查询?如果有几万条数据不使用分页查询,直接查询可能会有什么后果?

    A:为什么要分页查询:使用分页查询可以节省查询耗费的时间,而且每次“翻页”只查询当前页面的数据,虽然增加了与数据库的交互次数但是每次查询很快很轻便,数据库里的数据量越大优势越明显。

      Mysql如何实现分页查询:

     使用limit:   SELECT * FROM 表名 LIMIT 5,10; // 检索记录行 6-15,5的意思是从第六行开始查询, 10的意思是一次查询十条(行)

      不过太多数据的时候limit也会很慢,而且是偏移量越往后越慢,必须增加索引限定,比如根据唯一主键id查询,或者使用子查询(子查询是在索引上完成的,而普通的查询时在数据文件上完成的,通常来说,索引文件要比数据文件小得多,所以操作起来也会更有效率)

      不优化直接查询那后果可能是几十秒的查询时间。

    Q:判断String中是否包含有其他字符串的方法

    A:可以用IndexOf,假如待测试字符串为a = “I love you”,判断是否包含“love” :打印  a.indexOf("love")  ,应当是待测试字符串中的位置下标

    String a = "I love you";
    System.out.println(a.indexOf("love"));//2
    System.out.println(a.indexOf("you"));//7


    Q:List和set的区别

    A:Set不允许重复对象,而且只能有一个null,存储是无序的;List允许重复对象,可以有多个null,存储顺序有序

    Q:获取map中的key的方法 

    A:for遍历中使用get方法,或者entrySet()方法,或者迭代器

    //<Sting,String>
    HashMap<String,String> hashMap1 = new HashMap<String,String>();
    hashMap1.put("1","a");
    hashMap1.put("2","b");
    hashMap1.put("3","c");
    hashMap1.put("4","d");
    //entryset
    for (Map.Entry<String,String> entry : hashMap1.entrySet()) {//entrySet方法
        String key = entry.getKey();
        String v = entry.getValue();
        System.out.println("------key----"+ key + "------value-----"  +v);
    }
    
    //迭代器遍历法
    System.out.println("迭代器遍历法");
    Iterator<String> iter = hashMap1.keySet().iterator();
    while(iter.hasNext()){
        String key=iter.next();
        String value = hashMap1.get(key);
        System.out.println(key+" "+value);
    }

    Q:linux如何编辑文件

    A: touch hello.c  //创建文件

      vi hello.txt  //进入vi打开文件,

      按a或者i进入文本编辑 

    Ps:也可以用echo命令,或者cat命令

    Q:对反射的理解,反射常用在哪些地方,如何用反射创建对象?

    A:反射是java的一种特性,java是静态语言,不过通过反射可以形成“伪动态”,也就是说可以在程序运行时获得类,类的对象,属性,接口等,并可以进行修改。

      和正常类先实例化后取得实例化对象不同,反射是根据实例化对象获取类的名字,再进行下一步操作。

      每一个类都有一个Class对象,每当编译一个新类就产一个Class对象,可以说,每个Class对象对应的是一个加载到JVM中的.class文件,

      所以,第一步是获取class对象:

        方式一:Class.forName("xxx")

        方式二:对象.GetClass

        方式三:类.class

      第二步就是创建对象:

      方法一:通过newInstence()
      Phone instance1 = (Phone) class1.newInstance();


      方法二:先调用构造器,再通过newInstence()创建
      Constructor<?> constructor = userinfoClass1.getConstructor(String.class,Integer.class);
      UserInfo newInstance = (UserInfo)constructor.newInstance("张三",15);

      System.out.println(newInstance);//UserInfo [name=张三, age=15]

    Q:创建线程的三种方式,如何获取线程的返回值

    A: 方法一:继承Thread类

        public class MyThread extends Thread{ xxx },可以MyThread myThread1 = new MyThread();然后myThread.start()来创建线程

        方法二:使用Runnable接口  

        public class Mythread implements Runnable{ xxx },不能直接调用,需要多一步Thread实例化:

        MyThread myThread2 = new MyThread();
        Thread thread = new Thread(myThread2);

        thread.start();

        方法三:用Callable<V>接口通过FutureTask包装器来创建Thread线程(这种方法有返回值)    

        需要使用FutureTask对象作为Thread对象的target创建并启动新线程。

        调用FutureTask对象的get()方法来获得子线程执行结束后的返回值

        CallableThreadTest ctt = new CallableThreadTest();    FutureTask<Integer> ft = new FutureTask<>(ctt);

      线程开启后可以用对象ft 调用get方法获取返回值

      获取线程返回值:除了上述那个callable接口,还可以人为阻塞线程来获得返回值(fool),休眠,或者join之类的(a.join,可以优先执行a线程)

     

  • 相关阅读:
    7.21 高博教育 数组 内存
    【基础扎实】Python操作Excel三模块
    PAT 甲级 1012 The Best Rank
    PAT 甲级 1011  World Cup Betting
    PAT 甲级 1010 Radix
    链式线性表——实验及提升训练
    循环程序设计能力自测
    链表应用能力自测
    PAT 甲级 1009 Product of Polynomials
    1008 Elevator (20分)
  • 原文地址:https://www.cnblogs.com/dabuliu/p/14518959.html
Copyright © 2011-2022 走看看